
“Ciel,这是先进的”
其实图片上的这个 ciel 的解释是我自己随便拆分的,当时狮子取名的时候也没考虑太多,
于此就不照应试答题去揣测作者意图了。 Ciel 的正式提出是在 2017 年暑期的
AOSCC 上,
距今已经有些年头了(都 8102 了,所以才给这篇起了个村网通的名字。
先说到容器技术最先想到的应该就是 docker 了,之前 AOSC OS 也使用过 docker 来打包。
丰富的镜像资源以及简单的管理使得它成为一个很多人都亲睐的“软件”。
再后来发现 systemd 也参了一脚,有了 systemd-nspwan,通过引入容器技术,
解决和避免了以前 chroot 一把梭的各种管理不便问题,
目前 archlinux 的主要打包工作环境都是由它来构建的。
而至于 Ciel
则是一个针对 AOSC OS 打包需求可以更简易构建出干净环境的集成化工具,
集成了多层文件系统和容器控制功能,其容器也是 systemd 来负责管理和创建的。
这里各建一个简易的容器将三种工具进行对比。
Docker
设置 /etc/docker/daemon.json
为国内镜像缓存。
1 | { |
将自己添加到 docker 组之后就可以不用 sudo 来执行 docker 命令。
1 | gpasswd -a user docker |
启动 docker
1 | sudo systemctl start docker |
拉取一个镜像,以 base/archlinux
为例:
1 | docker pull base/archlinux |
运行容器
1 | docker run -ti base/archlinux |

如果有无法建立虚拟网卡的错误提示有可能和宿主机的 arch 刚滚过内核有关,需要重启一下电脑。
这里提一下,由于 base/archlinux 基本什么软件都没有,所以当时在修改源的时候把各路编辑器都试了一遍,什么 vi, vim, nano 一个都没有。
后来用echo 'Server=...' > /etc/pacman.d/mirrorlist
解决了换源的问题。
在群里吐槽的时候有 dalao 提到pacman -U
是可用 url 来安装包的,我之前还真不知道有这种操作,估计是各种源用得太舒服了。
Systemd-nspwan
因为 Arch Container 和 Debian Container 的创建略有不同,所以分开来写初始化部分,具体设置可以参见 Arch Wiki。
Archlinux
创建一个用于存放 container 的目录arch_container
。
1 | pacstrap -icd arch_conatiner base base-devel |
启动容器
1 | sudo systemd-nspwan -bD arch_container |

Debian
创建 Debian Container,Debian 的具体版本和源地址可以自行更换。
1 | sudo pacman -S debootstrap debian-archive-keyring |
启动容器方式和 Arch 一样
1 | sudo systemd-nspwan -bD debian_container |

Ciel
因为 AOSC OS 新的 tarball 将近期上线,所以暂时不用老版本的 tarball 来演示了,等更新了之后再回来填坑…(TBC)
随着最新 tarball(20180128) 释出,可以开始对 Ciel 进行一个简单的测试了。
安装 Ciel
需要手动安装依赖,就常见的发行版而言基本都有systemd
和tar
工具,所以需要安装的就是git
、make
和go
了。
编译:
- git
- make
- Go
运行:
- systemd’s container components
- overlayfs (kernel module)
- coreutils
- tar
1 |
|
如果是使用 Archlinux 的用户这里我简单的写了个 AUR:ciel-git
1 | $ yaourt ciel-git |
创建并运行
1 | $ mkdir {path} # 创建一个用于存放容器的目录 |
至此容器已经运行了,ciel 工具本身没有提供状态显示,但是因为其底层容器实现利用的是systemd-nspwan
,所以同样可以使用命令工具查看状态,不过还是希望狮子之后能加上这一功能。
1 | $ sudo machinectl status ciel |
使用 ciel shell 登陆,如果不带参数的话就是默认以 root 账户登陆到系统中。
1 | $ cd {path} |
如果创建用户之后也可以用machinectl
登陆,但是仅仅能够起到容器的功能。
1 | $ sudo machinectl login ciel |
后来想起可以直接用systemd-nspwan
来启动容器并以root
和anthon
登陆(但是据 jeffbai 说默认 root 是没有密码的 —— 具体情况目前不下定论,登陆就不用太纠结了),00-stub
就是被压到最底层的 tarball。
订正:nspawn 进了 init 出来的 tarball(底层),而设置密码的时候更改的文件在 99-,ciel 启动的时候会挂载这几个 overlay,而直接 nspawn 不会,所以推荐还是直接用 ciel 工具进入命令行。
1 | $ sudo systemd-nspawn -bD {path}/cielfs/00-stub/ |
最后预览如下:

小结
简单介绍了一下两种主要容器技术的创建和启动方法,Ciel 其本身像是个为 AOSC OS 特别定制的打包工具链,但这里只抽出其中的容器功能做简单介绍,如有兴趣可以在用户手册看到这一整个打包工具链是如何工作的,也算是一种对打包流程的了解(也欢迎你成为开发者的一员~