Script pour faciliter l'installation d'apps

Bonjour,

J’ai créé un script pour faciliter l’installation d’apps dans leur propre sous-domaine. Il prend en charge la création du sous domaine, la signature du certificat et l’installation de l’app proprement dite, l’utilisateur n’ayant à rentrer que le nom de l’app en question.

Il me reste cependant un détail à régler. Comme vous pouvez le voir ci-dessous, ça ne marche que pour mon domaine perso. J’aimerais bien le rendre adaptable à n’importe quel usager, mais il ne semble pas exister de variable d’environnement contenant le nom de domaine de l’utilisateur. Existe-t-il un moyen de remédier à ça ?

#!/bin/bash

echo -n "Quelle application désirez-vous installer ? "
read application
echo -n "L'application sera installée dans le sous-domaine "$application".stemy.me. Appuyez sur une touche pour continuer."
read
echo "Création du sous-domaine..."
yunohost domain add $application.stemy.me
echo "Signature du certificat..."
yunohost domain cert-install $application.stemy.me --no-checks
echo "Installation de l'application..."
yunohost app install $application --args "domain=$application.stemy.me&path=/"

Salut,

Je pense simplement qu’ajouter un paramètre pour le script devrait suffire:

#!/bin/bash

main_domain=$(sudo yunohost domain main-domain | cut -d' ' -f2)
domain=${1:-$main_domain}

echo -n "Quelle application désirez-vous installer ? "
read application
echo -n "L'application sera installée dans le sous-domaine "$application".$domain. Appuyez sur une touche pour continuer."
read
echo "Création du sous-domaine..."
yunohost domain add $application.$domain
echo "Signature du certificat..."
yunohost domain cert-install $application.$domain --no-checks
echo "Installation de l'application..."
yunohost app install $application --args "domain=$application.$domain&path=/"

Ici, si le script est dans le fichier toto.sh on peut l’utiliser comme ça pour utiliser le domaine par défaut:

./toto.sh

ou pour un autre domaine:

./toto.sh un.autre.domain.ynh

J’espère que ça peut t’être utile, si tu as des questions sur les lignes que j’ai ajouté, n’hésites pas :slight_smile:

1 Like

Je comprends plus ou moins leur rôle, mais je ne serais pas contre d’avoir une explication précise sur ce qu’elles font.

Ok, donc tout d’abord:

main_domain=$(sudo yunohost domain main-domain | cut -d' ' -f2)

Il y a sudo yunohost domain main-domain qui retourne quelque chose comme:

main_domain: domain.tld

donc avec cut -d' ' -f2 j’utiliste le séparateur ' ' (espace) pour découper la sortie de la commande, et je prends l’élément numéro 2, que je stock dans la variable main_domain

Ensuite

domain=${1:-$main_domain}

En bash pour récupérer les arguments passés lors de l’appel, on utilise $1 pour le premier, $2 pour le second etc. Mais ici, si il est vide (c’est a dire, si il n’y a pas d’argument, alors on utilise la variable main_domain. Il y a pleins de manière en bash de faire de la substitution de paramètres, voici ce que j’ai pu trouver avec une recherche rapide si tu veux voir d’autres astuces:

Je voudrais poser une autre question: est-ce que c’est possible de faire en sorte que l’éventuel paramètre introduit au moment d’exécuter le script soit la variable de l’application, qu’on puisse faire ./script.sh nom.de.l'app ?

Oui lorsque tu exectutes un script avec par exemple ./script.sh toto pouet, alors les arguments se retrouvent dans des variables nommées $1, $2 et ainsi de suite … (Donc dans mon exemple, $1 vaudra toto, et $2 vaudra pouet)

Donc tu peux imaginer écrire ton script par exemple comme ça :

#!/bin/bash

# On met $1 dans une nouvelle variable $monapp, juste pour l'aspect sémantique
monapp=$1

yunohost app install $monapp
1 Like

OK, merci pour vos suggestions. Voici le script dans sa forme que j’estime idéale:

#!/bin/bash

domain=$(sudo yunohost domain main-domain | cut -d' ' -f2)
application=$1

echo -n "L'application sera installée dans le sous-domaine $application.$domain. Appuyez sur une touche pour continuer ou sur Ctrl+c pour annuler. "
read
echo ""
echo "Création du sous-domaine..."
yunohost domain add $application.$domain
echo ""
echo "Signature du certificat..."
yunohost domain cert-install $application.$domain --no-checks
echo ""
echo "Installation de l'application..."
yunohost app install $application --args "domain=$application.$domain&path=/"

Et pour la désinstallation

#!/bin/bash

    domain=$(sudo yunohost domain main-domain | cut -d' ' -f2)
    application=$1

    echo -n "Vous êtes sur le point de désinstaller $application. Appuyez sur une touche pour continuer ou sur Ctrl+c pour annuler. "
    read
    echo ""
    echo "Suppression de l'application..."
    yunohost app remove $application
    echo ""
    echo "Suppression du sous-domaine..."
    yunohost domain remove $application.$domain
1 Like

J’ai tenté d’écrire une variante du script d’install pour installer des versions test des apps, mais il ne marche pas. J’ai tenté en remplaçant

yunohost app install $application --args "domain=$application.$domain&path=/"

par

yunohost app install  https://github.com/YunoHost-Apps/$application_ynh/tree/testing --args "domain=$application.$domain&path=/"

Mais ça me donne l’erreur suivante

ligne 15: fin de fichier (EOF) prématurée lors de la recherche du « ' » correspondant

Où est-ce que je me suis planté ?

Tu utilise ça à un endroit dans l’url, du coup bash pense que tu fais référence à une variable qui porte ce nom (application_ynh) plutôt que “le contenu de la variable application … suivi de _ynh”. Du coup, bash ne trouve pas cette variable et remplace par une chaine de caractère vide (oui, bash c’est le far west)

Pour corriger ça, il faut plutôt écrire : ${application}_ynh (les accolades permettant de lever l’ambiguité sur qu’est-ce qu’il faut utiliser comme nom de variable)

J’ai corrigé, mais j’ai toujours le même message d’erreur.

Beh après difficile de t’aider + sans avoir le vrai script au complet et une idée précise de comment tu l’appelles … Sinon tu peux aussi tenter de lancer ton script en mode debug avec bash -x ton_script.sh (+ éventuel arguments) pour voir exactement ce qu’il fait

Le script est en tout point identique à celui d’installation que j’ai fabriqué moi-même et que j’ai évoqué un peu plus haut, à l’exception de la modification ci-dessous:

La commande debug ne m’a pas donné d’info exploitable

root@stemy:~# bash -x installtest onlyoffice
++ sudo yunohost domain main-domain
++ cut '-d ' -f2
+ domain=stemy.me
+ application=onlyoffice
installtest: ligne 15: fin de fichier (EOF) prématurée lors de la recherche du « ' » correspondant
installtest: ligne 17: erreur de syntaxe : fin de fichier prématurée