Pesan error apt dan dpkg termasuk yang paling informatif di dunia Linux: hampir setiap pesan menyebut berkas atau paket yang bermasalah, alasannya, dan sering kali obatnya. Persoalannya, pesan itu muncul cepat, panjang, dan bertumpuk — pengguna panik cenderung menscroll sampai bawah lalu menebak. Chapter ini melatih kebiasaan sebaliknya: membaca pesan sampai habis, mengekstrak fakta pentingnya, lalu mengarahkannya ke perintah perbaikan yang tepat. Skenario per-skenario sudah dibedah di Chapter Troubleshooting Packages
; fokus kita sekarang adalah pola triase yang bisa dituliskan sebagai skrip.
Tabel Triase Error Umum #
Enam pesan berikut menutupi mayoritas kegagalan apt dan dpkg di lapangan:
| Pesan | Penyebab khas | Perintah perbaikan |
|---|---|---|
Could not get lock ... held by process | proses apt lain sedang berjalan | ps aux | grep apt, tunggu |
dpkg: error processing package | transaksi dpkg terputus di tengah | sudo dpkg --configure -a |
... but it is not going to be installed | unmet dependencies | sudo apt --fix-broken install |
NO_PUBKEY | keyring repository kedaluwarsa | perbarui keyring repo |
does not have a Release file | entri repository usang | sunting /etc/apt/sources.list |
No space left on device | disk penuh saat mengunduh | kosongkan ruang — Chapter Disk Space Problems |
Dua baris pertama tabel itu saling bersambung: transaksi yang terputus sering kali bermula dari apt yang berhenti setelah menemui error lain, sehingga perbaikan hampir selalu dimulai dari baris pesan paling atas.
Kasus 1: Lock Sedang Dipegang #
Pesan Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3821 (apt) bukan berarti sistem rusak — pesan itu justru pengaman yang sedang bekerja, karena dua transaksi yang menulis database bersamaan akan saling merusak. Pelakunya biasanya unattended-upgrades yang memperbarui paket di latar belakang. Identifikasi pemegangnya dengan ps aux | grep apt, lalu tunggu sampai selesai.
Kasus 2: Transaksi Terputus dan Dependensi Rusak #
Skenario klasiknya: koneksi terputus atau terminal ditutup saat dpkg sedang membongkar paket. Sesi apt berikutnya menolak jalan — berikut contoh tampilan keluhan lengkapnya:
dpkg: error processing package nginx-full (--configure):
installed nginx-full package post-installation script subprocess returned error exit status 1
nginx-full depends on nginx-common (= 1.22.1-9) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.Urutan perbaikannya mengikuti luka yang dialami database: sudo dpkg --configure -a menyelesaikan paket yang setengah terpasang, lalu sudo apt --fix-broken install memasang dependensi yang hilang. Keduanya aman diulang — perintah pertama akan mengatakan tidak ada yang perlu dikonfigurasi bila semuanya sudah beres, dan perintah kedua menyertakan opsi simulasi -s bila kita ingin melihat rencananya lebih dulu.
Kasus 3: Repository Usang dan Kunci Kedaluwarsa #
Dua pesan dari pihak repository sering muncul berpasangan setelah sebuah mirror ditutup atau mirror berganti alamat: The repository '...' does not have a Release file. berarti alamat yang tercantum tidak lagi menayangkan rilis, sedangkan NO_PUBKEY berarti tanda tangan rilis tidak bisa diverifikasi karena kuncinya tidak dikenal. Perbaikannya menyangkut dua berkas: sunting /etc/apt/sources.list untuk alamat yang benar — formatnya didokumentasikan di sources.list(5)
— lalu perbarui keyring untuk pembaruan tanda tangan.
Praktik: Mengekstrak Fakta dari Pesan #
Langkah pertama triase adalah mengambil fakta penting dari pesan mentah: siapa pemegang lock, paket mana yang rusak. Kita latih dengan fixture yang menampung lima pesan klasik:
cat > error-apt.txt <<'AKHIR'
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3821 (apt)
dpkg: error processing package nginx-full (--configure):
nginx-full depends on nginx-common (= 1.22) but it is not going to be installed
W: GPG error: http://deb.debian.org/debian bookworm InRelease: NO_PUBKEY 4CBEDD5A9F92F8D6
E: You don't have enough free space in /var/cache/apt/archives/.
AKHIR
grep -o 'held by process [0-9]*' error-apt.txt
sed -n 's/^dpkg: error processing package \([a-z0-9.-]*\).*/paket bermasalah: \1/p' error-apt.txtOutput yang Dihasilkan:
held by process 3821
paket bermasalah: nginx-fullDua perintah kecil itu menghasilkan dua fakta yang menentukan seluruh langkah berikutnya. Bedahnya:
grep -o 'held by process [0-9]*': opsi-omencetak hanya bagian yang cocok, sehingga nomor proses pemegang lock terpotong dari kalimat panjangnya — nomor itu langsung bisa dicocokkan denganps aux.sed -n 's/.../p': substitusi dengan-nplus flagpmencetak hanya baris yang cocok poladpkg: error processing package; tanda kurung\(...\)menangkap nama paket, lalu\1menyalinnya ke keluaran.- Pola
[a-z0-9.-]*: nama paket Debian hanya memuat huruf kecil, angka, titik, dan tanda minus, jadi tangkapan berhenti tepat sebelum(--configure).
Praktik: Skrip Triage #
Fakta terkumpul, kini giliran pengarahannya. Skrip berikut membaca setiap baris pesan, lalu mencetak kategori masalah beserta perintah perbaikannya:
cat > error-apt.txt <<'AKHIR'
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3821 (apt)
dpkg: error processing package nginx-full (--configure):
nginx-full depends on nginx-common (= 1.22) but it is not going to be installed
W: GPG error: http://deb.debian.org/debian bookworm InRelease: NO_PUBKEY 4CBEDD5A9F92F8D6
E: The repository 'http://deb.debian.org/debian bookworm Release' does not have a Release file.
E: You don't have enough free space in /var/cache/apt/archives/.
AKHIR
cat > triage-apt.sh <<'AKHIR'
#!/bin/bash
# Memetakan tiap baris pesan error apt ke langkah perbaikannya.
while IFS= read -r baris; do
case "$baris" in
*get*lock*)
echo "LOCK -> ps aux | grep apt, tunggu prosesnya selesai";;
*error*processing*package*)
echo "DPKG -> sudo dpkg --configure -a";;
*not*going*to*be*installed*)
echo "DEP -> sudo apt --fix-broken install";;
*NO_PUBKEY*)
echo "GPG -> perbarui keyring repository";;
*Release*file*)
echo "REPO -> sunting /etc/apt/sources.list, entri sudah usang";;
*free*space*)
echo "DISK -> kosongkan ruang disk";;
esac
done < error-apt.txt
AKHIR
bash triage-apt.shOutput yang Dihasilkan:
LOCK -> ps aux | grep apt, tunggu prosesnya selesai
DPKG -> sudo dpkg --configure -a
DEP -> sudo apt --fix-broken install
GPG -> perbarui keyring repository
REPO -> sunting /etc/apt/sources.list, entri sudah usang
DISK -> kosongkan ruang diskEnam baris pesan berubah menjadi enam baris rencana kerja — persis isi tabel triase di awal chapter. Bagian pentingnya:
while IFS= read -r baris: membaca fixture baris demi baris;IFS=menjaga spasi di awal baris (baris ketiga fixture sengaja berindentasi) tetap terbaca utuh.case "$baris": satu tangan pola untuk tiap kategori; pola*get*lock*dan*Release*file*sengaja pendek agar variasi penulisan pesan tetap cocok.- Tanpa tangan
*): baris yang tidak dikenali tidak dicetak apa-apa — triase hanya boleh merekomendasikan perbaikan yang jelas sumbernya.
Skrip seperti ini biasanya diberi makan keluaran asli apt upgrade yang dialihkan ke berkas, bukan fixture — perintah-perintah lengkapnya didokumentasikan di apt-get(8)
. Semua kategori di atas kecuali satu selesai dengan satu-dua perintah; sisanya, baris DISK, menuntut perburuan tersendiri di dalam filesystem. Perburuan itulah topik Chapter Disk Space Problems
.