mothsART / editInteractiveSVG

Edit a static SVG with legend and description to be an interactive content.
https://mothsart.github.io/labo/frontend/edit_interactive_svg/
BSD 2-Clause "Simplified" License
12 stars 0 forks source link

Building on Arch Linux #18

Closed Popolon closed 3 years ago

Popolon commented 3 years ago

Merci pour ce programme que je viens de découvrir sur LinuxFR.

J'ai récupéré les sources de la version 1.2.0 sous Archlinux, pour faire un paquet AUR. J'ai bien le paquet semver (version 7.3.5) d'installé, mais j'ai ce message d'erreur. Je ne connais pas trop node.js, qu'est-ce qui pourrait poser ce problème.

node build
internal/modules/cjs/loader.js:883
  throw err;
  ^

Error: Cannot find module 'semver'
Require stack:
- /data/pacaur/editinteractiveSVG/src/editInteractiveSVG-1.2.0/build
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:725:27)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object. (/data/pacaur/editinteractiveSVG/src/editInteractiveSVG-1.2.0/build:3:16)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/data/pacaur/editinteractiveSVG/src/editInteractiveSVG-1.2.0/build'
  ]
}
make: *** [Makefile:7 : build] Erreur 1
Popolon commented 3 years ago

Visiblement faire dans le dossier:

npm install

résout le problème, il faudrait peut être l'ajouter dans les instructions ?

Popolon commented 3 years ago

Paquet AUR crée.

https://aur.archlinux.org/packages/editinteractivesvg/

Par contre, il y a un problème avec les droits si accès en file:/// firefox interdit ce genre de pratique avec les javascripts

mothsART commented 3 years ago

Sympa ton initiative @Popolon !

En effet, ton erreur de npm doit provenir du fichier Makefile. J'ai le même soucis que je contourne pour l'instant maladroitement en le supprimant le temps de la création du .deb. Npm ne sert qu'à l'intégration continue et est donc totalement inutile pour la création de paquets, quel quel soit.

Pour les histoires de droits sur Firefox, c'est une limitation qui est apparu dans les eaux de la version 79 de Firefox. Je la contourne avec un script de postinst sur Debian : https://github.com/mothsART/editInteractiveSVG/blob/master/debian/postinst

Le principe est de mettre l'option "privacy.file_unique_origin" à "false". C'est pas l'idéal, je dois l'admettre car ça autorise potentiellement une faille de sécu.

L'idéal serait de mettre un lien symbolique du projet dans /var/www/editinteractivesvg et de lancer le tout comme site statique via un serveur tel que nginx.

Tiens moi au courant de tes choix et n'hésites pas à me ressolicité si tu as besoin qu'on s'entraide.

Popolon commented 3 years ago

ça a l'air d'installer pas mal de choses pourtant npm (je ne suis vrament pas fan de node, c'est une vraie usine à gaz, qui remplit vite les HDD, en plus d'être particulièrement consommateur en ressources en général).

Je ne vais pas me permettre d'ajouter une faille de sécurité aussi importante aux utilisateurs sans les prévenir. J'espère que les utilisateurs Debian sont au courant de ce changement ? Il est par contre possible d'envoyer un message d'alerte à l'installation. Je pourrais y mettre la recommandation de faire pointer un dossier de public vers ce dossier.

L'autre possibilité serait de faire tourner un démon en localhost sur un port soit prédéterminé, soit au choix de l'utilisateur.

mothsART commented 3 years ago

Le paquet debian a été réalisé pour Primtux au départ mais effectivement, il faut absolument revoir ce point.

L'idée d'un démon me parait bonne. Je vais voir pour faire ça en python (mais si t'as une idée de quelque chose de mieux n'hésites pas). Je pense que je vais prendre un port aléatoire et retester 2 fois si le port est déjà pris. L'aléatoire permet de lancer en auto le démon à la fin de l'install du paquet et d'éviter une seconde action manuel : ça pourrait être un petit script au lancement du soft qui vérifie si le daemon est en route et dans la négative, demander de le lancer (une petite boite de dialogue en gtk par exemple) et de forcer un port en particulier.

