Przywracanie poprzedniej wersji pakietu

Czasami bywa tak, że po aktualizacji systemu jakiś program przestaje działać. Przyczyn tego problemu może być wiele, jednak najczęściej jest to spowodowane błędami twórcy aplikacji, bądź niedostatecznym testowaniem nowej paczki. Co w tej sytuacji można zrobić? Odpowiedź oczywiście nasuwa się sama, przywrócić poprzednią działającą wersję programu.

Poldek

W najprostszym scenariuszu możemy skorzystać z poldka. Jeśli w repozytorium PLD znajduje się stara wersja paczki „jesteśmy w domu”. Wystarczy w poldku wykonać polecenie:

poldek:/all-avail> install --downgrade nazwa-starszego-pakietu-wraz-z-wersją

Na przykład:

poldek:/all-avail> install --downgrade libpng-1.2.35-2.i686

Zwracam uwagę, że nie postępujemy w tym przypadku jak podczas zwykłej instalacji pakietu. Konieczne jest użycie opcji –downgrade oraz wskazanie pełnej nazwy pakietu, wraz z jego wersją. Jest to bardzo ważne. Gdybyśmy tego nie uczynili menadżer pakietów nie wiedziałby którą wersję przywrócić. Samo wywołanie polecenia instalacji, bez opcji –downgrade, skutkowałoby wyświetleniem błędu:

poldek:/all-avail> install  libpng-1.2.35-2.i686 
libpng-1.2.35-2.i686: newer version installed, skipped
Nie ma roboty  

Wszystko wygląda bardzo prosto gdy w repozytorium znajduje się starsza wersja programu. Sprawa zaczyna się komplikować w przypadku kiedy jej nie ma.

RPM

Jeśli aktualizacji systemu dokonaliśmy niedawno istnieje szansa, że poprzednia wersja pakietu znajduje się w „kopii bezpieczeństwa” RPM (poldek jest dla niego nakładką, z prostym interfejsem). Wystarczy jedynie przeszukać katalog:

/var/spool/repackage/ 

i jeśli mamy szczęście, w którymś z jego podkatalogów, znajdziemy ostatnio usuniętą, poprzednią wersję pakietu.

[root@pld repackage]# pwd 
/var/spool/repackage
[root@pld repackage]# find . -name "libpng*"
./1254352474/libpng-1.2.35-2.i686.rpm
./1254352474/libpng-devel-1.2.35-2.i686.rpm

Aby ją teraz przywrócić musimy „ręcznie” wykonać wszystkie operacje, z których wyręcza nas poldek.

[root@pld 1254352474]# pwd
/var/spool/repackage/1254352474
[root@pld 1254352474]# rpm -qa | grep ^libpng
libpng-1.2.37-1.i686
libpng-devel-1.2.37-1.i686
[root@pld 1254352474]# rpm --test -v -e --nodeps libpng libpng-devel
Zapisano: /var/spool/repackage/1254395300/libpng-devel-1.2.37-1.i686.rpm
Zapisano: /var/spool/repackage/1254395300/libpng-1.2.37-1.i686.rpm
[root@pld 1254352474]# rpm  -v -e --nodeps libpng libpng-devel       
Zapisano: /var/spool/repackage/1254395313/libpng-devel-1.2.37-1.i686.rpm
Zapisano: /var/spool/repackage/1254395313/libpng-1.2.37-1.i686.rpm
[root@pld 1254352474]# rpm -qa | grep ^libpng                        
[root@pld 1254352474]# rpm -hiv libpng-1.2.35-2.i686.rpm libpng-devel-1.2.35-2.i686.rpm                         
ostrzeżenie: libpng-1.2.35-2.i686.rpm: Nagłówek V4 sygnatura DSA: NOKEY, key ID e4f1bc2d
Przygotowywanie...          ########################################### [100%]
   1:libpng                 ########################################### [ 50%]
   2:libpng-devel           ########################################### [100%]
