Repository yang tertata baru setengah cerita; setengah lainnya adalah rutinitas harian — memasang software, menaikkan versinya, dan melepas yang tidak terpakai tanpa meninggalkan sampah. Operasi tulis pada Chapter ini menuntut hak root, sehingga contohnya kita tampilkan sebagai panduan untuk sistem Debian atau Ubuntu milik sendiri, sementara query baca-database tetap kita jalankan sungguhan. Pintu masuknya satu: apt, dengan sub-perintah berbeda untuk tiap tahap siklus hidup package.
Memasang Package dengan apt install #
Satu baris sudo apt install tree memicu rangkaian panjang di balik layar. apt membaca indeks hasil apt update, lalu resolver menghitung package apa saja yang harus hadir agar tree bisa berjalan. Arsip .deb diunduh, dibongkar oleh dpkg, lalu script maintainer dijalankan. Karena seluruh rantai itu menulis ke sistem, lupa sudo menghasilkan pesan yang justru sangat informatif:
apt install tree 2>&1Output yang Dihasilkan:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Error: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
Error: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?Mari kita bedah pesan di atas bagian demi bagian:
- Baris
WARNING: antarmukaaptditujukan untuk manusia; untuk script,apt-getyang dijanjikan stabil — perbedaannya kita bahas di Chapter apt dan dpkg . - Baris
Errorpertama: menyebut file yang gagal dibuka —/var/lib/dpkg/lock-frontend— beserta errno13, yaituPermission denied. - Baris
Errorkedua: merangkum penyebabnya dan langsung menawarkan petunjukare you root?.
Pesan error apt memang dirancang untuk dibaca sampai habis — kebiasaan yang akan kita pakai lagi di Chapter Troubleshooting Packages. Dengan sudo, perintah yang sama berjalan mulus: apt menampilkan daftar package baru, package tambahan akibat dependensi, dan total ukuran unduhan sebelum menunggu persetujuan.
remove, purge, dan Sisa File Konfigurasi #
apt remove dan apt purge sama-sama melepas package, tetapi berbeda memperlakukan file konfigurasi. remove menghapus program, pustaka, dan dokumentasi namun menyisakan file konfigurasi di /etc (dpkg menyebutnya conffiles) agar setelan yang sudah disesuaikan tidak lenyap. purge menghapus semuanya — pilihan yang tepat saat ingin mulai benar-benar bersih. Pilihan yang tercatat di database bisa dibaca lewat dpkg --get-selections:
dpkg --get-selections bash rsync curl jqOutput yang Dihasilkan:
bash install
rsync install
curl install
jq installKolom pertama adalah nama package, kolom kedua adalah selection — keinginan yang dicatat dpkg terhadapnya. Setelah sudo apt remove rsync nilainya berubah deinstall (file program hilang, conffiles ditahan), dan setelah sudo apt purge rsync barisnya lenyap dari database. Package sisa remove itu tampak di dpkg -l dengan kode status rc — r berarti remove, c berarti tinggal file konfigurasi. Sebagai contoh tampilan, barisnya berbentuk seperti ini:
rc nginx-common 1.24.0-2 all small, powerful, scalable web server - common filesMenyapu semua sisa rc sekaligus biasanya dikerjakan sebaris:
dpkg -l | awk '/^rc/ {print $2}' | xargs -r sudo apt purge -yPipeline di atas bekerja tiga tahap: dpkg -l mendaftar seluruh database, awk menyaring baris rc dan mengambil nama package-nya, lalu xargs -r menyerahkannya ke apt purge — opsi -r menjaga perintah tidak jalan bila daftarnya kosong.
autoremove dan Package Otomatis #
apt mencatat alasan keberadaan setiap package: yang diminta eksplisit ditandai manual, yang ditarik dependensi ditandai auto. Ketika package penariknya dihapus, package bertanda auto kehilangan alasan untuk ada — apt menyebutnya orphan — dan sudo apt autoremove menawarkan membersihkannya sekaligus. Daftar package manual sendiri bisa dilihat dengan apt-mark showmanual; daftar itu kita pakai untuk menjawab pertanyaan “kenapa package ini ada?” pada Chapter Package Dependencies
. Penanda itu bisa diubah: sudo apt-mark manual nama melindungi package dari autoremove, sudo apt-mark auto nama melepasnya. Supaya conffiles ikut tersapu, jalankan sudo apt autoremove --purge.
Memasang Ulang, Versi Spesifik, dan Hold #
sudo apt install --reinstall tree memasang ulang seluruh file program dari versi yang sama — penyelamat klasik saat binary terhapus tanpa sengaja. Versi spesifik dipasang dengan sintaks nama=versi, misalnya sudo apt install tree=2.1.0-1; kandidatnya dilihat lewat apt-cache policy tree pada baris Installed dan Candidate. Package juga bisa dibekukan: sudo apt-mark hold tree membuat apt upgrade melewatkannya, dan sudo apt-mark unhold tree melepasnya. Daftar hold dapat diperiksa tanpa root:
apt-mark showhold
echo "tidak ada output berarti tidak ada package yang dibekukan"Output yang Dihasilkan:
tidak ada output berarti tidak ada package yang dibekukanPada sistem kita daftar itu memang kosong. Sub-perintah apt-mark dirangkum di apt-mark(8)
; daftar lengkap sub-perintah apt ada di apt(8)
.
Instalasi di Luar Repository #
File .deb dari luar repository dipasang dengan sudo dpkg -i nama.deb — tetapi dpkg tidak menyelesaikan dependensi, dan transaksi berhenti bila ada yang kurang. Cara modernnya sudo apt install ./nama.deb: resolver apt tetap mengambil dependensi dari repository. Pola wildcard juga diterima — sudo apt install 'nginx-*' memasang semua package yang namanya berawalan nginx-. Tanda kutip penting: tanpa kutip, shell yang mengembangkan pola itu lebih dulu terhadap file di direktori kerja.
Satu hal mungkin sudah terasa: apt install tidak pernah benar-benar memasang satu package saja — di belakangnya hadir pustaka dan tool tambahan yang ikut terpasang. Bagaimana apt tahu apa saja yang dibutuhkan? Itu urusan graf dependensi — materi Chapter Package Dependencies
.