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