23.2. Fremdformate mit alien hinzufügen

23.2.1. Einführung

Den Begriff alien übersetzen Sie am ehesten mit fremd, Fremdling oder Ausländer. alien heißt jedoch auch das gleichnamige Debianpaket [Debian-Paket-alien]. Es hilft Ihnen, eine Software, welche nicht als deb-Paket vorliegt, entsprechend umzuwandeln und für Ihre Debian-Installation vorzubereiten.

Wie bereits in „Gestaltwandler. Programmpakete richtig konvertieren“ [Hofmann-Osterried-Alien-LinuxUser] beschrieben, sollten bei der Umwandlung des Pakets nach Möglichkeit die folgenden Bestandteile erhalten bleiben:

die Paketbeschreibungen
damit erkennen Sie später über die Paketverwaltung, um was für eine Software es sich handelt, wer der Autor ist oder wo sich die dazugehörige Homepage des Projekts befindet.
die Informationsdateien
diese beschreiben, wie Sie das Paket wieder entfernen oder aktualisieren. Häufig befinden sich auch Hinweise dabei, die benennen, was dabei gegebenenfalls zu beachten ist.
Paketabhängigkeiten
die Informationen über Abhängigkeiten zu anderer Software.
Architektur oder Plattform
die Angabe der Prozessorarchitektur im Dateinamen, wie etwa amd64 bei deb-Paketen und x86_64 bei rpm-Archiven.

Diese Bestandteile benötigt die Paketverwaltung von Debian GNU/Linux, um die umgewandelten Softwarepakete korrekt in den Paketbestand einordnen zu können. Ohne die Informationen besteht bspw. keine Möglichkeit, die Abhängigkeiten zu anderen Softwarepaketen zu prüfen und sicherzustellen, dass alle benötigten Komponenten verfügbar sind und ggf. installiert werden können.

23.2.2. Pakete umwandeln

Voraussetzungen

Damit Ihnen das Umwandeln von bestehenden Paketen in das deb-Format gelingt, müssen ein paar Voraussetzungen erfüllt sein. Für alien benötigen Sie:

Die beiden Pakete perl und dpkg gehören zu den essentiellen Paketen und sind somit stets bereits auf ihrer Debian-Installation vorhanden. Die anderen genannten Pakete gehören nicht dazu und könnten somit noch fehlen. Falls letzteres zutrifft, installieren Sie diese über die Paketverwaltung nach (siehe „Pakete installieren“ in Abschnitt 8.38, „Pakete installieren“).

Durchführung

Die Umwandlung eines rpm-Pakets in ein deb-Paket erfolgt mit Hilfe des Werkzeugs alien, der Angabe des gewünschten Paketformats sowie über die originale Paketdatei. Das Paketformat geben Sie über den Schalter -d (Langform --to-deb) an. Nachfolgend demonstrieren wir Ihnen das anhand des Pakets mc für den Midnight Commander [mc]:

Umwandlung eines rpm-Pakets in ein deb-Paket. 

# alien -d mc-4.8.22-1.mga7.x86_64.rpm
mc_4.8.22-2_amd64.deb generated
#

Der Schalter -d ist der von alien angenommene Standardfall und diesen können Sie somit im Aufruf weglassen. Darüberhinaus unterstützt alien noch die folgenden, weiteren Schalter zur Umwandlung zwischen anderen Formaten:

-r (Langform --to-rpm)
Umwandlung in ein rpm-Paket
-t (Langform --to-tgz)
Umwandlung in ein mit gzip komprimiertes tar-Archiv (Erweiterung .tar.gz), bspw. von der Linux-Distribution Slackware genutzt
--to-slp
Umwandlung nach Paketen für Stampede Linux [stampedeLinux] (Erweiterung .slp). Zu diesem Schalter besteht keine Kurzform.
-p (Langform --to-pkg)
Umwandlung zu (Open)Solaris-Paketen mit der Erweiterung .pkg (siehe [Solaris] und [OpenSolaris]).

