[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FreeBSD Systempflege: Konsistenzcheck in 3 Schritten
[Thread Prev] | [Thread Next]
- Subject: FreeBSD Systempflege: Konsistenzcheck in 3 Schritten
- From: Raphael Eiselstein <rabe@xxxxxxxxx>
- Date: Sun, 27 May 2012 17:27:41 +0200
- To: uugrn@xxxxxxxxxxxxxxx
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/