apt

Manajemen paket dengan apt: update versus upgrade, install, remove, dan search.

Daftar isi

Perintah apt adalah antarmuka utama untuk mengelola paket pada keluarga Debian dan Ubuntu, mencakup penyegaran daftar paket, pemasangan dan pencabutan aplikasi, serta pencarian paket yang belum dikenal. Topik ini membahas perbedaan apt update dan apt upgrade, siklus install dan remove, kemudian penelusuran katalog dengan search dan show. Setelah menyelesaikannya, alur kerja paket harian dapat dijalankan sambil memahami apa yang sebenarnya terjadi pada setiap subperintahnya.

Peran apt di atas dpkg#

Alat apt bekerja pada lapisan atas manajemen paket Debian. Alat tersebut membaca indeks paket dari repositori, menyelesaikan dependensi (dependency), mengunduh arsip .deb yang diperlukan, lalu menyerahkan pemasangan teknisnya kepada dpkg. Alat dpkg sendiri hanya menangani satu berkas .deb pada satu waktu dan tidak mengenal repositori, sehingga penelusuran katalog dan penyelesaian dependensi merupakan pekerjaan yang ditambahkan oleh apt. Pembagian kedudukan ini dibahas lebih rinci pada topik dpkg, sedangkan topik ini berfokus pada lapisan apt.

Kata apt pada Ubuntu 16.04 ke atas menunjuk antarmuka yang dirancang untuk terminal interaktif, dengan keluaran berwarna dan indikator kemajuan unduhan. Padanannya untuk skrip adalah apt-get, yang antarmukanya dijamin stabil antarversi. Apabila apt digunakan di dalam skrip, perintah itu mencetak peringatan bahwa antarmukanya tidak stabil untuk otomatisasi, dan itulah alasan dokumentasi menyarankan apt-get untuk pekerjaan semacam itu. Versi apt pada sandbox ini dapat dilihat pada keluaran berikut.

bash
# versi apt yang terpasang pada sandbox ini
apt --version
text Keluaran
apt 3.0.3 (amd64)

apt update: menyegarkan indeks paket#

Perintah apt update mengunduh salinan terbaru indeks paket dari setiap repositori yang terdaftar. Indeks (index) adalah katalog metadata yang memuat nama, versi, dependensi, dan alamat unduhan setiap paket yang tersedia, tanpa memuat isi paket itu sendiri. Seluruh informasi tentang versi mana yang tersedia bersumber dari indeks inilah, sehingga kualitas keputusan apt sangat ditentukan oleh kesegaran salinan indeks.

Proses tersebut tidak menyentuh satu pun paket terpasang, sehingga perintah ini aman dijalankan kapan saja. Karena menulis berkas baru ke /var/lib/apt/lists, perintah ini memerlukan hak root. Keluarannya berupa deretan baris per repositori, dengan label Hit untuk indeks yang tidak berubah dan Get untuk indeks yang benar-benar diunduh. Perintah ini juga menjadi langkah yang wajib didahulukan sebelum memasang paket pada sistem yang jarang diperbarui, karena kandidat versi yang dibaca apt berasal dari salinan indeks terakhir, bukan dari repositori secara langsung.

bash
# tidak-dijalankan
# apt update menulis indeks baru ke /var/lib/apt/lists sehingga memerlukan hak root
sudo apt update

apt upgrade: memasang versi terbaru#

Perintah apt upgrade memasang versi terbaru untuk paket-paket yang sudah terpasang, menggunakan kandidat versi yang tercatat pada indeks. Proses ini satu tingkat lebih dalam daripada update karena benar-benar mengunduh dan mengganti program pada sistem. Aturan main upgrade konservatif, yaitu perintah ini tidak pernah menghapus paket terpasang dan tidak memasang paket baru, sehingga paket yang pembaruannya menuntut dependensi tambahan ditahan sampai diurus secara terpisah. Aturan konservatif itu menjaga sistem tetap utuh, karena perubahan yang menuntut paket baru atau penghapusan paket lama berdampak lebih luas dan layak diputuskan secara sadar. Perintah apt full-upgrade melonggarkan aturan tersebut dan mengizinkan penghapusan paket bila memang diperlukan, sehingga sebaiknya dijalankan setelah daftar perubahannya dibaca.

