CRUX
2012-10-30 15:58:08 阿炯

CRUX是一个针对x86-64体系架构的轻量级Linux发行版,面向有经验的Linux用户。这个发行版的主要重点是保持它的简单性,这反映在向后兼容的基于tar.gz包管理系统、BSD风格的初始脚本和相对较少的软件包收录。第二个重点是利用新的Linux特性和最新的工具和库,另外还有一个ports系统,可以方便地安装和升级应用程序。


CRUX is a lightweight Linux distribution for the x86-64 architecture targeted at experienced Linux users. The primary focus of this distribution is keeping it simple, which is reflected in a straightforward tar.gz-based package system, BSD-style initscripts, and a relatively small collection of trimmed packages. The secondary focus is utilization of new Linux features and recent tools and libraries. CRUX also has a ports system which makes it easy to install and upgrade applications.


与其他发行版不同,CRUX的主要目标不是成为最受欢迎的(即:最大用户数),也不是将尽可能多的特性纳入系统中。而是想建立一个流线型的发行版,针对特定的受众,而这些受众又可以在没有妥协的情况下获得一个操作系统。关键特性包括:
KISS(保持简单)的原则,适用于系统和开发过程
使用ports系统进行基于源代码的包安装
简单胜过自动化
以经验丰富的用户为目标,提供简洁、贴切的文档
配置抽象层上的本机配置(想想:sysconfig)
简洁,去掉了不需要的文档和文件(包括国家语言支持;CRUX只支持程序编写时使用的母语,大多数情况下是英语)
最新的功能和软件包,虽然主存储库中没有最新的软件
可以很方便且简单扩展系统的方法
核心开发团队之外的活跃贡献者社区

结果可能不是对每个人都是最好的适配,但正如上面提到的,这不是目标。但如果您是目标客户的一部分,您可能会像我们一样喜欢运行CRUX。


与其他Linux发行版相比

很难对Linux发行版进行客观的比较,因为这通常是一个品味问题。因此,我们认为阁下应该自己有一批潜在的比较候选版本,并选择一个你最喜欢的。有一点你应该记住:CRUX的目标用户是那些不介意自己做一些工作的有经验的用户,所以如果你对基于Linux的操作系统完全陌生或者想要一个零工作量的版本,CRUX不是最佳选择。对于新用户,有时会把故意忽略的功能与缺少的功能混淆起来,并将其视为“改进”;如果在提出看似改进系统的建议之前,先让自己适应CRUX一段时间,这对你自己和我们都是一个帮助;许多开发人员已经在使用各种Linux发行版,并且非常了解它们的特性。

和基于源码版本的发行版本比较

Arch是一个独立的开发的采用滚动升级模式的通用i686/x86-64 GNU/Linux 发行版,灵活适用于任何角色。它的开发注重于设计简洁、结构精简、代码优雅。Arch 刚安装后只提供了一个最基本的系统,可以让用户按照自己的喜好,通过仅仅安装自己需要的软件来配置自己的理想的环境。官方没有提供图形界面配置工具,大多数系统配置需要通过从命令行编辑简单的文本文件来配置。基于滚动升级模式,Arch 尽全力保证它的软件是最新的稳定版本。

CRUX是一个轻量级的、为x86优化的Linux发行,它面向经验丰富的Linux用户。这份发行以简单化为主旨,这反映在其基于简单的tar.gz格式的软件包系统上,以及BSD风格的启动脚本和相对较少的软件包收录,它有BSD类似的ports机制的。它的第二个着眼点则在于利用Linux的新特性以及新近的工具及系统库。它有BSD类似的ports机制的。

应该说这两个发行版介于Gentoo/LFS和其它发行版之间。它们的包都是tar.gz的,两者都很小巧、灵活。它们所带的软件包基本上都是最新的稳定版,并提供了一套脚本可以很方便的制作用户自己的包。区别主要在于Crux更小,其ISO文件不到200M,正好可以放在3.5寸的CD-R/W里,包是标准的tarball,没有包含任何元数据,因此它的包管理系统没有依赖关系,这要用户自己去解决。Arch的ISO有大约600M,包也是tarball,但包含了基本信息,可以自动解决依赖关系。Crux是完全基于source的,制作包的素材的集合叫做这个包的Port,基本上只需要一个叫Pkgfile的bash脚本就足够,它远程下载对应的软件源码并对其编译打包和安装。该脚本只有一个函数,所有的操作都在里面,不管你想加个patch也好,pull也好,都可以顺序地写在一个函数里,这就像手工编译的过程一样。而不像archlinux的PKGBUILD那样,package,build,prepare等等分成很多步骤,个人认为完全没必要,gentoo的脚本更加不是给人看的。

Crux的制作包的工具叫pkgmk,它其实也是一个bash script,所以当你调用pkgmk的时候,其实是类似这样的过程:
...
source $PORT/Pkgfile
build
tar cf $PORT.tar.gz $PORT
...
很简洁的执行过程。

