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