Arch Build System (正體中文)

From ArchWiki
Revision as of 09:41, 10 June 2013 by Jstjohn (Talk | contribs) (improve link)

Jump to: navigation, search

ABS 是什麼?

ABS (Arch Build System),Arch 構建系統。它是一套像(BSD)Ports 一樣的體系,能從 source(源代碼) 來構建一個軟件。Pacman 是 Arch 下特定的二進制安裝包管理工具(也包括管理那些從 ABS 構建的二進制安裝包),而 ABS 則是 Arch 下特定的編譯工具,將源代碼編譯為一個可供安裝的 .pkg.tar.gz 包。

什麼是像(BSD)Ports 一樣的系統?

'Ports' 體系被用於 FreeBSD (和其它 BSD 作業系統),它允許下載,解包,修補,編譯和安裝source(源代碼) 包。 'port' 僅僅是用戶電腦上,以要安裝的相應軟件來命名的一個小目錄,它包含一些文件,以指導從軟體的來源處下載安裝一個包,一般都是找到那個目錄/port,然後依次用命令 "make" 和 「make install」,'Ports' 體系就會開始下載,編譯和安裝那個軟體了。

ABS 的概念

ABS 是由目錄樹組成(ABS Tree),位於 /var/abs 之下,包含了不少子目錄。這些子目錄都在某個類別裡面,並分別以其安裝包的名字來命名。你可以將這些以安裝包的名字來命名子目錄,稱為 'ABS',就如同這樣稱呼 'port' 一樣。這些 ABS,或子目錄,並不包含軟體安裝包,也沒有它們的源代碼,而是含有一個 PKGBUILD 文件 (有時也含有其它一些文件)。 PKGBUILD 是一個簡單的文本文件,含有編譯與打包的指令,也含有下載適當源碼包的URL地址。 ABS 體系中最重要的組成部分就是 PKGBUILDs 了。

快速瀏覽

以root執行「'abs'」創造ABS樹 (ABS tree)。舉例來說,如果你想要從source建造nano, 妳可以複製 /var/abs/core/base/nano 到一個建造目錄(build directory),導引(navigate)至該目錄並執行「makepkg」。事情就那麼簡單。Makepkg會嘗試去讀取並執行PKGBUILD中的指令。 source tarball 將會依照/etc/makepkg.conf中的CFLAGS被自動下載、解壓、編譯,最後擠進一個帶有.pkg.tar.gz副檔名的package,按照PKGBUILD中的指令。安裝也很簡單,執行「pacman -U nano.pkg.tar.gz」。Package的移除也由pacman處理。

PKGBUILD跟其他的檔案,當然,可以根據你的需求被調整,而你也可以選擇ABS的makepkg功能,從 sources outside the ABS樹 itself,來製作(make)你個人訂製的packages。 (See the prototype PKGBUILD and install files under /var/abs/core/)

有了ABS樹後,Arch的使用者可以在彈指間快速地從源代碼(source)編譯想要的套件(package)。

ABS重要特色

除了之前提到的功能,ABS還有兩大特色

  • 你還可以使用'makepkg這項工具,去創造一個套件(package),然後在社群上分享。同樣的這個.pkg.tar.gz套件一樣,在你想要移除時,利用pacman乾淨地清除。
  • ABS工具讓你可以利用AUR,或者是其他Arch使用者貢獻的PKGBULDs,這是一個你使用上非常方便已經先行處理裡過的PKGBULDS。

ABS 系統的概況

'ABS'可以說是一個"保護傘",因為他包含而且相依很多其他的元件。雖然技術上來說不是那麼精確,但是它是一個完整的工具包(toolkit)且考慮了系統的結構和系統的工具。

關鍵名詞解釋:

  • ABS樹:ABS資料結構在'/var/abs/'下。他包含了很多以可取的Arch軟體包為名字的子資料夾,但並不包含真的軟體包。
  • ABS:是ABS樹中的一個資料夾,資料夾的名字是一個Arch軟體包的名字,資料夾的內容是PKGBUILD。
  • PKGBUILD:是位於ABS下的純文字檔案,其包含了ABS名字對應的軟體源代碼的URL。
  • AUR:是Arch User Repository簡稱。AUR包含了很多非官方而是Arch的使用者自己提供的Arch套件。
  • makepkg:一個Shell command,其會讀PKGBULID檔案,並按照檔案資訊自動製造.pkg.tar.gz檔案。
  • Pacman:其與ABS是分開的軟體,但他可以手動執行或是藉由makepkg呼叫來安裝/移除建造好的套件,並且自動安裝所需相依的軟體。

