在LXC中运行基于systemd的容器

我目前正在尝试在Ubuntu 12.04主机上使用LXC运行Arch Linux容器。 Arch Linux最近已经迁移到了systemd ,根据各种地方,作为LXC guest有一些问题。 但是,这些来源中有许多已经过时了,而且我也看到其他各种来源表明可以使用像lxc.autodevdevtmpfs这样的lxc.autodev来运行基于systemd的访客。

因此,我试图找出以下几点:

  1. 是否可以在LXC容器内运行基于systemd的guest虚拟机(截至2013年2月)?
  2. 有没有人有一个示例模板/configuration文件与“`mkarchroot“使用得到一个运行?

目前使用LXC 0.7.5版本,但如果这是必要的升级不应该是一个问题。

回答自己。 lxc-archlinux模板位于https://github.com/dotcloud/lxc/blob/master/templates/lxc-archlinux.in,但不包括从systemd迁移(截至2013年2月15日)。

有可用的rootfs部分archlinux(例如http://www.gtlib.gatech.edu/pub/archlinux/iso/2013.02.01/arch/i686/root-image.fs.sfs i686还有一个64位版)

我没有运行一个lxc客户端,但是我从ubuntu 12.04 x64中获得了一个function强大的i686 chroot。 1 /下载并解压缩根映像,将其挂载到某个地方。

2 /作为根(sudo)cp – 根文件系统到您的位置和chroot到它

3 /编辑/etc/pacman.conf并更新拱形线(默认情况下,它是自动的,从uname中拉出arch,但是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的问题。

我只是沾上你的问题。 我在Arch下运行systemd容器。 我在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 

在你的容器configuration你需要

 lxc.autodev = 1 

而且,如果你需要创build任何设备节点(你可能会),你也需要

 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

根据Gentoo wiki,有一个部分function的arch模板(详情请参阅http://wiki.gentoo.org/wiki/LXC#Arch_Linux )。 该模板可能比systemd的开关旧。 修复/解决方法包括使用arch的包pipe理器pacman。 这对于gentoo来说是可以的,我曾经pipe理过一次它在Ubuntu上工作,但编译是一件苦差事。

该模板可能不在12.04提供的lxc包中

如果你重新编译pacman(及其支持库),那么你可能会使用archbootstrap( https://wiki.archlinux.org/index.php/Archbootstrap ),这是从debootstrap的灵感启发,酝酿自己的模板在debian上。