ABS - the Arch Build System(轉)

worldblog發表於2007-08-10
ABS - the Arch Build System(轉)[@more@]

  Arch Build System(以下簡稱ABS)用於:

  ①製作新的軟體包

  ②根據自己的需要定製軟體包(使用enabling或disabling選項)

  ③用你自己的編譯選項重新編譯整個系統(就像gentoo一樣了)

  對於Arch Linux來說,ABS不是必須的,但很有用。

  本文將簡要介紹ABS及Arch的軟體包,這不是一個完全參考指南!如果您想詳細瞭解,您應該去讀一讀手冊頁。

  1.安裝軟體包

  使用ABS之前,你必須先安裝cvsup及wget:

  pacman -Sy cvsup wget

  如果你已將軟體包下載到一個名為foo的目錄中:

  cd foo

  pacman -A cvsup-*.pkg.tar.gz wget-*.pkg.tar.gz

  2.什麼是軟體包檔案?

  a.一般地,軟體包檔案就是一個名如foo.pkg.tar.gz的檔案。

  b.實際上,軟體包檔案只是一個用gzip壓縮的tar檔,包含:

  ①需安裝的檔案

  ②.PKGINFO :包含pacman處理該軟體包的所有資訊,依賴關係等等

  ③.FILELIST :軟體包中所有檔案的列表,用來刪除軟體或檢查檔案衝突

  ④.INSTALL :存放在安裝/升級/刪除軟體後執行的命令(只有在PKGBUILD中指定,才會有此檔案)。

  3.PKGBUILD是什麼?它包含哪些內容?

  PKGBUILD檔案包含軟體包有關的一些資訊,它只是一個簡單的純文字檔案。這兒有一個例子:

  # $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $

# Maintainer: judd

# Contributor: Judd Vinet

pkgname=foo

pkgver=0.99

pkgrel=1

pkgdesc="short description of foo"

url=""

groups=

provides=

depends=('qt' 'python')

makedepends=('guile')

conflicts=('yafoo')

replaces=('mffoo')

backup=('/etc/foo/foo.conf')

install=('foo.install')

source=('/download/$pkgname-$pkgver.tar.gz')

md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d35175bee593a7cc7d6205584a94d8625')

build() {

cd $startdir/src/$pkgname-$pkgver

./configure --prefix=/usr

make || return 1

make prefix=$startdir/pkg/usr install

}

  以下是說明:

  # :#後為註釋

  # $Id: PKGBUILD,v ... : 該軟體包的cvs-tag(cvs標記),是由archlinux-cvs系統建立的。

  # Maintainer : 維護者。維護者負責維護此軟體包的官方版本。

  # Contributor : 貢獻人。為這個軟體包寫第一個PKGBUILD的人。

  pkgname : 該軟體包的名字。

  pkgver : 該軟體包的版本號。

  pkgrel : Arch軟體包的釋出號。它與版本號是不同的,釋出號隨PKGBUILD的修改而改變。有很多原因導致修改PKGBUILD,例如,你可能會為開啟compile-time支援而改變PKGBUILD。

  pkgdesc : 該軟體包的主要描述,這就是你在瀏覽軟體包資料庫()時所看到的。

  url : 包中軟體的主頁(當你在瀏覽軟體包資料庫時,點選軟體包名就進入包中的軟體的主頁)。

  groups : 用於軟體包組。例如,當你試圖安裝kde時,所有屬於kde組的軟體包都將被安裝。

  provides : 表示該軟體包作為另一個軟體包的補充。例如,kernel-scsi作為kernel的補充。

  depends : 軟體包的依賴關係(它需要哪些軟體包)。

  makedepends : 編譯該軟體包時才需要的包,一旦完成編譯就不再需要了。

  conflicts : 相沖突的包,這些包不能同時安裝。本例中,foo與yafoo相沖突。

  replaces : 該軟體包所取代的舊包。本例中,foo取代了mffoo,並且不再提供對mffoo的支援。

  backup : 當軟體包被解除安裝時需備份的檔案(備份後的檔案加上.pacsave字尾,形如file.pacsave)。

  install : 軟體包中的安裝指令碼(必須與PKGBUILD在同一目錄中)。

  source : 軟體包的下載地址,可以是本地、也可以是透過"http"或"ftp"訪問的遠端地址。軟體包以pkgname和pkgver兩個變數來命名,以免每次升級都要改變原始碼。

  md5sums : 軟體包的MD5校驗和。

  下面是函式的說明:

  build : 建立軟體包所需的所有步驟(下文將詳細說明)。

  現在,你可以發現PKGBUILD檔案所包含的資訊是軟體包管理者所必須的,它是pacman與abs的核心。

  還有安裝指令碼,上例中,PKGBUILD指定"foo.install"作為安裝指令碼。舉例如下:

  post_install() {

/bin/true

}

post_upgrade() {

/bin/true

}

pre_remove() {

/bin/true

}

op=$1

shift

