<!-- Subversion revision of original English document "3669" -->
<chapt id="pkg_basics">Grundlagen des Debian-Paketverwaltungssystems

<sect id="package">Was ist ein Debian-Paket?

<p>Pakete beinhalten im Allgemeinen alle notwendigen Dateien, um eine Sammlung
in Beziehung stehender Kommandos und Fähigkeiten zu implementieren.
Es gibt zwei Arten von Debian-Paketen:
<list>
  <item><em>Binärpakete</em>, welche ausführbare Dateien, Konfigurationsdateien,
  man/info-Seiten, Copyright-Informationen und andere Dokumentation beinhalten.
  Diese Pakete sind in einem speziellen Debian-Archivformat verteilt
  (siehe <ref id="deb-format">). Sie zeichnen sich für gewöhnlich durch eine
  ».deb«-Dateierweiterung aus. Binärpakete können mittels des Debian-Werkzeugs
  <prgn>dpkg</prgn> entpackt werden. Mehr Details finden Sie in der Handbuchseite.
  
  <item><em>Quellpakete</em>, welche aus einer <tt>.dsc</tt>-Datei bestehen,
  die das Quellpaket beschreibt (inklusive der Namen der folgenden Dateien),
  einer <tt>.orig.tar.gz</tt>-Datei, welche die originalen, unveränderten 
  Quellen in einem gzip-komprimierten tar-Format enthält und üblicherweise
  einer <tt>.diff.gz</tt>-Datei, die Debian-spezifische Änderungen an den Original-Quellen
  enthält. Das Dienstprogramm <prgn>dpkg-source</prgn> packt und entpackt
  Debian-Quellpakete. Mehr Details sind in der Handbuchseite zu finden.
</list></p>

<p>Für die Installation von Software benutzt das System die von den Paketbetreuern sorgfältig
angegebenen Abhängigkeiten. Diese Abhängigkeiten sind in der 
<file>control</file>-Datei, die zu jedem Paket gehört, dokumentiert. 
Zum Beispiel beinhaltet das Paket des GNU C-Compilers (<package>gcc</package>)
Abhängigkeiten (»depends«) zu dem Paket <package>binutils</package>, welches den Linker und
den Assembler enthält. Wenn ein Benutzer versucht <package>gcc</package> zu installieren ohne
zuerst <package>binutils</package> installiert zu haben, gibt das Paketverwaltungssystem (<prgn>dpkg</prgn>)
die Fehlernachricht aus, dass es das Paket <package>binutils</package> benötige und stoppt die Installation
von <package>gcc</package>. (Dennoch kann dieser Prüfmechanismus vom Benutzer abgestellt werden,
siehe <manref name="dpkg" section="8">.)  Siehe <ref id="depends"> weiter
unten.</p>

<p>Debian-Paketierungsprogramme können benutzt werden, um:
<list>
  <item>Pakete oder Paketteile zu manipulieren und zu verwalten,
  <item>dem Benutzer zu helfen Pakete aufzuteilen, die auf Medien mit
        limitierter Größe übermittelt werden sollen, z.B. Disketten,
  <item>den Entwicklern beim Erzeugen von Paketen zu helfen und
  <item>Benutzern die Installation von Paketen zu ermöglichen, die sich
        z.B. auf einem FTP-Server befinden.
</list>
</p>
<sect id="deb-format">Was ist das Format eines binären Debian-Pakets?

<p>Ein Debian-Paket oder eine Debian-Archivdatei beinhaltet ausführbare Dateien,
Bibliotheken und Dokumentationen, die zu einem Programm oder einer Menge
verwandter Programme gehören.
Normalerweise hat eine Debian-Archivdatei die Dateiendung
<tt>.deb</tt>.</p>

<p>Die Interna des binären Debian-Paketformats sind in
der <manref name="deb" section="5"> Handbuchseite beschrieben. 
Dieses interne Format kann sich (zwischen zwei &debian;-Hauptreleases)
ändern, benutzen Sie daher bitte immer <manref name="dpkg-deb"
section="1">, um <tt>.deb</tt>-Dateien zu bearbeiten.</p>

<sect id="pkgname">Warum sind Debian-Paketdateinamen so lang? 

