Closed slobberbone closed 4 years ago
install git classique ou j'ai fait un changement de branche install_git.sh var/www/html/install#
Large remaniement ;) je n ai pas testé le code, juste lu. SysVInit à été remplacé par SystemD, pourquoi ne pas utiliser systemctl ? qq remarques pr docker principalement : Est il possible de detecter l etat docker pour bypasser les services stop/start, inutiles ds docker ? le conteneur mysql aura deja son user, mdp et db crees. Est il possible de bypasser les étapes de création si le mdp root mysql est absent/vide ?
pour les addlog, en mode docker aucun dossier n'est préexistant, du coup addLogInfo plante dès le début car /var/log/nextdom n'existe pas, il faudrait le créer et/ou detecter son absence.
ce qui tu as fait est bien mais présente les memes défauts que le postinst précédent:
ces défauts empechent une "externalisation" de la configuration et la création d'une image propre. il faudrait:
création du schema a la demande via une variable d'environnement.
supprimer la vérification de bdd dans le preinst.sh et la remettre dans le lancement du conteneur. La vérification de la présence de la bdd n'a aucun sens lors de la construction de l'image. En plus la configuration à l'execution sera très certainement différente.
la conf de la bdd appartient a l'instance, c'est a dire que ce sera fait dans l'init.sh au premier lancement du conteneur.
postinst.sh: step3_configure_mysql, tu flingues la bdd sans recréer le schéma (fait en preinst, ce ne va pas coincer ?
de manière générale, pour docker, le postinst n'a pas de sens puisque tout la préparation est faite lors de la preparation de l'image, seuls des ajustements sont faits lors du init pour tenir compte des éléments exterieurs ( mysql, mdp root du conteneur, ..). Il ne devrait y avoir plus rien a toucher ( et en particulier plus aucun chmod, chown, ln -s .....). En effet, dans un ideal, il faudrait pouvoir lancer le conteneur en read only avec juste des volumes qui accueilles les données de conf et d'execution.
je suppose que le travail est en cours, puisqu'il y a du preinst apache et du postinst apache... lequel faut il retenir ?
Je vais essayer de faire des pre/postinst compatible docker.
ps: ce que j'ai poussé, ne rends pas l'install compatible docker, cela permet juste une installation des fichiers. il faudrait y ajouter au moins supervisor et ses fichiers de conf. cf le project nextdom-docker https://github.com/NextDom/nextdom-docker/tree/refactorPostinst/multiContainer/from-github-multistage pour une adaptation avec le refactoring.
@edgd1er oui pour le moment c'était voulu de ne proposer "que" la même chose qu'avant pour permettre de ne pas constater de régressions. Pour tes modifications, je veux bien les prendre mais le soucis, c'est que tu as archivé des modifications en mm temps que des tabulations supprimées ou rajoutées ... du coup c pas très lisible
@edgd1er j'ai gardé ce que tu avais fais, mais virer les options ${docker} en direct mais j'ai rajouté dans le config.sh Là tout semble ok
@edgd1er Pour tes améliorations, je crois que tu peux faire ce que tu veux dans install_docker.sh et zapper ce que tu veux. S'il y a un manque on pourra redécouper si tu veux
@testeurFou : tester 1/ sur différentes plateformes 2/ Depuis une install vierge 3/ Depuis un update (de 0.5.4 à 0.6.0 par exemple)
alors c toujours pareille pour moi . aprés une install Git classique . je passe sur la branche ,
je lance le install git.. et rien ne marche .
/usr/share/nextdom/assets/config'
il y a juste plugins dans /usr/share/nextdom
bon aprés modif du config.sh ROOT_DIRECTORY="/var/www/nextdomdev"
ca marche pour moi
Plusieurs remarques:
preinst.sh: mysql_subnet, cf ci dessous, c 'est voulu ça ? seul un utilisateur depuis le serveur mysql pourra se connecter. si le service mysql n'est pas sur l hote ou se trouve le service nextdom alors ..... pas de connexion à la bdd.
lorsque pro duction=true, le assets ne sont pas generes, il y a une bidouille dans le install docker pour passer temporairement en false puis revenir en true. Quel est la conséquence de passer production en true ? est ce uniquement pour les assets, npm, images , js , etc
MYSQL_SUBNET="${MYSQL_HOSTNAME}"
#MYSQL_SUBNET="${MYSQL_SUBNET}"
pourquoi remplacer les tests [] (compatible posix) par des [[ ]] ( non compatibles posix) alors que ce n'est pas nécéssaire.
pourquoi mettre la configuration mysql a deux endroits maintenant config.sh et mysql/secret ? Pour docker, la conf est a 4 endroits maintenant: docker-compose.yml, mysql/secret, config.sh, common.config.php. quelle est l'utilité de ce mysql secret ? il n'est pas spécifique docker ( besoin de swarm)
aucune fonction ne modifie "result", de ce fait le log indique a chaque fois que c'est ok
les booleen avec bash sont "particuliers", [[ ! $VARIABLE ]] sera vrai a chaque fois. par exemple, dans le preinst.sh: if [[ ! ${PRODUCTION} ]]; then
sera toujours vrai. exemple ci dessous
le postinst, pour docker, mélange du build (conf apache, droits fichiers, ...) avec des operations du run (configuration dynamiques mysql, creation du schéma). Ce qui fait que le script marche très bien quand on utilise le conteneur comme une vm, ne marche plus quand on veut creer une image, optimiser la taille et ne faire que le minimum de conf au premier lancement du conteneur ( conf de ports apache, credentials bdd). Idealement, il faudrait repartir les operations dans des fonctions pour qu il soit possible de ne pas les lancer lors de la construction de l'image. postinst, step 6,11 et 12, sont a faire lors du premier lancement, step 1,2,4,5 par contre sont a faire à la construction de l'image. En fait, deux conceptions existent pour les images docker, soit l'image est prete a etre utiliser avec récupération de variables pour lancer le conteneur (genre image mysql), soit l'image est un system de base, dans lequel un script va tourner et installer tout le nécéssaire (genre image jeedom). L'inconvenient majeur du dernier est la taille de l'image à cause des layers.
$ PRODUCTION=true
$ [[ $PRODUCTION ]] && echo toto
toto
$ PRODUCTION=false
$ [[ $PRODUCTION ]] && echo toto
toto
$ [[ $PRODUCTION == false ]] && echo toto
toto
$ PRODUCTION=true
$ [[ $PRODUCTION == false ]] && echo toto
$
$ PRODUCTION=false
$ [[ ! $PRODUCTION ]] && echo toto
$
OK avec toi pour les [[ ]] on peut les changer en [ ].
Pour mysql/secret je pense qu'il ne sert pas.
De manière générale, je ne comprends pas la logique de faire "source toto.sh" et d'appeler les méthodes une à une. Vu qu'on source 3 ou 4 fichiers, on se met en risque (mélange de fonctions et variables).
Perso je pense qu'on peut faire beaucoup plus simple :
Je trouve cette multiplication des fichiers bash contre-productive, et avoir plusieurs points d'entrée c'est encore pire.. C'est clair qu'on va perdre les utilisateurs. Dans tous les cas, on devrait juste demander à l'utlisateur de lancer "./install/postinst".
Je rappelle que c'est comme ca qu'est construit actuellement le fichier postinst, et qu'on avait dit qu'on éclatait juste ce fichier pour sortir ce qui n'est à faire que pour la vdev (et docker). On n'a jamais parlé du fait que l'utilisateur devait lancer un script ou un autre selon son contexte.
En tous les cas, si vous voulez faire compliqué comme ca, moi je n'utiliserai pas postinst comme ca depuis le paquet deb (je ne ferais pas source + appel des fonctions une à une). Moi j'ai besoin d'un script "postinst" qui est lancé directement et sans argument. Soit ce postinst marche aussi comme ca, soit le paquet ne marchera plus..
AA
Cette partie du postinst.sh n'a rien à faire là (elle n'était affichée que dans le cas d'une vdev) :
cat - <<EOS
Installation dir : ${ROOT_DIRECTORY}
Database host : ${MYSQL_HOSTNAME}
Database port : ${MYSQL_PORT}
Database name : ${MYSQL_NEXTDOM_DB}
Database user : ${MYSQL_NEXTDOM_USER}
Database password : ${MYSQL_NEXTDOM_PASSWD}
> A self-signed SSL Certificate created in /etc/nextdom/ssl/
> Please feel free to use another Certificate
>>>>> COMPLETED <<<<<
EOS
@Astral0 respires un grand coup ça ira mieux :)
L'idée initiale de @slobberbone est de découper l'installation et la configuration en étapes. Ces étapes sont réparties dans deux fichiers selon le type d'installation ( git dev, deb, docker ).
par exemple, une installation deb ne va avoir besoin que du postinst, une installation git et dev va avoir besoin du pre et du post. Voila qui devrait te rassurer quand a la multiplication des bash. @slobberbone a juste exporter la configuration et les fonctions communes dans deux fichiers bien nommés: config.sh et utils.sh. Ces deux fichiers sont appelés par les scripts les nécéssitant, donc c'est transparent pour l'utilisateur. Et puis ne pas prendre l'utilisateur pour un idiot mais lui indiquer comment faire dans un README fait partie des bonnes pratiques aussi. On peut le guider ;)
Le découpage actuel pré/post inst est adapté pour un installation de dev ce que je ne remets pas en cause. J'ai adapté le install_docker.sh via des sources pour ne prendre que les étapes utiles et nécéssaires à l'installation docker. Justement, je prends à mon compte la complexité pour changer le moins possible le pre et postinst, afin que les deux scripts restent utilisables tel que @slobberbone les a définit. C'est pour ça que les opérations des étapes ne doivent concerner qu'un sujet ( pas comme l'étape 6 du post qui mélange des étapes de l'installation modification du temp et des étapes de l'execution, modification des variables et injection du schema dans la bdd ).
Je me repete, le but est bien de conserver le fonctionnement actuel:
@slobberbone si j'ai mal compris tes intentions dans cette PR, n'hésites pas à me corriger.
pour info, dans mon dockerfile j'utilise la version buster ( balenalib/amd64-debian:buster-run), si vous jeter un oeil c'est la: https://github.com/NextDom/nextdom-docker.git dans la branche refactorPostInst. La construction se passe en trois étapes
@edgd1er peux-tu te connecter à Discord stp Je revois ton install_docker pour le mettre au propre
j'ai une question normale qu'un rep html soir recréé sous /var/www/html/html
apres test, simplement de ma faute,je lancer le script depuis /var/www/html au lieu de /var/www/nextdomdev
donc plus d'erreur ....
c parfait de mon coté
debian 10 armbian 10 Sources dans /var/www/nextdomdev
Installation par Git + paquets debian : nextdom-common + changement de branche.
Installation par Git + paquets debian : nextdom-common
git clone https://github.com/NextDom/nextdom-core.git -b feature/RefactorPostinst .
bon tjrs la merde sur fresh install.
manque tjrs le rep
/usr/share/nextdom
du coup ca marche pas
en créer le rep
j'ai le truc qu'on a pas le droit .
quand on sup le nextdom_common
et par magie ...
(Reading database ... 52458 files and directories currently installed.)
Removing nextdom-common (1.2.0) ...
Enabling site 000-default.
To activate the new configuration, you need to run:
systemctl reload apache2
je peux le reinstaller, avec apt install -y nextdom-common , c bon . tout fonctionne
Kudos, SonarCloud Quality Gate passed!
0 Bugs
0 Vulnerabilities (and
0 Security Hotspots to review)
0 Code Smells
No Coverage information
0.0% Duplication
peut on avoir la procedure d'install car moi cela ne marche pas .
wget -qO - http://debian.nextdom.org/debian/nextdom.gpg.key | apt-key add - echo "deb http://debian.nextdom.org/debian nextdom main" >/etc/apt/sources.list.d/nextdom.list apt update apt -y install nextdom-common
mkdir /var/www/nextdomdev && cd /var/www/nextdomdev
git clone https://github.com/NextDom/nextdom-core.git -b feature/RefactorPostinst .
./install/install_git.sh
root@orangepiplus:/var/www/nextdomdev/install# ./install_git.sh 02/01/20 09:19:37 AM STEP : Preinst -- Prepare and check prerequisites - 0/7 02/01/20 09:19:37 AM INFO : Local needed directories checked 02/01/20 09:19:37 AM INFO : Local mysql server detected 02/01/20 09:19:37 AM INFO : MySQL/MariaDB service started /etc/php/7.3 02/01/20 09:19:37 AM INFO : PHP detected 02/01/20 09:19:37 AM INFO : Apache2 service started 02/01/20 09:19:37 AM INFO : Cron service started 02/01/20 09:19:37 AM SUCCESS : Prerequisites are checked with success 02/01/20 09:19:37 AM SCRIPT : ============ Starting preinst.sh ============ 02/01/20 09:19:37 AM STEP : Preinst -- Generate Assets - 1/7
Installation dependencies composer
Fatal error: Uncaught Error: Call to undefined function Composer\Json\json_decode() in /usr/share/php/Composer/Json/JsonFile.php:153 Stack trace:
02/01/20 09:19:37 AM ERROR : error during composer and npm initialize
Initialise NPM
Installation dependencies composer
Fatal error: Uncaught Error: Call to undefined function Composer\Json\json_decode() in /usr/share/php/Composer/Json/JsonFile.php:153 Stack trace:
02/01/20 09:19:37 AM ERROR : error during asset generation 02/01/20 09:19:37 AM INFO : installed nodejs 02/01/20 09:19:37 AM INFO : installed composer manager 02/01/20 09:19:37 AM INFO : installed project dependencies 02/01/20 09:19:37 AM INFO : copied icons, themes and images from assets 02/01/20 09:19:37 AM INFO : generated css files 02/01/20 09:19:37 AM INFO : generated javascript files 02/01/20 09:19:37 AM STEP : Preinst -- Configure MySQL/MariaDB - 2/7 02/01/20 09:19:37 AM INFO : created nextdom mysql configuration: /etc/mysql/conf.d/nextdom_my.cnf 02/01/20 09:19:37 AM SUCCESS : MySQL is configured with success 02/01/20 09:19:37 AM STEP : Preinst -- Prepare /var/www/html- 3/7 02/01/20 09:19:37 AM INFO : warning : directory /var/www/html isn't empty, renamed to /var/www/html.fgfrw8Km 02/01/20 09:19:37 AM SUCCESS : /var/www/html is prepared with success 02/01/20 09:19:37 AM STEP : Preinst -- Configure Apache - 4/7 02/01/20 09:19:37 AM INFO : updated wwwdir in : /etc/apache2/sites-available/nextdom.conf 02/01/20 09:19:37 AM INFO : updated wwwdir in : /etc/apache2/sites-available/nextdom-ssl.conf 02/01/20 09:19:37 AM INFO : updated wwwdir in : /etc/apache2/sites-available/nextdom-common Generating RSA private key, 2048 bit long modulus (2 primes) .....................................................................+++++ .................+++++ e is 65537 (0x010001) Signature ok subject=C = FR, ST = Paris, L = Paris, O = Global Security, OU = IT Department, CN = example.com Getting Private key 02/01/20 09:19:37 AM INFO : created SSL self-signed certificates in /etc/nextdom/ssl/ 02/01/20 09:19:37 AM SUCCESS : Apache is configured with success 02/01/20 09:19:37 AM STEP : Preinst -- Configure MySQL/MariaDB - 5/7 02/01/20 09:19:37 AM INFO : Writing MariaDb/MySQL information file: /etc/nextdom/mysql/secret 02/01/20 09:19:37 AM SUCCESS : MySQL/MariaDB is configured with success 02/01/20 09:19:37 AM STEP : Preinst -- Generate MySQL/MariaDB structure - 6/7 02/01/20 09:19:37 AM INFO : deleted mysql user: nextdom 02/01/20 09:19:37 AM INFO : created mysql user: nextdom 02/01/20 09:19:37 AM INFO : deleted mysql table: nextdom 02/01/20 09:19:37 AM INFO : created mysql table: nextdom 02/01/20 09:19:37 AM INFO : configured table privileges: nextdom 02/01/20 09:19:37 AM SUCCESS : Database structure generated with success 02/01/20 09:19:37 AM STEP : Preinst -- Configure PHP - 7/7 02/01/20 09:19:37 AM INFO : Directory or file : /var/www/nextdomdev/assets/config/default.config.ini removed 02/01/20 09:19:37 AM INFO : Directory or file : /etc/php/7.3/apache2/conf.d/10-opcache.ini removed 02/01/20 09:19:37 AM INFO : production mode 02/01/20 09:19:37 AM INFO : enable PHP opcache 02/01/20 09:19:37 AM INFO : restart Apache 02/01/20 09:19:37 AM SUCCESS : PHP is configured with success 02/01/20 09:19:37 AM SCRIPT : ============ Preinst.sh is executed ... ============ 02/01/20 09:20:03 AM SCRIPT : ============ Starting postinst.sh ============ 02/01/20 09:20:03 AM INFO : Apache2 service started 02/01/20 09:20:03 AM INFO : Cron service started 02/01/20 09:20:03 AM INFO : Local mysql server detected 02/01/20 09:20:03 AM INFO : MySQL/MariaDB service started 02/01/20 09:20:03 AM STEP : Postinst -- Create needed files and directories - 1/12 02/01/20 09:20:03 AM INFO : Directory : /var/www/nextdomdev/plugins created 02/01/20 09:20:03 AM INFO : Directory or file : /var/log/nextdom/install.log removed 02/01/20 09:20:03 AM INFO : Directory or file : /tmp/jeedom removed ln: failed to access '/tmp/jeedom': Permission denied 02/01/20 09:20:03 AM INFO : created temporary directory: /tmp/nextdom 02/01/20 09:20:03 AM SUCCESS : Files and directories are created with success 02/01/20 09:20:03 AM STEP : Postinst -- Prepare directory layout - 2/12 02/01/20 09:20:03 AM INFO : Directory or file : /var/lib/nextdom/config removed 02/01/20 09:20:03 AM INFO : created configuration directory /var/lib/nextdom/config 02/01/20 09:20:03 AM INFO : Directory or file : /var/lib/nextdom/data removed 02/01/20 09:20:03 AM INFO : created data directory /var/lib/nextdom/data 02/01/20 09:20:03 AM INFO : created core configuration symlink: /var/www/nextdomdev/core/config 02/01/20 09:20:03 AM INFO : created var symlink: /var/www/nextdomdev/var 02/01/20 09:20:03 AM INFO : created core/css symlink: /var/www/nextdomdev/core/css 02/01/20 09:20:03 AM INFO : created core/js symlink: /var/www/nextdomdev/assets/core/js 02/01/20 09:20:03 AM INFO : created core/template symlink: /var/www/nextdomdev/core/template 02/01/20 09:20:03 AM INFO : created data symlink: /var/www/nextdomdev/data 02/01/20 09:20:03 AM INFO : Directory or file : /var/www/nextdomdev/log removed 02/01/20 09:20:03 AM INFO : created log symlink: /var/www/nextdomdev/log 02/01/20 09:20:03 AM INFO : cache cleared 02/01/20 09:20:03 AM SUCCESS : NextDom is configured with success 02/01/20 09:20:03 AM STEP : Postinst -- Configure MySQL/MariaDB - 3/12 Uptime: 12 Threads: 7 Questions: 72 Slow queries: 0 Opens: 32 Flush tables: 1 Open tables: 26 Queries per second avg: 6.000 02/01/20 09:20:03 AM INFO : created nextdom mysql configuration: /etc/mysql/conf.d/nextdom_my.cnf 02/01/20 09:20:03 AM SUCCESS : MySQL is configured with success 02/01/20 09:20:03 AM STEP : Postinst -- Configure symbolic links - 4/12 02/01/20 09:20:03 AM SUCCESS : /var/www/nextdomdev linked with success to /var/www/html 02/01/20 09:20:03 AM STEP : Postinst -- Configure Apache - 5/12 Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: systemctl restart apache2 02/01/20 09:20:03 AM INFO : apache: enable module ssl Enabling module rewrite. To activate the new configuration, you need to run: systemctl restart apache2 02/01/20 09:20:03 AM INFO : apache: enable module rewrite Module status disabled. To activate the new configuration, you need to run: systemctl restart apache2 02/01/20 09:20:03 AM INFO : apache: disable module status Site 000-default already disabled 02/01/20 09:20:03 AM INFO : apache: disabled site default Site default-ssl already disabled 02/01/20 09:20:03 AM INFO : apache: disabled site default-ssl Enabling site nextdom-ssl. To activate the new configuration, you need to run: systemctl reload apache2 02/01/20 09:20:03 AM INFO : apache: enabled site nextdom-ssl Enabling site nextdom. To activate the new configuration, you need to run: systemctl reload apache2 02/01/20 09:20:03 AM INFO : apache: enabled site nextdom 02/01/20 09:20:03 AM SUCCESS : Apache is configured with success 02/01/20 09:20:03 AM STEP : Postinst -- Configure NextDom - 6/12 02/01/20 09:20:03 AM INFO : wrote configuration file: /var/www/nextdomdev/core/config/common.config.php
Warning: require_once(/var/www/nextdomdev/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/nextdomdev/src/core.php on line 60
Fatal error: Uncaught Error: Call to undefined function posix_getpwuid() in /var/www/nextdomdev/scripts/sick.php:50 Stack trace:
thrown in /var/www/nextdomdev/scripts/sick.php on line 50 02/01/20 09:20:03 AM ERROR : Error while checking nextdom 02/01/20 09:20:03 AM STEP : Postinst -- Execute scripts for specific OS- 10/12 02/01/20 09:20:03 AM SUCCESS : OS specific actions are done with success 02/01/20 09:20:03 AM STEP : Postinst -- Configure file permission - 11/12 02/01/20 09:20:03 AM INFO : set file owner: www-data, perms: 0755/0644 on directory /var/lib/nextdom 02/01/20 09:20:03 AM INFO : set file owner: www-data, perms: 0755/0644 on directory /var/log/nextdom 02/01/20 09:20:03 AM INFO : set file owner: www-data, perms: 0755/0644 on directory /tmp/nextdom 02/01/20 09:20:03 AM INFO : set file owner: www-data, perms: 0755/0644 on directory /var/www/nextdomdev/plugins 02/01/20 09:20:03 AM INFO : set file owner: www-data, perms: 0755/0644 on directory /var/www/nextdomdev/public/img 02/01/20 09:20:03 AM SUCCESS : Files permissions are configured with success 02/01/20 09:20:03 AM STEP : Postinst -- Configure owner for NextDom directory - 12/12 02/01/20 09:20:03 AM SUCCESS : /var/www/nextdomdev, /var/lib/nextdom, /var/log/nextdom and /tmp/nextdom folder's owner is changed with success 02/01/20 09:20:03 AM SCRIPT : ============ Postinst.sh is executed ... ============ root@orangepiplus:/var/www/nextdomdev/install#
donc c ok pour moi Armbian buster debian Buster je test cette aprem RPI 9 et 10
Principe
Le script principal postinst a été remplacé par les scripts suivants selon le cas dans lequel vous vous trouvez :
Le postinst a été découpé en 2 scripts dans /install/scripts/
Le .deb lui n'aura qu'à appeler le posinst.sh comme avant. @Astral0
Particularités
Sous scripts
Les nouveau scripts incluent :
Tests & Validations
Voici les différents cas de tests Vous devez mettre quel contexte vous avez validé en commentaire de la PR, Je tiendrai la liste des contextes validés à jour
Installation sur une plateforme vierge
Fresh install VM Debian 9
Fresh install VM Debian 10
Fresh install LXC Debian 9
Fresh install LXC Debian 10
Fresh install Docker Debian 9### (ne pas utiliser le script install_docker)
Fresh install Docker Debian 10### (ne pas utiliser le script install_docker)
Fresh install Docker sous Windows Debian 10### (ne pas utiliser le script install_docker)
Fresh install ARMbian 9
Fresh install ARMbian 10
Fresh install Raspbian 9
Fresh install Raspbian 10
Migration d'une installation existante
Migration VM Debian 9
Migration VM Debian 10
Migration LXC Debian 9
Migration LXC Debian 10
Migration Docker Debian 9### (ne pas utiliser le script install_docker)
Migration Docker Debian 10### (ne pas utiliser le script install_docker)
Migration Docker sous Windows 10 Debian 10### (ne pas utiliser le script install_docker)
Migration ARMbian 9
Migration ARMbian 10
Migration Raspbian 9
Migration Raspbian 10