Perintah dpkg adalah alat dasar pemaketan Debian yang memasang berkas .deb dan menyimpan basis data seluruh paket pada sistem. Topik ini membahas pemeriksaan tingkat rendah dengan dpkg, yaitu mendaftar paket terpasang, membaca daftar berkas yang dibawa satu paket, membaca status pemasangannya, dan melacak pemilik sebuah berkas. Setelah menyelesaikannya, pertanyaan sehari-hari tentang paket dapat dijawab langsung dari basis datanya tanpa menyentuh repositori sama sekali.
Kedudukan dpkg di bawah apt#
dpkg memasang, mencabut, dan mengonfigurasi arsip .deb, lalu mencatat hasilnya pada basis data di /var/lib/dpkg. Basis data itu terdiri atas berkas status yang memuat metadata setiap paket dan direktori info yang menyimpan daftar berkas tiap paket. apt berada pada lapisan di atas dpkg, karena apt yang memilih paket dari repositori, menyelesaikan dependensinya, dan mengunduh arsipnya, kemudian memanggil dpkg untuk pekerjaan teknisnya.
Perbedaan yang paling terasa ada pada lingkup pengetahuannya. dpkg tidak menyelesaikan dependensi dan tidak mengenal jaringan, sehingga memasang satu arsip .deb yang bergantung pada pustaka lain akan gagal bila pustaka itu belum ada. Sebaliknya, dpkg mampu bekerja sepenuhnya tanpa koneksi karena seluruh pertanyaan tentang keadaan sistem dijawab dari disk lokal. Untuk kebutuhan kueri, dpkg mendelegasikan pekerjaan tersebut kepada perintah pendamping. Delegasi ini terlihat pada nama perintah yang muncul di dalam pesan error.
Mendaftar paket terpasang dengan dpkg -l#
Perintah dpkg -l menampilkan seluruh paket yang diketahui basis data, satu paket per baris, lengkap dengan kode statusnya. Tiga baris pertama keluarannya adalah legenda yang menjelaskan kolom status, yaitu keinginan pemasangan (desired action), keadaan sekarang, dan penanda error. Kode ii yang paling sering muncul berarti paket diinginkan terpasang dan keadaannya memang terpasang.
# lima paket pertama pada basis data dpkg
dpkg -l | head -n 9Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-====================================-====================================-============-================================================================================
ii adduser 3.152 all add and remove users and groups
ii adwaita-icon-theme 48.1-1 all default icon theme of GNOME
ii antiword 0.37-17 amd64 Converts MS Word files to text, PS, PDF and XML
ii apt 3.0.3 amd64 commandline package managerPencarian dapat diarahkan langsung kepada satu paket dengan menyebut namanya sebagai argumen, dan dpkg menampilkan legenda yang sama diikuti baris paket yang dicari. Bentuk ini lebih ringkas daripada menyaring keluaran penuh dengan grep, dan namanya wajib tepat sehingga paket lain yang serupa tidak ikut tampil.
# baris status untuk paket bash
dpkg -l bashDesired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii bash 5.2.37-2+b8 amd64 GNU Bourne Again SHellKode pada kolom status menyimpan riwayat keadaan sebuah paket. Huruf pertama menyatakan keinginan atas paket itu, sedangkan huruf kedua menyatakan keadaan sekarang, sehingga setiap kombinasi dapat dibaca tanpa menghafalnya. Paket yang dicabut tetapi konfigurasinya masih ada tampil dengan kode rc, sedangkan paket yang setengah terpasang membawa huruf besar seperti iU. Deretan kode ini menjadikan dpkg -l tempat pertama yang diperiksa ketika keadaan pemasangan terasa tidak konsisten.
Menginspeksi isi dan status satu paket#
Perintah dpkg -L nama-paket menampilkan seluruh berkas yang dibawa sebuah paket, lengkap dengan direktorinya. Keluarannya menjelaskan di mana program, konfigurasi, dan dokumentasi sebuah paket benar-benar berada, dan daftar ini disalin dari basis data, bukan dari pencarian disk.
# dua belas entri pertama dari daftar berkas paket bash
dpkg -L bash | head -n 12/.
/etc
/etc/bash.bashrc
/etc/skel
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/skel/.profile
/usr
/usr/bin
/usr/bin/bash
/usr/bin/bashbug
/usr/bin/clear_consoleBerkas di /etc pada keluaran di atas adalah conffiles, yaitu berkas konfigurasi yang diperlakukan khusus oleh dpkg dengan tidak menimpanya saat pembaruan. Sementara itu, dpkg -s nama-paket menampilkan metadata paket terpasang, mulai dari status, versi, ukuran terpasang, sampai daftar dependensinya. Daftar -L juga menjadi cara cepat menemukan lokasi biner dan dokumentasi tanpa menebak direktorinya.
# status dan metadata paket bash menurut basis data dpkg
dpkg -s bash | head -n 15Package: bash
Essential: yes
Status: install ok installed
Priority: required
Section: shells
Installed-Size: 7196
Maintainer: Matthias Klose <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Source: bash (5.2.37-2)
Version: 5.2.37-2+b8
Depends: base-files (>= 2.1.12), debianutils (>= 5.6-0.1)
Pre-Depends: libc6 (>= 2.38), libtinfo6 (>= 6)
Recommends: bash-completion
Suggests: bash-docBaris Status: install ok installed menyatakan pemasangan yang sehat, dan baris Version memperlihatkan versi yang benar-benar berjalan, yaitu 5.2.37-2+b8 pada sandbox ini. Nilai itu berbeda dengan versi kandidat yang ditampilkan oleh apt show, karena metadata dpkg menggambarkan keadaan disk saat ini, sedangkan apt menggambarkan katalog repositori. Selisih pada sandbox ini hanya terletak pada akhiran build biner, yang menandakan pembangunan ulang dari kode sumber yang sama. Membandingkan keduanya adalah cara cepat mengetahui apakah sebuah paket menunggu pembaruan.
Melacak pemilik berkas dengan dpkg -S#
Perintah dpkg -S berkas, singkatan dari search, menjawab pertanyaan kebalikan dari dpkg -L, yaitu paket mana yang membawa sebuah berkas. Argumennya dapat berupa jalur lengkap maupun pola, dan pencocokannya dilakukan terhadap jalur yang tercatat pada basis data. Pertanyaan semacam ini sering muncul ketika sebuah program perlu dikonfigurasi dan asalnya harus diketahui dahulu.
# paket pemilik berkas /usr/bin/sort
dpkg -S /usr/bin/sortcoreutils: /usr/bin/sortPencarian pada jalur /bin berakhir berbeda pada distribusi modern. Perintah berikut mencari berkas /bin/bash dan menghasilkan pesan error yang nyata.
# jalur /bin/bash yang diikuti ulang menuju /usr/bin/bash
dpkg -S /bin/bashdpkg-query: no path found matching pattern /bin/bashPesan itu tidak berarti bash tidak dibawa paket mana pun. Basis data dpkg hanya mencatat jalur kanonik, yaitu jalur setelah penggabungan /bin ke /usr/bin yang dilakukan distribusi modern. Berkas bash terdaftar sebagai /usr/bin/bash, sehingga pencarian berhasil pada jalur tersebut. Pola yang sama berlaku untuk /lib menuju /usr/lib, sehingga kebiasaan menggunakan jalur kanonik berlaku umum.
# jalur kanonik yang tercatat di basis data dpkg
dpkg -S /usr/bin/bashbash: /usr/bin/bashApabila jalur yang tersedia masih bentuk lama, readlink -f berkas mengonversinya ke bentuk kanonik sebelum diserahkan kepada dpkg -S.
Memasang dan mencabut .deb secara langsung#
Perintah dpkg -i berkas.deb memasang satu arsip lokal tanpa menyentuh repositori, dan bentuk ini berguna untuk paket yang diperoleh di luar katalog, misalnya arsip unduhan langsung dari pengembangnya atau pemulihan sistem tanpa jaringan. Bentuk itu tetap dipertahankan karena berjalan tanpa ketergantungan pada jaringan maupun konfigurasi repositori. Karena dpkg tidak menyelesaikan dependensi, pemasangan gagal di tengah proses dengan pesan dependensi tak terpenuhi bila pustaka yang dibutuhkan belum ada. Keadaan itu menyisakan paket yang belum terkonfigurasi. Cara yang dianjurkan saat ini adalah apt install ./berkas.deb, yang menggunakan arsip lokal yang sama sekaligus melengkapi dependensinya dari repositori.
Pencabutan menggunakan dpkg -r nama-paket, sedangkan dpkg -P mencabutnya beserta berkas konfigurasinya. Apabila operasi sebelumnya terputus di tengah proses, dpkg --configure -a menuntaskan konfigurasi yang tertunda. Perbedaan -r dan -P senada dengan apt remove dan apt purge pada lapisan di atas dpkg, dan kedua perintah dpkg itu menuntut hak root karena mengubah isi sistem.
# tidak-dijalankan
# memasang arsip lokal tanpa penyelesaian dependensi membutuhkan hak root
sudo dpkg -i catatan_1.0_amd64.deb
# mencabut paket beserta berkas konfigurasinya
sudo dpkg -P catatanKesalahan umum#
- Menggunakan
dpkg -iuntuk paket yang bergantung pada pustaka lain. Pemasangan berhenti dengan pesan dependensi tak terpenuhi. Gunakanapt install ./berkas.debagar dependensinya dilengkapi. - Menjalankan
dpkg -Sterhadap jalur/bindan menyimpulkan paketnya tidak ada. Basis data mencatat jalur kanonik di/usr/bin, sehingga jalur perlu dikonversi denganreadlink -fterlebih dahulu. - Menyunting
/var/lib/dpkg/statusdengan editor teks. Berkas itu adalah basis data milik dpkg, dan suntingan manual merusak konsistensinya tanpa alat yang memvalidasi. - Mencabut paket dengan
dpkg -rtanpa memeriksa paket lain yang bergantung padanya. dpkg menolak dengan pesan dependency problems, dan memaksakan penghapusannya membuat sistem tidak konsisten. - Mengira
dpkg -lmenampilkan katalog repositori. Daftar itu adalah isi basis data lokal, sedangkan katalog repositori dibaca melaluiapt listatauapt-cache.
Ringkasan#
- dpkg memasang dan mencabut arsip
.debserta memelihara basis data paket di/var/lib/dpkg, sedangkan apt bekerja di atasnya untuk dependensi dan repositori. dpkg -lmendaftar paket terpasang beserta kode statusnya,dpkg -Lmenampilkan berkas yang dibawa satu paket, dandpkg -smenampilkan metadata versi yang benar-benar terpasang.dpkg -Smelacak pemilik sebuah berkas, dengan catatan jalur yang dicari harus berbentuk kanonik seperti/usr/bin, bukan jalur lama di/bin.- Pemasangan arsip lokal sebaiknya melalui
apt install ./berkas.debagar dependensinya terpecahkan, sedangkandpkg -idigunakan dengan sadar atas keterbatasannya.
Referensi#
- dpkg(1) — Ubuntu manpages — Subperintah dpkg untuk pemasangan, pencabutan, dan konfigurasi paket.
- dpkg-query(1) — Ubuntu manpages — Kueri basis data dpkg untuk daftar paket, berkas, dan status.
- Pengelolaan Paket — Debian FAQ — Kedudukan dpkg di bawah alat tingkat atas pada keluarga Debian.