                         Einfu:hrung in NanoBSD

  Daniel Gerzo

   Copyright (c) 2006 The FreeBSD Documentation Project

   $FreeBSD:
   release/8.4.0/de_DE.ISO8859-1/articles/nanobsd/article.xml 41325
   2013-03-30 15:05:15Z bcr $

   FreeBSD ist ein eingetragenes Warenzeichen der FreeBSD Foundation.

   Viele Produktbezeichnungen von Herstellern und Verka:ufern sind
   Warenzeichen. Soweit dem FreeBSD Project das Warenzeichen bekannt
   ist, werden die in diesem Dokument vorkommenden Bezeichnungen mit
   dem Symbol "(TM)" oder dem Symbol "(R)" gekennzeichnet.

   Dieses Dokument stellt Informationen zu den NanoBSD Werkzeugen
   bereit, die dazu verwendet werden ko:nnen ein FreeBSD Abbild fu:r
   eingebettete Systeme zu erstellen, welche auf eine Compact Flash
   Karte passen (oder andere Massenspeicher).

   U:bersetzt von Bjo:rn Heidotting.

     --------------------------------------------------------------

1. Einfu:hrung in NanoBSD

   NanoBSD ist ein Werkzeug welches derzeit von Poul-Henning Kamp
   <phk@FreeBSD.org> entwickelt wird. Es erstellt ein FreeBSD
   Systemabbild fu:r eingebettete Systeme, die auf eine Compact Flash
   Karte passen (oder andere Massenspeicher).

   Es kann dazu benutzt werden um spezialisierte
   Installationsabbilder zu bauen, entworfen fu:r die einfache
   Installation und Wartung von Systemen die als "Computer
   Appliances" bekannt sind. Computer Appliances haben ihre Hard- und
   Software fest verbaut, dass bedeutet alle Anwendungen sind
   vorinstalliert. Die Appliance wird an ein bestehendes Netzwerk
   angeschlossen und kann mit der Arbeit (fast) sofort beginnen.

   Zu den Eigenschaften von NanoBSD geho:ren:

     * Ports und Pakete funktionieren wie in FreeBSD - Jede einzelne
       Anwendung kann auf dem NanoBSD Abbild installiert und benutzt
       werden, auf die gleiche Weise wie Sie es aus FreeBSD gewohnt
       sind.

     * Keine fehlende Funktionalita:t - Wenn es mo:glich ist, etwas
       mit FreeBSD zu tun, ist es auch mo:glich, die gleiche Sache
       mit NanoBSD zu tun, es sei denn, eine oder mehrere Funktionen
       wurden ausdru:cklich vor dem Bau des NanoBSD Abbilds entfernt.

     * Zur Laufzeit ist alles read-only - Es ist sicher den
       Stromstecker zu ziehen. Es besteht dann keine Notwendigkeit,
       einen fsck(8) nach einem nicht ordnungsgema:ssem
       Herunterfahren des Systems auszufu:hren.

     * Einfach zu bauen und anzupassen - Unter Verwendung von nur
       einem Shell-Skript und einer Konfigurationsdatei ist es
       mo:glich, ein reduziertes und angepasstes Abbild zu bauen,
       welches jegliche Reihe von Anforderungen erfu:llt.

     --------------------------------------------------------------

