[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ weiter ]
In der Welt der freien Software ist es üblich, den Quellcode zu studieren oder auch Korrekturen an fehlerhaftem Code vorzunehmen. Um dieses zu tun, muß der Quellcode des Programms heruntergeladen werden. Das APT-System bietet eine einfache Möglichkeit, den Quellcode der vielen Programme der Distribution einschließlich aller für das Erstellen eines .deb des Programms nötigen Dateien zu beziehen.
Eine andere übliche Anwendung für Debian-Quellen ist es eine aktuellere Version eines Programms aus der Distribution "unstable" zum Beispiel in "stable" zu benutzen. Das Paket "gegen" "stable" zu kompilieren erzeugt ein Paket mit Abhängigkeiten, die auf die Pakete aus "stable" ausgerichtet sind.
Hierfür sollte der deb-src-Eintrag in Ihrer /etc/apt/sources.list auf "unstable" zeigen. Es sollte außerdem aktiviert sein, d.h. eventuelle Kommentarzeichen vor der Zeile müssen entfernt werden (Siehe Abschnitt Die Datei /etc/apt/sources.list, Abschnitt 4.1).
Aptitude, the Debian Package Manager is mainly targeted at binary packages. To
use source packages we'll need to use apt-get
instead. To
download a source package, you would use the following command:
$ apt-get source Paketname
Drei Dateien werden daraufhin heruntergeladen: ein .orig.tar.gz, ein .dsc und ein .diff.gz. Im Falle von Paketen, die speziell für Debian erzeugt wurden, fällt das letzte weg und das erste hat kein "orig" im Namen.
The .dsc file is used by dpkg-source for unpacking the source package into the directory packagename-version. Within each downloaded source package there is a debian/ directory that contains the files needed for creating the .deb package.
Um das Paket beim Herunterladen automatisch zu erzeugen, fügen Sie einfach -b zur Kommandozeile hinzu:
$ apt-get -b source Paketname
Wenn Sie sich dazu entscheiden, das Paket noch nicht beim Herunterladen zu erzeugen, können Sie dieses später nachholen mittels
$ dpkg-buildpackage -rfakeroot -uc -b
Notice that to build most packages you'll need at least the following packages:
devscripts
, dpkg-dev
, debhelper
,
fakeroot
, take a look at Installieren von Paketen, Abschnitt 5.4
and install them before proceeding. Most packages will also depend on
compilation tools, so it may be useful to install the
build-essential
package as well. Other packages may be needed,
take a look at Für das Kompilieren eines Quellpaketes
nötige Pakete, Abschnitt 6.2 for more information.
To install the package built by the commands above one must use the package
manager directly. Take a look at Installing manually downloaded or
locally created debian packages, Abschnitt 5.5. A useful tool is provided
by the devscripts
package: debi
. If you run
debi
from inside the source package directory it will look for the
.changes file at the parent directory to discover what are the
binary packages the package produces and will run dpkg
to install
all of them. While this is not very useful if your source package produces
conflicting packages, it might be in most circunstances. Of course you need
root powers in order to perform this.
Es besteht ein Unterschied zwischen der Methode "apt-get
source" und den anderen Methoden von apt-get
.
Die source- Methode kann von normalen Benutzern ohne Root-Rechten
benutzt werden. Die Dateien werden in das Verzeichnis heruntergeladen, aus dem
das apt-get source Paket aufgerufen wurde.
Normalerweise müssen sich spezielle Bibliotheken auf dem System befinden, um ein Quellpaket zu kompilieren. Alle Quellpakete haben ein Feld mit Namen "Build-Depends" in ihrer Kontrolldatei, welches die Namen der zusätzlichen Pakete enthält, die für das Erzeugen des Paketes aus dem Quellcode nötig sind.
APT bietet eine einfache Möglichkeit diese Pakete herunterzuladen. Führen Sie einfach apt-get build-dep Paket aus, wobei `Paket' für den Namen des Pakets, welches Sie erzeugen wollen steht. Beispiel:
# apt-get build-dep gmc Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev libgpmg1-dev 0 packages upgraded, 7 newly installed, 0 to remove and 1 not upgraded. Need to get 1069kB of archives. After unpacking 3514kB will be used. Do you want to continue? [Y/n]
Die Pakete, die hier installiert werden, werden gebraucht, um gmc
korrekt zu erzeugen. Beachten Sie jedoch, daß dieses Kommando sich nicht um
das Quellpaket selbst kümmert, welches Sie bauen möchten. Sie müssen hierfür
zusätzlich apt-get source ausführen.
Falls Sie nur feststellen möchten, welche Pakete zum Bau eines bestimmten Paketes benötigt werden, ist eine Variante des Kommandos apt-cache show (Siehe Getting information about packages., Kapitel 7 hilfreich, die neben anderer Information die Zeile Build-Depends aufführt, die ihrerseits die erforderlichen Pakete auflistet.
# apt-cache showscrc Paket
If you want to build a package for debuging purposes to, for example, report a bug -- or fix one, you can use simple environment variables that are supported by most Debian packages.
To build a package which contains unstriped binaries[6] all you need to do is prefix it with DEB_BUILD_OPTIONS=nostrip. Optimizations can also make debuging harder, so you can disable them by adding the noopt string to the DEB_BUILD_OPTIONS variable too. Example:
$ dpkg-buildpackage -rfakeroot -uc -b
If what you want is to customize the way the package is built you'll have to go
about editing the debian/rules
file. This means: inside the main
directory created when the source package is extracted there will be a
debian directory, which contains many files. One of them is
special: the rules
file.
This file is usually a Makefile that has targets to configure, build, install
and create the package. For example, if I want to have the
luola
[7] built
without sound I can, after downloading and extracting its source edit the
debian/rules
file that looks like this:
[...] configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. ./configure $(confflags) \ --prefix=/usr \ --mandir=share/man \ --infodir=share/info \ --datadir=share/games \ --bindir=games \ --enable-sound # --enable-sdl-gfx touch configure-stamp [...]
See the --enable-sound switch? If I remove it or replace it with --disable-sound and then rebuild the package using the technique described on Downloading source packages, Abschnitt 6.1 I'll have a luola package that is built with no sound.
If you really want to work with source packages on a daily basis I would
suggest reading the Debian New Maintainers
Guide
and the Debian Policy
,
mainly. Other documentation available from the Debian Developers Corner
may be
useful too.
Sometimes, people want to use a specific version of a program available only on source code, with no Debian package. But the packaging system can be a trouble when doing this. Suppose you want to compile a new version of your email server. All is fine, but many packages in Debian depend on an MTA (Mail Transfer Agent). Since you installed something you compiled by yourself, the packaging system doesn't know about it.
Hier kommt das equivs
ins Spiel. Um es zu benutzen, installieren
Sie das Paket mit diesem Namen. Es erstellt ein leeres Paket, das die
Abhängigkeiten erfüllt und dem Paketsystem mitteilt, so daß es keine Probleme
mit Abhängigkeiten gibt.
Bevor wir näher darauf eingehen, ist es wichtig, Sie darauf hinzuweisen, daß es sicherere Möglichkeiten gibt, Programme, für die in Debian schon Pakete existieren, mit anderen Optionen zu kompilieren und man equivs nicht benutzen sollte, um Abhängigkeiten zu entfernen, ohne genau zu wissen, was man tut. Siehe Building from source, Kapitel 6 für nähere Informationen.
Lassen Sie uns mit dem MTA-Beispiel fortfahren. Sie haben also gerade Ihren
frisch kompilierten postfix
installiert und wollen nun
mutt
(ein Mailprogramm) installieren. Plötzlich stellen Sie fest,
daß mutt
einen anderen MTA installieren möchte, obwohl Sie schon
Ihren selbstkompilierten laufen haben.
Wechseln Sie in irgendein Verzeichnis (z.B. /tmp
), und führen Sie
folgendes aus:
# equivs-control name
Ersetzen Sie name durch den Namen der Kontrolldatei, die Sie erstellen wollen. Die Datei wird wie folgt erstellt:
Section: misc Priority: optional Standards-Version: 3.0.1 Package: <Paketname; wenn nicht angegeben: equivs-dummy> Version: <Versionsnummer; wenn nicht angegeben: 1.0> Maintainer: <Ihr Name mit E-Mail-Adresse; wenn nicht angegeben: Benutzername > Pre-Depends: <Pakete> Depends: <Pakete> Recommends: <Pakete> Suggests: <Pakete> Provides: <(virtuelles) Paket> Architecture: all Copyright: <copyright Datei; normalerweise GPL2> Changelog: <changelog file; normalerweise ein generisches Changelog> Readme: <README.Debian file; wenn nicht angegeben, ebenfalls ein generisches> Extra-Files: <Zusätzliche Dateien für das doc-Verzeichnis, kommasepariert> Description: <kurze Beschreibung; Standard ist "some wise words"> Lange Beschreibung und Info . Zweiter Paragraph
Nun muß das so angepaßt werden, daß es tut, was wir wollen. Gucken Sie sich die Felder und ihre Beschreibungen an, es ist nicht nötig, jedes einzelne hier zu erklären, lassen Sie uns das Nötigste tun:
Section: misc Priority: optional Standards-Version: 3.0.1 Package: mta-local Provides: mail-transport-agent
Das war es schon. mutt
hängt von
mail-transport-agent
ab, was ein virtuelles Paket ist, was alle
MTAs liefern. Ich hätte das Paket einfach mail-transport-agent
nennen können, aber ich bevorzugte das Schema für virtuelle Pakete, welches das
Feld "Provides" benutzt.
The Conflicts and Replaces fields are needed, too, so
that APT
and dpkg
will understand they should remove
the currently installed MTA package in favour of the new one you're installing.
Now you only need to build the package:
# equivs-build name dh_testdir touch build-stamp dh_testdir dh_testroot dh_clean -k # Add here commands to install the package into debian/tmp. touch install-stamp dh_testdir dh_testroot dh_installdocs dh_installchangelogs dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package `name' in `../name_1.0_all.deb'. The package has been created. Attention, the package has been created in the current directory,
Und installieren Sie das erzeugte .deb.
Wie man unschwer erkennen kann, gibt es verschiedene Anwendungen für
equivs
. Man könnte sogar ein Favoriten-Paket
erstellen, was von den Paketen abhängt, die Sie normalerweise installieren.
Lassen Sie Ihren Vorstellungen einfach freien Lauf, aber seien Sie vorsichtig.
Es ist wichtig zu erwähnen, daß es in
/usr/share/doc/equivs/examples
einige Beispiel-Kontrolldateien
gibt. Werfen Sie mal einen Blick darauf.
[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ weiter ]
APT HOWTO
2.0.2 - October 2006kov@debian.org
netzwurm@debian.org