The Ciel User Manual zh_CN

Lion Yang edited this page Feb 20, 2018 · 3 revisions

Ciel

Ciel 是一个多层文件系统+容器控制的工具,用于搭建、发布基于 DPKG 包管理系统[1]的发行版,具有快速回滚、向下合并特性。 Ciel 的文件系统采用 OverlayFS,其分层概念类似于 Adobe Photoshop 中的图层概念。除了最上层为可写,下层均为“锁定”状态。

[1] clean 命令含有使用 dpkg -L 列出整个包管理系统内所有文件的算法。

命令说明

Ciel 有以下基本指令

init   <tarball>

drop   [<layers>]
mount  [--read-write] [<layers>]
merge  [<upper>..]<lower> [--no-self] path
clean  [--factory-reset]

shell  [<cmdline>]
rawcmd <cmd> <arg1> <arg2> ...

初始化

init 命令用于建立 Ciel 所需的目录结构,并将参数 tarball 指定的压缩包解压进入最底层。

文件系统相关

drop 命令用于清除一个层内的所有文件、变更。不指定参数时,抛弃最上层的变更,即快速回滚。

mount 命令用于手动挂载文件系统,并输出挂载点。建议只有在必要的情况下才使用。使用完毕,您需要手动卸载并删除这个挂载点。默认为只读挂载,使用 --read-write 以可读写方式挂载。

merge 命令用于向下合并文件变更。第一项参数形如 upperdir..cache,指定合并操作的高层和低层,可以省略高层(默认为 uppderdir),写作 ..cachecache,三者等效。参数 path 处传入需要合并的目录,/ 指代整个层。--no-self 会排除合并文件、目录本身。

clean 命令用于清理 dpkg 包管理系统以外的所有文件,常用于发布发行版。它内置一份白名单,用于保护某些特殊的包管理系统外的文件、目录。使用 --factory-reset 会额外清除包括自动生成的系统密钥、Systemd 分配的机器 ID 等,调整到完全清洁的发行版状态。

容器相关

shell 命令有两个功能,进入 Shell 和使用 Shell 执行命令。没有命令行参数时会进入 Shell,常用于进入容器手动操作。当存在命令行参数时,会使用容器内的 Shell 执行这个命令。注意,在后者的情况下只允许有一项参数,您可能需要使用引号。

rawcmd 命令用于执行容器内的程序。除非必要,请使用 shell 命令代替。因为直接运行程序可能会缺失一些必要的、存储于 Shell 配置文件中的环境变量。参数与 shell 只传入一项参数不同,请正常分项传递。

插件

输入其他命令,如 ciel build,Ciel 会在 /usr/libexec/ciel-plugin 目录下查找名为 ciel-build 可执行文件,并执行。

附注

无论是 shellrawcmd 还是运行插件,Ciel 都会传递三个标准管道,以及程序的错误返回码。

已知问题

ciel(<=v0.6.4)底层调用的 systemd-run 启动的环境,没有进行 login 操作。

https://github.com/AOSC-Dev/ciel-driver/blob/78d19330333740e6f05ada39775dba58adf479d5/systemd.go#L152

直接导致的后果是缺失 $LOGNAME $HOME $SHELL $MAIL 四个环境变量,详见 login 命令的 man 页面。

将在未来的版本中修复该问题。

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.