PKGBUILD文件是為衍生版本(如Arch Linux和Manjaro)創(chuàng)建和創(chuàng)建軟件包的方法。
如果你曾經(jīng)使用過(guò) AUR(即 Arch Linux 的用戶維護(hù)的PKGBUILD
存儲(chǔ)庫(kù)),你甚至可能也遇到過(guò)它們。
但是,到底是如何從 PKGBUILD
到可安裝軟件包的呢?這兩者之間到底發(fā)生了什么,如何把自己的軟件制作成軟件包呢?你將在這篇文章中了解這些。
PKGBUILD 基礎(chǔ)知識(shí)
對(duì)于那些熟悉 Bash 或其他 shell 的人來(lái)說(shuō),你可能知道,PKGBUILD
就是一個(gè)帶有一些變量的 shell 腳本。
PKGBUILD
文件由變量和函數(shù)組成,所有這些都是用來(lái)定義軟件包本身,以及如何構(gòu)建它。
為了從 PKGBUILD
中創(chuàng)建一個(gè)軟件包,需要使用makepkg
命令行工具。在獲得PKGBUILD
文件后,你只需在包含PKGBUILD
的目錄中運(yùn)行 `makepkg',就可以得到一個(gè)可安裝的軟件包了。
在本教程中,你將會(huì)看到我剛剛制作的軟件包,它在運(yùn)行時(shí)打印出 “Hello World!”。
準(zhǔn)備
為了繼續(xù)學(xué)習(xí)本教程,你需要?jiǎng)?chuàng)建幾個(gè)文件。
首先,你需要?jiǎng)?chuàng)建一個(gè)名為 PKGBUILD
的文件,它將作為構(gòu)建你的軟件包的“配方”。
你需要做的另一個(gè)文件是一個(gè)叫 的文件。我稍后會(huì)解釋它的用途。
你也可以用一個(gè)命令來(lái)創(chuàng)建這兩個(gè)文件:
touch PKGBUILD
你可以用 ls
命令檢查這些文件是否被創(chuàng)建。
然后你就可以開(kāi)始了!
設(shè)置你的 PKGBUILD 文件
我不會(huì)讓你復(fù)制粘貼整個(gè)文件,而是和你一起鍵入每一行,這樣你就能更好地理解每一行的目的。如果你不喜歡這種學(xué)習(xí)方式,我強(qiáng)烈推薦 Arch 維基中為 Arch Linux 創(chuàng)建軟件包的文章。
這篇文章也沒(méi)有介紹 PKGBUILD
中可以設(shè)置的每一個(gè)選項(xiàng),只是介紹了一些常用的選項(xiàng),以便你能盡快上手。
說(shuō)完了這些,打開(kāi)你的文本編輯器,讓我們直接進(jìn)入正題吧。
pkgname
首先是 pkgname
變量。這是安裝時(shí)定義軟件包名稱的東西,也是Arch Linux 的軟件包管理器 pacman跟蹤軟件包的方式。
這個(gè)變量(以及其他一些變量)的格式是 variable=value
,變量名在左邊,變量的值在右邊,用等號(hào)隔開(kāi)。
要設(shè)置包的名稱,請(qǐng)?jiān)?PKGBUILD
中輸入以下內(nèi)容:
pkgname="hello-world"
- 要設(shè)置一個(gè)不同的軟件包名稱,用你的軟件包的名稱替換
hello-world
。 - 這并不設(shè)置用于運(yùn)行程序的命令,這將在下面的
package
部分中處理。
pkgver
正如變量名稱本身所述,它設(shè)置了你的軟件包的版本(即 1.0.0
)。這在用戶更新他們的系統(tǒng)時(shí)很有用,因?yàn)樵O(shè)置更高的版本會(huì)提示用戶升級(jí)。
要設(shè)置版本號(hào),請(qǐng)?jiān)?PKGBUILD
中輸入以下內(nèi)容(在前一行之后):
pkgver="1.0.0"
pkgrel
這與 pkgver
變量有關(guān),通常不需要知道。不過(guò)和pkgver
變量一樣,如果它被換到一個(gè)更高的數(shù)字,就將通知用戶進(jìn)行升級(jí)。
它適用于任何需要保持 pkgver
不變的情況下,例如PKGBUILD
本身發(fā)生了變化。如果你為一個(gè)你使用的程序創(chuàng)建了一個(gè)PKGBUILD
(并希望保持軟件包的版本相同),而你需要修復(fù)PKGBUILD
本身的一個(gè)錯(cuò)誤,這將是非常有用的。
要設(shè)置這個(gè)變量,請(qǐng)?jiān)?PKGBUILD
中輸入以下內(nèi)容:
pkgver="1"
這個(gè)變量應(yīng)該 總是從1
開(kāi)始,然后一次一次地向上移動(dòng)。當(dāng)pkgver
本身向上移動(dòng)時(shí),這個(gè)變量可以(也應(yīng)該)重置為1
,因?yàn)?code>pkgver本身會(huì)通知用戶升級(jí)。
pkgdesc
這將設(shè)置軟件包的描述,用于幫助更好地識(shí)別該軟件包。
要設(shè)置它,只需將描述放在引號(hào)內(nèi):
pkgdesc="Hello world in your terminal!"
arch
這個(gè)變量設(shè)置軟件包所兼容的 硬件架構(gòu)。如果你不明白什么是架構(gòu),那也沒(méi)關(guān)系,因?yàn)樵诖蠖鄶?shù)情況下,這個(gè)變量幾乎是無(wú)用的。
無(wú)論如何,makepkg
仍然需要設(shè)置它,這樣它就知道這個(gè)軟件包與我們的系統(tǒng)是兼容的。
這個(gè)變量支持設(shè)置多個(gè)值,所以 makepkg
需要一個(gè)不同的語(yǔ)法,如下所示。
要設(shè)置它,請(qǐng)?jiān)?PKGBUILD
中輸入以下內(nèi)容:
arch=("x86_64")
如果你要設(shè)置多個(gè)值,需要用空格和引號(hào)分隔每個(gè)值,像這樣。arch=(“x86_x64" "arm")
。
depends
這列出了提供了我們的軟件包所需功能的所有軟件包。與 arch
一樣,它也可以包含多個(gè)值,因此必須使用括號(hào)語(yǔ)法。
由于我們的軟件包沒(méi)有任何依賴關(guān)系,所以我們不需要在 PKGBUILD
中輸入這個(gè)字段。然而,如果我們的軟件包有依賴關(guān)系,我們就會(huì)使用與arch
相同的語(yǔ)法。
optdepends
這里列出了那些并不是提供所需功能而是額外功能的軟件包。
這與 depends
的語(yǔ)法相同。
conflicts
這告訴 pacman
哪些軟件包會(huì)導(dǎo)致我們的軟件包出現(xiàn)問(wèn)題,或者以我們不希望的方式行事。
這里列出的任何軟件包都會(huì)在我們的軟件包被安裝之前被卸載。
這與 depends
的語(yǔ)法相同。
license
這定義了你的程序所采用的 軟件許可證。如果你需要幫助你選擇一個(gè)許可證,Arch 維基提供了一些信息。如果你不知道該怎么設(shè)置,將其設(shè)置為custom
也可以。
這與 arch
和depends
的語(yǔ)法相同:
license=("custom")
source
這就是 makepkg
如何知道要用什么文件來(lái)構(gòu)建我們的軟件包。它可以包含各種不同類型的源,包括本地文件和 URL。
在添加本地文件時(shí),要輸入相對(duì)于 PKGBUILD
文件的文件路徑,比如以下目錄布局:
PKGBUILD src
如果你想在我們的 PKGBUILD
中包括,你需要輸入
src
作為其名稱。
當(dāng)輸入 URL 時(shí),你只需輸入完整的 URL,即 。
你的這個(gè)軟件包只需要 文件,由于它和
PKGBUILD
在同一個(gè)目錄中,你只需輸入它的名字作為source
的值。
這個(gè)變量也使用與 arch
和depends
相同的語(yǔ)法:
source=("")
sha512sums
這是用來(lái)驗(yàn)證 source
中的文件沒(méi)有被修改或下載錯(cuò)誤。如何獲得這個(gè)值的信息可以在Arch 維基關(guān)于 PKGBUILD 的文章中找到。
如果你寧愿不設(shè)置這個(gè)(或者你只是不需要,例如對(duì)于本地文件),你可以為 source
變量中的每個(gè)文件輸入SKIP
:
sha512sums=("SKIP")
package
這是最后一個(gè),也是實(shí)際制作我們的包的最重要的部分。在處理這個(gè)問(wèn)題時(shí),知道兩個(gè)變量很重要。
${srcdir}
:這是makepkg
放置source
變量中文件的地方。在這個(gè)目錄中,你可以與這些文件進(jìn)行交互,并對(duì)文件進(jìn)行任何其他需要的修改。${pkgdir}
:這是我們放置將被安裝在系統(tǒng)中的文件的地方。${pkgdir}
的文件夾結(jié)構(gòu)是按照實(shí)際系統(tǒng)中的情況設(shè)置的(例如,使用pacman
安裝時(shí),${pkgdir}/usr/bin/hello-world
會(huì)創(chuàng)建文件/usr/bin/hello-world
)。
package
包含一個(gè)用于創(chuàng)建軟件包的命令列表。
因此,如果(假設(shè))你需要有個(gè)在 /usr/share
寫著 “Linux is superior to Windows ”的文件,你會(huì)運(yùn)行這樣的東西:
package { mkdir -p "${pkgdir}/usr/share" echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share" }
關(guān)于上述命令的一些說(shuō)明:
${pkgdir}
里面最初是不包含目錄的。如果你跳過(guò)了mkdir 命令,tee
會(huì)輸出一個(gè)錯(cuò)誤,說(shuō)這個(gè)目錄不存在。- 在指定目錄時(shí),總是在它們前面加上
${pkgdir}
或${srcdir}
變量。如果輸入/usr/share
,就會(huì)按照字面意義指向你當(dāng)前運(yùn)行的系統(tǒng)中的/usr/share
。
對(duì)于你的 PKGBUILD
,你將把文件放在目標(biāo)系統(tǒng)的
/usr/bin/hello-world
中。你還將使該文件在運(yùn)行時(shí)說(shuō) “Hello to you!”。
要做到這一點(diǎn),請(qǐng)?jiān)?PKGBUILD
中輸入以下內(nèi)容:
package { echo 'Hello to you!' > "${srcdir}/" mkdir -p "${pkgdir}/usr/bin" cp "${srcdir}/" "${pkgdir}/usr/bin/hello-world" chmod +x "${pkgdir}/usr/bin/hello-world" }
然后就完成了!用 makepkg -si
構(gòu)建和安裝軟件包,然后在終端運(yùn)行hello-world
,查看其輸出。
總結(jié)
就這樣,你已經(jīng)制作了你的第一個(gè) PKGBUILD
!你走在了為自己甚至是為 AUR 制作實(shí)際的軟件包的路上。
有什么問(wèn)題,或者有什么地方不對(duì)嗎?請(qǐng)隨時(shí)在下面的評(píng)論區(qū)發(fā)表。
via:
作者:Hunter Wittenborn選題:lujun9972譯者:wxy校對(duì):wxy
本文由 LCTT原創(chuàng)編譯,Linux中國(guó)榮譽(yù)推出
1.《pkg專題之Arch Linux 軟件包制作入門》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《pkg專題之Arch Linux 軟件包制作入門》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/2560808.html