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