// Datei: ./praxis/pakete-bauen-mit-checkinstall/software-selbst-uebersetzen-und-als-deb-paket-einspielen.adoc

// Baustelle: Rohtext

[[checkinstall-software-selbst-uebersetzen-und-als-deb-paket-einspielen]]
=== Software selbst übersetzen und als `deb`-Paket einspielen ===

// Stichworte für den Index
(((checkinstall)))
(((Debianpaket, checkinstall)))
(((Debianpaket, dh-make-perl)))
An dieser Stelle kommt das Projekt `checkinstall` <<checkinstall>> ins
Spiel. Es steht unter der GPLv2 und ist über das gleichnamige Paket aus
den Repositories bis Debian 9 Stretch verfügbar
<<Debian-Paket-checkinstall>>. In Debian 10 _Buster_ ist es nicht
enthalten, da es zum Zeitpunkt des Einfrierens der Veröffentlichung
nicht die erwartete Paketqualität aufwies. Man kann es aber nach Aktivieren von
Backports für Debian 10 _Buster_ in einer Version nahezu identisch zu
der aus Debian 11 _Bullseye_ nachinstallieren.

// Hinweis auf dh-make-perl
[NOTE]
.Hinweis auf 'dh-make-perl'
========================================================
Handelt es sich bei der einzuspielenden Software um Perl-Module, hilft
Ihnen auch das spezialisierte Paket 'dh-make-perl' weiter
<<Debian-Paket-dh-make-perl>>. Wie Sie das Werkzeug verwenden, erläutert
Steve Kemp in seinem lesenswerten Blogeintrag ``Building Debian packages
of Perl modules'' <<Kemp-dh-make-perl>>.
========================================================

`checkinstall` hat sich zum Ziel gesetzt, das Übersetzen von Paketen aus
dem Quellcode und das direkte Erstellen von Binärpaketen miteinander zu
kombinieren. Diese ``frischen'' Binärpakete passen dann exklusiv zu
Ihrer bestehenden Installation. Es kann neben `deb`-Paketen auch `rpm`-
und `tgz`-Dateien für Slackware erstellen. Die einzelnen Schalter
entnehmen Sie bitte <<tab.paketformat-checkinstall>>. Benennen Sie
keinen Schalter, erzeugt `checkinstall` automatisch ein `deb`-Paket.

// Stichworte für den Index
(((checkinstall, -D)))
(((checkinstall, -R)))
(((checkinstall, -S)))
(((checkinstall, -t)))
(((checkinstall, --type=debian)))
(((checkinstall, --type=rpm)))
(((checkinstall, --type=slackware)))

.Schalter für die verschiedenen unterstützten Paketformate
[frame="topbot",options="header",cols="4,4",id="tab.paketformat-checkinstall"]
|====
| Paketformat | Schalter
| Debian-Paket (`deb`)    | `-D`
|                         | `-t debian`
|                         | `--type=debian`
| RPM-Paket (`rpm`)       | `-R` 
|                         | `-t rpm`
|                         | `--type=rpm`
| Slackware-Paket (`tgz`) | `-S`
|                         | `-t slackware`
|                         | `--type=slackware`
|====

Vereinfacht gesagt, erstellt `checkinstall` ein Paket direkt aus dem
Quellcode und übergeht den Paketmanager dabei aber nicht. Es beobachtet
den Erstellprozess und bindet alle Dateien in das neue Paket ein, die
bei der Übersetzung entstehen und benötigt werden. Daher gibt es auch
dafür die schöne Umschreibung ``Installations-Verfolger''.

Dazu bezieht `checkinstall` zunächst die benötigten Quellen zum Paket.
Als Quelle kommen alle Softwarearchive in Frage, so z.B. neben den
regulären Debian-Paketquellen auch von den Plattformen SourceForge
<<SourceForge>>, Freecode (vormals Freshmeat) <<FreeCode>> und GitHub
<<GitHub>>. Gleiches gilt für das direkte Auschecken aus dem
Versionskontrollsystem des Projektes.

