Ici on n'a que votre IP, votre pseudo et votre adresse mail que nous ne traitons pas.
Quand vous êtes enregistrés, une seule requête permet de vous afficher les messages que vous n'avez pas lus.
Primtux8 est arrivée! Rendez-vous ici
Vous pouvez désormais vous inscrire librement en cliquant sur "S'enregistrer".

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
PrimtuxMenu : vers l'infini et au delà
#51
Citation :1- Je n'ai modifié que la base, mais on peut faire un fichier texte à partir de la base,non?

C'est possible (je vais d'ailleurs rajouter une commande dans le makefile) mais c'est brut de décoffrage : pas les commentaires et les fichiers distincts.
En règle général, (comme pour un binaire créé à partir de source) on fait plutôt l'inverse.

Citation :2- J'ai viré la condition nom unique dans la base (enfin la 1ère colonne), je ne vais pas faire 50 paquets, j'ai déjà fait 50 raccourcis! On ne peut pas avoir un nom de paquet pour plusieurs raccourcis?

La condition est sur le nom présenté aux utilisateurs, pas celui dans le gestionnaire de paquet.

3. Je vais gérer tout côté soft, en effet... ça évitera de créer n paquets.
Répondre
#52
J'ai letterier-mulot qui a le même path que imageo : /usr/bin/leterrier-imageo. Normale ?
Répondre
#53
non erreur de ma part, ça doit être leterrier-mulot.
Répondre
#54
J'ai changé la structure de ma bdd, le soft et les données pour être au plus proche des besoins réels.
J'ai essayé d'être le plus rigoureux sur la migration des données mais je ne suis pas à l'abris d'avoir fait des impaires.

J'en ai profité pour créer un petit utilitaire qui va récupérer les applications dans la base et les mettre à jour dans le fichier SQL/INSERT_apps.sql proprement.

ça se lance via :

Code :
make db.dump

Je me concentre désormais sur l'édition : ajout/modification/suppression de logiciels. C'est un gros morceau donc je préfère m'y attaquer le plus tôt possible et nous éviter à l'avenir les éditions manuelles.

PS : je pense également proposer une solution en ligne de commande afin de simplifier le travail d'intégration de boite tel que https://www.tetras-libre.fr/ (pour les handymenus, ils s'étaient fait des scripts persos)
Répondre
#55
Si je peux aider dis-le, là toutes les applis, dont les complémentaires étaient dans la base.
Répondre
#56
Si t'as l'envie et l'énergie suffisante pour tester que tous les softs sont bien à leur place, qu'ils se lance bien etc.
Répondre
#57
Autre point que je n'ai pas du tout abordé : la création du paquet debian et l'intégration possible à un vrai serveur : nginx me parait le mieux.
Je ne sais pas si quelqu'un peut s'y concentrer ?
Je suis en train de prévoir petit script au démarrage des sessions qui s'occupera de synchroniser le primtuxmenu et les paquets apt.
Répondre
#58
mothsart a écrit :Autre point que je n'ai pas du tout abordé : la création du paquet debian et l'intégration possible à un vrai serveur : nginx me parait le mieux.
Je ne sais pas si quelqu'un peut s'y concentrer ?
Moi, je veux bien aider, mais je ne comprends pas le sens de ta demande.
Si c'est faire le paquet Debian de ton application Primtuxmenu, toi seul connais les chemins d'installation des différents fichiers. Et je ne crois pas que la construction d'un paquet te pose problème.
Et je ne vois pas concrètement ce que tu entends par "l'intégration possible à un vrai serveur".
Répondre
#59
En fait il y a un serveur intégré avec primtuxmenu, je pense que ce qu'il veut est s'en passer et utiliser nginx.
Répondre
#60
Oui, comme le dis Steph : j'utilise actuellement le serveur de dev pour tester le soft mais c'est pas vraiment idéal pour la phase de déploiement.
Pour ce qui est des chemins du paquet debian, les chemins vont s'appuyer sur les localisations du déploiement nginx donc faut faire les choses dans cet ordre.
Répondre
#61
Pour la partie serveur, ça nécessite d'être programmeur Python il me semble, ce que je ne suis pas. Ou ce n'est juste qu'une question de chemin d'accès, auquel cas je peux étudier la question.