<p>Die Debian-Binärpaketdateien gehorchen alle der folgenden Konvention:
&lt;foo&gt;_&lt;VersionsNummer&gt;-&lt;DebianRevisionsNummer&gt;.deb</p>

<p>Bitte beachten Sie, dass <tt>foo</tt> für den Paketnamen steht.
Sie können den Paketnamen der Debian-Archivdatei (.deb-Datei) auf eine der
folgenden Arten herausfinden:
<list>
  <item>Untersuchen Sie die <file>Packages</file>-Datei, in dem Ordner auf einer
	Debian-FTP-Archiv-Seite.  Diese Datei enthält für jedes Paket eine
	»Beschreibungszeile«. Der erste Abschnitt jeder Zeile enthält den
	formalen Paketnamen.
  <item>Benutzen Sie den folgenden Befehl <tt>dpkg --info foo_<var>VVV</var>-<var>RRR</var>.deb</tt>
	(wobei <var>VVV</var> und <var>RRR</var> durch die Versions- bzw. Revisions-Nummer des
	Paketes ersetzt werden muss).
	Dies gibt unter anderem den formalen Paketnamen beim Auspacken des
	Archives aus.
</list></p>

<p>Die <var>VVV</var>-Komponente ist die Versionsnummer, die vom
Original-Entwickler festgelegt worden ist. Hierfür sind keine Standards
festgelegt. Die Versionsnummer kann verschiedene Formate, wie »19990513«
und »1.3.8pre1«, gleichermaßen enthalten.</p>

<p>Die <var>RRR</var>-Komponente ist die Debian-Revisionsnummer, die von einem
Debian-Entwickler (oder einem individuellen Benutzer, der sich entschieden hat
das Paket selber zu bauen) festgelegt wurde.
Diese Nummer entspricht dem Stand des Debian-Paketes. Eine neue Revisionsnummer
zeigt manchmal Änderungen im Debian-Makefile (<file>debian/rules</file>), der
Debian-Kontroll-Datei (<tt>debian/control</tt>), den Installations- oder
Entfernungs-Skripten (<file>debian/p*</file>) oder in den Konfigurationsdateien die
mit diesem Paket benutzt werden.</p>

<!--
<p>The <tt>Arch</tt> component identifies the processor for which
the package was built.  This is commonly <tt>i386</tt>, which refers to
chips compatible to Intel's 386 or later versions.  For other
possibilities see <ref id="dirtree" name="Debian's FTP directory structure">.
-->

<sect id="controlfile">Was ist eine Debian-Kontroll-Datei?

<p>Besonderheiten, die Debian-Kontroll-Dateien betreffend, können Sie 
im Debian-Richtlinien-Handbuch, Abschnitt 5, <ref id="debiandocs"> sehen.</p>

<p>Folgend ist ein Auszug vom Debian-Paket »hello« zu sehen:
<example>
Package: hello
Priority: optional
Section: devel
Installed-Size: 45
Maintainer: Adam Heath &lt;doogie@debian.org&gt;
Architecture: i386
Version: 1.3-16
Depends: libc6 (>= 2.1)
Description: The classic greeting, and a good example
 The GNU hello program produces a familiar, friendly greeting.  It
<!-- XXX below 'non-programmers' were better, but this is a verbatim copy -->
 allows nonprogrammers to use a classic computer science tool which
 would otherwise be unavailable to them.
 .
 Seriously, though: this is an example of how to do a Debian package.
 It is the Debian version of the GNU Project's `hello world' program
 (which is itself an example for the GNU Project).
</example></p>

<p>Das »Package«-Feld zeigt den Paketnamen an. Dieser Name wird für die
Nutzung des Paketes mit den Paketverwaltungswerkzeugen benutzt. Es kann
vorkommen, dass das »Package«-Feld mit dem ersten Teil des
Debian-Paketarchivdateinamen übereinstimmt, dies muss aber nicht so sein.</p>

<p>Das »Version«-Feld gibt beides an, an erster Stelle die
Original-Entwickler-Versionsnummer und im zweiten Teil die Revisionsnummer des
Debian-Paketes. Dieses Vorgehen wird unter <ref id="pkgname"> beschrieben.</p> <!--
XXX missing name -->

