[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FreeBSD Systempflege: Konsistenzcheck in 3 Schritten


Hallo zusammen,

ich habe in letzter Zeit einige Jails aktualisiert, v.a. aus Ports. Wer
sowas schonmal ueber laengere Zeit hinweg gemacht hat, wird irgendwann
bemerkt haben, dass die Dinge inkonsistent werden und dass sich das nur
schwer erkennen oder aufloesen laesst.

Ich verwende zur Konsistenzpruefung 3 Tools:

pkgdb -F: prueft, ob alle Abhaengigkeiten formal erfuellt sind. pkgdb -F
sollte in unter einer Minute durchgelaufen sein und keinen output
erzeugen, wenn alles okay ist. Falls nicht, hat man gleich was zu tun.

Es kann passieren, dass sich verschiedene Ports / Packages gegenseitig
Files ueberschreiben und beim Update dann in einer unguenstigen
Reihenfolge deinstallieren. Im Ergebnis fehlen nachher Files oder das
was gerade im Filesystem liegt stimmt nicht mit dem ueberein, was laut
Paketmanagement installiert sein sollte.

pkg_info -ag vergleicht anhand der Infos aus dem Paketmanagement die
Existenz und Checksummen aller Dateien. Einzelne Wenige Files sind dabei
*immer* mit einer falschen Checksumme dabei, weil es sich hier zB um
index-Files handelt, wo dann andere Ports spaeter noch eigene Sachen
anhaengen oder modifizieren. Das ist okay. 

Kritisch sollte man sein bei checksummen von binaries (*bin/*) und 
Libraries (zB *.so). Mit dem Tool "pkg_which /path/to/file" kann man das
paketmanagement befragen, welcher Port das File geliefert hat, kann
passieren, dass hier 2 Ports erscheinen, zB ghostscript8 und
ghostscript9. In jedem Fall sollten konkurrierende Versionen behoben
werden und zur Sicherheit der jeweilige Port / Package neu installiert
werden.

Wenn "pkgdb -F" und "pkg_info -ag" dann gut aussehen, kann man mit dem
Tool "libchk" nochmal ueber alle Binaries checken, dass benoetigte
libraries auch tatsaechlich gefunden werden. Es werden auch "Unreferenced
Libraries" angezeigt, das ist aber unkritisch, nicht alle gelieferten
Libs werden auch tatsaechlich referenziert oder aber werden zur Laufzeit
nachgeladen, was dann ueblicherweise nicht durch "ldd" erkannt wird.

Wenn  "pkgdb -F", "pkg_info -ag" und "libchk" gut aussehen, dann sollte
es keine schlimmen Bugs im System mehr geben.

Noch 2 Tools zur Systempflege:

Fuer Upgrades empfehle ich "portupgrade", wobei das Tool viele Dinge gut
kann aber bei unbedachtem Einsatz von "-O" und "-f" gerne auch mal Chaos
verursacht.

Im Laufe der Zeit installiert man sich ueber Abhaengigkeiten irgendwelche
Libs, die spaeter dann nicht mehr benoetigt werden. Das Tool
"pkg_cutleaves" zeigt alle Pakete an, die nicht von einem anderen Paket
benoetigt werden, zum Beispiel "bash" oder "coreutils". Ueblicherweise
will man die aber dennoch behalten. Zeigt das Tool irgendwas mit
"libXY-47.11" an und man kann sich nicht erinnern, wozu das gut ist,
kann man es deinstallieren lassen. Etwaige Abhaengigkeiten von diesem
Paket werden dann in der 2. Runde abgefragt.

Bei UUGRN und Stadtwiki e.V. betreibe ich das ganze allerdings etwas
zentralisierter. In einem Buildsystem update ich alle Ports und baue
alle benoetigten Packages. Dabei treten immer irgendwelche Probleme auf, 
die ich fixe. Ich erzeuge aus jedem Port, den ich benoetige ein Package, 
aktuell knapp unter 1000 Ports). 

Sobald alle Packages auf die aktuelle Version upgedatet sind und alle 
Checks (pkg_info -ag, pkgdb -F, libchk, ... ) gut aussehen, mache ich 
noch einen letzten Package-Dependency-Check, d.h. dass die in den Packages
referenzierten Abhaengigkeiten auch in exakt der angeforderten Version
vorliegen. Sollte das irgendwo nicht der Fall sein, dann loese ich das
durch Neubau der entsprechenden Packages auf.

Sobald alle QS-Massnahmen erfolgreich sind, lade ich /usr/ports und damit
auch /usr/ports/packages/ auf den UUGRN-Server hoch ("release").
Basierend auf diesen Ports+Packages update ich dann die Jails auf dem
Vereinsserver.

Das hat den Vorteil, dass ich mich beim Upgrade der jeweiligen Jails
sehr stark darauf verlassen kann, dass durch "Drueberinstallieren" von
Packages die Welt konsistenter wird, in schlimmen Faellen kann ich dann
auch Uebeltaeter aus dem Jail einfach raushauen (pkg_delete -f) und per
pkg_add einfach ein frisches Package drueberlegen. "portupgrade -arfPPOk"
in einem Jail sorgt dafuer, dass *alle* Packages neu installiert werden
und auch alle Abhaengigkeiten aus Packages nachinstalliert werden.

Nach so einer Upgrade-Session verwende ich die drei eingangs erwaehnten 
Tools, um die Konsistenz sicher zu stellen. Probleme die dabei auffallen 
lassen sich dann oft einfach iterativ durch "pkg_delete -f" und 
"pkg_add /usr/ports/packages/All/foo-47.11.tbz" beheben.

Gruss
Raphael

-- 
Raphael Eiselstein <rabe@xxxxxxxxx>               http://rabe.uugrn.org/
xmpp:freibyter@xxxxxx  | https://www.xing.com/profile/Raphael_Eiselstein   
GnuPG:                E7B2 1D66 3AF2 EDC7 9828  6D7A 9CDA 3E7B 10CA 9F2D
.........|.........|.........|.........|.........|.........|.........|..



-- 
UUGRN e.V. http://www.uugrn.org/
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/