Pull to refresh
Selectel
IT-инфраструктура для бизнеса

У самураев есть только путь: как запустить Gentoo Linux в облаке

Reading time7 min
Views8.5K

Привет, Хабр! Меня зовут Антон, я старший менеджер региональных проектов в Selectel. В этой статье я бы хотел рассказать про Gentoo Linux: особенности установки ОС и работы с ней.

Идея материала родилась неожиданно. Мне потребовалась очередная виртуальная машина для достаточно банальной вещи — VPN в РФ. Я начал делать виртуальную машину в панели управления Selectel, и на стадии выбора ОС мне захотелось поэкспериментировать. Не использовать вполне стандартные Debian/Ubuntu, а запустить свой сервер с Gentoo Linux, который не поставить «из коробки».

Далее я решил описать свой опыт, чтобы упростить жизнь пользователям Linux и всем причастным.

Ода Gentoo Linux


Операционная система создавалась в начале 2000-х годов, когда еще не было современных мощностей и оптимизация действительно играла большую роль в быстродействии программного обеспечения. Тесты показали, что если собрать всю ОС под конкретную платформу из исходников, а не из бинарных сборок, то прирост производительности будет 10-20%. Поэтому возникла идея сделать дистрибутив, который собирается полностью из исходников. При этом сборка не превращалась бы в настоящее испытание, как в случае с Linux From Scratch. Так был придуман Gentoo Linux.

Кстати, само название дистрибутива намекает на быстродействие. Он был назван в честь самых скоростных пингвинов Pygoscelis papua, которые могут развивать скорость в воде до 36 км/ч.

Ключевые особенности Gentoo


  • Удобная система пакетов Portage, которая напоминает порты во FreeBSD.
  • Gentoo работает на практически любой архитектуре, на которой можно собрать Linux.
  • Уникальный патчсет для всего дерева Portage, включая ядро (большинство патчей на ядро — багфиксы и устранение уязвимостей).
  • Gentoo достаточно безопасная система, ничем не хуже Debian. По крайней мере, если вы используете стабильные пакеты.
  • Операционная система хорошо документирована, в интернете есть Handbook, собственная вики и множество сторонних мануалов.

К сожалению, есть один существенный минус: установка и/или обновление операционной системы — зачастую трудоемкая и нетривиальная задача, особенно если целевая ОС у вас в продакшене.

С тех пор много воды утекло, но Gentoo Linux осталась притчей во языцех у многих сисадминов. Ранее использование подобной ОС было некоторым статусом среди админов. Кто-то подшучивал и сравнивал гентушников с самураями, кто-то обзывал их «красноглазиками» за бессонные ночи. Однако некоторые компании до сих пор используют Gentoo в коммерческой эксплуатации.

Лично я познакомился с этой операционной системой в далеком 2006-м году, когда впервые устроился работать в дата-центр. В первый же рабочий день мне досталась задача установить Gentoo на клиентский выделенный сервер. Коллеги мне так и сказал: «Вот и проверим тебя». Не с первой попытки, но я справился. Операционная система мне понравилась, и с тех пор я ее использую для личных целей: на домашнем сервере в качестве роутера и NAS, на ноутбуке в dualboot и на виртуальных машинах в облаке Selectel.

Коммерческое использование


Сейчас дистрибутив больше используются в DIY-проектах, например, помните видео с мультитач-гитарой и Gentoo Linux внутри? Почувствуйте себя старыми — этому видео 13 лет. Или все эти случаи запусков DOOM на необычных устройствах? Но если посмотреть рынок труда, знание Gentoo требуют достаточно часто до сих пор.

Коммерческое использование Gentoo в каком-то смысле стало нишевой историей. С одной стороны, на ней базируется ChromeOS. Но таких проектов немного. С другой — развитие технологий почти вывело из пользования устройства с ограниченными ресурсами. Здесь можно выделить две сферы, в которых все еще сохраняется чувствительность к железу.

  • Gamedev, в особенности онлайн-игры. Здесь разработчикам часто приходится управлять большим парком серверов и периодически обновлять пакеты. Например, Gentoo используется, чтобы компилить stage4 и разливать по однотипным машинам. Так компании получают сетап свежего железа за пару минут.
  • Умные устройства, в особенности квадрокоптеры. С IoT и прочей подобной техникой, которая откликается на команды, собирает и конвертирует данные есть сложность — форм-фактор. В устройство, особенно, когда оно в воздухе, не добавить ресурсов, поэтому приходится работать с тем, что есть, и Gentoo как раз помогает учитывать разницу в температуре по больнице.

