ubinde
Anmeldungsdatum: 10. September 2010
Beiträge: Zähle...
|
Ich habe dieser Anfrage schon beim appimage forum gemacht und keiner meldet sich. Ich habe mich mit
https://docs.appimage.org/packaging-guide/index.html befasst. Aber es ist zu schwierig.
Mit dem dino im source code als Beispiel
https://github.com/dino/dino/releases
wäre du bereit Schrittweise Erklärungen und Anweisungen zu geben? Ich bin mir nicht klar ob
das schaffen von einer appimage eine generische Sache ist? Wenn man einen appimage
machen kann, kann man jeden appimage machen?
Danke. Moderiert von noisefloor: Ins passende Forum verschoben, Titel aussagekräftiger gemacht
|
robert-engel
Anmeldungsdatum: 30. Oktober 2015
Beiträge: 1958
|
Hallo ubinde, das frage ich mich auch schon eine ganze Weile. Bisher bin ich so weit gekommen, dass das AppImage ohne Fehler, nur mit Warnung erstellt wird. Allerdings ist es zu klein, d.h. es fehlen wohl die ganzen Libraries (Vermutung meinerseits). Zudem startet es nicht, obwohl es als ausführbar markiert ist. Ich habe das am Beispiel des DoubleCommanders mal in einem Dokument (im Anhang) festgehalten. Vielleicht kommst Du ein Stück weiter. Edit: Ich habe nach einer Anleitung noch einen Ordner /usr/lib hinzugefügt, weiß aber nicht, welche Libraries dort hinein müssen. Auf jeden Fall werden die Dateien mit ins Image einbezogen, da das AppImage wächst. Ich habe auch ein funktionierendes AppImage von DoubleCommander und das ist deutlich größer (129 MB statt 5-15 MB wie bisher bei mir). Auf einer bekannten Videoplattform wird immer nur für sehr einfache Anwendungen vorgeführt, wie man ein AppImage erstellt. Auch die (bisher gefundenen) schriftlichen Beschreibungen sind unvollständig. Daran habe ich mich orientiert, leider nur mit dem angegebenen Ergebnis einer nicht startenden Anwendung. Beispiel: https://www.youtube.com/watch?v=Wy63jwjpNg4 Gruß, Robert.
- AppImage_erstellen.pdf (43.3 KiB)
- Download AppImage_erstellen.pdf
|
ubinde
(Themenstarter)
Anmeldungsdatum: 10. September 2010
Beiträge: 169
|
https://docs.appimage.org/packaging-guide/from-source/native-binaries.html#cmake
Es scheint, man soll der source code mit cmake build.
Danach install in AppDir folder. In home folder sind dino source code
folder und dino.AppDir folder. Weiss du was man in command line schreiben soll?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Ganz generisch ist das leider nicht - man muss eine Vorstellung davon entwickeln, was da passiert und wo man ansetzen kann, wenn etwas nicht ganz so aussieht, wie man es haben will... Unter der Annahme, dass man das Programm Dino aus den Sourcen baut und man ~/bin/ im PATH hat: sudo apt install cmake ninja-build valac gettext libgee-0.8-dev libsqlite3-dev libgtk-3-dev libgpgme-dev libsoup2.4-dev libgcrypt20-dev libqrencode-dev libgspell-1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libwebrtc-audio-processing-dev libsrtp2-dev libnice-dev glib-networking gstreamer1.0-plugins-good gstreamer1.0-gtk3 libsignal-protocol-c-dev wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage -O ~/bin/linuxdeploy-x86_64.AppImage
chmod +x ~/bin/linuxdeploy-x86_64.AppImage wget https://github.com/dino/dino/archive/refs/tags/v0.2.2.tar.gz
tar xfv v0.2.2.tar.gz
cd dino-0.2.2/
./configure --prefix="/usr"
make
make DESTDIR=Dino.AppDir install # das ist relativ zum ./build/ Verzeichnis cd build/
LD_LIBRARY_PATH=Dino.AppDir/usr/lib/ linuxdeploy-x86_64.AppImage --appdir Dino.AppDir/ --output appimage
Leider passt die hinterlegte Auflösung der Screenshots in der Dino.AppDir/usr/share/metainfo/im.dino.Dino.appdata.xml nicht zu den von der Webseite geladenen Dateien, so dass die Validierung fehlschlägt:
[appimage/stdout] Trying to validate AppStream information with the appstream-util tool
[appimage/stdout] In case of issues, please refer to https://github.com/hughsie/appstream-glib
[appimage/stdout] /home/alexander/src/appimage/dino-0.2.2/build/Dino.AppDir/usr/share/metainfo/im.dino.Dino.appdata.xml: FEHLGESCHLAGEN:
[appimage/stdout] • attribute-invalid : <screenshot> height (900) did not match specified (950) [https://dino.im/img/appdata/main.png]
[appimage/stdout] • attribute-invalid : <screenshot> height (900) did not match specified (942) [https://dino.im/img/appdata/start_chat.png]
[appimage/stdout] • attribute-invalid : <screenshot> width (1600) did not match specified (2018) [https://dino.im/img/appdata/contact_details.png]
[appimage/stdout] • attribute-invalid : <screenshot> height (900) did not match specified (1188) [https://dino.im/img/appdata/contact_details.png]
[appimage/stdout] run_external: subprocess exited with status 1[appimage/stderr] Validierung der Dateien ist fehlgeschlagen
[appimage/stderr] Failed to validate AppStream information with appstream-util
ERROR: Failed to run plugin: appimage (exit code: 1) Also rücken wir die Werte in der Dino.AppDir/usr/share/metainfo/im.dino.Dino.appdata.xml gerade (Pull-Request für Upstream: dino/dino/pull/1163):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | --- ../main/data/im.dino.Dino.appdata.xml 2021-09-21 23:02:25.000000000 +0200
+++ Dino.AppDir/usr/share/metainfo/im.dino.Dino.appdata.xml 2021-12-14 10:39:11.470175716 +0100
@@ -120,13 +120,13 @@
</description>
<screenshots>
<screenshot type="default">
- <image height="900" width="1600">https://dino.im/img/appdata/main.png</image>
+ <image height="950" width="1600">https://dino.im/img/appdata/main.png</image>
</screenshot>
<screenshot>
- <image height="900" width="1600">https://dino.im/img/appdata/start_chat.png</image>
+ <image height="942" width="1600">https://dino.im/img/appdata/start_chat.png</image>
</screenshot>
<screenshot>
- <image height="900" width="1600">https://dino.im/img/appdata/contact_details.png</image>
+ <image height="1188" width="2018">https://dino.im/img/appdata/contact_details.png</image>
</screenshot>
</screenshots>
<translation type="gettext">dino</translation>
|
Danach sollte
LD_LIBRARY_PATH=Dino.AppDir/usr/lib/ linuxdeploy-x86_64.AppImage --appdir Dino.AppDir/ --output appimage
durchlaufen und die gewünschte Dino-x86_64.AppImage erstellen, die man auf seinen Zielsystemen verteilen und ausführen kann.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Ich bin gerade darüber gestolpert, dass das unter Ubuntu 20.04 erstellte AppImage nicht unter Arch Linux will:
$ /tmp/Dino-665870c-x86_64.AppImage
/tmp/Dino-665870c-x86_64.AppImage: symbol lookup error: /usr/lib/libgio-2.0.so.0: undefined symbol: g_module_open_full
Das scheint dieses Problem zu sein: https://www.maoxuner.cn/post/2021/09/navicat-with-glib2-70/ Edit: das Konzept bei Appimages mit glib ist ziemlich unbefriedigend: https://docs.appimage.org/reference/best-practices.html^ Edit2: der appimage-builder, der die glib angeblich mit verpacken kann, ist wohl gerade kaputt: AppImageCrafters/appimage-builder/issues/165
|
TausB
Anmeldungsdatum: 26. November 2009
Beiträge: 1536
|
Gibt es dafür nicht dieses appimage? 😀
|
robert-engel
Anmeldungsdatum: 30. Oktober 2015
Beiträge: 1958
|
TausB schrieb: Gibt es dafür nicht dieses appimage? 😀
Das hatte ich ja probiert. Man muss aber offenbar alle zugehörigen Dateien im AppDir-Verzeichnis unterbringen, damit ein ausführbares Programmpaket entsteht. Wenn man aber nicht weiß, welche das sind, muss man die Abhängigkeiten heraus finden. Dazu gibt es sicherlich auch Tools. Welche wären da geeignet? Woher z.B. bekommt man die Abhängigkeiten zu obigem Beispiel dino oder zu doublecmd oder zu jedem anderen Programm? Irgendwo müssen die ja aufgelistet sein. Mal sehen ob apt-cache depends oder rdepens helfen. re@PC:~$ apt-cache depends doublecmd
<doublecmd>
re@PC:~$ apt-cache rdepends doublecmd
<doublecmd>
re@PC:~$ sudo apt-rdepends doublecmd
Reading package lists... Done
Building dependency tree
Reading state information... Done
doublecmd
re@PC:~$ Da ist man genau so schlau wie zuvor. appimage-builder scheint etwas Anderes zu sein, ebenso wie pkg2appimage oder deb2appimage . Habe zu keiner Möglichkeit bisher eine durchgängig erklärte Reihenfolge gefunden, die funktioniert.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
TausB schrieb: Gibt es dafür nicht dieses appimage? 😀
Das hat ebenfalls das Problem, dass es die glib nicht automatisch mit verpackt...
|
ubinde
(Themenstarter)
Anmeldungsdatum: 10. September 2010
Beiträge: 169
|
sudo apt install cmake ninja-build valac gettext libgee-0.8-dev libsqlite3-dev libgtk-3-dev libgpgme-dev libsoup2.4-dev libgcrypt20-dev libqrencode-dev libgspell-1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libwebrtc-audio-processing-dev libsrtp2-dev libnice-dev glib-networking gstreamer1.0-plugins-good gstreamer1.0-gtk3 libsignal-protocol-c-dev dieser command ist da, um arch linux Kompatibilität zu erreichen? Und ist arch linux Kompatibilität nicht erforderlich, kann dieser command ausgelassen werden? In dino source code folder ist ein configure file. Ist das nicht der file, womit
appimagetool alle dependencies in der fertiggestellten appimage
rein bekommt? In welchem folder soll man sein, wenn man den cmake command durchführt?
https://docs.appimage.org/packaging-guide/from-source/native-binaries.html#packaging-from-source Ich weiss nicht welche commands ich schreiben muss?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
ubinde schrieb: sudo apt install cmake ninja-build valac gettext libgee-0.8-dev libsqlite3-dev libgtk-3-dev libgpgme-dev libsoup2.4-dev libgcrypt20-dev libqrencode-dev libgspell-1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libwebrtc-audio-processing-dev libsrtp2-dev libnice-dev glib-networking gstreamer1.0-plugins-good gstreamer1.0-gtk3 libsignal-protocol-c-dev dieser command ist da, um arch linux Kompatibilität zu erreichen?
Nein, Arch Linux nutzt pacman als Paketmanager, nicht apt - der Befehl installiert alle Bauabhängigkeiten, die im Github-Wiki für das Dino-Projekt angegeben werden.
In dino source code folder ist ein configure file. Ist das nicht der file, womit
appimagetool alle dependencies in der fertiggestellten appimage
rein bekommt?
Nein, das configure-Skript ist teil des Buildsystems - das schaut nach, ob die nötigen Bibliotheken auf dem System, auf dem du das ganze bauen willst vorhandne sind. In welchem folder soll man sein, wenn man den cmake command durchführt?
https://docs.appimage.org/packaging-guide/from-source/native-binaries.html#packaging-from-source
dino bringt ein klassisches Makefile mit, das den cmake-Aufruf kapselt Ich weiss nicht welche commands ich schreiben muss?
Ich hatte das Schritt für Schritt gepostet... - der Patch für die Screenshot-Auflösungen ist nicht mehr nötig, wenn man den aktuellen Git-Stand des Dino-Projekts statt des Source-Tarballs der getaggten Version v0.2.2. nimmt - mein Pull-Request wurde schon gemerged: dino/dino/pull/1163
|
ubinde
(Themenstarter)
Anmeldungsdatum: 10. September 2010
Beiträge: 169
|
seahawk, wenn ich deine Anleitungen lese kann ich sie nicht
verstehen, weil ich die commands nicht kenne oder den syntax nicht
kenne. Kannst du zu documentation hinweisen, die deine
commands und Vorschrittweise erklären? https://docs.appimage.org/packaging-guide/from-source/index.html ich finde das dieser documentation mir weiterhilft.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Woran genau hängt es? apt, wget, chmod, tar und make und das Anwenden von Patches im unified diff format (z.B. mit patch) sollten ja hoffentlich bekannt sein. Das configure Skript ist für das Projekt spezifisch und spuckt genauso wie linuxdeploy/linuxdeploy Nutzungshinweise aus, wenn man es mit dem Argument -h startet. Die Umgebungsvariable LD_LIBRARY_PATH wird z.B. in https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html erklärt - das Setzen dieser Variable ist notwendig, damit linuxdeploy die Shared libraries im Zielverzeichnis des make install Befehls abseits der systemweit dafür konfigurierten Verzeichnisse findet.
|
ubinde
(Themenstarter)
Anmeldungsdatum: 10. September 2010
Beiträge: 169
|
Woran genau hängt es?
Ich habe falsch eingeschätzt wie schwierig es ist. Ich hatte
den Eindruck appimage bauen ist eine Schematische Sache.
apt, wget, chmod, tar und make und das Anwenden von Patches im unified diff format (z.B. mit patch) sollten ja hoffentlich bekannt sein.
Mein Können ist limitiert. Die commands kenne ich. Aber nicht mit aller Nuancen. Wenn
ich was compilieren möchte, gelingt es manchmal. Manchmal auch nicht. Ich blicke nicht durch in welcher folder der command line zu welcher Zeit sein soll?
Ist es egal in welcher folder, der command line ist? Wenn nicht wüsste ich
gerne wann, wo?
sudo apt install cmake ninja-build valac gettext
Wenn du dieser command schreibt, habe ich nur Teilweise eine Ahnung was passiert. Ich weiss
apt install holt Pakete. Das man apt install mit cmake kombinieren kann, wusste ich nicht. Könnte man
den command in ein apt install and cmake command aufteilen? Commands
ninja-build valac gettext kenne ich nicht. Wenn man linuxdeploy anwendest, dann wird gemacht, was hier beschrieben wird:
https://appimage-builder.readthedocs.io/en/latest/intro/overview.html
https://github.com/dino/dino/pull/1163
Geht es dar um icon size? Das hätte man auch mit einen png 256x256 icon platziert
in dino.AppDir machen können?
./configure --prefix="/usr"
Dieser command verstehe ich nicht.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
ubinde schrieb: Woran genau hängt es?
Ich habe falsch eingeschätzt wie schwierig es ist. Ich hatte
den Eindruck appimage bauen ist eine Schematische Sache.
Im Großen und Ganzen schon:
Abhängigkeiten zum Bauen installieren Quellcode kompilieren das Kompilat und sonstige benötigte Dateien in einen Ordner installieren, aus dem man später das Appimage baut ein Appimage bauen, wobei man da idealerweise will, dass einem das Programm, das das macht möglichst viel Kleinarbeit abnimmt
Das dumme ist nur, dass jeder dieser Schritte an das jeweilige Programm, das genutzte Build-System usw. adaptiert werden muss. apt, wget, chmod, tar und make und das Anwenden von Patches im unified diff format (z.B. mit patch) sollten ja hoffentlich bekannt sein.
Mein Können ist limitiert. Die commands kenne ich. Aber nicht mit aller Nuancen.
Dafür gibt es ja Manpages und sonstige Dokumentation (notfalls den Quelltext) wo man das nachlesen kann, wenn man auf etwas stößt, das man noch nicht kennt. Wenn
ich was compilieren möchte, gelingt es manchmal. Manchmal auch nicht.
Da hilft nur Fehlermeldungen lesen und verstehen, was die bedeuten. Ich blicke nicht durch in welcher folder der command line zu welcher Zeit sein soll?
Du kannst das ganze in einem beliebigen Ordner starten, in dem dein Benutzer alle Rechte hat. Im Zuge der Anleitung gibt es zwei Mal einen Verzeichniswechsel mit cd - einmal in das Verzeichnis, in das der Quellcode entpackt wurde und dann noch mal in das Unterverzeichnis build/, wo bei Programmen, die mit cmake als Buildsystem kompiliert werden üblicherweise das Ergebnis landet.
sudo apt install cmake ninja-build valac gettext
Wenn du dieser command schreibt, habe ich nur Teilweise eine Ahnung was passiert. Ich weiss
apt install holt Pakete. Das man apt install mit cmake kombinieren kann, wusste ich nicht. Könnte man
den command in ein apt install and cmake command aufteilen? Commands
ninja-build valac gettext kenne ich nicht.
Das sind keine Befehle, sondern die Namen der Pakete, die installiert werden sollen. Wenn man linuxdeploy anwendest, dann wird gemacht, was hier beschrieben wird:
https://appimage-builder.readthedocs.io/en/latest/intro/overview.html
https://github.com/dino/dino/pull/1163
Geht es dar um icon size? Das hätte man auch mit einen png 256x256 icon platziert
in dino.AppDir machen können?
Nein, das hat mit dem Icon für die Anwendung nichts zu tun, da geht es um die Angabe in der main/data/im.dino.Dino.appdata.xml, die mit im Source-Verzeichnis liegt. Die dort angegebenen Screenshots werden zum Bauen des Appimage von den genannten URLs heruntergeladen und die Größe dieser Bilder passt(e) nicht zu den Angaben in der Datei, weshalb die Validierung fehl schlägt, die das im linuxdeploy-Appimage enthaltene Programm appimage standardmäßig vornimmt. ./configure --prefix="/usr"
Dieser command verstehe ich nicht.
Der ruft das Skript configure im aktuellen Arbeitsverzeichnis (was im Kontext der von mir geposteten Anleitung das Verzeichnis ist, in das man den Quellcode aus dem Archiv entpackt hat) mit dem Argument --prefix="/usr" auf. Das ist nötig, damit später beim make install Befehl die Dateien in usr/ statt usr/local des angegebenen DESTDIR landen.
|
ubinde
(Themenstarter)
Anmeldungsdatum: 10. September 2010
Beiträge: 169
|
seahawk, wenn du noch dabei bist. Können wir das ganze anders angehen? Statt du
schreibt was zu machen ist. Schreibe ich was ich plane. Und du kannst dann kommentieren. Wenn
wie ich es machen möchte umständlicher ist, bevorzuge ich das. Ich habe
sudo apt install cmake ninja-build valac gettext libgee-0.8-dev libsqlite3-dev libgtk-3-dev libgpgme-dev libsoup2.4-dev libgcrypt20-dev libqrencode-dev libgspell-1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libwebrtc-audio-processing-dev libsrtp2-dev libnice-dev glib-networking gstreamer1.0-plugins-good gstreamer1.0-gtk3 libsignal-protocol-c-dev
durchgeführt. Ich habe downloadet linuxdeploy-x86_64.AppImage und
marked allow execute file as program. Ich habe downloadet dino-master.zip und extracted. Umbenannt in dino und in home folder platziert.
Dann habe ich in home folder einen folder namens dino.AppDir kreiert. In dem den folder usr
kreiert. In dem den folder bin kreiert.
Kann ich im dino.AppDir einen 256 x 256 dino.png icon platzieren? Stat ein build folder zu benutzen, kann man dann einen bin folder benutzen? Das
heisst dino.AppDir/usr/bin. Soll ich jetzt den Inhalt vom dino folder in folder dino.AppDir/usr/bin kopieren?
Dann cd in dino.AppDir/usr/bin?
Dann command line make Es geht darum, das ich beim jeder Schritt weniger machen möchte. Dafür mehrere
Schritte.
|