Błąd w rpm?

Jakub Bogusz qboosh w pld.org.pl
Nie, 23 Cze 2002, 01:20:28 CEST


On Sat, Jun 22, 2002 at 01:07:03PM +0200, Adam Gorzkiewicz wrote:
> Witam!
> Oto coś w sam raz na weekend;
> 
> Są dwa spece produkujące ten sam pakiet (np. pakiet-1.0), różniący się tylko 
> release (np. 1 i 2). W obu specach jest:
> 
> %post
> echo "string" >>"plik"
> cat "plik"
> 
> %postun
> cat plik |grep -v "string" >plik.tmp
> cat plik.tmp > "plik"
> rm -f plik.tmp
> echo "string2" >>"plik"
> 
> I teraz:
> #rpm -U pakiet-1.0-1.rpm
> - Podczas %post cat pokazuje, że "plik" zawiera "string"
> - Po instalacji "plik" zawiera oczywiście "string"
> 
> #rpm -U pakiet-1.0-2.rpm
> - Podczas %post "cat" pokazuje, że "plik" zawiera tylko 2 x "string"[1]
> - Po instalacji "plik" zawiera tylko  1 x "string2"[1]
>
> Wniosek: %postun wykonał się nie przed ale dopiero po upgradzie.

To nie błąd - wystarczy wiedzieć, jak rpm realizuje transakcje przy
upgrade. W wersji 4.0.2 można to sprawdzić robiąc -Uhvv, 4.0.4 już tak
łatwo nie pokazuje (może jakoś się da - specjalnie nie szukałem).

Z dokładnością do sposobu nadpisywania plików (tak naprawdę to jest
robione przez zmiany nazwy - i tu są różnice między 4.0.2 a 4.0.4, ze
względu na mechanizm COMMIT/ROLLBACK w 4.0.4), wygląda to tak:
- instalowanie nowych i nadpisywanie już istniejących plików wersjami
  z nowego pakietu
- uruchomienie skryptu %post nowo zainstalowanego pakietu
- usuwanie plików starej wersji pakietu, które nie występują w nowej
- uruchomienie skryptu %postun starej wersji pakietu

Jak widać %post jest uruchamiany zaraz po instalowaniu plików, %postun
po odinstalowywaniu.

> Dalej:
> #rpm -U pakiet-1.0-2.rpm --replacefiles --replacepkgs
> - Podczas %post "cat" pokazuje, że "plik" zawiera 1 x "string" i 1 x 
> "string2"[2]
> - Po instalacji "plik" zawiera po jednej linii "string" i "string2"[2]
> 
> Wniosek: %postun podczas tej operacji nie wykonał się wcale

To już nie jest takie oczywiste, ale wynika z tego, że rpm nie traktuje
"upgrade" do pakietu z tym samym release jako upgrade, tylko
"odświeżenie" pakietu - pliki są instalowane, ale żaden nie jest
kasowany. Widocznie dotyczy to także %postun.
rpm nie uznaje czegoś takiego jak dwie różne wersje z tym samym release.


-- 
Jakub Bogusz    http://prioris.mini.pw.edu.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl