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 zfs create -o mountpoint=/bsd/src-10.4 sys/src-10.4
ein neues Filesystem an, und weil ich mal wieder zu blöd zum scheißen war, schieb ich ein zfs set compression=on,sharenfs=on sys/src-10.4
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….
cd /bsd/src-10.4
svnlite checkout https://svn.freebsd.org/base/releng/10.4 /bsd/src-10.4
Ja, ich gebe zu, den cd
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:
1 2 3 4 5 6 7 8 9 | #!/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 |
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 ln -s /net/nas/bsd/src-10.4 /usr/src
(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:
1
2
3
4
5
6
7
8
9BOOTWAIT=180
KERNCONF=BELZE10
WITHOUT_ATM=true
WITHOUT_INFO=true
WITHOUT_IPFILTER=true
CUPS_OVERWRITE_BASE=yes
NO_LPR=yes
OPTIONS_SET=CUPS
WRKDIRPREFIX=/var/tmpWer 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:
% make buildkernel
% make installkernel
% mergemaster -p
% make installworld
% mergemaster -iF
% reboot
Hinweis: Das haut so meistens hin… Ein reboot nach dem installkernel ist aber auch keine schlechte Idee.
Das wars: Die neue Welt ist erschaffen 🙂