1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
|
# LinuxLabs::Настройка виртуальной машины
## Информация
Иногда случается так, что опасение испортить инструмент препятствует его
овладеванию. Разумеется, осторожность и аккуратность в обращении с любым
инструментарием - хорошая привычка, в данном конкретном случае "опасение
испортить" - страх сломать рабочую, хорошо настроенную систему, или, что ещё
хуже, потерять из-за этого данные. Это тем сильнее ограничивает в стремлении
проверить, как работает то или иное действие, и к чему оно приведёт, чем меньше
понятно, что происходит.
Чтобы исключить этот фактор, предполагается использование виртуальных машин.
## Теоретический Минимум (ТеорМин)
Рабочую машину (как правило, аппаратную - ноутбук/ПК), которую вы будете
использовать для прохождения НЛР, принято называть хостовой машиной, или хостом
(**host machine**, **host**). Основная операционная система, установленная на этой
машине, или, как минимум, та, на которой вы будете проходить НЛР, называется
хостовой ОС (**host OS**).
В свою очередь машина и система, в которых вы непосредственно будете выполнять
все задания, и которые не будут привязаны к реальному железу, принято называть
гостевыми (**guest machine/OS**).
На Linux-системах есть два пути использовать гостевые машины: **эмуляция** и
**виртуализация**. На данный момент ключевое различие - тип работы с
пользовательскими запросами и действиями. В случае виртуализации хостовая машина
*программно имитирует работу железа*, на котором запускается с собственным
ядром своя, гостевая, ОС. В случае же эмуляции ядро гостевой ОС особым образом
запускается как процесс в хостовой ОС и все запросы гостевой ОС *выполняет ядро
хостовой машины* - т.е. гостевая ОС не запускается в классическом понимании.
Собственно, поэтому эмуляция более ограниченна - на хостовой ОС можно
эмулировать только родственные ядра гостевых ОС (на Linux-машине можно
эмулировать только ОС, работающие на ядре Linux).
Подробности и разница в этих двух понятиях ещё будут уточняться в следующих ЛР,
а пока что, в первых ЛР, мы будем использовать именно виртуальную, а не
эмулированную машину.
В Linux уществует несколько способов организации работы с виртуальными
машинами:
0. QEMU в ручном режиме
1. Virtual Manager - QEMU-полуавтомат
2. VirtualBox - самый известный, наверное, менеджер виртуальных машин от Oracle
Для начала будем использовать вариант 2, т.к. с ним вы, возможно, уже
сталкивались, да и встречается он чаще остальных в различных курсах и пособиях,
что обеспечивает ему хорошую инормационную базу на StackOverflow и иных
форумах.
## Цель работы
Рабочая "эталонная" виртуальная машина с установленной операционной системой.
## Ход работ
### A. Установка виртуального менеджера
Определите пакетный менеджер вашего дистрибутива (BTW I use Arch). Используя
его, обнаружьте и установите пакет:
`sudo pacman -S virtualbox`
### B. Выбор системы
Я предлагаю использовать Ubuntu Server. Несмотря на мою личную предвзятость к
Ubuntu как к Desktop OS, в качестве начальной серверной системы я предлагаю
использовать именно её. Она достаточно стабильна, своевременно обновляется и
при этом не требует повышенного внимания. Бонусом идёт более широкая поддержка
именно как серверной системы - найти инструкции и обсуждения популярных проблем
касательно серверной части легче именно для Ubuntu.
Берём достаточно свежий [образ](https://ubuntu.com/download/server) (на момент
написания это 22.04.4 LTS) и приступаем к установке
### C. Создание ВМ
#### C.1 Новая ВМ

#### C.2 Метаданные

`ubuntu_ro` - означает `ubuntu_r`[ead]`o`[nly]. Это не накладывает никаких
ограничений с точки зрения VirtualBox, это семантическое обозначения для нас.
При работе с виртуальными машинами вам иногда будет необходимо создавать "с
нуля" несколько "чистых" машин. Гораздо удобнее вместо создания с нуля каждой
машины клонировать некоторую эталонную. Также это поможет быстро получить новую
машину в случае поломки. Об этом будет сказано подробнее в следующей
лабораторной работе.
Значение "Folder" можно оставить по умолчанию. Оно обозначает место, где будут
храниться файлы данной ВМ.
"ISO Image" - образ, который был получен в предыдущих шагах.
Флажок "Skip Unattended Installation". Некоторые образы виртуальных машин в
VirtualBox позволяют устаналивать их в практически полностью автоматическом
режиме. Но один из девизов данного НЛР - "Мы не ищем лёгких путей". К тому же,
в процессе изучения все новые элементы, с которыми вы сталкиваетесь, должны
привязываться к чему-то, с чем вы уже встречались, чтобы картина происходящего
выглядела цельно, а не представляла собой раздробленный архипелаг островов
обрывочных знаний, мало связанных между собой. По этим причинам при первой
встрече с новыми действиями и темами, данные ЛР будут концентрироваться на
минимальном количестве автоматизации в них.
#### C.3 Настройки железа

Мы используем систему виртуализации, поэтому нужно определить параметры
аппаратной части (железа), на котором будет запущена наша гостевая ОС. Будем
использовать минимальные параметры, которые удовлетворяют системным требованиям
выбранного образа - 1 ядро и 1 Гб ОЗУ.
> При возможности, лучше выделить 3+Гб ОЗУ и 2+ядра на каждую машину. Имейте в
> виду, что для некоторых лабораторных работ вам может потребоваться запустить
> 2-4 виртуальные машины одновременно.
Флажок "Enable EFI" в данной серии лабораторных работ нам не потребуется.
#### C.4 Настройки ханилища

Для ОС нужно место на жёстком (в нашем случае - виртуальном) диске (ПЗУ). 1 из 3
вариантов, которые предлагает VirtualBox - создание нового диска прямо в ходе
процесса настройки.
Минимальные требования для выбранного образа 2.5Гб. Поскольку в ходе следующих
ЛР будет требоваться установка различного ПО, увеличим объём.
> 8Гб - оптимальное, на мой взгляд, значение, которое позволит не беспокоиться
>о свободном месте для установки пакетов и в том же время достаточно невелико,
>чтобы не создавать трудностей для современных накопителей. При ограниченности
>доступного свободного пространства размер можно сократить до 6Гб и 4Гб.
>Использовать размер менее 4Гб не рекомендуется.
Флажок "Pre-allocate Full Size" отвечает за тип выделения места. Если сделать
его активным в процессе установки, виртуальный диск будет занимать сразу столько
места на реальном накопителе, сколько вы указали при создании. Это позволит
избежать ошибок в работе ВМ в случае, если свободное место на реальном
накопителе будет заканчиваться. На практике в таких случаях ВМ
"приостанавливается". Если же флажок неактивен, изначальным объём диска будет
равен фактически занятому месту и будет постепенно расти по мере увеличения
количества файлов и данных в гостевой ОС, пока не достигнет максимального
размера.
#### C.5 Virtuality!
Если всё было сделано правильно, VirtualBox покажет окно с выдержкой из
конфигурации VM. После нажимаем на "Finish" - и готово.
### D. Запуск

### E[rror]. Веселье начинается
Вероятно, вам повезло, и вы не столкнулись с трудностями при запуске, однако я,
как и большинство тех, кто шли таким же путём, столкнулся со следующей
проблемой:

