Linux-da proqram quraşdırarkən tez-tez “dependencies həll edilə bilmir”, “lazım olan paket mövcud deyil” və ya “başqa paketlə konflikt var” kimi xətalar görünür. Bu, sadəcə bir proqramın quraşdırıla bilməməsi demək deyil. Çox vaxt bu, sistemdə paket vəziyyətinin ümumilikdə uyğunsuz hala gəldiyini göstərir. apt, dnf və pacman kimi paket menecerləri kitabxanaların, runtimelərin və köməkçi paketlərin uyğun versiya kombinasiyalarında mövcud olmasına əsaslanır. Bu zəncir qırıldıqda, quraşdırma dayanır.
Əsas məsələ odur ki, dependency error-u “sadəcə bir paket çatışmır” kimi kiçik problem saymaq düzgün deyil. Arxasında zədələnmiş cache, köhnə repository sazlaması, third-party mənbələrin qarışdırılması, yarımçıq qalmış update, partial upgrade, hold edilmiş paketlər, əl ilə quraşdırılmış libraries və ya architecture uyğunsuzluğu kimi səbəblər ola bilər. Buna görə də təsadüfi faylları silmək və ya etibarsız saytlardan .deb / .rpm yükləmək əvəzinə, əvvəlcə hansı dependency-nin niyə ödənmədiyini başa düşmək lazımdır.
Dependency error nədir
Linux paketlərinin çoxu təkbaşına işləmir. Hər hansı proqram müəyyən library, xüsusi runtime versiyası, əlavə alət və ya başqa sistem komponenti tələb edə bilər. Bunlardan biri yoxdursa və ya uyğun versiyada deyilsə, paket meneceri sistemi daha da korlamamaq üçün quraşdırmanı dayandırır.
Yəni dependency error yalnız “nəsə çatışmır” demək deyil. Bu, həm də iki şərtin eyni anda ödənə bilmədiyini, iki paketin bir-birinə zidd olduğunu və ya mövcud versiyaların artıq uyğun kombinasiya yaratmadığını göstərə bilər.
Tez-tez görünən əlamətlər
Depends:,requiresvə yaunresolved dependencymesajları görünür- Sistem broken packages və ya həll edilə bilməyən dependencies barədə xəbər verir
- Bir paketi quraşdırmaq istəyəndə başqa paketlərin silinməsi tələb olunur
- Müəyyən library tələb olunur, amma uyğun versiya tapılmır
- Update-dən sonra quraşdırmalar ardıcıl şəkildə uğursuz olur
- Problem third-party repository əlavə etdikdən sonra başlayır
- Partial upgrade-dən sonra sistem paket baxımından uyğunsuz hala düşür
Əvvəlcə nə yoxlanmalıdır
Bəzən bu, dependency error kimi görünür, amma əsl səbəb şəbəkə, DNS və ya mirror problemidir. Buna görə ilk addım paket mənbələrinə çıxışın normal işlədiyini yoxlamaqdır.
ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route
Daha sonra paket siyahılarının problemsiz yenilənib-yenilənmədiyinə baxmaq lazımdır.
sudo apt update
sudo dnf makecache
sudo pacman -Sy
Əgər burada 404, ad həll etmə xətası, signature error və ya timeout görünürsə, əsas səbəb dependency-nin özü olmaya bilər.
Dependency error-un əsas səbəbləri
1. Repository-lərin qarışdırılması
Bu, ən geniş yayılmış səbəblərdən biridir. Rəsmi repository-lər, köhnə PPA-lar, başqa distro release üçün mənbələr, testing repository-lər və third-party sources eyni paket adını fərqli versiya və dependency qaydaları ilə təqdim edə bilər. Nəticədə bir paket yeni library, digəri isə köhnə versiya tələb edir və hər ikisini eyni anda təmin etmək mümkün olmur.
2. Yarımçıq qalan update
Əgər update elektrik kəsintisi, terminalın bağlanması, SSH qopması və ya qrafik mühitin donması səbəbilə yarımçıq qalıbsa, bəzi paketlər yenilənmiş, bəziləri isə köhnə vəziyyətdə qala bilər. Bu cür yarımçıq vəziyyət dependency error-lara çox tez səbəb olur.
3. Partial upgrade
Bu problem xüsusilə Arch Linux-da yaxşı tanınır, çünki partial upgrade güclü şəkildə tövsiyə edilmir. Amma Debian / Ubuntu və Fedora-da da yalnız bir neçə əsas paketi məcburi yeniləmək oxşar uyğunsuzluğa gətirib çıxara bilər.
4. Hold edilmiş və ya sabitlənmiş paketlər
Əgər bəzi paketlər bilərəkdən köhnə versiyada saxlanılırsa, başqa paketlər onlara görə ehtiyac duyduğu yeni versiyaya keçə bilmir. Bunun nəticəsində bütün dependency chain bloklana bilər.
5. Paket menecerindən kənar əl ilə quraşdırmalar
Libraries-in əl ilə quraşdırılması, faylların birbaşa sistemə köçürülməsi və ya paketlərin paket menecerindən kənar mənbələrlə yerləşdirilməsi sistemin real vəziyyəti ilə paket menecerinin bildiyi vəziyyət arasında fərq yarada bilər.
6. Bir-biri ilə konflikt edən paketlər
Hər dependency error nəyinsə çatışmaması demək deyil. Bəzən problem ondadır ki, iki paket bir yerdə mövcud ola bilmir, məsələn eyni faylları təqdim edir və ya dizayn baxımından bir-birini istisna edir.
7. Architecture uyğunsuzluğu
Bəzən paket mövcuddur, amma düzgün architecture üçün deyil. 32-bit və 64-bit paketləri yanlış qarışdırmaq və ya başqa architecture üçün paket quraşdırmağa çalışmaq da dependency error kimi görünə bilər.
8. Cache və ya metadata uyğunsuzluğu
Köhnə paket siyahıları, zədələnmiş cache və ya mirrors ilə sinxron olmayan metadata paket menecerinin repository-də əslində mövcud olan dependency-ni “görməməsinə” səbəb ola bilər.
apt sistemlərində nələr yoxlanmalıdır
Debian / Ubuntu sistemlərində təkcə apt-ə deyil, həm də dpkg-nin vəziyyətinə baxmaq vacibdir.
Yarımçıq vəziyyətləri düzəltmək
sudo dpkg --configure -a
sudo apt --fix-broken install
Yarımçıq qalmış update-dən sonra bu iki əmr çox vaxt düzgün başlanğıc olur.
Hold edilmiş paketləri yoxlamaq
apt-mark showhold
Hold edilmiş paket bütün dependency chain-i bloklaya bilər.
Versiyaları və mənbələri yoxlamaq
apt-cache policy paket-adı
Bu, hansı versiyaların mövcud olduğunu və onların hansı mənbədən gəldiyini göstərir.
dnf sistemlərində nələr yoxlanmalıdır
Fedora / RHEL sistemlərində sistem bütövlüyünə və transaction history-yə diqqət yetirmək vacibdir.
Mövcud vəziyyəti yoxlamaq
sudo dnf check
Bu, bütün sistem üzrə ödənməyən dependencies-i tapmağa kömək edir.
Distributivin gözlənilən vəziyyəti ilə sinxronlaşdırmaq
sudo dnf distro-sync
Bəzi paketlər qabağa, bəziləri geri düşübsə, bu əmr çox vaxt sistemi yenidən uyğun vəziyyətə qaytarır.
Ödənməyən tələbləri göstərmək
sudo dnf repoquery --unsatisfied
Bu yolla hansı dependency-lərin ödənmədiyini daha aydın görmək olur.
pacman sistemlərində nələr yoxlanmalıdır
Arch Linux-da tam sistem uyğunluğunu bərpa etmək və partial upgrade-dən qaçmaq xüsusilə vacibdir.
Bütün sistemi yeniləmək
sudo pacman -Syu
Dependency error artıq mövcuddursa, ayrı-ayrı paketləri yeniləmək çox vaxt vəziyyəti daha da pisləşdirir.
Sync bazasını yeniləmək
sudo pacman -Syy
Bu, lokal məlumatların mirror-larla artıq uyğun gəlmədiyi hallarda faydalıdır.
Log-lar çox vacibdir
Dependency error-u yalnız son sətrə baxaraq anlamaq çətindir. Hansı paketin hansı versiyanı tələb etdiyini, hansı namizədin rədd edildiyini və bunun niyə baş verdiyini görmək lazımdır.
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
Praktik diaqnostika ardıcıllığı
Addım 1: Şəbəkəni və repository çıxışını yoxlayın
ping -c 4 8.8.8.8
ping -c 4 google.com
Addım 2: Paket siyahılarını yeniləyin
sudo apt update
sudo dnf makecache
sudo pacman -Syy
Addım 3: Yarımçıq vəziyyətləri düzəldin
apt üçün dpkg --configure -a, dnf üçün dnf check, pacman üçün isə full sync yanaşması tətbiq olunur.
Addım 4: Problemli paketin versiyalarını və mənbələrini araşdırın
Paketi hansı repository verdiyini, hansı versiyaların mövcud olduğunu və nəyinsə hold edilib-edilmədiyini müəyyən edin.
Addım 5: Third-party mənbələrdən və köhnə sazlamalardan şübhələnin
Çox dependency error-un kökündə əslində qarışıq və ya köhnəlmiş paket sources dayanır.
Nələrdən qaçmaq lazımdır
- Xətanı anlamadan təsadüfi əlavə paketlər quraşdırmaq
- Etibarsız saytlardan .deb / .rpm yükləmək
- Partial upgrade etməyə davam etmək
- Signature və dependency yoxlamasını söndürmək
- Əsl səbəbi bilmədən daha çox third-party repository əlavə etmək
Problemin təkrarlanmaması üçün
- Mümkün qədər rəsmi repository-lərdən istifadə edin
- Köhnə PPA-ları və yanlış mənbələri saxlamayın
- Update-ləri yarımçıq kəsməyin
- Arch sistemlərində partial upgrade etməyin
- Böyük dəyişikliklərdən əvvəl snapshot və ya backup yaradın
Nəticə
Linux-da quraşdırmanın dependency error səbəbilə alınmaması çox vaxt sadəcə bir library çatışmazlığından daha dərin problemdir. Qarışıq repository-lər, yarımçıq qalmış update-lər, partial upgrade, hold edilmiş paketlər, əl ilə quraşdırmalar və architecture konfliktləri ən yayılmış səbəblərdəndir. Əsas məsələ xətanı diqqətlə oxumaq, hansı paketin hansı versiyanı istədiyini və sistemin niyə bunu təmin edə bilmədiyini başa düşməkdir. Bundan sonra düzgün üsul seçilməlidir: apt üçün dpkg --configure -a və apt --fix-broken install, dnf üçün dnf check və distro-sync, pacman üçün isə full sync və full system update.