Чтобы сократить путь от желания потестить Gentoo до запуска, рассмотрим инструкцию, которая поможет вам сэкономить время и не перегореть до запуска.

Как установить Gentoo Linux на виртуальный сервер


Я попробовал составить инструкцию, с которой можно установить ОС Gentoo из stage3 путем простого copypaste практически каждой указанной в статье команды.

Подготовка


Создаем виртуальную машину произвольной конфигурации. ОС — любая, я предпочитаю Debian, поэтому в данном мануале будет несколько команд именно из Debian.


В панели управления облаком Selectel создаем новый диск размером минимум 6 ГБ и подключаем к виртуальной машине. Именно на этом диске будет корневой раздел вашей будущей Gentoo. Диск определится как /dev/sdb.

Почему именно 6 ГБ? На меньшем объеме у вас не хватит места для сборки ОС: нужно обновить portage, скомпилировать ядро и так далее. Напоминаю, что мы устанавливаем Gentoo Linux с OpenRC.


Установка операционной системы


Подготовьте Debian:

apt-get update
apt-get install xz-utils

Создайте одну primary партицию на весь /dev/sdb:

fdisk /dev/sdb

Создаем файловую систему (для примера ext4, но выбор зависит от ваших вкусов):

mkfs.ext4 /dev/sdb1
e2label /dev/sdb1 gentoo-root

Монтируем наш новый раздел:

mount /dev/sdb1 /mnt/gentoo

Скачиваем stage3:

wget http://<mirror URL>/stage3-<xxxxxx>.tar.xz

Распаковываем stage3 в наш будущей корень:

tar -xJvf stage3-<xxxxx>.tar.xz -C /mnt/gentoo

Монтируем служебные файловые системы для будущей работы в chroot:

mount -t proc /proc /mnt/gentoo/proc
mount –-rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run

Копируем настройки DNS:

cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

Делаем chroot в наш новый корень:

chroot /mnt/gentoo /bin/bash
source /etc/profile 

Ура, теперь можно использовать наши привычные инструменты для сборки ОС. Первым делом установите пароль root: passwd

Настраиваем rsync на использование по умолчанию адресов ipv4:

nano -w /etc/conf.d/rsyncd

RSYNC_OPTS="-4"

Обновите portage:

emerge —-sync

Установите профиль ОС (можно оставить по умолчанию):

eselect profile list
eselect profile set X

nano -w /etc/portage/make.conf

Выставляем общие флаги компилятора:

COMMON_FLAGS="-O2 -pipe -march=native -mtune=native"

Про march=native и mtune=native есть важное замечание. В облаке Selectel ваша виртуальная машина работает на определенном хосте с процессорами — например, Intel Xeon Gold 6240. Виртуальная машина покинет этот хост только в том случае, если физический сервер выйдет из строя по каким-то причинам и виртуальные машины будут размигрированы по другим хостам. В подавляющем большинстве случаев ваша машина мигрирует на аналогичный хост с такой же конфигурацией оборудования, то есть вы получите тот же Xeon Gold 6240, скорее всего, даже из той же партии.

Есть мизерный шанс, что вас размигрируют на другой процессор. Приятный бонус — миграция только на более новый и/или мощный сервер.

Миграцию с Intel Xeon Gold 6240 в E5-2670 или в AMD Epyc Selectel никогда не инициирует. Но если вы создадите образ машины и захотите запустить его в более старом пуле — вас может постигнуть фиаско.

Указываем CPU_FLAGS компилятору:

emerge -1v app-portage/cpuid2cpuflags
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

Именно флаги компилятору и делают всю магию с быстродействием. Установим часовой пояс:

echo "Europe/Moscow" > /etc/timezone
emerge --config sys-libs/timezone-data

Настраиваем сеть:

nano -w /etc/conf.d/net

dns_domain_lo="YOUR_DOMAIN"

