Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions content/community/privacy-policy.zh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
+++
title = "隐私政策"
description = "数据为重。"
[taxonomies]
tags = ["community"]
+++

我们不会在此 Linux 发行版中收集、处理或公开任何个人数据。

若未来有任何变更,我们将公开发布。
54 changes: 54 additions & 0 deletions content/developer/packaging/ciel-manual.zh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
+++
title = "Ciel 使用手册"
description = "关于 Ciel 的(几乎)所有你需要了解的内容"
date = 2020-05-04T03:35:37.353Z
[taxonomies]
tags = ["dev-sys"]
+++

Ciel 是一个用于管理多层文件系统和容器的工具,主要面向基于 DPKG[1] 包管理器构建与发布的 Linux 发行版。Ciel 同时提供快速回滚与合并写入等功能,便于开发与维护流程中的状态管理。

Ciel 使用了 OverlayFS,其分层模型与 Adobe Photoshop 的图层概念类似。在 Ciel 中,除最顶层之外的所有分层将被锁定,用户只能对顶层进行写操作。

[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` 解包至当前 OverlayFS 结构的“底层”。

## 文件系统命令

`drop` 命令用于清除指定分层中的所有文件和改动记录。当未指定任何参数时,该命令默认清除“上层”(即最顶层)的所有变更,相当于执行一次回滚操作。

`mount` 命令用于 **手动** 挂载文件系统,并返回挂载点路径。此命令应仅在必要情况下使用,完成后需手动卸载并移除挂载点。文件系统默认以只读方式挂载,若需读写模式,请添加 `--read-write` 参数。

`merge` 命令用于将文件变更向下合并。其第一个参数通常形如 `upperdir..cache`,用于指定操作中的“上层”和“下层”目标。`upperdir` 可省略,此时默认使用预设的上层目录,因此 `..cache` 和 `cache` 等价于 `upperdir..cache`。通过 `path` 参数可以指定要合并的目录位置,例如 `/` 表示合并整个分层内容。若希望在合并过程中排除目录本身和文件本身,可使用 `--no-self` 参数。

`clean` 命令用于清除所有非 `dpkg` 管理的文件,主要用于发行版构建过程。该命令内置白名单机制,自动保留某些虽不属于包管理器控制但对系统正常运行至关重要的文件或目录。若添加 `--factory-reset` 参数,可进一步移除如系统主机密钥(SSL)和 systemd 机器 ID 等自动生成的文件。

## 容器命令

`shell` 命令具有两种功能:一是进入受限的容器 Shell 环境,二是在该环境中执行指定的 Shell 命令。当未提供额外参数时,命令会直接进入容器 Shell;若在命令后附加参数,则会在容器中执行指定的命令。需要注意的是,该命令只接受一个参数,若命令字符串中包含空格,需使用引号括起来。

`rawcmd` 命令用于在容器中执行程序。除非必要,推荐优先使用 `shell` 命令,因为 `rawcmd` 执行时不会加载任何 Shell 配置文件中的环境变量或设定。此命令支持多个参数传入,使用方式与 `shell` 基本一致。

# 插件
除上述内置命令外,Ciel 还支持插件命令。例如 `ciel build` 实际上是位于 `/usr/libexec/ciel-plugin` 目录下的可执行文件 `ciel-build`。Ciel 会自动在该目录中查找以 `ciel-*` 命名的插件执行文件。

# 补充说明

在执行 `shell`、`rawcmd` 或插件命令时,Ciel 会自动导出标准输入、输出与错误输出,并保留命令执行后的返回状态码。
9 changes: 9 additions & 0 deletions content/developer/packaging/quirks.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@ LTO 可以有效减少二进制包大小并提升性能,因此 AOSC OS 在默
NOLTO=1
```

# `autotools` 报错缺少 `install-sh`、找不到源代码文件、源代码已配置等问题
默认情况下,`autobuild4` 会创建一个名为 `build` 的目录,并在其中进行构建(这种方式称为 *Shadow build*)。 然而,并不是所有源代码都能在这种配置下正常构建。

要禁用这种行为,请在 `defines` 文件中添加以下内容:

```bash
ABSHADOW=0
```

# 构建 Rust 应用程序时出现与 `ld` 相关的错误

Rust 使用 `LLVM` 作为后端。因此,在将其链接到使用 `gcc` 编译的对象时可能会遇到一些问题。请尝试在 `defines` 文件中添加:
Expand Down