mirror of
https://git.FreeBSD.org/doc.git
synced 2026-06-02 11:25:20 +00:00
538 lines
17 KiB
XML
538 lines
17 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
|
|
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
|
|
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="de">
|
|
<info><title>Einführung in NanoBSD</title>
|
|
|
|
|
|
<authorgroup>
|
|
<author><personname><firstname>Daniel</firstname><surname>Gerzo</surname></personname></author>
|
|
</authorgroup>
|
|
|
|
<pubdate>$FreeBSD$</pubdate>
|
|
|
|
<copyright>
|
|
<year>2006</year>
|
|
<holder>The FreeBSD Documentation Project</holder>
|
|
</copyright>
|
|
|
|
<legalnotice xml:id="trademarks" role="trademarks">
|
|
&tm-attrib.freebsd;
|
|
&tm-attrib.general;
|
|
</legalnotice>
|
|
|
|
<abstract>
|
|
<para>Dieses Dokument stellt Informationen zu den
|
|
<application>NanoBSD</application> Werkzeugen bereit, die dazu
|
|
verwendet werden können ein &os; Abbild für eingebettete
|
|
Systeme zu erstellen, welche auf eine Compact Flash Karte
|
|
passen (oder andere Massenspeicher).</para>
|
|
|
|
<para><emphasis>Übersetzt von Björn
|
|
Heidotting</emphasis>.</para>
|
|
</abstract>
|
|
</info>
|
|
|
|
<sect1 xml:id="intro">
|
|
<title>Einführung in NanoBSD</title>
|
|
|
|
<indexterm><primary>NanoBSD</primary></indexterm>
|
|
|
|
<para><application>NanoBSD</application> ist ein Werkzeug welches
|
|
derzeit von &a.phk; entwickelt wird. Es erstellt ein &os;
|
|
Systemabbild für eingebettete Systeme, die auf eine Compact
|
|
Flash Karte passen (oder andere Massenspeicher).</para>
|
|
|
|
<para>Es kann dazu benutzt werden um spezialisierte
|
|
Installationsabbilder zu bauen, entworfen fü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.</para>
|
|
|
|
<para>Zu den Eigenschaften von <application>NanoBSD</application>
|
|
gehören:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Ports und Pakete funktionieren wie in &os; — Jede
|
|
einzelne Anwendung kann auf dem
|
|
<application>NanoBSD</application> Abbild installiert und
|
|
benutzt werden, auf die gleiche Weise wie Sie es aus &os;
|
|
gewohnt sind.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Keine fehlende Funktionalität — Wenn es möglich
|
|
ist, etwas mit &os; zu tun, ist es auch möglich, die
|
|
gleiche Sache mit <application>NanoBSD</application> zu tun,
|
|
es sei denn, eine oder mehrere Funktionen wurden
|
|
ausdrücklich vor dem Bau des
|
|
<application>NanoBSD</application> Abbilds entfernt.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Zur Laufzeit ist alles read-only — Es ist sicher
|
|
den Stromstecker zu ziehen. Es besteht dann keine
|
|
Notwendigkeit, einen &man.fsck.8; nach einem nicht
|
|
ordnungsgemäßem Herunterfahren des Systems
|
|
auszuführen.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Einfach zu bauen und anzupassen — Unter Verwendung
|
|
von nur einem Shell-Skript und einer Konfigurationsdatei ist
|
|
es möglich, ein reduziertes und angepasstes Abbild zu
|
|
bauen, welches jegliche Reihe von Anforderungen
|
|
erfüllt.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="howto">
|
|
<title>NanoBSD Anleitung</title>
|
|
|
|
<sect2 xml:id="design">
|
|
<title>Das Design von NanoBSD</title>
|
|
|
|
<para>Sobald das Abbild auf dem Medium verfügbar ist, kann
|
|
<application>NanoBSD</application> gebootet werden. Der
|
|
Massenspeicher ist standardmäßig in drei Teile
|
|
unterteilt:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Zwei Abbild Partitionen: <literal>code#1</literal> und
|
|
<literal>code#2</literal>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Die Partition der Konfigurationsdatei, welche zur
|
|
Laufzeit unter dem <filename>/cfg</filename> Verzeichnis gemountet
|
|
werden kann.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Diese Partitionen sind im Allgemeinen read-only.</para>
|
|
|
|
<para>Die <filename>/etc</filename> und
|
|
<filename>/var</filename> Verzeichnisse sind
|
|
&man.md.4; (malloc) Speicher.</para>
|
|
|
|
<para>Die Partition der Konfigurationsdatei besteht unter dem
|
|
<filename>/cfg</filename> Verzeichnis. Sie
|
|
enthält Dateien für das <filename>/etc</filename> Verzeichnis und wird
|
|
direkt nach dem Botten read-only eingehangen, weshalb es
|
|
erforderlich ist geänderte Dateien von <filename>/etc</filename> zurück nach <filename>/cfg</filename> zu kopieren falls die
|
|
Änderungen nach einem Neustart bestehen bleiben
|
|
sollen.</para>
|
|
|
|
<example>
|
|
<title>Dauerhafte Änderungen in
|
|
<filename>/etc/resolv.conf</filename> vornehmen</title>
|
|
|
|
<screen>&prompt.root; <userinput>vi /etc/resolv.conf</userinput>
|
|
[...]
|
|
&prompt.root; <userinput>mount /cfg</userinput>
|
|
&prompt.root; <userinput>cp /etc/resolv.conf /cfg</userinput>
|
|
&prompt.root; <userinput>umount /cfg</userinput></screen>
|
|
</example>
|
|
|
|
<note>
|
|
<para>Die <filename>/cfg</filename>
|
|
Partition sollte nur während des Bootvorgangs und zu
|
|
Änderungen an den Konfigurationsdateien gemountet
|
|
werden.</para>
|
|
|
|
<para>Die <filename>/cfg</filename>
|
|
Partition jederzeit gemountet zu haben ist keine gute Idee,
|
|
besonders wenn das <application>NanoBSD</application> System
|
|
auf einem Massenspeicher betrieben wird, der eventuell druch
|
|
eine große Anzahl von Schreiboperationen nachteilig
|
|
beeinträchtigt wird (z. B. wenn der Dateisystem-Syncer den
|
|
Speicher mit Daten überflutet).</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Ein NanoBSD Abbild erstellen</title>
|
|
|
|
<para>Ein <application>NanoBSD</application> Abbild wird über
|
|
ein einfaches <filename>nanobsd.sh</filename> Shell-Skript
|
|
gebaut, das sich unter <filename>/usr/src/tools/tools/nanobsd</filename>
|
|
befindet. Das Skript erstellt ein Abbild, welches dann
|
|
mittels &man.dd.1; auf einen Massenspeicher kopiert werden
|
|
kann.</para>
|
|
|
|
<para>Die folgenden Kommandos sind notwendig um ein
|
|
<application>NanoBSD</application> Abbild zu erstellen:</para>
|
|
|
|
<screen>&prompt.root; <userinput>cd /usr/src/tools/tools/nanobsd</userinput> <co xml:id="nbsd-cd"/>
|
|
&prompt.root; <userinput>sh nanobsd.sh</userinput> <co xml:id="nbsd-sh"/>
|
|
&prompt.root; <userinput>cd /usr/obj/nanobsd.full</userinput> <co xml:id="nbsd-cd2"/>
|
|
&prompt.root; <userinput>dd if=_.disk.full of=/dev/da0 bs=64k</userinput> <co xml:id="nbsd-dd"/></screen>
|
|
|
|
<calloutlist>
|
|
<callout arearefs="nbsd-cd">
|
|
<para>Wechsel in das Basisverzeichnis des
|
|
<application>NanoBSD</application> Skripts.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="nbsd-sh">
|
|
<para>Den Bauprozess starten.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="nbsd-cd2">
|
|
<para>Wechsel in das Verzeichnis, in dem das gebaute Abbild
|
|
liegt.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="nbsd-dd">
|
|
<para><application>NanoBSD</application> auf einem
|
|
Massenspeicher installieren.</para>
|
|
</callout>
|
|
</calloutlist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Ein NanoBSD Abbild anpassen</title>
|
|
|
|
<para>Dies ist wahrscheinlich das wichtigste und interessanteste
|
|
Merkmal von <application>NanoBSD</application>. Hierbei
|
|
werden Sie auch die meiste Zeit mit der Entwicklung von
|
|
<application>NanoBSD</application> verbringen.</para>
|
|
|
|
<para>Der Aufruf des folgenden Kommandos wird
|
|
<filename>nanobsd.sh</filename> dazu zwingen, seine
|
|
Konfiguration aus <filename>myconf.nano</filename> aus dem
|
|
aktuellen Verzeichnis zu lesen:</para>
|
|
|
|
<screen>&prompt.root; <userinput>sh nanobsd.sh -c myconf.nano</userinput></screen>
|
|
|
|
<para>Die Anpassung wird auf zwei Arten geschehen:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Konfigurations-Optionen</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Benutzerdefinierte Funktionen</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<sect3>
|
|
<title>Konfigurations-Optionen</title>
|
|
|
|
<para>Durch Konfigurationseinstellungen ist es möglich
|
|
Optionen zu übergeben, die sowohl die
|
|
<buildtarget>buildworld</buildtarget> und
|
|
<buildtarget>installworld</buildtarget> Phasen des
|
|
<application>NanoBSD</application> Bauprozesses betreffen,
|
|
sowie interne Optionen, die den Haupt-Bauprozess von
|
|
<application>NanoBSD</application> beeinflussen. Durch diese
|
|
Optionen ist es möglich, das System so zu reduzieren, dass
|
|
es mit wenig Platz, etwa 64 MB auskommt. Sie können die
|
|
Konfigurationsdateien dazu nutzten &os; noch weiter zu
|
|
trimmen, bis es nur noch aus dem Kernel und zwei oder drei
|
|
Dateien im Userland besteht.</para>
|
|
|
|
<para>Die Konfigurationsdatei besteht aus
|
|
Konfigurations-Optionen, welche die Standardwerte
|
|
überschreiben.</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><literal>NANO_NAME</literal> — Name des Build
|
|
(wird verwendet, um die workdir Namen zu
|
|
konstruieren).</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>NANO_SRC</literal> — Pfad zum
|
|
Quelltextverzeichnis, das für den Bau des Abbilds
|
|
verwendet wird.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>NANO_KERNEL</literal> — Name der
|
|
Kernelkonfigurationsdatei, die für den Bau des Kernels
|
|
verwendet wird.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>CONF_BUILD</literal> — Optionen für
|
|
die <buildtarget>buildworld</buildtarget> Phase des
|
|
Bauprozesses.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>CONF_INSTALL</literal> — Optionen
|
|
für die <buildtarget>installworld</buildtarget> Phase
|
|
des Bauprozesses.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>CONF_WORLD</literal> — Optionen für
|
|
die <buildtarget>buildworld</buildtarget> und
|
|
<buildtarget>installworld</buildtarget> Phasen des
|
|
Bauprozesses.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>FlashDevice</literal> — Definiert den
|
|
zu benutzenden Medientyp. Überprüfen Sie die
|
|
Datei <filename>FlashDevice.sub</filename> für
|
|
weitere Informationen.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Benutzerdefinierte Funktionen</title>
|
|
|
|
<para>Mit Hilfe von Shell-Funktionen in der
|
|
Konfigurationsdatei besteht die Möglichkeit zur
|
|
Feinabstimmung von <application>NanoBSD</application>. Das
|
|
folgende Beispiel illustriert das Grundmodell von
|
|
benutzerdefinierten Funktionen:</para>
|
|
|
|
<programlisting>cust_foo () (
|
|
echo "bar=baz" > \
|
|
${NANO_WORLDDIR}/etc/foo
|
|
)
|
|
customize_cmd cust_foo</programlisting>
|
|
|
|
<para>Ein besseres Beispiel für eine Anpassung ist folgende,
|
|
welche die Standardgröße des <filename>/etc</filename> Verzeichnisses von 5 MB
|
|
auf 30 MB ändert:</para>
|
|
|
|
<programlisting>cust_etc_size () (
|
|
cd ${NANO_WORLDDIR}/conf
|
|
echo 30000 > default/etc/md_size
|
|
)
|
|
customize_cmd cust_etc_size</programlisting>
|
|
|
|
<para>Es gibt ein paar vordefinierte Standardfunktionen die
|
|
Sie nutzen können:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><literal>cust_comconsole</literal> —
|
|
Deaktiviert &man.getty.8; auf den VGA Geräten (den
|
|
<filename>/dev/ttyv*</filename> Gerätedateien) und
|
|
ermöglicht die Nutzung der seriellen Schnittstelle COM1
|
|
als Systemkonsole.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>cust_allow_ssh_root</literal> —
|
|
Erlaubt es <systemitem class="username">root</systemitem> sich über
|
|
&man.sshd.8; anzumelden.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>cust_install_files</literal> —
|
|
Installiert Dateien aus dem <filename>nanobsd/Files</filename>
|
|
Verzeichnis, das einige nützliche Skripte für die
|
|
Systemverwaltung enthält.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Pakete hinzufügen</title>
|
|
|
|
<para>Durch benutzerdefinierte Funktionen können Pakete zum
|
|
<application>NanoBSD</application> Abbild hinzugefügt
|
|
werden. Die nachfolgende Funktion installiert alle Pakete
|
|
aus
|
|
<filename>/usr/src/tools/tools/nanobsd/packages</filename>:</para>
|
|
|
|
<programlisting>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</programlisting>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Beispiel einer Konfigurationsdatei</title>
|
|
|
|
<para>Ein komplettes Beispiel für eine Konfigurationsdatei
|
|
zum Erstellen eines benutzerdefinierten
|
|
<application>NanoBSD</application> Abbilds könnte folgende
|
|
sein:</para>
|
|
|
|
<programlisting>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</programlisting>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>NanoBSD aktualisieren</title>
|
|
|
|
<para>The Update-Prozess von <application>NanoBSD</application>
|
|
ist relativ einfach:</para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Erstellen Sie ein neues
|
|
<application>NanoBSD</application> Abbild.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Laden Sie das neue Abbild in eine unbenutzte Partition
|
|
eines laufenden <application>NanoBSD</application>
|
|
Systems.</para>
|
|
|
|
<para>Der wichtigste Unterschied dieses Schrittes zur ersten
|
|
<application>NanoBSD</application> Installation besteht
|
|
darin, das jetzt anstatt der Datei
|
|
<filename>_.disk.full</filename> (enthält ein Abbild der
|
|
gesamten Platte) die Datei
|
|
<filename>_.disk.image</filename> (enthält ein Abbild
|
|
einer einzelnen System-Partition) installiert wird.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Neustart, um das System von der neu installierten
|
|
Partition zu starten.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Wenn alles gut geht, ist die Aktualisierung
|
|
abgeschlossen.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Wenn etwas schief läuft, starten Sie wieder in die
|
|
vorherige Partition (die das alte, funktionierende Abbild
|
|
enthält) um die System-Funktionalität so schnell wie
|
|
möglich wieder herzustellen. Beheben Sie alle Probleme
|
|
des neu gebauten Abbilds, und wiederholen Sie den
|
|
Vorgang.</para>
|
|
</step>
|
|
</procedure>
|
|
|
|
<para>Um das neue Abbild auf das laufende
|
|
<application>NanoBSD</application> System zu installieren, ist
|
|
es möglich, entweder das <filename>updatep1</filename> oder
|
|
<filename>updatep2</filename> Skript im <filename>/root</filename> Verzeichnis zu verwenden,
|
|
je nachdem, von welcher Partition das aktuelle System
|
|
läuft.</para>
|
|
|
|
<para>In Abhängigkeit davon welche Dienste der Host, der das
|
|
<application>NanoBSD</application> Abbild anbietet, und welche
|
|
Art von Transfer bevorzugt wird, bestehen eine von drei zu
|
|
prüfenden Möglichkeiten:</para>
|
|
|
|
<sect3>
|
|
<title>Verwendung von &man.ftp.1;</title>
|
|
|
|
<para>Wenn die Übertragungsgeschwindigkeit an erster
|
|
Stelle steht, verwenden Sie dieses Beispiel:</para>
|
|
|
|
<screen>&prompt.root; <userinput>ftp myhost
|
|
get _.disk.image "| sh updatep1"</userinput></screen>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Verwendung von &man.ssh.1;</title>
|
|
|
|
<para>Wenn eine sichere Übertragung bevorzugt wird,
|
|
sollten Sie die Verwendung dieses Beispiels in Betracht
|
|
ziehen:</para>
|
|
|
|
<screen>&prompt.root; <userinput>ssh myhost cat _.disk.image.gz | zcat | sh updatep1</userinput></screen>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Verwendung von &man.nc.1;</title>
|
|
|
|
<para>Verwenden Sie dieses Beispiel, wenn auf dem Remote-Host
|
|
kein &man.ftpd.8; oder &man.sshd.8; Dienst läuft:</para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Zunächst öffnen Sie eine TCP-Listener auf dem Host
|
|
der das Abbild bereitstellt und zum Client
|
|
sendet:</para>
|
|
|
|
<screen>myhost&prompt.root; <userinput>nc -l 2222 < _.disk.image</userinput></screen>
|
|
|
|
<note>
|
|
<para>Stellen Sie sicher das der benutzte Port nicht
|
|
blockiert wird, um eingehende Verbindungen, vom
|
|
<application>NanoBSD</application> Host durch die
|
|
Firewall, zu ermöglichen.</para>
|
|
</note>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Verbinden Sie sich zum Host der das Abbild
|
|
bereitstellt und führen Sie das
|
|
<filename>updatep1</filename> Skript aus:</para>
|
|
|
|
<screen>&prompt.root; <userinput>nc myhost 2222 | sh updatep1</userinput></screen>
|
|
</step>
|
|
</procedure>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<index/>
|
|
</article>
|