的碎片 Fedora 银蓝

[ad_1]

Fedora Silverblue 在不可变操作系统上提供有用的工作站构建。 在“什么是 Silverblue?”中,您了解了不可变操作系统提供的好处。 但是制作它需要哪些部分呢? 本文研究了一些支持 Silverblue 的技术。

文件系统

Fedora 工作站用户可能会发现不可变操作系统的想法是 Silverblue 最令人费解的部分。 这意味着什么? 通过查看文件系统找到一些答案。

乍一看,布局看起来和普通的一样 Fedora 文件系统。 它有一些不同之处,例如将 /home 设为指向 /var/home 的符号链接。 您可以通过查看 libostree 的工作原理获得更多答案。 libostree 将整个树视为一个对象,将其检入代码存储库,并检出一份副本供您的机器使用。

利博斯特里

libostree 项目 提供用于管理 Silverblue 文件系统的商品。 它是一个用户可以控制使用的升级系统 rpm-ostree 命令.

libostree 对软件包一无所知——升级意味着用另一个完整的文件系统替换一个完整的文件系统。 libostree 将文件系统树视为一个原子对象(一个牢不可破的单元)。 事实上,Silverblue 的先驱被命名为 原子计划.

libostree 项目提供了一个库和一组工具。 这是一个执行这些任务的升级系统。

  1. 拉入一个新的文件系统
  2. 存储新的文件系统
  3. 部署新的文件系统

拉入一个新的文件系统

拉入新文件系统意味着将对象(整个文件系统)从远程源复制到其自己的存储中。 如果您使用过虚拟机映像文件,那么您就已经了解了可以复制的文件系统对象的概念。

存储新的文件系统

libostree 存储具有一些源代码控制特性——它存储许多文件系统对象,并检查一个用作根文件系统。 libostree 的商店有两个部分:

  • 位于 /sysroot/ostree/repo/ 的存储库数据库
  • /sysroot/ostree/deploy/fedora/deploy/ 中的文件系统

libostree 使用提交 ID 跟踪已签入的内容。 每个提交 ID 都可以在目录名称中找到,嵌套在 /sysroot 深处。libostree 提交 ID 是一个长校验和,看起来类似于 git 提交 ID。

$ ls -d /sysroot/ostree/deploy/fedora/deploy/*/
/sysroot/ostree/deploy/fedora/deploy/c4bf7a6339e6be97d0ca48a117a1a35c9c5e3256ae2db9e706b0147c5845fac4.0/

rpm-ostree status 提供了有关该提交 ID 的更多信息。 输出有点混乱; 可能需要一段时间才能看到此文件系统 Fedora 31.

$ rpm-ostree status
State: idle
AutomaticUpdates: disabled
Deployments:
● ostree://fedora:fedora/31/x86_64/silverblue
                   Version: 31.1.9 (2019-10-23T21:44:48Z)
                    Commit: c4bf7a6339e6be97d0ca48a117a1a35c9c5e3256ae2db9e706b0147c5845fac4
              GPGSignature: Valid signature by 7D22D5867F2A4236474BF7B850CB390B3C3359C4

部署新的文件系统

libostree 通过从其存储中检出新对象来部署新文件系统。 libostree 不会通过复制所有文件来检出文件系统——而是使用硬链接。 如果你查看提交 ID 目录,你会看到一些看起来很像根目录的东西。 那是因为它是根目录。 通过检查它们的 inode,您可以看到这两个目录指向同一个位置。

$ ls -di1 / /sysroot/ostree/deploy/fedora/deploy/*/
260102 /
260102 /sysroot/ostree/deploy/fedora/deploy/c4bf7a6339e6be97d0ca48a117a1a35c9c5e3256ae2db9e706b0147c5845fac4.0/

这是全新安装,因此只有一个提交 ID。 系统更新后,会有两个。 如果文件系统的更多副本被签入 libostree 的 repo,则会在此处显示更多提交 ID。

升级流程

