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
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^^
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.
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?
Kurze Antwort: Ja 😉
Ist die AusweisApp2 als Snap reif genug, um technisch nicht versierten Usern empfohlen zu werden?
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.
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?
„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).
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;-)
sudo snap install ausweisapp2-ce –classic
Fehler: snap „ausweisapp2-ce“ is not compatible with –classic
Vorgehensweise für Fehlersuche?
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.
Ich habe ––classic testweise wegelassen – funktioniert einwandfrei.
Danke!
Benutzt du einen Cardreader oder koppelst du dein Smartphone mit der AusweisApp2?
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?)
> (kann ich hier irgendwo einstellen, bei Aktivität hier eine Mail zu bekommen?)
Leider nein.
> (kann ich hier irgendwo einstellen, bei Aktivität hier eine Mail zu bekommen?)
Dazu müsste ich ein Plugin für eine Art Newsletter installieren. Das will ich aber vermeiden. Du kannst aber den RSS-Feed abonnieren:
https://www.glasen-hardt.de/feed/
fein, danke, mach ich
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?
Hast du das Paket „pcscd“ installiert? Das wird von der AusweisApp2 zwingend benötigt. Außerdem scheint es ein Problem mit IPV6 zu geben.
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!
> 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?
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
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“.
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…
Funktioniert (fast) auf Anhieb! Linux Mint mit Kartenlesegerät cyberJack RFID Basis.
fast: Die Umgebungsvariable für /snap/bin fehlte…
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.
Danke! – insbesondere an „glasen77“ – Jetzt kann ich auf Windows verzichten!
Viele Grüsse
Menno
Bei der Snap Version bekomme ich keine Verbindung zum Kartenlesegerät weil kein Treiber installiert sein soll, ist aber alles vorhanden.
Wie hast du das Snap installiert? Welchen Card-Reader benutzt du?
Tausend Dank an glasen77. Hat wunderbar im ersten Versuch geklappt.
funktioniert prima … lieben dank
ich nutze mint 18.x , auf lenovo x240, als ext. lesegerät: htc one a9s mit android 6.0
könnte man den ablauf optimieren ?
-kartenlese dienst installieren:
sudo pcscd
– snap installieren:
sudo apt update
sudo apt install snapd
-ausweisapp2 installieren:
sudo snap install ausweisapp2-ce
Hallo,
du kannst dir den Schritt zur Installation des Card-Daemons „pcscd“ sparen. Das Snap-Paket liefert eine eigene Version davon mit aus.
… nochmals vielen dank für deine unterstützung
Habe das Paket installiert. Funktioniert soweit einwandfrei. Benutze mein Samsung XCover4 als Lesegerät.
Konnte damit testweise beim Kraftfahrtbundesamt meine Daten einsehen.
Leider bekomme ich beim Login bei ELSTER-online immer eine Fehlermeldung:
Fehler
Session Ticket: ep0425yjcpssks7g6wa4gepdgyc410va
Damit kann ich leider nichts anfangen. ELSTER-onlie akzeptiert wohl in dieser Konfiguration das Smartphone als Leser nicht.
Es kann auch sein, dass ElsterOnline mal wieder rumzickt. Ich hatte das auch schon mal.
Tausend Dank an glasen77. Hat wunderbar im ersten Versuch geklappt.
Habe es mit ’sudo snap install ausweisapp2-ce‘ unter UBUNTU 20.04 Lts mit Kernel 5.4.0.-33 installiert.
Als Lesegerät HUAWEI P30 pro. Konnte mich beim KBA anmelden ( nach mehrmaligen Kopplungsversuchen)
und meine Daten herunterladen. Super APP, vielen vielen Dank, brauche also kein „Fenster“ auf meinem Netbook.
Danke für die App.
Das mit dem Confinement wäre noch wichtig. Der chrome browser ist jetzt auch ein Snap Paket. Das ist nervig da ich auch im chrome keycard logins per pcscd machen muss. Könntest du dich mal mit den Canonical Leuten zusammensetzen. Ich denke die pcscd Integration sollte ein separates Snap werden welches von beiden genutzt wird – oder vielleicht kollidiert es nicht wenn es ein part wird der parallel läuft.
Am einfachsten wäre es, wenn man den Distributions-spezifischen PC/SC-Daemon benutzen könnte. Leider hat sich da bis heute nichts getan. Wenn ich die Zeit finde, werde ich mal ein Issue bei Github aufmachen.
Ja das läuft auf das gleiche hinaus – man müsste ein pc/sc daemon apparmor interface definieren. Das kann dann von der Distribution oder von einem snap bereitgestellt werden (auf einem reinen ubuntu core system).
Das ganze ist gerade ein pain point für mich (ich hatte auch das problem im chrome reported) weisst du wie die pc/sc client daemon kommunikation abläuft?
Hallo,
nach der letzten Aktualisierung am 28.09.2020 meines 18.04 Ubuntu, bekomme ich beim Aufruf (ausweisapp2-ce) folgende Meldung:
„snap-confine has elevated permissions and is not confined but should be. Refusing to continue to avoid permission escalation attacks“
Die Anwendung wird nicht gestartet bzw. sofort wieder beendet. Hat jemand damit schon Erfahrungen? Was ist hier passiert? Ein Entfernen von snap und Neuinstallation von snap und aller snap-Pakete hilft. Nur ist das ja der Holzhammer und es kann ja nach der nächsten Aktualisierung wieder passieren.
Das Problem liegt an Snap selbst. Ich hatte das gleiche Problem heute bei „Sublime Text“. Bei mir hat es geholfen die Beta-Version von „snapd“ zu installieren:
sudo snap refresh snapd –beta
Hallo!
Leider wird mein Smartphone nicht erkannt. Benutze Ubuntu 20.04 und ein Huawei P8 lite 2017 (am Smartphone funktioniert’s einwandfrei). Habe auch schon alle oben genannten Pakete installiert, leider ohne Erfolg…
Mein letzter Versuch war mit der Installation via „sudo snap install ausweisapp2-ce“.
Wo liegt hier das Problem?
PS: Die AP / Client Isolierung ist deaktiviert, Drucker und Co funktionieren via Wlan.
Leider kann ich dir da nicht weiterhelfen. Es kommt nämlich auf das Smartphone ob die Kopplung mit der AusweisApp2 funktioniert oder nicht. Mit meinem alten Honor 7 hat die AusweisApp2 nicht funktioniert, mit dem Smartphone (Honor 5C meiner Frau aber wiederum vollkommen problemlos).