RFC: Reference counter przy zakładaniu uzytkowników

Tomasz Trojanowski tomek w uninet.com.pl
Pon, 7 Cze 2004, 20:05:58 CEST


On Mon, 7 Jun 2004, Arkadiusz Patyk wrote:

> Tomasz Trojanowski (tomek w uninet.com.pl) wrote:
> > Dzisiaj na IRCu został ponownie poruszony problem zakładania (i usuwania) 
> > użytkowników w %pre (i %postun). Już kiedys przerabialiśmy próby 
> > rozwiązania tego problemu za pomocą pakietów users-* albo triggerami.
> > 
> > Wydaje mi się że istnieje jeszce jedno rozwiązanie. Możemy w filesystemie 
> > (wstępnie w /var/lib/users) trzymać licznik referencji. I tak na 
> > przykładzie gdm.
> > 
> > Dotychczas przy zainstalowanym gdm'ie, instalacja xdm'a powoduje usunięcie
> > użytkownika xdm, ponieważ skrypt %postun gdm'a jest wykonywany na samym 
> > końcu.
> > 
> > W przypadku zastosowania licznika referencji.
> > 
> > %pre:
> > - jeżeli użytkownik xdm nigdy dotychczas nie istniał w systemie (zatem 
> >   nie ma pliku /var/lib/users/xdm: tworzony jest ten plik, zakładany jest 
> >   użytkownik xdm i w razie powodzenia do /var/lib/users/xdm wpisywana jest 
> >   wartość 1,
> > - jeżeli użytkownik xdm istnieje już w systemie wartość z pliku xdm jest 
> >   zwiększana o 1
> > 
> > %postun
> > - wartość z pliku xdm jest zmniejszana o 1 i jeżeli jest równa 0, 
> >   użytkownik jest usuwany
> > 
> > Komentarze?
> 
> Nie podoba mi się bo:
> - w kazdym pakiecie musi być zakładanie/usuwanie użytkownika + obsługa
>   liczników 

Teraz też jest (tyle że tylko zakładanie usuwanie), ale można to rozwiązać 
na dwa sposoby, które mogą być nawet użyte jednocześnie:
- osobny pakiet w którym znajdzie się obsługa liczników (chociaż IMO nie 
  będzie to takie obszerne, żeby nie mogło znajdować się w całości w pre i 
  postun)
- makra rpma do zakładania użytkowników (twittner już to właściwie 
  przygotował) i w nich zawarte, zakładanie/usuwanie użytkowników oraz 
  obsługa liczników

> - potencjalne niebezpieczeństwo popsucia sobie pliku z licznikiem -
>   trzeba by zrobić jakieś locki itp

Znaczy się co ? Zamierzasz *jednocześnie* instalować jakieś pakiety -- w 
sensie jeden na jednym terminalu, drugi - na innym? RPM na to nie pozwoli.

> - nie wiemy który pakiet z zainstalowanych w tym momecie potrzebuje
>   danego użytkownika

Dla wcześniejszego przykładu wystarczy:

Provides: user(xdm)
 
> Ja zdecydowanie widziałbym userów w osobnym pakiecie + tylko Requires
> w pakietach które je potrzebują.
> Z usuwaniem niepotrzebnych userów też nie ma problemu, bo
> wystraczy: 
> 
> $ rpm -qa | grep user- | xargs rpm -e

$ rpm -q --provides | grep user\( | xargs rpm -q --whatprovides | xargs \
  rpm -e

Co prawda bardziej karkołomne. Ale się da ;)

Pozdrawiam

-- 
Tomasz Trojanowski (tomek w uninet.com.pl)

"Between depriving a man of one hour from his life and depriving him of
his life there exist only a difference of degree." (FH, Dune Messiah)



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