Release

Seit der Version 2.8 von OpenBSD schlummert ein Dokument "man release" meist unbeachtet in den Tiefen der Systeme. Was kann man damit tun bzw. wozu braucht man das ?

Es gibt Systeme, die auf Grund ihrer Funktion (Paketfilter, Firewall) sehr minimalistisch installiert wurden und nur die zum Betrieb unbedingt notwendigen Programme sind auf solchen Systemen zu finden. Dies bedeutet das dort weder Systemquellen oder gar Compiler zur Verfügung stehen. Was aber tun, wenn nun auf Grund eines Patches ein neuer Kernel installiert werden muss, oder ein Programm durch eine "gepatchte" Version zu ersetzen ist? Hier kopiert man die mit Hilfe von "man release" auf einem zweiten System erstellten Binaries einfach auf das Zielsystem. Das funktioniert mit dem Kernel (GENERIC) genauso wie mit einzelnen Programmen, sogar Sets wie base32.tgz kann man auf den Zielsystemen auspacken.
!!! ABER MAN SOLLTE GENAU WISSEN WAS MAN DA MACHT !!!
Auch eventuell vorhandene Abhängigkeiten mit anderer Software sind zu berücksichtigen.

Eine weitere Möglickeit ist die, sich ein eigenes OpenBSD-Release zu bauen, in dem dann z.B. alle aktuellen Patches berücksichtigt sind. Fügt man dann noch bevorzugte Packages hinzu und brennt das ganze auf eine CD, hat man eine gute Arbeitsgrundlage für den Aufbau neuer Systeme. Der Vorteil liegt darin, dass man nicht erst noch die ganze Prozedur mit CVS-Update und Systemrebuild durchlaufen muss um ein aktuelles System ans Netz zu bringen, was unter Umständen einige Zeit in Anspruch nehmen kann. Die Möglichkeit eigene OpenBSD-Releases zu erstellen, sollte übrigens niemanden davon abhalten, durch den Kauf der Original CD's das OpenBSD-Project zu unterstützen.

Notwendige Schritte zur Erstellung eines Release:

	1. Die Sourcen aktualisieren
	2. Einen neuen Kernel bauen und installieren
	3. Das System neu bauen (rebuild system binaries)
	4. Erstellen und Überprüfen des System-Release
	5. XF4 bauen 
	6. Erstellen des XF4-Release

1. Sourcen aktualisieren

SRC: setenv CVSROOT anoncvs@anoncvs.be.openbsd.org:/cvs cd /usr/src cvs -q up -rOPENBSD_3_2 -Pd

XF4SRC: cd /usr/XF4 cvs -q up -rOPENBSD_3_2 -Pd

Ports: cd /usr/ports cvs -q up -rOPENBSD_3_2 -Pd

2. Kernel bauen und installieren

	cd /usr/src/sys/arch/i386/conf
	/usr/sbin/config GENERIC
	cd ../compile/GENERIC
	make clean
	make depend
	make
	cp /bsd /bsd.old
	cp bsd /bsd
	chown root.wheel /bsd
	schutdown -r now

3. System neu bauen

