从源代码安装软件
由於 CentOS 且备一个完整的软件开发环境,普遍来说并没有重要的障碍能够阻止你将 tar.gz 或 tar.bz2 解压,然后编译及安装这些软件。这个所谓 ../configure; make; sudo make install 的方法,在欠缺良好包装系统的环境下无可避免是要用的。
然而除非你有绝对必要,否则不应这样做的原因有好几个。此外你亦须留心数个警告。
1. 弊处
CentOS 是关乎稳定性,不是关乎最新软件。
- CentOS 所提供的软件是基於稳定性而选被上的 —— 除了软件本身要稳定外,它亦必须与其它已安装的软件「好好相处」。
- 一个常见的异议是这样:「但是 x.y.1 版软件内的安全性漏洞在 version x.z.1 内已经去除了!」
- 这也许是事实。但通常 x.z.1 版本并会比 x.y.1 拥有更多功能,而它们可能会破坏软件预期的特性。
安全性更新都会被反向移植到 CentOS 上所安装的版本里。你可以用 rpm -q --changelog package 来检查。
- 「但我绝对须某某软件,而它并不连带在 CentOS 内。」
很可能其它人已经为你包装好了。有数个 CentOS 维护及第三方的软件库内已收录了大量在 CentOS 上运行的组件。
- 「但我需要某某软件是 x.y.z 版的」
你很可能是在找寻一个较前卫的发行版本,或者正在跟随一份由不熟练的作者所撰写的教学文档,因为确切的版本很少会有实际影响。
较新的版本很可能会(甚至乎:一定会)破坏其它软件对原有版本的依赖;那些坚持要最新版 python 或 glibc 的人们经常会碰到这个问题,因为 python 及核心库在 CentOS 发行模式中的大部份应用程序组件内是最基本的。可惜的是,单单取代预先包套好的内容已足够破坏一个系统到不能修复的地步,导致必须重装。
2. 利处
如果你完全不能找到所需的组件,那么就是时候考虑你要如何创建及安装这个软件。
包装 RPM 并不太困难。
- 如果你亲自包装软件,它容许你作简易更新,因为你不必记住如何如何设置那个软件 —— 一切都在 spec 文件内。
- RPM 会知道关於你刚创建的软件,所以你可以安装那些依赖它的软件。
- 这样做方便追究软件的依赖、供应及需求。
你可以将你的组件提供给其它人。某些软件库乐於加载按照他们的原则包装的软件。
3. 警告
切勿因为你认为有绝对需要用较新版本的软件,而尝试安装那些在 CentOS 内已包含源代码组件的软件。这样做会造成破坏。
当你遁这个方向走,你便踏离了由发行版本提供的自动安全性更新的范围。你将要独力承担修正、重新编译、及安装软件等责任。
假若你真的、真的、真的需要这样做,请尝试与软件并存,例如安装在 /opt 或在 /usr/local/ 内。
如果你需要 perl 模块,切勿使用 CPAN,因为这样做多数会破坏你的 perl 安装。请尝试利用 cpan2rpm 来包装 perl 模块,也或者利用 fedora-rpmdevtools 提供给 perl 模块用的 spec 范本。同样的忠告亦适用於 python。很多独立的包装者在过往亦须要解决同样的问题,因此你应该考虑采用他们软件库内的程序或源代码组件。
fedora-rpmdevtools 已被收录在 kbs-CentOS-Extras 软件库内。见「软件库」。它们亦可帮助你创建一般的 rpm。
4. 结论
切勿从源代码创建软件,尽可能使用其它软件库。假若你需要亲自创建软件:自制组件。假若你不能自制组件:将软件安装在一个不会产生衡突的位置。 永远不要取替 CentOS 附带的软件。
另外请记得: 如果系统损坏了,你要独自收拾残局。举例说,IRC 频道将不会提供任何支持。
Translation of revision 9