FreeBSD Source up-to-date

In meiner kleinen FreeBSD Welt sind nicht alle Maschinen auf dem gleichen Release. Manche sind auf 10.3 andere auf 10.4 oder sogar 11.1. Da ich heute eine der Kisten von 10.3 auf 10.4 bringe, will ich die Gelegenheit ergreifen hier zu notieren, wie ich das anstelle…

Den neuen Source holen

Alle src- und port-trees liegen bei mir zentral auf einer Kiste. Ich mounte sie dann später per NFS auf die jeweiligen Hosts. Das schont Plattenplatz, und mach auch sonst einiges etwas einfacher. Legen wir also los: Als erstes brauchen wir Platz für den neuen Source. Ich lege also mit [cci]zfs create -o mountpoint=/bsd/src-10.4 sys/src-10.4[/cci] ein neues Filesystem an, und weil ich mal wieder zu blöd zum scheißen war, schieb ich ein [cci]zfs set compression=on,sharenfs=on sys/src-10.4[/cci] hinterher, denn die Compression ist ne gute Sache, und es macht Sinn das Ding auch per NFS mounten zu können…

Dann füllen wir das Verzeichnis mit eben dem neuem Source….

[cci]
cd /bsd/src-10.4
svnlite checkout https://svn.freebsd.org/base/releng/10.4 /bsd/src-10.4
[/cci]

Ja, ich gebe zu, den [cci]cd[/cci] in das Verzeichnis kann man auch weglassen. Ist so ne Macke von mir… Wie auch immer: Das dauert jetzt ne Weile und produziert viel Output auf dem Terminal 🙂 Zeit sich gleich um die Maintainance zu kümmern.

Pflege des Trees

Ich hab ein kleines Shell-Script, welches von periodic(8) ausgeführt wird, und mir so automatisch ein svn update zieht. Dieses sieht so aus und liegt unter /usr/local/etc/periodic/weekly/800-src-update:

[ccn_bash]
#!/bin/sh –

echo „Running svn for src:“
echo
echo src for 10.4
(su gehm -c „/usr/bin/svnlite update /bsd/src-10.4“) > /dev/null
echo src for 11
(su gehm -c „/usr/bin/svnlite update /bsd/src-11“) > /dev/null
echo
[/ccn_bash]


Note: Eigentlich sollte ich da mal einen sleep(3) einbauen der irgendwas zwischen 0 und 3600s wartet. Wenn das jeder so macht wie ich, haben die FreeBSD Server nen ganz schönen Peak. Bei portsnap zum Beispiel gibt es die Option ‚cron‘ die genau das macht….

Derweilen ist auch der fetch fertig. Den neuen Source linke ich in mein zu updatendes System mit einem [cci]ln -s /net/nas/bsd/src-10.4 /usr/src[/cci] (Gut das funktioniert natürlich nur mit autofs bzw. automount so….) und schon gehts weiter…

Wir bauen uns eine neue Welt…

Der neue Source ist da. Ein paar Dinge vorweg:

  • Man kann einige Tweaks in /etc/make.conf vornehmen… Zum Beispiel Sachen ‚ausschalten‘ die man nicht braucht, Defaults setzten etc… Das sieht in etwa so aus:

    [ccn]
    BOOTWAIT=180
    KERNCONF=BELZE10
    WITHOUT_ATM=true
    WITHOUT_INFO=true
    WITHOUT_IPFILTER=true
    CUPS_OVERWRITE_BASE=yes
    NO_LPR=yes
    OPTIONS_SET=CUPS
    WRKDIRPREFIX=/var/tmp
    [/ccn]

    Wer es genauer wissen will, sein an die Manpages make.conf(5) und src.conf(5) verwiesen… Das sprengt nun gerade den Rahmen. Vielleicht komme ich bei Gelegenheit mal dazu…

  • Das bauen funktioniert deutlich schneller wenn man sein /tmp im RAM liegen hat. Zumindest war das früher der Fall. In der heutigen Zeit mit SSDs bin ich mir nicht so ganz sicher, ob es nach wie vor so ist….
  • Es hilft auch ungemein die Anzahl der Build-Jobs hochzusetzten. Das macht man mit dem ‚make -j X‘ Flag. Ihr seht es nachher unten. Die genaue Zahl für das X ist Abhängig vom System. Ein guter Startwert ist irgendwas zwischen der 1-2 * Anzahl der Cores… (Bitte nur bei den builds nicht bei den installs hernehmen 😉
  • Ein Blick in /usr/src/UPDATING ist durchaus nicht verkehrt….

Legen wir los… Wir stellen uns nach /usr/src und bauen/installieren die Welt und den Kernel. der mergemaster vergleich diverse Config-Dateien die sich verändert haben. Für mich:
[ccN]
% make -j8 buildworld
% make buildkernel
% make installkernel
% mergemaster -p
% make installworld
% mergemaster -iF
% reboot
[/ccN]

Hinweis: Das haut so meistens hin… Ein reboot nach dem installkernel ist aber auch keine schlechte Idee.

Das wars: Die neue Welt ist erschaffen 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert