AusweisApp2 als Snap (Update 15.01.19)

Da ich im Moment Urlaub und viel Zeit habe, habe ich mich mal daran gemacht ein Projekt zu vollenden, welches ich schon seit ein paar Monaten in die Augen gefasst habe:

Das Paketieren der AusweisApp2.

Falls jemand nicht weiß, wozu dieses Programm dient, hier mal der Link zum passenden Wikipedia-Artikel:

https://de.wikipedia.org/wiki/AusweisApp2

Offiziell unterstützen die Entwickler Linux nicht, dadurch dass der Quellcode aber unter Github und unter einer freien Lizenz verfügbar ist, kann man wenigstens den Versuch wagen das Programm unter Linux zum Laufen zu bekommen.

Kompilieren der Anwendung

Solange eine Distribution Qt 5.9 oder höher enthält, ist das Kompilieren ziemlich einfach:

  • Github-Code klonen.
  • CMake aufrufen und Schritt für Schritt alle notwendigen Abhängigkeiten nachinstallieren, da diese nicht direkt dokumentiert sind.
  • „make && make install“ aufrufen. Das fertige Programm liegt dann unter „dist“.

Der Teufel steckt leider im Detail. Dadurch, dass die Entwickler Linux nicht offiziell unterstützen gibt es ein paar kleinere Probleme:

  • Das Terminal und auch das Log werden mit unzähligen Debug-Meldungen zugespammt. Selbst wenn man den RELEASE-Build bauen lässt, bleiben die Meldungen. Das Programm installiert zwar die Datei „qtlogging.ini“, welche man nachbearbeiten kann. Diese muss man händisch nach „.config/QtProjects“ verschieben. Leider gelten die Einstellungen in der Datei dann für alle Qt-Programme.
  • Die deutsche Übersetzung funktioniert nicht, da sie im falschen Ordner liegt.
  • Die Verzeichnisstruktur ist generell nicht so wie unter Linux bzw. Ubuntu üblich.

Ich habe mich mal an den Quellcode gesetzt und alle diese Probleme direkt dort beseitigt:

  • Ein paar „qDebug()“-Meldungen sind per „ifdef“-Makros ausgeblendet, da es beim Setzen der Option „-DQT_NO_DEBUG_OUTPUT“ in „CMakeList.txt“ zu mehreren Kompilierfehlern kommt. Die Datei „qtlogging.ini“ ist dadurch überflüssig und wird nicht mehr installiert.
  • Das Programm-Icon im SVG-Format wird ins korrekte Verzeichnis installiert und die desktop-Datei wurde entsprechend angepasst.
  • Die deutsche Übersetzung wurde in ein anderes Verzeichnis verschoben und die Loader-Klasse im Code angepasst.
  • Die Resourcen-Datei und die JSON-Datei, welche das Programm installiert, wurden ebenfalls in ein anderes Verzeichnis gelegt und die Loader entsprechend angepasst.

Mit diesen Änderungen läuft das Programm komplett fehlerfrei unter Ubuntu 18.04 und höher und mit ziemlicher Sicherheit auch unter anderen Distributionen.

Warum ein Snap-Paket?

Ich wollte das Programm auf jeden Fall paketieren. Nur ist das Erstellen eines guten Debian-Pakets mit allen Abhängigkeiten ein ziemlicher Aufwand. Da ich in den letzten Wochen Snap zu schätzen gelernt habe (In meinen Augen funktioniert der Snap-Store sehr gut), wollte ich mich mal an einem eigenen Snap-Paket versuchen. Das Programm schien mir ein guter Kandidat zu sein, da es hinreichend komplex ist um den Aufbau der Syntax der YAML-Datei zu lernen.

Grundsätzlich ist der Bau eines Snap-Pakets sehr einfach. Das Minimal-Beispiel bzw. das Beispiel zum Bauen von DOSBOX sind eine gute Basis um den Aufbau der YAML-Datei für den Bau mit Hilfe von „snapcraft“ schnell nachvollziehen zu können. Leider muss man dann doch etwas tiefer in die Materie einsteigen, da manches nicht 100% dokumentiert ist.

So gibt es zwar ein Plugin zum Bauen von „CMake“-basierten Projekten, nur funktioniert dieses nicht 100% automatisch, da ich dem Original-Quellcode vor dem Bauen noch patche und nach dem Bauen einige überflüssige Dateien entferne um die Snap-Größe zu verkleinern. Um alle Klippen zu umschiffen müsste ich mir einige Beispiele und Foreneinträge zu Gemüte führen.

Jedenfalls habe ich es nach zwei Tagen herumbasteln und ausprobieren geschafft ein Snap-Paket zu bauen, welches sich 100% wie ein „normales“ Paket verhält. Das Ergebnis kann man im Snap-Store herunterladen:

https://snapcraft.io/ausweisapp2-ce

Das Snap-Paket benötigt noch den PC/SC-Daemon (Paketname „pcscd“ unter Ubuntu), damit ein Card-Reader angesprochen werden kann.

