Ovviamente il primo modo è utilizare questo suggerimento e, dopo aver reso disponibile il nostro backup, lanciare un
Code: Select all
emerge -1OC pacchetto ; emerge -1OK pacchettoCode: Select all
tar -xjf /usr/portage/packages/All/pacchetto.tbz2 /Come mi hanno fatto notare per chi è meno esperto potrebbe non esser chiaro cosa voglia dire "sporco". Emerge non si limita a copiare i file da var/tmp/... nel sistema ma ne registra l'elenco e provvede ad eliminare i file delle precedenti versioni proteggendo da sovrascrittura le configurazioni etc.
Riportare brutalmente il contenuto di un applicativo nell'albero principale non solo potrebbe cancellare irrimediabilmente la configurazione del proxy sulla quale abbiamo perso una settimana (per dirne una) ma potrebbe comunque lasciare l'applicativo inutilizzabile a causa di qualche dipendenza di libreria non più necessaria che non è stata "fisicamente eliminata" e sicuramente c'è il rischio di avere dei "falsi positivi" lanciando il comado revdep-rebuild.
Aggiornamento: quando ho scritto questa guida i signori devel non erano così gentili e premurosi da mettere costantemente a disposizione uno stage3 aggiornato ed un repository binario dei pacchetti in esso contenuti.
Quindi, adesso che ci hanno fatto dono di questa preziosa risorsa sarebbe scortese nei loro confronti non approfittarne, soprattutto per un caso tutt'altro che infrequente: sistema funzionante ma gcc incapace a ricompilare se stesso.
Dalla shell della nostra installazione danneggiata o dal chroot basta lanciare
Code: Select all
PORTAGE_BINHOST="http://tinderbox.dev.gentoo.org/default-linux/x86/ emerge -av1DGK =gcc-4.4.5Code: Select all
PORTAGE_BINHOST="http://tinderbox.dev.gentoo.org/default-linux/amd64/ emerge -av1DGK =gcc-4.4.5Nel caso siano altri pacchetti, o si voglia evitare il downgrade di qualcosa ricordo l'opzione -O già illustrata prima.
Per i dettagli ...
Code: Select all
man emergeUn altro metodo, sempre a condizione che emerge funzioni ancora (ad esempio nel caso sia solo tar o bzip a non funzionare), è tramite il comando ebuild ed un cd di installazione minimale o se è il caso da una live basata su gentoo (kentoo, sabayon e simili). Quando si lancia emerge il programma non fa altro che calcolare le dipendenze e chiamare in sequenza ebuild per compilare ed installare i singoli pacchetti. Quindi nulla ci vienta di procedere manualmente a questa operazione. La guida ufficiale per ebuild è qui.
Se la nostra root è montata nel classico /mnt/gentoo la prima cosa è modificare il /etc/make.conf (senza fare chroot per il momento) per inserire la variabile PORTAGE_TMPDIR=/mnt/gentoo/var/tmp e, dopo aver creato la directory /usr/portage diamo un
Code: Select all
mount --rbind /mnt/gentoo/usr/portage /usr/portageA questo punto, lanciamo il comando (per esempio nel caso di bzip2)
Code: Select all
ebuild /mnt/gentoo/usr/portage/app-arch/bzip2/bzip2-ver.ebuild unpackCode: Select all
chroot /mnt/gentooCode: Select all
ebuild /mnt/gentoo/usr/portage/app-arch/bzip2/bzip2-ver.ebuild compile
ebuild /mnt/gentoo/usr/portage/app-arch/bzip2/bzip2-ver.ebuild install
ebuild /mnt/gentoo/usr/portage/app-arch/bzip2/bzip2-ver.ebuild qmergeUltimo metodo, assai interessante, è installare direttamente i pacchetti dalla live sulla gentoo danneggiata. Come sempre ci serve una distribuzione gentoo funzionate da cui partire.
A questo punto direttamente dalla shell della live, purchè sia in grado di funzionare, impostiamo sempre PORTAGE_TMPDIR=/mnt/gentoo/var/tmp e, dopo aver creato la directory /usr/portage e lanciato
Code: Select all
mount --rbind /mnt/gentoo/usr/portage /usr/portageQuindi possiamo persino pensare di usare un comando del genere
Code: Select all
emerge --root=/mnt/gentoo --config-root=/mnt/gentoo -1 gccCode: Select all
emerge --root=/mnt/gentoo --config-root=/mnt/gentoo -1OK python emergeCode: Select all
emerge --root=/mnt/gentoo --config-root=/mnt/gentoo -eOK @systemUn'ultima nota (lo so che sembra ovvio e c'è l'8° corollario alla Legge di Murphy ma ci provo) sulla differenza tra -k e -K e -g e -G: -k installa i pacchetti binari se sono disponibili e con le medesime use flag, se le use sono diverse od i pacchetti non sono disponibili vengono ricompilati, -K installa solo i binari (se ci sono); dunque se stiamo installando usando una gentoo gemella potrebbe andar bene ma, se stiamo lavorando da una live, dobbiamo tener presente che è vero che i pacchetti saranno installati sulla ganto ma il linking sarà effettuato alle librerie della live, che ovviamente potrebbero non corrispondere.
Qu8anto a -g, senza -k/-K installa prendendo i binari solo dalla directory configurata con PKGDIR=vattelappesca, -G solo dal(dai) repository remoto configurato con PORTAGE_BINHOST, -g da entrambi.
Non fate confusione perché già sono operazioni delicate, in attuazione di un tentativo estremo di ripristino, se poi siete pure approssimativi ... chissenefrega, i cocci ed il tempo perso sono vostri non miei.
