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:

bash
sudo apt update
sudo apt upgrade

apt update singkat dan aman dijalankan kapan saja. Sebagai contoh tampilan hasilnya pada sistem yang mutakhir:

text
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:

bash
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:

text
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:

  1. Baris 1: opsi -s (simulate) menjalankan perhitungan resolver tanpa menyentuh sistem — karena itu tidak butuh root. grep menyaring hanya baris ringkasan, karena baris Inst dan Conf memuat nomor versi yang berubah antar rilis.
  2. Baris 2: pemisah visual antara dua simulasi.
  3. Baris 3: simulasi full-upgrade; apt-get dipakai karena antarmukanya stabil untuk script — bedanya dengan apt di apt(8) .
  4. Kolom 0 to remove: angka inilah pembedanya. Pada sistem kita keduanya sepakat tidak melepas apa pun; pada pembaruan besar, full-upgrade bisa 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:

bash
dpkg-query -W -f='${binary:Package}: ${db:Status-Status}\n' bash coreutils gcc make

Output yang Dihasilkan:

text
bash: installed
coreutils: installed
gcc: installed
make: installed

Cara membaca format tersebut:

  1. ${binary:Package}: nama package — stabil, tidak seperti nomor versi yang berubah di setiap pembaruan.
  2. ${db:Status-Status}: potongan ketiga field Status; installed berarti file terpasang dan script konfigurasinya sukses.
  3. 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:

bash
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:

text
file belum ada: pembaruan otomatis belum diaktifkan

Pada sistem kita file itu belum ada — pembaruan otomatis belum diaktifkan. Pada sistem yang sudah mengaktifkannya, isinya dua baris:

ini
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:

  1. Baca catatan rilis tujuan di debian.org/releases — perubahan besar dan jebakannya tercantum di sana.
  2. Cadangkan data dan konfigurasi penting; pastikan pembaruan rutin versi saat ini bersih.
  3. Ganti nama suite pada definisi repository — anatomi filenya dibahas di Chapter Repository Management .
  4. Jalankan sudo apt update, lalu sudo 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:

KeluargaPembaruan rutinLompatan rilis
Debian/Ubuntusudo apt update && sudo apt upgradeganti suite + full-upgrade, atau do-release-upgrade
Fedora/RHELsudo dnf upgrade --refreshsudo dnf system-upgrade
Archsudo pacman -Syutidak ada (rolling release)
openSUSEsudo zypper refresh && sudo zypper updatesudo 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.