Pada sandbox ini, status pemasangan bash memperlihatkan keadaan yang menunggu upgrade. Paket bash terpasang pada versi 5.2.37-2+b8, sedangkan repositori menawarkan kandidat 5.2.37-2+b10, dan apt mencatat selisih itu secara eksplisit pada daftar paket terpasangnya. Selisih semacam ini baru hilang setelah apt upgrade dijalankan.

bash
# paket bash tercatat dapat ditingkatkan pada sandbox ini
apt list --installed 2>/dev/null | grep -E '^bash/'
text Keluaran
bash/now 5.2.37-2+b8 amd64 [installed,upgradable to: 5.2.37-2+b10]
bash
# tidak-dijalankan
# apt upgrade mengganti setiap paket dengan kandidat versinya
sudo apt upgrade

Perbedaan update dan upgrade#

Kedua perintah ini sering tertukar karena namanya berdekatan, padahal objek kerjanya berbeda sama sekali. update bekerja pada katalog, sedangkan upgrade bekerja pada program yang terpasang. Keduanya juga berbeda durasi, karena mengunduh metadata jauh lebih ringan daripada mengunduh dan mengonfigurasi arsip program.

Aspekapt updateapt upgrade
Objek yang diubahindeks paket di /var/lib/apt/listspaket-paket yang sudah terpasang
Data yang diunduhmetadata katalogarsip .deb versi terbaru
Durasi umumdetik hingga belasan detikmenit, tergantung jumlah pembaruan
Risikohampir tidak adaprogram berjalan ikut diganti, sehingga daftar perubahan perlu dibaca
Ketergantunganboleh berdiri sendirisebaiknya didahului apt update

Urutan yang benar adalah update terlebih dahulu, lalu baca ringkasan yang ditampilkan, baru upgrade dijalankan. Apabila urutan itu dibalik, upgrade bekerja dengan kandidat versi lama dan hasilnya bisa tidak lengkap. Praktik yang dianjurkan adalah memperlakukan pasangan ini sebagai satu rangkaian, bukan dua perintah yang saling menggantikan.

Memasang dan mencabut paket#

Perintah apt install memasang satu atau beberapa paket sekaligus, lengkap dengan dependensinya yang dipecahkan secara otomatis dari indeks. Sebelum memutuskan memasang, kandidat versi suatu paket dapat diperiksa terlebih dahulu dengan apt-cache policy, yang juga memperlihatkan apakah paket tersebut sudah terpasang atau belum. Pemeriksaan semacam ini berjalan tanpa hak root karena hanya membaca indeks.

bash
# kandidat versi htop menurut indeks yang tersimpan
apt-cache policy htop
text Keluaran
htop:
  Installed: (none)
  Candidate: 3.4.1-5
  Version table:
     3.4.1-5 500
        500 http://deb.debian.org/debian trixie/main amd64 Packages

Keluaran di atas menyatakan bahwa htop belum terpasang, sedangkan kandidatnya adalah 3.4.1-5 dari repositori trixie. Bila keputusan pemasangan diambil, apt mengunduh arsip .deb yang dibutuhkan, lalu menyerahkan pemasangan teknisnya kepada dpkg. Pencabutannya menggunakan apt remove, yang menghapus program tetapi membiarkan berkas konfigurasinya tetap ada agar pemasangan ulang berikutnya menemukan pengaturan lama. Untuk menghapus sampai bersih, apt purge mencabut paket beserta konfigurasinya, dan apt autoremove membereskan dependensi yang tidak lagi digunakan paket mana pun.

bash
# tidak-dijalankan
# memasang htop beserta seluruh dependensinya
sudo apt install htop
# mencabut htop dengan berkas konfigurasinya dibiarkan tetap ada
sudo apt remove htop

Mencari dan memeriksa paket#