将各个部分放在一起,更新过程如下所示:

  1. libostree 从存储库中检出文件系统对象的副本
  2. DNF 将软件包安装到副本中
  3. libostree 将副本作为新对象检入
  4. libostree 检出副本以成为新的文件系统
  5. 您重新启动以获取新的系统文件

除了更多的安全性之外,还有更多的灵活性。 你可以用 libostree 的 repo 做新的事情,比如存储几个不同的文件系统,并检查你喜欢使用的任何一个。

Silverblue 的根文件系统

Fedora 将其系统文件保存在所有常见的 Linux 位置,例如 /boot 用于引导文件,/etc 用于配置文件,以及 /home 用于用户主目录。 Silverblue 中的根目录看起来很像传统中的根目录 Fedora,但有一些区别。

  • 文件系统已被 libostree 检出
  • 某些目录现在是指向新位置的符号链接。 例如,/home 是指向 /var/home 的符号链接
  • /usr 是只读目录
  • 有一个名为 /sysroot 的新目录。 这是 libostree 的新家

杂耍文件系统

您可以存储许多文件系统并在它们之间切换。 这称为变基,它类似于 git 变基。 实际上,将 Silverblue 升级到下一个 Fedora 版本不是一个大包安装——它是从远程存储库和 rebase 中提取的。

您可以在三个不同的桌面上存储三个副本:一个 KDE、一个 GNOME 和一个 XFCE。 或者三个不同的操作系统版本:如何保留当前版本、夜间构建和旧经典? 在它们之间切换是重新定位到适当的文件系统对象的问题。

变基也是您从一个升级的方式 Fedora 释放到下一个。 请参阅“如何重新定位到 Fedora 32 on Silverblue”了解更多信息。

平板包装

Flatpak 项目 提供了一种安装 LibreOffice 等应用程序的方法。 应用程序从远程存储库中提取,例如 平枢纽. 它是一种包管理器,虽然你不会在 文档. 传统的 Fedora 变体,如 Fedora Workstation 也可以使用 Flatpak,但 flatpak 的沙盒特性使其特别适合 Silverblue。 这样您就不必每次想要安装应用程序时都执行整个 ostree 更新过程。

Flatpak 非常适合桌面应用程序,但也适用于命令行应用程序。 您可以安装 vim 使用 flatpak install flathub org.vim.Vim 命令运行编辑器并使用 flatpak run org.vim.Vim 运行它。

工具箱

工具箱项目 在容器内提供传统的操作系统。 这个想法是你可以弄乱工具箱中的可变操作系统( Fedora 容器) 随心所欲,并保持工具箱外的不可变操作系统保持不变。 您可以根据需要在系统上打包任意数量的工具箱,这样您就可以将工作分开。 在幕后,可执行文件 /usr/bin/toolbox 是一个 shell 脚本,它使用 播客.

全新安装不包括默认工具箱。 工具箱创建命令检查操作系统版本(通过读取 /usr/lib/os-release),在 Fedora 容器注册表,并下载容器。

$ toolbox create
Image required to create toolbox container.
Download registry.fedoraproject.org/f31/fedora-toolbox:31 (500MB)? [y/N]: y
Created container: fedora-toolbox-31
Enter with: toolbox enter

工具箱内安装了数百个软件包。 dnf 命令和通常的 Fedora 存储库已设置,准备安装更多。 ostree 和 rpm-ostree 命令不包括在内——这里没有不可变的操作系统。

每个用户的主目录都挂载在他们的工具箱上,用于在容器外存储内容文件。

把碎片放在一起

花一些时间探索 Fedora Silverblue 和这些组件如何组合在一起将变得清晰。 像其他 Fedora 变体,所有这些工具都来自开源项目。 你可以起床 close 从阅读他们的文档到贡献代码,随心所欲地个性化。 或者你可以 为 Silverblue 做出贡献 本身。

加入 Fedora Silverblue 对话 讨论.fedoraproject.org 或在 #silverblue 在 Freenode IRC.

[ad_2]

Related Posts