Um das System in einen definierten Zustand zu bringen, wird erst einmal richtig aufgeräumt. Dazu sind die folgenden Schritte notwendig:

	rm -r /usr/obj/*
	cd /usr/src
	make clean
	make cleandir
	make clean
	cd /usr/ports
	make clean
	make index

Nun wird das System gebaut:

	cd /usr/src
	make obj
	make build

An diesem Punkt ist das System auf dem aktuellen Stand. Auf dieser Grundlage wird nun unser Release erstellt.

4. Release Erstellen und Überprüfen

Das System Release besteht aus einem GENERIC Kernel, einem CD-Rom und zwei bootbaren floppy Filesystemen sowie den Sets (misc32.tgz, man32.tgz, etc32.tgz, comp32.tgz usw.) , Installationsanleitungen und checksum Dateien. Der Releaseprozess erfordert zwei Arbeitsbereiche die erstellt werden müssen. Diese Bereiche bzw. Verzeichnisse dürfen NICHT auf Verzeichnisse verweisen, in deren Pfad /mnt vorkommt, da das Verzeichniss /mnt beim Erstellungsprozess benötigt wird.

Zuerst muss ein spezielles Tool übersetzt und installiert werden, welches zum Erstellen des Release benötigt wird.

	cd /usr/src/distrib/crunch
	make clean
	make
	make install

Nun setzen wir die Umgebungsvariablen für unsere Arbeitbereiche und legen die Verzeichnisse an, die wir dafür benötigen. $DESTDIR und $RELEASEDIR werden vom Erstellungsprozess verwendet, weiterhin sollte man sicherstellen dass die Verzeichnisse auf unserem System existieren und dass diese leer sind.

	setenv DESTDIR /opt/Eigenbau/destdir
	setenv RELEASEDIR /opt/Eigenbau/release
	rm -fr /opt/Eigenbau/
	mkdir -p ${DESTDIR} ${RELEASEDIR}

Mit den folgenden Kommandos wird nun das Release erstellt und überprüft:

	cd /usr/src/etc
	make release
	cd /usr/src/distib/sets
	sh checkflist
	unsetenv DESTDIR RELEASEDIR
5. XF4 bauen und installieren

An dieser Stelle haben wir das Meiste geschafft, fehlt nur noch das X-Windows System und das bauen wir jetzt. Dazu müssen allerdings noch einige Vorbereitungen getroffen werden. Es wird Tcl/Tk in der version 8.3 benötigt (nur für i386) und ein alternatives Verzeichnis zum bau von XF4 damit wir nicht unsere XF4-Quellen unnötiger Weise verschmutzen. Auch hier muss das Verzeichnis leer sein. Tcl/Tk ist im Portstree zu finden und kann dort übersetzt werden.

	cd /usr/ports/x11/tk/8.3
	make install

	cd /usr/ports/lang/tcl/8.3
	make install
	mkdir /opt/Eigenbau/XF4BLD
	cd /opt/Eigenbau/XF4BLD
	lndir /usr/XF4
	make build

6. Erstellen des XF4-Release

Dazu legen wir zwei neue Verzeichnisse an um die Mühen unserer bisherigen Arbeit nicht zu löschen, setzen die Variablen und bauen XF4.

	mkdir /opt/Eigenbau/destdir-xf4
	mkdir /opt/Eigenbau/release-xf4

	setenv DESTDIR /opt/Eigenbau/destdir-xf4
	setenv RELEASEDIR /opt/Eigenbau/release-xf4

	make release

	unsetenv DESTDIR RELEASEDIR

Fertig ! An diesem Punkt haben wir die Systemsets und X-Windowsets in ihrem jeweiligen Release-Verzeichnissen:

	[znarf@brutus]: ls /opt/Eigenbau/release

	CKSUM        INSTALL.i386   INSTALL.pt  bsd.rd      floppy32.fs   
	INSTALL.ata  INSTALL.linux  MD5         cdrom32.fs  floppyB32.fs  
	INSTALL.chs  INSTALL.mbr    base32.tgz  comp32.tgz  floppyC32.fs
	INSTALL.dbr  INSTALL.os2br  bsd         etc32.tgz   game32.tgz
        man32.tgz    misc32.tgz

	[znarf@brutus]: ls /opt/Eigenbau/release-xf4

	xbase32.tgz  xfont32.tgz  xserv32.tgz  xshare32.tgz

Die Inhalte der beiden Releaseverzeichnisse können nun in einem gemeinsamen Verzeichnis wie i386 zusammengefasst werden und schon haben wir ein eigenes Release.

Hinweis

Wer in /etc/mk.conf z.B. SKIPDIR=games eingetragen hat oder auch Sendmail und andere sollte berücksichtigen, dass diese Bereiche und Programme dann auch nicht in das Release einfliessen. So wird das Set game32.tgz keinen Inhalt haben wenn dies so in /etc/mk.conf eingetragen ist.

Franz-Dieter Hansen
www.nettec-solutions.de