- Home
- Packages
- Forums
- Wiki
- Bugs
- AUR
- Download

# Arch Build System (正體中文)

From ArchWiki

# 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 相關資訊

- Makepkg
- Creating Packages
- Safe Cflags
- Kernel Compilation with ABS
- Arch User Repository
- Custom local repository with ABS and gensync

Retrieved from "https://wiki.archlinux.org/index.php?title=Arch_Build_System_(正體中文)&oldid=262100"
Categories:

- HOWTOs (正體中文)
- 安裝包管理 (正體中文)

## Navigation menu