原文已經(jīng)不知道在哪, 看到的也是轉(zhuǎn)發(fā)的, 轉(zhuǎn)自Archlinux 的靈魂──PKGBUILD、AUR 和 ABS
覺得看完對(duì)深入理解Arch很有幫助.文章很長(zhǎng), 耐心點(diǎn)看完, 肯定會(huì)有收獲
第一部分:PKGBUILD 和 makepkg
其實(shí)燎竖,我使用 Archlinux 的時(shí)間并不是很長(zhǎng)∫可是构回,就是在這半年的時(shí)間內(nèi),我感覺我學(xué)到了很多的東西疏咐,對(duì) GNU/Linux 有了更多的了解纤掸,也在這個(gè)過(guò)程中深深地愛上了 Archlinux 這個(gè)發(fā)行版。
首先聲明一下浑塞,我不是一個(gè)程序員借跪,從來(lái)沒有寫過(guò)真正的 Code,頂多是寫一點(diǎn) scripts酌壕,或者做一些簡(jiǎn)單的網(wǎng)頁(yè)什么的掏愁。和很多人一樣歇由,我對(duì)計(jì)算機(jī)的接觸是從 DOS/Windows 開始的。
Windows 的圖形界面很容易學(xué)果港÷倜冢可是時(shí)間長(zhǎng)了,Windows 就會(huì)運(yùn)行的越來(lái)越慢辛掠,我的硬盤上也就會(huì)有很多我根本不知道是什么的東西谢谦。而且,在 Windows 上很多東西都是設(shè)定好的萝衩,改變起來(lái)非常不容易回挽。不要跟我提注冊(cè)表,那個(gè)東西實(shí)在是讓我一頭霧水猩谊。
還有厅各,大部分 Windows 上的軟件都不是自由軟件。這意味著人們很難了解這些軟件內(nèi)部的情況预柒,你可能在毫無(wú)察覺的情況下就中了病毒或木馬队塘。
所以,為了能夠完全了解和控制我每天工作生活要用的計(jì)算機(jī)宜鸯,我開始學(xué)著使用 GNU/Linux憔古。我一開始是用 Mandriva(那個(gè)時(shí)候還叫 Mandrake Linux)。后來(lái)是 Ubuntu(也包括其他一些 Debian 為基礎(chǔ)的發(fā)行版)淋袖。
Wow鸿市!我一用上 Ubuntu 就有了完全不同的感覺。特別是非常好用的 apt-get即碗,加上龐大的自由軟件庫(kù)焰情,讓我大開眼界“粒可是在使用 Ubuntu 一段時(shí)間以后内舟,我發(fā)現(xiàn)這個(gè)平臺(tái)實(shí)在和 Windows 非常相似。
Gnome 和 KDE 的界面都是在模仿 Windows初橘。更糟糕的是验游,Ubuntu 會(huì)在一開始安裝一些亂七八糟的東西,大大影響了我的電腦的運(yùn)行速度保檐。
我需要一點(diǎn)一點(diǎn)把我不用的東西去掉耕蝉,這個(gè)過(guò)程真的很不爽。我開始問(wèn)自己為什么要放棄 Windows 呢夜只?
Ubuntu 有一個(gè)很大很好的用戶社區(qū)垒在,很多問(wèn)題都可以在討論區(qū)得到解決。然而扔亥,Ubuntu 的用戶完全要依賴 Maintainer场躯。我就有過(guò)這樣的經(jīng)歷谈为,在發(fā)現(xiàn)一個(gè) Bug 后得到很多其他人的確定,可是 Maintainer 遲遲不作修改推盛。還有,也許有很多人都很想用一個(gè)比較新的軟件谦铃,但是大家都要等到有人能夠而且愿意作 Maintainer 之后耘成,這個(gè)軟件才會(huì)在 Repository 里出現(xiàn)。
我或許能夠在調(diào)試后自己從源代碼編譯驹闰,可是我要如何和別人分享我的成果呢瘪菌?
其實(shí),各種 Linux 發(fā)行版在本質(zhì)上沒有什么不一樣嘹朗。大家使用的軟件都是要從源代碼編譯生成可以運(yùn)行的二進(jìn)制碼师妙。如果沒有 rpm、apt-get 或者 pacman屹培,我們也是可以快樂生活的默穴。只不過(guò),我們的生活會(huì)變得麻煩一些褪秀。如果要從源碼安裝一個(gè)軟件蓄诽,我們通常是要做如下的步驟:wget http://somewhere.org/source/package.tar.gz(下載源代碼)tar xvzf package.tar.gz (解壓縮)cd package (進(jìn)入源代碼目錄)./configure (設(shè)定)make (編譯)make install (安裝)
如果我們要像這樣安裝一個(gè)兩個(gè)軟件是沒有什么問(wèn)題的。但是如果我們要對(duì)付成百上千的軟件/類庫(kù)的話媒吗,這樣的土辦法是行不通的仑氛。于是出現(xiàn)了不同的 Linux 發(fā)行版,他們之間的區(qū)別只是在于如何管理成百上千的軟件闸英,特別是不同軟件/類庫(kù)之間互相依存的關(guān)系锯岖,也就是 dependency 的問(wèn)題。
大多數(shù) Linux 發(fā)行版都是以二進(jìn)制包為基礎(chǔ)的甫何,這其中又分 Redhat(還有 SUSE出吹、Fedora 等)、Debian(還有 Ubuntu辙喂、PCLinux 等)和 Slackware 陣營(yíng)趋箩。為了解決管理大量軟件包的問(wèn)題,這些發(fā)行版采取了這樣一個(gè)辦法加派。他們找了一群大牛程序員來(lái)作 Maintainer叫确,這些 Maintainer 負(fù)責(zé)把源代碼編譯成二進(jìn)制碼,加上一些控制信息(比如如何安裝芍锦、dependency 等)竹勉,然后一起打包放在服務(wù)器上。所以娄琉,最終用戶根本不用接觸源代碼次乓。如果你有興趣的話吓歇,你可以抓一個(gè) Debian 的 DEB 文件下來(lái)研究一下:wget http://somewhare.org/package.debar vx package.deb
你會(huì)發(fā)現(xiàn)你多了三個(gè)文件:debian-binarycontrol.tar.gzdata.tar.gz
然后再用 tar tzvf 命令看一看 control.tar.gz 和 data.tar.gz 里面有什么東東,你就明白神奇的 dpkg/apt-get 是怎么一回事情了票腰。
二進(jìn)制包固然是很方便城看,但是這種辦法有一個(gè)很大的問(wèn)題。
那就是最終用戶受到 Maintainer 很大的控制杏慰。比如說(shuō)测柠,我們并不知道 Maintainer 在編譯的過(guò)程中是如何設(shè)定的(./configure)。
如果我們要用不同的設(shè)定缘滥,就要自己從源代碼從頭開始轰胁。另外,如果某一個(gè) Maintainer 心術(shù)不正朝扼,在二進(jìn)制包里面加了木馬程序赃阀,我們這些最終用戶是很難查覺的。
還有擎颖,設(shè)想一下如果某一個(gè) Maintainer 外出休假了榛斯,那么你的軟件也就不能及時(shí)更新了。
所以搂捧,也有一些發(fā)行版采取了完全不同的辦法肖抱,這些發(fā)行版是以源代碼為基礎(chǔ)的。
Gentoo 就是其中的代表异旧。如果你用過(guò) Gentoo 你就會(huì)知道 ebuild 文件意述。
你如果有興趣,可以從 http://gentoo-package.com 抓一個(gè) ebuild 文件研究一下吮蛹。你會(huì)明白 Gentoo 的用戶其實(shí)從 Gentoo 得到的只有這些 ebuild 文件荤崇,在每一個(gè) ebuild 文件里包含了安裝使用一個(gè)軟件需要的所有信息(從哪里下載源代碼、如何編譯潮针、如何安裝還有 Dependency 的問(wèn)題等)术荤。
之后,Gentoo 的用戶用 emerge 命令按照 ebuild 文件的指示編譯每篷、安裝一個(gè)軟件瓣戚。這樣做的好處是,Gentoo 的用戶可以一目了然地了解每一個(gè)軟件的編譯焦读、安裝的過(guò)程子库。如果需要的話,Gentoo 的用戶可以修改 ebuild矗晃,按照自己的需要編譯一個(gè)軟件仑嗅。
我也用過(guò) Gentoo。不過(guò)對(duì)于我這樣的初學(xué)者,Gentoo 實(shí)在是太復(fù)雜了仓技,有太多的參數(shù)要設(shè)定鸵贬,ebuild 的編寫也不是那么簡(jiǎn)單。還有脖捻,Gentoo 幾乎不提供任何二進(jìn)制包阔逼,所以絕大部分的軟件都要從源代碼編譯,這是一個(gè)非常慢的過(guò)程地沮。
其實(shí)在大部分情況下嗜浮,用戶對(duì)一些軟件的設(shè)定都是差不多的,沒有必要讓每一個(gè) Gentoo 的用戶都從頭編譯诉濒。所以周伦,我需要找到一個(gè)發(fā)行版夕春,既有 Debian 的易用性未荒,又有 Gentoo 的靈活性。
我因此找到了 Archlinux及志。那么 Archlinux 又是如何解決從源代碼到二進(jìn)制碼的問(wèn)題呢片排?
Archlinux 使用了 makepkg 這樣一個(gè)工具。makepkg 會(huì)按照 PKGBUILD 文件生成一個(gè)二進(jìn)制包速侈。有些時(shí)候率寡,makepkg 還需要 install 文件(主要用來(lái)顯示提示信息、備份用戶設(shè)置等)和其他的配置文件倚搬。
那么 PKGBUILD 是什么呢冶共?
PKGBUILD 和 Gentoo 的 ebuild 一樣,包含了安裝使用一個(gè)軟件需要的所有信息每界。下面是 dwm(一個(gè)非常非常簡(jiǎn)捷捅僵、高效的窗口管理器)的 PKGBUILD 文件:
pkgname=dwm 軟件名稱
pkgver=4.7
pkgrel=1 版本信息
pkgdesc="A dynamic window manager for X"
url="http://www.suckless.org/wiki/dwm" 軟件說(shuō)明和網(wǎng)站
arch=('i686' 'x86_64') 適用平臺(tái)
license=('MIT') 版權(quán)
depends=('libx11') Dependency
install=dwm.install install 文件
source=(http://www.suckless.org/download/$pkgname-$pkgver.tar.gz \
config.h) 要下載的源文件
md5sums=('827b128514a3edb87e208e84fee0eb3f'
'395e9a25f65605c4891e74c644b91530') md5 驗(yàn)證碼
build() { cd $startdir/src/$pkgname-$pkgver
cp ../config.h .
make X11INC=/usr/include/X11 X11LIB=/usr/lib/X11 || return 1 make PREFIX=/usr DESTDIR=$startdir/pkg install || return 1
install -m644 -D LICENSE $startdir/pkg/usr/share/licenses/$pkgname/LICENSE && \ install -m644 -D README $startdir/pkg/usr/share/doc/$pkgname/README } 編譯的過(guò)程
我們可以注意到在“編譯的過(guò)程”這個(gè)部分,很多代碼都和我們?cè)?shell 里編譯的命令一樣眨层。對(duì)庙楚!Archlinux 不要求用戶學(xué)習(xí)太多新的東西,PKGBUILD 很容易理解趴樱,因?yàn)槔锩娑际腔镜?shell 命令馒闷。
好,我們把 PKGBUILD叁征,dwm.install 和 config.h(dwm 比較特殊纳账,config.h 包含所有的配置信息,所以要在編譯之前提供捺疼。其他的軟件大多依靠外部的配置文件塞祈,像是 .bashrc 等)放在一個(gè)新的目錄里之后。我們執(zhí)行:
$ makepkg
之后,你會(huì)發(fā)現(xiàn)這個(gè)目錄里出現(xiàn)了一些新的東西议薪,包括:dwm-4.7-1-x86_64.pkg.tar.gz dwm-4.7.tar.gz 兩個(gè)文件尤蛮,還有兩個(gè)目錄srcpkg
通過(guò)比較這些文件、目錄里的內(nèi)容和 PKGBUILD斯议,你就會(huì)明白 makepkg 到底做了些什么:
- 根據(jù) source 里的內(nèi)容下載了源代碼文件 dwm-4.7.tar.gz产捞;
- 通過(guò) md5 驗(yàn)證碼確定下載的源代碼文件和 PKGBUILD 的作者使用的是一致的;
- 把源代碼文件解壓縮到 ./src/pkgver (也就是 ./src/dwm-4.7)哼御;
- 按照 build() 里的內(nèi)容編譯源代碼坯临,并把編譯好的內(nèi)容放在 ./pkg 里;
- 在 ./pkg 里加上其他的一些信息恋昼,包括 .PKGINFO 和 .INSTALL看靠,也就是 dwm.install 的拷貝;
- 把 ./pkg 里面的內(nèi)容打包形成 dwm-4.7-1-x86_64.pkg.tar.gz液肌。
那么挟炬,我們有了一個(gè) .pkg.tar.gz 這樣一個(gè)二進(jìn)制包之后,我們要如何安裝呢嗦哆?我們要使用這樣一個(gè)命令:
$ pacman -U dwm-4.7-1-x86_64.pkg.tar.gz
這個(gè)命令又完成了那些事情呢谤祖?
- 首先,二進(jìn)制包被解壓縮老速;
- 按照 .INSTALL 的內(nèi)容執(zhí)行一定的命令粥喜;
- 二進(jìn)制包里面的內(nèi)容會(huì)被拷貝到相應(yīng)的目錄(你注意到二進(jìn)制包內(nèi)的目錄結(jié)構(gòu)了嗎?)橘券;
- 在 /var/lib/pacman/local 這個(gè)目錄中建立 dwm-4.7-1 這樣一個(gè)目錄额湘;
- 這個(gè)目錄里包含了四個(gè)文件 depends、desc旁舰、files 和 install;
- depends 記錄了 dependency锋华,desc 是軟件說(shuō)明,files 記錄了每一個(gè)安裝到系統(tǒng)上的文件的路徑鬓梅,install 就是 .INSTALL 的拷貝供置。
從這以后,pacman 正是通過(guò)檢查 /var/lib/pacman/local 里的內(nèi)容來(lái)管理軟件包的绽快。比如說(shuō)芥丧,在執(zhí)行 pacman -R dwm 的過(guò)程中,pacman 首先在 /var/lib/pacman/local 找到了 dwm-4.7-1 這個(gè)目錄坊罢,然后根據(jù) files 的內(nèi)容刪除已安裝的內(nèi)容续担。Dependency 也是通過(guò) depends 計(jì)算的。
OK活孩!我已經(jīng)解釋了 PKGBUILD 的基本結(jié)構(gòu)和 makepkg 的過(guò)程物遇。
基本上是兩步:從 PKGBUILD 到 .pkg.tar.gz 包,再?gòu)亩M(jìn)制包安裝到系統(tǒng)。這樣一種辦法有很多好處询兴。首先乃沙,PKGBUILD 非常方便用戶交流。我的一個(gè) PKGBUILD 如果編譯成功了诗舰,就可以給別人用警儒。PKGBUILD 的內(nèi)容一目了然,不但有助于學(xué)習(xí)眶根,也再不用擔(dān)心木馬的問(wèn)題了蜀铲。
另外,我通過(guò)一個(gè)小例子展現(xiàn) Archlinux 的靈活性在哪里属百。比如记劝,我要對(duì) dwm 有自己的設(shè)置,也就是自己的 config.h族扰,那我應(yīng)該怎么做呢厌丑?我會(huì)做如下的事情:
- 編輯 config.h,另存為 myconfig.h别伏;
- 編輯 PKGBUILD蹄衷,把所有的 config.h 替換為 myconfig.h忧额;
- 把 pkgrel 變成 2厘肮。
之后通過(guò) makepkg,我會(huì)得到一個(gè)文件 dwm-4.7-2-x8664.pkg.tar.gz睦番,這個(gè)和原來(lái)的 dwm-4.7-1-x8664.pkg.tar.gz 可以區(qū)別開类茂。我可以安裝 dwm-4.7-2-x8664.pkg.tar.gz,如果有問(wèn)題我還可以通過(guò) pacman -U dwm-4.7-1-x8664.pkg.tar.gz 來(lái)安裝原來(lái)的二進(jìn)制包托嚣。我還可以用同樣的辦法生成一系列的 .pkg.tar.gz 包巩检,這在軟件的安裝調(diào)試過(guò)程中非常有用。
好了示启,今天就講到這里兢哭。有些人也許變得更疑惑了,因?yàn)樵?TOY 的“打造完美的 Linux 桌面 — Arch Linux 2007.08-2”系列中并沒有提到 PKGBUILD 的問(wèn)題夫嗓,所有的軟件都是通過(guò) pacman -S 來(lái)安裝的迟螺。
沒關(guān)系,如果你理解了 makepkg 和 PKBGUILD舍咖,那么在我下一次談到 AUR 和 ABS 之后矩父,你就能完全明白了。
實(shí)例:
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: jepaan <jepaan at hotmail dot com>
pkgname=client
pkgver=1.0
pkgrel=1
pkgdesc="tools"
arch=('i686' 'x86_64')
license=('MIT')
depends=('qt4' )
makedepends=('qt4')
install=${pkgname}.install
url=('')
source=("./${pkgname}-${pkgver}.tar.gz")
md5sums=('SKIP')
build() {
cd ${srcdir}/${pkgname}-${pkgver}
qmake-qt4
make
}
package() {
cd ${srcdir}/${pkgname}-${pkgver}
#make PREFIX=/usr DESTDIR=$pkgdir install
mkdir -p ${DESTDIR}${PREFIX}/bin
mkdir -p ${pkgdir}/usr/share/icons
mkdir -p ${pkgdir}/usr/share/applications
install -Dm755 client ${pkgdir}/usr/bin/client
install -Dm755 ${srcdir}/client_logo.png ${pkgdir}/usr/share/icons/
install -Dm644 ${srcdir}/client.desktop ${pkgdir}/usr/share/applications/client.desktop
}
pre_remove() {
pid=`ps -ef | grep client | grep -v grep | grep -v pacman | awk '{print $2}'`
if [ -n "$pid" ]; then
kill -9 "$pid"
fi
}
$ makepkg -p PKGBUILD_client 或 makepkg -f -p PKGBUILD_client
第二部分:AUR 和 ABS
我非常高興看到我關(guān)于 PKGBUILD 和 Makepkg 的文章在 LinuxTOY 受到了歡迎春弥。我想先針對(duì)一些讀者的回復(fù)談一點(diǎn)題外話进副。
我先聲明我一點(diǎn)也沒有要詆毀 Debian 或 Gentoo 的意思膳灶,他們都是非常偉大的發(fā)行版踊谋,都有自己的特色球订。其實(shí)大多數(shù)的發(fā)行版都可以自己去定制后裸,從而達(dá)到類似的目的。比如說(shuō)冒滩,有的人提到 Gentoo 也有二進(jìn)制包轻抱,比如像 Openoffice 這樣的怪物。
然而旦部,我個(gè)人以為比較不同的發(fā)行版關(guān)鍵是要看它最核心的設(shè)計(jì)思想祈搜。比如說(shuō),Gentoo 根本就不是為了使用二進(jìn)制包設(shè)計(jì)的士八。你要是都想用二進(jìn)制包容燕,就別費(fèi)勁用 Gentoo 了。關(guān)于 Debian 陣營(yíng)的發(fā)行版婚度,我也想講幾句蘸秘。正如一些朋友的回復(fù)所講,DEB/apt-get 是非常好的管理工具蝗茁,軟件庫(kù)也非常的大醋虏。
我的筆記本現(xiàn)在還在用 elive,也是 Debian 的分支哮翘。我不喜歡 Debian 系列的發(fā)行版的原因不是它不能定制颈嚼,而是他們非常依靠 Maintainer。我們可以自己做 DEB 包饭寺,然后呢阻课?你的 DEB 包什么時(shí)候才能進(jìn)入軟件庫(kù)呢?還有艰匙,只有你自己知道你的 DEB 是怎么做的限煞,別人不能了解你編譯打包的過(guò)程。Debian 本身打包的過(guò)程沒有 Archlinux 的 PKGBUILD 來(lái)的簡(jiǎn)單明了员凝。只要比較 Debian 的 Maintainer 手冊(cè)和 Archlinux 的 Wiki 就可以看出這一點(diǎn)署驻。
選擇什么樣的發(fā)行版完全是要看個(gè)人需要。
我選擇 Archlinux健霹,是因?yàn)樗?dāng)初設(shè)計(jì)的時(shí)候就是要滿足“KISS Rule”旺上,也就是“Keep It Simple, Stupid”≈韫或者說(shuō)像愛因斯坦講得:“Everything should be made as simple as possible, but no simpler”抚官。Archlinux 的所有配置基本都是非常相似的腳本,加上簡(jiǎn)單靈活的 PKGBUILD 和 pacman阶捆,其實(shí)關(guān)于 Archlinux 本身真的沒有太多新的東西要學(xué)習(xí)凌节。大家有興趣可以看看“Arch Compared To Other Distros”钦听。
Archlinux 實(shí)際上是強(qiáng)迫用戶從零開始自己定制自己的系統(tǒng),在這個(gè)過(guò)程中也就真正了解了 Linux 本身倍奢。
好了朴上,現(xiàn)在言歸正傳談一談 AUR 和 ABS。
AUR 是指 Archlinux User-community Repository卒煞,也就是 Archlinux 用戶社區(qū)的軟件庫(kù)痪宰。我們現(xiàn)在回憶一下在 Archlinux 中我們把源代碼變成可以運(yùn)行的二進(jìn)制碼需要哪些文件。我們需要:PKGBUILD畔裕,可能還有 .install 文件衣撬,加上一些補(bǔ)丁和必要的配置文件(像 dwm 的 config.h)。這樣就足夠了扮饶!當(dāng)你成功使用 PKGBUILD 編譯安裝了一個(gè)新軟件之后就可以通過(guò) AUR 和其他的人分享你的成果了具练。具體的步驟是:
- tar -zcvf package.tar.gz package-dir 把 package-dir 中所有所需的文件打包(包括 PKGBUILD,.install甜无,patch 和其他的 config 等)
- 前往 http://aur.archlinux.org 選擇"Submit”(參照下圖)扛点,并把你的 package.tar.gz 上傳
AUR 會(huì)自動(dòng)根據(jù)你的 PKGBUILD 內(nèi)容把你的 Package 加到 AUR 里來(lái)。就是這么簡(jiǎn)單岂丘!那么有人會(huì)問(wèn):“別的用戶要如何使用 AUR 呢陵究?”
這個(gè)就更簡(jiǎn)單了,我們還是用一張截圖來(lái)解釋:
- 首先下載“Tarball”(紅色的圈圈)奥帘,這個(gè) Tarball 和你上傳的內(nèi)容是一樣的铜邮,無(wú)非是 PKGBUILD 什么的;
- tar xvzf package.tar.gz 然后解壓縮翩概;
- 然后的步驟你應(yīng)該知道了牲距,那就是 makepkg 還有 pacman -U返咱。
之后又要如何使用 ABS 呢钥庇?ABS 所作的事情無(wú)非是把所有 Repo 里的軟件的 PKGBUILD 下載到你本地的硬盤中。這些 PKGBUILD 都放在了 /var/abs 中咖摹。你能通過(guò) pacman 直接安裝的二進(jìn)制包其實(shí)也都是按照 ABS 的內(nèi)容編譯的评姨。下面我還是用 dwm 的例子解釋 ABS 的使用:
su
$ cd /var/abs 你可以看到這個(gè)目錄里有 core,extra萤晴,community 三個(gè)子目錄吐句,正如 abs.conf 中的設(shè)定;
$ mkdir local 建立一個(gè) local 目錄店读,用來(lái)放你自己需要的軟件的 PKGBUILD
$ chown username:usergroup ./local makepkg 要以非 root 身份進(jìn)行
$ exit 退出 su
$ cd local
$ cp -r ../community/x11/dwm ./ 從 ABS 中拷貝 dwm 的內(nèi)容
$ cd dwm
下面不用我說(shuō)了嗦枢,你在這個(gè)目錄里可以看到三個(gè)文件 PKGBUILD、dwm.install屯断、config.h文虏。你于是可以用 makepkg 和 pacman -U 來(lái)按照自己喜歡的方式安裝 dwm侣诺。
OK,你實(shí)際已經(jīng)清楚了解了 ABS 和 pacman 的關(guān)系氧秘,那么 AUR 又和 ABS 還有 pacman 有什么聯(lián)系呢年鸳?說(shuō)的直白一點(diǎn),你上傳到 AUR 的 PKGBUILD 要足夠“有品”才能直接通過(guò) pacman 使用丸相。
對(duì)于“有品”搔确,我是這樣定義的。
你的 PKGBUILD 要有很多人用(很多人投票)灭忠,沒有惡意代碼膳算,沒有太多的 Bug……而判定你的 PKGBUILD 夠不夠“有品”的人是一些叫作 TU(Trusted User)的人。這些人的工作是檢查 AUR弛作,關(guān)注那些特別受歡迎的 PKGBUILD畦幢。之后,他會(huì)仔細(xì)檢查缆蝉,確定這些 PKGBUILD 是不是安全宇葱。
然后,他們會(huì)給這些 PKGBUILD 打上安全的標(biāo)簽刊头,并且把這些 PKGBUILD 從 unsupported(我們上傳的 PKGBUILD 一開始都是在 unsupported 中)移到 community 的 Repo 中黍瞧。
在 community repo 里面的 PKGBUILD 會(huì)提前編譯好,如果你在 /etc/pacman.conf 中開了 community repo原杂,你就可以直接使用這些軟件的二進(jìn)制包了印颤。
也許有一天,你當(dāng)初上傳的 PKGBUILD 變得特別重要穿肄,這個(gè)軟件可能被移到 testing年局,extra 或者 core 的 repo 中。補(bǔ)充一點(diǎn)咸产,testing repo 里面一般是需要測(cè)試矢否,又準(zhǔn)備放到 core 或者 extra 中的軟件。
Archlinux 就是這樣脑溢,非常靈活僵朗。既有 pacman 這樣好的二進(jìn)制包管理工具,又有 ABS 和 AUR 這樣方便的源代碼服務(wù)屑彻。通過(guò) ABS验庙,你可以完全控制你自己的系統(tǒng)到底是如何建立的。
如果在 pacman -Ss 的時(shí)候找不到一個(gè)軟件社牲,你可以到 AUR 去找粪薛,如果還是找不到,為什么不自己試著從源代碼開始搏恤,寫一個(gè) PKGBUILD 然后放到 AUR 中和別人分享呢违寿?
說(shuō)到這里让禀,我希望我已經(jīng)把 Archlinux 最核心的東西講明白了。
有些人說(shuō)我的文章寫得比 wiki 里的文章清楚陨界。其實(shí)巡揍,我寫的東西只是在順序上不一樣。我是從 PKGBUILD 開始講到 AUR 和 ABS菌瘪,再到 pacman腮敌。
這個(gè)順序和 Archlinux 實(shí)際的開發(fā)過(guò)程是一致的,所以邏輯上容易理解很多俏扩。如果你從 pacman 入手反過(guò)來(lái)讀糜工,你可能就完全錯(cuò)過(guò)了理解 Archlinux 核心概念的機(jī)會(huì)。
TOY 會(huì)很快再寫一篇關(guān)于 yaourt 的文章录淡,yaourt 是一個(gè)把 pacman 和 AUR 結(jié)合起來(lái)的很好用的工具捌木。
有了 yaourt,你不需要去 AUR 網(wǎng)站也能在 shell 下直接取得 AUR 的 package嫉戚,還方便了投票的過(guò)程刨裆。
如果大家對(duì)某些問(wèn)題感興趣,可以留言告訴我彬檀,我會(huì)盡量把我了解的用這樣比較容易理解的文章與大家交流帆啃。
第三部分:Yaourt
在這一部分中,我們將簡(jiǎn)單介紹 Yaourt 的安裝和使用窍帝。此部分上接 PKGBUILD 和 makepkg努潘、AUR 和 ABS。
就一般情況而言坤学,當(dāng) Archlinux 用戶需要使用 AUR 中的包時(shí)疯坤,往往會(huì)執(zhí)行到AUR 官方網(wǎng)站查找所需的包、下載該包的 Tarball 文件深浮、在命令行下對(duì) Tarball 文件解壓压怠、通過(guò) makepkg 編譯打包、最后使用 pacman 安裝這樣一個(gè)過(guò)程略号。
仔細(xì)打量這個(gè)過(guò)程刑峡,你是否覺得稍微有些繁瑣呢?有解決的方案嗎玄柠?回答是肯定的。這就是我們今天將要介紹的主角──Yaourt诫舅。
Yaourt 簡(jiǎn)介
Yaourt 是一個(gè)由 Julien Mischkowitz 所編寫的 Bash 腳本羽利,它是將 Pacman 與 AUR 這兩者相結(jié)合的絕佳工具。
通過(guò) Yaourt 安裝 AUR 中的包十分方便刊懈,它不僅簡(jiǎn)化了上述繁瑣的過(guò)程这弧,而且把這一過(guò)程半自動(dòng)化娃闲,使用者只需在它的交互模式中簡(jiǎn)單的回答幾個(gè)問(wèn)題即可。此外匾浪,Yaourt 支持將結(jié)果以鮮亮的顏色輸出皇帮,非常搶眼。
安裝 Yaourt
除了在 Archlinux 的 AUR 中可以找到 Yaourt 外蛋辈,archlinuxfr 這個(gè)源中也包含 Yaourt属拾。我們采用后者來(lái)安裝 Yaourt。首先冷溶,將下列內(nèi)容添加到 /etc/pacman.conf 文件:[archlinuxfr]Server = http://repo.archlinux.fr/i686
如果你的系統(tǒng)是 64 位渐白,那么可以使用:[archlinuxfr]Server = http://repo.archlinux.fr/x86_64
接著,我們可以執(zhí)行下面的命令來(lái)安裝 Yaourt:
$ pacman -Sy yaourt
另外逞频,我們將 aurvote 和 customizepkg 這兩個(gè)包也裝上纯衍,前者用于對(duì)喜歡的包投票,而后者是定制 PKGBUILD 所需的:
pacman -S aurvote customizepkg
同時(shí)苗胀,你需要為 aurvote 建立一個(gè)配置文件 .aurvote (位于 ~/ 目錄下):user=你的 AUR 帳號(hào)pass=該帳號(hào)的密碼
如果你沒有 AUR 帳號(hào)襟诸,可到 http://aur.archlinux.org/account.php注冊(cè)一個(gè)。
Yaourt 實(shí)戰(zhàn)
為了說(shuō)明 Yaourt 的使用基协,我們以一個(gè)實(shí)例來(lái)進(jìn)行励堡。譬如,我對(duì) Phatch 這個(gè)批量圖片處理程序非常喜歡堡掏,我希望在 Archlinux 中安裝它应结。首先,我們來(lái)看一下泉唁,在 Archlinux 中是否存在 Phatch:
$ yaourt phatch
Yaourt 在搜索后返回如下結(jié)果:1 aur/phatch 0.1.bzr435-1 Phatch is a simple to use cross-platform GUI Photo Batch Processor.==> Enter n° (separated by blanks, or a range) of packages to be installed Example: '1 6 7 8 9' or '1 6-9'==> ----------------------------------------------
從該結(jié)果我們可以斷定鹅龄,Phatch 在 Archlinux 的 AUR 中。現(xiàn)在亭畜,我們只需按 1 就可以安裝它了扮休。
在顯示一些輸出信息后,Yaourt 會(huì)讓你作出第一個(gè)選擇:
是否編輯 PKGBUILD 文件拴鸵。
按 Y 回答并輸入你喜歡的文本編輯器后玷坠,你可以針對(duì) PKGBUILD 的內(nèi)容進(jìn)行修改。
==> Edit the PKGBUILD (recommended) ? [Y/n] ("A" to abort)
==> ----------------------------------------------
然后劲藐,Yaourt 會(huì)詢問(wèn)是否繼續(xù)編譯八堡。我們的回答當(dāng)然是 Y。
==> Continue the building of 'phatch'? [Y/n]
==> ----------------------------------------------
接著聘芜,Yaourt 詢問(wèn)是否安裝已編譯好的包兄渺,同樣回答 Y 即可。
==> Continue installing 'phatch'? [Y/n]
==> [v]iew package contents [c]heck package with namcap
==> ----------------------------------------------
最后汰现,Yaourt 將檢查投票情況挂谍,并問(wèn)你是否要投票叔壤,按 Y 選擇投票,按 n 表示不投票口叙。
==> Checking for phatch's vote statusYou have already voted for phatch inclusion/keeping in [community]
綜觀 Yaourt 的命令行選項(xiàng)炼绘,與 Pacman 非常相似。關(guān)于 Yaourt 的更加詳細(xì)的用法妄田,通過(guò) man yaourt 可以獲得參考俺亮。其實(shí),除了從 AUR 安裝包外形庭,Yaourt 也可以從 Archlinux 的源安裝包铅辞,此不贅述。
參考:
PKGUILD:https://wiki.archlinux.org/index.php/PKGBUILD_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29
ABS:https://wiki.archlinux.org/index.php/Arch_Build_System_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29
Archlinux:https://linuxtoy.org/archives/archlinux-pkgbuild-aur-and-abs.html
pkg.tar.xz包:http://ftp.isoft.zhcn.cc/