Memperbaiki Error GLIBC Version Too Old di Arch Linux

Ketika Bash, pacman, desktop, atau aplikasi lain mendadak menolak berjalan karena versi GLIBC tidak ditemukan, jangan buru-buru menyalin file libc secara manual. Sistem masih bisa dipulihkan secara rapi melalui live ISO dan transaksi paket yang konsisten.

GNU C Library atau GLIBC adalah salah satu fondasi utama sistem Linux. Banyak program—mulai dari shell, utilitas terminal, layanan sistem, sampai aplikasi desktop—membutuhkan fungsi yang disediakan oleh library ini. Karena posisinya sangat mendasar, ketidakcocokan satu versi GLIBC dapat membuat banyak program tumbang secara bersamaan.

Pesan seperti GLIBC_2.38 not found tidak selalu berarti Arch Linux membutuhkan GLIBC yang lebih tua. Pesan tersebut justru biasanya menunjukkan bahwa sebuah program dibangun untuk memakai simbol GLIBC tertentu, tetapi runtime loader menemukan salinan libc yang lebih lama atau tidak sesuai.

Penyebabnya dapat berupa pembaruan sistem yang terputus, partial upgrade, library dari direktori khusus yang mengambil alih library resmi, lingkungan chroot lama, atau paket hasil kompilasi yang berasal dari sistem lebih baru. Perbaikannya harus mengembalikan seluruh komponen ke satu kumpulan versi yang konsisten—bukan sekadar menimpa semua file yang kebetulan terlihat mencurigakan.

Ilustrasi terminal Arch Linux saat memulihkan error GLIBC version not found dan symbol lookup failed
Error versi GLIBC umumnya menandakan program, dynamic loader, dan library yang dimuat tidak lagi berada pada rangkaian versi yang cocok.

Memahami Arti Pesan Error

Dua pesan berikut terlihat mirip, tetapi petunjuknya sedikit berbeda:

