File PKGBUILD adalah cara paket dibuat dan dibuat untuk Arch Linux dan turunannya seperti Manjaro.
Anda mungkin pernah menemukan sendiri jika Anda pernah menggunakan AUR, repositori PKGBUILD yang dikuratori pengguna Arch Linux.
Tetapi bagaimana tepatnya Anda beralih dari PKGBUILD ke paket yang dapat diinstal? Apa sebenarnya yang terjadi di antara keduanya, dan bagaimana Anda bisa membuatnya untuk paket Anda sendiri? Anda akan mempelajarinya di artikel ini.
Dasar-dasar PKGBUILD
Bagi mereka yang terbiasa dengan Bash atau shell lainnya, Anda akan senang mengetahui, jika Anda belum mengetahuinya, bahwa PKGBUILD hanyalah sebuah skrip shell dengan beberapa variabel.
File PKGBUILD terdiri dari variabel dan fungsi, yang semuanya digunakan untuk mendefinisikan paket itu sendiri, dan cara membangunnya.
Untuk membuat paket dari PKGBUILD, utilitas baris perintah makepkg digunakan. Setelah mendapatkan PKGBUILD, Anda cukup menjalankan makepkg
di dalam direktori yang berisi PKGBUILD, dan voila, Anda memiliki paket yang dapat diinstal!
Dalam tutorial ini, Anda akan membahas paket yang baru saja saya buat, yang mencetak "Hello World!" saat dijalankan:
Menyiapkan
Untuk mengikuti tutorial ini, Anda perlu membuat beberapa file.
Pertama, Anda perlu membuat file bernama PKGBUILD . Jika belum dijelaskan, ini akan berfungsi sebagai “resep” untuk membuat paket Anda.
File lain yang perlu Anda buat adalah file bernama hello-world.sh . Saya akan menjelaskan tujuannya nanti.
Anda juga dapat membuat kedua file ini dengan satu perintah.
touch PKGBUILD hello-world.sh
Anda dapat memeriksa apakah file telah dibuat dengan perintah ls:
Dan Anda siap berangkat!
Menyiapkan file PKGBUILD Anda
Daripada meminta Anda menyalin dan menempelkan seluruh file, saya akan memasukkan setiap baris dengan Anda, sehingga Anda dapat lebih memahami tujuan dari semua yang terjadi. Jika Anda tidak mau pelajari cara ini, saya sangat merekomendasikan Artikel Arch Wiki tentang membuat paket untuk Arch Linux.
Artikel ini juga tidak membahas setiap opsi yang dapat Anda atur dalam PKGBUILD, melainkan beberapa opsi yang umum digunakan sehingga Anda dapat memulai secepat mungkin.
Setelah itu, buka editor teks Anda, dan mari kita langsung ke dalamnya!
namapkg
Hal pertama yang pertama, variabel pkgname. Inilah yang menentukan nama paket Anda saat menginstal, dan bagaimana pacman manajer paket Arch Linux melacak paket tersebut.
Format variabel ini (dan beberapa lainnya) berbentuk variabel=nilai, dengan nama variabel di sebelah kiri, nilai variabel di sebelah kanan, dipisahkan dengan tanda sama dengan.
Untuk mengatur nama paket, masukkan berikut ini ke dalam PKGBUILD:
pkgname="hello-world"
- Untuk menetapkan nama paket yang berbeda, ganti
hello-world
dengan nama paket. - Ini tidak mengatur perintah yang digunakan untuk menjalankan program. Itu ditangani sedikit di bawah di
package()
bagian.
pkgver
Seperti yang dinyatakan dalam nama variabel itu sendiri, ini menetapkan versi paket Anda (yaitu 1.0.0). Ini berguna saat pengguna memperbarui sistem mereka, karena menyetel versi yang lebih tinggi akan mengakibatkan pengguna diminta untuk meningkatkan versi.
Untuk mengatur, masukkan berikut ini ke dalam PKGBUILD (setelah baris sebelumnya):
pkgver="1.0.0"
pkgrel
Ini terkait dengan variabel pkgver, dan biasanya tidak penting untuk diketahui. Seperti variabel pkgver, ia akan memberi tahu pengguna untuk peningkatan jika dipindahkan ke nomor yang lebih tinggi.
Ini berfungsi untuk setiap perubahan yang mengharuskan pkgver tetap sama, seperti perubahan apa pun pada PKGBUILD itu sendiri. Ini akan berguna jika Anda telah membuat PKGBUILD untuk program yang Anda gunakan (dan ingin mempertahankan versi yang sama dengan paket), dan Anda perlu memperbaiki bug di PKGBUILD itu sendiri.
Untuk mengatur variabel, masukkan berikut ini di PKGBUILD:
pkgver="1"
Variabel ini harus selalu mulai dari 1, dan kemudian naik satu per satu. Saat pkgver itu sendiri bergerak ke atas, ini dapat (dan harus) disetel ulang ke 1, karena pkgver itu sendiri akan memberi tahu pengguna bahwa pemutakhiran tersedia.
pkgdesc
Ini akan mengatur deskripsi paket, yang digunakan untuk membantu mengidentifikasi paket dengan lebih baik.
Untuk mengaturnya, cukup letakkan deskripsi di dalam tanda kutip:
pkgdesc="Hello world in your terminal!"
lengkungan
Variabel ini mengatur arsitektur yang kompatibel dengan paket. Tidak apa-apa jika Anda tidak mengerti apa itu arsitektur, karena dalam banyak kasus tidak ada gunanya.
Terlepas dari itu, makepkg masih memerlukannya untuk disetel agar mengetahui paket tersebut kompatibel dengan sistem kami.
Variabel ini mendukung pengaturan beberapa nilai, jadi makepkg memerlukan sintaks yang berbeda seperti yang ditunjukkan di bawah ini.
Untuk mengaturnya, masukkan berikut ini di PKGBUILD:
arch=("x86_64")
Jika Anda menetapkan beberapa nilai untuk ini, Anda akan memisahkan setiap nilai dengan spasi dan tanda kutip seperti:arch=(“x86_x64” “arm”)
tergantung
Ini mencantumkan semua paket yang dibutuhkan paket kami untuk berfungsi. Seperti lengkungan , itu juga dapat berisi beberapa nilai, dan karenanya harus menggunakan sintaks tanda kurung.
Karena paket kami tidak akan memiliki dependensi, kami tidak perlu memasukkan bidang ini di PKGBUILD. Namun, jika paket kami memiliki dependensi, kami hanya akan menggunakan sintaks yang sama dengan arch .
optdepends
Ini mencantumkan paket yang tidak diperlukan untuk berfungsi, tetapi diperlukan untuk fungsionalitas tambahan.
Ini mengikuti sintaks yang sama dengan tergantung .
konflik
Ini memberi tahu pacman paket apa yang akan menyebabkan paket kita bertindak atau berperilaku dengan cara yang tidak kita inginkan.
Paket apa pun yang tercantum di sini akan dihapus instalasinya sebelum paket kami diinstal.
Ini mengikuti sintaks yang sama dengan tergantung juga.
lisensi
Ini mendefinisikan lisensi perangkat lunak yang dilisensikan oleh program Anda. Arch Wiki memiliki beberapa info jika Anda memerlukan bantuan untuk memilih lisensi. Menyetel ini ke custom
akan berfungsi jika Anda tidak tahu harus menyetelnya ke mana.
Ini menggunakan sintaks yang sama dengan arch dan tergantung :
license=("custom")
sumber
Beginilah cara makepkg mengetahui file apa yang digunakan untuk membangun paket kita. Ini dapat berisi berbagai jenis sumber yang berbeda, termasuk file dan URL lokal.
Saat menambahkan file lokal, masukkan nama file relatif terhadap PKGBUILD yaitu pertimbangkan tata letak direktori berikut:
PKGBUILD
file.txt
src/file.sh
Jika Anda ingin menyertakan file.sh di PKGBUILD kami, Anda akan memasukkan src/file.sh seperti namanya.
Saat memasukkan URL, Anda cukup memasukkan URL lengkapnya, yaitu https://mirrors.creativecommons.org/presskit/logos/cc.logo.large.png.
Paket Anda hanya memerlukan file hello-world.sh, dan karena berada di direktori yang sama dengan PKGBUILD, Anda cukup mengetikkan namanya sebagai nilai untuk sumber .
Variabel ini juga menggunakan sintaks yang sama dengan arch dan tergantung :
source=("hello-world.sh")
jumlah sha512
Ini digunakan untuk memverifikasi bahwa file di sumber belum diubah atau diunduh dengan benar. Informasi untuk mendapatkan nilai ini dapat ditemukan di artikel Arch Wiki di PKGBUILDs.
Jika Anda lebih suka tidak menyetel ini (atau tidak perlu, misalnya untuk file lokal), Anda cukup memasukkan SKIP untuk setiap file di sumber variabel:
sha512sums=("SKIP")
paket()
Ini adalah bagian terakhir, dan terpenting untuk benar-benar membuat paket kami. Penting untuk mengetahui dua variabel saat bekerja dengan ini:
- ${srcdir} :Di sinilah makepkg meletakkan file di sumber variabel. Ini adalah direktori tempat Anda dapat berinteraksi dengan file, dan melakukan modifikasi lain yang diperlukan pada file.
- ${pkgdir}:Di sinilah kita menempatkan file-file yang akan diinstal pada sistem kita.
Struktur folder untuk ${pkgdir} diatur seolah-olah pada sistem yang sebenarnya (yaitu ${pkgdir}/usr/bin/hello-world akan membuat file /usr/bin/hello-world saat menginstal dengan pacman.
package() berisi daftar perintah yang digunakan untuk membuat sebuah paket.
Jadi, jika (secara hipotetis) Anda perlu memiliki file yang membaca Linux lebih unggul dari Windows di /usr/share/motto.txt, Anda akan menjalankan sesuatu seperti ini:
package() {
mkdir -p "${pkgdir}/usr/share"
echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share/motto.txt"
}
Beberapa catatan pada perintah di atas:
- ${pkgdir} berisi tidak direktori di dalamnya pada awalnya. Jika Anda melewatkan perintah mkdir, tee akan menampilkan kesalahan yang mengatakan bahwa direktori tidak ada.
- Saat menentukan direktori, selalu awali dengan ${pkgdir} atau ${srcdir} variabel. Memasukkan sesuatu seperti /usr/share/motto.txt tanpa itu akan menunjuk ke direktori literal /usr/share/motto.txt pada sistem Anda yang sedang berjalan.
Untuk PKGBUILD Anda, Anda akan menempatkan file hello-world.sh di /usr/bin/hello-world pada sistem target Anda. Anda juga akan membuat file mengatakan "Halo untuk Anda!" saat berlari.
Untuk melakukannya, masukkan berikut ini ke dalam PKGBUILD Anda:
package() {
echo 'Hello to you!' > "${srcdir}/hello-world.sh"
mkdir -p "${pkgdir}/usr/bin"
cp "${srcdir}/hello-world.sh" "${pkgdir}/usr/bin/hello-world"
chmod +x "${pkgdir}/usr/bin/hello-world"
}
Dan Anda sudah selesai! File hasil Anda sekarang akan terlihat seperti ini:
Sekarang buat dan instal paket dengan makepkg -si
perintah, lalu jalankan hello-world
di terminal Anda untuk melihat outputnya.
Menutup
Dan begitu saja, Anda telah membuat PKGBUILD pertama Anda! Anda sedang dalam proses membuat paket yang sebenarnya untuk diri Anda sendiri, dan bahkan mungkin AUR.
Punya pertanyaan, atau ada yang tidak berfungsi dengan baik? Jangan ragu untuk mempostingnya di bagian komentar di bawah.