2. NanoBSD Anleitung

  2.1. Das Design von NanoBSD

   Sobald das Abbild auf dem Medium verfu:gbar ist, kann NanoBSD
   gebootet werden. Der Massenspeicher ist standardma:ssig in drei
   Teile unterteilt:

     * Zwei Abbild Partitionen: code#1 und code#2.

     * Die Partition der Konfigurationsdatei, welche zur Laufzeit
       unter dem /cfg Verzeichnis gemountet werden kann.

   Diese Partitionen sind im Allgemeinen read-only.

   Die /etc und /var Verzeichnisse sind md(4) (malloc) Speicher.

   Die Partition der Konfigurationsdatei besteht unter dem /cfg
   Verzeichnis. Sie entha:lt Dateien fu:r das /etc Verzeichnis und
   wird direkt nach dem Botten read-only eingehangen, weshalb es
   erforderlich ist gea:nderte Dateien von /etc zuru:ck nach /cfg zu
   kopieren falls die A:nderungen nach einem Neustart bestehen
   bleiben sollen.

   Beispiel 1. Dauerhafte A:nderungen in /etc/resolv.conf vornehmen

 # vi /etc/resolv.conf
 [...]
 # mount /cfg
 # cp /etc/resolv.conf /cfg
 # umount /cfg

     Anmerkung: Die /cfg Partition sollte nur wa:hrend des
     Bootvorgangs und zu A:nderungen an den Konfigurationsdateien
     gemountet werden.

     Die /cfg Partition jederzeit gemountet zu haben ist keine gute
     Idee, besonders wenn das NanoBSD System auf einem Massenspeicher
     betrieben wird, der eventuell druch eine grosse Anzahl von
     Schreiboperationen nachteilig beeintra:chtigt wird (z. B. wenn
     der Dateisystem-Syncer den Speicher mit Daten u:berflutet).

     --------------------------------------------------------------

  2.2. Ein NanoBSD Abbild erstellen

   Ein NanoBSD Abbild wird u:ber ein einfaches nanobsd.sh
   Shell-Skript gebaut, das sich unter /usr/src/tools/tools/nanobsd
   befindet. Das Skript erstellt ein Abbild, welches dann mittels
   dd(1) auf einen Massenspeicher kopiert werden kann.

   Die folgenden Kommandos sind notwendig um ein NanoBSD Abbild zu
   erstellen:

 # cd /usr/src/tools/tools/nanobsd (1)
 # sh nanobsd.sh (2)
 # cd /usr/obj/nanobsd.full (3)
 # dd if=_.disk.full of=/dev/da0 bs=64k (4)

   (1)
           Wechsel in das Basisverzeichnis des NanoBSD Skripts.
   (2)
           Den Bauprozess starten.
   (3)
           Wechsel in das Verzeichnis, in dem das gebaute Abbild
           liegt.
   (4)
           NanoBSD auf einem Massenspeicher installieren.

     --------------------------------------------------------------

  2.3. Ein NanoBSD Abbild anpassen

   Dies ist wahrscheinlich das wichtigste und interessanteste Merkmal
   von NanoBSD. Hierbei werden Sie auch die meiste Zeit mit der
   Entwicklung von NanoBSD verbringen.

   Der Aufruf des folgenden Kommandos wird nanobsd.sh dazu zwingen,
   seine Konfiguration aus myconf.nano aus dem aktuellen Verzeichnis
   zu lesen:

 # sh nanobsd.sh -c myconf.nano

   Die Anpassung wird auf zwei Arten geschehen:

     * Konfigurations-Optionen

     * Benutzerdefinierte Funktionen

     --------------------------------------------------------------

    2.3.1. Konfigurations-Optionen

   Durch Konfigurationseinstellungen ist es mo:glich Optionen zu
   u:bergeben, die sowohl die buildworld und installworld Phasen des
   NanoBSD Bauprozesses betreffen, sowie interne Optionen, die den
   Haupt-Bauprozess von NanoBSD beeinflussen. Durch diese Optionen
   ist es mo:glich, das System so zu reduzieren, dass es mit wenig
   Platz, etwa 64 MB auskommt. Sie ko:nnen die Konfigurationsdateien
   dazu nutzten FreeBSD noch weiter zu trimmen, bis es nur noch aus
   dem Kernel und zwei oder drei Dateien im Userland besteht.

   Die Konfigurationsdatei besteht aus Konfigurations-Optionen,
   welche die Standardwerte u:berschreiben.

     * NANO_NAME - Name des Build (wird verwendet, um die workdir
       Namen zu konstruieren).

     * NANO_SRC - Pfad zum Quelltextverzeichnis, das fu:r den Bau des
       Abbilds verwendet wird.

     * NANO_KERNEL - Name der Kernelkonfigurationsdatei, die fu:r den
       Bau des Kernels verwendet wird.

     * CONF_BUILD - Optionen fu:r die buildworld Phase des
       Bauprozesses.

     * CONF_INSTALL - Optionen fu:r die installworld Phase des
       Bauprozesses.

     * CONF_WORLD - Optionen fu:r die buildworld und installworld
       Phasen des Bauprozesses.

     * FlashDevice - Definiert den zu benutzenden Medientyp.
       U:berpru:fen Sie die Datei FlashDevice.sub fu:r weitere
       Informationen.

     --------------------------------------------------------------

    2.3.2. Benutzerdefinierte Funktionen

   Mit Hilfe von Shell-Funktionen in der Konfigurationsdatei besteht
   die Mo:glichkeit zur Feinabstimmung von NanoBSD. Das folgende
   Beispiel illustriert das Grundmodell von benutzerdefinierten
   Funktionen:

 cust_foo () (
         echo "bar=baz" > \
                 ${NANO_WORLDDIR}/etc/foo
 )
 customize_cmd cust_foo

   Ein besseres Beispiel fu:r eine Anpassung ist folgende, welche die
   Standardgro:sse des /etc Verzeichnisses von 5 MB auf 30 MB
   a:ndert:

 cust_etc_size () (
         cd ${NANO_WORLDDIR}/conf
         echo 30000 > default/etc/md_size
 )
 customize_cmd cust_etc_size

   Es gibt ein paar vordefinierte Standardfunktionen die Sie nutzen
   ko:nnen:

     * cust_comconsole - Deaktiviert getty(8) auf den VGA Gera:ten
       (den /dev/ttyv* Gera:tedateien) und ermo:glicht die Nutzung
       der seriellen Schnittstelle COM1 als Systemkonsole.

     * cust_allow_ssh_root - Erlaubt es root sich u:ber sshd(8)
       anzumelden.

     * cust_install_files - Installiert Dateien aus dem nanobsd/Files
       Verzeichnis, das einige nu:tzliche Skripte fu:r die
       Systemverwaltung entha:lt.

     --------------------------------------------------------------

    2.3.3. Pakete hinzufu:gen

   Durch benutzerdefinierte Funktionen ko:nnen Pakete zum NanoBSD
   Abbild hinzugefu:gt werden. Die nachfolgende Funktion installiert
   alle Pakete aus /usr/src/tools/tools/nanobsd/packages:

 install_packages () (
 mkdir -p ${NANO_WORLDDIR}/packages
 cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
 chroot ${NANO_WORLDDIR} sh -c 'cd packages; pkg_add -v *;cd ..;'
 rm -rf ${NANO_WORLDDIR}/packages
 )
 customize_cmd install_packages

     --------------------------------------------------------------

    2.3.4. Beispiel einer Konfigurationsdatei

   Ein komplettes Beispiel fu:r eine Konfigurationsdatei zum
   Erstellen eines benutzerdefinierten NanoBSD Abbilds ko:nnte
   folgende sein:

 NANO_NAME=custom
 NANO_SRC=/usr/src
 NANO_KERNEL=MYKERNEL
 NANO_IMAGES=2

 CONF_BUILD='
 NO_KLDLOAD=YES
 NO_NETGRAPH=YES
 NO_PAM=YES
 '

 CONF_INSTALL='
 NO_ACPI=YES
 NO_BLUETOOTH=YES
 NO_CVS=YES
 NO_FORTRAN=YES
 NO_HTML=YES
 NO_LPR=YES
 NO_MAN=YES
 NO_SENDMAIL=YES
 NO_SHAREDOCS=YES
 NO_EXAMPLES=YES
 NO_INSTALLLIB=YES
 NO_CALENDAR=YES
 NO_MISC=YES
 NO_SHARE=YES
 '

 CONF_WORLD='
 NO_BIND=YES
 NO_MODULES=YES
 NO_KERBEROS=YES
 NO_GAMES=YES
 NO_RESCUE=YES
 NO_LOCALES=YES
 NO_SYSCONS=YES
 NO_INFO=YES
 '

 FlashDevice SanDisk 1G

 cust_nobeastie() (
         touch ${NANO_WORLDDIR}/boot/loader.conf
         echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
 )

 customize_cmd cust_comconsole
 customize_cmd cust_install_files
 customize_cmd cust_allow_ssh_root
 customize_cmd cust_nobeastie

     --------------------------------------------------------------

  2.4. NanoBSD aktualisieren

   The Update-Prozess von NanoBSD ist relativ einfach:

    1. Erstellen Sie ein neues NanoBSD Abbild.

    2. Laden Sie das neue Abbild in eine unbenutzte Partition eines
       laufenden NanoBSD Systems.

       Der wichtigste Unterschied dieses Schrittes zur ersten NanoBSD
       Installation besteht darin, das jetzt anstatt der Datei
       _.disk.full (entha:lt ein Abbild der gesamten Platte) die
       Datei _.disk.image (entha:lt ein Abbild einer einzelnen
       System-Partition) installiet wird.

    3. Neustart, um das System von der neu installierten Partition zu
       starten.

    4. Wenn alles gut geht, ist die Aktualisierung abgeschlossen.

    5. Wenn etwas schief la:uft, starten Sie wieder in die vorherige
       Partition (die das alte, funktionierende Abbild entha:lt) um
       die System-Funktionalita:t so schnell wie mo:glich wieder
       herzustellen. Beheben Sie alle Probleme des neu gebauten
       Abbilds, und wiederholen Sie den Vorgang.

   Um das neue Abbild auf das laufende NanoBSD System zu
   installieren, ist es mo:glich, entweder das updatep1 oder updatep2
   Skript im /root Verzeichnis zu verwenden, je nachdem, von welcher
   Partition das aktuelle System la:uft.

   In Abha:ngigkeit davon welche Dienste der Host, der das NanoBSD
   Abbild anbietet, und welche Art von Transfer bevorzugt wird,
   bestehen eine von drei zu pru:fenden Mo:glichkeiten:

     --------------------------------------------------------------

    2.4.1. Verwendung von ftp(1)

   Wenn die U:bertragungsgeschwindigkeit an erster Stelle steht,
   verwenden Sie dieses Beispiel:

 # ftp myhost
 get _.disk.image "| sh updatep1"

     --------------------------------------------------------------

    2.4.2. Verwendung von ssh(1)

   Wenn eine sichere U:bertragung bevorzugt wird, sollten Sie die
   Verwendung dieses Beipiels in Betracht ziehen:

 # ssh myhost cat _.disk.image.gz | zcat | sh updatep1

     --------------------------------------------------------------

    2.4.3. Verwendung von nc(1)

   Verwenden Sie dieses Beispiel, wenn auf dem Remote-Host kein
   ftpd(8) oder sshd(8) Dienst la:uft:

    1. Zuna:chst o:ffnen Sie eine TCP-Listener auf dem Host der das
       Abbild bereitstellt und zum Client sendet:

 myhost# nc -l 2222 < _.disk.image

         Anmerkung: Stellen Sie sicher das der benutzte Port nicht
         blockiert wird, um eingehende Verbindungen, vom NanoBSD Host
         durch die Firewall, zu ermo:glichen.

    2. Verbinden Sie sich zum Host der das Abbild bereitstellt und
       fu:hren Sie das updatep1 Skript aus:

 # nc myhost 2222 | sh updatep1

     --------------------------------------------------------------

     Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
                   <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail
                an <de-bsd-translators@de.FreeBSD.org>.
