Update to r44734:

Editorial review of Variables and Targets section.
Move note on scripting the process to above the process.
This commit is contained in:
Bjoern Heidotting 2016-08-14 07:22:31 +00:00
parent 86a127eff7
commit ced0749cb5
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=49277

View file

@ -5,7 +5,7 @@
$FreeBSD$
$FreeBSDde$
basiert auf: r44733
basiert auf: r44734
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="updating-upgrading">
<info><title>&os; aktualisieren</title>
@ -1427,6 +1427,26 @@ before running "/usr/sbin/freebsd-update install"</screen>
Reihenfolge bei der Aktualisierung geführt, die im folgenden
Prozess beschrieben wird.</para>
<note>
<para>Es ist ratsam, die Ausgaben von <command>make</command>
in einer Datei zu sichern. Wenn etwas schief geht, kann
eine Kopie der Fehlermeldung zu einer der &os;-Mailinglisten
gesendet werden.</para>
<para>Dazu können Sie einfach <command>script</command>
benutzen, dem Sie beim Aufruf als Parameter den Dateinamen
für die Ausgaben mitgeben. Sichern Sie die Ausgaben nicht
nach <filename>/tmp</filename>, da dessen Inhalt beim
nächsten Neustart vielleicht verloren geht. Ein besserer
Platz ist <filename>/var/tmp</filename>. Setzen Sie dieses
Kommando unmittelbar vor dem Neubau ab und geben Sie
<userinput>exit</userinput> ein, wenn der Bau abgeschlossen
ist:</para>
<screen>&prompt.root; <userinput>script <replaceable>/var/tmp/mw.out</replaceable></userinput>
Script started, output file is /var/tmp/mw.out</screen>
</note>
<procedure>
<title>Zusammenfassung des Aktualisierungsprozesses</title>
@ -1448,60 +1468,60 @@ before running "/usr/sbin/freebsd-update install"</screen>
</step>
<step>
<para>Übersetzen Sie zuerst den neuen Compiler und
ein paar damit zusammenhängende Werkzeuge. Verwenden Sie
dann den neuen Compiler, um den Rest des Basissystems zu
erstellen. Das Ergebnis wird in
<filename>/usr/obj</filename> abgelegt.</para>
<para>Übersetzen Sie zuerst den neuen Compiler und
ein paar damit zusammenhängende Werkzeuge. Verwenden Sie
dann den neuen Compiler, um den Rest des Basissystems zu
erstellen. Das Ergebnis wird in
<filename>/usr/obj</filename> abgelegt.</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildworld</userinput></screen>
</step>
</step>
<step>
<para>Benutzen Sie den neuen Compiler aus
<filename>/usr/obj</filename>, um sich vor falschen
Compiler-Kernel-Kombinationen abzusichern. Dies ist
notwendig, da sich einige Datenstrukturen geändert haben
könnten und Programme wie &man.ps.1; und &man.top.1; nur
mit einem Kernel zusammen arbeiten, der auch zu dem
entsprechenden Quellcode passt.</para>
<step>
<para>Benutzen Sie den neuen Compiler aus
<filename>/usr/obj</filename>, um sich vor falschen
Compiler-Kernel-Kombinationen abzusichern. Dies ist
notwendig, da sich einige Datenstrukturen geändert haben
könnten und Programme wie &man.ps.1; und &man.top.1; nur
mit einem Kernel zusammen arbeiten, der auch zu dem
entsprechenden Quellcode passt.</para>
<screen>&prompt.root; <userinput>make buildkernel</userinput></screen>
</step>
<screen>&prompt.root; <userinput>make buildkernel</userinput></screen>
</step>
<step>
<para>Installieren Sie den neuen Kernel und die Kernelmodule,
damit Sie den frisch aktualisierten Kernel starten
können. Wenn <varname>kern.securelevel</varname> einen
Wert größer als <literal>1</literal> besitzt
<emphasis>und</emphasis> der Kernel mit
<literal>noschg</literal> oder ähnlichen Optionen geschützt
ist, müssen Sie zuerst in den Single-User-Modus wechseln.
Andernfalls läuft dieses Kommando problemlos im
Mehrbenutzermodus. Weitere Informationen über
<varname>kern.securelevel</varname> finden Sie in
&man.init.8;. Optionen, die auf Dateien gesetzt werden
können, werden in &man.chflags.1; detailliert
erläutert.</para>
<step>
<para>Installieren Sie den neuen Kernel und die Kernelmodule,
damit Sie den frisch aktualisierten Kernel starten
können. Wenn <varname>kern.securelevel</varname> einen
Wert größer als <literal>1</literal> besitzt
<emphasis>und</emphasis> der Kernel mit
<literal>noschg</literal> oder ähnlichen Optionen geschützt
ist, müssen Sie zuerst in den Single-User-Modus wechseln.
Andernfalls läuft dieses Kommando problemlos im
Mehrbenutzermodus. Weitere Informationen über
<varname>kern.securelevel</varname> finden Sie in
&man.init.8;. Optionen, die auf Dateien gesetzt werden
können, werden in &man.chflags.1; detailliert
erläutert.</para>
<screen>&prompt.root; <userinput>make installkernel</userinput></screen>
</step>
<screen>&prompt.root; <userinput>make installkernel</userinput></screen>
</step>
<step>
<para>Starten Sie das System in den Single-User-Modus, damit
Probleme mit der Aktualisierung von Programmen, die bereits
gestartet sind, minimiert werden. Ebenso minimiert dieser
Modus Probleme, die mit der Verwendung des alten
Basissystems und des neuen Kernels zu tun haben.</para>
<step>
<para>Starten Sie das System in den Single-User-Modus, damit
Probleme mit der Aktualisierung von Programmen, die bereits
gestartet sind, minimiert werden. Ebenso minimiert dieser
Modus Probleme, die mit der Verwendung des alten
Basissystems und des neuen Kernels zu tun haben.</para>
<screen>&prompt.root; <userinput>shutdown now</userinput></screen>
<screen>&prompt.root; <userinput>shutdown now</userinput></screen>
<para>Führen Sie folgende Befehle im Single-User-Modus aus,
wenn das System mit einem
<acronym>UFS</acronym>-Dateisystem formatiert ist:</para>
<para>Führen Sie folgende Befehle im Single-User-Modus aus,
wenn das System mit einem
<acronym>UFS</acronym>-Dateisystem formatiert ist:</para>
<screen>&prompt.root; <userinput>mount -u /</userinput>
<screen>&prompt.root; <userinput>mount -u /</userinput>
&prompt.root; <userinput>mount -a -t ufs</userinput>
&prompt.root; <userinput>swapon -a</userinput></screen>
@ -1512,10 +1532,10 @@ before running "/usr/sbin/freebsd-update install"</screen>
<screen>&prompt.root; <userinput>zfs set readonly=off zroot</userinput>
&prompt.root; <userinput>zfs mount -a</userinput></screen>
</step>
</step>
<step>
<para>Optional: Wenn eine andere Tastaturbelegung als
<step>
<para>Optional: Wenn eine andere Tastaturbelegung als
US-Englisch gewünscht wird, kann diese mit &man.kbdmap.1;
angepasst werden:</para>
@ -1614,6 +1634,11 @@ before running "/usr/sbin/freebsd-update install"</screen>
<para>Der Bauprozess verwendet verschiedene
Konfigurationsdateien.</para>
<para>Das <filename>Makefile</filename> in
<filename>/usr/src</filename> legt fest, wie die Programme,
aus denen &os; besteht, zu bauen sind und in welcher
Reihenfolge diese zu bauen sind.</para>
<para>Die verfügbaren Optionen für <command>make</command>
werden in &man.make.conf.5; und
<filename>/usr/share/examples/etc/make.conf</filename>
@ -1646,68 +1671,28 @@ before running "/usr/sbin/freebsd-update install"</screen>
</sect2>
<sect2 xml:id="make-buildworld">
<title>Übersetzen der Quellen des Basissystems</title>
<title>Variablen und Ziele</title>
<para>Es ist ratsam, die Ausgaben von &man.make.1; in einer
Datei zu sichern. Wenn etwas schief geht, kann eine Kopie
der Fehlermeldung zu einer der &os;-Mailinglisten gesendet
werden.</para>
<para>Dazu können Sie einfach das Kommando &man.script.1;
benutzen, dem Sie beim Aufruf als Parameter den Dateinamen
für die Ausgaben mitgeben. Setzen Sie das Kommando
unmittelbar vor dem Neubau ab und geben Sie
<userinput>exit</userinput> ein, wenn der Bau abgeschlossen
ist:</para>
<screen>&prompt.root; <userinput>script /var/tmp/mw.out</userinput>
Script started, output file is /var/tmp/mw.out
&prompt.root; <userinput>make TARGET</userinput>
<emphasis>&hellip; Ausgaben des Kommandos &hellip;</emphasis>
&prompt.root; <userinput>exit</userinput>
Script done, &hellip;</screen>
<para>Sichern Sie die Ausgaben <emphasis>nicht</emphasis> in
<filename>/tmp</filename>, da dieses Verzeichnis beim
nächsten Reboot aufgeräumt werden kann. Ein geeigneteres
Verzeichnis ist <filename>/var/tmp</filename>, oder das
Heimatverzeichnis von <systemitem
class="username">root</systemitem>.</para>
<para>Wechseln Sie in das Verzeichnis, in dem die Quellen liegen
(in der Voreinstellung ist das
<filename>/usr/src</filename>):</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput></screen>
<indexterm><primary><command>make</command></primary></indexterm>
<para>Benutzen Sie &man.make.1;, um das Basissystem neu zu
bauen. Dieses Kommando liest Anweisungen aus einem
<filename>Makefile</filename>, wechles beschreibt, wie die
Programme, aus denen &os; besteht, zu bauen sind und in
welcher Reihenfolge diese zu bauen sind.</para>
<para>Ein typischer Aufruf von <command>make</command> sieht wie
folgt aus:</para>
<para>Ein typischer Aufruf von <command>make</command> sieht
wie folgt aus:</para>
<screen>&prompt.root; <userinput>make -<replaceable>x</replaceable> -D<replaceable>VARIABLE</replaceable> <replaceable>target</replaceable></userinput></screen>
<para>In diesem Beispiel ist
<option>-<replaceable>x</replaceable></option> eine Option,
die an &man.make.1; weitergegeben wird. Eine Liste gültiger
die an <command>make</command> übergeben wird. Eine Liste gültiger
Optionen finden Sie in &man.make.1;.</para>
<para>Das Verhalten eines <filename>Makefile</filename>s wird von
Variablen bestimmt. Mit
<option>-D<replaceable>VARIABLE</replaceable></option> setzen Sie
eine Variable. Diese Variablen sind dieselben, die auch in
<filename>/etc/make.conf</filename> gesetzt werden, dies ist nur
ein alternativer Weg, Variablen zu setzen.</para>
<para>Mit
<option>-D<replaceable>VARIABLE</replaceable></option>
setzen Sie eine Variable. Das Verhalten der
<filename>Makefile</filename> wird von Variablen bestimmt.
Diese sind etweder in <filename>/etc/make.conf</filename>
eingetragen, oder können an
<command>make</command> übergeben werden. Das folgende
Beispiel setzt eine Variable, die verhindert, dass die
<quote>profiled</quote> Bibliotheken gebaut werden:</para>
<para>Um zu verhindern, dass die <quote>profiled</quote>
Bibliotheken gebaut werden, rufen Sie <command>make</command> wie
folgt auf:</para>
<screen>&prompt.root; <userinput>make -DNO_PROFILE <replaceable>target</replaceable></userinput></screen>
<para>Dieser Aufruf entspricht dem folgenden Eintrag in
@ -1715,99 +1700,56 @@ Script done, &hellip;</screen>
<programlisting>NO_PROFILE= true # Avoid compiling profiled libraries</programlisting>
<para>Jedes <filename>Makefile</filename> definiert einige
<quote>Ziele</quote>, die festlegen, was genau zu tun ist. Mit
<replaceable>target</replaceable> wählen Sie eins dieser
Ziele aus.</para>
<para>Einige Ziele im <filename>Makefile</filename> werden
<para>Das <quote>Ziel</quote> sagt <command>make</command>
was zu tun ist und das <filename>Makefile</filename>
definiert die verfügbaren Ziele. Einige Ziele werden
verwendet, um den Bauprozess in eine Reihe von
Einzelschritten zu unterteilen.</para>
<para>Im Regelfall müssen &man.make.1; keine Parameter
mitgegeben werden, so dass die Kommandozeile wie folgt
aussehen wird:</para>
<screen>&prompt.root; <userinput>make <replaceable>target</replaceable></userinput></screen>
<para><replaceable>target</replaceable> steht dabei für
die verschiedenen Ziele. Das erste Ziel sollte immer
<buildtarget>buildworld</buildtarget> sein.</para>
<para>Mit <buildtarget>buildworld</buildtarget> wird ein
kompletter Baum unterhalb von <filename>/usr/obj</filename>
gebaut, der mit <buildtarget>installworld</buildtarget> auf
dem System installiert werden kann.</para>
<para>Über separate Optionen zu verfügen, ist aus mehreren
Gründen nützlich. Erstens können Sie das System gefahrlos
auf einem laufenden System bauen, da die Bauprozedur vom
Rest des Systems isoliert ist. Das System lässt sich im
Mehrbenutzermodus ohne negative Seiteneffekte bauen. Die
Installation mit <buildtarget>installworld</buildtarget>
sollte aber immer noch im Single-User-Modus erfolgen.</para>
Gründen nützlich. Erstens erlaubt dies einen Bauprozess,
der die Komponenten des laufenden Systems nicht
beeinträchtigt. Deswegen können Sie
<command>buildworld</command> gefahrlos im Mehrbenutzermodus
laufen lassen. Die Installation mit
<buildtarget>installworld</buildtarget> sollte aber immer
noch im Single-User-Modus erfolgen.</para>
<para>Zweitens kann NFS benutzt werden, um mehrere Maschinen
in einem Netzwerk zu aktualisieren. Um die Maschinen
<systemitem>A</systemitem>, <systemitem>B</systemitem> und
<systemitem>C</systemitem> zu aktualisieren, lassen Sie
<command>make buildworld</command> und
<command>make installworld</command> auf
<systemitem>A</systemitem> laufen. Auf den Maschinen
<systemitem>B</systemitem> und <systemitem>C</systemitem>
können Sie die Verzeichnisse <filename>/usr/src</filename>
und <filename>/usr/obj</filename> von
<systemitem>A</systemitem> einhängen und brauchen dort nur
noch <command>make installworld</command> auszuführen, um
die Bauresultate zu installieren.</para>
<para>Obwohl das Ziel <buildtarget>world</buildtarget> noch
existiert, sollte es wirklich nicht mehr benutzt
werden.</para>
<para>Benutzen Sie stattdessen:</para>
<screen>&prompt.root; <userinput>make buildworld</userinput></screen>
<para>Zweitens kann, wie in <xref linkend="small-lan"/>
beschrieben, <acronym>NFS</acronym> benutzt werden, um
mehrere Maschinen in einem Netzwerk zu aktualisieren.</para>
<para>Mit <option>-j</option> können Sie
<command>make</command> anweisen, mehrere Prozesse zu
starten. Besonders effektiv ist das auf
Mehrprozessor-Systemen. Da aber der Übersetzungsprozess
hauptsächlich von I/O statt der CPU bestimmt wird, ist diese
Option auch auf Einprozessor-Systemen nützlich.</para>
starten. Da der Übersetzungsprozess
hauptsächlich von <acronym>I/O</acronym> statt der
<acronym>CPU</acronym> bestimmt wird, ist diese Option für
Einprozessor- und Mehrprozessor-Systeme nützlich.</para>
<para>Auf einem typischen Einprozessor-System können Sie den
folgenden Befehl eingeben:</para>
folgenden Befehl eingeben, um bis zu vier Prozesse
gleichzeitig laufen zu lassen. Erfahrungsberichte aus den
Mailinglisten zeigen, dass dieser Aufruf typischerweise den
besten Geschwindigkeitsgewinn bringt:</para>
<screen>&prompt.root; <userinput>make -j4 buildworld</userinput></screen>
<para>&man.make.1; wird dann bis zu vier Prozesse gleichzeitig
laufen lassen. Erfahrungsberichte aus den Mailinglisten zeigen,
dass dieser Aufruf typischerweise den besten
Geschwindigkeitsgewinn bringt.</para>
<para>Wenn Sie ein Mehrprozessor-System besitzen und SMP im
Kernel konfiguriert ist, probieren Sie Werte zwischen 6 und
10 aus.</para>
<para>Wenn Sie ein Mehrprozessor-System besitzen, probieren
Sie Werte zwischen <literal>6</literal> und
<literal>10</literal> aus.</para>
<indexterm>
<primary>Bau des Basissystems</primary>
<secondary>Laufzeiten</secondary>
</indexterm>
<para>Die Laufzeit eines Baus wird von vielen Faktoren
beeinflusst, ein aktuelles System benötigt aber etwa
zwei Stunden um &os.stable; zu bauen. Der Bau von
&os.current; dauert etwas länger.</para>
<note>
<para>Wenn mit <command>make buildworld</command> Variablen
verwendet werden, müssen dieselben Variablen auch bei
<command>make installworld</command> angegeben werden. Auf
die anderen Optionen trifft das nur bedingt zu:
<option>-j</option> darf mit
<buildtarget>installworld</buildtarget> nicht benutzt
werden.</para>
<command>make installworld</command> angegeben werden.
Allerdings darf <option>-j</option> zusammen mit
<buildtarget>installworld</buildtarget>
<emphasis>nicht</emphasis> benutzt werden.</para>
<para>Haben Sie zum Bauen die folgende Kommandozeile
verwendet:</para>