Wznowienie emerge
Przerwa w emerge -e system lub emerge -e world
Podczas instalacji systemu nadziałem się na błąd emerge -e system po kilkudziesięciu dużych pakietach. Wynikł on z błędnego obliczenia zależności -- brakowało autoconfa. No, ale jak go doinstaluję z zależnościami, to emerge --resume każe się wypchać i trzeba będzie od nowa rozpoczynać emerge -e system. Ciężka sprawa.
Jak głosi moje motto - lenistwo matką potrzeby, czyli babcią wynalazku: a skąd właściwie emerge --resume wie, co jeszcze zainstalować? Ruszyłem tym tropem na innym komputerze i znalazłem: plik /var/cache/edb/mtimedb zawiera między innymi te informacje. Zaryzykowałem - zrobiłem kopię tego pliku, doinstalowałem autoconfa, przywróciłem kopię i voila! emerge --resume grzecznie wznowił instalacje systemu od przerwy. Minus jest taki, że pakiety autoconfa będą jeszcze raz instalowane (bo były one na liście --resume, tyle, że później), ale plus jest taki, że nie musze jeszcze raz instalować kobyłek typu glibc czy gcc...
Ostatnio znalazłem inną przydatną właściwość emerge - jeżeli instalacja się przerwie i doinstaluje się jeden pakiet (czyli bez zależności), to baza mtimedb nie jest nadpisywana i emerge --resume zadziała prawidłowo.
Przerwa w zwykłym emerge
Często zdarzało się wam puścić emerge -DuN world wieczorem i zobaczyć rano, że poddał się na pierwszym pakiecie? Jeśli tak, to macie tu szybkie rozwiązanie problemu (nazwałem to forceemerge):
emerge $@
until emerge --resume --skipfirst; do
echo "Trying again"
done
Działa to tak, że w sytuacji, gdy emerge zakończy się błędem, system kontynuuje aktualizację z pominięciem owego błędnego pakietu. Pętla kończy się prawie poprawnie, gdyż emerge -resume -skipfirst przy braku pakietów do wznowienia zwraca kod zero ("OK"). Z drugiej strony rozwiązanie jest naprawdę brudne, gdyż:
- po pierwsze: jak pierwszy emerge nie może rozwiązać zależności, to skrypt się zapętla — emerge --resume --skipfirst nie skraca listy pakietów do zainstalowania, w związku z czym pętla nigdy się nie kończy.
- po drugie: jeżeli później instalowany pakiet naprawdę zależy od aktualizacji wcześniejszego, to cały system może się rozjechać. To akurat można na ogół rozwiązać robiąc revdep-rebuild. Zalecam go stosować zawsze po użyciu forceemerge.
- Wersja do wydruku
- Odpowiedz
- 607 odsłon
- Wersja PDF


Ostatnie odpowiedzi
6 tygodni 6 dni temu
7 tygodni 2 dni temu
7 tygodni 2 dni temu
7 tygodni 6 dni temu
14 tygodni 3 dni temu
14 tygodni 4 dni temu