Rezolvarea conflictelor de fișiere între pachete Mesa (dpkg)
Acest articol descrie cum se rezolvă eroarea de conflict de fișiere apărută la actualizarea driverelor Mesa prin PPA-ul kisak-mesa pe Ubuntu/Linux Mint.
Descrierea problemei
La rularea sudo apt install -f sau sudo apt upgrade, dpkg poate refuza instalarea cu o eroare de forma:
dpkg: eroare la procesarea arhivei /var/cache/apt/archives/mesa-libgallium_26.0.0~kisak2~n_i386.deb (--unpack): se încearcă suprascrierea lui „/usr/lib/i386-linux-gnu/dri/nouveau_drv_video.so", care este și în pachetul mesa-va-drivers:i386 25.3.5~kisak1~n E: Sub-process /usr/bin/dpkg returned an error code (1)
Cauza
La trecerea de la Mesa 25.x la 26.x, fișierele au fost reorganizate între pachete. Concret, fișierul nouveau_drv_video.so a fost mutat din pachetul mesa-va-drivers în mesa-libgallium. DPKG nu permite suprascrierea unui fișier care aparține unui pachet instalat, fără ca acel pachet să fie eliminat în prealabil.
Soluție
Pasul 1: Încearcă repararea automată
sudo apt install -f
Dacă APT poate rezolva singur conflictul (de exemplu dacă programează eliminarea mesa-va-drivers:i386 înainte de instalare), problema se rezolvă aici. Dacă eroarea persistă, continuă cu pașii următori.
Pasul 2: Elimină forțat pachetele conflictuale
Pachetul va-driver-all:i386 depinde de mesa-va-drivers:i386, deci ambele trebuie eliminate împreună:
sudo dpkg --remove --force-all mesa-va-drivers:i386 va-driver-all:i386
Atenție: Opțiunea--force-allignoră dependențele. Este sigură în acest context deoarece APT va reinstala pachetele necesare în pasul următor.
Pasul 3: Lasă APT să reinstaleze corect
sudo apt install -f
APT va instala acum Mesa 26.x fără conflicte, iar va-driver-all va fi reinstalat automat dacă este necesar.
Pasul 4: Curăță pachetele orfane
sudo apt autoremove
Întrebare frecventă
De ce nu funcționează --force-remove-reinstreq singur?
sudo dpkg --remove --force-remove-reinstreq mesa-va-drivers:i386 # Eroare: va-driver-all:i386 depinde de mesa-va-drivers.
Opțiunea --force-remove-reinstreq ignoră doar starea internă de reinstalare necesară (flag-ul reinst-required din baza de date dpkg), dar nu ignoră dependențele altor pachete instalate. De aceea este nevoie fie de --force-all, fie de eliminarea prealabilă a pachetului dependent.
Verificare finală
sudo apt update && sudo apt upgrade
Nu ar trebui să mai existe pachete incomplete (9 instalat(e) sau eliminat(e) incomplet) sau erori de conflict.