(譯按:一個樹狀目錄,裏面存在很多軟體的訊息,每個軟體用一個資料夾裝起來,而資料夾名字和裏面裝的軟體同名,而資料夾稱做ABS,資料夾內的下載資訊稱做PKGBULID,而PKGBULID只是個簡單的文字檔,主要紀錄了其軟體的source的URL,提供了下載編譯的資訊。AUR是很多使用者自己上傳的Arch套件的地方,每個使用者都可以上去抓取別人做好的套件來用。而從AUR下載的套件可以用Pacman來協助安裝。makepkg即是做套件的工具,套件做好了也可以上傳到AUR分享給其他使用者。)

我為什麼要用到 ABS?

ABS主要是用於:

  • 新的軟體出現後,官方還沒有提供該套件,因此可以從源代碼(source)製造新的套件(package),詳見Creating Packages)
  • 透過AUR建造而且分享套件
  • 按照自己的特殊需求去製造一個為自己量身訂作的套件
  • 利用compiler flags來重建整個系統,類似"FreeBSD"
  • 乾淨的建造你個人特製的內核(詳見Kernel Compilation)
  • 針對你特製的內核製造適合的內核模組。

使用Arch Linux並不一定要用ABS,但是他是好用且自動化的編譯源代碼的工具。 這個HOW-TO主要讓你對ABS和Arch套件有概括性的了解,但是內容不夠完整。如果你願意了解更多,建議閱讀使用者手冊(man)。

首先:安裝二進制安裝包

要使用ABS,請先從core repository安裝abs,只需要打下列指令

pacman -S abs

這將會自動抓取需要的軟體。

/etc/abs.conf

將你需要的軟體儲存庫(repository)加到 /etc/abs.conf 內(即編輯/etc/abs.conf):

nano /etc/abs.conf

移除在軟體儲存庫前的(repository)'!',表示採用其軟體儲存庫(repository)

REPOS=(core extra community !testing)

創建 ABS 樹

以root執行

abs

此指令會建立ABS樹在/var/abs下。此外,ABS樹會紀錄在/etc/abs/abs.conf 週期性打abs這個指令,幫助您更新您ABS樹

/etc/makepkg.conf

Edit /etc/makepkg.conf to specify environment variables and CFLAGS:

nano /etc/makepkg.conf

ABS 樹

當你第一次執行abs指令,它會和arch的伺服器同步建造ABS樹,並且採用cvs系統。 那什麼是ABS樹呢?它其實是在/var/abs下建立的樹狀資料結構。 像下面這個:

|-
| -- core/
|-
|     ||-- autoconf/
|-
|     ||-- automake/
|-
|     ||-- ...
|-
| -- devel/
|-
| -- ...
|-
| -- extra/
|-
|      || -- daemons/
|-
|      ||      || -- acpid/
|-
|      ||      ||      || -- PKGBUILD
...    ...    ...    ...

所以ABS樹和套件資料庫有完全相同的資料結構:

  • 第一階層的資料夾代表"種類"(categories)
  • 第二階層的資料夾就是ABS,它的名字就是對應的套件的名字。
  • 裏面的PKGBUILD檔案包含了該套件的訊息。
  • 此外,ABS資料夾內可以包含補丁(patch)或是其他安裝套件需要的檔案

請務必記得,ABS資料夾內並沒有真正的源代碼!! 取而代之的是PKGBUILD檔案,其含有可以被自動下載的URL來源。

創建一個構建軟體的目錄

你必須建造一個資料夾來進行編譯,且所有的動作都會在此進行。不建議你在ABS樹中建立此資料夾,一般來說建議你在家目錄下建立此資料夾(例:mkdir -r /home/yourusername/abs/local)。也有些Arch的使用者喜歡在/var/abs下令建立一個一般使用者權限的'local'資料夾。無論如何,接下來是複製一個你想建造的ABS資料夾從ABS樹到你建造的資料夾,以準備作軟體安裝的動作,在後面會有詳細介紹。(譯按:這就像你建立了一顆樹,樹上有各式各樣的水果,你指摘取你想要的水果下來到你家)

小提醒:第一次建造ABS樹的下載"數量"會很多,因為ABS樹很大。可能是連結的網路頻寬只能到56k,所以可能會下載很久。但是下載下來的只有純文字內容,此外也只有在鏡像站(mirror)有更新時才需要在下載,並不會佔用你很多空間,所以不要被下載的時間給嚇到了。

閱讀到此你對ABS樹以及ABS應該有所概念了,但是我們要怎樣運用他呢?

構建軟體-傳統方法

在真正從ABS建造軟體前,我們先來簡單了解一下最基本建造軟體的"傳統方法"。(譯按:如果你很急著想要用ABS建造軟體可以先跳到下一節去閱讀。) 如果你對從source編譯並不熟悉,那你可以藉此小節了解這個"傳統方法",且大部分的軟體都是藉由此方法編譯完成的。 (譯按:也是常說的make三步曲)

  • 運用任何方法從遠端伺服器, ftp,或是利用網路瀏覽器、wget下載源代碼的tar壓縮檔(source tarbal)
  • 解壓縮
  tar -xzf foo-0.99.tar.gz
  tar -xjf foo-0.99.tar.bz2
  • 進入其資料夾
cd foo-0.99
  • 建立正確的軟體配置:大部份的情況,資料夾內會有一個小腳本(script)叫作configure來協助你做軟體配置的動作(像是增加或減少東西,或是改變安裝的位置...等),此外,這個腳本會檢查你的電腦使否有該程式需要的其他程式。要執行這個腳本,用下列指令:(三步曲的第一步,對新手而言這是最困難的一大步,別放棄,此步成功剩下都很簡單)
./configure [[option]]

如果你是第一次使用建議你執行下列指令,去了解如何使用

./configure --help

如果沒有--prefix選項在這腳本中(譯按:--prefix是安裝路徑的選項),"大部份"的狀況是使用/usr/local作為安裝路徑, 只有少數例外會在/usr。一般建議,安裝在/usr/local這個位置下,即--prefix=/usr/local。主要原因大部分的發行板套件管理程式(例:arch的pacman)都把軟體安裝在/usr下,因此傳統安裝建議裝到/usr/local下,此外也方便日後管理和區別。

./configure --prefix=/usr/local
  • 編譯源代碼:(三部曲的第二步)
make
  • 安裝:(三部曲的第三步)
make install
  • 如果需要進行反安裝則在此步進行:(譯按:反安裝也要進行前兩步驟,只在第三步不同)
make uninstall

然而,你應該癢良好習慣,每次去閱讀make生成的INSTALL檔案,去了解這是怎樣建造核安裝的。 特別注意!!並非所有軟體都採用configure; make; make install標準的安裝三部曲。

以上是傳統方法,此方法可以從源代碼製造軟體,也適用於Arch Linux,但是ABS提供了一個有別於傳統方法且有效率、簡單而且精美的選擇

構建軟體-ABS方法

ABS是一個精美的工具,但同時也是協助你特製建造軟體強大的助手。接序之前從ABS樹上複製ABS到建立的資料夾,再來要製作package。

接下來我們會用製作slim這個程式做範例。

  1. 同於之前,先從ABS樹上找到Slim,再複製到建造資料夾。
cp -r /var/abs/extra/x11/slim /home/yourusername/abs/local
  1. 進入建造資料夾
cd /home/yourusername/abs/local/slim
  1. 利用makepkg這項工具,他會自動幫我們下載源代碼tar壓縮檔(source tarball),並且自動進行解壓縮、編譯和製造一個.pkg.tar.gz檔案。如果利用 -i 這個選項makepkg還會自動呼叫pacman完成後的安裝。
  makepkg -i

(譯按:利用makepkg -i可以從下載到安裝一次到位,若只需要中間的.pkg.tar.gz則不要加入-i選項)

完成了。如果你還想清除過程中的檔案可以利用pacman。如果想要移除則使用

 pacman -R slim

如果你剛剛忘記加入-i選項就直接執行makepkg,或是你以其他方式取得.pkg.tar.gz檔案(比如從AUR取得),你只需要執行下列指令去安裝

 pacman -U slim.pkg.tar.gz
  • ABS提供了方便自動的方法,但是他仍然讓安裝過程維持全程透明化給使用者,其實控制這些安裝流程的方法都記載在PKGBULID中

了解更多關於PKGBULID可以看 Creating Packages,這裡有完整PKGBULID完整的範例

更多 ABS 相關資訊