$op $*

  說明:

  post_install : 這段指令碼在檔案安裝後立即執行,它只有一個引數:軟體包的版本。

  post_upgrade : 這段指令碼在所有檔案升級後執行,它有兩個引數:

  ①新的軟體包的版本

  ②老的軟體包的版本

  pre_remove : 這段指令碼在檔案被刪除之前執行(例如,停止一個守護程式),它也只有一個引數:軟體包的版本

  最後三行是每個安裝指令碼都必須的,因此,它們都會被執行。

  4.build函式

  如果你對建立軟體包不太熟悉,你應該知道大多數(不是全部)軟體包可以這樣建立:

  ①原始檔解壓

  tar -xzf foo-0.99.tar.gz

  tar -xjf foo-0.99.tar.bz2

  ②進入原始碼目錄

  cd foo-0.99

  ③配置軟體包 : 一般來說,原始碼目錄中有一個名為configure的短小指令碼檔案,這就是用來配置軟體包的(新增或刪除支援資訊,選擇安裝目的目錄等等)。檢查你的系統,確保已安裝此軟體所需的所有包,然後執行:

  ./configure [option]

  在正式配置之前,你應該試試help選項,以便更好地理解如何配置:

  ./configure --help

  ④編譯原始碼

  make

  ⑤安裝

  make install

  不論怎樣,你都應該看看INSTALL檔案,搞清軟體應怎樣配置和安裝!並不所有的軟體都可以configure; make; make install這樣配置安裝的!

  那麼,我們來看一看一個“標準的”build函式:

  build() {

cd $startdir/src/$pkgname-$pkgver

./configure --prefix=/usr

make || return 1

make prefix=$startdir/pkg/usr install

}

  我們所做的是:

  ①進入解壓後的原始碼目錄:

  cd $startdir/src/$pkgname-$pkgver

  但如果你嘗試去建立自己的軟體包,注意一定要進入正確的目錄。有時,解壓後的目錄名是不同的:

  tar -xzf foo-0.99.tar.gz

  執行ls會返回:

  .

  ..

  foo-0.99.tar.gz

  foo/

  並不是

  .

  ..

  foo-0.99.tar.gz

  foo-0.99/

  ②配置,安裝目錄為/usr:

  ./configure --prefix=/usr

  ③編譯

  make || return 1

  ④安裝,不是在/usr中,而是在$startdir/pkg/usr目錄中,這樣,pacman就可以控制這些檔案。

  make prefix=$startdir/pkg/usr install

  我們所要做的是建立軟體包,而不是要安裝它。所以,我們告訴make將所有檔案放在我們指定的目錄:$startdir/pkg/usr,而不是安裝到標準位置/usr。這樣,makepkg就可以查詢並發現哪些檔案是軟體包要安裝的,並將他們壓縮排Arch軟體包。

  注意:有時Makefile中並沒有prefix選項,通常使用DESTDIR代替。如果所生成的檔案數明顯少於應有的數目(譯註:也就是說有檔案已經被安裝進你的系統),試試make DESTDIR=$startdir/pkg install。如果仍舊不行,你就必須仔細查詢以“make <...> install”形式執行的install命令的引數。

  5.The ABS tree

  當你第一次執行abs命令時:

  root @ localhost # abs

  它將使用CVS,確保“the ABS tree(以下稱為ABS樹)”與arch伺服器同步。那麼,ABS樹到底是什麼?它位於/var/abs目錄下,看起來如下圖:

  | -- base/

| |-- autoconf/

| |-- automake/

| |-- ...

| -- devel/

| -- ...

| -- extra/

| | -- deamons/

| | | -- acpid/

| | | | -- PKGBUILD

... ... ... ...

  ABS樹的結構與軟體包資料庫的結構精確地相同:

  ①第一級目錄代表類別

  ②第二級目錄代表軟體包

  ③PKGBUILD檔案包含軟體包所需的所有資訊

  不管怎樣,/var/abs下還有一個特定的目錄:local,這個目錄是你的。你可以在此目錄中做任何事——但你不應該改變ABS樹的其他部份。

  注意:第一次下載的ABS樹大一點,接下來就只需要下載升級的部份就可以了。所以即使你是用56k的小貓,也不必擔心:這些只是文字檔案,並且在傳輸過程中是被壓縮的。

  現在你知道什麼是ABS樹了,那我們怎麼利用它呢?

  6.第一次使用ABS:定製軟體包

  這種情況比你想到的要多得多:官方軟體包編譯的選項僅僅是--enable或--disable,並沒有你所必需的選項。

  舉個例子:foo軟體的arts支援被禁止了,假如我們要開啟arts支援,可以按下面的方法來做:

  ①找到foo包

  在查詢foo

  使用find命令:

  find /var/abs -name "foo"

  使用slocate命令:

  slocate foo | grep /var/abs

  無論如何,你會發現foo是extra中multimedia的一部份(僅僅是舉例)

  ②複製foo的PKGBUILD檔案至/var/abs/local/foo:

  mkdir /var/abs/local/foo

  cp /var/abs/extra/multimedia/foo/PKGBUILD /var/abs/local/foo

  cd /var/abs/local/foo

  ③修改PKGBUILD檔案,加入我們需要的arts支援:

  將

  build() {

cd $startdir/src/$pkgname-$pkgver

./configure --prefix=/usr

make || return 1

make prefix=$startdir/pkg/usr install

}

  改成

  build() {

cd $startdir/src/$pkgname-$pkgver

./configure --enable-arts --prefix=/usr

make || return 1

make prefix=$startdir/pkg/usr install

}

  ④執行makepkg:

  makepkg

  ⑤用下面的兩條命令中的一條來安裝(-A表示安裝,-U表示升級已安裝的軟體包):

  pacman -A foo-*.pkg.tar.gz

  pacman -U foo-*.pkg.tar.gz

  7.ABS的其他用途

  WiKi上還有兩篇文章,所述更深入:

  * The Arch package making HOW-TO - with guidelines

  * Custom local repository with ABS and gensync

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

相關文章