<p>Das »Architecture«-Feld gibt den Prozessor-Typ an, für den das Binärpaket
kompiliert worden ist.</p>

<p>Das »Depends«-Feld enthält eine Liste von Paketen, die benötigt werden um
dieses Paket erfolgreich installieren zu können.</p>

<p>Die »Installed-Size« (installierte Größe) gibt den geschätzten
Festplattenverbrauch nach der Installation des Paketes an.
Dieser Wert wird von den Oberflächen benutzt um zu prüfen, ob noch genug
Festplattenplatz für die Installation vorhanden ist.</p>

<p>Die »Section«-Zeile gibt an, in welchem Bereich des Debian-FTP-Archives das
Paket zu finden ist. Dies ist der Name des Unterverzeichnisses (mit einem der
Hauptverzeichnisse, siehe <ref id="dirtree">) in dem das Paket zu gespeichert
ist.</p>

<p>Die »Priority«-Zeile zeigt, wie wichtig dieses Paket für die Installation ist.
Hiermit kann halb intelligente Software wie
"<tt>dselect</tt>" oder "<tt>console-apt</tt>" den Paketen Gruppen (z.B.
der Gruppe der optionalen Software) zuordnen, siehe <ref id="priority">.</p>

<p>Das »Maintainer«-Feld enthält die E-Mail-Adresse der Person, die momentan für
die Paketbetreuung zuständig ist.</p>

<p>Das »Description«-Feld gibt ein Einweisung über die Funktionen des Paketes.</p>

<p>Für mehr Informationen über alle möglichen Felder, die ein Paket haben kann,
sehen Sie sich bitte das Debian-Richtlinien-Handbuch, Abschnitt 5., <ref
id="debiandocs"> »Kontroll-Dateien und ihre Felder« an.</p>

<sect id="conffile">Was ist ein Debian »Conffile«?

<p>»Conffiles« sind Listen von Konfigurationsdateien (meistens unter
<file>/etc</file> zu finden). Diese Dateien werden vom Paketverwaltungswerkzeug bei
einer Paketaktualisierung nicht überschrieben.
Dies stellt sicher, dass eigene Einstellungen, die in diesen Dateien gemacht
wurden, behalten werden. Dies ist notwendig um die Funktion des »Vor-Ort«-Austausches
von Paketen auf laufenden Systemen zu ermöglichen.</p>

<p>Um herauszufinden, welche Dateien bei einem Update erhalten bleiben, benutzen
Sie: 
  <example>dpkg --status package</example>
und schauen unter »Conffiles:« nach.</p>

<sect id="maintscripts">Was sind die Debian »preinst«-, »postinst«-, »prerm«-
und »postrm«-Skripte?

<p>Diese Dateien sind ausführbare Skripte die automatisch vor bzw. nach einer
Paketinstallation laufen. Genau wie die <tt>control</tt>-Datei sind diese
Dateien Teil der Debian-Archivdatei.</p>

<p>Die individuellen Dateien sind:
<taglist>
<tag/preinst/
  <item>Diese Skript wird ausgeführt, bevor das Paket aus der
	Debian-Archivdatei (».deb«-Datei) entpackt wird.
	Viele »preinst«-Skripte stoppen Dienste, die während bzw. nach der
	Installation aktualisiert werden. Nach der erfolgreichen Installation
	folgt die Ausführung des »postinst«-Skriptes.

<tag/postinst/
  <item>Diese Skript stellt normalerweise die benötigte Konfiguration des
	<tt>foo</tt>-Paketes fertig, nachdem <tt>foo</tt> aus seiner
	Debian-Archivdatei (».deb«-Datei) entpackt worden ist.
	Oft fragen »postinst«-Skripte den Benutzer nach Eingaben und/oder
	warnen ihn, dass, wenn er die Standardwerte akzeptiert, er daran denken
	muss, das Paket neu zu konfigurieren, wenn es die Situation erfordert.
	Viele »postinst«-Skripte führen nach dem Installieren/Updaten, die für
	das Starten bzw. Neustarten der Dienste benötigten Kommandos aus.

