Archlinux的靈魂──PKGBUILD、AUR 和 ABS

原文已經(jīng)不知道在哪, 看到的也是轉(zhuǎn)發(fā)的, 轉(zhuǎn)自Archlinux 的靈魂──PKGBUILD、AUR 和 ABS

覺(jué)得看完對(duì)深入理解Arch很有幫助.文章很長(zhǎng), 耐心點(diǎn)看完, 肯定會(huì)有收獲

第一部分:PKGBUILD 和 makepkg

其實(shí),我使用 Archlinux 的時(shí)間并不是很長(zhǎng)。可是,就是在這半年的時(shí)間內(nèi),我感覺(jué)我學(xué)到了很多的東西,對(duì) GNU/Linux 有了更多的了解,也在這個(gè)過(guò)程中深深地愛(ài)上了 Archlinux 這個(gè)發(fā)行版。

首先聲明一下,我不是一個(gè)程序員,從來(lái)沒(méi)有寫(xiě)過(guò)真正的 Code,頂多是寫(xiě)一點(diǎn) scripts,或者做一些簡(jiǎn)單的網(wǎng)頁(yè)什么的。和很多人一樣,我對(duì)計(jì)算機(jī)的接觸是從 DOS/Windows 開(kāi)始的。

Windows 的圖形界面很容易學(xué)??墒菚r(shí)間長(zhǎng)了,Windows 就會(huì)運(yùn)行的越來(lái)越慢,我的硬盤(pán)上也就會(huì)有很多我根本不知道是什么的東西。而且,在 Windows 上很多東西都是設(shè)定好的,改變起來(lái)非常不容易。不要跟我提注冊(cè)表,那個(gè)東西實(shí)在是讓我一頭霧水。

還有,大部分 Windows 上的軟件都不是自由軟件。這意味著人們很難了解這些軟件內(nèi)部的情況,你可能在毫無(wú)察覺(jué)的情況下就中了病毒或木馬。

所以,為了能夠完全了解和控制我每天工作生活要用的計(jì)算機(jī),我開(kāi)始學(xué)著使用 GNU/Linux。我一開(kāi)始是用 Mandriva(那個(gè)時(shí)候還叫 Mandrake Linux)。后來(lái)是 Ubuntu(也包括其他一些 Debian 為基礎(chǔ)的發(fā)行版)。

Wow!我一用上 Ubuntu 就有了完全不同的感覺(jué)。特別是非常好用的 apt-get,加上龐大的自由軟件庫(kù),讓我大開(kāi)眼界??墒窃谑褂?Ubuntu 一段時(shí)間以后,我發(fā)現(xiàn)這個(gè)平臺(tái)實(shí)在和 Windows 非常相似。

Gnome 和 KDE 的界面都是在模仿 Windows。更糟糕的是,Ubuntu 會(huì)在一開(kāi)始安裝一些亂七八糟的東西,大大影響了我的電腦的運(yùn)行速度。

我需要一點(diǎn)一點(diǎn)把我不用的東西去掉,這個(gè)過(guò)程真的很不爽。我開(kāi)始問(wèn)自己為什么要放棄 Windows 呢?

Ubuntu 有一個(gè)很大很好的用戶(hù)社區(qū),很多問(wèn)題都可以在討論區(qū)得到解決。然而,Ubuntu 的用戶(hù)完全要依賴(lài) Maintainer。我就有過(guò)這樣的經(jīng)歷,在發(fā)現(xiàn)一個(gè) Bug 后得到很多其他人的確定,可是 Maintainer 遲遲不作修改。還有,也許有很多人都很想用一個(gè)比較新的軟件,但是大家都要等到有人能夠而且愿意作 Maintainer 之后,這個(gè)軟件才會(huì)在 Repository 里出現(xiàn)。

我或許能夠在調(diào)試后自己從源代碼編譯,可是我要如何和別人分享我的成果呢?

