- Please welcome to the german translation of the developers-handbook.
- This work was done by the FreeBSD German Documentation Project. A list of people involved in this translation can be found under https://doc.bsdgroup.de/status/developers-handbook.html
This commit is contained in:
parent
863ce6a488
commit
8c3cd27b1b
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=33829
18 changed files with 15715 additions and 1 deletions
de_DE.ISO8859-1/books
Makefile
developers-handbook
Makefilebook.sgmlchapters.ent
dma
introduction
ipv6
kernelbuild
kerneldebug
l10n
policies
secure
sockets
testing
tools
x86
|
@ -6,7 +6,8 @@
|
||||||
# $FreeBSDde: de-docproj/books/Makefile,v 1.6 2007/08/20 19:11:15 jkois Exp $
|
# $FreeBSDde: de-docproj/books/Makefile,v 1.6 2007/08/20 19:11:15 jkois Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
SUBDIR = faq
|
SUBDIR = developers-handbook
|
||||||
|
SUBDIR+= faq
|
||||||
SUBDIR+= fdp-primer
|
SUBDIR+= fdp-primer
|
||||||
SUBDIR+= handbook
|
SUBDIR+= handbook
|
||||||
SUBDIR+= porters-handbook
|
SUBDIR+= porters-handbook
|
||||||
|
|
50
de_DE.ISO8859-1/books/developers-handbook/Makefile
Normal file
50
de_DE.ISO8859-1/books/developers-handbook/Makefile
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# The FreeBSD Documentation Project
|
||||||
|
# The FreeBSD German Documentation Project
|
||||||
|
#
|
||||||
|
# $FreeBSD$
|
||||||
|
# $FreeBSDde: de-docproj/books/developers-handbook/Makefile,v 1.2 2007/08/31 01:42:15 as Exp $
|
||||||
|
# basiert auf: 1.23
|
||||||
|
#
|
||||||
|
# Build the FreeBSD Developers' Handbook.
|
||||||
|
#
|
||||||
|
|
||||||
|
MAINTAINER=doc@FreeBSD.org
|
||||||
|
|
||||||
|
DOC?= book
|
||||||
|
|
||||||
|
FORMATS?= html-split
|
||||||
|
|
||||||
|
HAS_INDEX= true
|
||||||
|
|
||||||
|
INSTALL_COMPRESSED?= gz
|
||||||
|
INSTALL_ONLY_COMPRESSED?=
|
||||||
|
|
||||||
|
# Images
|
||||||
|
IMAGES_EN= sockets/layers.eps sockets/sain.eps sockets/sainfill.eps sockets/sainlsb.eps sockets/sainmsb.eps sockets/sainserv.eps sockets/serv.eps sockets/serv2.eps sockets/slayers.eps
|
||||||
|
|
||||||
|
#
|
||||||
|
# SRCS lists the individual SGML files that make up the document. Changes
|
||||||
|
# to any of these files will force a rebuild
|
||||||
|
#
|
||||||
|
|
||||||
|
# SGML content
|
||||||
|
SRCS= book.sgml
|
||||||
|
SRCS+= dma/chapter.sgml
|
||||||
|
SRCS+= introduction/chapter.sgml
|
||||||
|
SRCS+= ipv6/chapter.sgml
|
||||||
|
SRCS+= kernelbuild/chapter.sgml
|
||||||
|
SRCS+= kerneldebug/chapter.sgml
|
||||||
|
SRCS+= l10n/chapter.sgml
|
||||||
|
SRCS+= policies/chapter.sgml
|
||||||
|
SRCS+= secure/chapter.sgml
|
||||||
|
SRCS+= sockets/chapter.sgml
|
||||||
|
SRCS+= testing/chapter.sgml
|
||||||
|
SRCS+= tools/chapter.sgml
|
||||||
|
SRCS+= x86/chapter.sgml
|
||||||
|
|
||||||
|
# Entities
|
||||||
|
|
||||||
|
URL_RELPREFIX?= ../../../..
|
||||||
|
DOC_PREFIX?= ${.CURDIR}/../../..
|
||||||
|
|
||||||
|
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
|
238
de_DE.ISO8859-1/books/developers-handbook/book.sgml
Normal file
238
de_DE.ISO8859-1/books/developers-handbook/book.sgml
Normal file
|
@ -0,0 +1,238 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/book.sgml,v 1.10 2009/02/10 12:55:14 jkois Exp $
|
||||||
|
basiert auf: 1.55
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE BOOK PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
|
||||||
|
<!ENTITY % books.ent PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Books Entity Set//DE">
|
||||||
|
%books.ent;
|
||||||
|
<!ENTITY % chapters SYSTEM "chapters.ent"> %chapters;
|
||||||
|
<!ENTITY % chap.index "IGNORE">
|
||||||
|
]>
|
||||||
|
|
||||||
|
<book lang="de">
|
||||||
|
<bookinfo>
|
||||||
|
<title>FreeBSD Developers' Handbook</title>
|
||||||
|
|
||||||
|
<corpauthor>The FreeBSD Documentation Project</corpauthor>
|
||||||
|
|
||||||
|
<pubdate>August 2000</pubdate>
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
<year>2000</year>
|
||||||
|
<year>2001</year>
|
||||||
|
<year>2002</year>
|
||||||
|
<year>2003</year>
|
||||||
|
<year>2004</year>
|
||||||
|
<year>2005</year>
|
||||||
|
<year>2006</year>
|
||||||
|
<holder>The FreeBSD Documentation Project</holder>
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
<year>2008</year>
|
||||||
|
<year>2009</year>
|
||||||
|
<holder>The FreeBSD German Documentation Project</holder>
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
&bookinfo.legalnotice;
|
||||||
|
|
||||||
|
<legalnotice id="trademarks" role="trademarks">
|
||||||
|
&tm-attrib.freebsd;
|
||||||
|
&tm-attrib.apple;
|
||||||
|
&tm-attrib.ibm;
|
||||||
|
&tm-attrib.ieee;
|
||||||
|
&tm-attrib.intel;
|
||||||
|
&tm-attrib.linux;
|
||||||
|
&tm-attrib.microsoft;
|
||||||
|
&tm-attrib.opengroup;
|
||||||
|
&tm-attrib.sun;
|
||||||
|
&tm-attrib.general;
|
||||||
|
</legalnotice>
|
||||||
|
|
||||||
|
<abstract>
|
||||||
|
<para>Willkommen zum Entwickler-Handbuch. Dieses Handbuch ist
|
||||||
|
<emphasis>jederzeit unter Bearbeitung</emphasis> und das
|
||||||
|
Ergebnis der Arbeit vieler Einzelpersonen. Dies kann
|
||||||
|
dazu führen, dass bestimmte Bereiche nicht mehr aktuell
|
||||||
|
sind und auf den neuesten Stand gebracht werden müssen.
|
||||||
|
Bei Unklarheiten empfiehlt es sich daher stets, auch die
|
||||||
|
<ulink
|
||||||
|
url="&url.base;/doc/en_US.ISO8859-1/books/developers-handbook/index.html">
|
||||||
|
englische Originalversion</ulink> des Handbuchs zu lesen.</para>
|
||||||
|
|
||||||
|
<para>Wenn Sie bei der Übersetzung dieses Handbuchs mithelfen
|
||||||
|
möchten, senden Sie bitte eine E-Mail an die Mailingliste
|
||||||
|
&a.de.translators;.</para>
|
||||||
|
|
||||||
|
<para>Die aktuelle Version dieses Handbuchs ist immer auf dem
|
||||||
|
<ulink url="http://www.FreeBSD.org/">&os;-Webserver</ulink>
|
||||||
|
verfügbar und kann in verschiedenen Formaten und in
|
||||||
|
komprimierter Form vom <ulink
|
||||||
|
url="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc">&os;-FTP-Server</ulink>
|
||||||
|
oder einem der zahlreichen <ulink
|
||||||
|
url="&url.base;/doc/de_DE.ISO8859-1/books/handbook/mirrors-ftp.html">Spiegel</ulink>
|
||||||
|
herunter geladen werden (ältere Versionen finden Sie hingegen
|
||||||
|
unter <ulink url="http://docs.FreeBSD.org/doc/"></ulink>).</para>
|
||||||
|
</abstract>
|
||||||
|
</bookinfo>
|
||||||
|
|
||||||
|
<part id="Basics">
|
||||||
|
<title>Grundlagen</title>
|
||||||
|
|
||||||
|
&chap.introduction;
|
||||||
|
&chap.tools;
|
||||||
|
&chap.secure;
|
||||||
|
&chap.l10n;
|
||||||
|
&chap.policies;
|
||||||
|
&chap.testing;
|
||||||
|
</part>
|
||||||
|
|
||||||
|
<part id="ipc">
|
||||||
|
<title>Interprozess-Kommunikation</title>
|
||||||
|
|
||||||
|
&chap.sockets;
|
||||||
|
&chap.ipv6;
|
||||||
|
|
||||||
|
</part>
|
||||||
|
|
||||||
|
<part id="kernel">
|
||||||
|
<title>Kernel</title>
|
||||||
|
|
||||||
|
&chap.dma;
|
||||||
|
&chap.kernelbuild;
|
||||||
|
&chap.kerneldebug;
|
||||||
|
|
||||||
|
</part>
|
||||||
|
|
||||||
|
<part id="architectures">
|
||||||
|
<title>Architekturen</title>
|
||||||
|
|
||||||
|
&chap.x86;
|
||||||
|
|
||||||
|
</part>
|
||||||
|
|
||||||
|
<part id="appendices">
|
||||||
|
<title>Anhang</title>
|
||||||
|
|
||||||
|
<bibliography>
|
||||||
|
|
||||||
|
<biblioentry id="COD" xreflabel="1">
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Dave</firstname>
|
||||||
|
<othername role="MI">A</othername>
|
||||||
|
<surname>Patterson</surname>
|
||||||
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>John</firstname>
|
||||||
|
<othername role="MI">L</othername>
|
||||||
|
<surname>Hennessy</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<copyright><year>1998</year><holder>Morgan Kaufmann Publishers,
|
||||||
|
Inc.</holder></copyright>
|
||||||
|
<isbn>1-55860-428-6</isbn>
|
||||||
|
<publisher>
|
||||||
|
<publishername>Morgan Kaufmann Publishers, Inc.</publishername>
|
||||||
|
</publisher>
|
||||||
|
<title>Computer Organization and Design</title>
|
||||||
|
<subtitle>The Hardware / Software Interface</subtitle>
|
||||||
|
<pagenums>1-2</pagenums>
|
||||||
|
</biblioentry>
|
||||||
|
|
||||||
|
<biblioentry xreflabel="2">
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>W.</firstname>
|
||||||
|
<othername role="Middle">Richard</othername>
|
||||||
|
<surname>Stevens</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<copyright><year>1993</year><holder>Addison Wesley Longman,
|
||||||
|
Inc.</holder></copyright>
|
||||||
|
<isbn>0-201-56317-7</isbn>
|
||||||
|
<publisher>
|
||||||
|
<publishername>Addison Wesley Longman, Inc.</publishername>
|
||||||
|
</publisher>
|
||||||
|
<title>Advanced Programming in the Unix Environment</title>
|
||||||
|
<pagenums>1-2</pagenums>
|
||||||
|
</biblioentry>
|
||||||
|
|
||||||
|
<biblioentry xreflabel="3">
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Marshall</firstname>
|
||||||
|
<othername role="Middle">Kirk</othername>
|
||||||
|
<surname>McKusick</surname>
|
||||||
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>George</firstname>
|
||||||
|
<surname>Neville-Neil</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<copyright><year>2004</year><holder>Addison-Wesley Publishing Company,
|
||||||
|
Inc.</holder></copyright>
|
||||||
|
<isbn>0-201-70245-2</isbn>
|
||||||
|
<publisher>
|
||||||
|
<publishername>Addison-Wesley</publishername>
|
||||||
|
</publisher>
|
||||||
|
<title>The Design and Implementation of the FreeBSD Operating System</title>
|
||||||
|
<pagenums>1-2</pagenums>
|
||||||
|
</biblioentry>
|
||||||
|
|
||||||
|
<biblioentry id="Phrack" xreflabel="4">
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Aleph</firstname>
|
||||||
|
<surname>One</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<title>Phrack 49; "Smashing the Stack for Fun and Profit"</title>
|
||||||
|
</biblioentry>
|
||||||
|
|
||||||
|
<biblioentry id="StackGuard" xreflabel="5">
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Chrispin</firstname>
|
||||||
|
<surname>Cowan</surname>
|
||||||
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>Calton</firstname>
|
||||||
|
<surname>Pu</surname>
|
||||||
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>Dave</firstname>
|
||||||
|
<surname>Maier</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<title>StackGuard; Automatic Adaptive Detection and Prevention of
|
||||||
|
Buffer-Overflow Attacks</title>
|
||||||
|
</biblioentry>
|
||||||
|
|
||||||
|
<biblioentry id="OpenBSD" xreflabel="6">
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Todd</firstname>
|
||||||
|
<surname>Miller</surname>
|
||||||
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>Theo</firstname>
|
||||||
|
<surname>de Raadt</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<title>strlcpy and strlcat -- consistent, safe string copy and
|
||||||
|
concatenation.</title>
|
||||||
|
</biblioentry>
|
||||||
|
|
||||||
|
</bibliography>
|
||||||
|
|
||||||
|
</part>
|
||||||
|
|
||||||
|
<![ %chap.index; [ &chap.index; ]]>
|
||||||
|
|
||||||
|
</book>
|
37
de_DE.ISO8859-1/books/developers-handbook/chapters.ent
Normal file
37
de_DE.ISO8859-1/books/developers-handbook/chapters.ent
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
Creates entities for each chapter in the FreeBSD Developer's
|
||||||
|
Handbook. Each entity is named chap.foo, where foo is the value
|
||||||
|
of the id attribute on that chapter, and corresponds to the name of
|
||||||
|
the directory in which that chapter's .sgml file is stored.
|
||||||
|
|
||||||
|
Chapters should be listed in the order in which they are referenced.
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/chapters.ent,v 1.2 2007/08/31 01:42:15 as Exp $
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Part one -->
|
||||||
|
<!ENTITY chap.introduction SYSTEM "introduction/chapter.sgml">
|
||||||
|
<!ENTITY chap.tools SYSTEM "tools/chapter.sgml">
|
||||||
|
<!ENTITY chap.secure SYSTEM "secure/chapter.sgml">
|
||||||
|
<!ENTITY chap.l10n SYSTEM "l10n/chapter.sgml">
|
||||||
|
<!ENTITY chap.policies SYSTEM "policies/chapter.sgml">
|
||||||
|
<!ENTITY chap.testing SYSTEM "testing/chapter.sgml">
|
||||||
|
|
||||||
|
<!-- Part two - IPC -->
|
||||||
|
<!ENTITY chap.sockets SYSTEM "sockets/chapter.sgml">
|
||||||
|
<!ENTITY chap.ipv6 SYSTEM "ipv6/chapter.sgml">
|
||||||
|
|
||||||
|
<!-- Part three - Kernel -->
|
||||||
|
<!ENTITY chap.dma SYSTEM "dma/chapter.sgml">
|
||||||
|
<!ENTITY chap.kernelbuild SYSTEM "kernelbuild/chapter.sgml">
|
||||||
|
<!ENTITY chap.kerneldebug SYSTEM "kerneldebug/chapter.sgml">
|
||||||
|
|
||||||
|
<!-- Part five - Architectures -->
|
||||||
|
<!ENTITY chap.x86 SYSTEM "x86/chapter.sgml">
|
||||||
|
|
||||||
|
<!-- Part six - Appendices -->
|
||||||
|
<!ENTITY chap.index SYSTEM "index.sgml">
|
1477
de_DE.ISO8859-1/books/developers-handbook/dma/chapter.sgml
Normal file
1477
de_DE.ISO8859-1/books/developers-handbook/dma/chapter.sgml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,275 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/introduction/chapter.sgml,v 1.10 2008/01/24 19:34:49 seirei Exp $
|
||||||
|
basiert auf: 1.18
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="introduction">
|
||||||
|
<chapterinfo>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Murray</firstname>
|
||||||
|
<surname>Stokely</surname>
|
||||||
|
<contrib>Beigetragen von </contrib>
|
||||||
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>Jeroen</firstname>
|
||||||
|
<surname>Ruigrok van der Werven</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Fabian</firstname>
|
||||||
|
<surname>Borschel</surname>
|
||||||
|
<contrib>Übersetzt von </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</chapterinfo>
|
||||||
|
|
||||||
|
<title>Einführung</title>
|
||||||
|
|
||||||
|
<sect1 id="introduction-devel">
|
||||||
|
<title>Unter FreeBSD entwickeln</title>
|
||||||
|
|
||||||
|
<para>Hier sind wir also. Ihr System ist vollständig
|
||||||
|
installiert und Sie wollen mit dem Programmieren beginnen.
|
||||||
|
Aber womit sollen Sie anfangen? Was bietet Ihnen FreeBSD?
|
||||||
|
Was kann es für einen Programmierer tun?</para>
|
||||||
|
|
||||||
|
<para>Dies sind einige der Fragen, welche dieses Handbuch
|
||||||
|
zu beantworten versucht. Natürlich gibt es, analog zu
|
||||||
|
anderen Berufen, auch bei Programmierern unterschiedliche
|
||||||
|
Leistungsniveaus. Für die einen ist es ein Hobby,
|
||||||
|
für die anderen ist es der Beruf. Die Informationen
|
||||||
|
in diesem Kapitel dürften eher für den
|
||||||
|
Programmieranfänger geeignet sein; allerdings könnte
|
||||||
|
es auch für Programmierer, die bisher nichts mit der
|
||||||
|
&os;-Plattform zu tun hatten, interessante Informationen
|
||||||
|
enthalten.</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="introduction-bsdvision">
|
||||||
|
<title>Die Vision von BSD</title>
|
||||||
|
|
||||||
|
<para>Ziel ist es, das bestmögliche &unix;-artige
|
||||||
|
Betriebssystempaket zu erstellen, mit dem gebührenden
|
||||||
|
Respekt gegenüber der Ideologie der ursprünglichen
|
||||||
|
Software, sowie der Bedienbarkeit, Leistungsfähigkeit und
|
||||||
|
Stabilität.</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="introduction-archguide">
|
||||||
|
<title>Grundlegende Richtlinien</title>
|
||||||
|
|
||||||
|
<para>Unsere Ideologie kann durch die folgenden Leitfäden
|
||||||
|
beschrieben werden.</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>Füge keine neue Funktionalität hinzu, solange
|
||||||
|
ein Programmierer diese nicht zur Fertigstellung einer
|
||||||
|
realen Anwendung benötigt.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Zu entscheiden, was ein System ist, ist genauso
|
||||||
|
wichtig wie zu entscheiden, was ein System nicht ist.
|
||||||
|
Versuchen Sie nicht, alle möglichen Wünsche zu
|
||||||
|
erfüllen; machen Sie lieber das System erweiterbar, so
|
||||||
|
dass zusätzliche Bedürfnisse in einer
|
||||||
|
aufwärtskompatiblen Weise bedient werden
|
||||||
|
können.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Das Einzige, das schlimmer ist, als von einem Beispiel
|
||||||
|
auf die Allgemeinheit zu schließen, ist, von
|
||||||
|
überhaupt keinem Beispiel auf die Allgemeinheit zu
|
||||||
|
schließen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Solange ein Problem nicht vollständig verstanden
|
||||||
|
wurde, ist es besser, keine Lösung
|
||||||
|
bereitzustellen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Wenn Sie 90% des gewünschten Effektes bei nur 10%
|
||||||
|
des Aufwands erreichen können, sollten Sie besser die
|
||||||
|
einfachere Lösung verwenden.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Grenzen Sie Komplexität so gut wie möglich
|
||||||
|
ein.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Stellen Sie Mechanismen anstelle von Strategien bereit.
|
||||||
|
Überlassen Sie insbesondere Strategien für die
|
||||||
|
Benutzerschnittstelle dem Benutzerprogramm.</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>Aus Scheifler & Gettys: "X Window System"</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="introduction-layout">
|
||||||
|
<title>Der Aufbau von
|
||||||
|
<filename class="directory">/usr/src</filename></title>
|
||||||
|
|
||||||
|
<para>Der vollständige Quelltext von FreeBSD ist über
|
||||||
|
das öffentliche CVS-Repository verfügbar. Der
|
||||||
|
Quelltext wird normalerweise in <filename
|
||||||
|
class="directory">/usr/src</filename> abgelegt und enthält
|
||||||
|
die folgenden Unterverzeichnisse:</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<informaltable frame="none" pgwide="1">
|
||||||
|
<tgroup cols="2">
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Verzeichnis</entry>
|
||||||
|
<entry>Beschreibung</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">bin/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in
|
||||||
|
<filename>/bin</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">contrib/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien von beigesteuerter
|
||||||
|
Software</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">crypto/</filename></entry>
|
||||||
|
<entry>Quelldateien für die Kryptographie</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">etc/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/etc</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">games/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/usr/games</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">gnu/</filename></entry>
|
||||||
|
<entry>Programme, die unter der GNU Public License
|
||||||
|
stehen</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">include/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/usr/include</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">kerberos5/</filename></entry>
|
||||||
|
<entry>Quelldateien für Kerberos Version 5</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">lib/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/usr/lib</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">libexec/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/usr/libexec</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">release/</filename></entry>
|
||||||
|
<entry>Dateien, die für die Erstellung eines
|
||||||
|
FreeBSD-Releases nötig sind</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">rescue/</filename></entry>
|
||||||
|
<entry>Bausystem für die <filename
|
||||||
|
class="directory">/rescue</filename>-Programme</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">sbin/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/sbin</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">secure/</filename></entry>
|
||||||
|
<entry>Quelldateien für FreeSec</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">share/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/usr/share</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">sys/</filename></entry>
|
||||||
|
<entry>Kernel-Quelldateien</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">tools/</filename></entry>
|
||||||
|
<entry>Programme zum Verwalten und Testen von
|
||||||
|
FreeBSD</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">usr.bin/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/usr/bin</filename></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><filename
|
||||||
|
class="directory">usr.sbin/</filename></entry>
|
||||||
|
<entry>Quelldateien für Dateien in <filename
|
||||||
|
class="directory">/usr/sbin</filename></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
1914
de_DE.ISO8859-1/books/developers-handbook/ipv6/chapter.sgml
Normal file
1914
de_DE.ISO8859-1/books/developers-handbook/ipv6/chapter.sgml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,107 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/kernelbuild/chapter.sgml,v 1.4 2007/09/04 13:24:23 as Exp $
|
||||||
|
basiert auf: 1.1
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="kernelbuild">
|
||||||
|
<chapterinfo>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Johann</firstname>
|
||||||
|
<surname>Kois</surname>
|
||||||
|
<contrib>Übersetzt von </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</chapterinfo>
|
||||||
|
|
||||||
|
<title>Einen &os;-Kernel bauen und installieren</title>
|
||||||
|
|
||||||
|
<para>Ein Kernelentwickler muss wissen, wie der Bau eines angepassten
|
||||||
|
Kernels funktioniert, da das Debuggen des &os;-Kernels nur durch den
|
||||||
|
Bau eines neuen Kernels möglich ist. Es gibt zwei Wege, einen
|
||||||
|
angepassten Kernel zu bauen:</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>Den <quote>traditionellen</quote> Weg</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Den <quote>neuen</quote> Weg</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<para>Die folgenden Ausführungen setzen voraus, dass Sie
|
||||||
|
den Abschnitt <ulink
|
||||||
|
url="../handbook/kernelconfig-building.html">
|
||||||
|
Erstellen und Installation eines angepassten Kernels</ulink> des
|
||||||
|
FreeBSD-Handbuchs gelesen haben und daher wissen, wie man einen
|
||||||
|
FreeBSD-Kernel baut.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<sect1 id="kernelbuild-traditional">
|
||||||
|
<title>Einen Kernel auf die <quote>traditionelle</quote> Art und
|
||||||
|
Weise bauen</title>
|
||||||
|
|
||||||
|
<para>Bis &os; 4.X wurde dieser Weg zum Bau eines angepassten
|
||||||
|
Kernels empfohlen. Sie können Ihren Kernel nach wie vor
|
||||||
|
auf diese Art und Weise bauen (anstatt das Target
|
||||||
|
<quote>buildkernel</quote> der Makefiles im Verzeichnis
|
||||||
|
<filename role="directory">/usr/src/</filename> zu verwenden).
|
||||||
|
Dies kann beispielsweise sinnvoll sein, wenn Sie am
|
||||||
|
Kernel-Quellcode arbeiten. Haben Sie nur ein oder zwei Optionen
|
||||||
|
der Kernelkonfigurationsdatei geändert, ist dieser Weg in
|
||||||
|
der Regel schneller als der <quote>neue</quote> Weg.
|
||||||
|
Andererseits kann es aber auch zu unerwarteten Fehlern beim
|
||||||
|
Bau des Kernels kommen, wenn Sie Ihren Kernel unter aktuellen
|
||||||
|
&os;-Versionen auf diese Art und Weise bauen.</para>
|
||||||
|
|
||||||
|
<procedure>
|
||||||
|
<step>
|
||||||
|
<para>Erzeugen Sie den Kernel-Quellcode mit
|
||||||
|
&man.config.8;:</para>
|
||||||
|
|
||||||
|
<screen>&prompt.root; <userinput>/usr/sbin/config <replaceable>MYKERNEL</replaceable></userinput></screen>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step>
|
||||||
|
<para>Wechseln Sie in das Build-Verzeichnis. &man.config.8;
|
||||||
|
gibt den Namen dieses Verzeichnisses aus, wenn die Erzeugung
|
||||||
|
des Kernel-Quellcodes im vorherigen Schritt erfolgreich
|
||||||
|
abgeschlossen wurde.</para>
|
||||||
|
|
||||||
|
<screen>&prompt.root; <userinput>cd ../compile/<replaceable>MYKERNEL</replaceable></userinput></screen>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step>
|
||||||
|
<para>Kompilieren Sie den neuen Kernel:</para>
|
||||||
|
|
||||||
|
<screen>&prompt.root; <userinput>make depend</userinput>
|
||||||
|
&prompt.root; <userinput>make</userinput></screen>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step>
|
||||||
|
<para>Installieren Sie den neuen Kernel:</para>
|
||||||
|
|
||||||
|
<screen>&prompt.root; <userinput>make install</userinput></screen>
|
||||||
|
</step>
|
||||||
|
</procedure>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="kernelbuild-new">
|
||||||
|
<title>Einen Kernel auf die <quote>neue</quote> Art und Weise
|
||||||
|
bauen</title>
|
||||||
|
|
||||||
|
<para>Dieser Weg wird für alle aktuellen &os;-Versionen
|
||||||
|
empfohlen. Lesen Sie bitte den Abschnitt <ulink
|
||||||
|
url="../handbook/kernelconfig-building.html">Erstellen und
|
||||||
|
Installation eines angepassten Kernels</ulink> des
|
||||||
|
&os;-Handbuchs, wenn Sie Ihren Kernel auf diese Art und Weise
|
||||||
|
bauen wollen.</para>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
|
@ -0,0 +1,19 @@
|
||||||
|
# The FreeBSD Documentation Project
|
||||||
|
# The FreeBSD German Documentation Project
|
||||||
|
#
|
||||||
|
# Build the Handbook with just the content from this chapter.
|
||||||
|
#
|
||||||
|
# $FreeBSD$
|
||||||
|
# $FreeBSDde: de-docproj/books/developers-handbook/kerneldebug/Makefile,v 1.2 2007/08/31 06:13:09 as Exp $
|
||||||
|
# basiert auf: 1.1
|
||||||
|
#
|
||||||
|
|
||||||
|
CHAPTERS= kerneldebug/chapter.sgml
|
||||||
|
|
||||||
|
VPATH= ..
|
||||||
|
|
||||||
|
MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX}
|
||||||
|
|
||||||
|
DOC_PREFIX?= ${.CURDIR}/../../../..
|
||||||
|
|
||||||
|
.include "../Makefile"
|
1245
de_DE.ISO8859-1/books/developers-handbook/kerneldebug/chapter.sgml
Normal file
1245
de_DE.ISO8859-1/books/developers-handbook/kerneldebug/chapter.sgml
Normal file
File diff suppressed because it is too large
Load diff
104
de_DE.ISO8859-1/books/developers-handbook/l10n/chapter.sgml
Normal file
104
de_DE.ISO8859-1/books/developers-handbook/l10n/chapter.sgml
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/l10n/chapter.sgml,v 1.9 2007/09/28 16:25:36 jkois Exp $
|
||||||
|
basiert auf: 1.10
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="l10n">
|
||||||
|
<chapterinfo>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Jochen</firstname>
|
||||||
|
<surname>Neumeister</surname>
|
||||||
|
<contrib>Übersetzt von </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</chapterinfo>
|
||||||
|
|
||||||
|
<title>Lokalisierung und Internationalisierung - L10N und
|
||||||
|
I18N</title>
|
||||||
|
|
||||||
|
<sect1 id="l10n-programming">
|
||||||
|
<title>I18N-konforme Anwendungen programmieren</title>
|
||||||
|
|
||||||
|
<indexterm><primary>Qt</primary></indexterm>
|
||||||
|
<indexterm><primary>GTK</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Um Ihre Anwendung verwendbarer für andere
|
||||||
|
Sprachen zu machen, hoffen wir, dass Sie I18N-konform
|
||||||
|
programmieren. Der GNU gcc-Compiler und Bibliotheken
|
||||||
|
für grafische Benutzeroberflächen wie QT und GTK
|
||||||
|
unterstützen I18N durch eine spezielle Verarbeitung von
|
||||||
|
Zeichenketten. Das Erstellen eines I18N-konformen Programms
|
||||||
|
ist sehr einfach und erlaubt anderen Mitwirkenden, Ihre
|
||||||
|
Programme leichter in andere Sprachen zu übersetzen.
|
||||||
|
Lesen Sie die Bibliothek-spezifischen I18N-Dokumentationen
|
||||||
|
für weitere Details.</para>
|
||||||
|
|
||||||
|
<para>Im Gegensatz zur allgemeinen Meinung ist I18N-konformer
|
||||||
|
Code einfach zu programmieren. Üblicherweise umfasst
|
||||||
|
dies nur das Einbetten Ihrer Zeichenketten in
|
||||||
|
Bibliothek-spezifische Funktionen. Stellen Sie außerdem
|
||||||
|
bitte sicher, dass Sie Unterstützung für Unicode- und
|
||||||
|
Multibyte-Zeichen vorsehen.</para>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>Ein Aufruf, die I18N-Bemühungen zu
|
||||||
|
vereinheitlichen</title>
|
||||||
|
|
||||||
|
<para>Wir sind darauf aufmerksam geworden, dass die
|
||||||
|
einzelnen I18N-/L10N-Bemühungen für jedes Land
|
||||||
|
wiederholt wurden. Viele von uns haben somit unproduktiverweise
|
||||||
|
das Rad immer wieder neu erfunden. Wir hoffen, dass die
|
||||||
|
verschiedenen großen Gruppen für I18N Ihre
|
||||||
|
Bemühungen in einer Gruppe vereinen können,
|
||||||
|
ähnlich der Zuständigkeit des Core-Teams.</para>
|
||||||
|
|
||||||
|
<para>Derzeit hoffen wir, dass wenn Sie I18N-konforme
|
||||||
|
Programme schreiben oder portieren, diese an die
|
||||||
|
betreffenden FreeBSD-Mailinglisten jedes Landes schicken, um
|
||||||
|
sie testen zu lassen. Wir hoffen in Zukunft, Anwendungen zu
|
||||||
|
entwickeln, die in allen Sprachen direkt und ohne unsaubere
|
||||||
|
Änderungen funktionieren.</para>
|
||||||
|
|
||||||
|
<para>Die &a.i18n;-Mailingliste ist eingerichtet worden. Wenn
|
||||||
|
Sie I18N-/L10N-Entwickler sind, schicken Sie bitte Ihre
|
||||||
|
Kommentare, Ideen, Fragen und alles, das Sie mit dem Thema in
|
||||||
|
Verbindung bringen, dorthin.</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>Perl und Python</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Perl</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Python</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<para>Perl und Python bieten Bibliotheken für I18N und zur
|
||||||
|
Behandlung von Unicode-Zeichen. Bitte nutzen Sie diese
|
||||||
|
für I18N-Konformität.</para>
|
||||||
|
|
||||||
|
<para>Auf älteren FreeBSD-Versionen erzeugt Perl
|
||||||
|
möglicherweise Warnmeldungen wegen nicht installierter
|
||||||
|
Unterstützung für Unicode-Zeichen auf Ihrem System.
|
||||||
|
Sie können hierfür die Umgebungsvariable
|
||||||
|
<envar>LD_PRELOAD</envar> in ihrer Shell auf
|
||||||
|
<filename>/usr/lib/libxpg4.so</filename> setzen.</para>
|
||||||
|
|
||||||
|
<para>In <literal>sh</literal>-basierten Shells:</para>
|
||||||
|
|
||||||
|
<programlisting><envar>LD_PRELOAD=/usr/lib/libxpg4.so</envar></programlisting>
|
||||||
|
|
||||||
|
<para>In <literal>C</literal>-basierten Shells:</para>
|
||||||
|
|
||||||
|
<programlisting><envar>setenv LD_PRELOAD /usr/lib/libxpg4.so</envar></programlisting>
|
||||||
|
</sect2>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
17
de_DE.ISO8859-1/books/developers-handbook/policies/Makefile
Normal file
17
de_DE.ISO8859-1/books/developers-handbook/policies/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#
|
||||||
|
# Build the Handbook with just the content from this chapter.
|
||||||
|
#
|
||||||
|
# $FreeBSD$
|
||||||
|
# $FreeBSDde: de-docproj/books/developers-handbook/policies/Makefile,v 1.1.1.1 2007/08/01 19:18:33 as Exp $
|
||||||
|
# basiert auf: 1.1
|
||||||
|
#
|
||||||
|
|
||||||
|
CHAPTERS= policies/chapter.sgml
|
||||||
|
|
||||||
|
VPATH= ..
|
||||||
|
|
||||||
|
MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX}
|
||||||
|
|
||||||
|
DOC_PREFIX?= ${.CURDIR}/../../../..
|
||||||
|
|
||||||
|
.include "../Makefile"
|
522
de_DE.ISO8859-1/books/developers-handbook/policies/chapter.sgml
Normal file
522
de_DE.ISO8859-1/books/developers-handbook/policies/chapter.sgml
Normal file
|
@ -0,0 +1,522 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/policies/chapter.sgml,v 1.8 2007/09/21 20:30:41 as Exp $
|
||||||
|
basiert auf: 1.33
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="policies">
|
||||||
|
<chapterinfo>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Poul-Henning</firstname>
|
||||||
|
<surname>Kamp</surname>
|
||||||
|
<contrib>Beigesteuert von </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<!-- June 1996 -->
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Axel</firstname>
|
||||||
|
<surname>Gruner</surname>
|
||||||
|
<contrib>Übersetzt von </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</chapterinfo>
|
||||||
|
|
||||||
|
<title>Vorgaben und Richtlinien für das
|
||||||
|
Quelltextverzeichnis</title>
|
||||||
|
|
||||||
|
<para>Dieses Kapitel dokumentiert verschiedene Vorgaben und
|
||||||
|
Richtlinien für das FreeBSD-Quelltextverzeichnis.</para>
|
||||||
|
|
||||||
|
<sect1 id="policies-maintainer">
|
||||||
|
<title><makevar>MAINTAINER</makevar> eines Makefiles</title>
|
||||||
|
<indexterm><primary>Ports-Maintainer</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Wenn ein bestimmter Bereich der FreeBSD-Distribution von
|
||||||
|
einer Person oder Gruppe gepflegt wird, kann dies durch
|
||||||
|
Hinzufügen der Zeile
|
||||||
|
|
||||||
|
<programlisting>MAINTAINER= email-addresses</programlisting>
|
||||||
|
|
||||||
|
im <filename>Makefile</filename> der Öffentlichkeit
|
||||||
|
mitgeteilt werden.</para>
|
||||||
|
|
||||||
|
<para>Dies bedeutet folgendes:</para>
|
||||||
|
|
||||||
|
<para>Der Maintainer ist verantwortlich für diesen Code.
|
||||||
|
Er muss einerseits für die Behebung von
|
||||||
|
Fehlern und das Beantworten von Problemberichten für diesen
|
||||||
|
Code die Verantwortung tragen und andererseits, falls es sich
|
||||||
|
um beigesteuerte Software handelt, neue Versionen verfolgen
|
||||||
|
und bereitstellen.</para>
|
||||||
|
|
||||||
|
<para>Änderungen an Verzeichnissen, die ein Maintainer
|
||||||
|
definiert hat, sollten an den Maintainer für eine
|
||||||
|
Überprüfung gesendet werden, bevor diese committet
|
||||||
|
werden. Nur wenn der Maintainer in einer inakzeptablen
|
||||||
|
Zeitspanne auf mehrere E-Mails nicht antwortet, können die
|
||||||
|
Änderungen, die mit dem Commit in Kraft treten, auch ohne
|
||||||
|
Überprüfung durch den Maintainer vollzogen werden.
|
||||||
|
Dennoch wird empfohlen, dass die Änderungen, falls
|
||||||
|
möglich, von jemand anderem überprüft
|
||||||
|
werden.</para>
|
||||||
|
|
||||||
|
<para>Es ist natürlich nicht akzeptabel, einer Person oder
|
||||||
|
Gruppe den Status eines Maintainers zu geben, so lange sie nicht
|
||||||
|
zustimmt, diese Pflicht auf sich zu nehmen. Andererseits muss es
|
||||||
|
kein einzelner Mensch sein. Eine Gruppe von Menschen ist genauso
|
||||||
|
in Ordnung.</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="policies-contributed">
|
||||||
|
<sect1info>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Poul-Henning</firstname>
|
||||||
|
<surname>Kamp</surname>
|
||||||
|
<contrib>Beigesteuert von </contrib>
|
||||||
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>David</firstname>
|
||||||
|
<surname>O'Brien</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<!-- June 1996 -->
|
||||||
|
</sect1info>
|
||||||
|
|
||||||
|
<title>Beigesteuerte Software</title>
|
||||||
|
|
||||||
|
<indexterm><primary>Beigesteuerte Software</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Einige Teile der FreeBSD-Distribution enthalten Software,
|
||||||
|
die aktiv außerhalb des FreeBSD-Projektes gepflegt wird.
|
||||||
|
Aus historischen Gründen nennen wir dies
|
||||||
|
<emphasis>contributed</emphasis> Software. Beispiele dafür
|
||||||
|
sind <application>sendmail</application>,
|
||||||
|
<application>gcc</application> und
|
||||||
|
<application>patch</application>.</para>
|
||||||
|
|
||||||
|
<para>Über die Jahre wurden verschiedene Methoden genutzt,
|
||||||
|
um solche Software zu verwalten, und jede hat Vor-
|
||||||
|
wie auch Nachteile. So hat sich kein eindeutiger Gewinner
|
||||||
|
herauskristallisiert.</para>
|
||||||
|
|
||||||
|
<para>Es wurde viel über diesen Umstand diskutiert und
|
||||||
|
eine Methode als die <quote>offizielle</quote>
|
||||||
|
vorgestellt, um in Zukunft diese Art der Software zu
|
||||||
|
importieren. Ferner wird dringend geraten, dass sich
|
||||||
|
existierende, beigesteuerte Software diesem Modell
|
||||||
|
annähert, da es signifikante Vorteile gegenüber der
|
||||||
|
alten Methode gibt. Dazu gehört auch, dass jeder
|
||||||
|
einfach Diffs bezüglich der
|
||||||
|
<quote>offiziellen</quote> Quelltext-Versionen erzeugen kann
|
||||||
|
(auch ohne CVS-Zugang). Dies wird es deutlich vereinfachen,
|
||||||
|
Änderungen an die Hauptentwickler zurückfließen zu
|
||||||
|
lassen.</para>
|
||||||
|
|
||||||
|
<para>Letztendlich kommt es jedoch auf die Menschen an, welche die
|
||||||
|
Arbeit leisten. Wenn die Durchführung dieses Modells bei
|
||||||
|
einem Paket mal nicht möglich ist, können Ausnahmen
|
||||||
|
dieser Regeln nur mit Genehmigung des Core-Teams und der
|
||||||
|
Übereinstimmung der anderen Entwickler gewährt werden.
|
||||||
|
Die Fähigkeit, dieses Paket auch in Zukunft pflegen zu
|
||||||
|
können, ist eine der Schlüsselfragen bei dieser
|
||||||
|
Entscheidung.</para>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<para>Durch einige bedauernswerte Einschränkungen
|
||||||
|
des RCS-Dateiformats und die Handhabung von Herstellerzweigen
|
||||||
|
im CVS ist von unwesentlichen, trivialen und/oder kosmetischen
|
||||||
|
Änderungen an Dateien <emphasis>dringend
|
||||||
|
abzuraten</emphasis>, die dem Herstellerzweig folgen.
|
||||||
|
<quote>Grammatikalische oder sprachliche
|
||||||
|
Fehlerbehebungen</quote> sind explizit unter der
|
||||||
|
<quote>Kosmetik</quote>-Kategorie einzuordnen und sollten bei
|
||||||
|
Dateien mit einer 1.1.x.x-Revision vermieden werden. Das
|
||||||
|
Repository kann sich durch Änderungen einzelner Zeichen
|
||||||
|
dramatisch aufblähen.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>Die eingebettete
|
||||||
|
<application>Tcl</application>-Programmiersprache soll als
|
||||||
|
Beispiel dienen, wie dieses Modell funktioniert:</para>
|
||||||
|
|
||||||
|
<para><filename>src/contrib/tcl</filename> enthält den
|
||||||
|
Quelltext so, wie vom Maintainer dieses Pakets bereitgestellt.
|
||||||
|
Teile, die unter FreeBSD gänzlich unnutzbar sind,
|
||||||
|
können entfernt werden. Im Fall von Tcl wurden die
|
||||||
|
Unterverzeichnisse <filename>mac</filename>,
|
||||||
|
<filename>win</filename> und <filename>compat</filename>
|
||||||
|
vor dem Import entfernt.</para>
|
||||||
|
|
||||||
|
<para><filename>src/lib/libtcl</filename> enthält ein
|
||||||
|
<filename>Makefile</filename> im
|
||||||
|
<application>bmake</application>-Stil, das die Regeln des
|
||||||
|
Standard-Makefiles <filename>bsd.lib.mk</filename> nutzt, um
|
||||||
|
die Bibliothek zu erstellen und die Dokumentation zu
|
||||||
|
installieren.</para>
|
||||||
|
|
||||||
|
<para><filename>src/usr.bin/tclsh</filename> enthält ein
|
||||||
|
<filename>Makefile</filename> im
|
||||||
|
<application>bmake</application>-Stil, welches das
|
||||||
|
<command>tclsh</command>-Programm erstellt und installiert,
|
||||||
|
ebenso die dazugehörigen Manualpages, welche die Regeln von
|
||||||
|
<filename>bsd.prog.mk</filename> nutzen.</para>
|
||||||
|
|
||||||
|
<para><filename>src/tools/tools/tcl_bmake</filename> enthält
|
||||||
|
einige Shell-Skripten, die hilfreich sein können, wenn die
|
||||||
|
Tcl-Software aktualisiert werden soll. Diese sind nicht Teil
|
||||||
|
des Erstellens und der Installation der Software.</para>
|
||||||
|
|
||||||
|
<para>Das Entscheidende ist hier das
|
||||||
|
<filename>src/contrib/tcl</filename>-Verzeichnis, welches nach
|
||||||
|
den folgenden Regeln erstellt wird: Es muss den
|
||||||
|
Quelltext aus dem Original enthalten (ohne
|
||||||
|
RCS-Schlüsselworte und im korrekten CVS-Herstellerzweig)
|
||||||
|
mit so wenig FreeBSD-spezifischen Änderungen wie
|
||||||
|
möglich. Sollte es Zweifel geben, wie hier zu verfahren
|
||||||
|
ist, unbedingt zuerst nachfragen und
|
||||||
|
nicht auf gut Glück etwas probieren in der vagen
|
||||||
|
Hoffnung, dass es <quote>irgendwie tut</quote>. CVS verzeiht
|
||||||
|
keine Fehler beim Importieren und ein hoher Arbeitsaufwand
|
||||||
|
wäre die Folge, um diesen großen Fehler wieder
|
||||||
|
wettzumachen.</para>
|
||||||
|
|
||||||
|
<para>Aufgrund der eingangs schon erwähnten Einschränkungen
|
||||||
|
bei CVS-Herstellerzweigen ist es erforderlich,
|
||||||
|
dass <quote>offizielle</quote> Fehlerbehebungen vom Hersteller
|
||||||
|
in die Originalquellen der Distribution einfließen und als
|
||||||
|
Resultat wieder in den Herstellerzweig importiert werden.
|
||||||
|
Offizielle Fehlerbehebungen sollten nie direkt in FreeBSD
|
||||||
|
eingepflegt und <quote>committet</quote> werden, da dies
|
||||||
|
den Herstellerzweig zerstören würde und der Import
|
||||||
|
von zukünftigen Versionen wäre um ein Vielfaches
|
||||||
|
schwerer, da es zu Konflikten kommen würde.</para>
|
||||||
|
|
||||||
|
<para>Da einige Pakete Dateien enthalten, die zur
|
||||||
|
Kompatibilität mit anderen Architekturen und Umgebungen
|
||||||
|
als FreeBSD gedacht sind, ist es zulässig, diese Teile zu
|
||||||
|
löschen, wenn sie für FreeBSD nicht von Interesse
|
||||||
|
sind, und so Speicherplatz zu sparen. Dateien, die ein
|
||||||
|
Copyright und Release-artige Informationen zu den vorhandenen
|
||||||
|
Dateien enthalten, sollten <emphasis>nicht</emphasis>
|
||||||
|
gelöscht werden.</para>
|
||||||
|
|
||||||
|
<para>Falls es einfacher erscheint, können die
|
||||||
|
<command>bmake</command>-<filename>Makefile</filename>s vom
|
||||||
|
Verzeichnisbaum durch einige Dienstprogramme automatisch
|
||||||
|
erstellt werden, was es hoffentlich sogar noch einfacher macht,
|
||||||
|
eine Version zu aktualisieren. Ist dies geschehen, so stellen
|
||||||
|
Sie bitte sicher, diese Werkzeuge in das Verzeichnis
|
||||||
|
<filename>src/tools</filename> gleich mit dem Port an sich
|
||||||
|
einzuchecken, sodass es für zukünftige Maintainer
|
||||||
|
verfügbar ist.</para>
|
||||||
|
|
||||||
|
<para>Im Verzeichnis <filename>src/contrib/tcl</filename> sollte
|
||||||
|
eine Datei mit dem Namen <filename>FREEBSD-upgrade</filename>
|
||||||
|
hinzugefügt werden und sie sollte den Stand wie folgt
|
||||||
|
anzeigen:</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>Welche Dateien ausgelassen wurden.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Von wo die Original-Distribution stammt und/oder wo die
|
||||||
|
offizielle Hauptseite zu finden ist.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Wohin Fehlerbehebungen an den Originalautor gesendet
|
||||||
|
werden können.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Möglicherweise eine Übersicht, welche
|
||||||
|
FreeBSD-spezifischen Änderungen vorgenommen
|
||||||
|
wurden.</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>Importieren Sie jedoch <filename>FREEBSD-upgrade</filename>
|
||||||
|
nicht mit den beigesteuerten Quelldateien. Stattdessen sollten
|
||||||
|
Sie <command>cvs add FREEBSD-upgrade ; cvs ci</command> nach
|
||||||
|
dem initialen Import nutzen. Ein Beispiel von
|
||||||
|
<filename>src/contrib/cpio</filename> sehen Sie hier:</para>
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
This directory contains virgin sources of the original distribution files
|
||||||
|
on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
|
||||||
|
the files in this directory via patches and a cvs commit. New versions or
|
||||||
|
official-patch versions must be imported. Please remember to import with
|
||||||
|
"-ko" to prevent CVS from corrupting any vendor RCS Ids.
|
||||||
|
|
||||||
|
For the import of GNU cpio 2.4.2, the following files were removed:
|
||||||
|
|
||||||
|
INSTALL cpio.info mkdir.c
|
||||||
|
Makefile.in cpio.texi mkinstalldirs
|
||||||
|
|
||||||
|
To upgrade to a newer version of cpio, when it is available:
|
||||||
|
1. Unpack the new version into an empty directory.
|
||||||
|
[Do not make ANY changes to the files.]
|
||||||
|
|
||||||
|
2. Remove the files listed above and any others that don't apply to
|
||||||
|
FreeBSD.
|
||||||
|
|
||||||
|
3. Use the command:
|
||||||
|
cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
|
||||||
|
src/contrib/cpio GNU cpio_<version>
|
||||||
|
|
||||||
|
For example, to do the import of version 2.4.2, I typed:
|
||||||
|
cvs import -ko -m 'Virgin import of GNU v2.4.2' \
|
||||||
|
src/contrib/cpio GNU cpio_2_4_2
|
||||||
|
|
||||||
|
4. Follow the instructions printed out in step 3 to resolve any
|
||||||
|
conflicts between local FreeBSD changes and the newer version.
|
||||||
|
|
||||||
|
Do not, under any circumstances, deviate from this procedure.
|
||||||
|
|
||||||
|
To make local changes to cpio, simply patch and commit to the main
|
||||||
|
branch (aka HEAD). Never make local changes on the GNU branch.
|
||||||
|
|
||||||
|
All local changes should be submitted to "cpio@gnu.ai.mit.edu" for
|
||||||
|
inclusion in the next vendor release.
|
||||||
|
|
||||||
|
obrien@FreeBSD.org - 30 March 1997</programlisting>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="policies-encumbered">
|
||||||
|
<title>Belastende Dateien</title>
|
||||||
|
|
||||||
|
<para>Es kann gelegentlich notwendig sein, belastende Dateien
|
||||||
|
in den FreeBSD-Quelltextbaum zu integrieren. Braucht ein
|
||||||
|
Gerät zum Beispiel ein Stück binären Code, der
|
||||||
|
zuerst geladen werden muss, bevor das Gerät funktioniert,
|
||||||
|
und wir haben keine Quellen zu diesem Code, dann wird die
|
||||||
|
binäre Datei als belastend bezeichnet. Die folgenden
|
||||||
|
Richtlinien sind beim Aufnehmen von belastenden Dateien in den
|
||||||
|
FreeBSD-Quelltextbaum zu beachten.</para>
|
||||||
|
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>Jede Datei, die durch die System-CPU(s) ausgeführt
|
||||||
|
wird und nicht als Quelltext vorliegt, ist belastend.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Jede Datei, deren Lizenz restriktiver ist als die BSD-
|
||||||
|
oder GNU-Lizenz, ist belastend.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Eine Datei, die herunterladbare Binär-Daten
|
||||||
|
enthält, ist nur belastend, wenn (1) oder (2)
|
||||||
|
zutreffen. Sie muss in einem ASCII-Format
|
||||||
|
gespeichert werden, das Architektur-neutral ist (file2c
|
||||||
|
oder uuencoding wird empfohlen).</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Jede belastende Datei braucht eine spezielle
|
||||||
|
Genehmigung vom <ulink
|
||||||
|
url="&url.articles.contributors;/staff-core.html">Core-Team</ulink>,
|
||||||
|
bevor diese in das CVS-Repository aufgenommen
|
||||||
|
werden darf.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Belastende Dateien liegen unter
|
||||||
|
<filename>src/contrib</filename> oder
|
||||||
|
<filename>src/sys/contrib</filename>.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Das komplette Modul sollte auch am Stück
|
||||||
|
aufbewahrt werden. Es gibt keinen Grund, dieses zu teilen,
|
||||||
|
außer es gibt einen Code-Austausch mit Quelltext, der
|
||||||
|
nicht belastend ist.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Objekt-Dateien werden wie folgt benannt:
|
||||||
|
<filename><replaceable>arch</replaceable>/<replaceable>filename</replaceable>.o.uu></filename>.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Kernel-Dateien:</para>
|
||||||
|
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>Sollten immer nach
|
||||||
|
<filename>conf/files.*</filename> verweisen (um den Bau
|
||||||
|
einfach zu halten).</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Sollten sich immer in <filename>LINT</filename>
|
||||||
|
befinden, jedoch entscheidet das <ulink
|
||||||
|
url="&url.articles.contributors;/staff-core.html">Core-Team</ulink>
|
||||||
|
je nach Fall, ob es
|
||||||
|
auskommentiert wird oder nicht. Das <ulink
|
||||||
|
url="&url.articles.contributors;/staff-core.html">Core-Team</ulink>
|
||||||
|
kann sich zu einem späteren Zeitpunkt
|
||||||
|
immer noch anders entscheiden.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Der <firstterm>Release-Engineer</firstterm>
|
||||||
|
entscheidet, ob es in ein Release aufgenommen wird oder
|
||||||
|
nicht.</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Userland-Dateien:</para>
|
||||||
|
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<indexterm><primary>Core-Team</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Das <ulink
|
||||||
|
url="&url.articles.contributors;/staff-core.html">Core-Team</ulink>
|
||||||
|
entscheidet, ob der Code von
|
||||||
|
<command>make world</command> gebaut wird oder nicht.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<indexterm><primary>Release-Engineer</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Der <ulink
|
||||||
|
url="&url.articles.contributors;/staff-who.html">Release-Engineer</ulink>
|
||||||
|
entscheidet, ob es in das Release
|
||||||
|
aufgenommen wird oder nicht.</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="policies-shlib">
|
||||||
|
<sect1info>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Satoshi</firstname>
|
||||||
|
<surname>Asami</surname>
|
||||||
|
<contrib>Beigesteuert von </contrib>
|
||||||
|
</author>
|
||||||
|
|
||||||
|
<author>
|
||||||
|
<firstname>Peter</firstname>
|
||||||
|
<surname>Wemm</surname>
|
||||||
|
</author>
|
||||||
|
|
||||||
|
<author>
|
||||||
|
<firstname>David</firstname>
|
||||||
|
<surname>O'Brien</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<!-- 9 Dec 1996 -->
|
||||||
|
</sect1info>
|
||||||
|
|
||||||
|
<title>Shared-Libraries</title>
|
||||||
|
|
||||||
|
<para>Sollten Sie die Unterstützung für
|
||||||
|
Shared-Libraries bei einem Port oder einem Stück Software,
|
||||||
|
das dies nicht hat, hinzufügen, sollten die Versionsnummern
|
||||||
|
dessen Regeln folgen. Im Allgemeinen hat die sich daraus
|
||||||
|
resultierende Nummer nichts mit der Release-Version der Software
|
||||||
|
zu tun.</para>
|
||||||
|
|
||||||
|
<para>Die drei Grundsätze zum Erstellen von Shared-Libraries
|
||||||
|
sind:</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>Sie beginnen mit <literal>1.0</literal>.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Gibt es eine Änderung, die
|
||||||
|
abwärtskompatibel ist, so springen Sie zur
|
||||||
|
nächsten Minor-Version (beachten Sie, dass ELF-Systeme
|
||||||
|
die Minor-Version ignorieren).</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Gibt es eine inkompatible Änderung, so springen
|
||||||
|
Sie bitte zur nächsten Major-Version.</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>Zum Beispiel wird beim Hinzufügen von Funktionen und
|
||||||
|
oder Fehlerbehebungen zur nächsten Minor-Version
|
||||||
|
gesprungen, beim Löschen einer Funktion, Ändern
|
||||||
|
von Funktionsaufrufen usw. ändert sich die Major-Version.</para>
|
||||||
|
|
||||||
|
<para>Bleiben Sie bei Versionsnummern in der Form major.minor
|
||||||
|
(<replaceable>x</replaceable>.<replaceable>y</replaceable>).
|
||||||
|
Unser dynamischer Linker a.out kann mit Versionsnummern
|
||||||
|
in der Form
|
||||||
|
<replaceable>x</replaceable>.<replaceable>y</replaceable>.<replaceable>z</replaceable>
|
||||||
|
nicht gut umgehen.
|
||||||
|
Jede Versionsnummer nach dem <replaceable>y</replaceable>
|
||||||
|
(die dritte Zahl) wird völlig ignoriert, wenn
|
||||||
|
Versionsnummern der Shared-Libraries verglichen werden, um
|
||||||
|
zu bestimmen, mit welcher Bibliothek eine Anwendung verlinkt wird.
|
||||||
|
Sind zwei Shared-Libraries vorhanden, die sich nur in der
|
||||||
|
<quote>micro</quote>-Revision unterscheiden, so wird
|
||||||
|
<command>ld.so</command> zu der höheren verlinken.
|
||||||
|
Dies bedeutet, dass wenn Sie mit <filename>libfoo.so.3.3.3</filename>
|
||||||
|
verlinken, der Linker nur <literal>3.3</literal> in den
|
||||||
|
Header aufnimmt und alles linkt, was mit
|
||||||
|
<replaceable>libfoo.so.3</replaceable>
|
||||||
|
.<replaceable>(irgendetwas
|
||||||
|
>= 3)</replaceable>.<replaceable>(höchste
|
||||||
|
verfügbare Nummer)</replaceable> beginnt.</para>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<para><command>ld.so</command> wird immer die höchste
|
||||||
|
<quote>Minor</quote>-Revision benutzen. Beispielsweise wird
|
||||||
|
es die <filename>libc.so.2.2</filename> bevorzugen
|
||||||
|
gegenüber der <filename>libc.so.2.0</filename>, auch
|
||||||
|
dann, wenn das Programm ursprünglich mit
|
||||||
|
<filename>libc.so.2.0</filename> verlinkt war.</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>Unser dynamischer ELF-Linker kann keine Minor-Versionen
|
||||||
|
handhaben. Dennoch sollten die Major- und Minor-Versionen genutzt
|
||||||
|
werden, da unsere <filename>Makefile</filename>s <quote>das
|
||||||
|
Richtige machen</quote> bezogen auf den Systemtyp.</para>
|
||||||
|
|
||||||
|
<para>Für nicht-Port-Bibliotheken lautet die Richtlinie,
|
||||||
|
die Shared-Library-Versionsnummer nur einmal zwischen den
|
||||||
|
Releases zu ändern. Weiterhin ist es vorgeschrieben, die
|
||||||
|
Major-Version der Shared-Libraries nur bei Major-OS-Releases zu
|
||||||
|
ändern (beispielsweise von 3.0 auf 4.0). Wenn Sie also eine
|
||||||
|
Änderung an einer Systembibliothek vornehmen, die eine neue
|
||||||
|
Versionsnummer benötigt, überprüfen Sie die
|
||||||
|
Commit-Logs des <filename>Makefile</filename>s. Es liegt in der
|
||||||
|
Verantwortung des Committers, dass sich eine erste solche
|
||||||
|
Änderung seit dem letzten Release in der aktualisierten
|
||||||
|
Versionsnummer der Shared-Library im
|
||||||
|
<filename>Makefile</filename> äußert, folgende
|
||||||
|
Änderungen werden nicht berücksichtigt.</para>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-declaration: "../chapter.decl"
|
||||||
|
sgml-indent-data: t
|
||||||
|
sgml-omittag: nil
|
||||||
|
sgml-always-quote-attributes: t
|
||||||
|
sgml-parent-document: ("../book.sgml" "part" "chapter")
|
||||||
|
End:
|
||||||
|
-->
|
667
de_DE.ISO8859-1/books/developers-handbook/secure/chapter.sgml
Normal file
667
de_DE.ISO8859-1/books/developers-handbook/secure/chapter.sgml
Normal file
|
@ -0,0 +1,667 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/secure/chapter.sgml,v 1.11 2009/02/02 22:24:42 miwi Exp $
|
||||||
|
basiert auf: 1.27
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="secure">
|
||||||
|
<chapterinfo>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Murray</firstname>
|
||||||
|
<surname>Stokely</surname>
|
||||||
|
<contrib>Contributed by </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Hagen</firstname>
|
||||||
|
<surname>Kühl</surname>
|
||||||
|
<contrib>Übersetzt von </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</chapterinfo>
|
||||||
|
|
||||||
|
<title>Sicheres Programmieren</title>
|
||||||
|
|
||||||
|
<sect1 id="secure-synopsis">
|
||||||
|
<title>Zusammenfassung</title>
|
||||||
|
|
||||||
|
<para>Dieses Kapitel beschreibt einige Sicherheitsprobleme, die
|
||||||
|
&unix;-Programmierer seit Jahrzehnten quälen, und
|
||||||
|
inzwischen verfügbare Werkzeuge, die Programmierern helfen,
|
||||||
|
Sicherheitslücken in ihrem Quelltext zu vermeiden.</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="secure-philosophy">
|
||||||
|
<title>Methoden des sicheren Entwurfs</title>
|
||||||
|
|
||||||
|
<para>Sichere Anwendungen zu schreiben erfordert eine sehr
|
||||||
|
skeptische und pessimistische Lebenseinstellung. Anwendungen
|
||||||
|
sollten nach dem Prinzip der <quote>geringsten
|
||||||
|
Privilegien</quote> ausgeführt werden, sodass kein Prozess
|
||||||
|
mit mehr als dem absoluten Minimum an Zugriffsrechten arbeitet,
|
||||||
|
die er zum Erfüllen seiner Aufgabe benötigt. Wo es
|
||||||
|
möglich ist, sollte Quelltext, der bereits
|
||||||
|
überprüft wurde, wiederverwendet werden, um
|
||||||
|
häufige Fehler, die andere schon korrigiert haben, zu
|
||||||
|
vermeiden.</para>
|
||||||
|
|
||||||
|
<para>Eine der Stolperfallen der &unix;-Umgebung ist, dass es
|
||||||
|
sehr einfach ist Annahmen über die Konsistenz der Umgebung
|
||||||
|
zu machen. Anwendungen sollten Nutzereingaben (in allen Formen)
|
||||||
|
niemals trauen, genausowenig wie den System-Ressourcen,
|
||||||
|
der Inter-Prozess-Kommunikation oder dem zeitlichen Ablauf von
|
||||||
|
Ereignissen. &unix;-Prozesse arbeiten nicht synchron. Daher sind
|
||||||
|
logische Operationen selten atomar.</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="secure-bufferov">
|
||||||
|
<title>Puffer-Überläufe</title>
|
||||||
|
|
||||||
|
<para>Puffer-Überläufe gibt es schon seit den
|
||||||
|
Anfängen der Von-Neuman-Architektur <xref linkend="COD">.
|
||||||
|
|
||||||
|
<indexterm><primary>Puffer-Überlauf</primary></indexterm>
|
||||||
|
<indexterm><primary>Von-Neuman</primary></indexterm>
|
||||||
|
|
||||||
|
Sie erlangten zum ersten Mal durch den Internetwurm Morris im
|
||||||
|
Jahre 1988 öffentliche Bekanntheit. Unglücklicherweise
|
||||||
|
|
||||||
|
<indexterm><primary>Morris Internetwurm</primary></indexterm>
|
||||||
|
|
||||||
|
funktioniert der gleiche grundlegende Angriff noch heute. Von
|
||||||
|
den 17 CERT-Sicherheitsmeldungen wurden 1999 zehn
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>CERT</primary>
|
||||||
|
<secondary>Sicheitshinweise</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
direkt durch Puffer-Überläufe in der Software
|
||||||
|
verursacht. Die bei weitem häufigste Form eines
|
||||||
|
Puffer-Überlauf-Angriffs basiert darauf, den Stack
|
||||||
|
zu korrumpieren.</para>
|
||||||
|
|
||||||
|
<indexterm><primary>Stack</primary></indexterm>
|
||||||
|
<indexterm><primary>Arguments</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Die meisten modernen Computer-Systeme verwenden einen
|
||||||
|
Stack, um Argumente an Prozeduren zu übergeben und
|
||||||
|
lokale Variablen zu speichern. Ein Stack ist ein
|
||||||
|
last-in-first-out-Puffer (LIFO) im hohen Speicherbereich
|
||||||
|
eines Prozesses. Wenn ein Programm eine Funktion
|
||||||
|
|
||||||
|
<indexterm><primary>LIFO</primary></indexterm>
|
||||||
|
<indexterm>
|
||||||
|
<primary>Prozessabbild</primary>
|
||||||
|
<secondary>Stack-Pointer</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
aufruft wird ein neuer "Stackframe" erzeugt. Dieser besteht aus
|
||||||
|
den Argumenten, die der Funktion übergeben wurden und
|
||||||
|
einem variabel grossem Bereich für lokale Variablen. Der
|
||||||
|
"Stack-Pointer" ist ein Register, dass die
|
||||||
|
|
||||||
|
<indexterm><primary>Stack-Frame</primary></indexterm>
|
||||||
|
<indexterm><primary>Stack-Pointer</primary></indexterm>
|
||||||
|
|
||||||
|
aktuelle Adresse der Stack-Spitze enthält.
|
||||||
|
Da sich dieser Wert oft ändert, wenn neue Werte
|
||||||
|
auf dem Stack abgelegt werden, bieten viele Implementierungen
|
||||||
|
einen "Frame-Pointer", der nahe am Anfang des Stack-Frames
|
||||||
|
liegt und es so leichter macht lokale Variablen relativ zum
|
||||||
|
aktuellen Stackframe zu adressieren. <xref linkend="COD">
|
||||||
|
Die Rücksprungadresse
|
||||||
|
|
||||||
|
<indexterm><primary>Frame-Pointer</primary></indexterm>
|
||||||
|
<indexterm>
|
||||||
|
<primary>Prozessabbild</primary>
|
||||||
|
<secondary>Frame-Pointer</secondary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm><primary>Rücksprungadresse</primary></indexterm>
|
||||||
|
<indexterm><primary>Stack-Überlauf</primary></indexterm>
|
||||||
|
|
||||||
|
der Funktionen werden ebenfalls auf dem Stack
|
||||||
|
gespeichert und das ist der Grund für
|
||||||
|
Stack-Überlauf-Exploits. Denn ein böswilliger Nutzer
|
||||||
|
kann die Rücksprungadresse der Funktion überschreiben
|
||||||
|
indem er eine lokale Variable in der Funktion
|
||||||
|
überlaufen lässt, wodurch es ihm möglich ist
|
||||||
|
beliebigen Code auszuführen.</para>
|
||||||
|
|
||||||
|
<para>Obwohl Stack-basierte Angriffe bei weitem die
|
||||||
|
Häufigsten sind, ist es auch möglich den Stack mit
|
||||||
|
einem Heap-basierten (malloc/free) Angriff zu
|
||||||
|
überschreiben.</para>
|
||||||
|
|
||||||
|
<para>Die C-Programmiersprache führt keine automatischen
|
||||||
|
Bereichsüprüfungen bei Feldern oder Zeigern durch, wie
|
||||||
|
viele andere Sprachen das tun. Außerdem enthält
|
||||||
|
die C-Standardbibliothek eine Handvoll sehr
|
||||||
|
gefährlicher Funktionen.</para>
|
||||||
|
|
||||||
|
<informaltable frame="none" pgwide="1">
|
||||||
|
<tgroup cols="2">
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry><function>strcpy</function>(char *dest, const
|
||||||
|
char *src)</entry>
|
||||||
|
<entry><simpara>Kann den Puffer dest überlaufen
|
||||||
|
lassen</simpara></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><function>strcat</function>(char *dest, const
|
||||||
|
char *src)</entry>
|
||||||
|
<entry><simpara>Kann den Puffer dest überlaufen
|
||||||
|
lassen</simpara></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><function>getwd</function>(char *buf)</entry>
|
||||||
|
<entry><simpara>Kann den Puffer buf überlaufen
|
||||||
|
lassen</simpara></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><function>gets</function>(char *s)</entry>
|
||||||
|
<entry><simpara>Kann den Puffer s überlaufen
|
||||||
|
lassen</simpara></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><function>[vf]scanf</function>(const char
|
||||||
|
*format, ...)</entry>
|
||||||
|
<entry><simpara>Kann sein Argument überlaufen
|
||||||
|
lassen</simpara></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><function>realpath</function>(char *path,
|
||||||
|
char resolved_path[])</entry>
|
||||||
|
<entry><simpara>Kann den Puffer path überlaufen
|
||||||
|
lassen</simpara></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><function>[v]sprintf</function>(char *str,
|
||||||
|
const char *format, ...)</entry>
|
||||||
|
<entry><simpara>Kann den Puffer str überlaufen
|
||||||
|
lassen</simpara></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>Puffer-Überlauf Beispiel</title>
|
||||||
|
|
||||||
|
<para>Das folgende Quellcode-Beispiel enthält einen
|
||||||
|
Puffer-Überlauf, der darauf ausgelegt ist die
|
||||||
|
Rücksprungadresse zu überschreiben und die
|
||||||
|
Anweisung direkt nach dem Funktionsaufruf zu
|
||||||
|
überspringen. (Inspiriert durch
|
||||||
|
<xref linkend="Phrack">)</para>
|
||||||
|
|
||||||
|
<programlisting>#include <sgmltag>stdio.h</sgmltag>
|
||||||
|
|
||||||
|
void manipulate(char *buffer) {
|
||||||
|
char newbuffer[80];
|
||||||
|
strcpy(newbuffer,buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char ch,buffer[4096];
|
||||||
|
int i=0;
|
||||||
|
|
||||||
|
while ((buffer[i++] = getchar()) != '\n') {};
|
||||||
|
|
||||||
|
i=1;
|
||||||
|
manipulate(buffer);
|
||||||
|
i=2;
|
||||||
|
printf("The value of i is : %d\n",i);
|
||||||
|
return 0;
|
||||||
|
}</programlisting>
|
||||||
|
|
||||||
|
<para>Betrachten wir nun, wie das Speicherabbild dieses
|
||||||
|
Prozesses aussehen würde, wenn wir 160 Leerzeichen
|
||||||
|
in unser kleines Programm eingeben, bevor wir Enter
|
||||||
|
drücken.</para>
|
||||||
|
|
||||||
|
<para>[XXX figure here!]</para>
|
||||||
|
|
||||||
|
<para>Offensichtlich kann man durch böswilligere Eingaben
|
||||||
|
bereits kompilierten Programmtext ausführen (wie z.B.
|
||||||
|
exec(/bin/sh)).</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>Puffer-Überläufe vermeiden</title>
|
||||||
|
|
||||||
|
<para>Die direkteste Lösung, um
|
||||||
|
Stack-Überläufe zu vermeiden, ist immer
|
||||||
|
grössenbegrenzten Speicher und String-Copy-Funktionen
|
||||||
|
zu verwenden.
|
||||||
|
<function>strncpy</function> und <function>strncat</function>
|
||||||
|
sind Teil der C-Standardbibliothek.
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Zeichenketten-Kopierfunktioen</primary>
|
||||||
|
<secondary>strncpy</secondary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm>
|
||||||
|
<primary>Zeichenketten-Kopierfunktionen</primary>
|
||||||
|
<secondary>strncat</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
Diese Funktionen akzeptieren einen Längen-Parameter. Dieser
|
||||||
|
Wert sollte nicht größer sein als die Länge
|
||||||
|
des Zielpuffers. Die Funktionen kopieren dann bis zu
|
||||||
|
`length' Bytes von der Quelle zum Ziel. Allerdings gibt es
|
||||||
|
einige Probleme. Keine der Funktionen garantiert, dass
|
||||||
|
die Zeichenkette NUL-terminiert ist, wenn die
|
||||||
|
Größe
|
||||||
|
|
||||||
|
<indexterm><primary>NUL-Terminierung</primary></indexterm>
|
||||||
|
|
||||||
|
des Eingabepuffers so groß ist wie das Ziel.
|
||||||
|
Außerdem wird der Parameter length zwischen strncpy
|
||||||
|
und strncat inkonsistent definiert, weshalb Programmierer
|
||||||
|
leicht bezüglich der korrekten Verwendung durcheinander
|
||||||
|
kommen können. Weiterhin gibt es einen spürbaren
|
||||||
|
Leistungsverlust im Vergleich zu
|
||||||
|
<function>strcpy</function>, wenn eine kurze Zeichenkette in
|
||||||
|
einen großen Puffer kopiert wird. Denn
|
||||||
|
<function>strncpy</function> fült den Puffer bis zur
|
||||||
|
angegebenen Länge mit NUL auf.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>In OpenBSD wurde eine weitere Möglichkeit zum
|
||||||
|
|
||||||
|
<indexterm><primary>OpenBSD</primary></indexterm>
|
||||||
|
|
||||||
|
kopieren von Speicherbereichen implementiert, die dieses
|
||||||
|
Problem umgeht. Die Funktionen <function>strlcpy</function>
|
||||||
|
und <function>strlcat</function> garantieren, dass das Ziel
|
||||||
|
immer NUL-terminiert wird, wenn das Argument length ungleich
|
||||||
|
null ist. Für weitere Informationen über diese
|
||||||
|
Funktionen lesen Sie bitte <xref linkend="OpenBSD">. Die
|
||||||
|
OpenBSD-Funktionen <function>strlcpy</function> und
|
||||||
|
<function>strlcat</function> sind seit Version 3.3 auch in
|
||||||
|
FreeBSD verfügbar.</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Zeichenketten-Kopierfunktionen</primary>
|
||||||
|
<secondary>strlcpy</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Zeichenketten-Kopierfunktionen</primary>
|
||||||
|
<secondary>strlcat</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<sect3>
|
||||||
|
<title>Compiler-basierte Laufzeitüberprüfung
|
||||||
|
von Grenzen</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Prüfung von Grenzen</primary>
|
||||||
|
<secondary>Compiler-basiert</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<para>Unglücklicherweise gibt es immer noch sehr viel
|
||||||
|
Quelltext, der allgemein verwendet wird und blind Speicher
|
||||||
|
umherkopiert, ohne eine der gerade besprochenen Funktionen,
|
||||||
|
die Begrenzungen unterstützen, zu verwenden.
|
||||||
|
Glücklicherweise gibt es eine weitere Lösung.
|
||||||
|
Verschiedene Compiler-Erweiterungen und Bibliotheken
|
||||||
|
überprüfen die Grenzen in C/C++ zur
|
||||||
|
Laufzeit.</para>
|
||||||
|
|
||||||
|
<indexterm><primary>StackGuard</primary></indexterm>
|
||||||
|
<indexterm><primary>GCC</primary></indexterm>
|
||||||
|
|
||||||
|
<para>StackGuard ist eine solche Erweiterung, die als
|
||||||
|
kleiner Patch für den GCC-Code-Generator
|
||||||
|
implementiert ist. Von der <ulink
|
||||||
|
url="http://immunix.org/stackguard.html">StackGuard
|
||||||
|
Webseite</ulink> (übersetzt):
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<para>"StackGuard erkennt und verhindert
|
||||||
|
Stack-Smashing-Angriffe, indem es die
|
||||||
|
Rücksprungadresse auf dem Stack davor
|
||||||
|
schützt, geändert zu werden. StackGuard
|
||||||
|
platziert ein "Canary"-Wort (Anmerkung des
|
||||||
|
Übersetzers: Kanarienvogel, nach einer
|
||||||
|
Sicherheitsvorkehrung von Bergleuten, um Gas
|
||||||
|
frühzeitig zu erkennen, ein Wort ist hier
|
||||||
|
ein 32-Bit-Speicherblock) neben der
|
||||||
|
Rücksprungadresse, wenn eine Funktion aufgerufen
|
||||||
|
wird. Wenn das Canary bei der Rückkehr der
|
||||||
|
Funktion geändert wurde, reagiert das Programm
|
||||||
|
auf den Versuch eines Stack-Smashing-Angriffs,
|
||||||
|
schickt eine Benachrichtigung an Syslog und
|
||||||
|
hält dann an."</para>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<para>"StackGuard ist als ein kleiner Patch für
|
||||||
|
den GCC-Code-Generator implementiert, um genau zu
|
||||||
|
sein, für die Routinen function_prolog() und
|
||||||
|
function_epilog().
|
||||||
|
function_prolog() wurde erweitert, um Canaries beim
|
||||||
|
Start einer Funktion auf den Stack zu legen und
|
||||||
|
function_epilog() überprüft die
|
||||||
|
Integrität des Canaries beim Beenden der
|
||||||
|
Funktion. Jeder Versuch, die Rücksprungadresse
|
||||||
|
zu ändern, wird daher erkannt, bevor die
|
||||||
|
Funktion zurückkehrt."</para>
|
||||||
|
</blockquote>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<indexterm><primary>Puffer-Überlauf</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Ihre Anwendungen mit StackGuard neu zu kompilieren ist
|
||||||
|
eine effektive Maßnahme, um sie vor den meisten
|
||||||
|
Puffer-Überlauf-Angriffen zu schützen, aber die
|
||||||
|
Programme können noch immer kompromittiert werden.</para>
|
||||||
|
</sect3>
|
||||||
|
|
||||||
|
<sect3>
|
||||||
|
<title>Bibliotheks-basierte Laufzeitüberprüfung
|
||||||
|
von Grenzen</title>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Prüfung von Grenzen</primary>
|
||||||
|
<secondary>Bibliotheks-basiert</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<para>Compiler-basierte Mechanismen sind bei Software,
|
||||||
|
die nur im Binärformat vertrieben wird, und die somit
|
||||||
|
nicht neu kompiliert werden kann völlig nutzlos.
|
||||||
|
Für diesen Fall gibt es einige Bibliotheken, welche
|
||||||
|
die unsicheren Funktionen der C-Bibliothek
|
||||||
|
(<function>strcpy</function>, <function>fscanf</function>,
|
||||||
|
<function>getwd</function>, etc..) neu implementieren und
|
||||||
|
sicherstellen, dass nicht hinter den Stack-Pointer
|
||||||
|
geschrieben werden kann.</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><simpara>libsafe</simpara></listitem>
|
||||||
|
<listitem><simpara>libverify</simpara></listitem>
|
||||||
|
<listitem><simpara>libparanoia</simpara></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>Leider haben diese Bibliotheks-basierten
|
||||||
|
Verteidigungen mehrere Schwächen. Diese Bibliotheken
|
||||||
|
schützen nur vor einer kleinen Gruppe von
|
||||||
|
Sicherheitslücken und sie können das
|
||||||
|
eigentliche Problem nicht lösen. Diese
|
||||||
|
Maßnahmen können versagen, wenn die Anwendung
|
||||||
|
mit -fomit-frame-pointer kompiliert wurde.
|
||||||
|
Außerdem kann der Nutzer die Umgebungsvariablen
|
||||||
|
LD_PRELOAD und LD_LIBRARY_PATH überschreiben oder
|
||||||
|
löschen.</para>
|
||||||
|
</sect3>
|
||||||
|
</sect2>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="secure-setuid">
|
||||||
|
<title>SetUID-Themen</title>
|
||||||
|
|
||||||
|
<indexterm><primary>seteuid</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Es gibt zu jedem Prozess mindestens sechs verschiedene
|
||||||
|
IDs, die diesem zugeordnet sind. Deshalb müssen Sie
|
||||||
|
sehr vorsichtig mit den Zugriffsrechten sein, die Ihr Prozess
|
||||||
|
zu jedem Zeitpunkt besitzt. Konkret bedeutet dass, das alle
|
||||||
|
seteuid-Anwendungen ihre Privilegien abgeben sollten, sobald
|
||||||
|
sie diese nicht mehr benötigen.</para>
|
||||||
|
|
||||||
|
<indexterm>
|
||||||
|
<primary>Benutzer-IDs</primary>
|
||||||
|
<secondary>reale Benutzer-ID</secondary>
|
||||||
|
</indexterm>
|
||||||
|
<indexterm>
|
||||||
|
<primary>Benutzer-IDs</primary>
|
||||||
|
<secondary>effective Benutzer-ID</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<para>Die reale Benutzer-ID kann nur von einem
|
||||||
|
Superuser-Prozess geändert werden. Das Programm
|
||||||
|
<application>login</application> setzt sie, wenn sich ein
|
||||||
|
Benutzer am System anmeldet, und sie wird nur selten
|
||||||
|
geändert.</para>
|
||||||
|
|
||||||
|
<para>Die effektive Benutzer-ID wird von der Funktion
|
||||||
|
<function>exec()</function> gesetzt, wenn ein Programm
|
||||||
|
das seteuid-Bit gesetzt hat. Eine Anwendung kann
|
||||||
|
<function>seteuid()</function> jederzeit aufrufen, um die
|
||||||
|
effektive Benutzer-ID entweder auf die reale Benutzer-ID oder
|
||||||
|
die gespeicherte set-user-ID zu setzen. Wenn eine der
|
||||||
|
<function>exec()</function>-Funktionen die effektive
|
||||||
|
Benutzer-ID setzt, wird der vorherige Wert als
|
||||||
|
gespeicherte set-user-ID abgelegt.</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="secure-chroot">
|
||||||
|
<title>Die Umgebung ihres Programme einschränken</title>
|
||||||
|
|
||||||
|
<indexterm><primary>chroot()</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Die herkömmliche Methode, um einen Prozess
|
||||||
|
einzuschränken, besteht in dem Systemaufruf
|
||||||
|
<function>chroot()</function>. Dieser Aufruf
|
||||||
|
ändert das Wurzelverzeichnis, auf das sich alle
|
||||||
|
Pfadangaben des Prozesses und jegliche Kind-Prozesse beziehen.
|
||||||
|
Damit dieser Systemaufruf gelingt, muss der Prozess
|
||||||
|
Ausführungsrechte (Durchsuchungsrechte) für das
|
||||||
|
Verzeichnis haben, auf das er sich bezieht. Die neue Umgebung
|
||||||
|
wird erst wirksam, wenn Sie mittels
|
||||||
|
<function>chdir()</function> in Ihre neue Umgebung wechseln.
|
||||||
|
Es sollte erwähnt werden, dass ein Prozess recht einfach
|
||||||
|
aus der chroot-Umgebung ausbrechen kann, wenn er root-Rechte
|
||||||
|
besitzt. Das kann man erreichen, indem man Gerätedateien
|
||||||
|
anlegt, um Kernel-Speicher zu lesen, oder indem man einen
|
||||||
|
Debugger mit einem Prozess außerhalb seines
|
||||||
|
Gefängnisses verbindet, oder auf viele andere
|
||||||
|
kreative Wege.</para>
|
||||||
|
|
||||||
|
<para>Das Verhalten des Systemaufrufs
|
||||||
|
<function>chroot()</function> kann durch die
|
||||||
|
kern.chroot.allow_open_directories
|
||||||
|
<command>sysctl</command>-Variable beeinflusst werden. Wenn
|
||||||
|
diese auf 0 gesetzt ist, wird <function>chroot()</function>
|
||||||
|
mit EPERM fehlschlagen, wenn irgendwelche Verzeichnisse
|
||||||
|
geöffnet sind. Wenn die Variable auf den Standardwert 1
|
||||||
|
gesetzt ist, wird <function>chroot()</function> mit EPERM
|
||||||
|
fehlschlagen, wenn irgendwelche Verzeichnisse geöffnet
|
||||||
|
sind und sich der Prozess bereits in einer
|
||||||
|
<function>chroot()</function>-Umgebung befindet. Bei jedem
|
||||||
|
anderen Wert wird die Überprüfung auf
|
||||||
|
geöffnete Verzeichnisse komplett umgangen.</para>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>Die Jail-Funktionalität in FreeBSD</title>
|
||||||
|
|
||||||
|
<indexterm><primary>Jail</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Das Konzept einer Jail (Gefängnis) erweitert
|
||||||
|
<function>chroot()</function>, indem es die Macht des
|
||||||
|
Superusers einschränkt, um einen echten 'virtuellen
|
||||||
|
Server' zu erzeugen. Wenn ein solches Gefängnis einmal
|
||||||
|
eingerichtet ist, muss die gesamte Netzwerkkommunikation
|
||||||
|
über eine bestimmte IP-Adresse erfolgen und die
|
||||||
|
"root-Privilegien" innerhalb der Jail sind sehr stark
|
||||||
|
eingeschränkt.</para>
|
||||||
|
|
||||||
|
<para>Solange Sie sich in einer Jail befinden, werden alle
|
||||||
|
Tests auf Superuser-Rechte durch den Aufruf von
|
||||||
|
<function>suser()</function> fehlschlagen. Allerdings wurden
|
||||||
|
einige Aufrufe von <function>suser()</function>
|
||||||
|
abgeändert, um die neue
|
||||||
|
<function>suser_xxx()</function>-Schnittstelle zu
|
||||||
|
implementieren. Diese Funktion ist dafür verantwortlich,
|
||||||
|
festzustellen, ob bestimmte Superuser-Rechte einem
|
||||||
|
eingesperrten Prozess zur Verfügung stehen.</para>
|
||||||
|
|
||||||
|
<para>Ein Superuser-Prozess innerhalb einer Jail darf
|
||||||
|
folgendes:</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<simpara>Berechtigungen verändern mittels:
|
||||||
|
<function>setuid</function>,
|
||||||
|
<function>seteuid</function>,
|
||||||
|
<function>setgid</function>,
|
||||||
|
<function>setegid</function>,
|
||||||
|
<function>setgroups</function>,
|
||||||
|
<function>setreuid</function>,
|
||||||
|
<function>setregid</function>,
|
||||||
|
<function>setlogin</function></simpara>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>Ressourcenbegrenzungen setzen mittels
|
||||||
|
<function>setrlimit</function></simpara>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>Einige sysctl-Variablen (kern.hostname)
|
||||||
|
verändern</simpara>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara><function>chroot()</function></simpara>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>Ein Flag einer vnode setzen:
|
||||||
|
<function>chflags</function>,
|
||||||
|
<function>fchflags</function></simpara>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>Attribute einer vnode setzen wie Dateiberechtigungen,
|
||||||
|
Eigentümer, Gruppe, Größe, Zugriffszeit
|
||||||
|
und Modifikationszeit</simpara>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<simpara>Binden eines Prozesses an einen öffentlichen
|
||||||
|
privilegierten Port (ports < 1024)</simpara>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para><function>Jail</function>s sind ein mächtiges
|
||||||
|
Werkzeug, um Anwendungen in einer sicheren Umgebung
|
||||||
|
auszuführen, aber sie haben auch ihre Nachteile.
|
||||||
|
Derzeit wurden die IPC-Mechanismen noch nicht an
|
||||||
|
<function>suser_xxx</function> angepasst, so dass Anwendungen
|
||||||
|
wie MySQL nicht innerhalb einer Jail ausgeführt werden
|
||||||
|
können. Der Superuser-Zugriff hat in einer Jail nur eine
|
||||||
|
sehr eingeschränkte Bedeutung, aber es gibt keine
|
||||||
|
Möglichkeit zu definieren was
|
||||||
|
"sehr eingeschränkt" heißt.</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>&posix;.1e Prozess Capabilities</title>
|
||||||
|
|
||||||
|
<indexterm><primary>POSIX.1e Process
|
||||||
|
Capabilities</primary></indexterm>
|
||||||
|
<indexterm><primary>TrustedBSD</primary></indexterm>
|
||||||
|
|
||||||
|
<para>&posix; hat einen funktionalen Entwurf (Working Draft)
|
||||||
|
herausgegeben, der Ereignisüberprüfung,
|
||||||
|
Zugriffskontrolllisten, feiner einstellbare Privilegien,
|
||||||
|
Informationsmarkierung und verbindliche Zugriffskontrolle
|
||||||
|
enthält.</para>
|
||||||
|
|
||||||
|
<para>Dies ist im Moment in Arbeit und das Hauptziel des <ulink
|
||||||
|
url="http://www.trustedbsd.org/">TrustedBSD</ulink>-Projekts.
|
||||||
|
Ein Teil der bisherigen Arbeit wurde in &os.current;
|
||||||
|
übernommen (cap_set_proc(3)).</para>
|
||||||
|
</sect2>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="secure-trust">
|
||||||
|
<title>Vertrauen</title>
|
||||||
|
|
||||||
|
<para>Eine Anwendung sollte niemals davon ausgehen, dass
|
||||||
|
irgendetwas in der Nutzerumgebung vernünftig ist.
|
||||||
|
Das beinhaltet (ist aber sicher nicht darauf
|
||||||
|
beschränkt): Nutzereingaben, Signale,
|
||||||
|
Umgebungsvariablen, Ressourcen, IPC, mmaps, das
|
||||||
|
Arbeitsverzeichnis im Dateisystem, Dateideskriptoren,
|
||||||
|
die Anzahl geöffneter Dateien, etc..</para>
|
||||||
|
|
||||||
|
<indexterm><primary>positive Filterung</primary></indexterm>
|
||||||
|
<indexterm><primary>Datenvalidierung</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Sie sollten niemals annehmen, dass Sie jede Art von
|
||||||
|
inkorrekten Eingaben abfangen können, die ein Nutzer
|
||||||
|
machen kann. Stattdessen sollte Ihre Anwendung positive
|
||||||
|
Filterung verwenden, um nur eine bestimmte Teilmenge an
|
||||||
|
Eingaben zuzulassen, die Sie für sicher halten.
|
||||||
|
Ungeeignete Datenüberprüfung ist die Ursache
|
||||||
|
vieler Exploits, besonders für CGI-Skripte im Internet.
|
||||||
|
Bei Dateinamen müssen Sie besonders vorsichtig sein,
|
||||||
|
wenn es sich um Pfade ("../", "/"), symbolische
|
||||||
|
Verknüpfungen und Shell-Escape-Sequenzen handelt.</para>
|
||||||
|
|
||||||
|
<indexterm><primary>Perl Taint-Modus</primary></indexterm>
|
||||||
|
|
||||||
|
<para>Perl bietet eine wirklich coole Funktion, den sogenannten
|
||||||
|
"Taint"-Modus, der verwendet werden kann, um zu verhindern,
|
||||||
|
dass Skripte Daten, die von außerhalb des Programmes
|
||||||
|
stammen, auf unsichere Art und Weise verwenden. Dieser
|
||||||
|
Modus überprüft Kommandozeilenargumente,
|
||||||
|
Umgebungsvariablen, Lokalisierungsinformationen, die
|
||||||
|
Ergebnisse von Systemaufrufen
|
||||||
|
(<function>readdir()</function>,
|
||||||
|
<function>readlink()</function>,
|
||||||
|
<function>getpwxxx()</function>)
|
||||||
|
und alle Dateieingaben.</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="secure-race-conditions">
|
||||||
|
<title>Race-Conditions</title>
|
||||||
|
|
||||||
|
<para>Eine Race-Condition ist ein unnormales Verhalten, das von
|
||||||
|
einer unerwarteten Abhängigkeit beim Timing von Ereignissen
|
||||||
|
verursacht wird. Mit anderen Worten heißt das, ein
|
||||||
|
Programmierer nimmt irrtümlicher Weise an, dass ein
|
||||||
|
bestimmtes Ereignis immer vor einem anderen stattfindet.</para>
|
||||||
|
|
||||||
|
<indexterm><primary>Race-Conditions</primary>
|
||||||
|
<secondary>Signale</secondary></indexterm>
|
||||||
|
|
||||||
|
<indexterm><primary>Race-Conditions</primary>
|
||||||
|
<secondary>Zugriffsprüfungen</secondary></indexterm>
|
||||||
|
|
||||||
|
<indexterm><primary>Race-Conditions</primary>
|
||||||
|
<secondary>Öffnen von Dateien</secondary></indexterm>
|
||||||
|
|
||||||
|
<para>Einige der häufigsten Ursachen für
|
||||||
|
Race-Conditions sind Signale, Zugriffsprüfungen und das
|
||||||
|
Öffnen von Dateien. Signale sind von Natur aus
|
||||||
|
asynchrone Ereignisse, deshalb ist besondere Vorsicht im
|
||||||
|
Umgang damit geboten. Das Prüfen des Zugriffs mittels
|
||||||
|
der Aufrufe <function>access(2)</function> gefolgt von
|
||||||
|
<function>open(2)</function> ist offensichtlich nicht atomar.
|
||||||
|
Benutzer können zwischen den beiden Aufrufen Dateien
|
||||||
|
verschieben. Stattdessen sollten privilegierte Anwendungen
|
||||||
|
<function>seteuid()</function> direkt gefolgt von
|
||||||
|
<function>open()</function> aufrufen. Auf die gleiche Art
|
||||||
|
sollte eine Anwendung immer eine korrekte Umask vor dem
|
||||||
|
Aufruf von <function>open()</function> setzen, um
|
||||||
|
störende Aufrufe von <function>chmod()</function> zu
|
||||||
|
umgehen.</para>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/sockets/chapter.sgml,v 1.4 2009/02/10 11:20:38 jkois Exp $
|
||||||
|
basiert auf: 1.15
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="sockets">
|
||||||
|
<title>Sockets</title>
|
||||||
|
|
||||||
|
<para>Dieses Kapitel ist noch nicht übersetzt.
|
||||||
|
Lesen Sie bitte <ulink
|
||||||
|
url="&url.books.developers-handbook.en;/sockets.html">
|
||||||
|
das Original in englischer Sprache</ulink>. Wenn Sie helfen
|
||||||
|
wollen, dieses Kapitel zu übersetzen, senden Sie bitte
|
||||||
|
eine E-Mail an die Mailingliste &a.de.translators;.</para>
|
||||||
|
</chapter>
|
277
de_DE.ISO8859-1/books/developers-handbook/testing/chapter.sgml
Normal file
277
de_DE.ISO8859-1/books/developers-handbook/testing/chapter.sgml
Normal file
|
@ -0,0 +1,277 @@
|
||||||
|
<!--
|
||||||
|
The FreeBSD Documentation Project
|
||||||
|
The FreeBSD German Documentation Project
|
||||||
|
|
||||||
|
$FreeBSD$
|
||||||
|
$FreeBSDde: de-docproj/books/developers-handbook/testing/chapter.sgml,v 1.7 2007/11/15 11:02:51 as Exp $
|
||||||
|
basiert auf: 1.2
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="testing">
|
||||||
|
<chapterinfo>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Jürgen</firstname>
|
||||||
|
<surname>Lock</surname>
|
||||||
|
<contrib>Übersetzt von </contrib>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</chapterinfo>
|
||||||
|
|
||||||
|
<title>Regressions- und Performance-Tests</title>
|
||||||
|
|
||||||
|
<para>Regressions-Tests werden durchgeführt, um zu überprüfen,
|
||||||
|
ob ein bestimmter Teil des Systems wie erwartet funktioniert, und
|
||||||
|
um sicherzustellen, dass bereits beseitigte Fehler nicht wieder eingebaut
|
||||||
|
werden.</para>
|
||||||
|
|
||||||
|
<para>Die &os;-Regressions-Testwerkzeuge finden Sie im
|
||||||
|
&os;-Quelltextbaum unter <filename
|
||||||
|
class="directory">src/tools/regression</filename>.</para>
|
||||||
|
|
||||||
|
<section id="testing-micro-benchmark">
|
||||||
|
<title>Mikro-Benchmark-Checkliste</title>
|
||||||
|
|
||||||
|
<para>Dieser Abschnitt enthält Tipps, wie
|
||||||
|
ordnungsgemäße Mikro-Benchmarks unter &os; oder für
|
||||||
|
&os; selbst erstellt werden.</para>
|
||||||
|
|
||||||
|
<para>Es ist nicht möglich, immer alle der folgenden
|
||||||
|
Vorschläge zu berücksichtigen, aber je mehr davon,
|
||||||
|
desto besser wird der Benchmark kleine
|
||||||
|
Unterschiede nachweisen können.</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>Schalten Sie <acronym>APM</acronym> und alles andere,
|
||||||
|
das den Systemtakt beeinflusst, ab
|
||||||
|
(<acronym>ACPI</acronym>?).</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Starten Sie in den Single-User-Modus. &man.cron.8;
|
||||||
|
und andere Systemdienste verursachen nur Störungen.
|
||||||
|
Genauso der &man.sshd.8;-Systemdienst.
|
||||||
|
Falls während des Tests
|
||||||
|
SSH-Zugriff benötigt wird, schalten Sie entweder die
|
||||||
|
Neuerstellung des SSHv1-Schlüssels ab oder beenden Sie
|
||||||
|
den <command>sshd</command>-Elternprozess während der
|
||||||
|
Tests.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Beenden Sie &man.ntpd.8;.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Falls &man.syslog.3;-Ereignisse erzeugt werden,
|
||||||
|
starten Sie &man.syslogd.8; mit leerer
|
||||||
|
<filename>/etc/syslogd.conf</filename> oder beenden Sie
|
||||||
|
es.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Sorgen Sie für möglichst wenig Disk-I/O;
|
||||||
|
vermeiden Sie es ganz wenn möglich.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Hängen Sie keine Dateisysteme ein, die Sie nicht
|
||||||
|
benötigen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Hängen Sie <filename
|
||||||
|
class="directory">/</filename>, <filename
|
||||||
|
class="directory">/usr</filename> und die anderen
|
||||||
|
Dateisysteme nur lesbar ein wenn möglich. Dies
|
||||||
|
verhindert, dass atime-Aktualisierungen auf der Festplatte (usw.) das
|
||||||
|
Ergebnis verfälschen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Initialisieren Sie das beschreibbare
|
||||||
|
Test-Dateisystem mit &man.newfs.8; neu und füllen Sie es
|
||||||
|
aus einer &man.tar.1;- oder &man.dump.8;-Datei vor jedem
|
||||||
|
Lauf. Hängen Sie es aus und wieder ein, bevor Sie den
|
||||||
|
Test starten. Dies sorgt für einen konsistenten
|
||||||
|
Dateisystemaufbau. Bei einem <quote>worldstone</quote>-Test
|
||||||
|
bezieht sich dies auf <filename
|
||||||
|
class="directory">/usr/obj</filename> (Initialisieren Sie
|
||||||
|
es einfach mit <command>newfs</command> neu und hängen Sie
|
||||||
|
es ein). Um absolut reproduzierbare Ergebnisse zu bekommen,
|
||||||
|
füllen Sie das Dateisystem aus einer &man.dd.1;-Datei
|
||||||
|
(d.h. <command>dd
|
||||||
|
if=<filename>myimage</filename> of=<filename
|
||||||
|
class="devicefile">/dev/ad0s1h</filename>
|
||||||
|
bs=1m</command>).</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Benutzen Sie malloc-gestützte oder vorbelastete
|
||||||
|
&man.md.4;-Partitionen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Starten Sie zwischen den einzelnen
|
||||||
|
Durchläufen neu, dies sichert einen konsistenteren
|
||||||
|
Zustand.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Entfernen Sie alle nicht unbedingt benötigten
|
||||||
|
Gerätetreiber aus dem Kernel. Wenn z.B. USB für
|
||||||
|
den Test nicht benötigt wird, entfernen Sie es aus dem
|
||||||
|
Kernel. Gerätetreiber, die sich Hardware zuteilen, haben
|
||||||
|
oft <quote>tickende</quote> Timeouts.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Konfigurieren Sie nicht Hardware, die
|
||||||
|
nicht benutzt wird. Entfernen Sie Festplatten
|
||||||
|
mit &man.atacontrol.8; und &man.camcontrol.8;, wenn diese
|
||||||
|
für den Test nicht gebraucht werden.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Konfigurieren Sie nicht das Netzwerk, es sei denn es
|
||||||
|
wird getestet, oder warten Sie, bis der Test fertig ist, wenn
|
||||||
|
Sie das Ergebnis auf einen anderen Rechner übertragen
|
||||||
|
wollen.</para>
|
||||||
|
|
||||||
|
<para>Falls das System an ein öffentliches Netzwerk
|
||||||
|
angeschlossen sein muss, achten Sie auf Spitzen im
|
||||||
|
Broadcast-Verkehr. Obwohl dieser kaum auffällt, wird
|
||||||
|
er CPU-Zyklen brauchen. Ähnliches gilt für
|
||||||
|
Multicast.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Legen Sie jedes Dateisystem auf eine eigene Festplatte.
|
||||||
|
Dies minimiert Jitter durch Optimierungen von
|
||||||
|
Lesekopfbewegungen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Minimieren Sie Ausgaben auf serielle oder VGA-Konsolen.
|
||||||
|
Ausgabenumleitung in Dateien ergibt weniger Jitter
|
||||||
|
(serielle Konsolen werden leicht zum Flaschenhals).
|
||||||
|
Benutzen Sie die Tastatur nicht, während der Test
|
||||||
|
läuft, sogar <keycap>space</keycap> oder
|
||||||
|
<keycap>back-space</keycap> wirken sich auf die
|
||||||
|
Ergebnisse aus.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Stellen Sie sicher, dass der Test lang genug
|
||||||
|
läuft, aber nicht zu lange. Wenn er zu kurz ist, sind
|
||||||
|
Zeitstempel ein Problem. Wenn er zu lang ist, werden
|
||||||
|
Temperaturänderungen und Drift die Frequenz von
|
||||||
|
Quarzkristallen im Rechner beeinflussen. Daumenregel: mehr
|
||||||
|
als eine Minute, weniger als eine Stunde.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Versuchen Sie, die Temparatur in der Umgebung des
|
||||||
|
Rechners so stabil wie möglich zu halten. Diese beeinflusst
|
||||||
|
sowohl Quarzkristalle als auch Festplatten-Algorithmen.
|
||||||
|
Um einen wirklich stabilen Takt zu erhalten, wäre es auch
|
||||||
|
möglich, einen stabilisierten Takt anzuschließen.
|
||||||
|
D.h. besorgen Sie sich einen OCXO + PLL und koppeln Sie das
|
||||||
|
Ausgangssignal mit den Taktgeberschaltkreisen anstelle des
|
||||||
|
Quarzkristalls der Hauptplatine. Wenden Sie sich an
|
||||||
|
&a.phk;, wenn Sie mehr Informationen hierüber
|
||||||
|
benötigen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Lassen Sie den Test mindestens drei Mal laufen, besser
|
||||||
|
mehr als 20 Mal, sowohl
|
||||||
|
für <quote>vor</quote> als auch für
|
||||||
|
<quote>nach</quote> dem Code. Versuchen Sie abzuwechseln
|
||||||
|
(d.h. nicht erst 20 Mal <quote>vorher</quote> und dann 20
|
||||||
|
Mal <quote>nachher</quote>), dies ermöglicht,
|
||||||
|
umgebungsbedingte Effekte zu erkennen. Wechseln Sie nicht
|
||||||
|
1:1 ab, sondern 3:3; dies erlaubt,
|
||||||
|
Wechselwirkungseffekte zu erkennen.</para>
|
||||||
|
|
||||||
|
<para>Ein gutes Muster ist:
|
||||||
|
<literal>bababa{bbbaaa}*</literal>. Dies gibt Hinweise nach
|
||||||
|
den ersten 1+1-Läufen (sodass Sie den Test stoppen
|
||||||
|
können, falls er völlig daneben geht), Sie
|
||||||
|
können die Standardabweichung nach den ersten 3+3-Läufen
|
||||||
|
überprüfen (zeigt an, ob sich ein
|
||||||
|
längerer Lauf lohnt), später
|
||||||
|
Trends und Wechselwirkungen.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Benutzen Sie <filename
|
||||||
|
class="directory">usr/src/tools/tools/ministat</filename>, um
|
||||||
|
festzustellen, ob Ihre Ergebnisse signifikant sind.
|
||||||
|
Überlegen Sie sich, das Buch <quote>Cartoon guide to
|
||||||
|
statistics</quote> ISBN: 0062731025 zu kaufen. Es ist sehr
|
||||||
|
empfehlenswert, falls Sie Dinge wie Standardabweichung und
|
||||||
|
Studentsche t-Verteilung vergessen oder nie gelernt
|
||||||
|
haben.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Benutzen Sie keinen Hintergrund-&man.fsck.8;, wenn Sie
|
||||||
|
ihn nicht selbst testen
|
||||||
|
wollen. Schalten Sie auch <varname>background_fsck</varname>
|
||||||
|
in <filename>/etc/rc.conf</filename> aus, es sei denn der
|
||||||
|
Benchmark wird nicht mindestens 60+<quote>Laufzeit von
|
||||||
|
<command>fsck</command></quote> Sekunden nach Systemstart
|
||||||
|
gestartet, da &man.rc.8; startet und prüft, ob
|
||||||
|
<command>fsck</command> auf irgendeinem der Dateisysteme
|
||||||
|
laufen muss, wenn Hintergrund-<command>fsck</command>
|
||||||
|
eingeschaltet ist. Stellen Sie ebenfalls sicher, dass keine
|
||||||
|
Snapshots herumliegen, falls der Benchmark nicht ein Test
|
||||||
|
mit Snapshots ist.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Falls der Benchmark unerwartet schlechte Performance
|
||||||
|
zeigt, überprüfen Sie Dinge wie große Mengen
|
||||||
|
Interrupts von unerwarteten Quellen. Es gibt Berichte, dass
|
||||||
|
einige <acronym>ACPI</acronym>-Versionen sich <quote>daneben
|
||||||
|
benehmen</quote> und ein Übermaß an Interrupts
|
||||||
|
erzeugen. Um zu helfen, ungewöhnliche Testergebnisse zu
|
||||||
|
diagnostizieren, machen Sie ein paar Momentaufnahmen von
|
||||||
|
<command>vmstat -i</command> und suchen Sie nach
|
||||||
|
Ungewöhnlichem.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Gehen Sie mit Parametern zur Optimierung
|
||||||
|
von Kernel, Userland und Fehlersuche vorsichtig um.
|
||||||
|
Es passiert schnell, irgendetwas durchrutschen zu
|
||||||
|
lassen und dann später festzustellen, dass der Test
|
||||||
|
nicht das gleiche verglichen hat.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Erstellen Sie nie Benchmarks unter Verwendung der Kernel-Optionen
|
||||||
|
<literal>WITNESS</literal> und <literal>INVARIANTS</literal>,
|
||||||
|
wenn der Test nicht diese Merkmale selbst
|
||||||
|
untersuchen soll. <literal>WITNESS</literal> kann zu 400% und
|
||||||
|
mehr Performance-Abnahme führen. Ähnliches gilt
|
||||||
|
für Userland-&man.malloc.3;-Parameter, Voreinstellungen
|
||||||
|
hierbei unterscheiden sich bei -CURRENT von denen bei
|
||||||
|
Production-Releases.</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-declaration: "../chapter.decl"
|
||||||
|
sgml-indent-data: t
|
||||||
|
sgml-omittag: nil
|
||||||
|
sgml-always-quote-attributes: t
|
||||||
|
sgml-parent-document: ("../book.sgml" "part" "chapter")
|
||||||
|
End:
|
||||||
|
-->
|
2647
de_DE.ISO8859-1/books/developers-handbook/tools/chapter.sgml
Normal file
2647
de_DE.ISO8859-1/books/developers-handbook/tools/chapter.sgml
Normal file
File diff suppressed because it is too large
Load diff
6098
de_DE.ISO8859-1/books/developers-handbook/x86/chapter.sgml
Normal file
6098
de_DE.ISO8859-1/books/developers-handbook/x86/chapter.sgml
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue