Bash 例項:探討 ebuild 系統(轉)

ba發表於2007-08-17
Bash 例項:探討 ebuild 系統(轉)[@more@]進入 ebuild 系統
我真是一直期待著這第三篇、也是最後一篇 Bash 例項文章,因為既然已經在 第 1 篇和 第 2 篇中講述了 bash 程式設計基礎,就可以集中講述象 bash 應用開發和程式設計這樣更高階的主題。在本文中,將透過我花了許多時間來編碼和細化的專案,Gentoo Linux ebuild 系統,來給您大量實際的、現實世界的 bash 開發經驗。

我是 Gentoo Linux(目前還是 beta 版的下一代 Linux OS)的首席設計師。我的主要責任之一就是確保所有二進位制包(類似於 RPM)都正確建立並一起使用。正如您可能知道的,標準 Linux 系統不是由一棵統一的源樹組成(象 BSD),而實際上是由超過 25 個協同工作的核心包組成。這其中包括:

包 描述
linux 實際核心
util-linux 與 Linux 相關的雜項程式集合
e2fsprogs 與 ext2 檔案系統相關的實用程式集合
glibc GNU C 庫

每個包都位於各自的 tar 壓縮包中,並由不同的獨立開發人員或開發小組維護。要建立一個發行版,必須對每個包分別進行下載、編譯和打包處理。每次要修復、升級或改進包時,都必須重複編譯和打包步驟(並且,包確實更新得很快)。為了幫助消除建立和更新包所涉及的重複步驟,我建立了 ebuild 系統,該系統幾乎全用 bash 編寫。為了增加您的 bash 知識,我將循序漸進地為您演示如何實現該 ebuild 系統的解包和編譯部分。在解釋每一步時,還將討論為什麼要作出某些設計決定。在本文末尾,您不僅將極好地掌握大型 bash 程式設計專案,還實現了完整自動構建系統的很大一部分。

為什麼選擇 bash?
Bash 是 Gentoo Linux ebuild 系統的基本元件。選擇它做為 ebuild 的主要語言有幾個原因。首先,其語法不復雜,並且為人們所熟悉,這特別適合於呼叫外部程式。自動構建系統是自動呼叫外部程式的“膠合程式碼”,而 bash 非常適合於這種型別的應用。第二,Bash 對函式的支援允許 ebuild 系統使用模組化、易於理解的程式碼。第三,ebuild 系統利用了 bash 對環境變數的支援,允許包維護人員和開發人員在執行時對其進行方便的線上配置。

構建過程回顧
在討論 ebuild 系統之前,讓我們回顧一下編譯和安裝包都牽涉些什麼。例如,讓我們看一下 "sed" 包,這個作為所有 Linux 版本一部分的標準 GNU 文字流編輯實用程式。首先,下載原始碼 tar 壓縮包 (sed-3.02.tar.gz)(請參閱參考資料)。我們將把這個檔案儲存在 /usr/src/distfiles 中,將使用環境變數 "$DISTDIR" 來引用該目錄。"$DISTDIR" 是所有原始原始碼 tar 壓縮包所在的目錄,它是一個大型原始碼庫。

下一步是建立名為 "work" 的臨時目錄,該目錄存放已經解壓的原始碼。以後將使用 "$WORKDIR" 環境變數引用該目錄。要做到這點,進入有寫許可權的目錄,然後輸入:

將 sed 解壓縮到臨時目錄

$ mkdir work$ cd work$ tar xzf /usr/src/distfiles/sed-3.02.tar.gz


然後,解壓縮 tar 壓縮包,建立一個包含所有原始碼、名為 sed-3.02 的目錄。以後將使用環境變數 "$SRCDIR" 引用 sed-3.02 目錄。要編譯程式,輸入:

將 sed 解壓縮到臨時目錄

$ cd sed-3.02$ ./configure --prefix=/usr(autoconf 生成適當的 make 檔案,這要花一些時間)$ make(從原始碼編譯包,也要花一點時間)


因為在本文中只講述解包和編譯步驟,所以將略過 "make install" 步驟。如果要編寫 bash 指令碼來執行所有這些步驟,則程式碼可能類似於:

要執行解包/編譯過程的樣本 bash 指令碼

#!/usr/bin/env bashif [ -d work ]then # remove old work directory if it exists rm -rf workfimkdir workcd worktar xzf /usr/src/distfiles/sed-3.02.tar.gzcd sed-3.02./configure --prefix=/usrmake

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-962886/,如需轉載,請註明出處,否則將追究法律責任。

相關文章