Linux tidak boleh dipasang kerana ralat dependencies — punca dan cara membaikinya

Dalam Linux, semasa cuba memasang perisian, kita sering menemui mesej seperti “dependency tidak dapat diselesaikan”, “pakej yang diperlukan tidak tersedia”, atau “terdapat konflik dengan pakej lain”. Ini bukan sekadar bermaksud satu aplikasi tertentu gagal dipasang. Selalunya ia menandakan bahawa keadaan pakej seluruh sistem sudah menjadi tidak konsisten. Pengurus pakej seperti apt, dnf dan pacman berfungsi dengan anggapan bahawa libraries, runtimes dan pakej sokongan wujud dalam gabungan versi yang serasi. Apabila rantaian itu terganggu, proses pemasangan akan dihentikan.

Perkara penting ialah jangan menganggap ralat dependency sebagai masalah kecil seperti “hanya kurang satu pakej”. Di sebaliknya boleh wujud cache yang rosak, konfigurasi repository lama, campuran sources pihak ketiga, kemas kini yang terhenti di tengah jalan, partial upgrade, pakej yang di-hold, libraries yang dipasang secara manual, atau ketidakpadanan architecture. Oleh itu, jangan terus padam fail secara rawak atau memuat turun .deb / .rpm dari laman yang meragukan. Lebih penting untuk faham dulu dependency mana yang gagal dipenuhi dan sebabnya.

Apa itu ralat dependency

Kebanyakan pakej dalam Linux tidak berfungsi secara bersendirian. Sesebuah aplikasi mungkin memerlukan library tertentu, runtime dengan versi tertentu, tools tambahan atau komponen sistem yang lain. Jika salah satu daripadanya tiada atau versinya tidak sesuai, pengurus pakej akan menghentikan pemasangan untuk mengelakkan sistem menjadi lebih rosak.

Jadi, ralat dependency bukan sekadar bermaksud “ada sesuatu yang tiada”. Kadang-kadang ia bermaksud dua syarat tidak boleh dipenuhi serentak, dua pakej saling bercanggah, atau gabungan versi yang ada sudah tidak lagi konsisten.

Gejala yang biasa berlaku

  • Mesej seperti Depends:, requires atau unresolved dependency dipaparkan
  • Sistem menyatakan terdapat pakej rosak atau dependency tidak dapat diselesaikan
  • Semasa mahu memasang satu pakej, sistem meminta pakej lain dibuang
  • Library tertentu diperlukan tetapi versi yang sesuai tidak tersedia
  • Selepas kemas kini, pemasangan mula gagal berulang kali
  • Masalah bermula selepas menambah repository pihak ketiga
  • Selepas partial upgrade, sistem menjadi tidak konsisten

Apa yang patut diperiksa dahulu

Kadang-kadang ia nampak seperti masalah dependency, tetapi punca sebenarnya ialah rangkaian, DNS atau mirror yang tidak dapat diakses. Jadi langkah pertama ialah memastikan akses ke sumber pakej memang normal.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

Selepas itu, pastikan senarai pakej boleh dikemas kini tanpa masalah.

sudo apt update
sudo dnf makecache
sudo pacman -Sy

Jika pada tahap ini sudah muncul 404, kegagalan name resolution, signature error atau timeout, maka punca utamanya mungkin bukan dependency itu sendiri.

Punca utama ralat dependency

1. Repository bercampur

Ini ialah antara punca paling biasa. Repository rasmi, PPA lama, sources untuk release distro lain, repository testing dan sources pihak ketiga mungkin menawarkan nama pakej yang sama tetapi dengan versi dan peraturan dependency yang berbeza. Akibatnya, satu pakej memerlukan library baharu manakala yang lain hanya serasi dengan versi lama, dan kedua-duanya tidak boleh dipenuhi serentak.

2. Kemas kini terhenti di tengah jalan

Jika proses update terganggu akibat bekalan elektrik terputus, terminal ditutup, SSH terputus atau GUI hang, sebahagian pakej mungkin sudah dikemas kini manakala yang lain masih lama. Keadaan separuh siap inilah yang sangat kerap menimbulkan ralat dependency.

3. Partial upgrade

Masalah ini sangat terkenal dalam Arch Linux kerana partial upgrade sangat tidak digalakkan. Namun dalam Debian / Ubuntu atau Fedora pun, memaksa update hanya beberapa pakej teras boleh menyebabkan gangguan yang sama.

4. Pakej yang di-hold atau dipin versinya

Jika sesuatu pakej sengaja ditahan pada versi tertentu, pakej lain mungkin tidak dapat bergerak ke versi yang diperlukan. Akhirnya, keseluruhan rantaian dependency menjadi tersekat.

5. Pemasangan manual di luar pengurus pakej

Apabila libraries dipasang secara manual, fail disalin terus ke sistem, atau pakej dipasang di luar pengurusan source yang kemas, keadaan sebenar sistem boleh berbeza daripada apa yang direkodkan oleh pengurus pakej.

6. Pakej yang bercanggah

Tidak semua ralat dependency bermaksud ada sesuatu yang hilang. Ada kalanya dua pakej tidak boleh wujud serentak kerana menyediakan fail yang sama atau memang direka sebagai saling eksklusif.

7. Ketidakpadanan architecture