Am Ende überprüfen Sie das Paket, um sicherzugehen, dass es auch tatsächlich zu ihrer bestehenden Installation passt. Dabei hilft Ihnen der Schalter -c (Langform --contents) von dpkg, um zu erkennen, an welche Stellen in ihrer Installation die einzelnen Komponenten des neuen Pakets installiert werden.

Wohin wird der Paketinhalt installiert. 

# dpkg --contents mc_4.8.22-2_amd64.deb
drwxr-xr-x root/root         0 2019-11-16 12:11 ./
drwxr-xr-x root/root         0 2019-11-16 12:11 ./etc/
drwxr-xr-x root/root         0 2019-11-16 12:11 ./etc/profile.d/
-rw-r--r-- root/root       153 2019-01-01 18:36 ./etc/profile.d/20mc.sh
-rw-r--r-- root/root        49 2019-01-01 18:36 ./etc/profile.d/20mc.csh
drwxr-xr-x root/root         0 2019-11-16 12:11 ./etc/mc/
-rw-r--r-- root/root     21874 2019-01-01 18:35 ./etc/mc/mc.ext
-rwxr-xr-x root/root       791 2018-12-28 20:35 ./etc/mc/edit.indent.rc
...
#

Mit einer Kombination aus den beiden Kommandos dpkg --info Paketname und grep Depends sehen Sie, welche Paketabhängigkeiten für das umgewandelte Paket bestehen und erfüllt sein müssen, damit dieses korrekt in ihr System eingespielt werden kann.

Abhängigkeiten von einem umgewandelten Paket. 

# dpkg --info mc_4.8.22-2_amd64.deb | grep Depends
 Depends: libc6 (>= 2.15), libglib2.0-0 (>= 2.35.9), libgpm2 (>= 1.20.4), libslang2 (>= 2.2.4), libssh2-1 (>= 1.2.8)
#

Aus der obigen Ausgabe ersehen Sie, dass das Paket mc von den fünf Bibliotheken Libc, Glib2, Gpm2, Slang2 und Ssh2 abhängt.

Fallstricke und Besonderheiten bei der Umwandlung

Bei der Umwandlung des Paketformats bestehen mehrere Fallstricke. Diese führen regelmäßig dazu, dass die umgewandelte Software nicht wie erhofft funktioniert:

  • die referenzierten Bibliotheken passen entweder gar nicht, nicht mehr (sind bspw. veraltet) oder sind nicht auffindbar. Bei letzterem sind diese bspw. nicht installiert oder haben schlicht und einfach einen anderen Paketnamen.
  • die angegebenen Pfade im Originalpaket stimmen nicht mit Ihrer lokalen Verzeichnisstruktur oder der von Debian GNU/Linux genutzten Struktur überein. Hier helfen ggf. symbolische Links weiter, die dann auf das richtige Ziel verweisen.
  • der Binärcode passt nicht zu Ihrer genutzten Plattform und Architektur. Prüfen Sie, ob es das Softwarepaket auch für ihre Plattform bzw. Architektur gibt.
  • das Format der Konfiguration sorgt für Ärger, bspw. die verfügbaren Optionen und Schalter
  • es bestehen Konflikte mit anderer, bereits installierter Software

Desweiteren haben deb-basierte Systeme zudem ihre Eigenheiten. Die folgenden Schalter von alien helfen Ihnen dabei, auch mit weiteren Sonderfällen bei der Umwandlung von Paketen klarzukommen:

