生命不息,折腾不止,但折腾是有代价,如何最大限度降低代价呢?——黑传说

不知不觉地,发现自己已经用了archlinux快9年,这9年,几乎每年年初和年终,都有想换了操作系统的冲动,不过最后都失败了,原因是暂时找不到更好的替代。

对于我,archlinux有两个问题严重制约我的工作:

  1. 更新后要折腾:不是怕折腾,而是需要更多精力用在其他更重要的工作上。
  2. 开发需要“多版本共存”,这个就需要自己编译了,但因为arch更新太快,日常使用中,往往不仅仅是编译某个部件,而是编译整个系统,工作量极大。而且这样编译的频率一直不低,导致用在编译上的时间过多。

其实吧,整个系统都自己编译了,和用gentoo区别不大了,不过懒癌晚期,最终还是没有去吃那兔子。

前段日子,终于有机会需要重装系统了:多年前分区 / 分太少了,30G,根本撑不住 android-sdk+android-ndk+ant+……临时的解决办法有二:

  1. 挂载新硬盘:不过我想主硬盘换成大硬盘或者固态硬盘了。
  2. 软链到其他空闲分区。不过这样软链随着时间变迁越来越多,后面维护越来越复杂,还不如重新分区。

因为之前已经对arch更新带来的问题的深刻切身肉痛体会,决定趁此机会,换主系统。候选对象初步确定为gentoo funtoo或者sabayon。

最近这段时间,就一直在阅读这几个系统的文档,以便能够顺利切换过去。

昨天,在把sabayon写入u盘后,准备对实体机进行开刀了。在发行版动态发现了一个新奇的系统:NixOS,2003年就开始了,号称 开拓性。 这系统目前排名65,介绍里说,这是一个完全独立开发的发行版,我就在想了,这世界上所有的linux特色大致我都了解,这个能有啥新玩法?不会又是重复造轮子吧?

一看吓一跳,还真的是特立独行!!!

国庆没出去泡妞的,有新玩具了。

给更新癌推荐一个折腾不死,工作用的系统:NixOS

还在 更新后挂,挂了修,修完再更新,更新再挂,挂了再修……的噩梦里沉沦么?醒醒吧骚年,世界这么大,风景那么好,美女那么靓,多出去走走,感受世界 ——黑传说

多版本共存

nixos是比较特别的一个系统,可以多版本共存,可以还原回任意版本。

为了实现多版本共存,使用了下面方式:实现方式类似 npm(都把相关依赖封在一个空间里,用的软链,但npm最外层的版本还是一致的,只是关联软件版本允许不一样的版本,而且包存储位置分散)。

  1. 大量使用软链
  2. /bin /sbin /lib /usr等目录里面全是软链。
  3. /etc里的配置 软链到 /nix/store,由 /nixos/configuration.nix 统一配置,用户级配置仍然在用户家目录 ~/ 里配置。
  4. 所有软件实际全安装在 /nix/store,除了 /bin/sh。调用全靠各个空间的软链。
  5. 同软件同版本全系统只装一份:也就是用户不同,安装的软件相同,系统智慧存一次,而不是多次。
  6. 不同版本的软件,其不同的关联软件也会同时保留。这样可以让用户可同时有多个运行环境(测试和交叉编译常见这种情况)
  7. 用户不需要root身份安装软件,安装的软件也在 /nix/store里。—— /nix/store过大的权限是否是个安全隐患呢???否,用户间相互隔离,用户的配置只影响用户自身。
  8. 多用户情况下:不同用户安装的软件也在/nix/store里,然后通过软链到各个用户的系统空间。
  9. 多用户情况下:不同用户可以有不同的软件,不同的软件版本。除了系统级软件是都有的,不同用户间的软件环境对另外的用户是不可见的。
  10. 基于多用户机制,平时安装软件不需要root身法,除非希望root也装某软件,才需要sudo nix-env -i xxx

这不就是传说中的绿软么?

另外还有几个特点:

  1. 软件安装方式:支持 二进制安装 或者 源码编译。编译脚本xxx.nix相对 PKGBUILD 来说,比较智能,和gentoo的差不多。
  2. 配置集中,可以方便的克隆配置。
  3. 可沙箱
  4. 文件安装路径使用 hash-名字-版本,海量软件查询速度方面相对还好。

当然,保留全版本这样的设计,比较消耗磁盘空间。如果是滚动更新,且积累多年,系统将非常庞大!!!——不过可以设置清理周期。

其优势

结构简单清晰,系统设计稳健(实际稳健还需要时间),快速方便,一次配置终身受用。

这样的系统(如果够稳健的话,目前应该还不算稳健),非常适合当 服务器,编程用桌面,是个干活用的好系统。

非常适合当服务器系统

  1. 软件包独立安装的方式,结构简单,非常适合软件包不多的专用服务器!!!
  2. 随时还原:服务器更新的话,即使是安全更新,也是有失败风险的,随时可倒退回去,可以大幅度减少 服务中断 时间。
  3. 全方位还原方式:硬件不坏的情况下,遇到崩溃,如何快速还原:系统内软件还原回旧版,集群虚拟机镜像还原,主机还原…… 或者,重建软件和相关依赖——可以重装软件,或者重新编译软件。 注:zfs、btfs类提供的是文件系统级还原。
  4. 配置集中统一,方便不同机器间克隆。

非常适合追求稳定,而又必须要保持更新的服务器,这是目前其他系统仍然做不到的。

非常适合当软件开发工作平台

编程的话,常见的问题及其解决方式:

  1. 多版本冲突问题:开发用的和系统版本不同,项目间用的版本不同,升级后老版本和新版本不同……靠多版本共存机制,互不污染,不因其他部分升级而影响关联依赖的可用性。
  2. 需要快速编译:开发完编译测试的时候,需要不断编译同样的东西,nixos提供了语言级的沙箱环境,可缓存关联软件,这样编译时,不用重复编译该部分,加快 开发-编译-测试 流程。
  3. 需要快速测试:沙箱环境。

资源:

从github的统计看,目前 系统开发:9人, 包维护:34人, 从更新频率上看,开发越来越活跃。

2003年3月9日开始,管理器Nix设计者是 Eelco Dolstra,NixOS最初的设计者是Armijn Hemel,目前最活跃的开发者是 peti

主基地是在荷兰阿姆斯特丹。

目前稳定版本:15.09

几个主要开发组织:

使用

需要熟读的文档,共三份: