文档首页> 技术教程> 源码编译安装与包管理安装怎么选

源码编译安装与包管理安装怎么选

发布时间:2026-02-17 12:01        更新时间:2026-02-18 09:45
同一款软件在 Linux 上至少有两种装法:yum/apt 直接装现成的二进制包,或者下载源码自己编译。两种方式没有绝对优劣,差别体现在四个维度:版本新旧、依赖处理、升级卸载的成本,以及可定制程度。 ## 包管理:省心但版本受限 yum 和 apt 装的包由发行版统一构建,依赖自动解决,yum remove / apt purge 一条命令卸干净,升级只需 yum update。已装版本随手可查:rpm -q nginx 或 apt list --installed | grep nginx。代价是版本由仓库决定,仓库里是什么就是什么,想要更新的版本,只能等系统大版本更替,或者引入第三方仓库——混用第三方源有依赖冲突的风险,装前想清楚。仓库里有哪些可用版本,yum list available 或 apt-cache policy 软件名 都能查到。 ## 源码编译:灵活但全靠自律 必须编译的场景其实很明确:仓库里的版本太老、满足不了功能要求;软件需要自定义模块或编译参数,典型如 nginx 追加第三方模块;再就是安全补丁只发了源码,包还没跟上。 编译的麻烦在依赖。configure 报错提示缺某个头文件,就得去装对应的 devel 包,版本不合还要自己协调,俗称依赖地狱。装完也没有统一的卸载入口,make uninstall 常有残留。所以编译一律加 --prefix 把文件圈进独立目录,比如 /usr/local/nginx,将来整个目录删掉就是卸载;同时必须记录参数: ``` ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install ``` 把完整参数写进 /usr/local/src/INSTALL.md,连同软件版本、编译日期一并记下。半年后升级时,这份记录是唯一线索,config.log 只能算事后补充。同一台机器编译多个版本时,目录名带上版本号,如 /usr/local/nginx-1.24,切换靠改软链接,回退也只要把链接指回去。 ## 按场景给结论 业务核心组件且需要定制,编译,并把参数文档化;工具类软件、用默认功能就够,一律包管理。拿不准时先包管理,遇到具体瓶颈再针对性换编译,顺序反过来代价会大很多。