/usr/bin/bash: /usr/lib/libc.so.6: version `GLIBC_2.38' not found
symbol lookup error: undefined symbol: __memcpy_chk, version GLIBC_2.38

Pesan pertama berarti program meminta versi simbol bernama GLIBC_2.38, tetapi library yang sedang dimuat tidak menyediakan versi tersebut. Pesan kedua berarti proses menemukan library, tetapi sebuah simbol yang dibutuhkan tidak tersedia dalam bentuk atau versi yang diharapkan.

Nomor setelah kata GLIBC adalah symbol version, bukan sekadar nomor paket yang boleh diselesaikan dengan mengganti nama file. Binary dan library dapat tetap memiliki nama yang sama, tetapi isi serta daftar simbolnya berbeda.

Jangan mengunduh libc.so.6 dari situs acak

Menyalin satu file GLIBC dari distribusi lain dapat membuat dynamic loader, library pendukung, database paket, dan program inti semakin tidak sinkron. Kesalahan kecil di sini bisa membuat hampir semua perintah berhenti berjalan.

Penyebab yang Paling Sering Ditemukan

Pembaruan berhenti ketika paket inti sedang dipasang

Pemadaman listrik, ruang penyimpanan penuh, sistem dimatikan paksa, atau kegagalan media dapat menghentikan transaksi ketika sebagian file GLIBC sudah diganti dan sebagian lainnya belum. Database pacman mungkin mencatat versi baru, sementara beberapa file masih berasal dari versi sebelumnya.

Koneksi internet yang putus saat tahap unduhan belum tentu merusak sistem. Risiko lebih besar muncul jika transaksi sudah memasuki tahap instalasi paket, lalu proses dihentikan sebelum selesai.

Partial upgrade setelah pacman -Sy

Arch Linux hanya mendukung full system upgrade. Menjalankan pacman -Sy memperbarui database repositori tanpa memperbarui seluruh paket yang terpasang. Pemasangan satu paket baru setelah itu dapat mempertemukan binary baru dengan GLIBC lama.

Pedoman resmi mengenai kondisi ini tersedia pada bagian partial upgrades are unsupported di ArchWiki.

LD_LIBRARY_PATH atau LD_PRELOAD mengarahkan ke library lama

Aplikasi komersial, SDK, game, perangkat lunak ilmiah, atau skrip buatan sendiri kadang menambahkan direktori khusus ke LD_LIBRARY_PATH. Jika direktori tersebut berisi salinan libc.so.6, libpthread.so.0, atau library inti lain, program dapat memuat versi yang salah meskipun paket resmi Arch sebenarnya sehat.

env | grep -E '^(LD_LIBRARY_PATH|LD_PRELOAD)='

Jika shell utama sudah tidak bisa dijalankan, pemeriksaan harus dilakukan dari live ISO dengan meninjau konfigurasi di partisi sistem, bukan memaksa menjalankan binary yang sedang rusak.

Chroot, container, atau image sistem tidak sinkron

Binary dari host yang lebih baru tidak seharusnya dijalankan memakai library milik chroot yang lebih lama. Kebalikannya juga berlaku. Seluruh userspace di dalam chroot atau container perlu diperbarui sebagai satu sistem tersendiri.

Paket AUR atau binary portabel dibangun di sistem lebih baru

Paket yang dikompilasi pada sistem dengan GLIBC lebih baru dapat meminta symbol version yang belum tersedia pada mesin tujuan. Dalam kasus ini, GLIBC sistem belum tentu rusak. Binary tersebut mungkin perlu dibangun ulang langsung pada sistem target atau dipasang melalui paket yang sesuai dengan repositori aktif.

Library 32-bit belum ikut diperbarui

Pada sistem multilib, aplikasi 64-bit memakai paket glibc, sedangkan aplikasi 32-bit menggunakan lib32-glibc. Jika hanya aplikasi 32-bit seperti game atau Wine yang gagal, periksa keselarasan paket multilib sebelum menyentuh GLIBC utama.

Urutan Pemulihan yang Disarankan

  1. Hentikan percobaan overwrite massal atau penyalinan file library manual.
  2. Boot memakai Arch Linux ISO terbaru.
  3. Mount partisi root serta partisi boot atau EFI yang terpisah.
  4. Coba masuk dengan arch-chroot.
  5. Jika chroot gagal, operasikan sistem target memakai pacman --sysroot dari live ISO.
  6. Reinstall GLIBC bersama full system upgrade.
  7. Regenerasi cache dynamic linker.
  8. Periksa integritas paket, initramfs, dan library custom sebelum reboot.

Memulihkan Sistem Melalui Live ISO

Boot menggunakan media instalasi terbaru

Gunakan flashdisk Arch Linux ISO resmi yang masih baru. Live environment menyediakan pacman, alat mount, utilitas jaringan, dan library sehat yang dapat digunakan untuk memperbaiki sistem terpasang.

Setelah masuk ke terminal live, identifikasi partisi:

lsblk -f

Perhatikan tipe filesystem, label, UUID, serta lokasi partisi root. Jangan menyalin nama perangkat dari contoh artikel secara mentah karena susunan disk setiap komputer berbeda.

Mount partisi root

mount /dev/nama-partisi-root /mnt

Jika sistem memakai subvolume Btrfs, mount subvolume root yang benar. Contoh berikut hanya menggambarkan pola umum:

mount -o subvol=@ /dev/nama-partisi-btrfs /mnt

Mount partisi boot atau EFI

Mount semua filesystem yang diperlukan oleh sistem sebelum melakukan full upgrade. Lokasi mount dapat berbeda antara instalasi yang satu dan lainnya.

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

Jika partisi EFI biasanya dipasang di /boot/efi, buat dan gunakan lokasi tersebut:

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

Panduan umum mengenai lingkungan chroot dapat dibaca pada dokumentasi Chroot di ArchWiki.

Coba masuk dengan arch-chroot

arch-chroot /mnt

Jika perintah berhasil dan shell di dalam sistem target berjalan normal, lanjutkan perbaikan dari dalam chroot. Jika muncul error GLIBC lagi, keluar dari percobaan tersebut dan gunakan metode --sysroot.

Metode Pertama: Chroot Masih Bisa Digunakan

Periksa ruang penyimpanan

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

Pastikan partisi root memiliki ruang cukup untuk mengunduh dan mengekstrak paket. GLIBC memang tidak terlalu besar, tetapi full upgrade dapat melibatkan kernel, desktop, browser, dan paket lain.

Periksa konfigurasi repositori

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

Pastikan repositori stable tidak tercampur sembarangan dengan testing. Tinjau juga IgnorePkg, repositori pihak ketiga, dan konfigurasi mirror.

Reinstall GLIBC sambil menyelesaikan full upgrade

pacman -Syu glibc gcc-libs

Penambahan glibc dan gcc-libs sebagai target eksplisit membuat pacman memasang ulang paket tersebut sambil tetap menyelaraskan seluruh sistem. Langkah ini lebih aman daripada memasang GLIBC sendirian pada sistem yang sudah mengalami partial upgrade.

Jika database repositori diduga tidak sinkron setelah pergantian mirror, paksa penyegaran satu kali:

pacman -Syyu glibc gcc-libs
Jangan memakai -Syyu untuk setiap pembaruan

Dua huruf y memaksa pengunduhan ulang database repositori. Untuk pemakaian normal, pacman -Syu sudah cukup.

Perbarui paket multilib bila digunakan

Jika repositori multilib aktif dan aplikasi 32-bit ikut bermasalah:

pacman -Syu lib32-glibc lib32-gcc-libs

Regenerasi cache dynamic linker

ldconfig

Program ldconfig memperbarui link dan cache library berdasarkan direktori yang telah dikonfigurasi. File executable ldconfig sendiri disediakan oleh paket GLIBC.

Periksa paket yang baru dipulihkan

pacman -Q glibc gcc-libs
pacman -Qkk glibc gcc-libs
pacman -Dk

pacman -Qkk memeriksa file paket secara lebih rinci, sedangkan pacman -Dk memeriksa konsistensi database lokal dan dependensi.

Metode Kedua: arch-chroot Gagal karena GLIBC Rusak

Gunakan pacman milik live ISO

Jika Bash atau dynamic loader di sistem target rusak, arch-chroot tidak dapat menjalankan binary dari partisi tersebut. Dalam keadaan ini, gunakan pacman sehat milik live ISO dan arahkan seluruh operasinya ke sistem yang telah di-mount:

pacman --sysroot /mnt -Syu glibc gcc-libs

Opsi --sysroot memang disediakan untuk mengoperasikan sistem tamu yang terpasang pada lokasi lain. Berbeda dengan sekadar mengganti root instalasi, sysroot juga menyesuaikan jalur konfigurasi dan database sistem target.

Penjelasan opsi ini tersedia pada manual pacman.

Paksa sinkronisasi database hanya jika diperlukan

pacman --sysroot /mnt -Syyu glibc gcc-libs

Gunakan bentuk ini bila database repositori di sistem target jelas rusak, sangat lama, atau tidak sesuai setelah perubahan mirror. Jangan menambahkan opsi lain hanya karena transaksi pertama menampilkan pesan yang belum dipahami.

Regenerasi cache linker dari live environment

ldconfig -r /mnt

Opsi -r meminta ldconfig bekerja menggunakan direktori lain sebagai root. Dengan demikian, cache yang diperbarui adalah milik sistem di /mnt, bukan cache live ISO.

Periksa kepemilikan file GLIBC

pacman --sysroot /mnt -Qo /usr/lib/libc.so.6
pacman --sysroot /mnt -Qo /usr/lib/ld-linux-x86-64.so.2

Kedua jalur tersebut seharusnya tercatat sebagai bagian dari paket resmi GLIBC. Informasi paket GLIBC terkini dapat diperiksa pada halaman paket resmi Arch Linux.

Uji kembali lingkungan chroot

arch-chroot /mnt /usr/bin/bash -lc 'ldd --version; pacman -Q glibc gcc-libs'

Jika perintah ini berhasil, dynamic loader, Bash, dan pacman di sistem target sudah dapat dijalankan kembali. Lanjutkan pemeriksaan konfigurasi serta initramfs sebelum reboot.

Pemulihan Offline dari Cache Pacman

Cari paket yang masih tersimpan

Jika koneksi internet tidak tersedia, cache lokal dapat menjadi penyelamat. Dari live ISO, tampilkan paket GLIBC yang masih ada:

ls -1t /mnt/var/cache/pacman/pkg/glibc-*.pkg.tar.zst
ls -1t /mnt/var/cache/pacman/pkg/gcc-libs-*.pkg.tar.zst

Pilih versi terbaru yang tersedia dan berasal dari transaksi yang sama atau periode repositori yang sejalan. Hindari mencampur GLIBC baru dengan gcc-libs yang terlalu lama jika cache menyediakan pasangan yang lebih cocok.

Pasang paket cache melalui sysroot

pacman --sysroot /mnt -U \
 /mnt/var/cache/pacman/pkg/glibc-VERSI-x86_64.pkg.tar.zst \
 /mnt/var/cache/pacman/pkg/gcc-libs-VERSI-x86_64.pkg.tar.zst

Ganti nama file contoh dengan nama paket sebenarnya. Jangan mengetik kata VERSI secara literal lalu berharap pacman memahami isi hati pengguna.

Perbarui cache library

ldconfig -r /mnt

Selesaikan full upgrade setelah jaringan tersedia

Pemulihan dari cache bertujuan membuat shell dan pacman dapat berjalan kembali. Setelah koneksi tersedia, sistem tetap harus diselaraskan dengan repositori:

pacman --sysroot /mnt -Syu
Cache lama bukan solusi permanen

Memasang GLIBC lama dapat membantu pemulihan darurat, tetapi sistem rolling release harus dikembalikan ke satu snapshot repositori yang konsisten sebelum digunakan normal.

Mendeteksi Library Custom yang Mengambil Alih GLIBC

Periksa konfigurasi dynamic linker

Dari live ISO, lihat konfigurasi utama dan berkas tambahan:

cat /mnt/etc/ld.so.conf
find /mnt/etc/ld.so.conf.d -maxdepth 1 -type f -name '*.conf' -print

Direktori seperti /usr/local/lib, lokasi SDK, atau folder aplikasi vendor perlu diperiksa apabila berisi library inti yang seharusnya berasal dari paket resmi.

Cari salinan libc yang tidak lazim

find /mnt/opt /mnt/usr/local /mnt/home \
 -type f \( -name 'libc.so.6' -o -name 'ld-linux-x86-64.so.2' \) \
 2>/dev/null

Salinan GLIBC di dalam SDK atau runtime mandiri belum tentu salah. Masalah muncul jika direktori tersebut dimasukkan secara global ke LD_LIBRARY_PATH, LD_PRELOAD, atau konfigurasi ld.so.conf.

Periksa pengaturan lingkungan sistem

grep -RnsE 'LD_LIBRARY_PATH|LD_PRELOAD' \
 /mnt/etc/environment \
 /mnt/etc/profile \
 /mnt/etc/profile.d \
 /mnt/etc/systemd/system \
 2>/dev/null

Hapus atau batasi konfigurasi global yang memaksa seluruh sistem memakai library milik satu aplikasi. Aplikasi yang membutuhkan runtime khusus lebih aman dijalankan melalui wrapper lokal, container, atau mekanisme bundling yang tidak mengganti library inti sistem.

Periksa kebutuhan simbol sebuah binary

Utilitas readelf dari live ISO dapat digunakan tanpa menjalankan binary target:

readelf --version-info /mnt/usr/bin/bash | grep GLIBC_
readelf --version-info /mnt/usr/lib/libc.so.6 | grep GLIBC_2.38

Pemeriksaan ini membantu membedakan binary yang meminta symbol version tertentu dengan library yang benar-benar menyediakan atau tidak menyediakan simbol tersebut.

Tentang Opsi Overwrite dan Kernel

Hindari --overwrite '*'

Perintah seperti berikut terlihat praktis, tetapi terlalu luas:

pacman -S glibc gcc-libs --overwrite '*'
pacman -Syu --overwrite '*'

Opsi --overwrite melewati pemeriksaan konflik file untuk pola yang diberikan. Memakai wildcard global dapat menyembunyikan konflik kepemilikan file, sisa paket pihak ketiga, atau kerusakan filesystem yang seharusnya diperiksa.

Pacman normal sudah dapat mengganti file milik versi lama dari paket yang sama. Overwrite baru layak dipertimbangkan bila pacman melaporkan konflik pada jalur tertentu dan penyebab konflik tersebut sudah dipahami.

Jika benar-benar diperlukan, batasi pola hanya pada jalur yang bermasalah, bukan seluruh filesystem:

pacman --sysroot /mnt -S glibc \
 --overwrite 'usr/lib/nama-file-yang-benar-benar-berkonflik'

Kernel lama biasanya bukan penyebab utama symbol lookup error

GLIBC memang memiliki kebutuhan minimum terhadap fitur kernel, tetapi pesan GLIBC_x.y not found lebih sering muncul karena ketidakcocokan antar-komponen userspace: binary, dynamic loader, dan library.

Memperbarui kernel tetap menjadi bagian wajar dari full system upgrade, tetapi memasang kernel baru saja tidak akan memperbaiki salinan GLIBC lama yang termuat melalui path custom.

Regenerasi initramfs hanya bila relevan

GLIBC bukan komponen utama yang biasanya memerlukan regenerasi initramfs. Namun, jika pembaruan terputus saat kernel atau initramfs sedang diproses, jalankan:

arch-chroot /mnt mkinitcpio -P

Pastikan partisi /boot atau EFI telah di-mount pada lokasi yang benar sebelum menjalankan perintah tersebut. Jika sistem memakai generator initramfs selain mkinitcpio, gunakan alat yang memang dikonfigurasi pada sistem itu.

Pemeriksaan Akhir Sebelum Reboot

Periksa versi dan integritas paket

pacman --sysroot /mnt -Q glibc gcc-libs
pacman --sysroot /mnt -Qkk glibc gcc-libs
pacman --sysroot /mnt -Dk

Jika sistem multilib digunakan:

pacman --sysroot /mnt -Q lib32-glibc lib32-gcc-libs

Periksa log transaksi terakhir

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

Log dapat menunjukkan apakah transaksi sebelumnya berhenti saat memperbarui GLIBC, kernel, systemd, GCC runtime, atau paket lain.

Periksa ruang disk dan filesystem

df -h /mnt
df -i /mnt

Filesystem dapat kehabisan ruang inode walaupun kapasitas dalam gigabita masih terlihat tersedia. Jika sebelumnya terjadi mati listrik atau error I/O, pertimbangkan pemeriksaan filesystem dari kondisi unmount sesuai jenis filesystem yang digunakan.

Lepas mount dengan rapi

sync
umount -R /mnt
reboot

Lepaskan flashdisk ketika firmware atau menu boot meminta, lalu biarkan sistem melakukan boot dari disk utama.

Mencegah Error GLIBC Terulang

Selalu lakukan full system upgrade

sudo pacman -Syu

Jangan menjalankan pacman -Sy lalu memasang paket baru tanpa menyelesaikan pembaruan seluruh sistem.

Pastikan daya, jaringan, dan ruang disk aman

Untuk laptop, sambungkan pengisi daya. Periksa kapasitas partisi root dan cache pacman sebelum transaksi besar. Hindari menghentikan pacman ketika paket sedang dipasang.

Jangan membersihkan seluruh cache terlalu agresif

Cache paket dapat menjadi jalur pemulihan ketika versi terbaru rusak atau koneksi internet tidak tersedia. Sisakan beberapa versi paket penting alih-alih selalu memakai pacman -Scc.

Tinjau paket AUR setelah pembaruan library besar

Paket AUR atau binary yang ditautkan terhadap library lama mungkin perlu dibangun ulang. Daftar paket asing dapat dilihat dengan:

pacman -Qm

Gunakan snapshot sebagai lapisan pengaman

Pengguna Btrfs dapat memanfaatkan Snapper, Timeshift, atau pengelola snapshot lain. Snapshot bukan pengganti backup data pribadi, tetapi dapat mempercepat rollback ketika pembaruan sistem mengalami masalah.

Hindari mengekspor library path secara global

Batasi LD_LIBRARY_PATH hanya untuk aplikasi yang benar-benar membutuhkannya. Menambahkannya ke konfigurasi global dapat membuat seluruh desktop atau layanan sistem memakai library yang seharusnya hanya digunakan satu program.

Kesimpulan

Error GLIBC version not found atau symbol lookup failed pada Arch Linux paling sering menunjukkan ketidakselarasan antara binary dan library yang dimuat. Masalah tersebut dapat berasal dari partial upgrade, transaksi yang terputus, path library custom, chroot lama, atau paket hasil kompilasi dari sistem lain.

Jika shell masih berjalan, selesaikan full system upgrade sambil memasang ulang glibc dan gcc-libs. Jika Bash atau pacman ikut mati, boot melalui live ISO dan gunakan pacman --sysroot /mnt agar perbaikan dilakukan oleh pacman yang sehat.

Hindari menyalin libc.so.6 secara manual dan jangan menjadikan --overwrite '*' sebagai tombol ajaib. Wildcard memang terlihat gagah, tetapi ia juga bisa menyapu bukti masalah ke bawah karpet.

Pegangan utamanya sederhana

Pulihkan paket inti melalui pacman, perbarui cache dynamic linker, tuntaskan full system upgrade, lalu pastikan tidak ada library custom yang mengambil alih library resmi Arch Linux.

Jaga data pribadi tetap aman

Saat meminta bantuan di forum, sensor nama pengguna, hostname, alamat IP, UUID perangkat, token, dan jalur direktori pribadi sebelum membagikan log lengkap.