其實(shí),各種 Linux 發(fā)行版在本質(zhì)上沒(méi)有什么不一樣。大家使用的軟件都是要從源代碼編譯生成可以運(yùn)行的二進(jìn)制碼。如果沒(méi)有 rpm、apt-get 或者 pacman,我們也是可以快樂(lè)生活的。只不過(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è)軟件是沒(méi)有什么問(wèn)題的。但是如果我們要對(duì)付成百上千的軟件/類(lèi)庫(kù)的話(huà),這樣的土辦法是行不通的。于是出現(xiàn)了不同的 Linux 發(fā)行版,他們之間的區(qū)別只是在于如何管理成百上千的軟件,特別是不同軟件/類(lèi)庫(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ù)器上。所以,最終用戶(hù)根本不用接觸源代碼。如果你有興趣的話(huà),你可以抓一個(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)題。
那就是最終用戶(hù)受到 Maintainer 很大的控制。比如說(shuō),我們并不知道 Maintainer 在編譯的過(guò)程中是如何設(shè)定的(./configure)。
如果我們要用不同的設(shè)定,就要自己從源代碼從頭開(kāi)始。另外,如果某一個(gè) Maintainer 心術(shù)不正,在二進(jìn)制包里面加了木馬程序,我們這些最終用戶(hù)是很難查覺(jué)的。
還有,設(shè)想一下如果某一個(gè) Maintainer 外出休假了,那么你的軟件也就不能及時(shí)更新了。

所以,也有一些發(fā)行版采取了完全不同的辦法,這些發(fā)行版是以源代碼為基礎(chǔ)的。
Gentoo 就是其中的代表。如果你用過(guò) Gentoo 你就會(huì)知道 ebuild 文件。
你如果有興趣,可以從 http://gentoo-package.com 抓一個(gè) ebuild 文件研究一下。你會(huì)明白 Gentoo 的用戶(hù)其實(shí)從 Gentoo 得到的只有這些 ebuild 文件,在每一個(gè) ebuild 文件里包含了安裝使用一個(gè)軟件需要的所有信息(從哪里下載源代碼、如何編譯、如何安裝還有 Dependency 的問(wèn)題等)。
之后,Gentoo 的用戶(hù)用 emerge 命令按照 ebuild 文件的指示編譯、安裝一個(gè)軟件。這樣做的好處是,Gentoo 的用戶(hù)可以一目了然地了解每一個(gè)軟件的編譯、安裝的過(guò)程。如果需要的話(huà),Gentoo 的用戶(hù)可以修改 ebuild,按照自己的需要編譯一個(gè)軟件。

我也用過(guò) Gentoo。不過(guò)對(duì)于我這樣的初學(xué)者,Gentoo 實(shí)在是太復(fù)雜了,有太多的參數(shù)要設(shè)定,ebuild 的編寫(xiě)也不是那么簡(jiǎn)單。還有,Gentoo 幾乎不提供任何二進(jìn)制包,所以絕大部分的軟件都要從源代碼編譯,這是一個(gè)非常慢的過(guò)程。

其實(shí)在大部分情況下,用戶(hù)對(duì)一些軟件的設(shè)定都是差不多的,沒(méi)有必要讓每一個(gè) Gentoo 的用戶(hù)都從頭編譯。所以,我需要找到一個(gè)發(fā)行版,既有 Debian 的易用性,又有 Gentoo 的靈活性。

我因此找到了 Archlinux。那么 Archlinux 又是如何解決從源代碼到二進(jìn)制碼的問(wèn)題呢?
Archlinux 使用了 makepkg 這樣一個(gè)工具。makepkg 會(huì)按照 PKGBUILD 文件生成一個(gè)二進(jìn)制包。有些時(shí)候,makepkg 還需要 install 文件(主要用來(lái)顯示提示信息、備份用戶(hù)設(shè)置等)和其他的配置文件。

那么 PKGBUILD 是什么呢?
PKGBUILD 和 Gentoo 的 ebuild 一樣,包含了安裝使用一個(gè)軟件需要的所有信息。下面是 dwm(一個(gè)非常非常簡(jiǎn)捷、高效的窗口管理器)的 PKGBUILD 文件:

