无状态

在大多数操作系统中,用户数据、系统数据和配置文件可能会混杂在一起。

Stateless: User and system files mixed

图 1:如果不使用无状态设计,用户和系统文件会随着时间的推移在文件系统中混杂在一起。

Clear Linux* OS 使用无状态设计理念,目的是打造一个无需过多用户配置或自定义的 OS (operating system)。在这种情况下,无状态并不意味着短暂或不持久。

文件级隔离

为了实现无状态设计,Linux 文件系统层次结构在用户拥有的区域和 Clear Linux OS 拥有的区域之间是隔离的。

Stateless: User and system files separation

图 2:使用无状态设计时,用户和系统文件在文件系统上是隔离的。

系统区域

/usr 目录下的文件由用户拥有和管理。用户在 /usr 目录下编写的文件可以通过 swupd 系统更新删除。此操作假设允许 Clear Linux OS 用户清楚地识别其系统的独特配置。

用户区域

/etc//home/var 目录下的文件由用户拥有和管理。新安装的 Clear Linux OS 系统在 /etc/ 目录中只有极少量的文件,并且 Clear Linux OS 安装的软件不会写入 /etc。此操作假设允许 Clear Linux OS 用户清楚地识别其系统的独特配置。

软件配置

在无状态隔离的情况下,默认软件配置从预定义的源代码、Clear Linux OS 提供的默认值和用户提供的配置中按顺序读取。

默认配置

Clear Linux OS 中的软件会提供默认配置值,以便在适当的时候立即运行。

Clear Linux OS 分布的软件包可以直接修改以包括默认配置值,或者默认配置文件可以由 Clear Linux OS 在 /usr/share/defaults 中提供。这些文件可以作为自定义模板引用。

例如,Apache 安装后使用的默认配置可以在 /usr/share/defaults/httpd/httpd.conf 目录中找到。

覆盖配置

如果需要更改配置,用户应在 /etc/ 下修改适当的文件。如果配置文件不存在,可以在适当的位置创建。

用户定义的配置文件应该包含尽可能少的更改,其余则依赖默认配置。

例如,可以使用自定义 Apache 配置,具体方式是:

  1. 为配置创建目标目录:

    sudo mkdir /etc/httpd
    
  2. 复制默认配置作为参考模板:

    sudo cp /usr/share/defaults/httpd/httpd.conf /etc/httpd/
    
  3. 对配置进行任何所需的修改:

    sudoedit /etc/httpd/httpd.conf
    
  4. 重新加载服务或重新启动系统以获取任何更改:

    systemctl daemon-reload httpd && systemctl restart httpd
    

这种模式也可以用来修改其他程序的配置。stateless man page 提供了特定于应用程序的示例。

系统重置

无状态设计的一个优点是,只需删除 /etc//var 下的所有内容,就可以轻松恢复系统默认值。

运行以下命令可以有效地执行系统重置,重置后系统就像刚刚安装一样:

sudo rm -rf /etc
sudo rm -rf /var

在其他 Linux 发行版中,此操作有可能造成灾难性后果,导致系统无法启动。