2010 年开始正式接触 Linux,入门发行版是 Ubuntu 10.10,后来过渡到 Ubunu 11.04, 这其中也尝试了很多其他主流的发行版。进入实验室之后,开始用 CentOS 5,然后是 CentOS 6,现在进化到 CentOS 7。 使用了四年的 Linux,前三年都是在瞎折腾,浪费了不少时间,也得到了不少经验与教训。 现在可能是真的老了,已经不愿意折腾了,只希望配置好一个系统之后,就一直使用下去。 为什么要写/读这一篇使用 Linux 尤其是 CentOS 会遇到一些坑,或是一些有洁癖的人不能忍的事情:
在经历了几次重装 CentOS 之后,特总结出如下几条软件安装的方法与原则,以尽可能保证当前系统的稳定、整洁,尽可能降低系统洁癖引起的重装冲动。 以下所说,仅限于 CentOS7,对其他发行版,或许有借鉴意义。 官方源CentOS 自带的四个官方源中,默认打开的有 base、updates、extras,这三个源中包含了约 9000 个软件包,是最稳定、也是最值得信赖的源。 因而若一个软件包在官方源内,则应通过官方源安装:
第三方源官方源虽然包含了很多软件包,但无法满足日常需求。幸好有第三方源,可以作为官方源的补充。 在使用第三方源的过程中,最怕遇到这两个问题:
这两个问题经常是致命的,出现各种预料不到的后果,因而选择第三方源要遵循如下原则:
就 CentOS 而言,根据以上的原则,使用如下第三方源:
因而,若一个软件包位于 EPEL、ELRepo 中,或一些小型的第三方源中,则添加该第三方源,并用
官方 rpm 包大部分非开源的软件,在 CentOS 官方源或 EPEL 中是没有的。有些软件的官方网站会提供官方 rpm 包。此时可以从官方网站下载与当前系统对应的 rpm 包,直接用如下命令安装:
比如,WPS for Linux 就是其中一个。在安装的过程中 rpm 命令会自动检查依赖关系,若该软件所依赖的包在官方源和 EPEL 源中可以找到,则自动安装。 直接安装 rpm 包的做法相当省事,但该软件不能由 yum 更新,稍稍麻烦一点。有些软件,比如前面提到的 Google、Dropbox 和 Adobe 其实也可以通过这种方法安装,在安装的同时会给系统添加源,对于这类软件依然可以很方便的更新与删除。 解压即用有些软件,官方提供了压缩包,解压之后即可直接运行其中的二进制文件,比如很多 Java 写的软件。这类软件没有给源代码,而是给了可以在当前平台下直接执行的二进制文件。大多数非开源的商业软件都采取这种办法。
Linux 下的习惯是,商业软件或第三方软件都安装到 第三方 rpm 包有些软件,CentOS 源和 EPEL 源中找不到,官方又没有提供 rpm 包,但是其他第三方源提供了 rpm 包。分情况讨论:
第三方包管理器不同的发行版使用不同的软件包管理器,CentOS 使用 yum,Ubuntu 使用 apt-get。近些年又出现了一些与发行版无关的第三方包管理器,比如 Linuxbrew、Gentoo Prefix、pkgsrc。 LinuxbrewLinuxbrew 是由 OS X 平台下非常流行的 Homebrew 移植到 Linux 下的。Linuxbrew 可以作为系统自带的包管理器的一个补充。其特色在于:
试用了一下,一个比较坑的地方是,linuxbrew 会自己内部解决依赖问题。比如,我试着通过 linuxbrew 安装 terminator,然后发现 terminator 依赖于Python,尽管系统已经安装了 python,linuxbrew 还是会安装一份 python,又由于 python 依赖于更多的东西,导致又安装了更多软件包在 home 下。而且,linuxbrew 是从源码编译软件的,所以相对来说速度较慢。 编译源码大部分软件用前面的几种方法应该都能安装上了。如果没安装上,那就得问问自己,真的需要安装这个软件么。如果不是非常必要的话就不要安装啦。如果是必须的软件,那就必须要手动编译了。 常见的源码编译,一般也就是如下几步。当然,具体情况具体对待:
一般来说,这类软件的默认安装目录都是
我个人非常不喜欢这种方式,因为作为一个通过源码编译的软件来说,意味着编译者 要完全负起管理该软件的义务,这样的放置方式会来更新或卸载软件带来很多麻烦。 所以我总是会在 configure 的时候加上 prefix 手动指定安装路径。要卸载该软件就直接删除 /opt 下对应的目录,要更新的话,也可以先删除,再重新编译一遍。这样做稍微麻烦的一点是, 需要手动将该软件的 bin 目录加入到 PATH 中,还有可能需要修改 编译代码好吧,其实我不知道该怎么起标题了。。
前一节 “编译源码” 主要针对的是一些大型软件包,这一节 “编译代码” 指的是对一些 专业性很强的小代码包的处理方式。比如有些软件包编译之后实际需要的只是一个 二进制文件,这个时候就没有必要安装到
比如我的
不要随便什么二进制文件都往 bin 里放,这里只应放一些常用的命令或很通用的工具。 自成系统的软件有一类软件,其拥有众多模块或包,为了管理这众多的模块,就需要拥有一个自己的模块 / 包管理器。这其中以 TeX、Perl 和 Python 为代表。对于这一类软件,其众多的模块是最大的优势,也是最值得利用的资源,因而我通常会选择手动安装它们,原因如下:
当然,即便是使用系统自带的版本,也依然可以用该软件自带的包管理器来安装模块。但将导致:
这一方面会导致模块管理的混乱,另一方面用软件自带的包管理其安装模块时,可能会依赖于其他模块的最新版本,若该模块是通过系统 yum 安装的较旧的版本,则可能导致模块的安装失败。 因而,对于这类软件,一般单独安装,并用各自的包管理器管理模块:
例外有规则总有例外。 第三方源mosquito-myrepo 是一个私人维护的源,其中包含了中文输入法、QQ、飞信、为知笔记、有道词典、百度云以及若干音频、视频播放器。我对这个源的态度是又爱又恨,其提供了很多中国人需要的软件,但因为其依赖于除 EPEL 外的其他第三方软件源,进而可能导致包冲突。所以对该源的使用,要保持谨慎。 总结简单总结一下:
修订历史
(责任编辑:IT) |