<tag/prerm/
  <item>Dieses Skript stoppt üblicherweise alle Dienste die mit dem Paket
	verknüpft sind. Es wird ausgeführt bevor alle Dateien des Paketes
	gelöscht werden.

<tag/postrm/
  <item>Dieses Skript ändert Links die mit 
  <tt>foo</tt> zu tun haben und/oder löscht Dateien die vom Paket angelegt
	worden sind. (Siehe: 
  <ref id="virtual">.)
  </taglist></p>

<p>Momentan können alle Steuerdateien in <tt>/var/lib/dpkg/info</tt>
gefunden werden. Die relevanten Dateien für das Paket <tt>foo</tt> beginnen mit
»foo« und haben die Dateierweiterungen »preinst«, »postinst«, usw.
Die Datei <tt>foo.list</tt> enthält eine Liste der Dateien, die mit dem Paket
<tt>foo</tt> installiert worden sind. (Beachten Sie, dass die Pfade der Dateien
dpkg-Interna sind. Sie sollten nicht darauf aufbauen.)</p>

<sect id="priority">Was ist ein <em>Essential</em>-, <em>Required</em>-,
<em>Important</em>-, <em>Standard</em>-, <em>Optional</em>- oder <em>Extra</em>-Paket?

<p>Jedem Debian-Paket wurde von den Distributionsbetreuern eine
<em>Priorität</em> als Hilfsmittel für das Paketverwaltungssystem
zugeordnet. Die Prioritäten sind:

<list>
  <item><strong>Required</strong>: Pakete die für das korrekte Funktionieren
	der Systems benötigt werden.
    <p>Dieses schließt alle Werkzeuge mit ein, die notwendig sind, um
       Systemdefekte zu reparieren.
       Sie dürfen diese Pakete nicht entfernen, ansonsten kann es passieren, dass
       Ihr System zusammenbricht und Sie sogar außerstande sind, mittels dpkg
       Sachen zurückzuholen. Systeme, die nur die Required-Pakete haben, sind
       vermutlich unbrauchbar, aber sie bieten genug Funktionalität, um es dem
       Systemadministrator zu ermöglichen, mehr Programme zu installieren.</p>
  <item><strong>Important</strong>-Pakete sollten auf jedem
    Unix-ähnlichen System zu finden sein.
    <p>Andere Pakete ohne die das System unbrauchbar ist, finden Sie hier.
    Das beinhaltet <em>nicht</em> Emacs, X11, TeX oder eine andere
    große Anwendung. Dieses Pakete stellen lediglich die Basisinfrastruktur.</p>

<!-- JFS: Review for etch, since some development packages might be removed
     in the near future #301138 -->
  <item><strong>Standard</strong>-Pakete sind Standard auf jedem Linux-System,
    einschließlich eines recht kleinen aber nicht zu begrenzten Text-Modus-Systems.
    <p>Dies wird von uns installiert, wenn der Benutzer nichts anderes ausgewählt hat.
    Es beinhaltet keine großen Programme, aber einige Entwicklungsprogramme,
    wie der GNU C- und der C++-Compiler (<tt>gcc</tt>,
    <tt>g++</tt>) GNU make, genauso wie der Python-Interpreter und einige Server-Programme wie
    OpenSSH, der BSD-Drucker-Dienst (<tt>lpr</tt>)
    und der RPC-Portmapper (<tt>portmap</tt>).</p>
  <item><strong>Optional</strong>-Pakete beinhalten alles das, was Sie möglicherweise installieren
    wollen oder gerne würden, wenn Sie keine speziellen Anforderungen haben.
    <p>Dies trifft auf X11, eine komplette TeX-Distribution und viele andere Programme zu.</p>
  <item><strong>Extra</strong>-Pakete die in Konflikt mit höher priorisierten Paketen stehen,
    sind nur für jemanden interessant, der schon weiß was sie sind, oder
    für jemanden der spezielle Anforderungen hat, die es unverzichtbar für »Optional« machen.
</list></p>

<p>Wenn Sie eine Standard-Debian-Installation durchführen, werden alle
Pakete mit der Priorität <strong>Standard</strong> oder höher in Ihrem
System installiert. Wenn Sie vordefinierte Prozesse wählen, bekommen Sie
auch die Pakete mit einer geringeren Priorität.</p>