Boleh jadi pakej itu memang wujud, tetapi untuk architecture yang salah. Campuran 32-bit dan 64-bit tanpa konfigurasi yang betul, atau cubaan memasang pakej architecture lain, juga boleh muncul sebagai ralat dependency.

8. Cache atau metadata tidak konsisten

Senarai pakej yang lapuk, cache yang rosak atau metadata mirror yang tidak segerak boleh menyebabkan pengurus pakej tidak “nampak” dependency yang sebenarnya ada dalam repository.

Apa yang perlu diperiksa dalam sistem apt

Dalam Debian / Ubuntu, penting untuk melihat bukan sahaja apt, tetapi juga keadaan dpkg.

Membaiki keadaan yang belum lengkap

sudo dpkg --configure -a
sudo apt --fix-broken install

Selepas kemas kini yang terganggu, dua arahan ini biasanya menjadi langkah pertama yang betul.

Memeriksa pakej yang di-hold

apt-mark showhold

Pakej yang di-hold boleh menghalang keseluruhan rantaian dependency.

Memeriksa versi dan sumber

apt-cache policy nama-pakej

Ini membantu melihat versi mana yang tersedia dan datang dari repository mana.

Apa yang perlu diperiksa dalam sistem dnf

Dalam Fedora / RHEL, perhatian utama perlu diberikan kepada integriti sistem dan sejarah transaksi.

Memeriksa keadaan semasa

sudo dnf check

Ini membantu mengesan dependency yang belum dipenuhi di seluruh sistem.

Menyelaraskan semula dengan keadaan distribusi

sudo dnf distro-sync

Jika ada pakej yang terlalu ke depan dan ada yang tertinggal, ini sering membantu mengembalikan keadaan yang konsisten.

Melihat syarat yang tidak dipenuhi

sudo dnf repoquery --unsatisfied

Dengan ini, lebih mudah untuk melihat dependency mana yang sebenarnya gagal.

Apa yang perlu diperiksa dalam sistem pacman

Dalam Arch Linux, perkara paling penting ialah memulihkan konsistensi sistem secara menyeluruh dan mengelakkan partial upgrade.

Mengemas kini seluruh sistem

sudo pacman -Syu

Apabila ralat dependency sudah berlaku, cubaan membaiki dengan update satu demi satu pakej biasanya akan memburukkan keadaan.

Menyegarkan pangkalan data sync

sudo pacman -Syy

Ini berguna apabila maklumat tempatan sudah tidak sepadan dengan mirrors.

Log sangat penting

Ralat dependency jarang dapat difahami hanya dengan melihat baris terakhir. Kita perlu melihat pakej mana yang memerlukan versi apa, calon mana yang ditolak dan kenapa.

apt / dpkg

sudo tail -n 100 /var/log/apt/history.log
sudo tail -n 100 /var/log/dpkg.log

dnf

sudo journalctl -xe --no-pager | tail -n 100
sudo dnf history

pacman

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

Turutan praktikal untuk diagnosis

Langkah 1: Periksa rangkaian dan akses repository

ping -c 4 8.8.8.8
ping -c 4 google.com

Langkah 2: Kemas kini senarai pakej

sudo apt update
sudo dnf makecache
sudo pacman -Syy

Langkah 3: Baiki keadaan yang belum lengkap

Untuk apt gunakan dpkg --configure -a, untuk dnf gunakan dnf check, dan untuk pacman gunakan pendekatan sync penuh.

Langkah 4: Semak versi dan sumber pakej bermasalah

Kenal pasti repository asal pakej itu, versi yang tersedia, dan sama ada ia di-hold atau tidak.

Langkah 5: Syaki repository pihak ketiga dan konfigurasi lama

Banyak ralat dependency sebenarnya berpunca daripada sources yang bercampur atau sudah lapuk.

Perkara yang perlu dielakkan

  • Memasang pakej tambahan secara rawak tanpa memahami ralat
  • Memuat turun .deb / .rpm dari sumber yang tidak boleh dipercayai
  • Meneruskan partial upgrade
  • Mematikan pemeriksaan signature atau dependency
  • Menambah lebih banyak repository pihak ketiga tanpa memahami punca sebenar

Bagaimana mengelakkan masalah ini berulang

  • Utamakan repository rasmi
  • Jangan simpan PPA lama atau sources yang salah
  • Jangan hentikan update di tengah jalan
  • Elakkan partial upgrade dalam Arch
  • Buat snapshot atau backup sebelum perubahan besar

Kesimpulan

Apabila Linux tidak boleh memasang perisian kerana ralat dependency, masalahnya selalunya lebih besar daripada sekadar “satu library tiada”. Campuran repository, update terganggu, partial upgrade, pakej yang di-hold, pemasangan manual dan konflik architecture ialah punca yang sangat biasa. Kuncinya ialah membaca mesej ralat dengan teliti dan memahami pakej mana memerlukan versi apa, serta kenapa sistem tidak dapat menyediakannya. Selepas itu barulah gunakan pendekatan yang sesuai: dpkg --configure -a dan apt --fix-broken install untuk apt, dnf check dan distro-sync untuk dnf, serta sync penuh dan update penuh untuk pacman.

Leave a Reply

Alamat e-mel anda tidak akan disiarkan. Medan diperlukan ditanda dengan *