Linux 軟件安裝三大流派
| 方式 | 特點 | 適用場景 |
源碼編譯 (./configure && make && make install) | 高度定制、優化針對性強、無依賴自動解決 | 開發調試、特殊優化需求、無包管理器環境 |
| 二進制包 (RPM/DEB) | 安裝快、依賴自動解決 (yum/dnf/apt)、版本管理標準化 | 生產環境批量部署、系統級軟件 |
| 腳本/二進制運行文件 (.sh/.bin/.run/AppImage) | 跨發行版、無需 root、自包含依賴 | 專有軟件、用戶級應用、測試版本 |
RPM 包管理核心命令
# 安裝/升級
rpm -ivh pkg.rpm # 安裝
rpm -Uvh pkg.rpm # 升級 (不存在則安裝)
rpm -Fvh pkg.rpm # 僅升級已安裝
# 查詢
rpm -qa # 所有已安裝
rpm -qi pkg_name # 詳細信息
rpm -ql pkg_name # 文件列表
rpm -qc pkg_name # 配置文件
rpm -qf /path/file # 文件屬於哪個包
rpm -qR pkg_name # 依賴關係
# 卸載
rpm -e pkg_name
rpm -e --nodeps pkg_name # 忽略依賴強制卸載
# 驗證
rpm -V pkg_name # 已安裝文件完整性
rpm -K pkg.rpm # 包簽名/摘要驗證
源碼包安裝 (.src.rpm / .tar.gz)
# .src.rpm 重構二進制包
rpmbuild --rebuild pkg.src.rpm
# 生成的 RPM 在 ~/rpmbuild/RPMS/arch/
# .tar.gz 源碼安裝標準流程
tar xf pkg.tar.gz
cd pkg
./configure --prefix=/usr/local/pkg
make
make install
# 協助卸載: make uninstall (需 Makefile 支持)
RPM 打包實戰:編寫 SPEC 文件
目錄結構準備
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo "%_topdir %(echo $HOME)/rpmbuild" > ~/.rpmmacros
Nginx SPEC 文件示例 (~/rpmbuild/SPECS/nginx.spec)
Name: nginx
Version: 1.24.0
Release: 1%{?dist}
Summary: High performance web server
License: BSD-2-Clause
URL: https://nginx.org/
Source0: https://nginx.org/download/nginx-%{version}.tar.gz
BuildRequires: gcc, pcre-devel, openssl-devel, zlib-devel, make
Requires: pcre, openssl-libs, zlib
%description
Nginx is a high performance HTTP and reverse proxy server.
%prep
%autosetup -n nginx-%{version}
%build
./configure \
--prefix=%{_prefix}/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-pcre \
--with-openssl \
--with-zlib
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%{_prefix}/nginx
%doc README CHANGES
%changelog
* Mon Jan 01 2024 Builder - 1.24.0-1
- Initial RPM package
關鍵 SPEC 節點說明
| 節點 | 用途 |
| %prep | 解壓源碼、打補丁 (%autosetup, %patch) |
| %build | 編譯構建 (configure, make) |
| %install | 安裝至 $RPM_BUILD_ROOT (臨時根目錄) |
| %files | 聲明包含文件,決定最終 RPM 內容 |
| %pre/%post | 安裝前/後腳本 |
| %preun/%postun | 卸載前/後腳本 |
| %clean | 清理構建目錄 (現代 rpmbuild 自動處理) |
| %changelog | 版本變更記錄 |
構建 RPM
# 放置源碼包
cp nginx-1.24.0.tar.gz ~/rpmbuild/SOURCES/
# 構建二進制 RPM + 源碼 RPM
rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
# 產物位置
# ~/rpmbuild/RPMS/x86_64/nginx-1.24.0-1.el7.x86_64.rpm
# ~/rpmbuild/SRPMS/nginx-1.24.0-1.el7.src.rpm
現代打包工具推薦
- fpm (Effing Package Management):
gem install fpm,支持 dir, tar, rpm, deb, docker 等多種源/目標格式互轉,極大簡化打包。
- CheckInstall:
make install 時自動生成 RPM/DEB。
- Copr / OBS:雲端構建服務,提交 SPEC/源碼自動構建多發行版倉庫。