[Th] Upgrade apport - jak rozumieć ten błąd?

Tomasz Pala gotar w polanet.pl
Śro, 9 Kwi 2008, 20:32:52 CEST


On Wed, Apr 09, 2008 at 18:00:52 +0200, Patryk Zawadzki wrote:

> >  Żeby uzupełnić - to jest zarzut także do Ac. W zasadzie nic, co korzysta
> >  z webapps, nie mogę normalnie zaktualizować, bo robi swoje czary-mary na
> >  moich plikach i z mojego punktu widzenia - psuje je.
> 
> Powinno tworzyć tylko symlinki. Jak psuje?

Ostatni upgrade phpPgAdmina usunął mi link

/etc/httpd/httpd.conf/99_phpPgAdmin.conf

O ile był on tworzony w %post oryginalnego pakietu i jego usunięcie
można w ten sposób tłumaczyć, to jednak nie należał do pakietu, nie był
oznaczany żadnymi flagami (%ghost %config %verify itp.) i w gruncie
rzeczy mógłby być dowolnym linkiem do jakiegoś alternatywnego pliku
konfiguracyjnego - w ten sposób do webapps trafi jakiś tam obcy plik
/etc/phpPgAdmin/apache-phpPgAdmin.conf.rpmsave, a ja nie będę wiedział,
co powinno być zlinkowane - krótko mówiąc tu powinno być sprawdzenie,
czy kasowany link wskazuje tam, gdzie był zakładany starym pakietem.

Po drugie: konstrukcje typu poniższego zamieniłbym w ten sposób:

if [ -f /etc/phpPgAdmin/apache-phpPgAdmin.conf.rpmsave ]; then
        if [ -d /etc/apache/webapps.d ]; then
                cp -f /etc/webapps/phpPgAdmin/apache.conf{,.rpmnew}
-               cp -f /etc/phpPgAdmin/apache-phpPgAdmin.conf.rpmsave /etc/webapps/phpPgAdmin/apache.conf
+               mv -f /etc/phpPgAdmin/apache-phpPgAdmin.conf.rpmsave /etc/webapps/phpPgAdmin/apache.conf
        fi

        if [ -d /etc/httpd/webapps.d ]; then
                cp -f /etc/webapps/phpPgAdmin/httpd.conf{,.rpmnew}
-               cp -f /etc/phpPgAdmin/apache-phpPgAdmin.conf.rpmsave /etc/webapps/phpPgAdmin/httpd.conf
+               mv -f /etc/phpPgAdmin/apache-phpPgAdmin.conf.rpmsave /etc/webapps/phpPgAdmin/httpd.conf
        fi
-       rm -f /etc/phpPgAdmin/apache-phpPgAdmin.conf.rpmsave
fi

zagrożenia - w przypadku, gdy ktoś nie będzie miał
/etc/{apache,httpd}/webapps.d (bo sytuacja wymusiła na nim nodepsa, bo
rpm czy poldek zgłupiał z kolejnością, bo akurat sobie przenosił
katalog, bo cały katalog z konfiguracją apacha ktoś ma podlinkowany), to
nie będzie miał ani kopii, ani oryginału.

> Tego nie robi post, tylko rpm. Usuwasz katalog (przez odinstalowanie
> ostatniego właściciela) - usuwasz zawartość. Jak byś chciał inaczej?

Nie, rpm nie usuwa niepustych katalogów - swoje pliki trzymałem pod
innymi nazwami (żeby mi upgrade nie nadpisał, bo to przecież nie było
%config(noreplace) oznaczone), więc pozostały w katalogu. Stary rpm miał
jeszcze taką miłą cechę, że w takim przypadku wyrzucał informację, że
nie usuwa katalogu. A w którym miejscu %post zostało usunięte -
pokazałem linkiem niżej.

> >  http://cvs.pld-linux.org/cgi-bin/cvsweb/SPECS/xkeyboard-config.spec?r1=1.7&r2=1.8
> 
> Nie ma innego sposobu, żeby zastąpić symlink zwykłym plikiem albo
> katalogiem. Jeśli to nie był symlink, to ścigaj autora, żeby odkręcił.

To był katalog, który został zastąpiony plikiem. Inny sposób jest -
naprawienie rpma, żeby obsługiwał takie sytuacje bez odwoływania się do
rm -rf. I zauważcie - w tym przypadku wystarcza, aby nie używać opcji
-r, w myśl zasady, że lepiej przerwać wykonywanie transakcji rpma, niż
usunąć czyjeś pliki - bo skoro pozostało COŚ w katalogu, COŚ nienależące
do pakietu, to musi mieć innego właściciela.

-- 
Tomasz Pala <gotar w pld-linux.org>


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