<p>Zusätzlich werden einige Pakete als <strong>Essential</strong> markiert. Da diese Pakete für
die Grundfunktionalität des Systems absolut notwendig sind, lehnen es die Paketverwaltungswerkzeuge
es ab, die zu entfernen.</P>

<sect id="virtual">Was ist ein virtuelles Paket?

<p>Ein virtuelles Paket ist ein generischer Name, der auf eine Gruppe von Paketen
zutrifft, die ähnliche grundlegende Funktionen bieten. Zum Beispiel sind <prgn>tin</prgn>
und <prgn>trn</prgn> beides Nachrichtenleser (News-Reader), folglich werden beide
Programme die Abhängigkeit erfüllen, die ein Programm hat, das einen Nachrichtenleser
braucht, um auf einem System richtig zu funktionieren.
Beide Pakete erfüllen die Abhängigkeit des virtuellen Paketes namens
<tt>news-reader</tt>.</p>

<p>Ebenso bieten <prgn>smail</prgn> und <prgn>sendmail</prgn> beide
die Funktionalität eines Mail-Transport-Agenten. Es wird also gesagt,
dass beide Programme das virtuelle Paket <tt>mail-transport-agent</tt>
anbieten. Wenn eines der Programme installiert ist, dann wird die Installation
jedes Paketes, das von einem <tt>mail-transport-agent</tt> abhängig ist, durch
die Existenz des virtuellen Paketes ermöglicht.</p>

<p>Debian bietet einen Mechanismus, der es ermöglicht, dass wenn mehr als
ein Paket mit dem selben virtuellen Paket installiert wird, der Systemadministrator
ein Paket als das bevorzugte Paket einstellen kann. Das relevante Kommando
ist <tt>update-alternatives</tt> und wird später in <ref id="diverse"> näher erklärt.</p>

<sect id="depends">Was ist damit gemeint, ein Paket <em>Depends</em>,
  <em>Recommends</em>, <em>Suggests</em>, <em>Conflicts</em>, <em>Replaces</em> oder
  <em>Provides</em> ein anderes Paket?

<p>Das Debian-Paketverwaltungssystem hat eine Reihe von »Paket-Abhängigkeiten«,
welche entworfen wurden, um anzuzeigen (in einer einzigen Markierung),
wie ein Programm <strong>A</strong> mit einem existierenden Programm <strong>B</strong>
auf einem gegeben System unabhängig zusammenarbeiten:
<list>
  <item>Paket <strong>A</strong> <em>depends (hängt ab)</em> von Paket <strong>B</strong>,
    wenn B unbedingt installiert sein muss damit A läuft.
    In manchen Fällen, hängt <strong>A</strong> nicht nur von <strong>B</strong> ab,
    aber von einer Version von <strong>B</strong>.
    In diesem Fall ist die Versionsabhängigkeit normalerweise die untere Grenze,
   so dass <strong>A</strong>s Abhängigkeit von jeder Version von <strong>B</strong>
   größer ist als die Abhängigkeit von einer speziellen Version.
  <item>Paket <strong>A</strong> <em>recommends (empfiehlt)</em> Paket <strong>B</strong>,
    wenn der Paketverwalter der Meinung ist, dass die meisten Benutzer
    <strong>A</strong> nicht ohne die Funktionalität von <strong>B</strong>
    haben wollen.
  <item>Paket <strong>A</strong> <em>suggests (schlägt)</em> Paket <strong>B</strong> vor,
    wenn <strong>B</strong> Dateien beinhaltet, die die Funktionalität
    von <strong>A</strong> verbessern (und manchmal auch erhöhen).
  <item>Paket <strong>A</strong> <em>conflicts (steht in Konflikt)</em> mit
    Paket <strong>B</strong> wenn <strong>A</strong> nicht funktioniert,
    solange <strong>B</strong> auf dem System installiert ist.
    Sehr oft sind Konflikte Fälle in denen <strong>A</strong> Dateien
    beinhaltet, die ein Verbesserung der aus <strong>B</strong> stammenden sind.
    »Konflikte« sind oft mit einem »Austausch« verbunden.
  <item>Paket <strong>A</strong> <em>replaces (ersetzt)</em> Paket <strong>B</strong>,
    wenn Dateien die von <strong>B</strong> installiert wurden von
    Dateien aus <strong>A</strong>, entfernt
    und (in manchen Fällen) überschrieben werden.
  <item>Paket <strong>A</strong> <em>provides (stellt zur Verfügung)</em> Paket <strong>B</strong>,
    wenn alle Dateien und Funktionalitäten von <strong>B</strong> mit
    <strong>A</strong> verbunden wurden.  Dieser Mechanismus ermöglicht
    es Benutzern mit einem Begrenzten Festplattenplatz nur den Teil
    <strong>B</strong> von Paket <strong>A</strong> speichern zu müssen.