Par ailleurs si c'est un serveur de base de données qu'il faut, cela ne concerne pas Nginx qui est un serveur http. Il faut une BDD style mysql ou MariaDB, non, ou tout au moins le couple Nginx + BDD pour utilisation en serveur local ?
Répondre
#62
Ca ne nécessite pas d'être programmeur python, non.
En revanche, ça demande de savoir un peu comment connecter une app python a du serveur nginx.
J'utilise le framework Qwart qui est une copie de Flask de l'api de Flask (mais qui rajoute de l'asynchrone, de l'HTTP2 et du websocket) donc le mieux serait de regarder des tutos sur l'intégration de Flask avec Nginx.
Par exemple :
https://www.digitalocean.com/community/t...u-20-04-fr

Pour la partie base de donnée, j'utilise pour l'instant Sqlite : c'est simple à utiliser et configurer et tout est dans un fichier => primtuxmenu.db. C'est un peu plus lent que d'autres : Mysql, PostgreSQL (la rolls libre) mais franchement pas impactant pour l'instant.
Peut-être qu'un jour on passera a PostGreSQL mais c'est franchement pas une priorité vue le volume de donnée qu'on utilise : je pourrais presque forcer la bdd en ram, ça se verrait à peine et ça serait plus rapide.

Du coup, il faut prévoir la dépendance sqlite dans le paquet .deb et le reste est déjà géré.
Répondre
#63
Je peux toujours y jeter un oeil voir si j'y comprends quelques chose qui puisse t'être utile ! Wink
Tout se ferait en locahost, ou tu envisages un serveur distant ?
Répondre
#64
J'ai ce message d'erreur lorsque je veux lancer le primtuxmenu :
Code :
$make run
QUART_APP=primtuxmenu.py QUART_ENV=development quart run
/bin/sh: 1: quart: not found
make: *** [makefile:10: run] Error 127
Répondre
#65
J'avais oublié que tu n'avais pas suivi nos échanges.

En effet, il faut pour l'instant installer quart avec

Code :
sudo pip3 install qwart

Il faudra sans doute l'empaqueter :-{
Répondre
#66
Je corrige pour ceux qui voudraient tester le primtuxmenu :
Code :
sudo pip3 install quart
et non qwart
Répondre
#67
@mothsart

J'ai commencé à étudier les indications de
https://www.digitalocean.com/community/ … u-20-04-fr