// Stichworte für den Index
(((checkinstall)))
(((checkinstall, --install=yes)))
(((Paketflags, hold)))
Zum Aufruf genügt das nachfolgende Kommando im Verzeichnis mit dem
Quellcode. Es entspricht dem bereits oben genannten Aufruf von
`./configure`, `make` und `make install` und ist gleichzeitig die
Kurzform für den Aufruf `checkinstall --install=yes`.

----
# checkinstall
----

Aus dem zunächst bezogenen `tar.gz`-Archiv baut `checkinstall` ein zu
ihrer Installation passendes `deb`-Paket und installiert dieses über die
Paketverwaltung. Dabei erhält das Paket die Markierung 'hold' (siehe
dazu <<lokale-paketmarkierungen>>).

Möchten Sie ein bestimmtes Skript zur Installation ausführen, geben Sie
dieses beim Aufruf von `checkinstall` als zusätzlichen Parameter an.
Nachfolgend heißt das Skript schlicht `installationsskript.sh`, kann
aber von Ihnen beliebig benannt werden.

----
# checkinstall installationsskript.sh
----

// Stichworte für den Index
(((checkinstall)))
(((checkinstall, --install=no)))
Wünschen Sie hingegen keine automatische Installation, rufen Sie
`checkinstall` mit dem Parameter `--install=no` auf. Das entspricht den
beiden Aufrufen `./configure` und `make`. 

----
# checkinstall --install=no
----

// Stichworte für den Index
(((checkinstall, Debian-spezifische Schalter)))
(((checkinstall, --help)))
(((Paketbeschreibung, Schlüsselworte für Binärpakete)))
Weitere Debian-spezifische Schalter entnehmen Sie bitte
<<tab.debian-schalter-checkinstall>>. Diese Schalter korrespondieren
direkt mit den dazugehörigen Feldern in einem Debian-Binärpaket (siehe
<<konzepte-und-ideen-dahinter>>). Schalter zur Darstellung und Ausgabe
entnehmen Sie bitte der Manpage zum Programm oder über den Aufruf von:

----
checkinstall --help
----

.Spezifische Schalter für ein Debian-Binärpaket
[frame="topbot",options="header",cols="3,5",id="tab.debian-schalter-checkinstall"]
|====
| Schalter | Bedeutung
| `--pkgname=`'name'            | Name des Pakets
| `--pkgversion=`'version'      | Versionsnummer des Pakets
| `-A` 'Architektur'            | Architektur des Pakets
| `--arch` 'Architektur'        | Architektur des Pakets
| `--pkgarch=`'Architektur'     | Architektur des Pakets
| `--pkgrelease=`'Release'      | Angabe der Veröffentlichung
| `--pkglicense=`'Lizenz'       | Angabe der Lizenz zum Paket
| `--pkggroup=`'Gruppe'         | Benennung der Paketkategorie
| `--pkgsource=`'Quelle'        | Angabe der Quelle zum Paket
| `--pkgaltsource=`'Quelle'     | alternative Angabe der Quelle zum Paket
| `--pakdir=`'Verzeichnis'      | Zielverzeichnis, in dem das Paket gespeichert wird
| `--maintainer=`'Emailadresse' | Emailadresse des Paketmaintainers
| `--provides=`'Liste'          | Name der Pakete, die es bereitstellt
| `--requires=`'Liste'          | Name der Pakete, die das Paket benötigt
| `--conflicts=`'Liste'         | andere Pakete, mit denen das Paket in Konflikt steht
| `--replaces=`'Liste'          | andere Pakete, die dieses Paket ersetzt
| `--dpkgflags=`'Flags'         | Flags, die an `dpkg` zur Installation mitgegeben werden
| `--nodoc`                     | keine Dokumentation in das Paket einfügen
|====


// Datei (Ende): ./praxis/pakete-bauen-mit-checkinstall/software-selbst-uebersetzen-und-als-deb-paket-einspielen.adoc
