01 августа 2017

Как я Gentoo в контейнер помещал.



Идея с контейнерами в Systemd мне очень понравилась. Можно потыкать разные дистрибутивы без нарушения основной системы и не прибегая к виртуализации. Дистрибутив получается всё равно не слишком полноценный, потому что ядро остаётся от хостовой системы, да и к устройствам доступ довольно ограниченный, но в остальном свободы довольно много.

Итак, Gentoo Linux.

Сначала назло всем ненавистникам надо скачать архив stage3 с профилем "systemd", чтобы не иметь проблем с запуском контейнера. Найти его можно по адресу https://gentoo.org/downloads/.

Архив необходимо скачать и распаковать в удобную для запуска директорию.

Тут я сделаю небольшое отступление.

Все манипуляции я проделаю на Debian 9, в котором юнит "systemd-nspawn@.service" имеет довольно дикий вид. С ним у меня не запустился ни один контейнер. К тому же в тамошнем systemd 232-й версии имеет неприятный баг. Заключается он в том, что при запуске контейнера из примонтированного через bind каталога или с добавленного с помощью символической ссылки каталога в "/var/lib/container" портятся права на файлы.

По этой причине я немного отредактировал юнит:

# sudo systemctl cat systemd-nspawn@.service
# /etc/systemd/system/systemd-nspawn@.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/systemd-nspawn -b -M %i -D /data/machines/%i

/data/machines/ - каталог с контейнерами на отдельном большом разделе.

Итак, архив stage3 распакован в "/data/machines/gentoo". Теперь надо произвести первичную настройку системы, но для начала надо запустить контейнер:

sudo systemd-nspawn -M gentoo -D /data/machines/gentoo

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

# Изменить пароль для root
passwd root

# добавить пользователя для дальнейшей работы
useradd new_user --create-home --shell /bin/bash

# задать для него пароль
passwd new_user

# добавить его в группу wheel
usermod new_user --append -G wheel

# поставить sudo
emerge --sync
emerge app-admin/sudo

# раскомментировать в файле /etc/sudoers строку
# %wheel ALL=(ALL) ALL

# установить SSH-сервер
emerge virtual/ssh
# или
emerge net-misc/openssh

# поменять в файле /etc/ssh/sshd_config номер порта
# в строке
# Port 22

# Включить запуск ssh-сервера
systemctl enable sshd.service

Теперь можно выйти из окружения комбинацией Ctrl+]]].

Осталось только запустить контейнер и зайти в него по SSH с логином new_user и заданным паролем:

sudo systemctl enable systemd-nspawn@gentoo.service
sudo systemctl start systemd-nspawn@gentoo.service

Посмотреть состояние контейнера можно с помощью команды machinectl. С её же помощью можно подключиться к контейнеру напрямую:


machinectl login gentoo