一个包(package)就是一个tar ball,一个包可以在任何路径下反复安装或删除。至于包的管理,分两层,最简单的是pkgadd与pkgrm,它们不处理依赖(dependencies),只是简单地安装删除单个包。更高层地,有一个工具叫prt-get,它懂得包的依赖关系,可以递归地对每个需要安装的包调用pkgmk。可以看出,prt-get的底层调用的是pkgadd,pkgrm,pkgmk这三个工具的,而不像archlinux有一个处理二进制包的系统,又有一个port系统,二者相对独立,又都可以处理依赖,功能重复。

有关依赖的处理,prt-get其实是通过分析包都应的port的Pkgfile中注释中的 # Depends on一行来得到包的依赖关系的。

Arch利用它提供的ABS(Arch Build System)编译、打包、使用。ABS其实是一些脚本,Arch有一个官方的ABS树何一个非官方的ABS树,每个软件包对应一个PKGBUILD配置文件和其他一些必要的文件比如缺省的配置文件,PKGBUILD里面包含了包的基本信息、依赖关系和一些配置、编译、安装的脚本,有了对应PKGBUILD文件或者对PKGBUILD原型文件稍作修改,很多从网上下载的源代码tarball只要用一个makepkg命令就可以生成Arch的.pkg.tar.gz包了,再用一个pacman命令就可以安装配置。

Gentoo则是另一个极端,它虽是基于源代码,但它的port几乎已经把所有需要的可选的组建的安装逻辑写到脚本里了,不需要改它的port,而要学会如何用它那复杂的命令,这也意味着写一个新的port需要付出更多精力。

关于Crux另外值得一提的几点:
做好的包和Port都可以通过可以与同架构同版本的系统共用,其他机器避免重复下载和编译。
其中可以选择只更新自己想更新某几个包,不会出现因为更新了一个包要强制更新很多包的情况。
其port有几个不成文的规则,其中之一就是删除所有的docs,README, LICENSE之类的不被人所重视的相关文件。
使用类似BSD中的初始化脚本来启动系统,这个脚本真的很简洁,是给人看的,每个脚本基本都在百行之内。

ArchLinux对于Crux用户还是很有用的,尤其是国内的用户,一个是可以用它的distfiles的源,还有一个就是做新的Port时可以参考Archlinux的PKGBUILD来加速写Pkgfile的过程。Crux提供的Port大多尽量剔除不必要依赖,所以只有在你需要一个它没有提供的功能时,才需要改已有的。如果不知道哪个功能是需要的,那么基本上不需要它。

使用Crux时与其他的发行版本的区别就是:一是Crux本身的存在感很小,除了包管理工具,很难从哪一点看出这台Linux是Crux还是LFS,而包管理工具本身也是很少的,但它们提供的功能很够用;再就是Crux的包管理系统不止是一个工具,它不是在给用户提供一个尽可能照顾到所有用户需求的包管理工具,它更像是提供一种机制,一种把手工编译,打包,删除等等操作自动化的机制,但它不会隐藏这些内部的过程,这使得当问题出现时,用户能很容易地排查除错,能用户有不同需求时,能依照这种机制很快地做出改变。

对于自行管理的Port,举几个例子:
一个port编译失败,可以pkgmk -kw来保留工作目录再次编译(当然也可以默认-kw),手动修正后在修改Pkgfile,再pkgmk。
一个port想patch下,或者更新下程序版本也一样,改Pkgfile,pkgmk -kw尝试能不能build成功,如果不能则参考上面的过程。

所以通过这种机制,对于port的特性可以完全掌控。Crux把这种可变性交给用户自己,而它本身提供可以快速做出改变的机制,有点类似于以不变应万变。因为对于单个用户来说,需要的定制其实是很少的,把所有用户的需求叠加,那就会很多,多得难以维护。在这点上来说,Arch是有点类似于Crux与Gentoo的折中。

另外不得不提一下:Arch的开发灵感来自Crux。


项目

我们是一组志愿者,为CRUX提供核心和可选包。关于操作系统应该是什么,我们有一个共同的理念,并在对CRUX中实现这一点。如果觉得CRUX适合您,我们邀请您作为用户或团队成员加入我们。

团队

核心维护人员
Juergen Daubert (jue)
Matt Housh (jaeger)
Fredrik Rinnestam (frinnst)

维护者
Jose V Beneyto (sepen)
Thomas Penteker (teK)
Danny Rawlins (Romster)
Alan Mizrahi (alan)

还可以在这里找到退休成员的名单,贡献者的维护者在那边也有其自己的名单。要联系团队成员,请使用邮件列表IRC频道


最新版本:3.2
此版本包含多个库工具链:glibc 2.22, GCC 5.2.0 和 Binutils 2.25.1;内核是 Linux 4.1.13,还包含 X.Org 7.7 和 X.Org Server 1.18.0。更多更新内容请看发行声明