[root@pld 1254352474]# rpm -qa | grep ^libpng                                            
libpng-devel-1.2.35-2.i686
libpng-1.2.35-2.i686
[root@pld 1254352474]# 

Krótkie omówienie. Rozpoczynamy od usunięcia nowszej wersji pakietu, w tym konkretnym przypadku są to dwa pakiety: libpng, libpng-devel.

[root@pld 1254352474]# rpm  -v -e --nodeps libpng libpng-devel       
Zapisano: /var/spool/repackage/1254395313/libpng-devel-1.2.37-1.i686.rpm
Zapisano: /var/spool/repackage/1254395313/libpng-1.2.37-1.i686.rpm

Warto korzystać z opcji –nodeps, która zapewnia, że żadne inne pakiety, poza wskazanymi, nie zostaną usunięte. Następnie instalujemy starsze wersje:

[root@pld 1254352474]# rpm -hiv libpng-1.2.35-2.i686.rpm libpng-devel-1.2.35-2.i686.rpm                         
ostrzeżenie: libpng-1.2.35-2.i686.rpm: Nagłówek V4 sygnatura DSA: NOKEY, key ID e4f1bc2d
Przygotowywanie...          ########################################### [100%]
   1:libpng                 ########################################### [ 50%]
   2:libpng-devel           ########################################### [100%]

Voila! To wszystko. Dla pewności możemy sprawdzić za pomocą grepa, czy wszystkie operacje się powiodły, jak to uczyniłem w przykładzie.

Korzystanie z „kopii bezpieczeństwa” ma jeszcze jedną ważną zaletę. Pakiety znajdują się od razu u nas na dysku i nie musimy ściągać ich ponownie z repozytorium.

Pozostał nam jeszcze jeden przypadek do omówienia. Co robić kiedy ani w poldku, ani w „kopii bezpieczeństwa” nie ma naszego programu?

CVS

Jeśli chcemy sprawę rozwiązać sami, możemy zbudować odpowiedni pakiet z CVS. Musimy jedynie wskazać builderowi odpowiednią rewizję (opcja -r), aby zbudował dobrą wersję a nie najnowszą. Właściwy numer znajdziemy przeglądając speca dla danej paczki.

Załóżmy, że chcemy zbudować wersję 1.2.35 (wydanie drugie) pakietu libpng. Zaglądamy do speca i widzimy:

Revision 1.165  2009/02/27 11:25:36  glen
 - release 2 
 Revision 1.164  2009/02/20 13:27:44  adamg
 - cve entry for 1.2.35

Czyli w naszym konkretnym przypadku polecenie miałoby postać:

[dirdival@pld packages]$ builder -r 1.165 libpng

Jeśli uda nam się zbudować paczkę po prostu instalujemy ją poldkiem.

Ostatnia możliwość to zdanie się na łaskę, bądź niełaskę innych, czyli poproszenie na forum bądź liście PLD o konkretną paczkę.

Podsumowanie

Czasami bywa tak, że o problemie z systemem dowiadujemy się jakiś czas później, niż w momencie w którym on zaistniał. Namierzenie „winnego” może być wtedy kłopotliwe. RPM może nam w tym pomóc, pozwala on bowiem na wyświetlenie listy zainstalowanych pakietów, posortowanej po dacie aktualizacji:

rpm -qa --last

Polecam wszystkim przetestowanie choć raz procedury przywracania poprzedniego pakietu a zwłaszcza metody z RPM. Raz felerna aktualizacja systemu zainstalowała u mnie niedziałającą wersję poldka. Wtedy musiałem posiłkować się opisanymi wyżej „sztuczkami”.

Na koniec najważniejsze. Nie zapomnij o zaistniałych problemach z paczkami poinformować innych użytkowników PLD. Możesz to uczynić na forum lub liście dyskusyjnej deweloperów.

pl/przewodniki/przywracanie-poprzedniej-wersji-pakietu.txt · ostatnio zmienione: 2009/10/01 16:04 przez dirdival
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 Powered by Lighttpd - fly light