25.8. Veraltete Dateien, Verzeichnisse und Bibliotheken löschen

Basiert auf Notizen von Anton Shterenlikht.

Aufgrund der ständigen Weiterentwicklung von FreeBSD kann es dazu kommen, dass Dateien (und deren Inhalte) obsolet werden, weil deren Funktionalität entweder in anderen Dateien implementiert wurde, sich die Versionsnummer der Bibliothek geändert hat oder deren Funktion nicht mehr benötigt wird. Dies kann sowohl Dateien und Verzeichnis, aber auch Bibliotheken betreffen. Diese veralteten Dateien sollten daher entfernt werden, bevor Sie Ihr System aktualisieren. Der Vorteil für den Benutzer ist darin zu sehen, dass dessen System (sowie dessen Backup) von nicht mehr benötigten Dateien gereinigt wird. Falls die obsolete Bibliothek Sicherheits- oder Stabilitätsprobleme aufweist, sollte das System ebenfalls aktualisiert werden, um Ihr System sicher zu halten und/oder durch die fehlerhafte Bibliothek verursachte Systemabstürze zu vermeiden. Veraltete Dateien, Verzeichnisse und Bibliotheken sind in der Datei /usr/src/ObsoleteFiles.inc aufgelistet. Die folgenden Anweisungen sollen Ihnen dabei helfen, diese Dateien während der Systemaktualisierung zu entfernen.

Im Folgenden wird angenommen, dass Sie den Anweisungen von Abschnitt 25.7.1 folgen. Nachdem Sie make installworld sowie mergemaster erfolgreich ausgeführt haben, sollten Sie Ihr System auf veraltete Dateien und Bibliotheken hin überprüfen:

# cd /usr/src
# make check-old

Werden dabei veraltete Dateien gefunden, können diese im nächsten Schritt entfernt werden:

# make delete-old

Tipp: Weitere interessante Targets finden sich in der Datei /usr/src/Makefile.

Bei jeder Datei wird nachgefragt, ob Sie diese wirklich löschen wollen. Es ist aber auch möglich, alle Dateien automatisch löschen zu lassen. Dies erreichen Sie, indem Sie die Umgebungsvariable BATCH_DELETE_OLD_FILES entsprechend setzen:

# make -DBATCH_DELETE_OLD_FILES delete-old

Alternativ können Sie auch den folgenden Befehl einsetzen (und jeweils die Antwort yes an die einzelnen Abfragen weiterreichen):

# yes | make delete-old

Warnung: Das Löschen veralteter Dateien kann dazu führen, dass Programme, die auf diese Dateien angewiesen sind, nicht mehr funktionieren. Dies gilt insbesondere für veraltete Bibliotheken. In den meisten Fällen ist es dann notwendig, Programme, Ports und Bibliotheken, welche die veraltete Bibliothek verwenden, neu zu bauen, bevor Sie den Befehl make delete-old-libs ausführen.

Die Ports-Sammlung enthält Werkzeuge, die Ihnen beim Prüfen von Bibliothek-Abhängigkeiten helfen können: sysutils/libchk sowie sysutils/bsdadminscripts.

Veraltete Bibliotheken können zu Konflikten mit neueren Bibliotheken führen und beispielsweise folgende Meldungen verursachen:

/usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5
/usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5

Um diese Probleme zu lösen, müssen Sie zuerst herausfinden, welcher Port die Bibliothek installiert hat:

# pkg_info -W  /usr/local/lib/libtiff.so
/usr/local/lib/libtiff.so was installed by package tiff-3.9.4
# pkg_info -W /usr/local/lib/libXext.so
/usr/local/lib/libXext.so was installed by package libXext-1.1.1,1

Danach deinstallieren Sie den Port und bauen ihn neu, um ihn danach erneut zu installieren. Dieser Vorgang kann durch den Einsatz der Werkzeuge ports-mgmt/portmaster oder ports-mgmt/portupgrade automatisiert werden. Nachdem Sie alle Ports erfolgreich neu gebaut haben (und Sie daher keine veralteten Bibliotheken mehr verwenden) können Sie die veralteten Bibliotheken endgültig entfernen:

# make delete-old-libs

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.