Kernel und World

Kernel

Updaten der Sources

Zuerst muss man schauen, dass die Sources aktuell sind:

cd /usr/src/
make update

Jetzt werden die ganzen Sources geupdated:

————————————————————– >>> Running /usr/local/bin/cvsup ————————————————————– Parsing supfile „/usr/share/examples/cvsup/stable-supfile“ Connecting to cvsup.ch.FreeBSD.org Connected to cvsup.ch.FreeBSD.org Server software version: SNAP_16_1h Negotiating file attribute support Exchanging collection information Establishing multiplexed-mode data connection Running Updating collection src-all/cvs Shutting down connection to server Finished successfully Parsing supfile „/usr/share/examples/cvsup/ports-supfile“ Connecting to cvsup.ch.FreeBSD.org Connected to cvsup.ch.FreeBSD.org Server software version: SNAP_16_1h Negotiating file attribute support Exchanging collection information Establishing multiplexed-mode data connection Running Updating collection ports-all/cvs Edit ports/accessibility/gnomespeech/Makefile Add delta 1.13 2005.09.30.03.22.34 marcus Edit ports/accessibility/gnomespeech/distinfo Add delta 1.10 2005.09.30.03.22.34 marcus Edit ports/accessibility/gnomespeech/files/patch-drivers_festival_festivalsynthesisdriver.c Add delta 1.2 2005.09.30.03.22.34 marcus Edit ports/devel/p5-Data-Taxonomy-Tags/Makefile […] Shutting down connection to server Finished successfully Parsing supfile „/usr/share/examples/cvsup/doc-supfile“ Connecting to cvsup.ch.FreeBSD.org Connected to cvsup.ch.FreeBSD.org Server software version: SNAP_16_1h Negotiating file attribute support Exchanging collection information Establishing multiplexed-mode data connection Running Updating collection doc-all/cvs Shutting down connection to server Finished successfully

Sehr wichtig ist nun, unbedingt /usr/src/UPDATING kurz zu lesen. Eventuell hat es wichtige Änderungen gegeben. Dieses Wissen kann Dir später bei eventueller Fehlersuche sehr hilfreich sein.

more /usr/src/UPDATING

Erstellen/Bearbeiten der Kernel Konfiguration

Man sollte das GENERIC File jeweils nicht direkt ändern. Bei einem Updaste wird das GENERIC File immer wieder überschrieben und aktualisiert. Das Beste ist, wenn man das Basis GENERIC File einfach in einer eigenen Datei included und dann die eigenen Optionen hinzufügt (options oder device) bzw. disabled (nooptions oder nodevice).

cd /usr/src/sys/amd64/conf/

Jetzt das File bearbeiten bzw. erstellen

vi FREEBSD9

Ps: VIM haben wir ja noch nicht installiert. Jetzt würde eine Fehlermeldung deswegen kommen. Einfach Alias nochmals kurz überschreiben, bis wir VIM installiert haben.

alias vi='vi'

Am Besten auch gleich eine zweite Shell öffnen damit Du mit

dmesg

arbeiten kannst. Du kannst Dann z.B. mit

dmesg | grep -is smp

schauen, ob diese (Device) Option benötigt wird oder nicht. Taucht sie auf, drin lassen – wenn nicht, kann man sie in der Regel deaktivieren. Vorsichtshalber jedoch immer erst im FreeBSD Handbuchnachschauen und, falls nicht ganz sicher, lieber drin lassen.

Kernel Kompilieren

cd /usr/src/
make buildkernel KERNCONF=FREEBSD9

und nun gaaaaaaaaaaaanz lang warten bis fertig. Kann je nach System locker zwischen 30 Minuten und mehreren Stunden dauern… Kompilierung war erfolgreich:

-------------------------------------------------------------- 
>>> Kernel build for FREEBSD9 completed on Wed Jan 25 16:50:22 CET 2012 --------------------------------------------------------------

Tip: Die Variable KERNCONF kann auch im /etc/make.conf definiert werden.

Fehlermeldungen

Meldungen, die beim Kompilieren auftauchen können

error: miibus_if.h: No such file or directory

Wahrscheinlich sind beim Update neue Ethernet NICs dazu gekommen (siehe GENERIC File). Vergleiche GENERIC mit dem alten FREEBSD9 File. Und füge entsprechend noch weitere nodevice Einträge bei FREEBSD9 hinzu.

GENERIC

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device          miibus          # MII bus support
device          ae              # Attansic/Atheros L2 FastEthernet
device          age             # Attansic/Atheros L1 Gigabit Ethernet
[.. etc ..]