pkgname=dwm 軟件名稱(chēng)
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 不要求用戶(hù)學(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 到底做了些什么:

  1. 根據(jù) source 里的內(nèi)容下載了源代碼文件 dwm-4.7.tar.gz;
  2. 通過(guò) md5 驗(yàn)證碼確定下載的源代碼文件和 PKGBUILD 的作者使用的是一致的;
  3. 把源代碼文件解壓縮到 ./src/pkgname-pkgver (也就是 ./src/dwm-4.7);
  4. 按照 build() 里的內(nèi)容編譯源代碼,并把編譯好的內(nèi)容放在 ./pkg 里;
  5. 在 ./pkg 里加上其他的一些信息,包括 .PKGINFO 和 .INSTALL,也就是 dwm.install 的拷貝;
  6. 把 ./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è)命令又完成了那些事情呢?

  1. 首先,二進(jìn)制包被解壓縮;
  2. 按照 .INSTALL 的內(nèi)容執(zhí)行一定的命令;
  3. 二進(jìn)制包里面的內(nèi)容會(huì)被拷貝到相應(yīng)的目錄(你注意到二進(jìn)制包內(nèi)的目錄結(jié)構(gòu)了嗎?);
  4. 在 /var/lib/pacman/local 這個(gè)目錄中建立 dwm-4.7-1 這樣一個(gè)目錄;
  5. 這個(gè)目錄里包含了四個(gè)文件 depends、desc、files 和 install;
  6. 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 非常方便用戶(hù)交流。我的一個(gè) PKGBUILD 如果編譯成功了,就可以給別人用。PKGBUILD 的內(nèi)容一目了然,不但有助于學(xué)習(xí),也再不用擔(dān)心木馬的問(wèn)題了。

另外,我通過(guò)一個(gè)小例子展現(xiàn) Archlinux 的靈活性在哪里。比如,我要對(duì) dwm 有自己的設(shè)置,也就是自己的 config.h,那我應(yīng)該怎么做呢?我會(huì)做如下的事情:

  1. 編輯 config.h,另存為 myconfig.h;
  2. 編輯 PKGBUILD,把所有的 config.h 替換為 myconfig.h;
  3. 把 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ū)別開(kāi)。我可以安裝 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”系列中并沒(méi)有提到 PKGBUILD 的問(wèn)題,所有的軟件都是通過(guò) pacman -S 來(lái)安裝的。

沒(mé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)題外話(huà)。

我先聲明我一點(diǎn)也沒(méi)有要詆毀 Debian 或 Gentoo 的意思,他們都是非常偉大的發(fā)行版,都有自己的特色。其實(shí)大多數(shù)的發(fā)行版都可以自己去定制,從而達(dá)到類(lèi)似的目的。比如說(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ò)程沒(méi)有 Archlinux 的 PKGBUILD 來(lái)的簡(jiǎn)單明了。只要比較 Debian 的 Maintainer 手冊(cè)和 Archlinux 的 Wiki 就可以看出這一點(diǎn)。

選擇什么樣的發(fā)行版完全是要看個(gè)人需要。
我選擇 Archlinux,是因?yàn)樗?dāng)初設(shè)計(jì)的時(shí)候就是要滿(mǎn)足“KISS Rule”,也就是“Keep It Simple, Stupid”?;蛘哒f(shuō)像愛(ài)因斯坦講得:“Everything should be made as simple as possible, but no simpler”。Archlinux 的所有配置基本都是非常相似的腳本,加上簡(jiǎn)單靈活的 PKGBUILD 和 pacman,其實(shí)關(guān)于 Archlinux 本身真的沒(méi)有太多新的東西要學(xué)習(xí)。大家有興趣可以看看“Arch Compared To Other Distros”。

Archlinux 實(shí)際上是強(qiáng)迫用戶(hù)從零開(kāi)始自己定制自己的系統(tǒng),在這個(gè)過(guò)程中也就真正了解了 Linux 本身。

好了,現(xiàn)在言歸正傳談一談 AUR 和 ABS。

