Linux : Manajemen Paket dan Repositori Debian

Revision as of 14:03, 2 November 2026 by Maintenance script (talk | contribs) (Protected "Linux : Manajemen Paket dan Repositori Debian": Proteksi editorial: edit/move sysop ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)))
(diff) ← Older revision | Latest revision (diff) | Newer revision β†’ (diff)

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 dpkg dan apt tanpa tertukar;
  • membaca isi repositori Debian: suite, component, dan alamatnya;
  • menjelaskan kenapa apt update wajib dijalankan sebelum apt 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 hold di 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=yes hanya agar error hilang.
  • Simpan kunci pihak ketiga di /usr/share/keyrings/ dan rujuk lewat Signed-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 -security aktif. Server tanpa repo security bisa tampak rapi, padahal celah yang sudah publik belum ditutup.
  • Jangan memasang .deb dari 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

πŸ“š Referensi