</list></p>

<p>Detailliertere Informationen über die Nutzung jeder dieser Bezeichnungen
können Sie im Richtlinien-Handbuch finden.</p>

<sect id="pre-depends">Was bedeutet Pre-Depends (Vor-Abhängigkeit)?

<p>»Pre-Depends« ist eine spezielle Abhängigkeit. Im Fall der meisten Pakete,
entpackt <tt>dpkg</tt> die Archiv-Datei (z.B., seine <tt>.deb</tt> Datei)
unabhängig davon, ob die Dateien von denen es Abhängt auf dem System
existieren oder nicht. Stark vereinfacht bedeutet entpacken, das <tt>dpkg</tt>
die Dateien aus der Archiv-Datei auf Ihrem Dateisystem installiert und an
die entsprechende Stelle gepackt.
Wenn solche Pakete von der Existenz einiger anderer Pakete
<em>abhängen</em>, lehnt <tt>dpkg</tt> es ab die
Paketinstallation abzuschließen (durch die Ausführung seiner Konfiguration),
bevor die anderen Pakete installiert sind.</p>

<p>Für einige Pakete lehnt <tt>dpkg</tt> sogar das entpacken ab
bis bestimmte Abhängigkeiten erfüllt sind.
Solche Pakete werden »Vor-Abhängig« von anderen Paketen genannt.
Das Debian-Projekt bietet diesen Mechanismus um das sichere Upgraden
des Systems vom <tt>a.out</tt>- zum <tt>ELF</tt>-Format zu ermöglichen,
als die <em>Reihenfolge</em> in der die Pakete ausgepackt wurden kritisch
war. Es gibt andere große Upgrade-Situationen bei denen diese Methode
hilfreich ist z.B. die Pakete mit der »required«-Priorität und ihre LibC
abhängigkeit.</p>

<p>Genau wie zuvor können weiterführende Informationen dem Richtlinien-Handbuch
entnommen werden.

<sect id="pkgstatus">Was bedeutet <em>unknown</em>, <em>install</em>, <em>remove</em>
  <em>purge</em> und <em>hold</em> im Paket-Status?

<p>Diese »Wunsch«-Makierungsflaggen erklären was ein Benutzer mit einem Paket
tun wollte (wie entweder durch die Tätigkeit des Benutzers in der
»Select (wählen)«-Sektion von <tt>dselect</tt> oder auch durch die direkte
Anfrage des Benutzers mit <tt>dpkg</tt>).</p>

<p>Ihre Bedeutungen sind:
<list>
  <item>unknown  - der Benutzer hat nie mitgeteilt ob der das Paket wünscht
  <item>install  - der Benutzer wünscht das Paket installiert oder Upgedatet
  <item>remove   - der Benutzer wünscht das Paket entfernt, aber möchte jede Existierende
	  Konfigurationsdatei behalten.
  <item>purge    - der Benutzer wünscht das Paket entfernt, inklusive
    aller Konfigurations-Dateien.
  <item>hold     - der Benutzer wünscht keine Verarbeitung des Paketes, d.h. der Benutzer
	  möchte die Aktuelle Version des Paketes behaltend wie auch immer die ist.
  </list></p>

<sect id="puttingonhold">Wie stelle ich ein Paket auf »hold (halten)«?

<p>Es gibt drei Wege die es ermöglichen Pakete zurückzuhalten. Mit
<prgn>dpkg</prgn>, <prgn>aptitude</prgn> oder mit <prgn>dselect</prgn>.</p>

