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=/"
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
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
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)
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