在 Linux 中,软件的安装方法有三种:使用源码编译安装、使用包管理器安装、使用二进制包安装
我们以服务运维为主,将简单讨论 snap、flatpak、appimage 等等用于桌面程序管理的工具
以上各种安装方式的对比
我们没有记录“缺点”,因为某种方式的优点则是其他方式所不具备的特性。并无所谓的缺点,只看是否满足需求。
源码编译安装的优点
定制软件包:我们可以根据自己的需要,使用不同的编译选项,添加自定义模块,有更多选择;
性能优化:根据平台特性,使用不同的编译优化选项,以提高应用性能。但是这些的前提是以精湛的技术作为支撑,熟悉这些优化所带来的改变。
安装最新版本:在各种 Linux 发行版中,应用的版本通常落后于官方版本。通过源码编译我们可以获取最新版本;
问题修复:我们可以最快的速度修复 Bug(关注应用咨询,处理应用漏洞),而无需等待发行版团队发布新的应用包;
使用包管理器安装的优点
安装方便:在安装某个应用时,软件包管理器自动解决依赖关系(安装依赖包),无需我们再去安装其他依赖程序;
便于管理:由发行版自带的应用程序包,除了应用外,还包含服务管理脚本(systemd、init)、日志轮转、符合 FHS 规范;
附带文档:安装应用之后,还会在系统中安装对应的命令手册,方便查阅;
提供源码:发行版同时还提供程序的源码包,以及编译程序时的参数,可以让我们进行审查
稳定可靠:发行版虽然提供的软件版本比较旧,但是通常能够满足需求,是已知问题已修复的稳定版本。
使用二进制包安装的优点
无需编译:官方已经编译,我们无需再手动编译(通常按照文档安装依赖即可)
官方优化:官方已经进行适度的调优和配置(属于通用设置)
数据管理:通常应用相关的数据也在该应用的安装目录中,迁移可以作为整体进行处理
注意事项,该方法特指使用官方提供的二进制压缩包(tar.gz),比如在 MySQL 官方站点下载的已编译的 MySQL 包。但是这不包含 rpm、deb 包,比如 Nginx 官方提供 rpm 包,则我们将其归类到 源码编译安装的优点 中。
我们应该如何选择安装方式
对于在服务运维过程中的软件安装
我们首选「使用包管理器安装」,先查找 Linux 发行版的仓库是否已经包含,(如果没有)然后再去应用服务的官方站点查找是否提供 rpm、deb 应用包
其次,我们会选择「使用二进制包安装」,我们会到官方站点下载 tar.gz 然后在本地解压运行。如果需要服务管理,可以自定义服务文件(systemd、init、supervisor)
最后,无奈之下我们会选择使用「使用源码编译安装」二进制包,然后按照「使用二进制包安装」的方法处理。
对于在本地工作环境、软件测试过程中
我们依旧首选「使用包管理器安装」,毕竟维护方便、规范管理是我们首要考虑的;
如果发行版或者官方没有 rpm deb 等等应用包,我们会选择「使用二进制包安装」方法;
最后,无奈之下,我们会先考虑 snap appimage flatpak 等方式,然后我们再选择「使用源码编译安装」
参考文献
Is it better to compile from source or to install from a .deb package?
Source vs Package Managers on the job
What is the difference between rpm file and ‘make’ source code from installation perspective
Where should I put software I compile myself?
Source vs. Package Managers: Installing Software in Linux Without Hassle
Binary vs. Source Packages: Which Should You Use?