Gentoo: Portage e problemi di EAPI
Vi racconto questa cosa parecchio carina (col senno di poi) che mi è successa provando ad aggiornare una Gentoo in macchina virtuale. Probabilmente se sarete sconsiderati quanto me nelle politiche di aggiornamento di Gentoo (che ricordo essere rolling release) incapperete anche voi in questo episodio divertente e fonte di pianti e graffi sul volto. Questo errore può essere dato da pacchetti essenzialmente a caso: a me l'ha dato Portage, ma vi incollo quello che ho trovato su qualche forum:
!!! All ebuilds that could satisfy "=xf86-video-ati-9999" have been masked. !!! One of the following masked packages is required to complete your request: - x11-drivers/xf86-video-ati-9999::x11 (masked by: EAPI 4) The current version of portage supports EAPI '3'. You must upgrade to a newer version of portage before EAPI masked packages can be installed. For more information, see the MASKED PACKAGES section in the emerge man page or refer to the Gentoo Handbook.
Figo eh?
È un problema di EAPI. Succede che se si sincronizza il Portage tree senza aver aggiornato prima, passando da un albero molto vecchio all'ultimo disponibile, un numero molto elevato di pacchetti vicino alla cifra "tutti" risulta non supportato e mascherato per colpa del fatto che il vostro Portage è fermo alla EAPI 2, o 3, mentre l'EAPI attualmente supportata è la versione 4. Molto carino. Ho provato ad aggiornare andando per tentativi, ma non ho ottenuto molto: poi l'illuminazione.
L'ispirazione dall'alto dei cieli
Portage offre una soluzione interessante per risolvere questo problema, ossia l'opzione "nodeps" che ci permette di infischiarcene delle dipendenze e continuare come se nulla fosse. L'unico problema sarà reperire le dipendenze di compilazione, ma se abbiamo un sistema non poi così vecchio, comunque il software sarà compilato con la nostra toolchain corrente senza dare grossi problemi. Personalmente me la sono cavata avendo l'illuminazione di dare:
emerge --oneshot --nodeps python
Ho avuto la cura di specificare una versione per Python: la 2.7, che non fosse troppo recente e che supportasse l'ultima versione di Portage. Dopo aver "emerso" Python, magheggiate con la versione utilizzando eselect per cambiare l'interprete. Dopodichè, dovreste andare di revdep-rebuild, ma come abbiamo detto tanti pacchetti sono maskati, quindi non conviene. Meglio prima aggiornare Portage.
emerge --oneshot --nodeps portage
Lasciamo che Portage si installi: la nostra nuova versione di Portage è pronta per girare. A questo punto siamo pronti per aggiornare il sistema.
emerge -uDN world
O magari ricompilate direttamente tutto, dato che comunque se vi accade qualcosa di simile significa che il vostro sistema è veramente obsoleto. Iniziate con GCC, continuate con GLibC, proseguite con il resto. Salud.
Photo courtesy of Kristina Alexanderson (non è bellissimo, il papà stormtrooper che consola il figliolo?)