ABS - the Arch Build System(轉)
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 Vinetpkgname=foopkgver=0.99pkgrel=1pkgdesc="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=/usrmake || return 1make 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=$1shift$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=/usrmake || return 1make 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=/usrmake || return 1make prefix=$startdir/pkg/usr install}
改成
build() {cd $startdir/src/$pkgname-$pkgver./configure --enable-arts --prefix=/usrmake || return 1make 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- System Cleaner 4.89 Build 110UI
- 踩坑Xcode 10之New Build SystemXCodeUI
- JavaScript Math.abs()JavaScript
- abs函式用法函式
- 使用ABS和gensync建立自己的軟體包庫(轉)
- Python abs() 函式Python函式
- 複用- build for last (轉)UIAST
- 轉載:System:System.arraycopy方法詳解
- abs(int)、fabs(double)函式用法函式
- 讓arch linux更動聽(dmix多音流)(轉)Linux
- python函式每日一講 - abs()Python函式
- 透過LAN共享Arch Linux的軟體包(轉)Linux
- arch linux上安裝 httpd+php+mysql+ openssl(轉)LinuxhttpdPHPMySql
- 【轉】Ant之build.xml詳解UIXML
- Play Arch LinuxLinux
- 使用Xcode External Build System實現Rust 專案 Capture GPU Frame 線上除錯 MetalXCodeUIRustAPTGPU除錯
- [轉]alter system switch logfile和alter system archive log current的區別Hive
- 使用 arch-ppa 建立你自己的 Arch Linux 軟體庫Linux
- System State 轉儲分析案例一則
- 將 DEB 軟體包轉換成 Arch Linux 軟體包Linux
- System.Linq.Dynamic字串轉委託字串
- ALTER SYSTEM KILL SESSION這麼沒力?(轉)Session
- Write Your Own Operating System Tutorial(1) (轉)
- Write Your Own Operating System Tutorial(2) (轉)
- Write Your Own Operating System Tutorial(4) (轉)
- Write Your Own Operating System Tutorial(3) (轉)
- Write Your Own Operating System Tutorial(5) (轉)
- Write Your Own Operating System Tutorial(6) (轉)
- Write Your Own Operating System Tutorial(7) (轉)
- Arch Linux配置gnome桌面Linux
- Arch! 從安裝開始
- Linux基礎命令---archLinux
- chroot恢復Arch LinuxLinux
- Arch Linux AUR 工具 yayLinux
- Arch更新時failed to prepare transactionAI
- ARCH wait on SENDREQ 等待事件AI事件
- 安裝 Lantern (Arch Linux)Linux
- 等待事件ARCH wait on ATTACH事件AI