Hostathome : script d'installation de serveur

Il me semble que le script ne gère pas les dépendances (on peut demander l’installation d’owncloud sans avoir installé owncloud).

La gestion des fichiers de configuration, je la trouve insupportable (désolé), mais j’ai une proposition à vous faire. J’ai fais une petite lib pour gérer ça de manière plus sympatique :

bitbucket.org/barmic/bash-templet/src (Licence RABL)

Grosso modo c’est de la gestion de template en bash.

On écris un template avec des ${var} (les accolades sont nécessaires) et lui il va substitué ça par la valeur de la variable var.
On peut charger les variables depuis un fichier properties, mas on peut évidement simplement créer les variable directement.

Il n’y a pas de possibilités de faire des conditions dans mes templates mais pour ça on peut utiliser une petite subtilité : une ligne qui contient uniquement une variable non définie avec éventuellement des caractères d’espacements sera supprimée. Du coup si on a un template comme ça :

server {
    ...
    ${SSL}
    ...
}

Il est possible d’injecter directement toute la conf SSL en mettant un truc de plusieurs lignes dans la variable.

Voila

Dernière chose, j’ai l’impression que l’on écrase continuellement la conf de nginx, j’ai bon ?
Je crois que créer un dossier /etc/nginx/hostathome et mettre dedans des fichiers type owncloud.conf, roundcube.conf etc puis dans le fichier /etc/nginx/site-avaible/${HOSTNAME}.conf mettre une ligne du [mono]include /etc/nginx/hostathome/*.conf[/mono] serait une meilleure solution.

Voila, voila.

Dans les ajouts, mettre du LDAP ou faire de la SSO pour ne gérer qu’un seul couple login/mot de passe ce serait pas mal je pense.

Voila, voila, voila

Bonne nuit à tous (et à toutes !)

@Clochette : Il faut en effet garder les applications proposées par le script les plus légères possibles. Cependant rien n’empêche de rendre disponible certains programmes, du moment que l’on impose pas son installation : la personne qui connaît le service en voudra bien.

@Misterfreez : Oui, la gestion des fichiers de conf est dégueu. Mais je n’ai pas eu idée de mieux. Je regarderai avec intérêt ta proposition afin de mieux comprendre ce qui en retourne.

Pour la conf de nginx, non on n’est pas censé l’écraser à chaque fois, sauf si on donne le même nom de domaine. Ce que j’avais en tête, mais qui n’est peut-être pas assez explicite dans le script c’est :

J’étais fatigué hier soir, j’avais créé le dépôt en mode “privé”, c’est corrigé (il faudra que j’ajoute une licence aujourd’hui ou demain).

Merci beaucoup, je vais m’y mettre dès que le mal de tête “post-troisièmique” sera passé :mrgreen:

C’est vraiment sympa ton truc Michel! Tout simple et tout propre en plus!
Et ça serait certainement plus propre que tout retailler à coup de sed tel que le script le fait actuellement.

2 questions quand même pour être sûr de bien comprendre:

  • [mono][[ “${REPLY}” =~ ${.*} ]][/mono] : je ne connais pas ce genre de test. Tu vérifies que la ligne passée à la boucle (${REPLY}) est bien un truc du type [mono]${var}[/mono], c’est ça? Le [mono]=~[/mono] c’est pour faire appel aux expressions régulières? edit : man bash m’a répondu
  • Dans exemple.template, tu as [code]This is my templet.
    Hello ${target}
    ${banana}

${var1}${var2}
${toto
$coucou
$toto[/code]
Ici, à la fin l’accolade n’est pas refermée. C’est pour vérifier qu’elle ne sera pas remplacée?

Petit défaut dans ta méthode :
Avec un template comme ceci :

mon template texte avant ${var1} ${var2}; #point-virgule
Après procédure, le point-virgule a disparu.

Du coup j’essaie, en vain, de modifier la regexp pour garder tout ce qu’il y a après une ${var} jusqu’à la fin de la ligne, quel que soit le caractère.

J’avais imaginé ce problème tout à l’heure dans le bus (c’est corrigé).

Pour tes remarques oui c’est une pression régulière. L’objectif de forcer l’usage des {} c’est de na pas interférer avec les $ pouvant être dans les templates (comme dans ceux de nginx).
Et oui le ${ jamais fermé c’est juste pour tester l’expression régulière.

Quelle efficacité! Merci.
Je suis un peu dégouté, j’ai cherché pendant 1h hier une solution. Et toi tu arrives les mains dans les poches avec tes doubles quotes bien placées comme il faut! :unamused:

Pour une fois j’ai compris ton code :smiley: (à part des détails dans load() :unamused: )

Je viens de corriger un autre problème lorsqu’il y avait des caractères non protégés par les doubles quotes (, `, ! et $).
Maintenant ça devrait bien marcher, mais j’ai du passer par sed (au moins par simplicité), je verrais plus tard si je peux faire ça en pur bash.

Bien je vais étudier ça. Ça m’a l’air un chouïa plus complexe.

Pour ce soir :

  • Support de la fonction écrite par Michel pour nginx, ssh, squirrelmail, postfix
  • précaution pour le port ssh (il faut un nombre)
  • quelques petites améliorations.

Je viens de regarder ça m’a l’air pas mal, non ?
J’aurais tout de même une suggestion. Commence par déclarer [mono]local[/mono] toutes les variables du template en début de fonction (tu peut les initialiser à “” si tu veux pas qu’elles apparaissent ou faire un unset quand tu veut), ça permet de mieux voir ce qui sert au template.

Pour le cas de nginx, il serait bon à mon avis de mettre la conf php dans un fichier séparé (dans /etc/niginx/php.conf) et de juste faire un include qui va bien dans les fichiers de conf que tu veux).

Au passage vire la ligne 36 qui m’a juste servi au debug.

Edit : correction syntaxique

C’est en effet beaucoup mieux ainsi.

[quote=“MisterFreez”]
Pour le cas de nginx, il serait bon à mon avis de mettre la conf php dans un fichier séparé (dans /etc/niginx/php.conf) et de juste faire un include qui va bien dans les fichiers de conf que tu veux).
[/quote]Pourquoi pas. Mais je ne suis pas sûr que ce soit adapté, en particulier au cas où une personne héberge plusieurs sites (et si elle ne veut pas php à toutes…). Certes, c’est un peu capilotracté.

[quote=“MisterFreez”]
Au passage vire la ligne 36 qui m’a juste servi au debug.[/quote]
Elle me servait aussi à mon debug, j’ai oublié de l’enlever. Merci.

[quote=“thuban”][quote=“MisterFreez”]
Pour le cas de nginx, il serait bon à mon avis de mettre la conf php dans un fichier séparé (dans /etc/niginx/php.conf) et de juste faire un include qui va bien dans les fichiers de conf que tu veux).[/quote][/quote]
Ça ne change rien. Tu fais l’include là où tu aurais mis ces quelques lignes.

Oui, c’est ce que je me suis dit ensuite dans la journée, j’avais mal compris au début :slightly_smiling:

Maintenant la fonction process conserve les [mono]"[/mono] : line=$(echo "${REPLY}" | sed 's@\([`"\\!]\)@\\\1@g')

Je viens d’intégrer la correction avec des tests supplémentaires. C’était totalement débile de ma part :blush:

Les exemples montrent aussi une fonctionnalité intéressante du moteur de template : la possibilité de faire des substitutions de variables complexe dans le template (voir le paragraphe « Parameter Expansion » du man de bash).

Je te conseil de regarder la fonction debug qui permet de facilement passer un code en mode verbeux ou pas (avec des niveaux de debug). Le exemple.sh déclare le niveau de debug souhaité, mais il vaut mieux faire ça ainsi pour lancer l’exemple en mode debug (ainsi on ne modifie pas le code) :

Dis pas ça, il m’a fallu au moins 10 min avant de comprendre :stuck_out_tongue: . Ça me donne l’air encore plus débile sinon!
Merci des conseils.

Pour owncloud, la version 5 bug une fois sur 2. Ce bug semble corrigé dans une version plus récente, mais pas encore distribué sous forme d’archive.

J’ai pris ta correction tel quelle, il n’y a rien de débile tu as corrigé. Moi c’est surtout que dans la liste des caractères non protégés j’ai oublié le ".

Bon, j’ai avancé un peu :

  • J’ai réinstallé mon serveur mail avec le script pour tester : il y avait effectivement de grosses erreurs. Maintenant ça fonctionne bien. À tester chez vous si l’envie vous prend.
  • Ajout de quelques services très simple :
    • dropcenter pour déposer/partager des fichiers
    • pluxml un blog/CMS
    • blogotext un moteur de blog
    • Kriss le lecteur de flux rss (à remplacer par leed?)

Du coup ça tourne plutôt bien.
Un truc me chagrine cependant, beaucoup de ces services pourraient être installés dans des dossiers du serveur (mondomaine.com/blog ou mondomaine.com/kriss). Je suis en quête d’idée pour rendre ça possible proprement, et ne pas forcer l’utilisation de sous-domaines.