Problemiq

Tomasz Kłoczko kloczek w rudy.mif.pg.gda.pl
Śro, 2 Gru 1998, 16:47:04 CET


On Wed, 2 Dec 1998, Wojtek Slusarczyk wrote:

> On Wed, 2 Dec 1998, [ISO-8859-2] Tomasz Kłoczko wrote:
> 
> > A .. z acct to szukam na razie jakiejś logicznej drogi wyjścia z całości.
> > a co do reszty to najbezpiecznie jest wykonać "rpm -e <pakiet>;
> > rpm -U <pakiet>*rpm".
> 
> Ja tylko tak robie .. po prostu tak si przyzwyczilem, ale tutaj chyba nie
> ma w wyjsciwym *.texinfo inforacji nt. accountingu...

Wojtek problem jest o wiele szerszy. Okazuje się, że skrypt %postun nie
jest tak na dobrą sprawę wykonywany po wszystkim w przypadku upgradeu.
Tak własciwie jest on wykonywany przed usunięciem wszystkich plików z
pakietu ze starszej wersji, które nie są wspóldzielone między starą i nową
wersją pakietu. W konkretnym przypadku sysloga, w którym zdecydowałem się
na usunięcie linków /etc/rc.d/rc?.d/* spowodowało to tyle, że ja sobie w
%post wykonuję "chklog --add syslog" co powinno ponakłądać linki wg
informacji zawartych w nagłówku /etc/rc.d/init.d/syslog, a on mi to potem
zamienia na /etc/rc.d/rc?.d/*.rpmsave.

Na razie nie mogę dotrzeć do rozsądku Troyana i mam tego co raz bardziej
po dziurki w uszach. jeżeli rzeczywiście nie mamy czekać to wychodziłoby
na to, że trzeba by zacząć przcować nad włąsną wersją rpm-a.

W szczególności z tych wszystkich udziwnień wychodzą takie paradoksy, że
skrypt %pre czasami tak naprawdę po "if [ $1 == "1"] powinien mieć skrypt
prze deinstalacyjny dla poprzedniej wersji pakietu. Jest to o tyle
porąbane, że tak napradę jak się od instalować to wie tylko stary pakiet w
tym co ma w %preun, %postun, z które nie są wogóle
wykonywany przy upgrade. Wychodzi na to, że nowy pakiet powinien wiedzieć,
jak odinstalowyweać wszystkie mozliwe wersje starego pakietu (totalne
nieporozumienie).

Z tego wszystkiego pokazałem na rpm-list, że nawet RH team w pakietach z
dystrybucji sam się w tym wszystkim nie łapie i wstawiają np w orginalnym
psacct:

%preun                                                                                                        
if [ $1 = 0 ]; then                                                                                           
   /sbin/install-info --delete /usr/info/accounting.info.gz \
   /usr/info/dir --entry= \
   "* accounting: (psacct).         The GNU Process Accounting Suite."
fi

W tym wypadku powyższe nie ma sensu gdyż powyższe zawsze wykona się tylko
przy usuwaniu pakietu i dodawanie tutaj if [ $1 = 0 ].. jest niepotrzebne.
Akurat yen pakiet jest szczególnie zrąbany przez owe niekonsekwencje w
rpm-ie. Np.:

%post                                                                                                         
grep -v '* accounting: (psacct)' < /usr/info/dir > /usr/info/dir.new
mv -f /usr/info/dir.new /usr/info/dir
/sbin/install-info /usr/info/accounting.info.gz /usr/info/dir --entry=\
"* accounting: (psacct).            The GNU Process Accounting Suite."

Pierwsze dwie linijki miały zabezpieczyć przed rejestracją info do psacct
w momencie kiedy jest wykonywany upgrade ale jednocześnie rąbie on
symlinka /usr/info/dir (@#$!).

Pytanie tyllko co z taką sytuacją kiedy poprzednie wersje pakietów będą
miały kilka zależnych od wersji różnych procedur na wypadek deinstalacji
pakietu.
Do tej pory pakiet traktowałem jak zamkniętą całoś. Teraz okazuje się, że
tak nie jest.

Od razu uprzedzam, że dpkg jest jeszcze bardziej niekonsekwentny w
przypadku procedury upgrade-u i tam się wogóle nie uwzgldnia takich rzeczy
i osoby pakujące pakiety mają jeszcze więcej do roboty i przechodzenie na
dpkg nie jest w tym wypadku sensowne.

kloczek
-- 
-----------------------------------------------------------
*Ludzie nie mają problemów, tylko sobie sami je stwarzają*
-----------------------------------------------------------
Tomasz Kłoczko, sys adm @zie.pg.gda.pl|*e-mail: kloczek w rudy.mif.pg.gda.pl*



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