Perintah apt-cache search menelusuri nama dan deskripsi setiap paket pada indeks, sehingga paket dapat ditemukan meskipun namanya tidak dihafal. Keluarannya berupa pasangan nama dan deskripsi singkat per baris, dan pencariannya tidak memerlukan hak root. Pencarian ini bekerja sepenuhnya dari indeks lokal, sehingga hasilnya tetap tersedia ketika koneksi sedang tidak ada. Kata kunci yang lebih spesifik mempersempit hasil, sedangkan kata kunci yang umum menghasilkan daftar panjang yang lazim dipotong dengan head.

bash
# mencari paket dari kata kunci deskripsinya
apt-cache search image editor | head -n 6
text Keluaran
showfoto - image viewer/editor for KDE
emacs-common - GNU Emacs editor's shared, architecture independent infrastructure
jupyterlab - Node.js modules for JupyterLab
kimagemapeditor - HTML image map editor
kolourpaint - simple image editor and drawing application
kquickimageeditor-dev - Image editing components - devel files

Untuk memeriksa satu paket secara rinci, apt show menampilkan metadata kandidat versinya, seperti versi, ukuran terpasang, daftar dependensi, dan alamat situs resminya. Perintah berikut menyembunyikan pesan peringatan antarmuka yang tidak stabil dengan mengalihkan stderr ke /dev/null, lalu membatasi keluaran pada dua belas baris teratas.

bash
# metadata kandidat versi bash dari indeks repositori
apt show bash 2>/dev/null | head -n 12
text Keluaran
Package: bash
Version: 5.2.37-2+b10
Priority: required
Essential: yes
Section: shells
Source: bash (5.2.37-2)
Maintainer: Matthias Klose <[email protected]>
Installed-Size: 7369 kB
Pre-Depends: libc6 (>= 2.38), libtinfo6 (>= 6)
Depends: base-files (>= 2.1.12), debianutils (>= 5.6-0.1)
Recommends: bash-completion
Suggests: bash-doc

Perlu dicatat bahwa apt show bash menampilkan versi kandidat 5.2.37-2+b10, sedangkan versi yang benar-benar terpasang pada sandbox ini adalah 5.2.37-2+b8. Metadata paket terpasang dibaca dari basis data dpkg dengan dpkg -s, sehingga kedua perintah itu saling melengkapi dan tidak saling menggantikan.

Kesalahan umum#

  • Menjalankan apt install pada sistem yang sudah lama tidak diperbarui. Kandidat versinya basi dan paket baru bisa gagal ditemukan dengan pesan Unable to locate package. Segarkan indeks dengan apt update terlebih dahulu.
  • Menganggap apt upgrade akan memasang atau menghapus paket. Paket yang pembaruannya menuntut dependensi baru justru ditahan. Gunakan apt full-upgrade setelah membaca daftar perubahannya.
  • Menggunakan apt di dalam skrip. Antarmukanya tidak stabil untuk otomatisasi, dan apt mencetak peringatan pada setiap penggunaannya. Ganti dengan apt-get untuk pekerjaan semacam itu.
  • Mengira apt remove menghapus berkas konfigurasi. Paket yang sudah dicabut masih menyisakan konfigurasi dengan status rc pada dpkg -l, dan apt purge yang menghapusnya sampai bersih.
  • Mengetik nama paket dengan huruf besar yang keliru. Nama paket bersifat peka huruf, sehingga apt install Bash berakhir dengan pesan tidak ditemukan, sedangkan bash ditemukan.

Ringkasan#

  • apt adalah antarmuka tingkat atas yang menyelesaikan dependensi dan mengunduh paket dari repositori, sedangkan pemasangan teknisnya dikerjakan dpkg.
  • apt update menyegarkan indeks tanpa menyentuh paket terpasang, sedangkan apt upgrade memasang kandidat versi terbaru untuk paket yang sudah ada dan tidak pernah menghapus paket.
  • apt install dan apt remove digunakan untuk mengelola siklus hidup paket. Perintah purge menghapus paket beserta berkas konfigurasinya, sedangkan autoremove menghapus dependensi yang tidak lagi diperlukan oleh paket lain.
  • apt-cache search dan apt show menelusuri katalog tanpa hak root, dan keduanya membaca indeks, bukan basis data paket terpasang.

Referensi#