最新版本:3.3
该版本带有一个multilib工具链,包括glibc 2.24,GCC 6.3.0和Binutils 2.27。内核是 Linux 4.9.6。附带X.Org 7.7和 X.Org Server 1.19.1。ISO映像使用isohybrid进行处理,适合在CD上刻录并放在USB驱动器上。更多更新内容请看发行日志

最新版本:3.4
主要更新内容如下:
该工具链已更新为包含 glibc 2.27,GCC 7.3.0 和 Binutils 2.29.1;附带 4.14.40 安装内核,X.Org 7.7 附带 X.Org Server 1.20.0。
ISO 映像使用 isohybrid 进行处理,适用于刻录 CD 并放入 USB 驱动器。
在使用 dosfstools,efibootmgr 和 grub2-efi 添加到 ISO 映像的安装过程中,支持使用 UEFI 。
重要的库已更新为与旧版本 ABI 不兼容的新主要版本。
此次更新建议不要通过ports系统手动更新到 v3.4,这些更改会导致系统暂时中断。

最新版本:3.6
2020年12月8日,CRUX 发布了3.6版,内核升级到5.4.80(LTS)、glibc 2.32、GCC 10.2、OpenSSH 8.4、Perl 5.32、Xorg 7.7、xorg-server 1.20,更多更新消息请访问这里。因为所有引导加载程序现在都在opt源中,所以默认情况下lilo不再放入到核心安装包中。为了提供选择引导加载程序的可能性,我们在设置中添加了一个新的选择菜单。

不兼容的更改:主要版本的重要库已更新为与旧版本不兼容的了。强烈建议不要通过ports工具来手动更新到v3.6,因为这些更改可能会破坏系统。另外还要注意,可能仍有需要更新的软件包未包含在ISO中。这些包需要手动更新或重建。使用prt get sysup和revdep(来自opt/prt-utils)来实现。

已知问题:在v3.5到v3.6的升级过程中,安装程序帮助程序未正确地将“openrdate”重命名为“rdate”以及将“mesa3d”重命名为“mesa”。具体详情可查看这里,该问题已经在v3.6.1版中修正了,该版本已于2021年1月未正式发布。

最新版本:3.7
2022年9月下旬消息,距离上一个版本时隔近两年后,v3.7 正式发布,更新内容如下:
工具链更新:包括 glibc 2.36、gcc 12.2.0 和 binutils 2.39 等
内核:Linux 5.15.55 (LTS)
Xorg:带有 Xorg 7.7 和 xorg-server 21.1.4
Wayland:CRUX 3.7 现在包括 Wayland 1.21.0,默认设置依然为 Xorg,但 Wayland 可以很容易地被安装到系统上,并以纯 Wayland 或 Xwayland 模式运行
把 rundir 从 /var/run 改为 /run
core/dumb_runtime_dir 的引入是为了利用 pam 模块在用户登录时创建 /run/user/$UID
把 cmake、meson、ninja 以及它们的依赖关系移到了 core
pkg-config 已经被 pkgconf 替换
nftables 被添加到了 core 中, iptables 仍然可用
libpcre2 已经从 opt 中移到了 core 中, 所有核心端口都被链接到了 libpcre2 而不是 libpcre
调整了 glibc,使其安装后的脚本能够生成所需的 locale
把下载文件的默认程序从 wget 改为 curl
修改了 prt-get 的一些默认选项
对手册进行了大量的审查,并增加了许多内容
更多详情可查看此处

最新版本:3.8
v3.8于2025年4月下旬正式发布,其附带一个多库工具链,包括glibc v2.40, GCC v14.2.0和binutils v2.43.1;内核为v6.12.23 (LTS),Xorg v7.7 与 xorg-server v21.1.16。包含Wayland v1.23.1,但Ports仍然默认为Xorg,但Wayland可以很容易地安装并在纯Wayland或Xwayland模式下运行。如果您决定运行Wayland会话,则需要启用“contrib”软件源集合并重新构建一些包(例如xorg/mesa)以使其完全可用。

不兼容的更改
重要的库已经更新到新的主要版本,这些版本与旧版本的ABI不兼容。强烈建议不要通过Ports手动更新到CRUX v3.8,因为这些更改将暂时破坏系统。请注意,可能仍有需要更新的软件包未包含在ISO中。这些包需要手动更新/重新构建。使用prt-get sysup和revdep(来自opt/prt-utils)。

要点说明
Glibc现在依赖于libxcrypt,已经将libxcrypt添加到的核心库中;
最新的影子取决于libsd的响应。最后将两者都添加到core中;
rc端口得到了一些改进,请参阅手册了解更多信息;
python2自2020年1月1日起处于EOL状态,已经从ports树中完全删除了它;
Glib和object-introspection循环依赖由一个新的端口Glib-introspection解决;
一些软件包已经被重命名,如果通过iso更新,安装助手将负责处理它;
一个新的存储库尝试按照从v3.8开始的计划自动生成rootfs和容器映像。


官方主页:http://crux.nu/
该文章最后由 阿炯 于 2025-04-26 10:06:22 更新,目前是第 2 版。