В моём случае помогла установка пакета "headers" для моего ядра и dkms для
VirtualBox:
`sudo pacman -S virtualbox-host-dkms linux-lts-headers`
Все термины будут пояснены позже, на данный же момент должно быть достаточно
следующих пояснений: для пакета ядра Linux, которое вы используете на своей
системе, как правило, существует отельный пакет, предоставляющий заголовочные
файлы. В некоторых дистрибутивах эти два пакета не разделяются. Я использую
ArchLinux на ядре
[`linux-lts`](https://archlinux.org/packages/core/x86_64/linux-lts/), поэтому
устанавливал [`linux-lts-headers`](https://archlinux.org/packages/core/x86_64/linux-lts-headers/).
После окончания установки пакетов - `reboot` - готово, проблема решена.
> Данная проблема, на самом деле, не так однозначна. Если вы используете другой
>дистрибутив и/или вам пришлось предпринять другие шаги для решения проблемы,
>пожалуйста, сообщите мне и я включу ваш способ в данную ЛР.
### F. Загрузка
После решения первой проблемы (поздравляю!) запуск ВМ вызовет новое окно, в
котором спустя некоторое время появится окно загрузчика:

### G. Установка
#### G.1 Локали
Когда система загрузится, Ubuntu сразу начнёт процесс преднастройки. Для
удобства и привыкания к реальным условиям выбираем язык Egnlish:

Язык, как и клавиатура, формат даты и времени и др., относится к т.н. локалям
(англ. locale, locales). Они определяют поведения пользовательского ввода и даже
могут влиять на работу и производительность определённого ПО.
Кстати, вот и клавиатура:

#### G.2 Тип установки
Читаем комментарии и выбираем первый варинт установки. Флажок оставляем
неотмеченным - он отвечает за использование некоторых проприетарных драйверов.
Они не требуется в подавляющем большинстве случаев.

#### G.3 Сеть
В сети пока что предоставляем установщику выбор по умолчанию и нажимаем далее.

Если вы знаете, что вам нужен прокси, укажите его на этом этапе. Во всех
остальных случаях, идём дальше.

#### G.4 Зеркала
После этого установщик попытается самостоятельно проверить доступность **зеркал**
и их состояние. Если всё пошло по плану, появится надпись `This mirror location
passed tests`.

> Для получения обновлений Linux-системы используют **репозитории**, в которых
>содержатся пакеты (программы, библиотеки и т.д.) и вся необходимая сопутствующая
>информация. На популярные репозитории приходится очень большая нагрузка. Чтобы
>избежать отказа оборудования или организации слишком сложной системы,
>применяется практика зеркалирования: для основного репозитория создаётся полная
>копия основного репозитория (поэтому и "зеркало", англ. **mirror**), на которую
>по определённому принципу (чаще всего, географическому, перенаправляется часть
>запросов.
#### G.5 ВМ-Диски
При разметке в данной серии ЛР доверимся установщику. Флажок "Set up this disk
as an LVM group" отвечает за ещё один уровень абстракции дискового пространства
(эта тема будет разбираться в следующих ЛР).

Внимательно смотрим, подтверждаем.

Натыкаемся на справедливое негодование системы. Внимательно читаем.

Преодолеваем его и продолжаем процесс.
#### G.6 Данные для входа

"Your name" - отображаемое в GUI и т.д. имя пользователя. _Зачем это нужно?.._
"Your servers name" - **hostname**, **имя хоста** сервера. Это имя отображается
в ряде программ и утилит, например, анализирующих сеть или подключенные
устройства. Иными словами, как и написано мелким текстом под полем, это - имя
вашего компьютера, которое могут использовать другие машины при общении с ним.
"Pick a username" - фактическое имя пользователя, которое будет использоваться
при логине и в некоторых файлах конфигурации.
Пароль не нужно делать большим и трудным - он относится к виртуальной машине, в
данной серии ЛР ВМ практически не будут общаться с внешним миром, за исключением
установки пакетов и нечастых сетевых подключений.
#### G.7 Пропускаем навязчивую рекламу

#### G.8 Автоустановка
Снимаем флажок установки OpenSSH-сервера, так как это тема следующей
лабораторной работы.

Снимаем флажки установки сервисов, так как некоторые из них - темы
заключительных ЛР этой серии.

#### G.9 Завершение установки
Если вы ещё успеваете, можете отменить установку обновления - мы сделаем это
вручную чуть позже.

Если не успели - ничего страшного.
Дожидаемся автоматической перезагрузки.
> В зависимости от выделенных ресурсов, возможно, придётся некоторое время
> подождать.
### H. Извлечение установочного диска
Система-установщик, которой мы только что пользовались, была подключена к нашей
системе как внешний диск и всё ещё подключена. А из-за того, что по умолчанию
внешние диски имеют бОльший приоритет, система продолжает загружаться с внешнего
диска.

Отключаем внешний диск:


Нажимаеем ПКМ на пиктограмме диска:

Снимаем флажок.
Перезагружаем машину с помощью `Machine->Reset` в левой верхней части окна.
### I. Загрузка гостевой ОС
В Ubuntu server по умолчанию логин никак не отделён от системного вывода,
поэтому вполне возможно, что ввод будет засыпан сообщениями о загрузке,
например, так:

Вопрос решается нажатием "Enter"/"Ввод" несколько раз:

### J. Вход
Вводим данные указанные на этапе [G.6](#g.6-данные-для-входа).
Готово!

### K. Перед завершением лабораорной работы обновим пакеты.
Для обращения к зеркалам и реопзиториям с приложениями в Ubuntu используется
пакетный менеджен APT. Так как установка пакетов - ответственное действие,
которое лучше не доверять всем пользователям. В связи с этим по умолчанию
устанавливать пакеты может только **суперпользователь** (англ. **superuser**).
Те же пользователи, которые таки должны иметь возможность выполнять
администраторские функции, используют команду `sudo` - **S**uper**U**ser**DO**.
Для современного системного администрирования стандартной практикой стал отказ
от использования пользователя `root` при логине. Для логина в машину
используется пользователь с обычной учётной записью и правами на использование
`sudo`, все команды, требующие администраторских привилегий, выполняются с
приставкой `sudo`.
> Мир прав и политик безопасности Linux гораздо обширнее. В частности, есть
> механизмы, позволяющие повысить защищённость системы при использовании `sudo`
> или облегчить администратору использование `root`-прав. Они будут рассмотрены
> позднее.
Сначала нужно обновить информацию о пакетах, которая содержится в удалённом
репозитории. Это делается с помощью команды:
`sudo apt update`

Если на данном этапе возникли ошибки, связанные с cdrom, игнорируйте их, они
будут решены чуть позднее.
После выполнения этой команды наши локальные базы данных синхронизированы с
удалёнными репозиториями. Теперь можно обновить непосредственно пакеты:
`sudo apt upgrade`
Пакетный менеджер любезно уточнит, хотите ли вы продолжить:

Здесь можно явно ввести `y` или `Y`, однако, как правило, если одна из букв
выбора - заглавная, при нажатии "Enter"/"Ввод" автоматически будет выбрана она.
Также, эту проверку можно отключить, используя флаг `-y`:
`sudo apt upgrade -y`
Если в процессе обновления пакетов появляются новые диалоговые окна, нажимайте
"Ok".
### L. Выключение
Чтобы выключить машину наиболее правильно, воспользуйтесь одной из команд:
`shutdown now`
или
`systemctl poweroff`
<div style="margin-top: 100px;">
<p xmlns:cc="http://creativecommons.org/ns#" xmlns:dct="http://purl.org/dc/terms/"><span property="dct:title">LinuxLabs</span> by <span property="cc:attributionName">Mikhail Kobuk</span> is licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-SA 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1" alt=""></a></p>
</div>
|