--- /dev/null
+# 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 Новая ВМ
+
+![New VM button](./new_vm.png)
+
+#### C.2 Метаданные
+
+![VM confiuration](./vm_config.png)
+
+
+`ubuntu_ro` - означает `ubuntu_r`[ead]`o`[nly]. Это не накладывает никаких
+ограничений с точки зрения VirtualBox, это семантическое обозначения для нас.
+При работе с виртуальными машинами вам иногда будет необходимо создавать "с
+нуля" несколько "чистых" машин. Гораздо удобнее вместо создания с нуля каждой
+машины клонировать некоторую эталонную. Также это поможет быстро получить новую
+машину в случае поломки. Об этом будет сказано подробнее в следующей
+лабораторной работе.
+
+Значение "Folder" можно оставить по умолчанию. Оно обозначает место, где будут
+храниться файлы данной ВМ.
+
+"ISO Image" - образ, который был получен в предыдущих шагах.
+
+Флажок "Skip Unattended Installation". Некоторые образы виртуальных машин в
+VirtualBox позволяют устаналивать их в практически полностью автоматическом
+режиме. Но один из девизов данного НЛР - "Мы не ищем лёгких путей". К тому же,
+в процессе изучения все новые элементы, с которыми вы сталкиваетесь, должны
+привязываться к чему-то, с чем вы уже встречались, чтобы картина происходящего
+выглядела цельно, а не представляла собой раздробленный архипелаг островов
+обрывочных знаний, мало связанных между собой. По этим причинам при первой
+встрече с новыми действиями и темами, данные ЛР будут концентрироваться на
+минимальном количестве автоматизации в них.
+
+#### C.3 Настройки железа
+
+![VM hardware](./vm_hw.png)
+
+Мы используем систему виртуализации, поэтому нужно определить параметры
+аппаратной части (железа), на котором будет запущена наша гостевая ОС. Будем
+использовать минимальные параметры, которые удовлетворяют системным требованиям
+выбранного образа - 1 ядро и 1 Гб ОЗУ.
+
+> При возможности, лучше выделить 3+Гб ОЗУ и 2+ядра на каждую машину. Имейте в
+> виду, что для некоторых лабораторных работ вам может потребоваться запустить
+> 2-4 виртуальные машины одновременно.
+
+Флажок "Enable EFI" в данной серии лабораторных работ нам не потребуется.
+
+#### C.4 Настройки ханилища
+
+![VM disk](./vm_hd.png)
+
+Для ОС нужно место на жёстком (в нашем случае - виртуальном) диске (ПЗУ). 1 из 3
+вариантов, которые предлагает VirtualBox - создание нового диска прямо в ходе
+процесса настройки.
+
+Минимальные требования для выбранного образа 2.5Гб. Поскольку в ходе следующих
+ЛР будет требоваться установка различного ПО, увеличим объём.
+
+> 8Гб - оптимальное, на мой взгляд, значение, которое позволит не беспокоиться
+>о свободном месте для установки пакетов и в том же время достаточно невелико,
+>чтобы не создавать трудностей для современных накопителей. При ограниченности
+>доступного свободного пространства размер можно сократить до 6Гб и 4Гб.
+>Использовать размер менее 4Гб не рекомендуется.
+
+Флажок "Pre-allocate Full Size" отвечает за тип выделения места. Если сделать
+его активным в процессе установки, виртуальный диск будет занимать сразу столько
+места на реальном накопителе, сколько вы указали при создании. Это позволит
+избежать ошибок в работе ВМ в случае, если свободное место на реальном
+накопителе будет заканчиваться. На практике в таких случаях ВМ
+"приостанавливается". Если же флажок неактивен, изначальным объём диска будет
+равен фактически занятому месту и будет постепенно расти по мере увеличения
+количества файлов и данных в гостевой ОС, пока не достигнет максимального
+размера.
+
+#### C.5 Virtuality!
+
+Если всё было сделано правильно, VirtualBox покажет окно с выдержкой из
+конфигурации VM. После нажимаем на "Finish" - и готово.
+
+### D. Запуск
+
+![VM start](./vm_start.png)
+
+### E[rror]. Веселье начинается
+
+Вероятно, вам повезло, и вы не столкнулись с трудностями при запуске, однако я,
+как и большинство тех, кто шли таким же путём, столкнулся со следующей
+проблемой:
+
+![VM error](./vm_start_err.png)
+
+В моём случае помогла установка пакета "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. Загрузка
+
+После решения первой проблемы (поздравляю!) запуск ВМ вызовет новое окно, в
+котором спустя некоторое время появится окно загрузчика:
+
+![VM loader](./vm_in_setup.png)
+
+### G. Установка
+
+#### G.1 Локали
+
+Когда система загрузится, Ubuntu сразу начнёт процесс преднастройки. Для
+удобства и привыкания к реальным условиям выбираем язык Egnlish:
+
+![VM setup: language](./vm_in_setup_lang.png)
+
+Язык, как и клавиатура, формат даты и времени и др., относится к т.н. локалям
+(англ. locale, locales). Они определяют поведения пользовательского ввода и даже
+могут влиять на работу и производительность определённого ПО.
+
+Кстати, вот и клавиатура:
+
+![VM setup: kbd](./vm_in_setup_kbd.png)
+
+#### G.2 Тип установки
+
+Читаем комментарии и выбираем первый варинт установки. Флажок оставляем
+неотмеченным - он отвечает за использование некоторых проприетарных драйверов.
+Они не требуется в подавляющем большинстве случаев.
+
+![VM setup: type](./vm_in_setup_type.png)
+
+#### G.3 Сеть
+
+В сети пока что предоставляем установщику выбор по умолчанию и нажимаем далее.
+
+![VM setup: net](./vm_in_setup_net.png)
+
+Если вы знаете, что вам нужен прокси, укажите его на этом этапе. Во всех
+остальных случаях, идём дальше.
+
+![VM setup: net: proxy](./vm_in_setup_net_proxy.png)
+
+#### G.4 Зеркала
+
+После этого установщик попытается самостоятельно проверить доступность **зеркал**
+и их состояние. Если всё пошло по плану, появится надпись `This mirror location
+passed tests`.
+
+![VM setup: mirrors](./vm_in_setup_mirrors.png)
+
+> Для получения обновлений Linux-системы используют **репозитории**, в которых
+>содержатся пакеты (программы, библиотеки и т.д.) и вся необходимая сопутствующая
+>информация. На популярные репозитории приходится очень большая нагрузка. Чтобы
+>избежать отказа оборудования или организации слишком сложной системы,
+>применяется практика зеркалирования: для основного репозитория создаётся полная
+>копия основного репозитория (поэтому и "зеркало", англ. **mirror**), на которую
+>по определённому принципу (чаще всего, географическому, перенаправляется часть
+>запросов.
+
+#### G.5 ВМ-Диски
+
+При разметке в данной серии ЛР доверимся установщику. Флажок "Set up this disk
+as an LVM group" отвечает за ещё один уровень абстракции дискового пространства
+(эта тема будет разбираться в следующих ЛР).
+
+![VM setup: disk](./vm_in_setup_disk.png)
+
+Внимательно смотрим, подтверждаем.
+
+![VM setup: disk: confirm](./vm_in_setup_disk_confirm.png)
+
+Натыкаемся на справедливое негодование системы. Внимательно читаем.
+
+![VM setup: disk: confirm: continue](./vm_in_setup_disk_confirm_continue.png)
+
+Преодолеваем его и продолжаем процесс.
+
+#### G.6 Данные для входа
+
+![VM setup: credentials](./vm_in_setup_creds.png)
+
+"Your name" - отображаемое в GUI и т.д. имя пользователя. _Зачем это нужно?.._
+"Your servers name" - **hostname**, **имя хоста** сервера. Это имя отображается
+в ряде программ и утилит, например, анализирующих сеть или подключенные
+устройства. Иными словами, как и написано мелким текстом под полем, это - имя
+вашего компьютера, которое могут использовать другие машины при общении с ним.
+"Pick a username" - фактическое имя пользователя, которое будет использоваться
+при логине и в некоторых файлах конфигурации.
+Пароль не нужно делать большим и трудным - он относится к виртуальной машине, в
+данной серии ЛР ВМ практически не будут общаться с внешним миром, за исключением
+установки пакетов и нечастых сетевых подключений.
+
+#### G.7 Пропускаем навязчивую рекламу
+
+![VM setup: skip ad](./vm_in_setup_skipad.png)
+
+#### G.8 Автоустановка
+
+Снимаем флажок установки OpenSSH-сервера, так как это тема следующей
+лабораторной работы.
+
+![VM setup: SSH](./vm_in_setup_ssh.png)
+
+Снимаем флажки установки сервисов, так как некоторые из них - темы
+заключительных ЛР этой серии.
+
+![VM setup: services](./vm_in_setup_services.png)
+
+#### G.9 Завершение установки
+
+Если вы ещё успеваете, можете отменить установку обновления - мы сделаем это
+вручную чуть позже.
+
+![VM setup: cancel update](./vm_in_setup_noupd.png)
+
+Если не успели - ничего страшного.
+
+Дожидаемся автоматической перезагрузки.
+
+> В зависимости от выделенных ресурсов, возможно, придётся некоторое время
+> подождать.
+
+### H. Извлечение установочного диска
+
+Система-установщик, которой мы только что пользовались, была подключена к нашей
+системе как внешний диск и всё ещё подключена. А из-за того, что по умолчанию
+внешние диски имеют бОльший приоритет, система продолжает загружаться с внешнего
+диска.
+
+![Loader again](./vm_in_loader_again.png)
+
+Отключаем внешний диск:
+
+![Remove disk: menu](./vm_in_rm_disk_menu.png)
+
+![Remove disk](./vm_in_rm_disk.png)
+
+Нажимаеем ПКМ на пиктограмме диска:
+
+![Remove disk: dropdown](./vm_in_rm_disk_rmd.png)
+
+Снимаем флажок.
+
+Перезагружаем машину с помощью `Machine->Reset` в левой верхней части окна.
+
+### I. Загрузка гостевой ОС
+
+В Ubuntu server по умолчанию логин никак не отделён от системного вывода,
+поэтому вполне возможно, что ввод будет засыпан сообщениями о загрузке,
+например, так:
+
+![Login message flood](./vm_in_msg_flood.png)
+
+Вопрос решается нажатием "Enter"/"Ввод" несколько раз:
+
+![Login message flood resolved](./vm_in_msg_flood_enter.png)
+
+### J. Вход
+
+Вводим данные указанные на этапе [G.6](#g.6-данные-для-входа).
+
+Готово!
+
+![Logged in](./vm_in_logged_in.png)
+
+### K. Перед завершением лабораорной работы обновим пакеты.
+
+Для обращения к зеркалам и реопзиториям с приложениями в Ubuntu используется
+пакетный менеджен APT. Так как установка пакетов - ответственное действие,
+которое лучше не доверять всем пользователям. В связи с этим по умолчанию
+устанавливать пакеты может только **суперпользователь** (англ. **superuser**).
+Те же пользователи, которые таки должны иметь возможность выполнять
+администраторские функции, используют команду `sudo` - **S**uper**U**ser**DO**.
+
+Для современного системного администрирования стандартной практикой стал отказ
+от использования пользователя `root` при логине. Для логина в машину
+используется пользователь с обычной учётной записью и правами на использование
+`sudo`, все команды, требующие администраторских привилегий, выполняются с
+приставкой `sudo`.
+
+> Мир прав и политик безопасности Linux гораздо обширнее. В частности, есть
+> механизмы, позволяющие повысить защищённость системы при использовании `sudo`
+> или облегчить администратору использование `root`-прав. Они будут рассмотрены
+> позднее.
+
+Сначала нужно обновить информацию о пакетах, которая содержится в удалённом
+репозитории. Это делается с помощью команды:
+
+`sudo apt update`
+
+![_sudo apt update_](./vm_in_upd.png)
+
+Если на данном этапе возникли ошибки, связанные с cdrom, игнорируйте их, они
+будут решены чуть позднее.
+
+После выполнения этой команды наши локальные базы данных синхронизированы с
+удалёнными репозиториями. Теперь можно обновить непосредственно пакеты:
+
+`sudo apt upgrade`
+
+Пакетный менеджер любезно уточнит, хотите ли вы продолжить:
+
+![_sudo apt upgrade_](./vm_in_continue)
+
+Здесь можно явно ввести `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>