Linux : Manajemen Paket dan Repositori Debian
Kalau kamu pernah mengetik apt install nginx lalu tiba-tiba ada belasan paket lain ikut terpasang, kamu baru saja memakai salah satu alat paling penting di Linux. Di Debian, alat inilah yang menjaga semua program di server tetap saling cocok versinya.
Tanpa manajer paket, kamu harus menebak sendiri: library apa yang dibutuhkan, versi berapa, dan siapa yang harus dipasang lebih dulu. Artikel ini membedah cara Debian mengelola paket dan repositori, supaya kamu tidak lagi memasang sesuatu hanya karena "katanya jalan".
π― Tujuan
Setelah membaca dan mempraktikkan artikel ini, kamu diharapkan bisa:
- membedakan tugas
dpkgdanapttanpa tertukar; - membaca isi repositori Debian: suite, component, dan alamatnya;
- menjelaskan kenapa
apt updatewajib dijalankan sebelumapt upgrade; - menentukan versi paket yang dipakai saat satu paket tersedia di dua repo;
- memulihkan server yang
dpkg-nya macet tanpa memasang ulang sistem.
π‘ Tips: semua perintah di artikel ini dijalankan sebagai root atau lewat sudo. Kalau kamu memakai VM latihan, ambil snapshot dulu β salah repo adalah kesalahan yang paling mahal untuk dipelajari tanpa cadangan.
π Konteks nyata
Bayangkan bengkel motor. Di gudang ada ribuan spare part yang tertata di rak, lengkap dengan katalog: nomor part, merek, dan motor apa saja yang cocok.
Mekaniknya tidak menebak. Ia membuka katalog, mencari "kampas rem Vario 125", lalu mengambil part yang nomornya cocok. Kalau part itu butuh baut khusus, katalog juga menyebutkan bautnya.
Repositori Debian adalah gudang itu. Katalognya adalah daftar paket yang diunduh apt. Mekaniknya adalah apt sendiri, dan yang benar-benar memasang part ke motor adalah dpkg.
π₯ Kasus nyata: di lab TKJ sebuah SMK, siswa diminta memasang web server. Karena tutorial di internet menyebut versi PHP yang lebih baru, ia menambahkan repo sid (unstable) ke server lab yang berjalan di stable. Satu perintah apt upgrade kemudian menarik libc6 dari unstable. Server tidak mau boot lagi, dan praktikum dua kelas tertunda dua hari. Pemulihannya bukan apt remove, tapi memilih ulang versi lewat repositori dan pin.
π§ Konsep singkat
πΉ Tiga lapis yang sering tertukar
Banyak siswa mengira apt dan dpkg adalah dua nama untuk hal yang sama. Padahal keduanya bekerja di lapis berbeda.
| Lapis | Tugasnya | Kalau lapis ini rusak |
|---|---|---|
| Repositori | menyimpan file .deb dan indeksnya |
apt update gagal, paket tidak ditemukan
|
apt |
mengambil indeks, menghitung dependensi, mengunduh | resolusi versi salah, paket "held back" |
dpkg |
membongkar .deb ke sistem dan mencatat status |
paket "setengah terpasang", dpkg macet
|
Jadi urutannya selalu: apt menyiapkan bahan, dpkg yang memasang. Saat kamu memakai dpkg -i langsung, kamu melewati petugas dependensi β dan itu sumber sebagian besar masalah paket di server pemula.
πΉ Isi repositori: suite dan component
Satu baris repo Debian punya tiga bagian: alamat, suite, dan component. Contohnya deb http://deb.debian.org/debian bookworm main.
Suite adalah rilisnya. Nama kode seperti bookworm (Debian 12) atau trixie (Debian 13) lebih aman dipakai daripada stable, karena stable ikut berpindah saat rilis baru keluar.
- bookworm β paket inti rilis tersebut.
- bookworm-updates β perbaikan bug yang tidak mendesak.
- bookworm-security β patch keamanan. Ini yang paling penting untuk server.
- bookworm-backports β paket versi lebih baru, tidak diaktifkan otomatis.
Component menunjukkan status lisensi paketnya.
| Component | Isi | Catatan |
|---|---|---|
main |
perangkat lunak bebas sepenuhnya | mayoritas paket server ada di sini |
contrib |
bebas, tapi butuh paket non-bebas | contoh: driver yang butuh firmware |
non-free |
tidak bebas | lisensi membatasi penggunaan ulang |
non-free-firmware |
firmware biner | dipisah sejak Debian 12 |
π Angka penting: indeks paket component main saja bisa mencapai 10β16 MB data terkompresi. Itu sebabnya apt update terasa lama di koneksi sekolah, padahal belum ada satu paket pun yang diunduh.
πΉ Kenapa harus apt update dulu
apt update tidak meng-upgrade apa pun. Tugasnya hanya menyegarkan katalog di /var/lib/apt/lists/.
Kalau kamu langsung menjalankan apt upgrade, apt memakai katalog terakhir yang tersimpan. Di server yang jarang dirawat, katalog itu bisa berumur berbulan-bulan.
Akibatnya bukan error, tapi sesuatu yang lebih berbahaya: perintahnya sukses, hanya saja versi yang dipasang bukan versi terbaru. Patch keamanan tidak masuk, dan tidak ada pesan gagal yang bisa kamu baca.
β οΈ Hati-hati: apt upgrade tidak pernah menghapus paket. Kalau sebuah paket butuh dependensi baru yang memaksa paket lain dicopot, apt akan menahannya dan menulis "held back". Jangan buru-buru pindah ke full-upgrade sebelum tahu paket apa yang akan dicopot.
πΉ deb822: format baru yang lebih rapi
Sejak apt versi 1.1, Debian mengenal dua format sumber repo. Yang lama satu baris di /etc/apt/sources.list. Yang baru berbentuk blok dan disimpan sebagai file .sources di /etc/apt/sources.list.d/.
Debian 12 ke atas memakai deb822 sebagai default. Bentuknya seperti ini:
Types: deb
URIs: http://deb.debian.org/debian
Suites: bookworm bookworm-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Bedanya dengan format lama: nilai dipisah spasi, bukan koma; dan setiap sumber punya blok sendiri. Untuk mematikan satu sumber, cukup tambahkan Enabled: no β tidak perlu menghapus barisnya.
π Angka penting: nama file di sources.list.d/ hanya boleh berisi huruf, angka, garis bawah, strip, dan titik. File dengan nama lain akan diabaikan apt dengan pesan notice β sering tidak terbaca karena terlewat di antara output panjang.
πΉ Prioritas: siapa menang kalau paket ada di dua repo
Ini bagian yang paling jarang diajarkan, padahal paling sering menyakitkan. Kalau paket yang sama tersedia di dua repositori, apt memilih berdasarkan prioritas, bukan berdasarkan urutan baris.
| Prioritas | Arti |
|---|---|
| kurang dari 0 | tidak akan pernah dipasang |
| 1β99 | hanya jika belum ada versi lain terpasang |
| 100β499 | hanya jika tidak ada versi lebih baru |
| 500β989 | hanya jika tidak ada versi lebih baru di rilis target |
| 990β1000 | dipasang, kecuali versi terpasang lebih baru |
| di atas 1000 | selalu dipasang, boleh menurunkan versi |
Nilai bawaannya: versi yang sudah terpasang 100, versi yang belum terpasang 500, dan rilis target 990. Artinya repo pihak ketiga dengan versi lebih tinggi bisa menang tanpa kamu sadari.
π§ͺ Uji cepat: apt-cache policy nama-paket menampilkan semua kandidat versi beserta prioritas dan asal repo. Kalau muncul dua kandidat, baca kolom prioritas sebelum mengetik apt install.
πΉ Hold: menyimpan versi yang sudah terbukti
Kadang kamu tidak ingin sebuah paket ikut naik versi. Contohnya kernel yang drivernya sudah terbukti stabil, atau aplikasi produksi yang hanya diuji di versi tertentu.
Perintahnya apt-mark hold nama-paket. Untuk melihat daftar yang ditahan, apt-mark showhold. Untuk melepas, apt-mark unhold nama-paket.
Efek sampingnya: paket yang ditahan akan muncul sebagai "held back" setiap kali kamu upgrade. Kalau daftarnya panjang, biasanya ada dependensi yang ikut tertahan β bukan hanya satu paket.
πΉ Dari .deb lepas sampai paket setengah terpasang
File .deb adalah paket mentah: arsip berisi file program plus metadata dependensi. dpkg bisa memasangnya, tapi ia tidak mengunduh dependensi.
Kalau dependensi tidak ada, status paket menjadi iU atau iF di dpkg -l: terpasang, tapi belum terkonfigurasi. Selama statusnya begitu, paket lain yang bergantung padanya ikut tertahan.
Perbaikannya bukan dpkg -i ulang, tapi menyuruh apt melengkapi yang kurang:
sudo apt --fix-broken install
π§© Istilah penting
| Istilah | Arti singkat | Analogi |
|---|---|---|
| Paket | satu unit program siap pasang | satu kotak spare part |
| Dependensi | paket lain yang wajib ada | baut yang wajib ikut kampas rem |
| Repositori | kumpulan paket + indeks | gudang spare part |
| Indeks | daftar isi paket yang diunduh | katalog gudang |
| Suite | nama rilis repo | edisi katalog tahun tertentu |
| Component | kelompok lisensi dalam suite | rak berdasarkan merek |
| Pin | aturan prioritas versi | siapa yang didahulukan saat stok dobel |
| Hold | versi dikunci | part yang tidak boleh diganti |
.deb |
format paket Debian | kotak partnya |
| Meta-paket | paket yang isinya hanya daftar dependensi | paket bundling |
π§ Praktik: Manajemen Paket dan Repositori Debian
Praktik ini memakai satu VM Debian. Kalau belum punya, kamu bisa memakai debian:12 di container β perintahnya sama, hanya saja tidak ada systemd.
πΉ Langkah 1: baca identitas sistem
Sebelum menyentuh repo, pastikan kamu tahu sistem apa yang sedang dipegang.
cat /etc/os-release
uname -m
Yang kamu cari: VERSION_CODENAME dan arsitektur. Repo untuk arm64 tidak sama isinya dengan amd64, dan mencampurnya adalah cara cepat merusak sistem.
πΉ Langkah 2: periksa sumber repo yang aktif
ls -l /etc/apt/sources.list /etc/apt/sources.list.d/
grep -rhE '^(deb|URIs)' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null
Baca hasilnya dengan tiga pertanyaan: suite-nya apa, component-nya apa, dan apakah ada alamat yang tidak kamu kenali. Satu baris asing di sini adalah temuan yang harus dijelaskan sebelum upgrade apa pun.
πΉ Langkah 3: segarkan indeks lalu baca kandidat
sudo apt update
apt list --upgradable
apt-cache policy openssh-server
Perhatikan jumlah paket yang bisa di-upgrade dan asal repo masing-masing. Kalau apt update berhenti dengan pesan GPG error atau 404, jangan lanjut β perbaiki sumbernya dulu.
πΉ Langkah 4: pasang, lacak asal file, lalu hapus
sudo apt install nginx -y
dpkg -S /usr/sbin/nginx
dpkg -L nginx-core | head
sudo apt remove nginx
dpkg -S menjawab "file ini milik paket apa", dpkg -L sebaliknya: "paket ini menaruh file di mana". Dua perintah ini yang membedakan admin yang menebak dan yang tahu.
π‘ Tips: apt remove menyisakan file konfigurasi. Pakai apt purge kalau kamu memang ingin bersih total β misalnya saat mengulang praktik dari nol.
πΉ Langkah 5: tahan versi dan bersihkan cache
sudo apt-mark hold nginx
apt-mark showhold
sudo apt-mark unhold nginx
sudo apt autoremove --purge
sudo apt clean
Cache unduhan disimpan di /var/cache/apt/archives/. Di VM lab yang disknya kecil, folder ini bisa jadi penyebab "disk penuh" yang tidak disangka.
πΉ Langkah 6: pulihkan dpkg yang macet
Gejalanya khas: setiap perintah apt menolak jalan dan menyuruh menyelesaikan dpkg dulu.
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt install -f
dpkg -l | grep -v '^ii'
Baris terakhir adalah pemeriksa paling jujur: paket dengan status selain ii berarti belum beres, walau apt sudah tidak protes.
π Dipakai di dunia kerja
- Sekolah/lab TKJ: satu server dipakai bergantian oleh beberapa kelas. Tanpa disiplin repo, satu siswa yang menambah repo unstable bisa menjatuhkan server untuk semua kelas.
- Kantor cabang: server file dan aplikasi internal di-update bulanan. Admin perlu tahu paket mana yang ditahan, supaya laporan "sudah di-update" tidak menutupi patch yang sebenarnya belum masuk.
- Hosting/ISP kecil: satu mesin melayani puluhan domain. Upgrade yang menarik dependensi tak terduga bisa mematikan banyak layanan sekaligus, jadi urutan update dan snapshot menjadi standar kerja.
- Industri/manufaktur: mesin HMI dan gateway produksi sering dikunci versinya karena sudah lolos uji.
apt-mark holddi sini bukan kemalasan, tapi bagian dari prosedur keselamatan. - Rumah sakit/klinik: aplikasi rekam medis tidak boleh berubah versi tanpa uji. Repo dikunci, dan patch keamanan masuk lewat jadwal pemeliharaan.
- Cloud/VPS: image dasar dibangun ulang, bukan ditambal. Manajemen paket dipakai saat membangun image, bukan saat mesin sudah melayani pengguna.
β Verifikasi
Jalankan berurutan setelah praktik. Semua harus memberi hasil yang diharapkan.
| Perintah | Hasil yang diharapkan |
|---|---|
apt update |
berakhir tanpa GPG error atau 404
|
apt-cache policy nginx |
satu kandidat jelas, prioritas terbaca |
apt-mark showhold |
hanya paket yang sengaja kamu tahan |
dpkg -l | grep -vc '^ii' |
tidak ada paket berstatus aneh |
dpkg -S /usr/sbin/nginx |
menyebut nama paket pemilik file |
apt list --upgradable |
daftar paket, bukan "held back" yang tak dijelaskan |
π§ͺ Uji cepat: jalankan apt-get check. Kalau keluarannya hanya "Reading package lists" tanpa error, struktur dependensi sistemmu sedang sehat.
β οΈ Kesalahan umum & troubleshooting
| Gejala | Penyebab | Perbaikan |
|---|---|---|
Unable to locate package |
indeks belum disegarkan atau repo mati | apt update, cek alamat repo
|
GPG error: NO_PUBKEY |
kunci repo pihak ketiga belum ada | impor kunci resmi ke /usr/share/keyrings
|
404 Not Found pada suite |
suite sudah pindah (mis. rilis lama) | pakai archive.debian.org atau ganti codename
|
| Paket "held back" banyak | ada hold atau pin yang menahan | apt-cache policy, apt-mark showhold
|
dpkg minta diselesaikan |
paket setengah terpasang | dpkg --configure -a lalu apt -f install
|
| File hilang setelah upgrade | paket digantikan paket lain | dpkg -S pada path lama
|
Disk /var penuh |
cache dan indeks menumpuk | apt clean, apt autoremove --purge
|
| Dua versi terpasang | pemasangan .deb manual |
dpkg -l, pasang lewat apt
|
β οΈ Hati-hati: jangan menyalin baris repo dari blog tanpa membaca suite-nya. Satu kata sid atau testing di server produksi bisa mengubah seluruh sistem pada upgrade berikutnya β dan efeknya baru terasa saat reboot.
π Angka penting: apt tidak akan menurunkan versi paket kecuali prioritasnya di atas 1000 atau kamu memintanya eksplisit, misalnya apt install nginx=1.22.1-9. Ini yang membuat "kembali ke versi lama" terasa tidak bisa, padahal bisa.
π₯ Kasus nyata: sebuah kantor distributor memakai repo pihak ketiga untuk mendapatkan versi Nginx lebih baru. Setahun kemudian upgrade rutin menarik versi terbaru dari repo itu, yang mengubah lokasi file konfigurasi. Situs internal mati pagi hari, dan tim menuduh jaringan. Penyebab sebenarnya terlihat dari satu baris: paket berasal dari repo yang prioritasnya tidak pernah diatur. Perbaikannya adalah pin ke repo resmi distro, lalu menguji ulang konfigurasi.
π Catatan keamanan & etika
Menambahkan repositori berarti memberi hak menjalankan kode sebagai root kepada pemilik repo tersebut. Tidak ada pemeriksaan tambahan setelah paketnya lolos verifikasi tanda tangan.
- Verifikasi terjadi lewat kunci GPG. Jangan sekali-kali memakai
trusted=yeshanya agar error hilang. - Simpan kunci pihak ketiga di
/usr/share/keyrings/dan rujuk lewatSigned-By, jangan menaruhnya di direktori yang bisa ditulis user biasa. - Repo resmi Debian ditandatangani; unduhan lewat HTTP tetap terverifikasi isinya, tapi HTTPS mengurangi risiko pengalihan.
- Patch keamanan hanya masuk kalau suite
-securityaktif. Server tanpa repo security bisa tampak rapi, padahal celah yang sudah publik belum ditutup. - Jangan memasang
.debdari sumber tidak jelas di mesin yang memegang data siswa atau pasien.
π‘ Tips: sebelum upgrade besar, catat keadaan sekarang: dpkg --get-selections > paket-sebelum.txt dan apt-mark showhold. Dua file kecil ini sering menyelamatkan waktu berjam-jam saat harus mengembalikan kondisi.
π Kesimpulan
Manajemen paket di Debian bukan soal hafal perintah, tapi soal tahu lapis mana yang sedang bekerja. Repositori menyimpan, indeks mencatat, apt memilih, dan dpkg memasang.
Kalau kamu memahami suite, component, dan prioritas, hampir semua masalah paket bisa dijelaskan sebelum menjadi insiden. Dan kalau dpkg macet, kamu tahu harus ke mana β bukan memasang ulang sistem.
Langkah berikutnya: buka /etc/apt/sources.list.d/ di server latihanmu, baca satu per satu isinya, lalu jelaskan ke temanmu asal setiap repo itu.
π Materi terkait
- Menambahkan Repositori Debian Linux β praktik menulis isi
sources.listdari nol. - Shell Scripting : Menambahkan Repositori Debian β versi otomatis untuk banyak mesin.
- Linux : Perintah Dasar Linux β bekal navigasi file sebelum mengurus paket.
- Linux : Cek Penggunaan Disk β penting saat
/varmulai penuh karena cache. - Debian : Konfigurasi Web Server (Nginx) β layanan yang paling sering dipasang lewat
apt. - Linux : Cron Job β jadwalkan update terjadwal dengan aman.
π Referensi
- Debian Handbook, bagian 6.2 "aptitude, apt-get, and apt Commands" β https://www.debian.org/doc/manuals/debian-handbook/sect.apt-get.en.html
- Manual
sources.list(5)Debian bookworm β https://manpages.debian.org/bookworm/apt/sources.list.5.en.html - Manual
apt-get(8)danapt-mark(8)β https://manpages.debian.org/bookworm/apt/ - Manual
dpkg(1)β https://manpages.debian.org/bookworm/dpkg/dpkg.1.en.html - Debian Wiki, "DebianRepository/Format" β https://wiki.debian.org/DebianRepository/Format