AusweisApp2 als Snap (Update 25.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

Update 25.01.19

Durch eine Änderung in einer neuen Version des „snap“-Clients ist es durch den Parameter „–classic“ nicht mehr möglich das Confinement zu umgehen. Zum Glück funktioniert es aber mit dem Parameter „–devmode“ noch.

sudo snap install ausweisapp2-ce --devmode

30 Antworten auf „AusweisApp2 als Snap (Update 25.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;-)

  5. sudo snap install ausweisapp2-ce –classic

    Fehler: snap „ausweisapp2-ce“ is not compatible with –classic

    Vorgehensweise für Fehlersuche?

    1. Es sieht so aus, als ob sich mit der neuen „snap“-Version das Verhalten der Parameter geändert hat. Man muss das Snap jetzt mit der Option „–devmode“ installieren damit das Confinement abgeschaltet wird. Leider habe ich im Moment relativ wenig Zeit das Problem anzugehen.

      1. Card Reader Reiner Sct Smartcard Reader cyberjack RFID comfort.

        Funktioniert Top, habe soeben auch in Österreich meinen Zugang aktiviert (lebte dort einige Zeit).

        Mein Smartphone hat kein RFID.

        (kann ich hier irgendwo einstellen, bei Aktivität hier eine Mail zu bekommen?)

  6. Toll, nachdem ich es endlich geschafft habe open ecard zu installieren (da die Ausweisapp ja unter Linux bisher nicht verfügbar war) finde ich das hier.
    Habe mich also gleich daran gemacht es zu installieren, hat auch soweit geklappt. Leider scheitere ich an der Kopplung mit dem Smartphone.
    Laut Programm wird die Kopplung vom Smartphone verweigert. Ich habe das jetzt bestimmt 10x probiert, mal über die Zahlen über den Buchstaben, mal über den Ziffernblock. Zahlendreher schließe ich also aus.
    Gibt es da noch einen Bug der die Kopplung verhindert? Oder hätte ich die Treiber für die Lesegeräte installieren müssen, wird da im Hintergrund irgendwie drauf zugegriffen?

      1. pcscd ist mir nach meinem Post hier auch noch eingefallen. Beim Versuch es zu installieren bekam ich aber die Meldung das es bereits die neuste Version sei. Hatte ich also doch schon drauf.
        Problem mit IPv6 heißt ich muss v6 deaktivieren?
        Mir fällt auch auf, das ich das Programm nur per Terminal starten kann und das auch ewig dauert, bis es gestartet ist. Also so im Minutenbereich. Und nein, ich habe keine Uralt-Hardware; Office startet blitzschnell!

        1. > Problem mit IPv6 heißt ich muss v6 deaktivieren?
          Das weiß ich noch nicht 100%. Ich bin durch dich auf das Problem aufmerksam geworden. Nach der Deaktivierung auf meinen Rechner ging es.

          > Mir fällt auch auf, das ich das Programm nur per Terminal starten kann und das auch ewig dauert, bis es gestartet ist.
          Welche Distribution benutzt du?

          1. Gut, jetzt müssen wir es erst mal hinbekommen, das das Programm überhaupt wieder startet.
            Also ich starte es im Terminal mit /snap/bin/ausweisapp_ce
            Dann dauert es recht exakt 2 Minuten (habe eben mal gestoppt) bis die Meldung Ausweisapp wurde gestartet erscheint.
            Problem jetzt: Das Symbol vom Programm erscheint neben der Uhr. Allerdings ist es ohne Funktion. Doppelklick bringt nichts und einmal Klick nur die Option das Programm zu beenden. Ins Programm selber komme ich nicht mehr.
            Seit der Installation sind auch schon einige Kernel-Updates durch, kann sich das schon auswirken?

            Ich verwende Lubuntu 18.04, frisch installiert, aber alle Updates drauf!

            Hier die Terminalausgabe, hilf das?

            /snap/bin/ausweisapp2-ce
            2019/02/17 20:51:37.699630 cmd_run.go:880: WARNING: cannot start document portal: Failed to activate service ‚org.freedesktop.portal.Documents‘: timed out (service_start_timeout=120000ms)
            QApplication: invalid style override passed, ignoring it.
            init 2019.02.17 20:51:39.039 I printInfo(main.cpp:115) : ##################################################
            init 2019.02.17 20:51:39.039 I printInfo(main.cpp:116) : ### ApplicationName: „AusweisApp2“
            init 2019.02.17 20:51:39.039 I printInfo(main.cpp:117) : ### ApplicationVersion: „1.16.1“
            init 2019.02.17 20:51:39.040 I printInfo(main.cpp:118) : ### OrganizationName: „AusweisApp2_CE“
            init 2019.02.17 20:51:39.040 I printInfo(main.cpp:119) : ### OrganizationDomain: „“
            init 2019.02.17 20:51:39.040 I printInfo(main.cpp:120) : ### System: „Ubuntu Core 18“
            init 2019.02.17 20:51:39.040 I printInfo(main.cpp:121) : ### Kernel: „4.4.0-141-generic“
            init 2019.02.17 20:51:39.040 I printInfo(main.cpp:122) : ### Architecture: „x86_64“
            init 2019.02.17 20:51:39.040 I printInfo(main.cpp:127) : ### Devicename: „oelle-X58A-UD7“
            init 2019.02.17 20:51:39.040 I printInfo(main.cpp:129) : ### Qt Version: 5.11.2
            init 2019.02.17 20:51:39.115 I printInfo(main.cpp:130) : ### OpenSSL Version: „OpenSSL 1.1.0g 2 Nov 2017“
            init 2019.02.17 20:51:39.115 I printInfo(main.cpp:131) : ##################################################
            secures… 2019.02.17 20:51:39.489 I SecureStorage::load(secure_storage/SecureStorage.cpp:187) : SecureStorage successfully loaded

          2. Hallo. Sorry für die späte Antwort. Leider kann ich nicht sagen woran der langsame Start bei dir liegt. Der einzige Tipp wäre die Installation der Pakete „xdg-desktop-portal“ und „xdg-desktop-portal-gtk“.

          3. Na toll, jetzt bin ich spät dran…
            Also die Pakete machen nicht das problem aus, denn das Terminal sagt dazu:
            „Statusinformationen werden eingelesen…. Fertig
            xdg-desktop-portal ist schon die neueste Version (0.11-1).
            xdg-desktop-portal wurde als manuell installiert festgelegt.“

            Und der langsame Start ist jetzt nicht essentiell, da ich das Programm nicht tagtäglich brauche. Viel schwerwiegender finde ich das es zwar startet (Icon neben der Uhr) aber außer dem Menüpunkt „Programm beenden“ keine Funktion bietet, sich das Hauptfenster auch nicht öffnet.

            Also ein Programm, das nach 2 Min Startzeit nur die Möglichkeit bietet, es wieder zu beenden ist jetzt nicht sonderlich nützlich…

  7. Funktioniert (fast) auf Anhieb! Linux Mint mit Kartenlesegerät cyberJack RFID Basis.
    fast: Die Umgebungsvariable für /snap/bin fehlte…

  8. Vielen Dank für die Bereitstellung der AusweisApp2 als snap. Meine Authentisierung bei Mein ELSTER und beim KBA funktionieren damit gut. Somit kann ich nach dem Supportende von Windows 7 ab dem 14.01.2020 meine Online-Steuer-Erklärung auch mittels Ubuntu erstellen, anstatt deshalb auf Windows 10 umsteigen zu müssen.

  9. Bei der Snap Version bekomme ich keine Verbindung zum Kartenlesegerät weil kein Treiber installiert sein soll, ist aber alles vorhanden.

Schreibe einen Kommentar zu linuxopa Antworten abbrechen

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.