Короче, что такое виртуальность? Это когда ты делаешь вид, что работаешь в Интернете, а на самом деле смотришь сериал.
(С) Балобоба, искусственный интеллект Яндекса.
Одной из важнейших технологий, стоящей за улучшениями в предоставлении многих сервисов, является визуализация. И Linux - та операционная система, на которой работает большинство виртуальных рабочих нагрузок. Она позволяет эффективно использовать вычислительные ресурсы, автоматически выделяя их из одного физического сервера или целого пула таких серверов на время выполнения определённых задач и высвобождая их, когда задача выполнена. Можно безопасно разделять память, хранилище и сетевые средства высокопроизводительных машин между несколькими сервисами и даже создавать на их основе экземпляры виртуальных серверов. Услуги по их предоставлению называются арендой VPS (Virtual Private Server) и VDS (Virtual Dedicated Server), которые отличаются друг от друга используемыми технологиями виртуализации.
В настоящее время существует два основных средства виртуализации:
- Гипервизоры - в той или иной степени управляют оборудованием хост-системы, предоставляя каждой гостевой ОС необходимые ей ресурсы. Гостевые машины запускаются как системные процессы, но с виртуализированным доступом к аппаратным ресурсам. Этот подход реализует полную (аппаратную) виртуализацию, в частности называемую KVM (Kernel-based Virtual Machine) и позволяет запускать виртуальные машины с отдельными экземплярами операционной системы на физическом сервере. Каждая виртуальная машина KVM имеет собственное виртуальное аппаратное обеспечение и ядро операционной системы. Часто именно эта технология подразумевается, когда речь идёт о VDS-сервере. Существует различные реализации технологии этого типа - VMware ESX, Xen, Microsoft Hyper-V, Virtual Box, Gnome Boxes, QEMU и т.д.
- Контейнеры - чрезвычайно лёгкие виртуальные серверы, которые вместо того, чтобы работать как полноценные операционные системы, совместно используют ядро своей хостовой машины. Контейнеры могут быть построены на базе текстовых сценариев, созданы и запущены за считанные секунды, а также легко доступны для совместного использования в сетях. Самая известная реализация контейнерной технологии - Docker. Существуют также и другие - LXC (Linux Container), OpenVZ. Последняя часто ассоциируется с сервисами VPS, позволяя запускать несколько изолированных экземпляров операционной системы на одном физическом сервере. Каждый контейнер OpenVZ использует общее ядро операционной системы хоста, что делает его более эффективным по ресурсам и обеспечивает более высокую плотность виртуализации. Однако, из-за общего ядра, контейнеры в OpenVZ могут быть совместимы только с одной операционной системой.
Полномасштабные гипервизоры, такие как Xen и KVM обычно используются для развёртывания на уровне предприятия. Для тестирования и экспериментов лучше подходят Virtual Box и Gnome Boxes. Контейнерные технологии, такие как LXC и Docker часто используются для обкатки новых технологий и безопасного создания стеков программного обеспечения ОС.
Установка данных средств на компьютер с Linux мало чем отличается от установки других программ:
- установить Virtual Box в Ubuntu:
sudo apt install virtualbox
- установить Gnome Boxes:
sudo apt install gnome-boxes
- установить LXC:
sudo apt install lxc
Но можно пощупать виртуализацию за вымя и обратившись к поставщикам соответствующих услуг. Благо в настоящее время имеется их широкий выбор по ценам и возможностям. Поиск в Яндексе привёл меня (после фильтрации по минимальной цене), например, к таким результатам:
1. Timeweb Cloud —IT-решения в облаке
https://timeweb.cloud/
2. ESTT - услуги дата-центра, связи и бизнес-решения
https://estt.ru/
3. 4VPS - услуги хостинга, аренда VPS/VDS и выделенных серверов
https://4vps.su/
Если бы мне нужен был сервер для реальных задач, конечно же были бы другие критерии выбора помимо цены, но для целей обучения, на мой взгляд именно минимизация расходов должна быть в приоритете. Поэтому в данном случае мой выбор - 4VPS, где и будет далее рассмотрен процесс установки Linux с нуля и его настройки в что-то пригодное для практики.
В качестве дистрибутива для оттачивания навыков администрирования такого сервера, на мой взгляд, идеально подходит Arch Linux, поскольку пользователю по умолчанию предлагается минимальная система, в которую всё что ему понадобится добавляется самостоятельно.
Итак, чтобы приобщиться к технологиям виртуализации, регистрируюсь на странице https://4vps.su/account/login и оплачиваю по тарифу LP-cx01 (80 рублей/месяц) аренду VPS на базе сервера 2xE5-2670v2, расположенного в Новосибирске.
В процессе оформления заказа можно выбрать вариант предустановленной ОС на сервере. Но я выбрал NoOS специально, чтобы опробовать возможность установки произвольного образа.
Чтобы заказ состоялся, на счету клиента должны быть тити-мити в достаточном количестве. Это можно организовать посредством банковских карт, СБП и электронных кошельков.
И вот я захожу на страницу доступных мне серверов. Там я вижу различные пункты меню из которых меня пока что интересует как раз открытая: Сервера. То что мне нужно - название моего сервера: "Inventive-ink-service". Это ссылка, нажав на которую можно открыть страницу с подробной информацией о нём и настройками. Здесь есть одна полезная на текущий момент кнопка: "Перейти в панель VM", её-то я и нажимаю. В результате в отдельной вкладке браузера открывается Страница VMmanger для управления сервером (кстати, он открывается в браузере Chromium, но почему-то не в браузере Firefox). Здесь тоже есть ссылка с названием моего сервера. Если её нажать, то на странице появится информация об уровне использования доступных вычислительных ресурсов (vCPU, RAM, Storage), также выделенный IP адрес, доменное имя, установленная ос и тип кластера - KVM.
Но пока что более важной для продолжения работы является кнопка "Parameters". Если на неё нажать появятся дополнительные пункты меню, позволяющие уточнить информацию и произвести настройки. Конкретно пригодиться пункт "IP adresses", нажав на который можно узнать IP-адрес, маску и шлюз, которые отдельно нигде больше не сообщаются, а для настройки сети они нужны.
Чтобы установить дистрибутив, нужно сначала заиметь какой-нибудь ISO-образ и смонтировать его.
Подходящий образ можно найти на зеркале Яндекса:
https://mirror.yandex.ru/archlinux/iso/2023.07.01/archlinux-x86_64.iso
Но скачивать его не нужно, достаточно будет указать ссылку. Для этого на страничке VMmanager нужно нажать кнопку "Menu" в правом верхнем углу и выбрать пункт "Mount ISO-image". Когда процесс монтирования звершится, в столбце статус появится надпись: "ISO-image is mounted". После этого нужно снова нажать "Menu" и выбрать пункт "VNC", для того чтобы подключиться к своему серверу для работы в режиме командной строки.
Запустится копия окна терминала в браузере, активировать которое можно наведя курсор мыши в эту область и сделав щелчок левой клавишей (если курсора не видно, это не значит что его нет). После этого нужно настроить сеть, поскольку по умолчанию DHCP сервис не настроен как надо. Это можно сделать с помощью команды ip.
Вводим сначала ip a, чтобы узнать доступные сетевые интерфейсы и их состояние. Помимо петли lo имеется ens3, который не имеет IP адреса и вообще выключен.
Затем добавляем к нему свой IP-адрес, маску, шлюз:
ip addr add 193.233.18.65/24 dev ens3
ip route add default via 193.233.18.1
Включаем интерфейс:
ip link set dev ens3 up
Проверяем что получилось, введя команду: ping -c 5 archlinux.org.
Сеть работает, значит всё необходимое для начала установки имеется.
Добавим русскую раскладку клавиатуры: loadkeys ru
И загрузим шрифт с поддержкой русского языка:
setfont cyr-sun16
Включаяем синхронизацию времени через интернет:
timedatectl set-ntp true
Устанавливаем синхронизацию времени через Интернет:
timedatectl set-ntp true
Устанавливаем часовой пояс:
timedatectl set-timezone Europe/Moscow
Для проверки времени используется команда:
timedatectl status
Теперь можно переходить к более приземлённым вещам - разметке диска и установке на него важных программ.
Для начала нужно заглянуть в каталог /dev чтобы узнать, что там у нас имеется. То что надо для последующих действий - блочное устройство vda - это выделенный моему серверу диск на 5GB (убедиться в том, что это именно он можно с помощью команды lsblk).
Для подготовки этого диска к использованию я скормлю его программе parted: parted /dev/vda
Запустится диалоговый режим работы этой программы. В нём можно создавать и удалять разделы диска, присваивать им типы и названия и т.д. Все изменения происходят сразу же, поэтому нужно внимательно смотреть что будет введено. Задача состоит в том чтобы создать три раздела: корневой (root) для системы, подкачки (swap) и загрузочный (boot).
Вводим команды:
mkpart primary ext4 0% 4096M
mkpart primary linux-swap 4096M 5360M
mkpart primary ext2 5360M - 0M
name 1 root
name 2 swap
name 3 boot
set 1 boot on
Проверяем что получилось, введя команду print.
Выходим, введя команду quit
Программа подсказывает что надо сделать дальше: "You may need to update /etc/fstab". Но мы пойдём другим путём.
Сначала выполним форматирование корневого и загрузочного разделов:
mkfs -t ext4 /dev/vda1
mkfs -t ext2 /dev/vda3
Инициализируем и включаем файл подкачки:
mkswap /dev/vda2
swapon /dev/vda2
Теперь смонтируем корневой раздел /dev/vda1 в каталог /mnt:
mount /dev/vda1 /mnt
Во время установки из интернета загружаются пакеты, для ускорения загрузки которых рекомендуется выбрать географически ближайший сервер-зеркало, чтобы загрузка происходила быстрее. Его можно указать в файле /etc/pacman.d/mirrorlist. Чем выше в списке расположен сервер, тем выше его приоритет, поэтому свою запись нужно разместить в первой строке.
Добавим первой строкой зеркало Yandex:
Server = https://mirror.yandex.ru/archlinux/$repo/os/$arch
Перед непосредственно установкой, во избежание ошибок нужно обновить состояние gpg-ключей:
killall gpg-agent
mkdir -p ~/.gnupg/private-keys-v1.d
chmod 700 ~/.gnupg/private-keys-v1.d
gpg --refresh-keys
pacman-key --init && pacman-key --populate
pacman-key --refresh-keys
Если всё прошло без ошибок, то подготовительная часть окончена.
Теперь можно выполнить установку основных пакетов base, для этого выполните команду:
pacstrap /mnt base linux linux-firmware
Теперь дошла очередь и до файла fstab:
genfstab -L /mnt > /mnt/etc/fstab
cat /mnt/etc/fstab
Система установлена и для её дальнейшей настройки нужно войти в неё, но без перезагрузки, потому что загрузчик и сеть в ней ещё не готовы.Для этого можно воспользоваться скриптом arch-chroot, чтобы сменить корневой каталог. Мы переключимся на каталог /mnt, в который у нас примонтирован корневой раздел диска.
Вводим команду: arch-chroot /mnt
По умолчанию в системе отсутствует такая полезная программа как mc.
Для её установки необходимо выполнить команду:
pacman -S mc
Также будет не лишним сразу установить клиентскую программу dhcpcd для автоматического подключения к сети:
pacman -S dhcpcd
Настроим часовой пояс:
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Далее необходимо настроить способ синхронизации системного времени между перезагрузками. Есть два способа UTC и localtime. В данном случае можно брать utc:
hwclock --systohc --utc
Язык, который использует система, определяется локалью. Помимо языка интерфейса локаль определяет и форматы чисел, времени, даты и некоторые другие региональные особенности. Для поддержки русского и/или других языков необходимо раскомментировать соответствующие строки (локали) в файле /etc/locale.gen.
Открываем файл для редактирования:
mcedit /etc/locale.gen
Я раскомментировал строки:
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
Теперь генерируем локали. Для этого выполняем команду:
locale-gen
Включаем русский язык:
echo "LANG=ru_RU.UTF-8" > /etc/locale.conf
Также добавим русскую раскладку клавиатуры для консоли и шрифт с поддержкой кириллицы:
mcedit /etc/vconsole.conf
KEYMAP=ru
FONT=UniCyr_8x16
Все доступные шрифты можно найти в папке:
/usr/share/kbd/consolefonts/
Зададим имя компьютера:
echo "Inventive-ink-service" > /etc/hostname
Теперь добавим имя нашего компьютера в файл /etc/hosts:
mcedit /etc/hosts
127.0.0.1 localhost
::1 localhost
193.233.18.65 Inventive-ink-service.localdamin Inventive
В некоторых случаях ядру необходима начальная файловая система initcpio. Arch Linux не настроен, чтобы работать без этого образа, поэтому его нужно создать:
mkinitcpio -plinux
Чтобы войти в систему, также нужен как минимум задать пароль суперпользователя. Для этого выполним команду:
passwd
Вводим пароль и подтверждение пароля.
Также не лишним будет добавить обычного пользователя для работы в системе. Добавим его:
useradd -m -g users -G wheel -s /bin/bash user1
Здесь -g указывает основную группу, -G - дополнительные, группа wheel даёт возможность использовать команду sudo, больше пока не нужно. Параметр -s задаёт командную оболочку, а последний параметр - имя пользователя.
Теперь необходимо создать пароль для этого пользователя:
passwd user1
Заключительные штрихи - устанавливаем загрузчик:
pacman -S grub
grub-install /dev/vda
Создаём конфигурационный файл загрузчика:
grub-mkconfig -o /boot/grub/grub.cfg
Выходим из окружения chroot, выполнив команду:
exit
Перезагружаем компьютер, выполнив:
reboot
Теперь возвращаемся на странуцу VManager и выбираем пункт меню "Stop". Размонтируем ISO-образ, не забыв снять галочку с пункта, указывающего на то, что система вернётся в изначальное состояние.
После этого заново запускаем сервер. Покдючаемся к нему по VNC и проверяем работоспособность.
Для начала что там с сетью:
ip a
Видим, что сеть не настроена. Поэтому открываем файл dhcpcd.conf и вносим в него необходимые правки:
mcedit /etc/dhcpcd.conf
И дописываем в конец этого файла строчки:
noipv6rs
noipv6
static ip_address=193.233.18.65/24
static_routers=193.233.18.1
Запускаем серврвис dhcpcd:
systemctl start dhcpcd.service
Включаем его в автозагрузку:
systemctl enable dhcpcd.service
Проверяем статус:
systenctl status dhcpd.service
Смотрим как происходит разрешение имён хостов:
mcedit /etc/nsswitch.conf
Строчка hosts: files resolve dns означает, что сначала для разрешения имён будет использован файл /etc/hosts, а затем, если это не даст результатов, будет задействована служба systemd-resolved, и, наконец, если это тоже не даст результатов, будут использованы DNS-серверы, указанные в /etc/resolv.conf
Редактируем соотетствующие файлы.
mcedit /etc/systemd/resolved.conf
Добавляем строчку:
DNS= 8.8.8.8 8.8.4.4
mcedit /etc/resolv.conf
Добавляем строчку: nameserver=127.0.0.53
Запускаем службу разрешения имён systemd-resolved:
systemctl start systemd-resolved.service
Добавляем в автозапуск:
systemctl enable systemd-resolved.service
Проверяем статус:
systemctl status systemd-resolved.service
Проверяем что получилось:
ping -c 5 ya.ru
Система уже работает. Осталось устранить мелкие недочёты, о которых информирует VManager: "Problem with Guest Agent". Для этого нужно открыть данную ссылку и будет предложена автоматическая установка. Однако что-то пошло не так, поскольку выдаётся ошибка: Error #3012 "Internal-Auth JSON must have integer 'owner_id' field in it" .
Поэтому возвращаемся VNC режим и вводим команду:
pacman -S qemu-guest-agent
Находим соответствующий сервис:
ls /usr/lib/systemd/system/ | grep qemu
Презапускаем сервис:
systemctl restart qemu-guest-agent.service
Проверяем его статус:
systemctl status qemu-guest-agent.service
На этом всё, теперь виртуальный сервер готов к работе.
В подготовке материала помимо меня и Балабобы Яндекса были использованы:
1. Дэвид Клинтон "Linux в действии".
2. Установка ArhLinux
https://pingvinus.ru/note/archlinux-install
3. Ресурсы losst.pro, zalinux.ru, docs.ispsystem.com, timeweb.cloud/tutorials
Все картинки, загруженные из Интернета, принадлежат их авторам.