Jails upgraden mit freebsd-update
freebsd-update[Bearbeiten]
freebsd-update ist offiziell nicht dazu geeignet um Jails upzudaten/upzugraden. Beim Upgrade von zum Beispiel 10.3-RELEASE-p10 auf 11.0-RELEASE-p1 muss zuvor das darunter liegende Betriebssystem und Kernel auf 11.0-RELEASE-p1 upgegraded werden (das geht regulär mit freebsd-update upgrade -r 11.0-RELEASE).
aktuelles Release ermitteln[Bearbeiten]
Das Problem von freebsd-update upgrade -r 11.0-RELEASE im Jail ist, dass das Userland im Jail auf 10.3-RELEASE-p10 steht, der Kernel aber schon auf 11.0-RELEASE-p1 läuft. freebsd-update nutzt zur Ermittlung der aktuellen Version allerdings uname -r was immer des Release-String des bereits laufenden Kernels meldet, also 11.0-RELEASE-p1 statt der Version des Userlands im Jail (wäre 10.3-RELEASE-p10).
Glücklicherweise kann man die Ausgabe von uname -r beeinflussen und zwar durch setzen der Umgebungsvariable UNAME_r zum Beispiel auf den String 10.3-RELEASE-p10. Damit erhält dann freebsd-update wenn es uname -r ausführt eben diesen String aus dem Environment und nicht den Wert von kern.osrelease:
# sysctl -n kern.osrelease 11.0-RELEASE-p1
ENVIRONMENT An environment variable composed of the string UNAME_ followed by any flag to the uname utility (except for -a) will allow the corresponding data to be set to the contents of the environment variable.
Seit 10.x-RELEASE gibt es das hilfreiche Tool "freebsd-version", welches mit "-u" den Release-Stand des Userlands zurückgibt.
The following options are available: -k Print the version and patch level of the installed kernel. Unlike uname(1), if a new kernel has been installed but the system has not yet rebooted, freebsd-version will print the version and patch level of the new kernel. -u Print the version and patch level of the installed userland. These are hardcoded into freebsd-version during the build.
freebsd-update für upgrade auf 11.0-RELEASE[Bearbeiten]
Alles zusammmen genommen ergibt dann folgenden Ablauf für ein Userland-Update im Jail mittels freebsd-update:
#### fetch 10.3 und 11.0 delta # export UNAME_r="$(freebsd-version -u)" # freebsd-update upgrade -r 11.0-RELEASE ### to be sure # export UNAME_r="$(freebsd-version -u)" ### install kernel (not needed in jail but freebsd-update does this on upgrade) # freebsd-update install ### no need to reboot/restart a jail here! ### install userland, new libraries and binaries # freebsd-update install ### use pkg-static to upgrade pkg to new ABI (freebsd:11:x86:64) # pkg-static install -f pkg ### Update repositories # pkg update -f ### Upgrade all packages # pkg upgrade -f ### Check for any leftovers, packages not freebsd:11: ABI, missing packages cannot be upgraded # pkg query '%n|%q' | grep -Fv "freebsd:11:" ### last step: remove any stale shared libraries and files # freebsd-update install
3rd party packages prüfen nach upgrade[Bearbeiten]
Beispiel, wenn keine neuen Packages verfügbar sind und stattdessen die alten Packages im System verbleiben:
# pkg query '%n|%q' | grep -Fv freebsd:11 openntpd|freebsd:10:x86:64 throttle|freebsd:10:x86:64 # pkg upgrade openntpd Updating FreeBSD repository catalogue... Fetching meta.txz: 100% 944 B 0.9kB/s 00:01 Fetching packagesite.txz: 100% 6 MiB 5.8MB/s 00:01 Processing entries: 100% FreeBSD repository update completed. 25480 packages processed. pkg: No packages available to upgrade matching 'openntpd' have been found in the repositories # pkg info openntpd openntpd-6.0p1_1,2 Name : openntpd Version : 6.0p1_1,2 Installed on : Mon Oct 3 00:32:15 2016 CEST Origin : net/openntpd Architecture : freebsd:10:x86:64 […]
Würde man hier mit dem abschließenden (dritten) freebsd-update install die shared libraries von freebsd:10:* löschen, könnte man diese nicht mehr ausführen! (BTW: Hier nur als Beispiel openntpd genannt, was selbst jedoch ein eher untypischer Kandidat für Software im Jail ist)