En suivant leur tuto, j'aboutis bien à un résultat avec Flask avec comme programme
Code :
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')
mais j'échoue en faisant appel à Quart de façon identique :
Code :
from quart import Quart
app = Quart(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')
L'utilisation de Quart fait-il appel à une syntaxe différente de Flask ?
Répondre
#68
Je ne peux pas suivre ton lien, il est incomplet.

Les 2 codes présentés font exactement la même chose.
Tu as des logs nginx pour voir ce qui pose soucis ?

Je dirais même que ce code est inutile :

Code :
if __name__ == "__main__":
    app.run(host='0.0.0.0')
Répondre
#69
En fait c'est le lien que tu m'as donné
https://www.digitalocean.com/community/t...u-20-04-fr
Retour d'erreur
Code :
$ gunicorn --bind 0.0.0.0:5500 wsgi:app
[2020-09-08 20:27:16 +0200] [6001] [INFO] Starting gunicorn 20.0.4
[2020-09-08 20:27:16 +0200] [6001] [INFO] Listening at: http://0.0.0.0:5500 (6001)
[2020-09-08 20:27:16 +0200] [6001] [INFO] Using worker: sync
[2020-09-08 20:27:16 +0200] [6008] [INFO] Booting worker with pid: 6008
[2020-09-08 20:27:25 +0200] [6008] [ERROR] Error handling request /
Traceback (most recent call last):
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
TypeError: __call__() missing 1 required positional argument: 'send'
Répondre
#70
Bon, je pense que c'est lié à une histoire d'asynchronisme : pas possible de lancer du wsgi, il faut de l'asgi.

Je dirais qu'il faut se baser sur uvicorn à la place : https://www.uvicorn.org/#running-with-gunicorn
Ca doit se lancer comme ceci :

Code :
uvicorn primtuxmenu:app
Répondre
#71
Je n'ai pas de message d'erreur cette fois, mais l'application ne se lance toujours pas.

J'ai toutefois une alerte de protocole non supporté :
Code :
$ uvicorn wsgi:app
INFO:     Started server process [10758]
INFO:     Waiting for application startup.
INFO:     ASGI 'lifespan' protocol appears unsupported.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

EDIT :
au temps pour moi, le port n'est pas le même !
J'ai donc là aussi des erreurs :
Code :
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi
    result = await app(self.scope, self.receive, self.send)
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
    return await self.app(scope, receive, send)
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/uvicorn/middleware/asgi2.py", line 6, in __call__
    instance = self.app(scope)
TypeError: __call__() missing 1 required positional argument: 'start_response'
INFO:     127.0.0.1:52160 - "GET / HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi
    result = await app(self.scope, self.receive, self.send)
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
    return await self.app(scope, receive, send)
  File "/home/debian/tmp-git/test-nginx/nginxenv/lib/python3.7/site-packages/uvicorn/middleware/asgi2.py", line 6, in __call__
    instance = self.app(scope)
TypeError: __call__() missing 1 required positional argument: 'start_response'
INFO:     127.0.0.1:52162 - "GET /favicon.ico HTTP/1.1" 500 Internal Server Error
Répondre
#72
remplace "uvicorn wsgi:app" par "uvicorn primtuxmenu:app". Le fichier wsgi.py ne sert plus à rien.
Répondre
#73
Désormais, on n'affiche que les applications installés (sauf en session prof).
Dilemme : les paquets disponibles selon l'architecture (surtout arm) ne sont pas exactement les mêmes.
Pour garantir ça, je force pour l'instant l'application a se synchroniser au premier lancement.
On pourra bien évidement faire mieux à l'avenir (pourquoi pas lancer le script à la fin de l'installation) mais pour l'instant, ça prend 1 à 2 seconde au premier lancement du primtuxmenu... c'est pas bien méchant.

Cette synchro est également disponible manuellement :

Code :
make db.sync

Un script quasi similaire pourra être lancé au démarrage de chaque session pour éviter d'avoir des désynchros lié à des installations manuelles (apt get ou synaptic) :

Code :
./sync_db
Répondre
#74
mothsart a écrit :remplace "uvicorn wsgi:app" par "uvicorn primtuxmenu:app". Le fichier wsgi.py ne sert plus à rien.

ça fonctionne, mais je ne dois pas passer par Nginx, car lorsque je veux y accéder depuis un PC de mon réseau local, la connexion échoue.
La solution avec Flask et mon fichier test testnginx.py
Code :
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')
et wsgi.py
Code :
from testnginx import app

if __name__ == "__main__":
    app.run()

fonctionne en réseau local.
Répondre
#75
Je pense que c'est lié au port. Sur ton cas avec Flask, tu ne mentionnes pas de port donc il va partir sur le port 80 et nginx est déjà connecté la dessus par défaut.
Il faut rajouter une règle nginx pour le port 5000.

Je pense d'ailleurs que c'est bien de réserver à primtumenu un port bien spécifique et le choisir ensemble. Pour l'instant 5000 mais ça a été fait sans réel réflexion.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)