FreeBSD – Wechsle von STABLE zu RELEASE
Die Bezeichnung STABLE kann etwas verwirrend sein. Weshalb ich wohl nicht die einzige bin, die immer Stable installiert hat, immer der Meinung, dass dies die aktuellste und stabilste Version ist. Bis ich eines Tages nicht mehr Updaten konnte. Wäre mir nicht passiert, hätte ich mit RELEASE gearbeitet 😉 Hier die genauere Definition der diversen FreeBSD Branches.
Aktuelle System Version
uname -a
FreeBSD xx.xx.xx9.0-STABLE FreeBSD 9.0-STABLE #0: Tue Jan 31 17:26:46 CET 2012 user@FreeBSD9:/usr/obj/usr/src/sys/FREEBSD9 amd64
Updaten
Als erstes schauen, dass wir eine Kopie des funktionierenden Kernel machen, für den Fall der Fälle: (weitere Infos)
cd /boot mv kernel.old GENERIC
Wir gaukeln FreeBSD jetzt vor, dass es sich bei unserem System um einen 9.0 RELEASE handelt und nicht STABLE:
UNAME_r=9.0-RELEASE freebsd-update -r 9.1-RELEASE upgrade
Da ich nicht den GENERIC Kernel habe, sondern meine eigene Version (FREEBSD9) kommt nun die folgende Warnung, die mit y bestätigt werden muss. Ich kann diese Meldung ignorieren, da ich im eigenen GENERIC Kernel immer include und im eigenen Kernel nur Werte überschreibe. Somit ist eigentlich immer alles aktuell und man erlebt selben böse Überraschungen bei Updates.
WARNING: This system is running a "freebsd9" kernel, which is not a kernel configuration distributed as part of FreeBSD 9.0-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running "/usr/sbin/freebsd-update install". The following components of FreeBSD seem to be installed: kernel/generic src/src world/base world/doc world/games world/lib32 The following components of FreeBSD do not seem to be installed: Does this look reasonable (y/n)?
Das kann nun eine Weile dauern. Am Schluss wird man aufgefordert die geänderten Files zu überprüfen etc. Wichtig ist hier, dass man während diesem Prozess die Info Zeilen rauslöscht, sonst gibt es später fehlerhafte Files:
<<<<<<< current version# $FreeBSD: src/contrib/sendmail/cf/m4/cfhead.m4,v 1.19.2.1 2011/09/23 00:51:37 kensmith Exp $=======# $FreeBSD: release/9.1.0/contrib/sendmail/cf/m4/cfhead.m4 223067 2011-06-14 04:20:18Z gshapiro $>>>>>>> 9.1-RELEASE#
Beachte, diese Zeilen können auch irgendwo mitten in einem File drin stehen. Also am besten einen Search machen nach „current version“ um die zu löschenden Zeilen zu finden.
/current version
Und wenn wir hier angelangt sind (die total lange Auflistung kann man sonst auch einfach mit CTRL-C abbrechen)
/var/named/etc/namedb/master/empty.db /var/named/etc/namedb/master/localhost-forward.db /var/named/etc/namedb/master/localhost-reverse.db /var/named/etc/namedb/named.root To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
gehts mit
freebsd-update install
weiter.
Installing updates... Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish installing updates.
Nun folgendes eingeben, danach System neu starten:
nextboot -k GENERIC shutdown -r now
So, hier kam bei mir beim ersten Rauffahren ein mounterror… hab einfach mit alt-ctrl-del neu gebootet, danach ist er wieder normal hoch gekommen. Jetzt gehts weiter mit
freebsd-update install
Und wenn’s dann fertig ist:
Installing updates... done.
uname -a FreeBSD FreeBSD9 9.1-RELEASE-p17 FreeBSD 9.1-RELEASE-p17 #0: Tue Jul 8 13:50:48 UTC 2014 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64
entweder so lassen oder dann wieder den eigenen Kernel aktivieren. Er müsste am Schluss gerebuildet werden, nachdem freebsd-update install ausgeführt wurde:
make build|installkernel KERNCONF=MYKERNEL
Das Upgrade ist nun fertig 🙂
Falls es ein Major Upgrade war (also z.B. 9.x auf 10.x) sollte man alle Ports & Packages reinstallieren mit:
portmaster -afG
Wenn das durchgelaufen ist, nochmal
freebsd-update install
ausführen. Und Kernel neu builden, falls ein eigener verwendet wird.
Fehlermeldungen
Unknown modifier ‚t‘
Bei Portsupdates etc. kam jeweils folgender Fehler:
Unknown modifier 't' Unknown modifier 't' "/usr/ports/Mk/bsd.port.mk", line 1750: Malformed conditional (defined(USE_LDCONFIG) && ${USE_LDCONFIG:tl} == "yes") Unknown modifier 't' Unknown modifier 't' Unknown modifier 't' Unknown modifier 't' Unknown modifier 't' "/usr/ports/Mk/bsd.autotools.mk", line 320: Need an operator "/usr/ports/Mk/bsd.autotools.mk", line 320: Need an operator "/usr/ports/Mk/bsd.autotools.mk", line 320: Need an operator "/usr/ports/Mk/bsd.autotools.mk", line 320: Need an operator Unknown modifier 't' Unknown modifier 't' "/usr/ports/Mk/bsd.sites.mk", line 953: Malformed conditional (!empty(_PERL_CPAN_ID) && ${_PERL_CPAN_FLAG:tl} == "cpan") Unknown modifier 't' Unknown modifier 't' "/usr/ports/Mk/bsd.port.mk", line 2877: Unclosed conditional/for loop "/usr/ports/Mk/bsd.port.mk", line 2877: Unexpected end of file in for loop. "/usr/ports/Mk/bsd.port.mk", line 6580: Unclosed conditional/for loop "/usr/ports/Mk/bsd.port.mk", line 6580: Unexpected end of file in for loop.
Grund war, dass FreeBSD veraltet war. Lösung:
- FreeBSD Update (siehe oben) muss gemacht werden. Beachte: Das hier ist ein Problem, das von /usr/bin/make generiert wird. Man muss mind. auf FreeBSD Version 9.2 Upgraden um diesen Fehler zu beheben. Oder man kopiert das funktionierende make von einer 9.2 Maschine.
Weitere Infos dazu gibts hier (Russisch) sowie hier (FreeBSD Forum)
freebsd-update -r 9.2-RELEASE upgrade