1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
"../../../share/xml/freebsd45.dtd">
<article lang="de">
<articleinfo>
<title>Einführung in NanoBSD</title>
<authorgroup>
<author>
<firstname>Daniel</firstname>
<surname>Gerzo</surname>
<!-- 14 March 2006 -->
</author>
</authorgroup>
<pubdate>$FreeBSD$</pubdate>
<copyright>
<year>2006</year>
<holder>The FreeBSD Documentation Project</holder>
</copyright>
<legalnotice 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>
</articleinfo>
<sect1 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 id="howto">
<title>NanoBSD Anleitung</title>
<sect2 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
class="directory">/cfg</filename> Verzeichnis gemountet
werden kann.</para>
</listitem>
</itemizedlist>
<para>Diese Partitionen sind im Allgemeinen read-only.</para>
<para>Die <filename class="directory">/etc</filename> und
<filename class="directory">/var</filename> Verzeichnisse sind
&man.md.4; (malloc) Speicher.</para>
<para>Die Partition der Konfigurationsdatei besteht unter dem
<filename class="directory">/cfg</filename> Verzeichnis. Sie
enthält Dateien für das <filename
class="directory">/etc</filename> Verzeichnis und wird
direkt nach dem Botten read-only eingehangen, weshalb es
erforderlich ist geänderte Dateien von <filename
class="directory">/etc</filename> zurück nach <filename
class="directory">/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 class="directory">/cfg</filename>
Partition sollte nur während des Bootvorgangs und zu
Änderungen an den Konfigurationsdateien gemountet
werden.</para>
<para>Die <filename class="directory">/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
class="directory"><replaceable>/usr</replaceable>/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 id="nbsd-cd"/>
&prompt.root; <userinput>sh nanobsd.sh</userinput> <co id="nbsd-sh"/>
&prompt.root; <userinput>cd /usr/obj/nanobsd.full</userinput> <co id="nbsd-cd2"/>
&prompt.root; <userinput>dd if=_.disk.full of=/dev/da0 bs=64k</userinput> <co 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
<maketarget>buildworld</maketarget> und
<maketarget>installworld</maketarget> 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 <maketarget>buildworld</maketarget> Phase des
Bauprozesses.</para>
</listitem>
<listitem>
<para><literal>CONF_INSTALL</literal> — Optionen
für die <maketarget>installworld</maketarget> Phase
des Bauprozesses.</para>
</listitem>
<listitem>
<para><literal>CONF_WORLD</literal> — Optionen für
die <maketarget>buildworld</maketarget> und
<maketarget>installworld</maketarget> 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
class="directory">/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 <username>root</username> sich über
&man.sshd.8; anzumelden.</para>
</listitem>
<listitem>
<para><literal>cust_install_files</literal> —
Installiert Dateien aus dem <filename
class="directory">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
class="directory">/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 <replaceable>2222</replaceable> < _.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 <replaceable>2222</replaceable> | sh updatep1</userinput></screen>
</step>
</procedure>
</sect3>
</sect2>
</sect1>
<index/>
</article>
|