Назад | Перейти на главную страницу

Запуск контейнера на основе systemd в LXC

В настоящее время я пытаюсь запустить контейнер Arch Linux с помощью LXC на хосте Ubuntu 12.04. Arch Linux недавно перешел на systemd, который, по мнению многих пользователей, имеет некоторые проблемы с работой в качестве гостя LXC. Однако многие из этих источников существенно устарели, и я видел различные другие источники, предполагающие, что можно запустить гостевую систему на основе systemd, используя такие вещи, как lxc.autodev или devtmpfs.

Таким образом, я пытаюсь выяснить следующее:

  1. Можно ли запустить гостя на основе systemd внутри контейнера LXC (по состоянию на февраль 2013 г.)?
  2. Есть ли у кого-нибудь пример файла шаблона / конфигурации для использования с `` mkarchroot '' для его запуска?

В настоящее время используется LXC версии 0.7.5, но обновление не должно быть проблемой, если это необходимо.

Я просто наткнулся на твой вопрос. У меня есть контейнеры systemd под Arch. Я написал несколько заметок о Arch Wiki объясняя, как заставить его работать. Вам нужно lxc.autodev и вам также необходимо замаскировать некоторые службы, которые не должны работать внутри контейнера.

Я делаю основной mkarchroot, а затем вношу некоторые изменения (chroot в новый Archroot):

ln -s /dev/null /etc/systemd/system/systemd-udevd.service
ln -s /dev/null /etc/systemd/system/systemd-udevd-control.socket
ln -s /dev/null /etc/systemd/system/systemd-udevd-kernel.socket
ln -s /dev/null /etc/systemd/system/proc-sys-fs-binfmt_misc.automount

В конфигурации вашего контейнера вам нужно

lxc.autodev = 1

И, если вам нужно создать какие-либо узлы устройства (возможно, вы это сделаете), вам также понадобится

lxc.hook.autodev = /path/to/script

плюс файл сценария

#!/bin/bash
# LXC Autodev hook.
cd ${LXC_ROOTFS_MOUNT}/dev
mknod .....

В /path/to/script это место в файловой системе HOST, например /etc/lxc/mycontainer-autodev-hook.

отвечая самому себе. Шаблон lxc-archlinux доступен по адресу https://github.com/dotcloud/lxc/blob/master/templates/lxc-archlinux.in но он не включает переход на systemd (по состоянию на 15 февраля 2013 г.).

есть полезная часть rootfs в archlinux (например, http://www.gtlib.gatech.edu/pub/archlinux/iso/2013.02.01/arch/i686/root-image.fs.sfs для i686 также есть 64 битная версия)

Я еще не запускал гостевой lxc из него, но у меня есть функциональный chroot i686 изнутри ubuntu 12.04 x64. 1 / скачать и распаковать корневой образ, куда-нибудь смонтировать.

2 / как root (sudo) cp -ar корневую файловую систему в ваше местоположение и chroot в нее

3 / отредактируйте /etc/pacman.conf и обновите строку arch (по умолчанию это auto, который извлекает ar ch из uname, но ubuntu и arch не используют одно и то же обозначение)

4 / mount / proc / dev / random и / dev / urandom (это необходимо для pacman и pacman-key)

Я не мог запустить pacman без правильной настройки подписи пакета

5 / pacman-key --init (здесь нужен хороший источник энтропии)

6 / pacman-key - заполнить Archlinux

7 / необязательно: pacman-key --refresh-keys (требуется рабочее интернет-соединение)

8 / отредактируйте /etc/pacman.d/mirrorlist, чтобы активировать соответствующие вам зеркала.

9 / pacman -Syy

готов обновить или установить новые пакеты.

Чего (ужасно) не хватает, так это запуска контейнера. Я не разбираюсь в systemd, но если я правильно понимаю, это в основном вопрос запуска dbus и systemd.

Согласно вики Gentoo существует частично функциональный шаблон для Arch (см. http://wiki.gentoo.org/wiki/LXC#Arch_Linux подробнее). шаблон может быть старше, чем переход на systemd. исправление / обходной путь включает использование пакетного менеджера Arch pacman. Это нормально с gentoo, мне однажды удалось заставить его работать на Ubuntu, но компиляция - это рутинная работа.

шаблон может отсутствовать в пакете lxc, поставляемом с 12.04

если вы перекомпилируете pacman (и его вспомогательную библиотеку), то вы, вероятно, будете так же хороши, используя archbootstrap ( https://wiki.archlinux.org/index.php/Archbootstrap ), который был вдохновлен debootstrap, создав ваш собственный шаблон на основе шаблона debian.