AusweisApp2 unter Linux für Dummies

Obwohl keine offizielle Version für Linux existiert, war die Installation der AusweisApp2 aus den Quellen des Herstellers - etwas unerwartet - kinderleicht. Es handelt sich um open source Software (EUPL) und ist C++. Dankenswerterweise ist das Programm so gut vorkonfiguriert, dass es sich nahezu alles beim Kompilieren selbst besorgt.

Edit: Motivation -- Man kann sich auf dem Steuerportal elster.de mit dem Neuen Personalausweis anmelden. Auch wenn man die gar nicht so schlechte Software ElsterFormular nicht unter Linux laufen lassen kann, steht damit eine Alternative zur Verfügung.

Meine nachfolgende Anleitung ist für openSUSE Leap 15, lässt sich aber bis auf Punkt 3 (Devel-Pakete) einfach auf andere Systeme übertragen.

1. Source Code von AusweisApp2 herunterladen

Die jeweils letzte veröffentlichte Version findet sich im Repo des Herstellers der AusweisApp2. Dort die aktuellste Version herunterladen, im Mai 2019 z.B. AusweisApp2-1.16.2.tar.gz

Wer meiner Anleitung folgt, muss das Archiv noch nicht entpacken, sondern nur in einem durch einen normalen User beschreibbaren Verzeichnis ablegen.

2. Vorbereitungen im Dateisystem; Sichern zum Abschluss

Das fertige Programm soll im Ordner /opt/AusweisApp2 liegen. Da der normale User dort keine Schreibrechte hat, als root das Verzeichnis anlegen und Jedermann Schreibrechte geben.

# su
# mkdir /opt/AusweisApp2
# chmod o+w /opt/AusweisApp2

Nach erfolgreicher Installation werden die Verzeichnisrechte wieder entsprechend zurückgesetzt.

# chmod o-w /opt/AusweisApp2
# chown root -R /opt/AusweisApp2/*

3. Entwicklerpakete zum Kompilieren bereitstellen; Aufräumen danach

Das Komplieren auf einem relativ frischen openSUSE Leap 15 erforderte nachfolgende Pakete. Ich würde empfehlen sich die zusätzlich zur Installation empfohlenen Pakete zu speichern, um am Ende wieder alles aufräumen zu können. Bei mir sah das so aus, ich hatte jedoch CMake bereits installiert:

# zypper in Mesa-devel libX11-devel libxkbcommon-devel xcb-util-wm-devel xcb-util-image-devel\
 xcb-util-keysyms-devel pcsc-lite-devel fontconfig-devel freetype-devel

Das Aufräumen aller zuvor installierten Devel-Pakete ging sodann mittels:

zypper rm damageproto-devel fixesproto-devel kbproto-devel libdrm-devel libgbm-devel libglvnd-devel libOSMesa8\
 libOSMesa-devel libpcscspy0 libwayland-egl-devel libX11-devel libXau-devel libxcb-damage0 libxcb-devel\
 libxcb-dpms0 libxcb-ewmh2 libxcb-record0 libxcb-screensaver0 libxcb-xf86dri0 libxcb-xinput0 libxcb-xtest0\
 libxcb-xvmc0 libXdamage-devel libXext-devel libXfixes-devel libxkbcommon-devel libXxf86vm-devel Mesa-devel\
 Mesa-dri-devel Mesa-libEGL-devel Mesa-libglapi-devel Mesa-libGL-devel Mesa-libGLESv1_CM1\
 Mesa-libGLESv1_CM-devel Mesa-libGLESv2-2 Mesa-libGLESv2-devel pcsc-lite-devel pthread-stubs-devel\
 wayland-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-wm-devel xextproto-devel\
 xf86vidmodeproto-devel xproto-devel Mesa-libGL-devel fontconfig-devel freetype2-devel freetype-devel\
 libbz2-devel libexpat-devel libttf2

4. Kompilieren und Installieren von AusweisApp2

Ich habe ein kleines Skript namens compile-aa2.sh geschrieben, das neben die heruntergeladene Datei gelegt werden kann und das alle erforderlichen Schritte nachvollzieht. Ggf. muss die Datei mittels chmod +x compile-aa2.sh auführbar gemacht werden. Ich erkläre im Anschluss, was das Skript tut.

#!/bin/bash

TARGET=/opt/AusweisApp2
AA2FILE=`ls AusweisApp2*tar.gz | tail -n 1`
AA2PATH=`tar -tf $AA2FILE | head -1 | cut -f1 -d"/"`


mkdir aa2.tmp
cd aa2.tmp

echo "========== Build libs =========="

cmake -E tar xf ../$AA2FILE
cmake $AA2PATH/libs/ -DCMAKE_BUILD_TYPE=release -DDESTINATION_DIR=$TARGET
make

echo "========== Build App =========="

mkdir app
cd app
cmake ../$AA2PATH/ -DCMAKE_BUILD_TYPE=release -DCMAKE_PREFIX_PATH=$TARGET
make

cp ../$AA2PATH/resources/images/npa.svg $TARGET/

echo "========== Clean $TARGET =========="

LASTDIR=`pwd`

cd $TARGET
rm -rf include bin doc mkspecs translations phrasebooks ssl qml
cd lib
rm -rf pkgconfig cmake *.a *.la *.prl
rm -rf libQt5Designer* libQt5Help* libQt5Nfc* libQt5Sensors* libQt5Sql* libQt5Test* libQt5Multimedia* \
libQt5CLucene* libQt5Bluetooth*
strip *.so

cd $LASTDIR
cd src
strip AusweisApp2
mv AusweisApp2 AusweisApp2.desktop AusweisApp2.rcc config.json translations $TARGET/

cd ../../..
rm -r aa2.tmp

exit 0

Obiges Skript geht folgendermaßen vor:

  • Es wird automatisch das Ziel, die Quell-Datei und der Pfad in der Datei bestimmt (sofern beide Dateien nebeneinander liegen)
  • Die Quell-Datei wird entpackt und die notwendigen Bibliotheken werden kompiliert und in den Zielordner verschoben. Hinweis: Das dauert sehr lange, zuvor werden automatisch Bestandteile des QT5-Frameworks heruntergeladen
  • Dann wird die eigentliche App kompiliert und ein schönes Icon hinterlegt
  • Schließlich wird im Zielverzeichnis aufgeräumt (Überflüssiges gelöscht) und die App dorthin verschoben
  • Am Ende wird der gesamte Ordner gelöscht, der zum kompilieren verwendet wurde

4. Feinschliff und Integration

Die Datei /optAusweisApp2.desktop muss bearbeitet werden, die korrekten Zeilen sind (Rest unverändert):

Exec=/opt/AusweisApp2/AusweisApp2
Icon=/opt/AusweisApp2/npa.svg

Die App kann im Hauptmenü verankert werden:

xdg-desktop-menu install --novendor /opt/AusweisApp2/AusweisApp2.desktop

Nicht vergessen, am Ende den Ziel-Ordner zu sichern und die Devel-Pakete wieder zu deinstallieren (siehe oben, 3. und 4.).

Fazit: Sauberer geht es nicht.