当前位置: 首页 > 科技观察

为什么ArchLinux不适合服务器操作系统

时间:2023-03-13 14:09:07 科技观察

我之前的文章都是关于ArchLinux的。我自己也是一个虔诚的Arch教徒,但经常有人问:为什么Linux服务器几乎不用ArchLinux?我们经常看到的Linux服务器系统一般是企业使用的UbuntuServer、CentOS、Fedora或者RedHat。为什么几乎没有ArchLinux?下面我将从几个方面指出ArchLinux在服务方面的劣势。1、过于激进的滚动更新滚动更新是ArchLinux最大的优势,但也是最大的劣势之一。鉴于Linux是一个完全开放的项目,技术人员的能力参差不齐,贡献的代码质量当然也参差不齐。对于其他发行版,软件包在发布到软件源并由用户更新之前需要经过社区的全面测试;但是,ArchLinux的滚动更新机制过于激进,Arch社区对软件包的测试也不是绝对完美(有多少人挂了?)。从某种意义上说,Arch发行版非常依赖其作为测试对象的用户群;它的用户群体类似于测试人员的存在。Arch社区鼓励用户向上游报告Bug,这也是这个特殊系统的一个体现。下图是Arch官网不时发布的帮助技术人员手动解决更新问题的“临时解决方案”:图0:为什么ArchLinux不适合作为服务器操作系统如果Arch服务器在更新过程中死机了,在老板的压力下,技术人员不仅要努力恢复服务器,还要向Arch社区的上游报告错误和提出问题。没有人愿意做这种事情。2.激进的内核更新机制很多Linux桌面用户不止一次的问过我,为什么他们的桌面Linux在更新的时候不像Arch那样立刻删除旧内核?这不会浪费空间吗?这种立即删除旧内核的更新机制也是Arch作为服务器的缺点之一。首先,新内核并不总是能正常工作。万一你的新内核崩溃了,你没有办法立即加载旧内核,只能重新安装旧内核。这个过程非常麻烦,不仅需要从安装介质引导,还必须尝试获取旧内核的软件包。对于远程服务器,几乎没有解决方案。以下是来自ArchWiki的解决方案。可见这有多麻烦:图一:为什么ArchLinux不适合作为服务器操作系统其次,立即删除旧内核需要重启系统来加载新内核,否则很容易出现奇怪的问题。这是因为Linux所谓的“内核”中包含了大量动态加载的模块。如果某个模块在某次启动后一直没有加载,然后更新系统内核,删除旧内核,这些模块将永远无法加载。已加载-除非您重新启动系统以完全切换到新内核-因为它们与旧内核一起被删除。如果你手头有一个Arch系统,你可以尝试在某个引导后不插入任何USB设备来更新内核。你会发现,如果不重启系统,无论你怎么努力,新插入的USB设备永远加载不出来——因为需要加载的模块已经和旧内核一起被删除了。重启系统可以完全切换到新内核使用新版本的动态加载模块。但是对于服务器来说,三天重启一次是不可能的;然而,ArchLinux是一个快速迭代的操作系统,每周更新一次,每月更新一次。这使得Arch不适合作为服务器操作系统。3.软件包管理系统ArchLinux之所以备受推崇,很大程度上是因为其易于使用的软件包管理系统。不同于Debian系列的apt/dpkg和RedHat系列的dnf(yum)/rpm包管理系统,ArchLinux只用一个工具pacman就解决了获取和安装两个功能。这降低了为ArchLinux制作软件包的门槛,这也是AUR能够覆盖几乎整个Linux软件生态的主要原因。既然一个工具就可以完成工作,为什么其他两个主流系列还要有两个工具来管理软件包系统呢?这是因为,在这个管理软件包的两个工具体系中,负责处理本地依赖和本地包的部分并不仅仅存在管理依赖和安装软件包的部分。它还有一个更有用的功能:提供“虚拟包”支持。说到“虚拟包”,就不得不提到Java平台。由于Java的开放性,常见的Java运行环境有两种:一种是Oracle官方的JRE,另一种是开源社区创建的OpenJRE。它们都对Java提供了高水平的支持,但仍然存在细微差别。比如AndroidStudio在使用OpenJRE运行时,偶尔会出现奇怪的bug,还有一小部分软件无法在OracleJRE上正常运行。它们都提供JRE支持,但是对于Debian或者RedHat来说,两者是可以共存的:dpkg或者yum可以决定为哪些应用程序选择哪个JRE来为应用程序提供JRE依赖。但是对于pacman,虚拟包支持是不存在的。只有一个包可以提供JRE支持:安装一个需要删除另一个。这对服务器来说相当尴尬:不能保证所有程序都能找到最重要的依赖项。4.虽然打包粒度这几年有所提升,但是ArchLinux的打包粒度对于服务器来说还是太大了。我们可能只使用包的一部分,但pacman会为你安装整个包——你不必选择。对于服务器来说,安装实现功能的软件包越少越好——节省资源,减少软件系统带来的漏洞。这也是Arch不适合作为服务器操作系统的原因之一。就我目前的体验而言,以上原因完全可以打消在服务器端使用ArchLinux的念头。但对于桌面系统,尤其是开发者来说,Arch还是一个相当不错的选择。虔诚的Arch信徒们,别忍耐;想装东西的时候就装,想研究的时候就装——因为明天可能就不能正常运行了。