config_eth0="192.168.0.2/24"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="188.93.16.19 188.93.17.19"

Обратите внимание, я использую адрес 192.168.0.2/24 для виртуальной машины. Вам нужно скопировать текущие сетевые настройки из Debian.

Включим автонастройку сети при запуске ОС:

ln -s /etc/init.d/net.lo /etc/init.d/net.eth0
rc-update add net.eth0 default

Устанавливаем ядро, загрузчик и SSH:

emerge -1v grub gentoo-sources openssh
rc-update add sshd default

Собираем ядро:

eselect kernel list
eselect kernel set 1
cd /usr/src/linux
lscpu (проверьте модель процессора)
make menuconfig

Я не буду описывать весь процесс сборки ядра, есть разные способы это сделать: можно полностью вручную, можно через genkernel, можно с initrd или без. Опишу наиболее простой вариант: монолитное ядро с минимальными требованиями для запуска.

На что следует обратить внимание


Выбор процессора

Processor type and features  --->
	Processor family  --->
(X) (Core 2/newer Xeon) для Intel
или 
(X) Opteron/Athlon64/Hammer/K8 для AMD

В ядро обязательно нужно включить драйверы VirtIO (как правило, по умолчанию включены):

Processor type and features  --->
    [*] Linux guest support --->
        [*] Enable Paravirtualization code
        [*] KVM Guest support (including kvmclock)
Device Drivers  --->
    [*] Virtio drivers  --->
        <*> PCI driver for virtio devices
    [*] Block devices  --->
        <*> Virtio block driver
    SCSI device support  --->
        [*] SCSI low-level drivers  --->
            [*] virtio-scsi support
    [*] Network device support  --->
        [*] Network core driver support
            <*> Virtio network driver
    Graphics support  --->
        <*> Virtio GPU driver /// А НАДО ЛИ????
    Character devices ---> 
       <*>   Hardware Random Number Generator Core support --->
           <*>   VirtIO Random Number Generator support

Без вышеуказанных драйверов вы просто не сможете загрузить сервер. В последних ядрах эти опции идут по умолчанию.

make -jX

Где X — количество ваших ядер.

make install && make modules_install

Устанавливаем загрузчик GRUB. Редактируем параметры загрузки:

nano -w /etc/default/grub

GRUB_CMDLINE_LINUX="net.ifnames=0"
GRUB_GFXPAYLOAD_LINUX=text

  • Первая строчка нужна, чтобы у нас были привычные наименования интерфейсов (eth0, eth1 и так далее).
  • Второй строкой мы сообщаем ядру, что в экран мы отдаем текст. Это нужно для работы консоли в панели управления Selectel.

grub-install /dev/sdb
grub-mkconfig > /boot/grub/grub.cfg

Добавляем корневой раздел в /etc/fstab:

blkid /dev/sdb1 | awk '{print $3" / ext4 noatime 0 2"}' >> /etc/fstab

Ура, мы завершили первичную сборку ОС.

Перезагрузка в новую ОС


Теперь в панели управления нужно сделать особую магию с дисками. У каждой ВМ может быть только один загрузочный диск, и это диск, который был первым подключен к ВМ. Нам нужно сделать наш новый диск с Gentoo загрузочным. Для этого выключаем ВМ и в разделе Диски отключаем все диски. Затем подключим первым диск с Gentoo, так он автоматически станет загрузочным.

Далее включаем ВМ. Если вы все сделали правильно и увидели, как ваша новая ОС загрузилась до логина, поздравляю, вы великолепны!

Затем вам за ненадобностью следует отключить и удалить ненужный вам более диск Debian и лишние ядра CPU. Далее вы знаете, что делать: подключаетесь к серверу по SSH и начинаете настоящий праздник — сборку вашего собственного мира.

emerge -v --update --deep --changed-use @world

Вместо послесловия


Никакой магии, только ловкость рук. В следующей статье мы расскажем вам, как сделать stage4 и оркестрировать Gentoo в облачной платформе Selectel.

Полезные материалы по теме


   
Tags:
Hubs:
Total votes 39: ↑35 and ↓4+44
Comments33

Articles

Information

Website
selectel.ru
Registered
Founded
Employees
501–1,000 employees
Location
Россия
Representative
Влад Ефименко