--bump=Wert
ähnlich zu --version. Erhöhe die Versionsnummer des neuen Softwarepakets nicht um 1, sondern um den von ihnen im Aufruf angegebenen Wert.
--description=Beschreibung
Füge dem neuen Paket die genannte Beschreibung hinzu. Das ist insbesondere bei tar.gz-Dateien sinnvoll, da diese normalerweise noch keine Paketbeschreibung beinhalten.
--fixperms
bringe alle Angaben zu den Berechtigungen und den Eigentümern in Ordnung
--patch=Dateiname, --anypatch und --nopatch
automatisches Anpassen von Startup-Skripten und Pfaden gemäß dem File Hierarchy Standard (FHS)
--target=Architektur
setze die Plattform für das Paket auf den angegebenen Wert. Siehe Abschnitt 1.2, „Debian-Architekturen“ zu weiteren Angaben zur Plattform bzw. Architektur eines Paketes
--version=Versionsnummer
Füge dem neuen Paket die angegebene Versionsnummer hinzu. Das ist insbesondere bei tar.gz-Dateien sinnvoll, da diese normalerweise noch keine Versionsnummer beinhalten.
--veryverbose
noch ausführlicher als -v bzw. --verbose
-c (Langform --scripts)
erhalte die bestehenden Pre- und Post-Install- sowie Remove-Skripte eines Paketes
-g (Langform --generate) und --veryverbose
erweitern der Fehlersuche
-g (Langform --generate)
das Paket vor der Umwandlung noch bearbeiten. Der Schalter erzeugt ein Verzeichnis mit dem Paketinhalt und ermöglicht Ihnen damit die Ergänzung und Korrektur des Paketinhalts, bevor daraus ein neues Paket gebaut wird.
-k (Langform --keep-version)
die Versionsnummer des Paketes beibehalten. Normalerweise zählt alien diese bei der Umwandlung um eins hoch
-s (Langform --single)
wie -g, aber ohne das Verzeichnis packagename.orig zu erstellen. Der Schalter ist nützlich, wenn Sie ein Debianpaket erstellen möchten und zu wenig Speicherplatz zur Verfügung haben.
-T (Langform --test)
teste das erzeugte Debianpaket mit lintian [Debian-Paket-lintian] (siehe „Qualitätskontrolle“ in Kapitel 37, Qualitätskontrolle).
-v (Langform --verbose)
aktiviere die ausführliche Ausgabe. alien gibt damit Informationen zu jedem einzelnen Schritt bei der Umwandlung eines Paketes an
-V (Langform --version)
Ausgabe der Version von alien

23.2.3. Umgewandelte Pakete einspielen

Haben Sie das Paket erfolgreich in das deb-Format umgewandelt, spielen Sie dieses mittels dpkg -i paketname.deb ein. APT und aptitude bekommen von der Aktion erstmal nichts mit, stören sich aber nicht daran, dass das Paket eingespielt ist. Bei aptitude finden Sie das Paket später in der Kategorie "Veraltete und selbst erstellte Pakete".

Bei diesem Schritt können mehrere Ergebnisse eintreten — alles geht glatt und die eingespielte Software funktioniert, alles geht glatt und Software funktioniert nicht, oder das Einspielen geht komplett schief. Da bleibt nur manuelle Nacharbeitung. Ursache dafür sind in der Regel Abhängigkeitsprobleme zu anderen Paketen. Diese Probleme beheben Sie mit dem Aufruf von apt-get install -f (oder --fix-broken als Langform). Mit dem Schritt löst APT alle bestehenden Abhängigkeiten auf und installiert dabei fehlende Pakete nach.

23.2.4. Pakete umwandeln und einspielen

In den obigen Schritten in „Durchführung“ und Abschnitt 23.2.3, „Umgewandelte Pakete einspielen“ haben Sie zuerst ein Paket umgewandelt und danach installiert. alien kann jedoch auch beide Schritte in einem Rutsch durchführen — ein Paket von rpm nach deb umwandeln und danach gleich auf ihrem System einspielen. Dazu benutzen Sie den Schalter -i (Langform --install).

Das Paket paket.rpm mit alien umwandeln und einspielen. 

# alien -i paket.rpm
...
#

Anmerkung

Nach der Installation des Paketes löscht alien die lokal vorliegende Paketdatei.

23.2.5. Fazit

Das Werkzeug alien hilft ihnen dabei, Software verfügbar zu machen, die es nicht für deb-basierte Systeme gibt. Wir raten ihnen dazu, dafür die Version der Software zu benutzen, die auch zu Ihrer Distribution und Architektur passt. Diese lässt sich i.d.R. am einfachsten in Ihren Softwarebestand integrieren. Weitere Informationen dazu finden auf der Projektwebseite von alien [alien].