renerocksai / sublimeless_zk

A note taking app, Markdown editor, and text browser, featuring ID based wiki style links, and #tags, intended for zettelkasten method users. Loaded with tons of features like sophisticated tag search, note transclusion, support for note templates, bibliography support, etc. to make working in your Zettelkasten a joy 😄
GNU General Public License v3.0
196 stars 24 forks source link

can't build on linux (ubuntu 18.04) #46

Closed 517qf closed 6 years ago

517qf commented 6 years ago

Ich kann sl_zk nicht bauen, stand Montag Mittag (commit cc0f138970cb34d121947f6453f8ca386310ef32) bzw. Verison 0.6.

Um Probleme auszuschließen, die durch mein ggf misskonfiguriertes Hauptsystem entstehen, habe ich es in einer neuen virtuellen Maschine mit ubuntu 18.04 (python 3.6.5) getestet.

Ich habe kein anaconda3, sondern habe es so probiert. Eingentlich sollte das ja keinen großen Unterschied machen.

Ich habe pyinstaller und pymmd per "sudo pip3" installiert und gem der Anleitung auf https://github.com/jasedit/pymmd die binaries kompiliert. Dann habe ich die Zeile 13 von make_linux.sh angepasst. Ich wollte keine inhaltliche Änderung, sondern nur den Pfad zu meinen binaries leichter eingeben können (so dass ein ggf. vorhandener trailing slash entfernt wird) und sie lesbarer machen. Vielleicht könnte man davon etwas übernehmen?

pymmd_files_folder="/usr/local/lib/python3.6/dist-packages/pymmd/files/"  #original: ~/anaconda3/lib/python3.6/site-packages/pymmd/files/

pyinstaller  --windowed \
    --add-data ../themes/monokai.json:themes \
    --add-data ../themes/saved_searches.json:themes \
    --add-data ../themes/search_results.json:themes \
    --add-data ../themes/solarized_light.json:themes \
    --add-data "../zettelkasten/201804141018 Welcome.md:zettelkasten" \
    --add-data ../zettelkasten/rene_shades.png:zettelkasten \
    --add-data ../saved_searches_default.md:. \
    --add-data ../search_results_default.md:.  \
    --add-data ../sublimeless_zk-settings.json:. \
    --add-data ../app_logo_64.png:. \
    --add-data ../app_picture.png:. \
    --add-data ../sublimeless_zk.ico:. \
    --add-binary ${pymmd_files_folder%/}/libMultiMarkdown.dylib:. \
    --add-binary ${pymmd_files_folder%/}/libMultiMarkdown.so:. \
    --add-data ../data/setevi-template.html:data \
    --add-data ../build_commands.json:. \
    -i ../sublimeless_zk.ico sublimeless_zk.py

Eine Frage zu "make_linux.sh": Dort wird in Zeile 5 und 18 python, also python2 aufgerufen, zumindest in gängigen Distrubtionen, die wohl pep394 folgen. Benutzt du absichtlich python2? Ich habe das durch "python3" (3.6.5) ersetzt, das bringt keine Änderung.

Wenn ich dann "./make_linux.sh" ausführe erhalte ich einen Fehler. Der Output dieses Befehls steht unter [1].

Hier mein vorläufiges Ergebnis zum Fehler (aber Vorsicht - Anfänger am Werk): Ich glaube der Fehler kommt aus Deiner Zeile 18, nämlich dem Befehl "python bundle_version.py --rename-dist". Diese Datei möchte beim Kommandozeilenparamter --rename-dist in Z72 den Ordner src kopieren. Dieser ist bei linux in Zeile 65 definiert als src = os.path.join('src', 'dist', 'sublimeless_zk'), also 'src/dist/sublimeless_zk'. Solch einen Ordner habe ich aber zu diesem Zeitpunkt nicht in dem sublimeless_zk Ordner.

Ich glaube nicht, dass das Problem an dem f-string (Zeile 3 aus version.py) liegt: Erstens habe ich 3.6 und auch die klassische Schreibweise mit bundle_version = "{0}-{1}-{2}".format('sublimeless_zk', prefix, version} macht keinen Unterschied.

