Memperbaiki Partial Upgrade Error di Arch Linux

Ketika aplikasi mendadak kehilangan library, pacman dipenuhi konflik versi, atau sistem berhenti saat boot, penyebabnya sering bukan paket yang “nakal”, melainkan kondisi sistem yang diperbarui setengah jalan.

Arch Linux menggunakan model rolling release. Tidak ada lompatan versi besar seperti “edisi tahun ini” menuju “edisi tahun depan”. Paket bergerak terus, dan setiap pembaruan dirancang agar seluruh komponen sistem mengikuti kumpulan versi yang sama.

Masalah muncul ketika database repositori sudah diperbarui, tetapi paket yang terpasang tidak ikut diperbarui secara menyeluruh. Sistem akhirnya berisi campuran paket lama dan baru. Sebuah aplikasi dapat meminta versi library terbaru, sementara library yang tersedia masih versi lama. Bisa juga kebalikannya: library sudah baru, tetapi aplikasi yang memakainya masih tertinggal.

Kondisi tersebut dikenal sebagai partial upgrade. Arch Linux tidak mendukung pola pembaruan sebagian karena hubungan antar-paketnya sangat rapat. Kabar baiknya, selama database pacman dan media penyimpanan masih sehat, sebagian besar kasus dapat dipulihkan tanpa memasang ulang sistem.

Ilustrasi terminal Arch Linux untuk memperbaiki partial upgrade dan konflik paket pacman
Partial upgrade terjadi saat database repositori dan paket yang terpasang tidak lagi berada pada kumpulan versi yang konsisten.

Mengenali Masalah Sebelum Menjalankan Perintah

Gejalanya tidak selalu berupa pesan yang secara terang-terangan menyebut partial upgrade. Masalah lebih sering muncul sebagai efek samping: aplikasi menolak dibuka, desktop tidak berhasil dimuat, atau pacman mengeluhkan dependensi yang seharusnya tersedia.

  • Aplikasi berhenti dengan pesan error while loading shared libraries atau library not found.
  • Pacman menemukan dependensi dengan versi yang tidak cocok.
  • Pembaruan gagal karena paket A membutuhkan library baru, sedangkan paket B masih mempertahankan versi lama.
  • Lingkungan desktop, display manager, atau layanan sistem berhenti setelah pembaruan terputus.
  • Kernel telah diperbarui, tetapi initramfs atau modul yang diperlukan belum terbentuk dengan benar.
  • Sistem gagal boot setelah hanya sebagian transaksi pembaruan selesai.
Jangan langsung menghapus paket yang disebut dalam pesan error

Nama paket yang tampil belum tentu menjadi sumber masalah. Ia bisa sekadar komponen pertama yang menyadari bahwa versi library di dalam sistem sudah tidak selaras.

Penyebab Partial Upgrade yang Paling Sering Terjadi

Menjalankan pacman -Sy tanpa melanjutkan upgrade

Perintah pacman -Sy hanya menyegarkan database repositori. Paket di sistem tidak ikut diperbarui. Sesudah itu, pemasangan satu paket dengan pacman -S nama-paket dapat menarik paket baru yang dibangun untuk ekosistem terbaru, lalu memasukkannya ke sistem yang sebagian besar masih lama.

Jika baru saja menjalankan pacman -Sy dan belum memasang apa pun, lanjutkan dengan full system upgrade sebelum melakukan transaksi paket lainnya:

sudo pacman -Syu

Transaksi pembaruan terputus

Koneksi internet yang putus biasanya tidak langsung merusak sistem karena pacman mengunduh paket sebelum memasangnya. Risiko lebih besar muncul ketika komputer mati, ruang penyimpanan habis, proses dihentikan paksa, atau terjadi kegagalan ketika transaksi sudah memasuki tahap pemasangan.

Periksa ruang kosong sebelum mencoba lagi:

df -h /
df -h /var/cache/pacman/pkg

Mencampur repositori stable dan testing

Repositori testing bukan sekadar tempat mengambil satu paket yang lebih baru. Paket di dalamnya diuji sebagai satu rangkaian. Mengaktifkan core-testing tetapi tetap mengambil komponen terkait dari cabang stable dapat menghasilkan susunan versi yang tidak sesuai.

Hal serupa dapat terjadi pada repositori pihak ketiga yang terlambat membangun ulang paket setelah library resmi mengalami perubahan ABI atau soname.

Menahan paket terlalu lama

Pengaturan IgnorePkg atau IgnoreGroup dapat membantu untuk kebutuhan sementara, tetapi pemakaian jangka panjang membuat paket tertentu tertinggal dari dependensinya. Menahan kernel, driver grafis, Mesa, glibc, systemd, atau komponen desktop tanpa memahami hubungan versinya dapat berakhir menjadi partial upgrade.

