checkinstall

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

  3. Root-Rechte erlangen

  4. Ein einzelnes Paket installieren

Inhaltsverzeichnis
  1. Einschränkungen
  2. Installation
  3. Verwendung
  4. Problembehebung
  5. Links

Wiki/Icons/terminal.png Ein klassisches Problem bei Kompilierung eines Programms aus dem Quellcode ist, dass man (als Nicht-Entwickler) häufig nicht nachvollziehen kann, welche Dateien bei der Installation wohin kopiert werden. Das macht eine Deinstallation so gut wie unmöglich.

Checkinstall 🇬🇧 ist ein Kommandozeilenwerkzeug, um aus dem Quelltext ein Debian-Paket (.deb) zu erstellen, das anschließend automatisch installiert werden kann. Dadurch können selbstkompilierte Programme mit einer beliebigen Paketverwaltung wieder rückstandsfrei entfernt werden. Des Weiteren können diese Pakete verwendet werden, um eine lokale Paketquelle einzurichten.

Eine andere Methode der Kompilierung mit der Möglichkeit einer einfachen Deinstallation, aber ohne die Erstellung eines DEB-Pakets, ist die Nutzung von paco bzw. dessen Nachfolger porg.

Einschränkungen

Installation

Das Programm ist Bestandteil der offiziellen Paketquellen. Folgendes Paket muss installiert werden [1]:

Paketliste zum Kopieren:

sudo apt-get install checkinstall 

Oder mit apturl die Pakete installieren. Link: apt://checkinstall

Verwendung

Ein einfaches Beispiele, die die Verwendung von checkinstall demonstriert [2][3]:

tar xvf foo-1.0.tar.gz
cd foo-1.0
./configure
make
sudo checkinstall 

Der einzige Unterschied zum sonst üblichen Dreisatz aus configure, make und sudo make install ist in der letzten Zeile zu finden: statt einer direkten Installation erstellt checkinstall zuerst ein Debian-Paket, das anschließend sofort installiert wird (ein Beispieldurchlauf befindet sich am Ende des Artikels).

Bevor ein Debian-Paket erstellt wird, fragt checkinstall zunächst einige wichtige Paketmetainformationen ab:

checkinstall wird nach dem Durchlauf ausgeben, ob die Installation erfolgreich war und wo das neu erstelle Paket abgelegt wurde. Eine spätere Deinstallation erfolgt dann mittels einer beliebigen Paketverwaltung.

Möchte man auf eine automatische Installation des neu erstellten Pakets verzichten, lässt man das sudo einfach weg. Zwangsläufig wird checkinstall einen Fehler ausgeben, weil ein Paket ohne Root-Rechte nicht installiert werden kann. Das Paket wird aber trotzdem im Quelltextverzeichnis erstellt und kann anschließend manuell installiert werden [4].

Alternativ hilft auch der folgende Aufruf:

checkinstall --install=no 

Neben diesem einfachen Beispiel besitzt das Programm eine Reihe weiterer Optionen, die der Manpage zu entnehmen sind. checkinstall verwendet die Datei /etc/checkinstallrc für systemweite Einstellungen.

Problembehebung

checkinstall bricht Installation ab

Bricht checkinstall die Installation mit obskuren Fehlern ab, dann liegt das meist daran, dass es neue Dateien nicht anlegen kann. Das Problem liegt dann im "file translation code" von installwatch (einem Unterprogramm von checkinstall), das hierfür ein Art virtuelles Dateisystem bereitstellt, damit das Eigentliche nicht angerührt wird. Die Installationsroutine kann manchmal neu erstellte Dateien nicht finden und bricht deswegen ab. Dies kann dann beispielsweise so aussehen:

install: cannot change permissions of `/usr/local/etc/mplayer': No such file or directory
make: *** [install-dirs] Fehler 1

Lösung: Mit der Option --fstrans=no beim Aufruf von checkinstall wird diese Funktion deaktiviert. Oft ist eine Installation auch erfolgreich, wenn zunächst make install ausgeführt wird, und danach ein checkinstall erfolgt.

Hinweis:

Problematisch ist in diesem Zusammenhang, dass mit Root-Rechten erstellte Dateien im eigenen Homeverzeichnis nicht vom eigentlichen Benutzer gelöscht werden können. Zum Löschen der mit sudo... selbst erstellten Pakete sind grundsätzlich Root-Rechte erforderlich.

Erstellen von Paketname.deb schlägt fehl (Erstelle Debian-Paket... FAILED!)

Tritt beim Erstellen des Debian-Pakets obiger Fehler auf, so liegt dies wahrscheinlich daran, dass beim Aufruf von checkinstall und der damit einhergehenden Erstellung der Datei ./doc-pak eine ungültige Versionsnummer angegeben wurde.

dpkg-deb: Fehler: Parsen der Datei »/var/tmp/tmp.y9z26Ip5DO/package/DEBIAN/control«, nahe Zeile 7 Paket »mplayer«:
 Fehler in Versionszeichenkette »vaapi-1«: Versionsnummer beginnt nicht mit einer Ziffer
/var/tmp/tmp.y9z26Ip5DO/dpkgbuild.log (END)

Ein praktisches Beispiel:

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
  Diese Software wurde unter der GNU GPL veröffentlicht



*****************************************
**** Debian package creation selected ***
*****************************************

Das Paket wird entsprechend dieser Vorgaben erstellt:

0 -  Maintainer: [ root@Ideapad-S205 ]
1 -  Summary: [ mplayer VAAPI support ]
2 -  Name:    [ mplayer ]
3 -  Version: [ vaapi ]            Versionsnummer beginnt NICHT mit einer Zahl!
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ mplayer-vaapi ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ mplayer ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Geben Sie die betreffende Nummer ein, um die Vorgaben zu ändern: 

Installing with make install...

====================== Installations-Ergebnisse ==========================
install -d /usr/local/bin /usr/local/etc/mplayer /usr/local/lib
install -m 755 -s mencoder /usr/local/bin
install -d /usr/local/share/man/man1
install -m 644 DOCS/man/en/mplayer.1 /usr/local/share/man/man1/
cd /usr/local/share/man/man1 && ln -sf mplayer.1 mencoder.1
install -m 755 -s mplayer /usr/local/bin

====================== Installation erfolgreich ==========================

Copying documentation directory...
./
./AUTHORS
./Changelog
./README
./LICENSE

Kopiere Dateien in das temporäre Verzeichnis...OK

Stripping ELF binaries and libraries...OK

Komprimiere man-Seiten...OK

Erzeuge Datei-Liste...OK

Erstelle Debian-Paket... FAILED!   Hier das Resultat: .deb kann nicht erstellt werden

*** Paket-Erstellung fehlgeschlagen

Möchten Sie die log-Datei sehen?  [y]: y

Lösche temporäre Dateien...OK

Schreibe Sicherungs-Paket...OK
OK

Lösche temporäres Verzeichnis...OK

Lösung: Beim Aufruf von checkinstall und der Abfrage:

"Geben Sie die betreffende Nummer ein, um die Vorgaben zu ändern:"

die 3 wählen und eine Versionsnummer eingeben (am besten die Richtige), die mit einer Zahl beginnt. Dann sollte checkinstall problemlos durchlaufen.

Alternativ checkinstall direkt die Versionsnummer beim Aufruf übergeben:

sudo checkinstall --pkgversion VERSIONSNUMMER