Das YAML zum Bauen des Snaps kann man in meinem Github-Repo finden:

https://github.com/glasen/snaps/tree/master/AusweisApp2

Update 03.01.19:

Leider funktioniert das Confinement bzw. die Sandbox nicht richtig im Snap. Mir ist das nicht aufgefallen, da ich auf meinen beiden Rechnern einen Kernel aus dem Mainline-PPA einsetze und dort anscheinend nicht alle Apparmor-Features vorhanden sind. Benutzt man den Standard-Kernel kann das Snap den PC/SC-Daemon und kann deshalb keine Card-Reader finden. Bis ich eine richtige Lösung gefunden habe, muss das Snap im leider „classic“-Modus ohne Sandbox-Features installiert werden:

sudo snap refresh ausweisapp2-ce --classic

Update 15.01.19:

Ich habe es endlich geschafft die Version 1.16.1 zu bauen. Leider bin ich dadurch mit dem Confinement nicht weitergekommen. Um keine Probleme mit dem fehlerhaften Confinement zu bekommen, sollte das Snap entweder von Hand aktualisiert bzw. deinstalliert und dann gleich wieder neu installiert werden:

Aktualisieren mit deaktiviertem Confinement:

sudo snap refresh ausweisapp2-ce --classic

Neuinstallation:

sudo snap remove ausweisapp2-ce && sudo snap install ausweisapp2-ce --classic

9 Antworten auf „AusweisApp2 als Snap (Update 15.01.19)“

  1. Wow, coole Sache 🙂
    Werde es zwar nicht nutzen, weil ich das ganze generell nicht nutze^^, aber hammer Leistung 🙂
    Ich an deiner Stelle würde mich bei denen bewerben und einfach mal das Teil mitbringen, welches du für Linux entwickelt hast, ich würde dich sofort einstellen^^

    1. Danke für die Blumen. Viel Aufwand war es am Ende aber nicht. Musste mit Hilfe von „grep“ nur die passenden Stellen im Quellcode finden. Da ich schon mal ein kleines Programm in C++ und Qt entwickelt habe, wusste ich auch nach was ich suchen musste. Das Snap-Format ist auch nicht besonders aufwendig. Auf jeden Fall deutlich einfacher als ein natives Debian-Paket.

  2. Eine Verständnisfrage zu:

    > „Das Snap-Paket benötigt noch den PC/SC-Daemon (Paketname „pcscd“ unter Ubuntu), damit ein Card-Reader angesprochen werden kann. “

    Den PC/SD-Daemon installiert man dann aber per apt bzw. apt-get?

    1. Ich habe das Snap mit ElsterOnline und meinem „ReinerSCT CyberJack RFID Basis“ getestet. Das Einloggen funktionierte damit problemlos. Auch konnte ich über die Android-App der AusweisApp2 eine Koppelung durchführen und den NFC-Leser des Smartphones zum Authentifizieren benutzen. Das waren zwar nur zwei kurze Tests, ich bin aber zuversichtlich das es keine weiteren, größeren Probleme geben wird.
      Der Code ist seitens Governikus sehr portabel entwickelt worden und lies sich schon in der ersten Version problemlos benutzen. Es war halt bis Ubuntu 18.04 immer ein größerer Krampf das Programm zu Kompilieren, da erst Qt 5.9 standardmäßig alle notwendigen Patches für OpenSSL 1.1 mitbrachte.

  3. Darf ich versuchen zusammenzufassen. Auf einem Kubuntu 18.04 lts bisher ohne snap-Anwendungen:
    sudo apt-get install pcscd

    sudo snap install snapcraft
    snapcraft
    ODER ist snapcraft nicht erforderlich?

    sudo snap install ausweisapp2-ce ODER sudo snap refresh ausweisapp2-ce –classic
    ODER beides?

    Fertig?

    1. „snapcraft“ ist nicht erforderlich. Die Installation sind diese folgenden zwei Befehle:

      sudo apt-get install pcscd
      sudo snap install ausweisapp2-ce --classic

      Das „refresh“ ist nur notwendig, wenn man eine vorherige Version benutzt hat. „snap refresh“ entspricht einem „apt update && apt upgrade“ nur für ein einzelnes Paket. Ich arbeite gerade an der Paketierung der Version 1.6.1. Ist nicht ganz einfach, da diese mindestens Qt 5.10 benötigt und das leider nicht in den Bionic-Quellen (Auf denen die Runtime „core18“ basiert) vorkommt. Mit etwas Glück bekomme ich die Version aber bis zum Ende der Woche hin (Ich muss mich noch in die Eigenheiten beim Bauen von Snaps einarbeiten).

  4. Vielen Dank; funktioniert (mit Kubuntu 18.04.1,… und einem Moto G5 als NFC-Lesegerät) sofort. Die Daten des Ausweises werden in der App auf dem Rechner angezeigt. (Vielleicht geht ELSTER jetzt doch ohne Win;-)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.