Patch dan Build Paket Arch Linux dari Sumbernya
Aditya Phra •
Paket dari repositori Arch Linux kadang tidak menyertakan fitur tertentu, sehingga perlu di-build sendiri. Seperti pada kasusku ini, aku butuh fitur spesifik dari SQLite yang tidak tersedia di repositori Arch Linux.
Lewat artikel ini, aku mau berbagi cara mem-build paket di Arch Linux serta hal-hal yang perlu dilakukan saat ada pembaruan paket.
Mengunduh Repositori
Ada dua metode untuk mengunduh repositori paket dari Arch Linux.
Yang pertama, mengunduh repositori dengan git langsung. Menurut informasi dari ArchWiki, untuk mengunduh repositori:
git clone https://gitlab.archlinux.org/archlinux/packaging/packages/<nama paket>.git
Misal untuk paket SQLite:
git clone https://gitlab.archlinux.org/archlinux/packaging/packages/sqlite.git
Nama paket dan URL git-nya bisa kamu cari di laman daftar paket Arch Linux atau bisa melalui pacman -Ss <kata kunci>.
Yang kedua menggunakan perkakas pkgctl yang bisa diinstal dengan:
sudo pacman -S devtools
Cara mengunduhnya seperti ini kalau menggunakan pkgctl:
pkgctl repo clone --protocol=https sqlite
Mem-build & Menginstal Paket
Setelah repositori paket terunduh, di dalam direktori paket, ada skrip bernama PKGBUILD yang berisi informasi build yang diperlukan untuk mem-build paket Arch Linux.
Jadi kalau mau membuat build kustom, tinggal modifikasi PKGBUILD-nya.
Karena aku di sini membutuhkan build-an SQLite dengan fitur sqlite3_stmt_scanstatus_v2(), jadi hanya perlu menambahkan opsi -DSQLITE_ENABLE_STMT_SCANSTATUS ke variabel CPPFLAGS di dalam file PKGBUILD paket SQLite.
Untuk mem-build dan menginstal dependensi yang dibutuhkan:
makepkg -s
Setelah selesai mem-build, bakal muncul file berekstensi tar.zst disertai dengan nama paket dan versinya:
$ ls *.zst
lemon-3.47.2-1-x86_64.pkg.tar.zst
sqlite-3.47.2-1-x86_64.pkg.tar.zst
sqlite-analyzer-3.47.2-1-x86_64.pkg.tar.zst
sqlite-doc-3.47.2-1-x86_64.pkg.tar.zst
sqlite-tcl-3.47.2-1-x86_64.pkg.tar.zst
Setelah itu, instal file hasil build-an tadi dan tunggu hingga selesai.
pacman -U ./sqlite-3.47.2-1-x86_64.pkg.tar.zst
Alternatif lain, untuk mem-build paket sekaligus menginstalnya:
makepkg -si
Uji Coba Hasil Build-an
SQLite punya fitur untuk mengecek opsi-opsi yang diaktifkan pada saat meng-compile, untuk mengeceknya:
sqlite> PRAGMA compile_options;
Kalau ada ENABLE_STMT_SCANSTATUS di daftarnya, artinya build kustom SQLite berhasil dibuat.
Sekarang, waktunya mencoba mengeksekusi kueri SQL untuk mengambil data dari tabel users pada saat sebelum dan setelah membuat indeks.
Sebelum itu, fitur scanstats harus diaktifkan untuk menampilkan informasi banyaknya baris yang terpindai setiap kali mengeksekusi kueri SQL.
sqlite> .scanstats on
Sebelum membuat indeks:
sqlite> SELECT username FROM users WHERE username = 'pratikno';
QUERY PLAN (cycles=28876890 [100%])
`--SCAN users (cycles=21798849 [75%] loops=1 rows=120405)
Hasil kueri SQL di atas jumlah baris yang terpindai ada sebanyak 120405 baris, jadi sangat tidak efisien kalau jumlah barisnya sangat banyak. Supaya lebih efisien, solusinya bisa dengan membuat indeks pada kolom username.
sqlite> CREATE INDEX users_username_idx ON username (username);
Setelah membuat indeks:
sqlite> SELECT username FROM users WHERE username = 'pratikno';
QUERY PLAN (cycles=281757 [100%])
`--SEARCH users USING INDEX users_username_idx (username=?) (cycles=73449 [26%] loops=1 rows=1)
Hasilnya jauh lebih ngebut dan hanya membutuhkan 1 kuota baca pada tabel.
Pembaruan Paket
Kalau ada pembaruan paket dari pacman -Syu, hasil build-an paket akan digantikan dengan versi terbaru dari repositori resmi Arch Linux.
Untuk mencegah hal ini terjadi, kamu bisa menambahkan grup khusus supaya paket-paket tersebut tidak ikutan diperbarui kalau ada versi terbaru.
Caranya tambahkan konfigurasi ini ke dalam file /etc/pacman.conf, nama grup bebas, contoh ini memakai nama grup modified.
IgnoreGroup = modified
Kemudian tambahkan nama grup modified ke file PKGBUILD paket yang ingin di-build sendiri:
groups=('modified')
Komitkan hasil modifikasi PKGBUILD supaya masuk ke dalam histori git.
git add PKGBUILD
git commit -m 'enable stmt_scanstatus'
Jadi, kalau ada pembaruan paket, tinggal lakukan rebase seperti ini dan ulangi proses build dari awal:
git pull --rebase
Biar tidak ada drama pada sistem Arch Linux, setiap ada pembaruan paket, paket hasil build-an sendiri harus diperbarui juga karena Arch Linux merupakan distro yang bersifat rolling release dan tidak mendukung pembaruan paket yang setengah-setengah.
Kalau kamu mager memperbarui paket kustom, lebih baik tidak usah memakai grup modified, apalagi kalau paket yang dimodifikasi merupakan dependensi paket lain. Biarkan paket hasil modifikasi digantikan dengan versi baru kalau ada pembaruan, kalau butuh paket tersebut lagi tinggal build ulang.