"agresywne" skrypty w pakietach

Tomasz Kłoczko kloczek w rudy.mif.pg.gda.pl
Pią, 31 Sty 2003, 18:12:19 CET


On Thu, 30 Jan 2003, Robert R. Wal wrote:

> On 03.01.30 Andrzej Szombierski pressed the following keys:
> 
> > Ostatnio zaczęło mnie trochę denerwować zachowanie skryptów w pakietach 
> > wykonywanych np. przy upgradzie. Przykładowo nfs-utils-clients przy 
> > upgradzie przemontowuje wszystkie filesystemy nfs. I nie byłoby w tym nic 
> > złego, gdyby nie to że przy okazji killuje wszystkie procesy, które z nich 
> > aktualnie korzystają. Sytuacja jest jeszcze ciekawsza, jeżeli aktualnie 
> > instalowany pakiet znajduje się na takim nfsie :)
> 
> Z tym jest problem, który polega na tym, że (chyba) nie da się rozróżnić
> z punktu widzenia skryptów w specu między -e a -U. Standardowo w %preun
> jest wywoływany /etc/rc.d/init.d/skrypt stop.

Gadzinka .. da się i robimy to w wielu miejscach. Przykład z pod ręki 
(mysql):

%postun
[ ! -x /usr/sbin/fix-info-dir ] || /usr/sbin/fix-info-dir -c %{_infodir} >/dev/null 2>&1
if [ "$1" = "0" ]; then
        /usr/sbin/userdel mysql
        /usr/sbin/groupdel mysql
fi

to 'if [ "$1" = "0" ]' to właśnie sparawdzanie czy jest to upgrade czy 
usuniecie pakietu.

> Co przy skrypcie nfsfs oznacza odmontowanie partycji, a żeby to zrobić,
> trzeba zabić procesy, które na niej grasują.
> 
> Jedyną metodą jaką jestem w stanie wymyślić to całkowita rezygnacja z
> restartu nfsfs w %preun, ale to by oznaczało, że po usunięciu pakietu
> zostanie podmontowany fs.
> 
> Jakkolwiek tego nie zrobisz, będą jakieś kłopoty.

W przypadku nfsf to jest rzeczywiście byk bo tu nie ma konicznosci 
wykonywanai remount.
Co do xdm/kdm/gdm to sparwa nie jest jzu tak jednoznaczna. Chodzi o to, po 
pugrade bez restartu zajmowana jest pamięć przez procesy których binarek 
juz nie ma. Przy relatywnie małej ilosci pamieci powoduje ot zapychanie 
całości. Rozwiazania:

- zamiast restart w %post robuić reload i pzrygotować na to resztę 
  zawartości pakeitu,
- wymyślić mechaniz per apliakcja który umożliwiłby wychwycenie sytucji w 
  której można watrunkowo wykonac pełny restart. Np. w przypadku XDM dałby 
  się chyba przechwycić info o tym czy ma on otwartą jakąś sesję. Tak mi 
  się wydaje, że to w jakis sposób musi być osiągalne bo głółny proces 
  musi zapewne wiedzieć że ma odpalone jakieś child procesy. Jęzlie taki 
  status w samej aplikacji byłby gzieś pzrechowywany to wystarczy że 
  uruchamiany XDM na jakąś opcję komunikowałby sie tym który jest właśnie 
  uruchomionym i odpytywał czy mozna mu dać bezpiecznei w czapę czy nalezy 
  zaczekać.


> > Z kolei xdm przy upgradzie zcina otwartą sesję Xów (w moim przypadku 
> > właśnie na tej sesji pracował apt-get...)
> > 
> > Czy jest jakiś sposób na zabezpieczenie się przed takimi 
> > "niespodziankami"?
> 
> Do tych niespodzianek mogę dołożyć jeszcze jedną. Kiedy na moim
> serwerze -- który oprócz serwowania plików, poczty, bycia firewallem jest
> także fontserwerem -- apgrejduję xfs, sesja X spod której ciągnę z niego
> fonty zaczyna głupieć.

Tu jest jakis ogólniejszy feler X w komunikacji miedzy X serwerem i xfs.
Nie może być tak żeby majać powidzmy setke stacji korzystajacych z jednego 
xfs nei można było go zrestartować bo wszystko zgłupieje. Wystarczyłaby w 
sumie jakaś małąneistabilność czy coś podobnego żeby trzeba było wszystkei 
X sesje restartować .. głupie czyż nie ? IMHO tu byk jest niżej i zamiat 
go obchodzić choćby należy o nim krzyczeć w skrzynki ludziom od XFree86.
To powinno byc tak jak z NFS .. restart serwer czy jego nawet chwilowy 
zanik nie powoduje niczego innego po za chwilowyym wstrzymaniem pewnych 
czynności.

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-users-pl