Привет, это снова Егор Гаврилов. И я сегодня и дальше познакомлю аудиторию с systemd-nspawn.
Перед тем, как читать эту статью, прочитайте предыдущую мою статью про systemd-nspawn. Это небольшая вводная статья (getting start guide, GSG) по данной технологии.
Да как оно же работает?
systemd-nspawn - это расширенная версия привычного линуксоидам инструмента chroot, позволяющий "менять корень системы" (это если переводить буквально - на самом деле, это, по сути, запуск одного дистрибутива Linux из под другого, используя общее ядро).
Однако systemd-nspawn - это не просто chroot. Оно использует Linux namespaces и для реализации chroot-подобной функциональности (с возможностью запуска systemd внутри гостевой системы), и для полного разграничения гостевой и хост-системы. По сути, это аналог контейнеризации (в частности - Podman, который также умеет запускать systemd, а также более привычного нам Docker'а), но более интегрированный с экосистемой systemd.
systemd-nspawn предоставляет 2 способа работы с "машинами" (хотя это и не полноценная ВМ в привычном понимании, и концепция больше напоминает OpenVZ) - непосредственно через systemd-nspawn, а также через machinectl. systemd-nspawn - это прямая команда на запуск "машин", тогда как machinectl - это удобный "CLI-фронтенд" для управления "машинами".
machinectl - mission control для ваших "машин"
machinectl представляет с собой полноценный инструмент по работе с "машинами".
Запуск и остановка "машин"
Для этого мы можем использовать команду machinectl start, позволяющий работать с "машинами".
Примерно это так выглядит:
machinectl start container-name
Корень "машины" должна находится в /var/lib/machines/container-name, и это будет касаться всего, что будет управлятся machinectl'ом. Все команды, связанные с запуском и остановки "машин" (в том числе и по включению/отключению их автозапуска) запускаются от имени суперпользователя!
А для остановки:
machinectl stop container-name
Список запущенных "машин"
Для получения списка запущенных "машин" достаточно использовать эту команду:
machinectl list
Вход в "машину"
Для вызова интерактивной login-сессии достаточно использовать следующую команду:
machinectl login container-name
А для прямого входа в shell минуя login-сессию:
machinectl shell [username@]container-name
Автозапуск "машины"
Автозапуск включается следующим образом:
machinectl enable container-name
А для отключения:
machinectl disable container-name
Итоги
systemd-nspawn - это один из лучших инструментов по работе с контейнеризированными ВМ ("машинами"). И именно поэтому сейчас каждый раз, когда включаю свой лэптоп, запускается сразу 2 ОС - моя основная (Arch Linux), и Debian 13 из под systemd-nspawn, которая используется для выхода в Фидонет через изолированное, надёжное, и стабильное окружение, с возможностью до него "достучаться" по SSH через PuTTY (чтобы можно было удобно работать с КОИ-8, который до сих пор используется в GoldED+).