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