NixOS 和 Fedora Silverblue 比较 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
cnt2ex
V2EX    Linux

NixOS 和 Fedora Silverblue 比较

  •  
  •   cnt2ex 2024-07-25 20:26:40 +08:00 2616 次点击
    这是一个创建于 444 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两者都是比较出名的 immutable distro ,都提供原子化的更新,版本回退。有没有人详细说明一下两者在实现方式的区别和优缺点?

    目前只对 Silverblue 有过了解。所以说说我知道的,Silverblue 利用的是 ostree/rpm-ostree 管理系统的。Silverblue 每次更新系统时,是从服务端拉取一个 base image ,然后基于这个 base image 再把额外安装的包(官方术语为 layered package )安装上去,并且成为一个快照。系统保留至少两个快照,因此总是存在一个可用的快照版本可以回退过去。由于每次更新都会从服务端拉去一个 base image ,这种做法相当于结合了 image based 更新和传统基于包管理器的更新方式,使得客户端和服务端的状态能保持一致。并且由于 ostree 是 content-addressable 的,重复的文件不会多占用空间。

    对 NixOS 了解不是很多。只知道 nixos 提供了不同的 namespace ,因此可以同时安装多个版本的包,不过不知道具体实现是如何的?如果不同的 namespace 之间相互有重复的文件,是否占用双倍的空间?

    10 条回复    2024-09-15 10:19:53 +08:00
    ryan4yin
        1
    ryan4yin  
       2024-07-25 20:34:20 +08:00 via Android
    nixos 是基于 nix 包管理器构建的,而 nix 包管理器的设计哲学是用管理编程语言依赖包的方式来管理系统软件包。
    你用过 nodejs java python 的话
    ryan4yin
        2
    ryan4yin  
       2024-07-25 20:36:49 +08:00 via Android
    (不小心发出去了,继续)应该知道,编程语言的包都是中心化存储在 ~/.m2 node_modules ~/go 里面的,而且不同的软件包能够共存(请忽略掉 python...)。

    nix 同样如此,所有软件包都存在 /nix/store 里面,而且不同版本
    ryan4yin
        3
    ryan4yin  
       2024-07-25 20:38:15 +08:00 via Android
    而且每个软件的不同版本都保存在不同的文件夹中,从而能够在 /nix/store 中共存...

    大概是这样
    ryan4yin
        4
    ryan4yin  
       2024-07-25 20:41:24 +08:00 via Android
    nix 没有 namespace 这种东西,但有个 profile.

    profile 的实现逻辑是,所有包都是从 /nix/store 中引用的,所以重复的包不会导致任何数据被重复保存,这也是中心化存储的好处之一。

    中心化存储的缺点是需要基于引用计数等方式做软件包的垃圾回收,因为卸载一个软件包实际并不能立即从存储中删掉它,还得确保这个版本的包没有被其他环境引用。
    Saniter
        5
    Saniter  
       2024-07-25 20:47:11 +08:00
    简单说就是包全部安装在/nix/store ,包括一个包不同版本
    用哪个版本用软连接连接过去,所以会导致磁盘占用迅速增加
    secirian
        6
    secirian  
       2024-07-25 20:54:30 +08:00   1
    @Saniter 磁盘占用迅速增加不是因为这个,是 closure 的粒度不够细的问题。多版本共存在任何解决方案中都需要在本地存在多个版本,比单个版本天然地占用更多空间,可以参考 docker ,nixos 提供了更灵活的解决依赖地狱的方案、版本管理以及 native 运行,这个好处是丢掉传统的 FHS 以及纯净函数式带来的,也导致野生二进制无法直接运行。
    xinyangli
        7
    xinyangli  
       2024-07-25 20:56:33 +08:00 via Android   1
    如果 profile 依赖了同一软件包的不同版本,这些版本会同时存在/nix/store 中的不同路径内。不过可以选择开启内置的 optimise ,使用硬链接的方式,在/nix/store 内进行文件级别的去重(应该和 content-addressability 相似?)。也可以使用支持透明压缩的文件系统作为/nix/store 。
    lingo
        8
    lingo  
       2024-07-30 18:55:42 +08:00
    正在用着 opensuse tw 回复。。
    fedora 这个特性感觉好像挺的但是又觉得好像跟 opensuse 的 tw 差不多的样子。
    yanqiyu
        9
    yanqiyu  
       2024-07-30 23:47:50 +08:00
    常年 silverblue 用户,silverblue 用的是 ostree ,原理是所有系统文件(/usr 下面的文件)都用 content addressable storage 的方式存储。设计上类似于 git ,每个镜像是上游服务器构建的一个 commit ,然后用户拉取,然后用 hardlink 构造一个传统的(看起来很 fhs 的)文件系统树。系统启动的时候 initrd 阶段会做 bindmount+remount-ro 保证所有程序行为和传统系统一样。
    在此之上 rpm-ostree 提供从 rpm 构建 ostree commit 以及再已有的 commit 上修改的能力,每次更新都拉取新的镜像+重新应用变更。
    ostree 不管依赖,只管文件树,然后 rpm-ostree 是基于 rpm 的。

    nix 是完全不同的设计,同时管理文件树和依赖关系,文件系统不是 fhs ,程序可能需要修改才能运行(然后随便下载的二进制大概需要容器或者 patchelf ),某种程度上更完整(比如程序运行的环境和编译的环境可以保证一致,因为 nix 在追踪这种信息; rpm 虽然可以但是操作上可以,但是大家只要 soname 不变都无所谓)。以及更加可定制,整个系统都所有细节都是用 nix 文件描述的。

    我选 silverblue 的原因是常年 fedora 用户,没心情换发行版。
    fsdrw08
        10
    fsdrw08  
       2024-09-15 10:19:53 +08:00 via Android
    只用过 silverblue 的服务器版 coreos ,我认为的 coreos 和 nixos 的区别是: 同样是系统的配置文件,coreos 的 ignition 文件只能在系统初次启动时进行配置,初次启动完,系统不再理会 ignition 配置,nixos 则可以随时随地通过更新配置
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2831 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:33 PVG 21:33 LAX 06:33
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86