FREEBSD9

nodevice          miibus          # MII bus support
nodevice          ae              # Attansic/Atheros L2 FastEthernet
nodevice          age             # Attansic/Atheros L1 Gigabit Ethernet
[.. etc ..]
/usr/src/sys/amd64/acpica/acpi_switch.S:146: Error: no such instruction: `xsetbv‘

Wenn dieser Fehler auftaucht:

/usr/src/sys/amd64/acpica/acpi_switch.S: Assembler messages:
/usr/src/sys/amd64/acpica/acpi_switch.S:146: Error: no such instruction: `xsetbv'
/usr/src/sys/amd64/acpica/acpi_switch.S:147: Error: no such instruction: `xrstor (%rbx)'
*** Error code 1

Stop in /usr/obj/usr/src/sys/FREEBSD9.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.

liegt es wahrscheinlich daran, dass wir den Kernel kompilieren wollen, bevor buildworld ausgeführt wurde. Also zuerst Buildworld, danach neuen Kernel kompilieren.

Installation des neuen Kernels

Sobald der Kernel sauber kompiliert wurde (man erkennt es daran, dass die Kompilation nicht mit einem Fehler abgebrochen wurde), kann man den Kernel installieren:

make installkernel KERNCONF=FREEBSD9

Dieser Vorgang geht in der Regel recht schnell. Install fertig:

===> zlib (install) install -o root -g wheel -m 555 zlib.ko /boot/kernel install -o root -g wheel -m 555 zlib.ko.symbols /boot/kernel kldxref /boot/kernel root@FreeBSD9(/usr/src)>

Um den neuen Kernel aktiv werden zu lassen, heisst es: Rebooten!

sync;sync;reboot

Nun startet der Server mit dem neuen Kernel. Vorher:

$> uname -a FreeBSD FreeBSD9 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64

Nachher:

$> uname -a FreeBSD FreeBSD9 9.0-STABLE FreeBSD 9.0-STABLE #0: Wed Jan 25 16:38:36 CET 2012 myusername@FreeBSD9:/usr/obj/usr/src/sys/FREEBSD9 amd64

Fehler

Sollte der Server nicht booten finden sich im FreeBSD-Handbuchnützliche Hilfen dazu.

World

Neben dem Kernel sollte man auch darauf achten, dass die Userworld immer up to date ist. Das heisst, dass wir das komplette Basissystem schön aktuell halten. Nur so kriegt man die Sicherheitslöcher aus den ganzen Basis-Tools (wie z.B. su, etc.). Auch hier bietet das FreeBSD-Handbuchwieder eine gute Grundlage, wie man vorgehen muss.

Basissystem kompilieren

Alle Tools neu kompilieren

cd /usr/src
make buildworld

Nun heisst es wieder warten…. Auf meiner ersten Maschine dauerte es ca. 4 Stunden, auf dem Nachfolger ca. 3 Stunden, auf dem letzten (Dell) 1h 30 Minuten… Bei FreeBSD 9.0 und 4 Cores à 2.2Ghz dauerte es nun aber wieder sehr lange… 4h 30 Minuten um genau zu sein Yell Danach Server booten:

sync;sync;reboot

Basissystem installieren

Nachdem der Server wieder oben ist, und der neue Kernel aktiv seinen Job tut, führen wir folgende Anweisungen aus:

cd /usr/src
mergemaster -p

Als erstes wird das neue /etc/groupFile mit der bereits installierten Version per diff verglichen. In diesem Fall mach ich die Änderungen später von Hand (default).

How should I deal with this? [Leave it for later]

Als nächstes ist /etc/master.passwddran. Auch hier lassen wir es für später. So, nun machen wir die Änderungen kurz per Hand, falls nötig. Danach löschen wir den temproot Inhalt.

*** Comparison complete

*** Files that remain for you to merge by hand:
/var/tmp/temproot/etc/group
/var/tmp/temproot/etc/master.passwd

Do you wish to delete what is left of /var/tmp/temproot? [no]

In einem zweiten Shell mal kurz das Aufrufen:

 diff /etc/group /var/tmp/temproot/etc/group
 diff /etc/master.passwd /var/tmp/temproot/etc/master.passwd

Bei mir gibts keine Änderungen zu machen. Also löschen wir temproot…

Do you wish to delete what is left of /var/tmp/temproot? [no] yes

Nun wird das make.confverglichen. Auch hier schauenob man etwas anpassen muss. Wenn alles ok ist, gehts weiter. Basissystem installieren:

cd /usr/src
make installworld

Das geht wiederum eigentlich recht fix. In ein paar Minuten ist es durch. Aktualisieren der ganzen Dateien im /etc

mergemaster -iU

Ich verwende den Interaktiven Modus mit Auto Upgrade. Das verkürzt den Prozess massiv, im Gegensatz dazu, wenn man mergemasterohne diese Optionen ausführt.

-i          Automatically install any files that do not exist in the des- tination directory. -U       Attempt to auto upgrade files that have not been user modi- fied.  This option can be dangerous when there are critical changes in the new versions that affect your running system.

Hier kommen nun wieder ein paar Vergleiche der Dateien. Meistens ändert sich nur der Header. Einfach die gewünschte Option auswählen. Leave it for later ist meistens die richtige Option. Im File /etc/defaults/periodic.confgibt es Änderungen, die ich übernehmen möchte.

  *** Displaying differences between ./etc/defaults/periodic.conf and installed version: — /etc/defaults/periodic.conf 2012-01-03 08:57:39.000000000 +0100 +++ ./etc/defaults/periodic.conf        2012-01-26 11:50:57.000000000 +0100 @@ -13,7 +13,7 @@ # For a more detailed explanation of all the periodic.conf variables, please # refer to the periodic.conf(5) manual page. # -# $FreeBSD: release/9.0.0/etc/defaults/periodic.conf 220020 2011-03-26 03:01:48Z dougb $ +# $FreeBSD: src/etc/defaults/periodic.conf,v 1.54.2.2 2012/01/03 10:22:09 delphij Exp $ # # What files override these defaults ? @@ -147,6 +147,12 @@ daily_queuerun_enable=“YES“                            # Run mail queue daily_submit_queuerun=“YES“                            # Also submit queue +# 800.scrub-zfs +daily_scrub_zfs_enable=“NO“ +daily_scrub_zfs_pools=““                       # empty string selects all pools +daily_scrub_zfs_default_threshold=“35″         # days between scrubs +#daily_scrub_zfs_${poolname}_threshold=“35″    # pool specific threshold + # 999.local daily_local=“/etc/daily.local“                         # Local scripts Use ‚d‘ to delete the temporary ./etc/defaults/periodic.conf Use ‚i‘ to install the temporary ./etc/defaults/periodic.conf Use ‚m‘ to merge the temporary and installed versions Use ‚v‘ to view the diff results again Default is to leave the temporary file to deal with by hand How should I deal with this? [Leave it for later] i *** ./etc/defaults/periodic.conf installed successfully

So, am Ende wird man nun nochmals gefragt das temproot zu löschen. Wenn wir nichts mehr von Hand ändern möchten, kann man jetzt mit yesweitergehen – ansonsten einfach in einer zweiten Shell kurz die Änderungen durchführen und dann mit yes weiter machen.

Do you wish to delete what is left of /var/tmp/temproot? [no] yes
*** Reinstalling Europe/Zurich as /etc/localtime root@FreeBSD9(/usr/src)>

Am schluss booten wir wieder…

sync;sync;reboot

.. und wenn alles gut ging, läuft unser System jetzt mit dem neuen Kernel und dem neuen Basissystem 🙂

Weiter mit den Basis Programmen…

Das Grundsystem steht. Nun kommen noch die Programme und Konfigurationen dazu, die auf keinem meiner Server fehlen dürfen.

Upgrade Kernel & World

Damit das System aktuell bleibt, sollten Kernel und World regelmässig aktualisiert werden. Dabei ist es wichtig, die korrekte Reihenfolge einzuhalten:

Daher die einzelnen Prozesse sehr lange dauern können, macht es Sinn, die Befehle direkt über die Konsole bzw. VNC auszuführen.

1) Sources Updaten:

cd /usr/src/; make update

2) Änderungen checken:

more /usr/src/UPDATING

3) Basis System kompilieren

make buildworld

4) Kernel kompilieren

make buildkernel KERNCONF=FREEBSD9

5) Kernel installieren

make installkernel KERNCONF=FREEBSD9

6) Reboot (am Besten in den Singel User Mode booten (Boot Loader Menü: 6), um eventuelle Probleme mit laufender Software zu vermeiden – geht aber auch ohne 😉

sync;sync;reboot

7) Mergemaster

cd /usr/src; mergemaster -p

8) World installieren

make installworld

9) Die letzten Config Files updaten

mergemaster -iU

10) Reboot

sync;sync;reboot

Nun sollte das System wieder laufen.

Weitere Infos unter: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben