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:
parent
86a127eff7
commit
ced0749cb5
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=49277
1 changed files with 114 additions and 172 deletions
|
|
@ -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>… Ausgaben des Kommandos …</emphasis>
|
||||
&prompt.root; <userinput>exit</userinput>
|
||||
Script done, …</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, …</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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue