Build Sendiri Paket Arch Linux
Uji coba mem-build kustom SQLite di Arch Linux
Beberapa waktu lalu aku menjajal dua hosting SQLite serverless yang lagi ngetren: Cloudflare D1 dan Turso, layanan tersebut mematok biaya berdasarkan banyaknya baris terbaca dan data yang masuk ke dalam tabel. Mau tak mau kita harus membuat desain database dan kueri yang efisien untuk menghemat biaya.
SQLite sudah ada fitur untuk menganalisis banyaknya baris yang terbaca setiap kali mengeksekusi kueri SQL, fitur ini bisa dijadikan sebagai parameter keefisienan kueri SQL kita. Sayangnya, fitur ini tidak tersedia di SQLite hasil build-an normal di Arch Linux. Oleh karena itu, kita harus mem-build sendiri SQLite.
Sekarang, aku di sini mau membagikan panduan mem-build sendiri paket Arch Linux dengan SQLite sebagai contoh paket yang akan kita build.
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 repositorinya cukup dengan:
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 dapat 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 yang telah diunduh, ada skrip Bash bernama PKGBUILD
. File tersebut terdiri atas informasi build yang diperlukan untuk mem-build paket Arch Linux, jadi kalau mau membuat build kustom, modifikasi PKGBUILD
-nya.
Karena aku di sini membutuhkan build-an SQLite dengan fitur sqlite3_stmt_scanstatus_v2()
, jadi hanya perlu memodifikasi file PKGBUILD
SQLite dan menambahkan opsi -DSQLITE_ENABLE_STMT_SCANSTATUS
ke variabel CPPFLAGS
.
Kemudian baru deh, mem-build paket dari Arch Linux dengan:
makepkg -s
Setelah proses build selesai, 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
Langkah terakhir, instal file hasil build-an tadi dan tunggu hingga selesai.
pacman -U ./sqlite-3.47.2-1-x86_64.pkg.tar.zst
Sedikit tambahan, ada versi yang lebih ringkas untuk mem-build sekaligus menginstalnya (bisa kamu jadikan sebagai alternatif):
makepkg -si
Uji Coba Hasil Build-an#
SQLite punya fitur untuk mengecek opsi-opsi yang diaktifkan pada waktu peng-compile-an, untuk mengeceknya cukup dengan:
sqlite> PRAGMA compile_options;
Kalau ada ENABLE_STMT_SCANSTATUS
di daftarnya, artinya kita berhasil membuat build kustom SQLite.
Sekarang, kita akan mencoba mengeksekusi kueri SQL untuk mengambil data dari tabel users
pada saat sebelum dan setelah membuat indeks.
Sebelum itu, kita harus mengaktifkan scanstats
agar informasi banyaknya baris yang terpindai ditampilkan setiap kali mengeksekusi kueri SQL.
.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, yang membutuhkan banyak waktu serta biaya penggunaan layanan Cloudflare D1 dan Turso pun jadi semakin mahal. Supaya lebih efisien, kita bisa membuat indeks pada kolom username
.
sqlite> CREATE INDEX users_username_idx ON username (username);
Ulangi kueri SQL tadi, yang sekarang ini jauh lebih ngebut dan hanya membutuhkan 1 kuota baca pada tabel.
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)
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 cukup tambahkan konfigurasi ini ke dalam file /etc/pacman.conf
, nama grup bebas, contoh ini menggunakan 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
Terakhir, demi menjaga kestabilan sistem, setiap ada pembaruan paket Arch Linux, paket hasil build-an sendiri harus diperbarui juga.