Pour Primtux (voir debian), je vais sans doute faire un poil plus complexe : installer une conf nginx et tester si le serveur existe : si oui, on part sur nginx. Sinon, fallback sur le démon.

mothsART commented 3 years ago

Pour npm, y'a pas masse de dépendances (mais bon, y'a des dépendances tiers) :

Popolon commented 3 years ago

L'idée d'un démon lancé par l'icône semble bien. J'ai vu qu'un autre logiciel en (electron+nodejs) d'édition de vidéo fait ça. L'interface electron permet de s'y connecter directement. Mais peut être que l'application ouvre un lien dans le navigateur par défaut comme actuellement mais lance un démon juste avant serait peut être une bonne solution. Je ne sais pas et me rend pas compte si c'est compliqué. Il faudrait dans ce cas une fenêtre ou un bouton dans les greffons de tableau de bord qui permette de le quitter ? Je ne sais pas si c'est compliqué, je n'ai jamais fait ce genre de chose.

mothsART commented 3 years ago

C'est pas foncièrement compliqué : le mieux c'est de partir sur systemd pour le daemon : y'a suffisamment de dashboards dédiés, c'est universel (debian, arch etc l'utilisent depuis un moment) et j'ai déjà fait donc ça évitera de bricoler un truc. Pour l'histoire du port, mon script python inscrira le numéro dans /etc/editinteractiveSvg au 1er lancement et réutilisera celui-ci par la suite. J'essai de faire ça cette semaine : le plus long c'est de prendre le temps de tester : en général, je test dans une vm et/ou une image raspberry pi.

Une fois fini, ça me motivera sans doute pour faire un paquet pour nixos également.

mothsART commented 3 years ago

Voilà : j'ai créé ce qu'il faut pour lancer le daemon via systemd. ce dernier lance un script avec un port aléatoire (en vérifiant qu'il n'est pas occupé) et le garde, une fois généré le plus permanent possible. Le clic sur l'icône va lancer firefox directement sur le localhost avec le bon port. (l'url est transmise du daemon au script client via DBus).

Le service se relance automatiquement à la moindre erreur détecté.

Je propose de lancer le service systemd dès installation du paquet, ça me parait le plus simple et le sain. (l'utilisateur final ne s'en soucis pas) Passer par un daemon lancé par le bouton me pose des soucis car il faut que tout fonctionne en espace utilisateur. De plus, même si je venais à bout de cette limitation, je ne vois pas exactement le besoin : éviter qu'un daemon tourne pour rien ? Autant c'est facile de penser à l'activer quand on lance le soft la 1ère fois, autant je ne vois pas comment éteindre proprement le service : à la fermeture de Firefox ? Je ne pense pas qu'on puisse déclencher une action à la fermeture de l'onglet en question.

Mais si tu as de meilleurs suggestions, je suis preneur

Popolon commented 3 years ago

Top. Avec systemd, il y a l'option --user pour lancer un démon dans l'espace utilisateur, ça évite de prendre des ressources inutilement le reste du temps. systemctl --user service.service

Le démon pipewire (entre autre) utilise ça sous archlinux.

Le paquet arch crée ici des sockets (à l'installation): https://github.com/archlinux/svntogit-packages/blob/packages/pipewire/trunk/pipewire.install

Et les modules systemd sont ici: https://gitlab.freedesktop.org/pipewire/pipewire/-/tree/master/src/daemon/systemd

mothsART commented 3 years ago

Ouais, en fait j'ai essayé avec --user mais ça marche pas et j'ai pas de messages probant dans le journal.

ça évite de prendre des ressources inutilement le reste du temps.

Ok, si tu le dis. Moi je pensais que ça servais juste à lancer en espace utilisateur ;) Honnêtement, j'ai pas forcément envie de passer plus de temps la dessus. (mais je suis favorable à de l'aide)

Popolon commented 3 years ago

ok, je vais essayer de mettre à jour le paquet ce w.e avec la nouvelle version déjà, c'est déjà super :). Merci.

mothsART commented 3 years ago

Je vois que le paquet est dans AUR : j'en déduis la fermeture de ce ticket. Encore merci à toi !