原始碼安裝 (Source Build) 能針對系統優化、啟用特定功能、安裝未打包軟體。本文標準化流程:解壓、configure、make、make install、make clean/uninstall,並解析關鍵參數 --prefix、--enable/--disable、DESTDIR 打包技巧。
# 1. 取得原始碼
wget https://example.com/foo-1.2.3.tar.gz
# 或 git clone https://github.com/user/foo.git
# 2. 解壓
tar xf foo-1.2.3.tar.gz # 自動偵測 .gz/.bz2/.xz
cd foo-1.2.3
# 3. 閱讀文件 (關鍵步驟)
cat README INSTALL NEWS # 依賴、編譯選項、已知問題
# 4. 配置 (生成 Makefile)
./configure --prefix=/opt/foo # 指定安裝根目錄
# 常用選項:
# --enable-feature / --disable-feature
# --with-lib=/path / --without-lib
# --sysconfdir=/etc/foo --localstatedir=/var/foo
# CC=clang CFLAGS="-O2 -march=native" # 編譯器優化
# 5. 編譯
make -j$(nproc) # 並行編譯,加速
# 6. 安裝 (需 root)
make install
# 7. 驗證
/opt/foo/bin/foo --version
| 參數 | 用途 | 範例 |
|---|---|---|
--prefix=DIR | 安裝根目錄 (預設 /usr/local) | --prefix=/opt/nginx |
--exec-prefix=DIR | 架構相關檔案安裝目錄 (通常同 prefix) | |
--bindir=DIR | 執行檔目錄 | --bindir=/usr/bin |
--libdir=DIR | 庫檔目錄 | --libdir=/usr/lib64 |
--sysconfdir=DIR | 設定檔目錄 | --sysconfdir=/etc/nginx |
DESTDIR=DIR | 安裝時加前綴 (打包用),不影響運行路徑 | make DESTDIR=/tmp/pkg install |
# 清理編譯中間檔 (保留 configure 生成的 Makefile)
make clean
# 徹底清理 (含 Makefile,需重新 configure)
make distclean
# 解除安裝 (需原始碼目錄未刪除,且 Makefile 支援 uninstall 目標)
make uninstall
# 若不支援,需手動刪除 --prefix 下對應檔案
# 使用 checkinstall 自動產生套件 (需安裝 checkinstall)
make clean
./configure --prefix=/usr
make -j$(nproc)
checkinstall -D --install=no --pkgname=foo --pkgversion=1.2.3 \
--maintainer="you@example.com" --default
# 產生 foo_1.2.3-1_amd64.deb 或 .rpm,可用 dpkg/rpm 安裝管理
configure: error: no acceptable C compiler foundyum groupinstall "Development Tools" / apt install build-essential。checking for libfoo... not foundyum install libfoo-devel / apt install libfoo-dev,或指定 --with-libfoo=/custom/path。make[1]: *** [foo.o] Error 1make 2>&1 | head -30),常為缺頭文件、C 標準不符、編譯器版本過舊。command not found$PATH 包含 $PREFIX/bin,或建立軟連結 ln -s /opt/foo/bin/foo /usr/local/bin/。dnf/apt) 安裝穩定版;原始碼安裝僅用於:需要最新功能、自訂編譯選項、無套件可用。/opt/- ,以 stow 或 lndir 管理符號連結。config.log、Makefile) 以便日後 make uninstall 或升級。./configure --help | grep enable) 於部署文件。遵循標準流程與參數控制,原始碼安裝將變得可預測、可維護、可複現。