// 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'. 'alien' heißt 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.

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 oder der von Debian genutzten Struktur ü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, 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` aus den Paketen 
<<Debian-Paket-dpkg>>, <<Debian-Paket-dpkg-dev>> und 
<<Debian-Paket-debhelper>> zur Erzeugung von Debianpaketen

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

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 könnten noch fehlen. Falls letzteres zutrifft, installieren 
Sie diese über die Paketverwaltung nach (siehe ``Pakete installieren'' in
<<pakete-installieren>>).

[[fremdformate-mit-alien-hinzufuegen-durchfuehrung]]
===== 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)))
(((Stampede Linux)))

Die Umwandlung eines `rpm`-Pakets in ein `deb`-Paket erfolgt mit Hilfe
des Werkzeugs `alien` und der Angabe des Paketformats über den Schalter 
`-d` (Langform `--to-deb`). 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 kann im 
Aufruf weggelassen werden. `alien` unterstützt ebenso 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>>).

// Stichworte für den Index
(((dpkg, -c)))
(((dpkg, --contents)))
(((dpkg, --info)))
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 `dpkg --info ` 'Pakename' und `grep Depends` sehen 
Sie, welche Paketabhängigkeiten bestehen und erfüllt sein müssen.

.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)
#
----

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

// Stichworte für den Index
(((alien, -c)))
(((alien, FHS)))
(((alien, -g)))
(((alien, -h)))
(((alien, -k)))
(((alien, -s)))
(((alien, -T)))
(((alien, -v)))
(((alien, -V)))
(((alien, --anypatch)))
(((alien, --bump)))
(((alien, --description)))
(((alien, --fixperms)))
(((alien, --generate)))
(((alien, --help)))
(((alien, --keep-version)))
(((alien, --nopatch)))
(((alien, --patch)))
(((alien, --scripts)))
(((alien, --single)))
(((alien, --target)))
(((alien, --test)))
(((alien, --version)))
(((alien, --verbose)))
(((alien, --veryverbose)))

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

`--bump=`'Wert' :: ähnlich zu `--version`. Erhöhe die Versionsnummer
nicht um 1, sondern um den 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 <<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`) :: bestehende Pre- und Post-Install- sowie
Remove-Skripte eines Paketes erhalten

`-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
<<qualitaetskontrolle>>).

`-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`

[[fremdformate-mit-alien-hinzufuegen-einspielen]]
==== Umgewandelte Pakete einspielen ====

// Stichworte für den Index
(((apt-get, install -f)))
(((apt-get, install --fix-broken)))
(((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.

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`. Mit dem Schritt löst APT alle bestehenden Abhängigkeiten 
auf und installiert dabei fehlende Pakete nach.

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

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

In den obigen Schritten in
<<fremdformate-mit-alien-hinzufuegen-durchfuehrung>> und
<<fremdformate-mit-alien-hinzufuegen-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
...
#
----

[NOTE]
====
Nach der Installation des Paketes löscht `alien` die lokal vorliegende
Paketdatei.
====

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