AUR 是指 Archlinux User-community Repository,也就是 Archlinux 用戶(hù)社區(qū)的軟件庫(kù)。我們現(xiàn)在回憶一下在 Archlinux 中我們把源代碼變成可以運(yùn)行的二進(jìn)制碼需要哪些文件。我們需要:PKGBUILD,可能還有 .install 文件,加上一些補(bǔ)丁和必要的配置文件(像 dwm 的 config.h)。這樣就足夠了!當(dāng)你成功使用 PKGBUILD 編譯安裝了一個(gè)新軟件之后就可以通過(guò) AUR 和其他的人分享你的成果了。具體的步驟是:

  1. tar -zcvf package.tar.gz package-dir 把 package-dir 中所有所需的文件打包(包括 PKGBUILD,.install,patch 和其他的 config 等)
  2. 前往 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):“別的用戶(hù)要如何使用 AUR 呢?”

這個(gè)就更簡(jiǎn)單了,我們還是用一張截圖來(lái)解釋?zhuān)?/p>

  1. 首先下載“Tarball”(紅色的圈圈),這個(gè) Tarball 和你上傳的內(nèi)容是一樣的,無(wú)非是 PKGBUILD 什么的;
  2. tar xvzf package.tar.gz 然后解壓縮;
  3. 然后的步驟你應(yīng)該知道了,那就是 makepkg 還有 pacman -U。

之后又要如何使用 ABS 呢?ABS 所作的事情無(wú)非是把所有 Repo 里的軟件的 PKGBUILD 下載到你本地的硬盤(pán)中。這些 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 要有很多人用(很多人投票),沒(méi)有惡意代碼,沒(méi)有太多的 Bug……而判定你的 PKGBUILD 夠不夠“有品”的人是一些叫作 TU(Trusted User)的人。這些人的工作是檢查 AUR,關(guān)注那些特別受歡迎的 PKGBUILD。之后,他會(huì)仔細(xì)檢查,確定這些 PKGBUILD 是不是安全。
然后,他們會(huì)給這些 PKGBUILD 打上安全的標(biāo)簽,并且把這些 PKGBUILD 從 unsupported(我們上傳的 PKGBUILD 一開(kāi)始都是在 unsupported 中)移到 community 的 Repo 中。

在 community repo 里面的 PKGBUILD 會(huì)提前編譯好,如果你在 /etc/pacman.conf 中開(kāi)了 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 去找,如果還是找不到,為什么不自己試著從源代碼開(kāi)始,寫(xiě)一個(gè) PKGBUILD 然后放到 AUR 中和別人分享呢?

說(shuō)到這里,我希望我已經(jīng)把 Archlinux 最核心的東西講明白了。
有些人說(shuō)我的文章寫(xiě)得比 wiki 里的文章清楚。其實(shí),我寫(xiě)的東西只是在順序上不一樣。我是從 PKGBUILD 開(kāi)始講到 AUR 和 ABS,再到 pacman。
這個(gè)順序和 Archlinux 實(shí)際的開(kāi)發(fā)過(guò)程是一致的,所以邏輯上容易理解很多。如果你從 pacman 入手反過(guò)來(lái)讀,你可能就完全錯(cuò)過(guò)了理解 Archlinux 核心概念的機(jī)會(huì)。

TOY 會(huì)很快再寫(xiě)一篇關(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 用戶(hù)需要使用 AUR 中的包時(shí),往往會(huì)執(zhí)行到AUR 官方網(wǎng)站查找所需的包、下載該包的 Tarball 文件、在命令行下對(duì) Tarball 文件解壓、通過(guò) makepkg 編譯打包、最后使用 pacman 安裝這樣一個(gè)過(guò)程。

仔細(xì)打量這個(gè)過(guò)程,你是否覺(jué)得稍微有些繁瑣呢?有解決的方案嗎?回答是肯定的。這就是我們今天將要介紹的主角──Yaourt。

Yaourt 簡(jiǎn)介

Yaourt 是一個(gè)由 Julien Mischkowitz 所編寫(xiě)的 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)的密碼

如果你沒(méi)有 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 中?,F(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ì)詢(xún)問(wèn)是否繼續(xù)編譯。我們的回答當(dāng)然是 Y。

==> Continue the building of 'phatch'? [Y/n]
==> ----------------------------------------------

接著,Yaourt 詢(xún)問(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]

綜觀(guān) 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/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容