Paket AUR belum dibangun ulang

Paket AUR tidak dikelola oleh repositori resmi. Setelah library utama diperbarui, paket AUR yang ditautkan ke versi library lama mungkin harus dibangun ulang. Dalam kasus ini, paket resmi sudah konsisten, tetapi aplikasi dari AUR masih mencari berkas library yang sudah tidak tersedia.

pacman -Qm

Perintah tersebut menampilkan paket asing, yaitu paket yang tidak ditemukan dalam database repositori aktif. Daftar itu perlu ditinjau setelah pembaruan sistem selesai.

Jalur Pemulihan untuk Sistem yang Masih Bisa Boot

Jika terminal masih dapat digunakan dan pacman masih berjalan, mulailah dari langkah paling sederhana. Jangan menghapus database, jangan membersihkan seluruh cache, dan jangan memakai opsi pemaksa sebelum mengetahui masalah sebenarnya.

  1. Pastikan koneksi internet dan ruang penyimpanan mencukupi.
  2. Periksa konfigurasi repositori.
  3. Jalankan full system upgrade.
  4. Periksa konsistensi database dan berkas paket.
  5. Pasang ulang hanya paket yang terbukti rusak.
  6. Bangun ulang initramfs jika pembaruan menyentuh kernel atau proses boot.

Langkah Pemulihan Aman dengan Pacman

Periksa repositori yang sedang aktif

Tampilkan konfigurasi pacman tanpa komentar dan baris kosong:

grep -Ev '^[[:space:]]*(#|$)' /etc/pacman.conf

Perhatikan nama repositori, urutannya, serta baris Include. Jika tidak sengaja mencampur testing dan stable, tentukan cabang yang ingin dipakai lalu rapikan konfigurasi sebelum melanjutkan.

Pengguna cabang stable pada umumnya cukup memakai repositori resmi stable. Pengguna testing harus mengikuti susunan repositori testing secara konsisten, bukan mengambil satu bagian secara acak.

Jalankan full system upgrade

Perintah standar untuk menyegarkan database dan memperbarui seluruh paket adalah:

sudo pacman -Syu

Opsi -S menjalankan operasi sinkronisasi, -y mengambil database repositori terbaru, dan -u memperbarui semua paket yang tertinggal. Inilah kombinasi yang seharusnya digunakan untuk pembaruan rutin.

Jika database lokal diduga rusak, mirror baru saja diganti, atau pacman terus memakai database yang tidak sesuai, sinkronisasi dapat dipaksa satu kali dengan:

sudo pacman -Syyu
Dua huruf y bukan pilihan wajib setiap hari

-Syyu mengunduh ulang seluruh database meskipun salinan lokal dianggap masih baru. Untuk pembaruan normal, -Syu sudah cukup dan lebih hemat lalu lintas mirror.

Ketika kembali dari testing menuju stable

Sesudah repositori testing dinonaktifkan dengan benar, sebagian paket lokal mungkin memiliki versi lebih tinggi daripada paket stable. Dalam situasi khusus ini, pacman perlu diizinkan melakukan downgrade:

sudo pacman -Syyuu

Dua huruf u mengizinkan pacman memilih versi repositori walaupun versinya lebih rendah daripada paket lokal. Baca daftar transaksi dengan teliti sebelum menyetujuinya. Perintah ini bukan pengganti -Syu untuk pemakaian rutin.

Periksa konsistensi database paket

Setelah transaksi selesai, periksa apakah database lokal masih memiliki dependensi hilang, konflik, atau kepemilikan berkas yang tidak konsisten:

sudo pacman -Dk

Pemeriksaan yang melibatkan ketersediaan dependensi pada database sinkronisasi dapat dilakukan dengan:

sudo pacman -Dkk

Periksa berkas milik paket

Pacman juga dapat memeriksa apakah berkas yang tercatat sebagai milik paket masih tersedia:

pacman -Qk

Untuk pemeriksaan lebih rinci terhadap ukuran, izin, dan metadata paket yang menyediakan berkas mtree, gunakan:

pacman -Qkk

Beberapa perubahan berkas konfigurasi memang disengaja, sehingga keluaran -Qkk perlu dibaca berdasarkan konteks. Fokuslah pada berkas program atau library yang benar-benar hilang.

Pasang ulang paket yang rusak

Sesudah full upgrade berhasil dan nama paket yang bermasalah sudah diketahui, pasang ulang paket tersebut dari repositori yang kini telah sinkron:

sudo pacman -S nama-paket

Ganti nama-paket dengan paket sebenarnya. Jangan memakai --overwrite '*' secara membabi buta. Opsi overwrite dapat menutupi konflik kepemilikan berkas tanpa memperbaiki akar masalah.

Memulihkan Sistem yang Gagal Boot

Masuk melalui Arch Linux live USB

Jika sistem tidak mencapai terminal, boot menggunakan media instalasi Arch Linux. Hubungkan jaringan, identifikasi partisi, lalu mount partisi root ke /mnt.

lsblk -f
mount /dev/nama-partisi-root /mnt

Jika direktori boot atau EFI berada pada partisi terpisah, mount partisi tersebut sesuai struktur sistem. Lokasinya dapat berupa /mnt/boot atau /mnt/boot/efi.

mount /dev/nama-partisi-efi /mnt/boot

Contoh di atas hanyalah pola. Jangan menyalin nama perangkat secara mentah karena setiap komputer memiliki susunan partisi berbeda.

Masuk ke sistem terpasang

arch-chroot /mnt

Sesudah masuk, periksa konfigurasi repositori lalu jalankan full system upgrade:

pacman -Syu

Pasang ulang kernel yang digunakan

Periksa paket kernel resmi yang terpasang:

pacman -Q | grep -E '^linux(|-lts|-zen|-hardened) '

Pasang ulang kernel yang benar. Contoh berikut berlaku untuk kernel standar:

pacman -S linux

Pengguna linux-lts, linux-zen, atau linux-hardened harus memakai nama paket kernel yang sesuai dengan sistemnya.

Bangun ulang seluruh initramfs

mkinitcpio -P

Opsi -P memproses seluruh preset yang tersedia di /etc/mkinitcpio.d/. Langkah ini relevan ketika pembaruan kernel, modul penyimpanan, enkripsi, atau konfigurasi initramfs sempat terputus.

Setelah semua perintah selesai tanpa error:

exit
umount -R /mnt
reboot

Ketika arch-chroot tidak dapat dijalankan

Jika library inti pada sistem target rusak sampai arch-chroot tidak bisa memulai shell, pacman dari lingkungan live dapat diarahkan ke sistem yang telah di-mount:

pacman --sysroot /mnt -Syu

Opsi --sysroot dirancang untuk mengoperasikan sistem pada root alternatif. Periksa kembali mount partisi dan konfigurasi jaringan sebelum menjalankannya.

Perintah yang Sebaiknya Tidak Dipakai sebagai Obat Instan

Mengubah semua orphan menjadi dependency

Perintah berikut kadang beredar sebagai cara “membangun ulang database”:

sudo pacman -D --asdeps $(pacman -Qdtq)

Perintah tersebut tidak membangun ulang database dan tidak memperbaiki versi paket. Opsi --asdeps hanya mengubah alasan pemasangan paket menjadi “dipasang sebagai dependensi”. Paket yang ditampilkan oleh pacman -Qdtq pada umumnya memang sudah berstatus dependency yang tidak lagi diperlukan.

Membersihkan orphan boleh dilakukan setelah sistem kembali konsisten, tetapi itu merupakan pekerjaan pemeliharaan terpisah:

orphans=$(pacman -Qdtq)
if [ -n "$orphans" ]; then
 sudo pacman -Rns $orphans
fi

Menghapus seluruh cache dengan pacman -Scc

pacman -Scc menghapus seluruh paket dari cache, termasuk versi lama yang mungkin berguna untuk pemulihan. Membersihkan cache tidak menyelaraskan versi paket dan tidak memperbaiki dependensi.

Jangan membersihkan cache ketika sistem masih bermasalah. Setelah sistem sehat, pengguna paket pacman-contrib dapat mempertahankan beberapa versi terbaru dengan:

sudo paccache -r

Melewati pemeriksaan dependensi

Opsi seperti -d, -dd, atau penghapusan rekursif agresif dapat membuat pacman berhenti mengingatkan adanya hubungan paket yang rusak. Pesan error mungkin hilang, tetapi sistem justru menjadi lebih sulit dipulihkan.

Hindari jalan pintas yang merusak catatan pacman

Jangan menghapus isi /var/lib/pacman/local, jangan memakai --dbonly, dan jangan memaksa overwrite massal kecuali kamu benar-benar memahami perubahan yang sedang dilakukan.

Diagnosis Berdasarkan Pesan Error