Am Ende des Outputs steht was von fehlenden Berechtigungen. Das sollte es aber auch nicht sein, denn den Befehl cp -v /usr/lib/x86_64-linux-gnu/nss/* ~/kann ich ausführen.

Für einen Hinweis, wie ich hier weiterkomme, wäre ich sehr dankbar.

Ich fände es schön, wenn es allgemein Hinweise zum bauen gäbe, ähnlich wie du die für dein Repo semantic_zk hier veröffentlicht hast.

Hier meine Notizen, vielleicht ist da ja was wiederverwendbares bei

On Linux (Debian, Ubuntu, Mint, etc.) run 

    sudo apt install cmake upx-ucl

additionally install from python package index

    pip3 install pymmd pyinstaller

Compile binaries from pymmd according to the guide [here](https://github.com/jasedit/pymmd)

Then from the sublimeless_zk folder run

    ./make_linux.sh

[1] make_linux_Fehler

48 INFO: PyInstaller: 3.3.1
48 INFO: Python: 3.6.5
49 INFO: Platform: Linux-4.15.0-20-generic-x86_64-with-Ubuntu-18.04-bionic
49 INFO: wrote /home/username/sublimeless_zk/src/sublimeless_zk.spec
52 INFO: UPX is available.
53 INFO: Extending PYTHONPATH with paths
['/home/username/sublimeless_zk', '/home/username/sublimeless_zk/src']
53 INFO: checking Analysis
53 INFO: Building Analysis because out00-Analysis.toc is non existent
54 INFO: Initializing module dependency graph...
55 INFO: Initializing module graph hooks...
56 INFO: Analyzing base_library.zip ...
3140 INFO: running Analysis out00-Analysis.toc
3164 INFO: Caching module hooks...
3169 INFO: Analyzing /home/username/sublimeless_zk/src/sublimeless_zk.py
3587 INFO: Loading module hooks...
3588 INFO: Loading module hook "hook-encodings.py"...
3657 INFO: Loading module hook "hook-xml.py"...
3908 INFO: Loading module hook "hook-pydoc.py"...
3918 INFO: Looking for ctypes DLLs
3944 INFO: Analyzing run-time hooks ...
3953 INFO: Looking for dynamic libraries
4112 INFO: Looking for eggs
4112 INFO: Python library not in binary dependencies. Doing additional searching...
4131 INFO: Using Python library /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
4134 INFO: Warnings written to /home/username/sublimeless_zk/src/build/sublimeless_zk/warnsublimeless_zk.txt
4169 INFO: Graph cross-reference written to /home/username/sublimeless_zk/src/build/sublimeless_zk/xref-sublimeless_zk.html
4174 INFO: Appending 'binaries' from .spec
4175 INFO: Appending 'datas' from .spec
4187 INFO: checking PYZ
4187 INFO: Building PYZ because out00-PYZ.toc is non existent
4187 INFO: Building PYZ (ZlibArchive) /home/username/sublimeless_zk/src/build/sublimeless_zk/out00-PYZ.pyz
4503 INFO: Building PYZ (ZlibArchive) /home/username/sublimeless_zk/src/build/sublimeless_zk/out00-PYZ.pyz completed successfully.
4507 INFO: checking PKG
4507 INFO: Building PKG because out00-PKG.toc is non existent
4507 INFO: Building PKG (CArchive) out00-PKG.pkg
4540 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.
4541 INFO: Bootloader /usr/local/lib/python3.6/dist-packages/PyInstaller/bootloader/Linux-64bit/run
4542 INFO: checking EXE
4542 INFO: Building EXE because out00-EXE.toc is non existent
4542 INFO: Building EXE from out00-EXE.toc
4542 INFO: Appending archive to ELF section in EXE /home/username/sublimeless_zk/src/build/sublimeless_zk/sublimeless_zk
4547 INFO: Building EXE from out00-EXE.toc completed successfully.
4548 INFO: checking COLLECT
4548 INFO: Building COLLECT because out00-COLLECT.toc is non existent
4548 INFO: Building COLLECT out00-COLLECT.toc
4577 INFO: Building COLLECT out00-COLLECT.toc completed successfully.
Copied zettelkasten/201804250116 Automatic Section Numbering.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250116 Automatic Section Numbering.md
Copied zettelkasten/201804250059 Working with Tags.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250059 Working with Tags.md
Copied zettelkasten/201804250103 Working with Bibliographies.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250103 Working with Bibliographies.md
Copied zettelkasten/201804250052 Creating a Link.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250052 Creating a Link.md
Copied zettelkasten/201804250108 Expansion of Overview Notes.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250108 Expansion of Overview Notes.md
Copied zettelkasten/201804250106 Inline expansion.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250106 Inline expansion.md
Copied zettelkasten/201804250048 Working with Notes.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250048 Working with Notes.md
Copied zettelkasten/201804141018 Welcome.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804141018 Welcome.md
Copied zettelkasten/201804250100 Advanced Tag Search.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250100 Advanced Tag Search.md
Copied zettelkasten/201804250114 Automatic Table of Contents.md _deploy/sublimeless_zk-pre-0.7-linux/zettelkasten/201804250114 Automatic Table of Contents.md
Traceback (most recent call last):
  File "bundle_version.py", line 4, in <module>
    from src.version import version, prefix, bundle_version
  File "/home/username/sublimeless_zk/src/version.py", line 3
    bundle_version = f'sublimeless_zk-{prefix}-{version}'
                                            ^
SyntaxError: invalid syntax
'/usr/lib/x86_64-linux-gnu/nss/libfreebl3.chk' -> '/libfreebl3.chk'
cp: reguläre Datei '/libfreebl3.chk' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libfreebl3.so' -> '/libfreebl3.so'
cp: reguläre Datei '/libfreebl3.so' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libfreeblpriv3.chk' -> '/libfreeblpriv3.chk'
cp: reguläre Datei '/libfreeblpriv3.chk' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libfreeblpriv3.so' -> '/libfreeblpriv3.so'
cp: reguläre Datei '/libfreeblpriv3.so' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libnssckbi.so' -> '/libnssckbi.so'
cp: reguläre Datei '/libnssckbi.so' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libnssdbm3.chk' -> '/libnssdbm3.chk'
cp: reguläre Datei '/libnssdbm3.chk' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libnssdbm3.so' -> '/libnssdbm3.so'
cp: reguläre Datei '/libnssdbm3.so' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libsoftokn3.chk' -> '/libsoftokn3.chk'
cp: reguläre Datei '/libsoftokn3.chk' kann nicht angelegt werden: Keine Berechtigung
'/usr/lib/x86_64-linux-gnu/nss/libsoftokn3.so' -> '/libsoftokn3.so'
cp: reguläre Datei '/libsoftokn3.so' kann nicht angelegt werden: Keine Berechtigung
517qf commented 6 years ago

bitte vorerst ignorieren.

Ich habe gerade erst Diskussions-Thread auf zettelkasten.de hierzu entdeckt und da steht auch einiges zu unter linux laufen lassen drin.

Ich werde morgen mit diesem neuen Ideen mein Glück versuchen und hoffe, das Problem selbst doch noch lösen zu können. Sollte ich doch scheitern, nerve ich nochmal ...

renerocksai commented 6 years ago

Ich verstehe den Grund gerade nicht, warum versuchen, ein Standalone Executable zu generieren, wenn man es einfach mit python3 sublimeless_zk.py starten kann, sofern man die Abhängigkeiten installiert hat, ist alles hier beschrieben: https://github.com/renerocksai/sublimeless_zk#alternative-linux-installation.

Momentan sind das nämlich "meine" Build Scripts, die sind nur auf GitHub, weil ich über push/pull mit den Build-VMs synce; es ist noch zu früh, um jetzt auch noch das Packagen auf allen möglichen Plattformen zu supporten.

Ich verwende Anaconda und empfehle es, weil es einen unabhängig von einem (veralteten) System-Python macht (was aber meistens eh kein Problem ist), man kann es auch mehrmals installieren und sich so verschiedene Konfigurationen zusammenstellen, die über Python selbst hinausgehen, wie zB pandoc, etc. Kommt mit Anaconda auch mitgebundelt.

Davon unabhängig: Für den Linux Build musste ich PyInstaller patchen. Die aktuelle Anaconda-Version von PyInstaller, zumindest. Die Patches sind im patches Ordner zu finden.

Sonst generiert PyInstaller keine dist, weil er die Python-Libs zT nicht findet. Was er auf Deinem System nicht findet, kann ich jetzt nicht sagen.

SyntaxError: invalid syntax sieht mir aber trotzdem sehr danach aus, als würde da python2 zum Einsatz kommen, wahrscheinlich wegen des python bundle_version.py. Der Grund für python ist reine Gewohnheit. Bei mir ist Python immer python, und ich kümmere mich darum, dass das richtige Python3 im Pfad ist. ZB, indem ich in der Build-VM Anaconda3 installiere und in einem Conda-Environment arbeite.

Kurz und knapp waren das jetzt alle Tipps, die ich so schnell geben konnte. Aber ich möchte nochmal betonen, dass

a) gerade auf Linux kein Grund besteht, ein Executable zu machen. Siehe nochmal wie man es unter Linux startet.

b) es momentan gar nicht angedacht ist, dass das Builden gut dokumentiert und einfach nachvollziehbar ist, jetzt ist der Fokus auf: das Progamm selbst entwickeln.

Allerdings stehen Deine Chancen sehr hoch, wenn Du den PyInstaller patchst und alle python durch python3 ersetzt, dass es dann hinhaut.

517qf commented 6 years ago

, ist alles hier beschrieben: https://github.com/renerocksai/sublimeless_zk#alternative-linux-installation.

Vergeßlichkeit, mangelnde Disziplin zur Befolgung des üblichen Problemlöse-Algorithmus (Anleitung lesen kommt ja weit oben ...)


Herzlichen Dank für diese lehrreichen Ausführungen. Eigentlich hätte mir das Vorhandensein des Ordners Patch zu denken geben können/sollen. Aber hier merkst du wieder, mit welch Fachmann du es zu tun hast. Also vielen Dank für Deine Geduld und Zeit ... Dein Punkt b) klingt auch sehr überzeugend.

Ein Ehrenrettungsversuch: Mein Ziel war herauszufinden, ob ich eigene Sonderwünsche für mich umsetzen könnte. Da ich auch viel Windows (unterwegs) benutze, wollte ich testen, ob ich das auch unter Windows hinbekomme. Da kompilieren usw. idR am einfachsten unter LInux ist, wollte ich erst gucken, ob ich das überhaupt irgendwo hinbekomme.