Membuat Repositori Pribadi Arch Linux
Aditya Phra •
Repositori pribadi Arch Linux ini kubutuhkan biar paket mudah dibagikan ke komputer lain apalagi proses build paket lumayan memakan waktu, daripada harus build ulang di setiap komputer, mending build sekali, kemudian hasil build-an dipakai di komputer lain.
Langsung saja, inilah caraku membuat repositori pribadi Arch Linux.
Membuat Repositori Lokal
Setel PACKAGER yang berfungsi sebagai identitas siapa yang mem-build paket dengan menambahkan di /etc/makepkg.conf seperti ini:
PACKAGER="Aditya Phra <aditya.phra@gmail.com>"
Build paket yang akan dimasukkan ke repositori lokal dengan makepkg:
makepkg -s
Buatlah direktori untuk menyimpan repositori, contoh di bawah memakai nama repo my-repo. Ingat-ingat nama repositorinya karena bakal dipakai di langkah selanjutnya.
sudo mkdir /var/my-repo
Beri akses agar pengguna alpm (pacman) bisa mengakses repositori:
setfacl -dm u:alpm:rx /var/my-repo
Kopikan paket ke dalam direktori repositori:
sudo cp package-1.0.0-1-x86_64.pkg.tar.zst /var/my-repo
Tambahkan paket ke database repositori:
sudo repo-add -R /var/my-repo/my-repo.db.tar.zst /var/my-repo/package-1.0.0-1-x86_64.pkg.tar.zst
Edit /etc/pacman.conf, tambahkan konfigurasi ini:
[my-repo]
SigLevel = Optional TrustAll
Server = file:///var/my-repo
Sinkronisasikan database kemudian coba instal paket yang telah ditambahkan ke repositori lokal:
sudo pacman -Syu
sudo pacman -S package
Untuk menghapus paket dari repositori:
sudo repo-remove -R /var/my-repo/my-repo.db.tar.zst package
Mendistribusikan Repositori
Metode yang biasa aku pakai untuk mendistribusikan repositori, yaitu menyinkronisasi repositori antar komputer atau membuat server repositori.
Menyinkronisasi repositori bisa memakai rsync atau rclone.
Contoh di bawah aku memakai rclone dikombinasikan dengan Cloudflare R2 untuk menyimpan data repositori yang nantinya bisa diunduh repositorinya di komputer lain.
Unggah ke R2:
sudo rclone sync /var/my-repo r2:/my-repo --copy-links
Unduh di komputer lain:
sudo rclone sync r2:/my-repo /var/my-repo --copy-links
Cara di atas tidak efisien kalau ukuran repositori sangat besar karena setiap komputer harus mengunduh semua isi repositori, untuk cara yang lebih efisien harus dibuat server HTTP untuk repositorinya.
Biasanya aku pakai rclone untuk membuat server repositori karena lebih simpel:
rclone serve http --addr 192.168.1.128:8080 /var/my-repo
Edit /etc/pacman.conf di komputer lain, tambahkan konfigurasi server repositori:
[my-repo]
SigLevel = Optional TrustAll
Server = http://192.168.1.128:8080
Men-sign Paket & Repositori
Bagian ini tidak wajib kalau untuk pemakaian pribadi, kalau repositori dibagikan ke internet, kusarankan untuk men-sign paket dan repositori.
Pertama, buatlah key GPG:
gpg --full-gen-key
Masukkan konfigurasi yang diminta, kalau aku biasanya pakai konfigurasi default yang direkomendasikan di ArchWiki.
Dan seperti ini hasilnya:
gpg (GnuPG) 2.4.9; Copyright (C) 2025 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(9) ECC (sign and encrypt) *default*
(10) ECC (sign only)
(14) Existing key from card
Your selection? 9
Please select which elliptic curve you want:
(1) Curve 25519 *default*
(4) NIST P-384
(6) Brainpool P-256
Your selection? 1
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 1y
Key expires at Rab 03 Feb 2027 11:43:59 WIB
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: Aditya Phra
Email address: aditya.phra@gmail.com
Comment:
You selected this USER-ID:
"Aditya Phra <aditya.phra@gmail.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: revocation certificate stored as '/home/aditya/.gnupg/openpgp-revocs.d/1DD61B87A3D569DE565488A71A610D095E1165AF.rev'
public and secret key created and signed.
pub ed25519 2026-02-03 [SC] [expires: 2027-02-03]
1DD61B87A3D569DE565488A71A610D095E1165AF
uid Aditya Phra <aditya.phra@gmail.com>
sub cv25519 2026-02-03 [E] [expires: 2027-02-03]
1DD61B87A3D569DE565488A71A610D095E1165AF adalah keyid yang nanti digunakan di langkah selanjutnya.
Ekspor public key karena nanti perlu diimpor key tersebut di komputer konsumen repositori:
gpg --export --armor --output public-key.asc 1DD61B87A3D569DE565488A71A610D095E1165AF
Tambahkan GPGKEY ke dalam /etc/makepkg.conf yang diisi dengan keyid seperti ini:
GPGKEY="1DD61B87A3D569DE565488A71A610D095E1165AF"
Build kembali paket sekaligus men-sign:
makepkg -s --sign
Setelah paket berhasil di-build, bakalan muncul file baru berakhiran *.pkg.tar.zst.sig. Itulah file signature yang dipakai untuk menvalidasi integritas paket.
Lakukan hal yang sama di komputer server seperti pada saat membuat repositori:
sudo cp package-1.0.0-1-x86_64.pkg.tar.zst{,.sig} /var/my-repo
Tambahkan paket ke repositori dan sign database repositori:
sudo repo-add -R --sign /var/my-repo/my-repo.db.tar.zst /var/my-repo/package-1.0.0-1-x86_64.pkg.tar.zst
Import public key yang sudah dibuat tadi di komputer konsumen repositori:
sudo pacman-key --add public-key.asc
Cek fingerprint di komputer konsumen sesuai dengan keyid:
pacman-key --finger 1DD61B87A3D569DE565488A71A610D095E1165AF
Terakhir, sign key yang telah diimpor di komputer konsumen:
sudo pacman-key --lsign-key 1DD61B87A3D569DE565488A71A610D095E1165AF
Setel kembali repositori di /etc/pacman.conf, hilangkan SigLevel biar menggunakan konfigurasi default, kira-kira jadi seperti ini:
[my-repo]
Server = http://192.168.1.128:8080
Lanjutkan dengan sinkronisasi database & instal paket:
sudo pacman -Syu package