GejalaKemungkinan penyebabLangkah awal
library not foundAplikasi dan library berada pada versi berbeda, atau paket AUR belum dibangun ulang.Jalankan pacman -Syu, lalu periksa paket asing dengan pacman -Qm.
Dependensi meminta versi yang tidak tersediaDatabase mirror tidak sinkron, repo tercampur, atau ada paket yang ditahan.Periksa pacman.conf, mirror, IgnorePkg, lalu lakukan full upgrade.
Konflik berkas saat upgradeBerkas tidak dimiliki paket, paket pihak ketiga bentrok, atau transaksi lama tidak selesai.Cari pemilik berkas dan baca berita Arch sebelum memakai opsi overwrite.
Kernel ditemukan tetapi root filesystem gagal dibukaInitramfs tidak lengkap, hook berubah, atau modul penyimpanan tidak masuk.Boot live USB, masuk ke sistem, lalu jalankan mkinitcpio -P.
Pacman sendiri tidak dapat berjalanLibrary inti atau pacman rusak akibat transaksi terputus.Gunakan live USB dan jalankan pacman melalui --sysroot.

Baca catatan transaksi terakhir

Pacman menyimpan riwayat pemasangan dan pembaruan di /var/log/pacman.log. Baris terakhir sering menunjukkan paket yang sedang diproses ketika masalah terjadi.

tail -n 100 /var/log/pacman.log

Untuk mencari transaksi upgrade terakhir:

grep '\[ALPM\] upgraded' /var/log/pacman.log | tail -n 50

Catatan ini membantu menentukan apakah transaksi berhenti setelah kernel diperbarui, sesudah library inti diganti, atau ketika paket pihak ketiga sedang dipasang.

Mencegah Partial Upgrade Terulang

Gunakan satu transaksi yang lengkap

Untuk pembaruan rutin, gunakan:

sudo pacman -Syu

Jika ingin memasang paket baru sekaligus memperbarui sistem, target paket dapat ditambahkan pada transaksi yang sama:

sudo pacman -Syu nama-paket

Dengan pola ini, paket baru dipasang bersama kumpulan dependensi terbaru, bukan dimasukkan ke sistem yang masih menggunakan database atau library lama.

Baca Arch Linux News sebelum pembaruan besar

Sesekali pembaruan membutuhkan intervensi manual, misalnya perubahan format konfigurasi, penggantian paket, atau migrasi komponen sistem. Pengumuman tersebut diterbitkan melalui Arch Linux News.

Jangan memperbarui saat kondisi tidak mendukung

Hindari pembaruan besar ketika baterai hampir habis, koneksi sangat tidak stabil, atau partisi root tinggal menyisakan sedikit ruang. Pastikan proses dapat selesai tanpa dimatikan paksa.

Tinjau berkas pacnew

Pembaruan paket dapat menghasilkan berkas konfigurasi dengan akhiran .pacnew. Berkas tersebut tidak selalu harus menggantikan konfigurasi lama, tetapi perlu dibandingkan dan digabungkan agar layanan tetap kompatibel dengan versi terbaru.

Rawat paket AUR secara terpisah

Selesaikan pembaruan paket resmi terlebih dahulu. Setelah itu, bangun ulang paket AUR yang bergantung pada library yang berubah. Jangan menganggap AUR sebagai repositori resmi yang selalu bergerak serempak dengan Arch Linux.

Simpan cache dan cadangan yang masuk akal

Beberapa versi paket lama di cache dapat membantu ketika pembaruan tertentu harus dibatalkan. Untuk kondisi yang lebih rumit, Arch Linux Archive menyediakan snapshot repositori berdasarkan tanggal.

Rollback melalui arsip harus dilakukan secara konsisten terhadap seluruh repositori pada tanggal yang sama. Mengambil satu paket lama dari snapshot lalu mencampurnya dengan sistem terbaru dapat menciptakan partial upgrade dalam arah sebaliknya.

Kesimpulan

Partial upgrade bukan sekadar satu paket yang gagal diperbarui. Ia adalah keadaan ketika kumpulan versi di dalam Arch Linux tidak lagi selaras. Karena itu, jalan keluarnya bukan menghapus paket secara acak, melainkan mengembalikan sistem ke satu keadaan repositori yang konsisten.

Pada sistem yang masih dapat boot, sudo pacman -Syu biasanya menjadi langkah utama. -Syyu hanya diperlukan ketika database perlu dipaksa sinkron ulang, sedangkan -Syyuu digunakan dalam situasi khusus ketika berpindah dari testing menuju stable dan membutuhkan downgrade.

Jika sistem gagal boot, media instalasi Arch Linux, arch-chroot, pacman --sysroot, dan mkinitcpio -P menyediakan jalur pemulihan yang jauh lebih aman daripada merusak database paket. Baca setiap transaksi sebelum menyetujuinya—pacman memang cepat, tetapi bukan pembaca pikiran.

Pegangan paling sederhana

Segarkan database dan paket dalam satu transaksi, jaga repositori tetap konsisten, serta jangan membersihkan cache pemulihan ketika sistem belum benar-benar sehat.