// Datei: ./praxis/paketformate-mischen/alien.adoc

// Baustelle: Rohtext

[[fremdformate-mit-alien-hinzufuegen]]

=== Fremdformate mit `alien` hinzufügen ===

==== Einführung ====

// Stichworte für den Index
(((Debianpaket, alien)))
(((Fremdformate hinzufügen)))
Den Begriff 'alien' übersetzen Sie am ehesten mit 'fremd', 'Fremdling'
oder 'Ausländer'. So heißt auch das gleichnamige Debianpaket
<<Debian-Paket-alien>>, welches Ihnen hilft, 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.

* die Informationen über Abhängigkeiten zu anderer Software.

* die Angabe der Prozessorarchitektur im Dateinamen, wie etwa 'amd64'
bei `deb`-Paketen und 'x86_64' bei `rpm`-Archiven.

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

* die referenzierten Bibliotheken passen gar nicht, nicht mehr (sind
bspw. veraltet) oder sind nicht auffindbar (sind bspw. nicht installiert
oder haben einen anderen Paketnamen)
* die angegebenen Pfade im Originalpaket stimmen nicht mit Ihrer lokalen
Verzeichnisstruktur überein
* der Binärcode passt nicht zu Ihrer genutzten Plattform und Architektur
* das Format der Konfiguration sorgt für Ärger, bspw. die verfügbaren
Optionen und Schalter
* es bestehen Konflikte mit anderer, bereits installierter Software

Verwenden Sie daher möglichst die Version der Software, 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>>.

==== Pakete umwandeln ====

===== Voraussetzungen =====

// Stichworte für den Index
(((Debianpaket, alien)))
(((Debianpaket, debhelper)))
(((Debianpaket, dpkg)))
(((Debianpaket, dpkg-dev)))
(((Debianpaket, gcc)))
(((Debianpaket, lsb)))
(((Debianpaket, make)))
(((Debianpaket, perl)))
(((Debianpaket, rpm)))
(((Debianpaket, yum)))
(((Filesystem Hierarchy Standard (FHS))))
(((Paket, mit alien umwandeln)))
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:

* Perl <<Debian-Paket-perl>> -- weil `alien` ein Perl-Skript ist

* die Werkzeuge `rpm` bzw. `yum` aus den gleichnamigen Debianpaketen für
die Konvertierung von `rpm`-Paketen nach `deb` (<<Debian-Paket-rpm>> und
<<Debian-Paket-yum>>)

* die Werkzeuge `dpkg`, `dpkg-dev` und `debhelper` 
(<<Debian-Paket-dpkg>>, <<Debian-Paket-dpkg-dev>>,
<<Debian-Paket-debhelper>>) zur Erzeugung von Debianpaketen

* der GNU-C-Compiler `gcc` und `make` (<<Debian-Paket-gcc>> und
<<Debian-Paket-make>>), sofern Software aus dem Quellcode zu übersetzen ist

* das Paket 'lsb' <<Debian-Paket-lsb>> zur Linux-Standardisierung gemäß
der Linux Standard Base (LSB)

Die beiden Pakete `perl` und `dpkg` gehören zu den essentiellen Paketen
und sind auf ihrer Debian-Installation vorhanden. Die anderen genannten
Pakete könnten noch fehlen. Falls letzteres zutrifft, installieren Sie
diese über die Paketverwaltung nach (siehe ``Pakete installieren'' in
<<pakete-installieren>>).

===== Durchführung =====

// Stichworte für den Index
(((alien, -d)))
(((alien, -p)))
(((alien, -r)))
(((alien, -t)))
(((alien, --to-deb)))
(((alien, --to-pkg)))
(((alien, --to-rpm)))
(((alien, --to-slp)))
(((alien, --to-tgz)))

* Umwandlung eines rpm in ein deb mittels expliziter Angabe des
Paketformats über den Schalter `-d` (Langform `--to-deb`)

----
alien --to-deb paket.rpm
----

* `--to-deb` ist der Standardfall, d.h. kann man im Aufruf weglassen

* Alternative Formate:
** rpm: `-r` (Langform `--to-rpm`)
** tgz: `-t` (Langform `--to-tgz`)
** slp: `--to-slp` (keine Kurzform)
** pkg: (Open)Solaris-Pakete mittels `-p` (Langform `--to-pkg`)

Am Ende überprüfen Sie das Paket, um sicherzugehen, ob es auch
tatsächlich zu ihrer bestehenden Installation passt.

* wie macht man diese Überprüfung?

===== Besonderheiten bei der Umwandlung =====

// Stichworte für den Index
(((alien, -c)))
(((alien, -g)))
(((alien, -k)))
(((alien, --anypatch)))
(((alien, --generate)))
(((alien, --keep-version)))
(((alien, --nopatch)))
(((alien, --patch)))
(((alien, --scripts)))
(((alien, --veryverbose)))

`deb`-basierte Systeme haben ihre Eigenheiten. Die folgenden Schalter
von `alien` helfen Ihnen bei der Paketumwandlung:

* `--patch=Datei`, `--anypatch` und `--nopatch` zum automatischen Anpassen von Startup-Skripten und Pfaden gemäß dem File Hierarchy Standard (FHS)
* `-c` (Langform `--scripts`) um bestehende Pre- und Post-Install- sowie Remove-Skripte zu erhalten
* `-k` (Langform `--keep-version`), um die Versionsnummer beizubehalten -- normalerweise zählt alien diese um eins hoch
* `-g` (Langform `--generate`) und `--veryverbose` um die Fehlersuche zu erweitern
* `-g` (Langform `--generate`), um das Paket vor der Umwandlung zu bearbeiten
** erzeugt ein Verzeichnis mit dem Paketinhalt
** ermöglich Ihnen die Ergänzung und Korrektur des Paketinhalts

==== Pakete umwandeln und einspielen ====

// Stichworte für den Index
(((alien, -i)))
(((alien, --install)))

* Paket von rpm nach deb umwandeln und gleich einspielen (Kurzform)

----
alien -i paket.rpm
----

==== Umgewandelte Pakete einspielen ====

// Stichworte für den Index
(((dpkg, -i)))
(((dpkg, --install)))

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.

Dabei können mehrere Ergebnisse eintreten -- alles geht glatt und das Paket
funktioniert, alles geht glatt und das Paket funktioniert nicht, oder
das Einspielen geht schief. Da bleibt nur manuelle Nacharbeitung:

* was ist da zu tun?
* woran kann das hängen? (Ursachenforschung)

// Datei (Ende): ./praxis/paketformate-mischen/alien.adoc
