[AlternC-dev] Stretch package

Retour à l'archive de la liste
Le site d'AlternC
Google Custom Search

Benjamin Sonntag benjamin at sonntag.fr
Lun 22 Oct 15:29:19 CEST 2018


Bonjour à tous, 

voici un petit point de l'état d'AlternC à ce j1 du devcamp d'automne : 

[ https://github.com/AlternC/AlternC | https://github.com/AlternC/AlternC ] 

on a 2 branches principales : 
[ https://github.com/AlternC/AlternC/tree/stable-3.1 | https://github.com/AlternC/AlternC/tree/stable-3.1 ] 
qui est une version de AlternC 3.5 pour Stretch & Jessie, avec gestion de SSL d'intégré au core 
quitte à ce que ce soit avec de l'autosigné (le cas par défaut) 

Un concept de "cert-provider" est introduit dans AlternC, qui permet de gérer les certificats avant de se rabbatre sur un autosigné. 
le premier package de ce genre, vivement recommandé, est alternc-certificate-provider-letsencrypt 
qui est dans le dépot alternc-certbot (ancien nom de ce package) 
[ https://github.com/AlternC/alternc-certbot | https://github.com/AlternC/alternc-certbot ] 

En passant, on ajoute le concept de certificats système, utilisés par les services d'AlternC : ainsi, on a désormais dans /etc/ssl/private & /etc/ssl/certs : 
alternc-dovecot.(key|crt) 
alternc-panel .(key|crt) 
alternc-postfix .(key|crt) 
alternc-proftpd .(key|crt) 

dont le FQDN est configurable via le panel dans "gérer les variables d'AlternC" et s'insère dans la gestion des certs par provider 

dans le contexte de cette modification pour intégrer SSL, on a mis des hooks partout et nous sommes rendu compte, au printemps, que c'était très compliqué d'intégrer SSL / cert dans la chaîne update_domaines.sh 
qui était écrite ... en bash ... 

vieux code issu du même vieux code écrit en KSH, update_domaines.sh commençait à sérieusement accuser son âge, aussi avions-nous à l'époque envisagé la réécriture de ce dernier sous forme de code propre en php cli intégré aux classes d'AlternC 
avec des hooks propres 

d'où la création de la branche (la 2nde) : 
[ https://github.com/AlternC/AlternC/tree/feature-updatedomains-php | https://github.com/AlternC/AlternC/tree/feature-updatedomains-php ] 
qui remplace update_domaines.sh par update_domaines.php 

Par ailleurs, 
Les templates de vhosts sont désormais en plusieurs fichiers : 

- un pour la version "on fait la même chose en http et en https" (-both) 
- un pour la version "on force https" (en gros le vhost http redirige vers https) (-https) 
- un pour la version "on force http" (en gros le vhost https redirige vers http) (-http) 

[ https://github.com/AlternC/AlternC/tree/feature-updatedomains-php/etc/alternc/templates/apache2/ | https://github.com/AlternC/AlternC/tree/feature-updatedomains-php/etc/alternc/templates/apache2/ ] 
cela ne s'applique qu'aux domaines_type qui ont has_https_option à true 
(en gros des types comme, vhost, php5.6, php5.3 ...) 
le type "url" est forcément "redirige http et https vers la même url" 
le type "roundcube" pourrait devenir "roundcube en https et redirection en https pour http" parce que qui veut faire tourner un webmail en http en 2018 ? ;) 
etc. 

description de update_domaines.php 

update_domaines.sh => lance update_domaines.php, script qui, en pratique, lance 

$dom->update_domains(); 

dont l'algorithme est assez simple et ne *fait rien* mais se contente de lancer des hooks AlternC : 

DNS : 
- s'il y a des zones DNS à ajouter / supprimer / modifier, lance hook_updatedomains_dns_pre 
- pour chaque zone, lance hook_updatedomains_dns_del ou hook_updatedomains_dns_add 
- s'il y avait des zones DNS à ajouter / supprimer / modifier, lance hook_updatedomains_dns_post (typiquement reload bind ;) ) 

SUB_DOMAINES : 
- s'il y a une modif à faire dans les vhosts, lance hook_updatedomains_web_pre 
- pour chaque vhost à effacer, lance hook_updatedomains_web_del 
- pour chaque vhost à créer, lance hook_updatedomains_web_before puis hook_updatedomains_web_add puis hook_updatedomains_web_after 
(typiquement le before/after est à utiliser par les cert providers) 
- s'il y avait une modif à faire dans les vhosts, lance hook_updatedomains_web_post (typiquement reload apache ;) ) 

Ces hooks sont utilisés par : 

- m_bind.php qui est chargé de générer les zones bind (j'ai repris le gros du code PHP d'Alan Garcia à ce sujet, qui avait commencé la migration SH=> PHP de update_domaines) 
- m_apache.php qui est chargé de générer les vhosts 

- à terme, les cert-provider pour faire ce qu'ils veulent pour préparer le terrain sachant que toute la partie cert se base sur la classe m_ssl qui stocke cert & associations en base MySQL. 

dans la série "les modifications de fond", 3 nouveaux types font leur apparition avec update_domaines.php : 
- autodiscover : un type de type "vhost" que l'on ajoute automatiquement (via les hooks) lorsque le mail est géré localement, pour faire l'autodiscover thunderbird & outlook : 
[ https://developer.mozilla.org/fr/docs/Mozilla/Thunderbird/Autoconfiguration | https://developer.mozilla.org/fr/docs/Mozilla/Thunderbird/Autoconfiguration ] 
- dkim : un type de type "txt" que l'on ajoute automatiquement (via les hooks) lorsque le mail est géré localement, pour fournir la clé DKIM dans le DNS. 


En l'état, cette nouvelle version semble bien marcher (et va *beaucoup* plus vite que la version sh quand on a 1000 vhosts à recréer :) ) 

Que reste-t-il à faire pour cette version 3.5 avec SSL & update-domaine.php ? 

Si on veut avancer sur une version 3.5, il faut : 
- terminer les modifications de alternc-certbot pour qu'il utilise les hooks de update-domaines.php 
- tester dans tous les sens 
- vérifier que cela marche quand on upgrade un système existant. 

Si on veut avancer sur une version 3.11 pour stretch, il faut : 
- reprendre la stable-3.1 au tag "3.11" et voir ce qui ne marche pas sur stretch (typiquement dkim?) 
- tester 

Par ailleurs, je propose : 
- que l'on jette un oeil aux bugs et pull requests du github : 
[ https://github.com/AlternC/AlternC/pulls | https://github.com/AlternC/AlternC/pulls ] 
[ https://github.com/AlternC/AlternC/issues | https://github.com/AlternC/AlternC/issues ] 
pour les classifier et choisir de les résoudre de ce pas ou plus tard 
[ https://github.com/AlternC/AlternC/issues ] 

@+ 
Benjamin 

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.alternc.org/arch/dev/attachments/20181022/623fb776/attachment-0001.html>


Plus d'informations sur la liste de diffusion Dev