<p>Mit <prgn>dpkg</prgn> müssen Sie lediglich die Liste der
Paketwahl über:
<example>dpkg --get-selections \* > selections.txt</example> exportieren.
Dann Modifizieren Sie die Ergebnis-Datei <file>selections.txt</file>,
ändern Sie die Zeile die das Paket beinhaltet, welches Sie zurückhalten wollen,
z.B. <package>libc6</package>, von hier:
<example>libc6                                             install</example>
zu diesem:
<example>libc6                                             hold</example>.
Speichern Sie die Datei und laden Sie diese in die »dpkg«-Datenbank mit:
  <example>dpkg --set-selections < selections.txt</example> zurück.</p>

<p>Mit <prgn>aptitude</prgn> können Sie ein Paket über
  <example>aptitude hold Paket_Name</example>
  zurückhalten und über
  <example>aptitude unhold Paket_Name</example>
  können Sie das zurückhalten wieder abstellen.</p>

<p>Bei <prgn>dselect</prgn> müssen Sie [S]elect Bildschirm auswählen,
das gewünschte Paket raus-suchen und dann müssen Sie nur noch die
'=' (oder 'H') Taste drücken. Die Änderungen werden übernommen wenn Sie
den [S]elect Bildschirm verlassen.</p>

<sect id="sourcepkgs">Wie installiere ich ein Quelltext-Paket?

<p>Debian Quelltext-Pakete können momentan nicht »installiert« werden.
Sie können lediglich in jedes Verzeichnis entpackt werden in dem Sie
die Binär-Pakete Kompilieren möchten </p>

<p>Quelltext-Pakete werden meistens auf den selben Spiegeln angeboten, auf
denen auch die Binär-Pakete gefunden werden können. Wenn Sie Ihr APT
<manref name="sources.list" section="5"> um die benötigten »deb-src«-Zeilen
erweitern, sind Sie in der Lage jedes Quelltext-Paket einfach Herunterzuladen
mittels:

  <example>apt-get source foo</example></p>

<p>Um Ihnen beim Bauen der Quelltext-Pakete zu helfen, bieten die Debian
Quelltext-Pakete den sogenannten »build-dependencies (Bau-Abhängigkeiten)«-Mechanismus.
Das Bedeutet, das die Quelltext-Paket-Betreuer eine Liste von
anderen Paketen pflegen, die zum Bauen des Paketes benötigt werden.
Um zu sehen wozu dies nützlich ist, probieren Sie einmal

  <example>apt-get build-dep foo</example>

bevor Sie die Quelltexte kompilieren.</p>

<sect id="sourcebuild">Wie baue ich ein Binär-Paket aus einem Quelltext-Paket?

<p>Sie brauchen alle <file>foo_*.dsc</file>, <file>foo_*.tar.gz</file> und <file>foo_*.diff.gz</file>
um die Quelltexte zu kompilieren (beachten Sie Bitte, das einige Pakete keinen <file>*.diff.gz</file> besitzen weil Sie Nativ sind).</p>

<p>Sobald Sie sie haben (<ref id="sourcepkgs">), sofern Sie das
<package>dpkg-dev</package>-Paket installiert haben,
sollte das folgende Kommando:
  <example>dpkg-source -x foo_version-revision.dsc</example>
in ein Verzeichnis namens <tt>foo-version</tt> entpacken.</p>

<p>Wenn Sie das Paket nur kompilieren wollen, müssen Sie mit <prgn>cd</prgn> in das
<tt>foo-version</tt>s Verzeichnis und das Kommando
  <example>dpkg-buildpackage -rfakeroot -b</example>
zum bauen des Paketes ausführen (beachten Sie das dazu noch das
<package>fakeroot</package>-Paket benötigt wird).
Danach können Sie mit
  <example>dpkg -i ../foo_version-revision_arch.deb</example>
das neu gebaute Paket installieren.</p>

<sect id="creatingdebs">Wie kann ich selbst Debian-Pakete erstellen?

<p>Für eine detailliertere Beschreibung zu diesem Thema lesen Sie bitte den
Neue-Entwickler-Guide, zu finden im <package>maint-guide</package>-Paket oder auf
<url id="http://www.debian.org/doc/devel-manuals#maint-guide">.</p>
