Chapter Package Dependencies
ditutup dengan pengingat not upgraded: sejumlah package tertinggal dari versi terbarunya. Menunda pembaruan bukan strategi aman, karena tambalan keamanan umumnya hanya hadir lewat versi baru. Chapter ini menyusun strategi pembaruan yang disiplin: memisahkan apt update dari apt upgrade, memilih upgrade atau full-upgrade secara sadar, menyerahkan tambalan keamanan pada unattended-upgrades, dan melakukan lompatan antar rilis dengan terukur. Perintah pengubah sistem butuh root, jadi kita tampilkan sebagai panduan — simulasi dan query bisa dijalankan langsung.
Ritual Dua Langkah: apt update, Lalu apt upgrade #
apt update sering disalahpahami: perintah ini tidak memperbarui satu pun software, hanya indeks — daftar versi yang ditawarkan setiap repository, disimpan di /var/lib/apt/lists. Baru setelah indeks segar, apt upgrade bisa menghitung package terpasang mana yang punya versi lebih baru, lalu menyerahkan pemasangan kepada dpkg. Ritualnya selalu dua langkah:
sudo apt update
sudo apt upgradeapt update singkat dan aman dijalankan kapan saja. Sebagai contoh tampilan hasilnya pada sistem yang mutakhir:
Hit:1 http://deb.debian.org/debian trixie InRelease
Hit:2 http://deb.debian.org/debian trixie-updates InRelease
Hit:3 http://deb.debian.org/debian-security trixie-security InRelease
Reading package lists... Done
All packages are up to date.Baris Hit berarti indeks lokal sudah sama dengan server; Get muncul bila ada perubahan. Bila indeks baru memuat versi lebih baru, apt menutup dengan laporan berapa package can be upgraded dan menyarankan apt list --upgradable.
upgrade vs full-upgrade: Hak Melepas Package #
Kedua perintah sama-sama menaikkan versi package terpasang, tetapi haknya berbeda. apt upgrade tidak pernah melepas package; pembaruan yang mensyaratkan perubahan drastis membuat package-nya ditahan (kept back). apt full-upgrade — alias lamanya dist-upgrade — boleh melepas package penghalang supaya transaksi tetap berjalan. Karena itu upgrade adalah pilihan rutin, sedangkan full-upgrade dipakai untuk pembaruan besar dan lompatan rilis; daftar Remv-nya wajib dibaca sebelum menyetujui. Sebelum mengeksekusi, kita bisa bersimulasi tanpa root:
apt-get -s upgrade 2>/dev/null | grep -E '^[0-9]+ upgraded'
echo ---
apt-get -s full-upgrade 2>/dev/null | grep -E '^[0-9]+ upgraded'Output yang Dihasilkan:
7 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
---
7 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.Bedah blok di atas baris per baris:
- Baris 1: opsi
-s(simulate) menjalankan perhitungan resolver tanpa menyentuh sistem — karena itu tidak butuh root.grepmenyaring hanya baris ringkasan, karena barisInstdanConfmemuat nomor versi yang berubah antar rilis. - Baris 2: pemisah visual antara dua simulasi.
- Baris 3: simulasi
full-upgrade;apt-getdipakai karena antarmukanya stabil untuk script — bedanya denganaptdi apt(8) . - Kolom
0 to remove: angka inilah pembedanya. Pada sistem kita keduanya sepakat tidak melepas apa pun; pada pembaruan besar,full-upgradebisa menampilkan angka di sana.
Angka 7 pasti berbeda di tiap sistem — yang dilatih adalah kebiasaan membaca ringkasan ini sebelum menjalankan versi sungguhannya.
Memeriksa Hasil Setelah Upgrade #
Verifikasi setelah pembaruan cukup bertanya kepada database dpkg. Format -f milik dpkg-query -W memungkinkan kita memilih field yang dicetak, termasuk status ringkas tanpa nomor versi:
dpkg-query -W -f='${binary:Package}: ${db:Status-Status}\n' bash coreutils gcc makeOutput yang Dihasilkan:
bash: installed
coreutils: installed
gcc: installed
make: installedCara membaca format tersebut:
${binary:Package}: nama package — stabil, tidak seperti nomor versi yang berubah di setiap pembaruan.${db:Status-Status}: potongan ketiga fieldStatus;installedberarti file terpasang dan script konfigurasinya sukses.- Kutip tunggal: mencegah shell mengembangkan
${...}lebih dulu — perilaku yang kita kenal dari Chapter Variables dan Quoting .
gcc dan make dalam daftar itu adalah toolchain kompilasi, tokoh utama Chapter berikutnya. Bila sebuah package penting tidak lagi berstatus installed, saatnya melompat ke Chapter Troubleshooting Packages
. Pemeriksaan dependensi dari pihak apt adalah sudo apt-get check; pada sistem sehat output-nya kosong. Rincian format query ada di dpkg-query(1)
.
Tambalan Keamanan Otomatis: unattended-upgrades #
Server produksi tidak boleh menunggu admin login untuk menambal celah. Paket unattended-upgrades menjawabnya: timer harian menjalankan apt update lalu memasang pembaruan security secara otomatis — cakupan default sengaja hanya keamanan agar risiko perubahan tak terduga kecil. Status aktifnya terbaca dari file konfigurasi kecil:
test -f /etc/apt/apt.conf.d/20auto-upgrades && cat /etc/apt/apt.conf.d/20auto-upgrades || echo "file belum ada: pembaruan otomatis belum diaktifkan"Output yang Dihasilkan:
file belum ada: pembaruan otomatis belum diaktifkanPada sistem kita file itu belum ada — pembaruan otomatis belum diaktifkan. Pada sistem yang sudah mengaktifkannya, isinya dua baris:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";Nilai "1" berarti sekali per hari, "0" berarti mati. Cara mengaktifkannya: sudo apt install unattended-upgrades lalu sudo dpkg-reconfigure -plow unattended-upgrades; lognya di /var/log/unattended-upgrades/. Panduan resminya, termasuk melebarkan cakupan lewat origins pattern, ada di wiki Debian
.
Lompatan Antar Rilis dan Keluarga Lain #
Distro-upgrade memindahkan sistem ke rilis lain — trixie ke penerusnya di Debian, antar versi di Ubuntu dan Fedora. Prosedurnya di Debian adalah rangkaian berurutan:
- Baca catatan rilis tujuan di debian.org/releases — perubahan besar dan jebakannya tercantum di sana.
- Cadangkan data dan konfigurasi penting; pastikan pembaruan rutin versi saat ini bersih.
- Ganti nama suite pada definisi repository — anatomi filenya dibahas di Chapter Repository Management .
- Jalankan
sudo apt update, lalusudo apt full-upgrade, kemudian reboot.
full-upgrade dipakai karena lompatan rilis mensyaratkan hak melepas package penghalang. Ubuntu menyederhanakannya menjadi sudo do-release-upgrade, dengan jalur LTS ke LTS sebagai rute yang disarankan. Ritual di keluarga lain sejenis:
| Keluarga | Pembaruan rutin | Lompatan rilis |
|---|---|---|
| Debian/Ubuntu | sudo apt update && sudo apt upgrade | ganti suite + full-upgrade, atau do-release-upgrade |
| Fedora/RHEL | sudo dnf upgrade --refresh | sudo dnf system-upgrade |
| Arch | sudo pacman -Syu | tidak ada (rolling release) |
| openSUSE | sudo zypper refresh && sudo zypper update | sudo zypper dup |
Kernel Baru Menunggu Reboot #
Satu pembaruan berperilaku khusus: kernel. Kernel yang berjalan dimuat ke memori saat boot, dan package kernel baru memasang dirinya di bawah nama versinya sendiri — file vmlinuz dan modul di /lib/modules/<versi> — tanpa menyentuh kernel lama. Akibatnya apt melaporkan sukses, tetapi kernel yang berjalan belum berganti; peralihannya hanya lewat reboot. Layanan yang memakai pustaka lama juga perlu direstart. Di Ubuntu kebutuhan ini ditandai file /var/run/reboot-required, dan needrestart membantu menampilkan service yang menunggu.
Pembaruan menjaga sistem sehat selama software yang kita butuhkan ada di repository. Kadang kebutuhan jatuh di luar itu — versi lebih baru dari yang dikemas, opsi kompilasi khusus, atau software yang belum dikemas siapa pun. Jalurnya adalah membangun sendiri dari source code, materi Chapter Compiling from Source.