dodawanie i usuwanie grup w pakietach
Tomasz Kłoczko
kloczek w rudy.mif.pg.gda.pl
Czw, 8 Maj 2003, 14:36:55 CEST
On Thu, 8 May 2003, Andrzej Krzysztofowicz wrote:
[..]
> > Czyli mam zainstlowany server tftpd bez uzytkownika tftp. Cale podejscie
> > jest po prostu bledne z prostej przyczyny: pakiet1 nie wie, ze pakiet2
> > potrzebuje danego uzytkownika/grupy.
>
> Od dluzszego czasu pare osob zwraca uwage, ze aby to dzialalo trzeba miec
> w kazdym sposrod n pakietow wymagajacych tego usera n-1 triggerow...
> Tylko nie ma komuy tego zrobic. Mysle, ze do tego czasu nalezaloby
> wykomentowac usuwanie uzytkownika.
Dobra spróbowałem sie z tym zmierzyć.
Wyniki: wzioałem tftp.spec i utftpd.spec. W utftpd.spec dodałem poniższe i
symetrycznie w tftp.spec.
$ cvs diff -u utftpd.spec
Index: utftpd.spec
===================================================================
RCS file: /cvsroot/SPECS/utftpd.spec,v
retrieving revision 1.54
diff -u -r1.54 utftpd.spec
--- utftpd.spec 22 Nov 2002 10:15:19 -0000 1.54
+++ utftpd.spec 8 May 2003 12:09:34 -0000
@@ -138,6 +138,7 @@
fi
%post -n utftpd
+echo "*** post utftpd."
if [ -f /var/lock/subsys/rc-inetd ]; then
/etc/rc.d/init.d/rc-inetd restart 1>&2
else
@@ -148,6 +149,7 @@
echo "done"
%postun -n utftpd
+echo "*** postun utftpd."
if [ -f /var/lock/subsys/rc-inetd ]; then
/etc/rc.d/init.d/rc-inetd restart
fi
@@ -155,6 +157,16 @@
if [ "$1" = "0" ]; then
echo "Removing user tftp."
/usr/sbin/userdel tftp
+fi
+
+%triggerin -- tftpd
+echo "*** trigger in utftpd for tftpd"
+echo "Adding user tftp UID=15."
+/usr/sbin/useradd -u 15 -r -d /var/lib/tftp -s /bin/false -c "TFTP User" -g ftp tftp 1>&2
+if [ -f /var/lock/subsys/rc-inetd ]; then
+ /etc/rc.d/init.d/rc-inetd restart 1>&2
+else
+ echo "Type \"/etc/rc.d/init.d/rc-inetd start\" to start inet server." 1>&2
fi
%files
Czyli powyższe zawiera wypisywanie komunikatów kontrolnych (żeby było
widać oc sie dizeje + wywołanie skryptu króry wydawało mi się ze powinien
działać jak należy czyli że przy usuwaniou tftpd o ile jest instalwoany
utftpd powinien ponownie dodać użytkownika i na wszelki wypadek
zrestartować rc-inetd.
Analogicznie jak powyzsza modyfikacja wyglada poprawka dla tft.spec.
Budowanie -> rpm -i utftpd -> rpm -U tftpd
Wynik:
# rpm -U tftpd-0.17-21.i686.rpm
*** post tftpd.
Generating /etc/rlinetd.conf for rlinetd...........................[ ZROBIONE ]
Reload rlinetd service configuration...............................[ ZROBIONE ]
*** trigger in utftpd for tftpd
Adding user tftp UID=15.
useradd: użytkownik tftp istnieje
Zatrzymywanie uslugi rlinetd.......................................[ ZROBIONE ]
Generating /etc/rlinetd.conf for rlinetd...........................[ ZROBIONE ]
Uruchamianie uslugi rlinetd........................................[ ZROBIONE ]
*** postun utftpd.
Zatrzymywanie uslugi rlinetd.......................................[ ZROBIONE ]
Generating /etc/rlinetd.conf for rlinetd...........................[ ZROBIONE ]
Uruchamianie uslugi rlinetd........................................[ ZROBIONE ]
Removing user tftp.
i w drugą stronę ..
# rpm -i utftpd-0.2.4-13.i686.rpm
Adding user tftp UID=15.
*** post utftpd.
Zatrzymywanie uslugi rlinetd.......................................[ ZROBIONE ]
Generating /etc/rlinetd.conf for rlinetd...........................[ ZROBIONE ]
Uruchamianie uslugi rlinetd........................................[ ZROBIONE ]
Rebuilding utftpd configuration... done
*** trigger in utftpd for tftpd
Adding user tftp UID=15.
useradd: użytkownik tftp istnieje
Zatrzymywanie uslugi rlinetd.......................................[ ZROBIONE ]
Generating /etc/rlinetd.conf for rlinetd...........................[ ZROBIONE ]
Uruchamianie uslugi rlinetd........................................[ ZROBIONE ]
Hmm .. działa to troche inaczej niż się spodziewałem i trochę inaczej w
związku ztym trzeba będzie do tego podejsć ale nadal wydaje się jest możliwe
zrealizowanie odpowidniego podejścia wzorcowego.
Jeszcze muszę się temu przyjrzec i pomyśleć.
Z dokumentacji wynika że kolejnosć wykonywanai skryyptrów przy upgrade
pakietu generuje nasepujaca kolejnosć wołań skryptów:
new-%pre for new version of package being installed
... (all new files are installed)
new-%post for new version of package being installed
any-%triggerin (%triggerin from other packages set off by new install)
new-%triggerin
old-%triggerun
any-%triggerun (%triggerun from other packages set off by old uninstall)
old-%preun for old version of package being removed
... (all old files are removed)
old-%postun for old version of package being removed
old-%triggerpostun
any-%triggerpostun (%triggerpostun from other packages set off by old un
install)
Jakoś nie widzę nic w dok na temat kolejności wołania %postun gdy jeden
pakiet przez Obsoletes zastępuje się drugim (jak napisałęm powyższe to tylko
upgrade pakietu), a wychodzi z powyższego że %postun usuwanego pakietu jest
wykonywane na końcu a przed any-%triggerpostun (?) co umozliwiałoby w
%triggerpostun dodanei jeszcze raz użytkownika i wykonanie restartu.
Potencjalnie całość możnaby skrócić o ile od razu byłoby wiadomo że chodzi o
Obsoletes co możnaby przekazać przez jakis plik zakłądany touchem i
sprawdzany w %postun usuwanego pakietu. Tak czy inaczje do poprawnego
działania potrzebna jest pełna symetria rozwiązania.
Coś mi tu tak czy inaczej nie pasuje .. :>
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