mirror of
https://github.com/YunoHost-Apps/teampass_ynh.git
synced 2024-09-03 20:26:37 +02:00
Refactoring et upgrade 2.1.26-final
L'upgrade depuis la précédente version a été testé, mais une sauvegarde préalable n'est pas inutile
This commit is contained in:
parent
cb831fd50d
commit
a11a88dfbf
14 changed files with 802 additions and 402 deletions
17
README.md
17
README.md
|
@ -9,9 +9,7 @@ Gestionnaire de mot de passe collaboratif.
|
||||||
|
|
||||||
http://www.teampass.net
|
http://www.teampass.net
|
||||||
|
|
||||||
Le script installe le paquet *php5-cli*.
|
Teampass peut être configuré uniquement via le compte administrateur. Pour cela il faut s'identifier avec admin et le mot de passe choisi à l'installation.
|
||||||
|
|
||||||
Teampass peut-être configuré uniquement via le compte administrateur. Pour cela il faut s'identifier avec admin et le mot de passe choisi à l'installation.
|
|
||||||
|
|
||||||
Pour utiliser la fonction de sauvegarde automatique, il est nécessaire de mettre en place un cron contenant ceci dans /etc/cron.d/teampass:
|
Pour utiliser la fonction de sauvegarde automatique, il est nécessaire de mettre en place un cron contenant ceci dans /etc/cron.d/teampass:
|
||||||
```0 0 * * * www-data cd /var/www/teampass/backups && php script.backup.php```
|
```0 0 * * * www-data cd /var/www/teampass/backups && php script.backup.php```
|
||||||
|
@ -20,9 +18,16 @@ Pour utiliser la fonction de sauvegarde automatique, il est nécessaire de mettr
|
||||||
sudo yunohost app upgrade teampass -u https://github.com/YunoHost-Apps/teampass_ynh
|
sudo yunohost app upgrade teampass -u https://github.com/YunoHost-Apps/teampass_ynh
|
||||||
|
|
||||||
**Multi-utilisateur:** Oui, avec support ldap.
|
**Multi-utilisateur:** Oui, avec support ldap.
|
||||||
> *Depuis la dernière mise à jour, 2.1.26-3, le support ldap est cassé. Mais des corrections de bug justifient un changement de version.*
|
|
||||||
|
**Voir l'état du package:**
|
||||||
|
~*[Dernier rapport hebdomadaire](https://forum.yunohost.org/t/rapport-hebdomadaire-dintegration-continue/2297)*~
|
||||||
|
~*[Dernier test d'intégration continue](https://ci-apps.yunohost.org/jenkins/job/teampass%20%28Community%29/lastBuild/consoleFull)*~
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> *Depuis la mise à jour 2.1.26-3, le support ldap est cassé. Mais des corrections de bug justifient un changement de version.*
|
||||||
*Les utilisateurs sont dans la base de données de teampass, mais le mot est généré aléatoirement et devra être réinitialisé pour chaque utilisateur souhaitant utiliser l'application*
|
*Les utilisateurs sont dans la base de données de teampass, mais le mot est généré aléatoirement et devra être réinitialisé pour chaque utilisateur souhaitant utiliser l'application*
|
||||||
*Pour la première connexion, utiliser l'accès admin, avec le login 'admin' et le mot de passe renseigné à l'installation.*
|
*Pour la première connexion, utiliser l'accès admin, avec le login 'admin' et le mot de passe renseigné à l'installation.*
|
||||||
|
|
||||||
*Bon les mails ne fonctionne pas non plus, donc impossible d'utiliser la fonction 'Mot de passe oublié'.*
|
> *les mails ne fonctionne pas non plus, donc impossible d'utiliser la fonction 'Mot de passe oublié'.*
|
||||||
*Je pense que Teampass n'est toujours pas prêt... Le sera-t-il un jour?*
|
*Je pense que Teampass n'est toujours pas prêt... Le sera-t-il un jour ...?*
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
;; Test complet
|
;; Test complet
|
||||||
auto_remove=1
|
|
||||||
; Manifest
|
; Manifest
|
||||||
domain="domain.tld" (DOMAIN)
|
domain="domain.tld" (DOMAIN)
|
||||||
path="/path" (PATH)
|
path="/path" (PATH)
|
||||||
password="pass" (PASSWORD)
|
password="pass"
|
||||||
; Checks
|
; Checks
|
||||||
pkg_linter=1
|
pkg_linter=1
|
||||||
setup_sub_dir=1
|
setup_sub_dir=1
|
||||||
|
@ -14,10 +13,22 @@
|
||||||
upgrade=1
|
upgrade=1
|
||||||
backup_restore=1
|
backup_restore=1
|
||||||
multi_instance=0
|
multi_instance=0
|
||||||
wrong_user=0
|
|
||||||
wrong_path=1
|
|
||||||
incorrect_path=1
|
incorrect_path=1
|
||||||
corrupt_source=0
|
|
||||||
fail_download_source=0
|
|
||||||
port_already_use=0
|
port_already_use=0
|
||||||
final_path_already_use=0
|
change_url=0
|
||||||
|
;;; Levels
|
||||||
|
Level 1=auto
|
||||||
|
Level 2=auto
|
||||||
|
Level 3=auto
|
||||||
|
# Level 4:
|
||||||
|
Level 4=0
|
||||||
|
# Level 5:
|
||||||
|
Level 5=auto
|
||||||
|
Level 6=auto
|
||||||
|
Level 7=auto
|
||||||
|
Level 8=0
|
||||||
|
Level 9=0
|
||||||
|
Level 10=0
|
||||||
|
;;; Options
|
||||||
|
Email=maniackc_dev@crudelis.fr
|
||||||
|
Notification=down
|
||||||
|
|
6
conf/app.src
Normal file
6
conf/app.src
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
SOURCE_URL=https://github.com/nilsteampassnet/TeamPass/archive/2.1.26-final-3.tar.gz
|
||||||
|
SOURCE_SUM=ab57589c20e86c4e684b96241c6e73f4
|
||||||
|
SOURCE_SUM_PRG=md5sum
|
||||||
|
SOURCE_FORMAT=tar.gz
|
||||||
|
SOURCE_IN_SUBDIR=true
|
||||||
|
SOURCE_FILENAME=
|
|
@ -8,7 +8,7 @@ location __PATH__ {
|
||||||
try_files $uri $uri/ index.php;
|
try_files $uri $uri/ index.php;
|
||||||
location ~ [^/]\.php(/|$) {
|
location ~ [^/]\.php(/|$) {
|
||||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||||
fastcgi_pass unix:/var/run/php5-fpm-__NAMETOCHANGE__.sock;
|
fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock;
|
||||||
fastcgi_index index.php;
|
fastcgi_index index.php;
|
||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
fastcgi_param REMOTE_USER $remote_user;
|
fastcgi_param REMOTE_USER $remote_user;
|
||||||
|
|
|
@ -101,7 +101,7 @@ pm.max_children = 10
|
||||||
; The number of child processes created on startup.
|
; The number of child processes created on startup.
|
||||||
; Note: Used only when pm is set to 'dynamic'
|
; Note: Used only when pm is set to 'dynamic'
|
||||||
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
|
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
|
||||||
pm.start_servers = 1
|
pm.start_servers = 2
|
||||||
|
|
||||||
; The desired minimum number of idle server processes.
|
; The desired minimum number of idle server processes.
|
||||||
; Note: Used only when pm is set to 'dynamic'
|
; Note: Used only when pm is set to 'dynamic'
|
||||||
|
|
|
@ -72,7 +72,8 @@ INSERT INTO `teampass_misc` (`type`, `intitule`, `valeur`) VALUES
|
||||||
('admin','enable_sts','0'),
|
('admin','enable_sts','0'),
|
||||||
('admin','encryptClientServer','1'),
|
('admin','encryptClientServer','1'),
|
||||||
('admin','cpassman_version','__VERSION__'),
|
('admin','cpassman_version','__VERSION__'),
|
||||||
-- ('admin','ldap_mode','1'), -- ldap est cassé sur la version 2.1.26-3
|
-- ('admin','ldap_mode','1'),
|
||||||
|
-- ldap ne fonctionne plus sur cette version de teampass...
|
||||||
('admin','ldap_mode','0'),
|
('admin','ldap_mode','0'),
|
||||||
('admin','ldap_type','posix-search'),
|
('admin','ldap_type','posix-search'),
|
||||||
('admin','ldap_suffix','0'),
|
('admin','ldap_suffix','0'),
|
||||||
|
@ -141,18 +142,11 @@ INSERT INTO `teampass_misc` (`type`, `intitule`, `valeur`) VALUES
|
||||||
('admin','show_only_accessible_folders','1'),
|
('admin','show_only_accessible_folders','1'),
|
||||||
('admin','enable_suggestion','0'),
|
('admin','enable_suggestion','0'),
|
||||||
('admin','otv_expiration_period','7'),
|
('admin','otv_expiration_period','7'),
|
||||||
-- ('admin', 'timezone', '__TIMEZONE__'),
|
|
||||||
-- ('admin', 'can_create_root_folder', '1'),
|
|
||||||
-- ('admin', 'settings_offline_mode', '1'),
|
|
||||||
-- ('admin', 'offline_key_level', '50'),
|
|
||||||
('admin','default_session_expiration_time','60'),
|
('admin','default_session_expiration_time','60'),
|
||||||
('admin','bck_script_path','__FINALPATH__/backups/'),
|
|
||||||
-- ('complex','1','0'),
|
|
||||||
-- ('admin', 'menu_type', 'context'),
|
|
||||||
('admin', 'duo', '0'),
|
('admin', 'duo', '0'),
|
||||||
-- ('update', 'encrypt_pw_in_log_items', '1');
|
|
||||||
('admin','enable_server_password_change','0'),
|
('admin','enable_server_password_change','0'),
|
||||||
('admin','ldap_object_class','0'),
|
('admin','ldap_object_class','0'),
|
||||||
|
('admin','bck_script_path','__FINALPATH__/backups/'),
|
||||||
('admin','bck_script_filename', 'bck_cpassman'),
|
('admin','bck_script_filename', 'bck_cpassman'),
|
||||||
('admin','syslog_enable','0'),
|
('admin','syslog_enable','0'),
|
||||||
('admin','syslog_host','localhost'),
|
('admin','syslog_host','localhost'),
|
||||||
|
@ -178,7 +172,7 @@ CREATE TABLE IF NOT EXISTS `teampass_nested_tree` (
|
||||||
KEY `personal_folder_idx` (`personal_folder`)
|
KEY `personal_folder_idx` (`personal_folder`)
|
||||||
) CHARSET=utf8;
|
) CHARSET=utf8;
|
||||||
|
|
||||||
INSERT INTO teampass_nested_tree VALUES("1","0","__FOLDERS__","1","2","1","0","0","0","0");
|
-- INSERT INTO teampass_nested_tree VALUES("1","0","__FOLDERS__","1","2","1","0","0","0","0");
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `teampass_rights` (
|
CREATE TABLE IF NOT EXISTS `teampass_rights` (
|
||||||
`id` int(12) NOT null AUTO_INCREMENT,
|
`id` int(12) NOT null AUTO_INCREMENT,
|
||||||
|
|
|
@ -3,15 +3,15 @@
|
||||||
"id": "teampass",
|
"id": "teampass",
|
||||||
"packaging_format": 1,
|
"packaging_format": 1,
|
||||||
"requirements": {
|
"requirements": {
|
||||||
"yunohost": ">= 2.4"
|
"yunohost": ">= 2.6.4"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"en": "Passwords Manager",
|
"en": "Passwords Manager",
|
||||||
"fr": "Gestionnaire de mots de passes."
|
"fr": "Gestionnaire de mots de passes."
|
||||||
},
|
},
|
||||||
"version": "2.1.26-3",
|
"version": "2.1.26-final-3",
|
||||||
"url": "http://www.teampass.net",
|
"url": "http://www.teampass.net",
|
||||||
"license": "free",
|
"license": "AGPL-3.0",
|
||||||
"maintainer": {
|
"maintainer": {
|
||||||
"name": "Ackak, Maniack Crudelis et matlink",
|
"name": "Ackak, Maniack Crudelis et matlink",
|
||||||
"email": "ackak_ynh@ackak.net maniackc_dev@crudelis.fr matlink@matlink.fr"
|
"email": "ackak_ynh@ackak.net maniackc_dev@crudelis.fr matlink@matlink.fr"
|
||||||
|
|
|
@ -1,213 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
CHECK_VAR () { # Vérifie que la variable n'est pas vide.
|
|
||||||
# $1 = Variable à vérifier
|
|
||||||
# $2 = Texte à afficher en cas d'erreur
|
|
||||||
test -n "$1" || (echo "$2" >&2 && false)
|
|
||||||
}
|
|
||||||
|
|
||||||
EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les résidus.
|
|
||||||
exit_code=$?
|
|
||||||
if [ "$exit_code" -eq 0 ]; then
|
|
||||||
exit 0 # Quitte sans erreur si le script se termine correctement.
|
|
||||||
fi
|
|
||||||
trap '' EXIT
|
|
||||||
set +eu
|
|
||||||
echo -e "\e[91m \e[1m" # Shell in light red bold
|
|
||||||
echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" >&2
|
|
||||||
|
|
||||||
if type -t CLEAN_SETUP > /dev/null; then # Vérifie l'existance de la fonction avant de l'exécuter.
|
|
||||||
CLEAN_SETUP # Appel la fonction de nettoyage spécifique du script install.
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Compense le bug de ssowat qui ne supprime pas l'entrée de l'app en cas d'erreur d'installation.
|
|
||||||
sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json
|
|
||||||
|
|
||||||
ynh_die
|
|
||||||
}
|
|
||||||
|
|
||||||
TRAP_ON () { # Activate signal capture
|
|
||||||
set -eu # Exit if a command fail, and if a variable is used unset.
|
|
||||||
trap EXIT_PROPERLY EXIT # Capturing exit signals on shell script
|
|
||||||
}
|
|
||||||
|
|
||||||
CHECK_USER () { # Vérifie la validité de l'user admin
|
|
||||||
# $1 = Variable de l'user admin.
|
|
||||||
ynh_user_exists "$1" || (echo "Wrong admin" >&2 && false)
|
|
||||||
}
|
|
||||||
|
|
||||||
CHECK_PATH () { # Vérifie la présence du / en début de path. Et son absence à la fin.
|
|
||||||
if [ "${path:0:1}" != "/" ]; then # Si le premier caractère n'est pas un /
|
|
||||||
path="/$path" # Ajoute un / en début de path
|
|
||||||
fi
|
|
||||||
if [ "${path:${#path}-1}" == "/" ] && [ ${#path} -gt 1 ]; then # Si le dernier caractère est un / et que ce n'est pas le seul caractère.
|
|
||||||
path="${path:0:${#path}-1}" # Supprime le dernier caractère
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine.
|
|
||||||
sudo yunohost app checkurl $domain$path -a $app
|
|
||||||
}
|
|
||||||
|
|
||||||
CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé.
|
|
||||||
final_path=/var/www/$app
|
|
||||||
if [ -e "$final_path" ]
|
|
||||||
then
|
|
||||||
echo "This path already contains a folder" >&2
|
|
||||||
false
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
GENERATE_DB () { # Créer une base de données et un utilisateur dédié au nom de l'app.
|
|
||||||
# $1 = Nom de la base de donnée
|
|
||||||
db_user=$1
|
|
||||||
db_user=${db_user//-/_} # mariadb ne supporte pas les - dans les noms de base de données. Ils sont donc remplacé par des _
|
|
||||||
# Génère un mot de passe aléatoire.
|
|
||||||
# db_pwd=$(head -n20 /dev/urandom | tr -c -d 'A-Za-z0-9' | head -c20)
|
|
||||||
db_pwd=$(ynh_string_random)
|
|
||||||
CHECK_VAR "$db_pwd" "db_pwd empty"
|
|
||||||
# Utilise '$app' comme nom d'utilisateur et de base de donnée
|
|
||||||
# Initialise la base de donnée et stocke le mot de passe mysql.
|
|
||||||
ynh_mysql_create_db "$db_user" "$db_user" $db_pwd
|
|
||||||
ynh_app_setting_set $app mysqlpwd $db_pwd
|
|
||||||
}
|
|
||||||
|
|
||||||
SETUP_SOURCE () { # Télécharge la source, décompresse et copie dans $final_path
|
|
||||||
# $1 = Nom de l'archive téléchargée.
|
|
||||||
wget -nv -i ../sources/source_url -O $1
|
|
||||||
# Vérifie la somme de contrôle de la source téléchargée.
|
|
||||||
md5sum -c ../sources/source_md5 --status || (echo "Corrupt source" >&2 && false)
|
|
||||||
# Décompresse la source
|
|
||||||
if [ "$(echo ${1##*.})" == "gz" ]; then
|
|
||||||
tar -x -f $1
|
|
||||||
elif [ "$(echo ${1##*.})" == "zip" ]; then
|
|
||||||
unzip -q $1
|
|
||||||
else
|
|
||||||
false # Format d'archive non pris en charge.
|
|
||||||
fi
|
|
||||||
# Copie les fichiers sources
|
|
||||||
sudo cp -a $(cat ../sources/source_dir)/. "$final_path"
|
|
||||||
# Copie les fichiers additionnels ou modifiés.
|
|
||||||
if test -e "../sources/ajouts"; then
|
|
||||||
sudo cp -a ../sources/ajouts/. "$final_path"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
ADD_SYS_USER () { # Créer un utilisateur système dédié à l'app
|
|
||||||
if ! ynh_system_user_exists "$app" # Test l'existence de l'utilisateur
|
|
||||||
then
|
|
||||||
sudo useradd -d /var/www/$app --system --user-group $app --shell /usr/sbin/nologin || (echo "Unable to create $app system account" >&2 && false)
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
POOL_FPM () { # Créer le fichier de configuration du pool php-fpm et le configure.
|
|
||||||
sed -i "s@__NAMETOCHANGE__@$app@g" ../conf/php-fpm.conf
|
|
||||||
sed -i "s@__FINALPATH__@$final_path@g" ../conf/php-fpm.conf
|
|
||||||
sed -i "s@__USER__@$app@g" ../conf/php-fpm.conf
|
|
||||||
finalphpconf=/etc/php5/fpm/pool.d/$app.conf
|
|
||||||
sudo cp ../conf/php-fpm.conf $finalphpconf
|
|
||||||
sudo chown root: $finalphpconf
|
|
||||||
finalphpini=/etc/php5/fpm/conf.d/20-$app.ini
|
|
||||||
sudo cp ../conf/php-fpm.ini $finalphpini
|
|
||||||
sudo chown root: $finalphpini
|
|
||||||
sudo service php5-fpm reload
|
|
||||||
}
|
|
||||||
|
|
||||||
STORE_MD5_CONFIG () { # Enregistre la somme de contrôle du fichier de config
|
|
||||||
# $1 = Nom du fichier de conf pour le stockage dans settings.yml
|
|
||||||
# $2 = Nom complet et chemin du fichier de conf.
|
|
||||||
ynh_app_setting_set $app $1_file_md5 $(sudo md5sum "$2" | cut -d' ' -f1)
|
|
||||||
}
|
|
||||||
|
|
||||||
CHECK_MD5_CONFIG () { # Créé un backup du fichier de config si il a été modifié.
|
|
||||||
# $1 = Nom du fichier de conf pour le stockage dans settings.yml
|
|
||||||
# $2 = Nom complet et chemin du fichier de conf.
|
|
||||||
if [ "$(ynh_app_setting_get $app $1_file_md5)" != $(sudo md5sum "$2" | cut -d' ' -f1) ]; then
|
|
||||||
sudo cp -a "$2" "$2.backup.$(date '+%d.%m.%y_%Hh%M,%Ss')" # Si le fichier de config a été modifié, créer un backup.
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
FIND_PORT () { # Cherche un port libre.
|
|
||||||
# $1 = Numéro de port pour débuter la recherche.
|
|
||||||
port=$1
|
|
||||||
while ! sudo yunohost app checkport $port ; do
|
|
||||||
port=$((port+1))
|
|
||||||
done
|
|
||||||
CHECK_VAR "$port" "port empty"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
### REMOVE SCRIPT
|
|
||||||
|
|
||||||
REMOVE_NGINX_CONF () { # Suppression de la configuration nginx
|
|
||||||
if [ -e "/etc/nginx/conf.d/$domain.d/$app.conf" ]; then # Delete nginx config
|
|
||||||
echo "Delete nginx config"
|
|
||||||
sudo rm "/etc/nginx/conf.d/$domain.d/$app.conf"
|
|
||||||
sudo service nginx reload
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
REMOVE_FPM_CONF () { # Suppression de la configuration du pool php-fpm
|
|
||||||
if [ -e "/etc/php5/fpm/pool.d/$app.conf" ]; then # Delete fpm config
|
|
||||||
echo "Delete fpm config"
|
|
||||||
sudo rm "/etc/php5/fpm/pool.d/$app.conf"
|
|
||||||
fi
|
|
||||||
if [ -e "/etc/php5/fpm/conf.d/20-$app.ini" ]; then # Delete php config
|
|
||||||
echo "Delete php config"
|
|
||||||
sudo rm "/etc/php5/fpm/conf.d/20-$app.ini"
|
|
||||||
fi
|
|
||||||
sudo service php5-fpm reload
|
|
||||||
}
|
|
||||||
|
|
||||||
REMOVE_LOGROTATE_CONF () { # Suppression de la configuration de logrotate
|
|
||||||
if [ -e "/etc/logrotate.d/$app" ]; then
|
|
||||||
echo "Delete logrotate config"
|
|
||||||
sudo rm "/etc/logrotate.d/$app"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
SECURE_REMOVE () { # Suppression de dossier avec vérification des variables
|
|
||||||
chaine="$1" # L'argument doit être donné entre quotes simple '', pour éviter d'interpréter les variables.
|
|
||||||
no_var=0
|
|
||||||
while (echo "$chaine" | grep -q '\$') # Boucle tant qu'il y a des $ dans la chaine
|
|
||||||
do
|
|
||||||
no_var=1
|
|
||||||
global_var=$(echo "$chaine" | cut -d '$' -f 2) # Isole la première variable trouvée.
|
|
||||||
only_var=\$$(expr "$global_var" : '\([A-Za-z0-9_]*\)') # Isole complètement la variable en ajoutant le $ au début et en gardant uniquement le nom de la variable. Se débarrasse surtout du / et d'un éventuel chemin derrière.
|
|
||||||
real_var=$(eval "echo ${only_var}") # `eval "echo ${var}` permet d'interpréter une variable contenue dans une variable.
|
|
||||||
if test -z "$real_var" || [ "$real_var" = "/" ]; then
|
|
||||||
echo "Variable $only_var is empty, suppression of $chaine cancelled." >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
chaine=$(echo "$chaine" | sed "s@$only_var@$real_var@") # remplace la variable par sa valeur dans la chaine.
|
|
||||||
done
|
|
||||||
if [ "$no_var" -eq 1 ]
|
|
||||||
then
|
|
||||||
if [ -e "$chaine" ]; then
|
|
||||||
echo "Delete directory $chaine"
|
|
||||||
sudo rm -r "$chaine"
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
echo "No detected variable." >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
REMOVE_BDD () { # Suppression de la base de donnée et de l'utilisateur associé.
|
|
||||||
# $1 = Nom de la base de donnée
|
|
||||||
# Utilise '$app' comme nom d'utilisateur et de base de donnée
|
|
||||||
db_user=$1
|
|
||||||
if mysqlshow -u root -p$(sudo cat $MYSQL_ROOT_PWD_FILE) | grep -q "^| $db_user"; then
|
|
||||||
echo "Delete db"
|
|
||||||
ynh_mysql_drop_db $db_user
|
|
||||||
ynh_mysql_drop_user $db_user
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
REMOVE_SYS_USER () { # Supprime l'utilisateur système dédié à l'app
|
|
||||||
if ynh_system_user_exists "$app" # Test l'existence de l'utilisateur
|
|
||||||
then
|
|
||||||
sudo userdel $app
|
|
||||||
fi
|
|
||||||
}
|
|
379
scripts/_common.sh
Executable file
379
scripts/_common.sh
Executable file
|
@ -0,0 +1,379 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# YUNOHOST 2.7 FORTHCOMING HELPERS
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# Create a dedicated nginx config
|
||||||
|
#
|
||||||
|
# usage: ynh_add_nginx_config
|
||||||
|
ynh_add_nginx_config () {
|
||||||
|
finalnginxconf="/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
ynh_backup_if_checksum_is_different "$finalnginxconf"
|
||||||
|
sudo cp ../conf/nginx.conf "$finalnginxconf"
|
||||||
|
|
||||||
|
# To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable.
|
||||||
|
# Substitute in a nginx config file only if the variable is not empty
|
||||||
|
if test -n "${path_url:-}"; then
|
||||||
|
ynh_replace_string "__PATH__" "$path_url" "$finalnginxconf"
|
||||||
|
fi
|
||||||
|
if test -n "${domain:-}"; then
|
||||||
|
ynh_replace_string "__DOMAIN__" "$domain" "$finalnginxconf"
|
||||||
|
fi
|
||||||
|
if test -n "${port:-}"; then
|
||||||
|
ynh_replace_string "__PORT__" "$port" "$finalnginxconf"
|
||||||
|
fi
|
||||||
|
if test -n "${app:-}"; then
|
||||||
|
ynh_replace_string "__NAME__" "$app" "$finalnginxconf"
|
||||||
|
fi
|
||||||
|
if test -n "${final_path:-}"; then
|
||||||
|
ynh_replace_string "__FINALPATH__" "$final_path" "$finalnginxconf"
|
||||||
|
fi
|
||||||
|
ynh_store_file_checksum "$finalnginxconf"
|
||||||
|
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove the dedicated nginx config
|
||||||
|
#
|
||||||
|
# usage: ynh_remove_nginx_config
|
||||||
|
ynh_remove_nginx_config () {
|
||||||
|
ynh_secure_remove "/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a dedicated php-fpm config
|
||||||
|
#
|
||||||
|
# usage: ynh_add_fpm_config
|
||||||
|
ynh_add_fpm_config () {
|
||||||
|
finalphpconf="/etc/php5/fpm/pool.d/$app.conf"
|
||||||
|
ynh_backup_if_checksum_is_different "$finalphpconf"
|
||||||
|
sudo cp ../conf/php-fpm.conf "$finalphpconf"
|
||||||
|
ynh_replace_string "__NAMETOCHANGE__" "$app" "$finalphpconf"
|
||||||
|
ynh_replace_string "__FINALPATH__" "$final_path" "$finalphpconf"
|
||||||
|
ynh_replace_string "__USER__" "$app" "$finalphpconf"
|
||||||
|
sudo chown root: "$finalphpconf"
|
||||||
|
ynh_store_file_checksum "$finalphpconf"
|
||||||
|
|
||||||
|
if [ -e "../conf/php-fpm.ini" ]
|
||||||
|
then
|
||||||
|
finalphpini="/etc/php5/fpm/conf.d/20-$app.ini"
|
||||||
|
ynh_backup_if_checksum_is_different "$finalphpini"
|
||||||
|
sudo cp ../conf/php-fpm.ini "$finalphpini"
|
||||||
|
sudo chown root: "$finalphpini"
|
||||||
|
ynh_store_file_checksum "$finalphpini"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo systemctl reload php5-fpm
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove the dedicated php-fpm config
|
||||||
|
#
|
||||||
|
# usage: ynh_remove_fpm_config
|
||||||
|
ynh_remove_fpm_config () {
|
||||||
|
ynh_secure_remove "/etc/php5/fpm/pool.d/$app.conf"
|
||||||
|
ynh_secure_remove "/etc/php5/fpm/conf.d/20-$app.ini" 2>&1
|
||||||
|
sudo systemctl reload php5-fpm
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a dedicated systemd config
|
||||||
|
#
|
||||||
|
# usage: ynh_add_systemd_config
|
||||||
|
ynh_add_systemd_config () {
|
||||||
|
finalsystemdconf="/etc/systemd/system/$app.service"
|
||||||
|
ynh_backup_if_checksum_is_different "$finalsystemdconf"
|
||||||
|
sudo cp ../conf/systemd.service "$finalsystemdconf"
|
||||||
|
|
||||||
|
# To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable.
|
||||||
|
# Substitute in a nginx config file only if the variable is not empty
|
||||||
|
if test -n "${final_path:-}"; then
|
||||||
|
ynh_replace_string "__FINALPATH__" "$final_path" "$finalsystemdconf"
|
||||||
|
fi
|
||||||
|
if test -n "${app:-}"; then
|
||||||
|
ynh_replace_string "__APP__" "$app" "$finalsystemdconf"
|
||||||
|
fi
|
||||||
|
ynh_store_file_checksum "$finalsystemdconf"
|
||||||
|
|
||||||
|
sudo chown root: "$finalsystemdconf"
|
||||||
|
sudo systemctl enable $app
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove the dedicated systemd config
|
||||||
|
#
|
||||||
|
# usage: ynh_remove_systemd_config
|
||||||
|
ynh_remove_systemd_config () {
|
||||||
|
finalsystemdconf="/etc/systemd/system/$app.service"
|
||||||
|
if [ -e "$finalsystemdconf" ]; then
|
||||||
|
sudo systemctl stop $app
|
||||||
|
sudo systemctl disable $app
|
||||||
|
ynh_secure_remove "$finalsystemdconf"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CHECKING
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine.
|
||||||
|
# Check availability of a web path
|
||||||
|
ynh_webpath_available $domain $path_url
|
||||||
|
# Register/book a web path for an app
|
||||||
|
ynh_webpath_register $app $domain $path_url
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé.
|
||||||
|
final_path=/var/www/$app
|
||||||
|
test ! -e "$final_path" || ynh_die "This path already contains a folder"
|
||||||
|
}
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# DISPLAYING
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
NO_PRINT () { # Supprime l'affichage dans stdout pour la commande en argument.
|
||||||
|
set +x
|
||||||
|
$@
|
||||||
|
set -x
|
||||||
|
}
|
||||||
|
|
||||||
|
WARNING () { # Écrit sur le canal d'erreur pour passer en warning.
|
||||||
|
$@ >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
SUPPRESS_WARNING () { # Force l'écriture sur la sortie standard
|
||||||
|
$@ 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
QUIET () { # Redirige la sortie standard dans /dev/null
|
||||||
|
$@ > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
ALL_QUIET () { # Redirige la sortie standard et d'erreur dans /dev/null
|
||||||
|
$@ > /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
BACKUP_FAIL_UPGRADE () {
|
||||||
|
WARNING echo "Upgrade failed."
|
||||||
|
app_bck=${app//_/-} # Replace all '_' by '-'
|
||||||
|
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$backup_number; then # Vérifie l'existence de l'archive avant de supprimer l'application et de restaurer
|
||||||
|
sudo yunohost app remove $app # Supprime l'application avant de la restaurer.
|
||||||
|
sudo yunohost backup restore --ignore-system $app_bck-pre-upgrade$backup_number --apps $app --force # Restore the backup if upgrade failed
|
||||||
|
ynh_die "The app was restored to the way it was before the failed upgrade."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
BACKUP_BEFORE_UPGRADE () { # Backup the current version of the app, restore it if the upgrade fails
|
||||||
|
backup_number=1
|
||||||
|
old_backup_number=2
|
||||||
|
app_bck=${app//_/-} # Replace all '_' by '-'
|
||||||
|
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade1; then # Vérifie l'existence d'une archive déjà numéroté à 1.
|
||||||
|
backup_number=2 # Et passe le numéro de l'archive à 2
|
||||||
|
old_backup_number=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo yunohost backup create --ignore-system --apps $app --name $app_bck-pre-upgrade$backup_number # Créer un backup différent de celui existant.
|
||||||
|
if [ "$?" -eq 0 ]; then # Si le backup est un succès, supprime l'archive précédente.
|
||||||
|
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$old_backup_number; then # Vérifie l'existence de l'ancienne archive avant de la supprimer, pour éviter une erreur.
|
||||||
|
QUIET sudo yunohost backup delete $app_bck-pre-upgrade$old_backup_number
|
||||||
|
fi
|
||||||
|
else # Si le backup a échoué
|
||||||
|
ynh_die "Backup failed, the upgrade process was aborted."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
HUMAN_SIZE () { # Transforme une taille en Ko en une taille lisible pour un humain
|
||||||
|
human=$(numfmt --to=iec --from-unit=1K $1)
|
||||||
|
echo $human
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant
|
||||||
|
file_to_analyse=$1
|
||||||
|
backup_size=$(sudo du --summarize "$file_to_analyse" | cut -f1)
|
||||||
|
free_space=$(sudo df --output=avail "/home/yunohost.backup" | sed 1d)
|
||||||
|
|
||||||
|
if [ $free_space -le $backup_size ]
|
||||||
|
then
|
||||||
|
WARNING echo "Espace insuffisant pour sauvegarder $file_to_analyse."
|
||||||
|
WARNING echo "Espace disponible: $(HUMAN_SIZE $free_space)"
|
||||||
|
ynh_die "Espace nécessaire: $(HUMAN_SIZE $backup_size)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ce helper est temporaire et sert de remplacement à la véritable fonction ynh_restore_file. Le temps qu'elle arrive...
|
||||||
|
ynh_restore_file () {
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
ynh_die "There is already a file at this path: $1"
|
||||||
|
fi
|
||||||
|
sudo cp -a "${YNH_APP_BACKUP_DIR}$1" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# PACKAGE CHECK BYPASSING...
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
IS_PACKAGE_CHECK () { # Détermine une exécution en conteneur (Non testé)
|
||||||
|
return $(uname -n | grep -c 'pchecker_lxc')
|
||||||
|
}
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# NODEJS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# INFOS
|
||||||
|
# n (Node version management) utilise la variable PATH pour stocker le path de la version de node à utiliser.
|
||||||
|
# C'est ainsi qu'il change de version
|
||||||
|
# ynh_install_nodejs installe la version de nodejs demandée en argument, avec n
|
||||||
|
# ynh_use_nodejs active une version de nodejs dans le script courant
|
||||||
|
# 3 variables sont mises à disposition, et 2 sont stockées dans la config de l'app
|
||||||
|
# - nodejs_path: Le chemin absolu de cette version de node
|
||||||
|
# Utilisé pour des appels directs à node.
|
||||||
|
# - nodejs_version: Simplement le numéro de version de nodejs pour cette application
|
||||||
|
# - nodejs_use_version: Un alias pour charger une version de node dans le shell courant.
|
||||||
|
# Utilisé pour démarrer un service ou un script qui utilise node ou npm
|
||||||
|
# Dans ce cas, c'est $PATH qui contient le chemin de la version de node. Il doit être propagé sur les autres shell si nécessaire.
|
||||||
|
|
||||||
|
n_install_dir="/opt/node_n"
|
||||||
|
node_version_path="/usr/local/n/versions/node"
|
||||||
|
ynh_use_nodejs () {
|
||||||
|
nodejs_version=$(ynh_app_setting_get $app nodejs_version)
|
||||||
|
|
||||||
|
load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\""
|
||||||
|
|
||||||
|
nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version"
|
||||||
|
|
||||||
|
# "Load" a version of node
|
||||||
|
eval $load_n_path; $nodejs_use_version
|
||||||
|
|
||||||
|
# Get the absolute path of this version of node
|
||||||
|
nodejs_path="$(n bin $nodejs_version)"
|
||||||
|
|
||||||
|
# Make an alias for node use
|
||||||
|
ynh_node_exec="eval $load_n_path; n use $nodejs_version"
|
||||||
|
}
|
||||||
|
|
||||||
|
ynh_install_nodejs () {
|
||||||
|
# Use n, https://github.com/tj/n to manage the nodejs versions
|
||||||
|
nodejs_version="$1"
|
||||||
|
local n_install_script="https://git.io/n-install"
|
||||||
|
|
||||||
|
# Create $n_install_dir
|
||||||
|
mkdir -p "$n_install_dir"
|
||||||
|
|
||||||
|
# Load n path in PATH
|
||||||
|
CLEAR_PATH="$n_install_dir/bin:$PATH"
|
||||||
|
# Remove /usr/local/bin in PATH in case of node has already setup.
|
||||||
|
PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@')
|
||||||
|
|
||||||
|
# Move an existing node binary, to avoid to block n.
|
||||||
|
test -x /usr/bin/node && mv /usr/bin/node /usr/bin/node_n
|
||||||
|
test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n
|
||||||
|
|
||||||
|
# If n is not previously setup, install it
|
||||||
|
n --version > /dev/null 2>&1 || \
|
||||||
|
( echo "Installation of N - Node.js version management" >&2; \
|
||||||
|
curl -sL $n_install_script | N_PREFIX="$n_install_dir" bash -s -- -y - )
|
||||||
|
|
||||||
|
# Restore /usr/local/bin in PATH
|
||||||
|
PATH=$CLEAR_PATH
|
||||||
|
|
||||||
|
# And replace the old node binary.
|
||||||
|
test -x /usr/bin/node_n && mv /usr/bin/node_n /usr/bin/node
|
||||||
|
test -x /usr/bin/npm_n && mv /usr/bin/npm_n /usr/bin/npm
|
||||||
|
|
||||||
|
# Install the requested version of nodejs
|
||||||
|
n $nodejs_version
|
||||||
|
|
||||||
|
# Find the last "real" version for this major version of node.
|
||||||
|
real_nodejs_version=$(find $node_version_path/$nodejs_version* -maxdepth 0 | sort --version-sort | tail --lines=1)
|
||||||
|
real_nodejs_version=$(basename $real_nodejs_version)
|
||||||
|
|
||||||
|
# Create a symbolic link for this major version
|
||||||
|
ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version
|
||||||
|
|
||||||
|
# Store the ID of this app and the version of node requested for it
|
||||||
|
echo "$YNH_APP_ID:$nodejs_version" | tee --append "$n_install_dir/ynh_app_version"
|
||||||
|
|
||||||
|
# Store nodejs_version into the config of this app
|
||||||
|
ynh_app_setting_set $app nodejs_version $nodejs_version
|
||||||
|
|
||||||
|
# Build the update script and set the cronjob
|
||||||
|
ynh_cron_upgrade_node
|
||||||
|
|
||||||
|
ynh_use_nodejs
|
||||||
|
}
|
||||||
|
|
||||||
|
ynh_remove_nodejs () {
|
||||||
|
ynh_use_nodejs
|
||||||
|
|
||||||
|
# Remove the line for this app
|
||||||
|
sed --in-place "/$YNH_APP_ID:$nodejs_version/d" "$n_install_dir/ynh_app_version"
|
||||||
|
|
||||||
|
# If none another app uses this version of nodejs, remove it.
|
||||||
|
if ! grep --quiet "$nodejs_version" "$n_install_dir/ynh_app_version"
|
||||||
|
then
|
||||||
|
n rm $nodejs_version
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If none another app uses n, remove n
|
||||||
|
if [ ! -s "$n_install_dir/ynh_app_version" ]
|
||||||
|
then
|
||||||
|
ynh_secure_remove "$n_install_dir"
|
||||||
|
ynh_secure_remove "/usr/local/n"
|
||||||
|
sed --in-place "/N_PREFIX/d" /root/.bashrc
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ynh_cron_upgrade_node () {
|
||||||
|
# Build the update script
|
||||||
|
cat > "$n_install_dir/node_update.sh" << EOF
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
version_path="$node_version_path"
|
||||||
|
n_install_dir="$n_install_dir"
|
||||||
|
|
||||||
|
# Log the date
|
||||||
|
date
|
||||||
|
|
||||||
|
# List all real installed version of node
|
||||||
|
all_real_version="\$(find \$version_path/* -maxdepth 0 -type d | sed "s@\$version_path/@@g")"
|
||||||
|
|
||||||
|
# Keep only the major version number of each line
|
||||||
|
all_real_version=\$(echo "\$all_real_version" | sed 's/\..*\$//')
|
||||||
|
|
||||||
|
# Remove double entries
|
||||||
|
all_real_version=\$(echo "\$all_real_version" | sort --unique)
|
||||||
|
|
||||||
|
# Read each major version
|
||||||
|
while read version
|
||||||
|
do
|
||||||
|
echo "Update of the version \$version"
|
||||||
|
sudo \$n_install_dir/bin/n \$version
|
||||||
|
|
||||||
|
# Find the last "real" version for this major version of node.
|
||||||
|
real_nodejs_version=\$(find \$version_path/\$version* -maxdepth 0 | sort --version-sort | tail --lines=1)
|
||||||
|
real_nodejs_version=\$(basename \$real_nodejs_version)
|
||||||
|
|
||||||
|
# Update the symbolic link for this version
|
||||||
|
sudo ln --symbolic --force --no-target-directory \$version_path/\$real_nodejs_version \$version_path/\$version
|
||||||
|
done <<< "\$(echo "\$all_real_version")"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$n_install_dir/node_update.sh"
|
||||||
|
|
||||||
|
# Build the cronjob
|
||||||
|
cat > "/etc/cron.daily/node_update" << EOF
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
$n_install_dir/node_update.sh >> $n_install_dir/node_update.log
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "/etc/cron.daily/node_update"
|
||||||
|
}
|
|
@ -1,33 +1,75 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Récupère les infos de l'application.
|
#=================================================
|
||||||
|
# GENERIC STARTING
|
||||||
|
#=================================================
|
||||||
|
# MANAGE FAILURE OF THE SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Exit on command errors and treat unset variables as an error
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
if [ ! -e _common.sh ]; then
|
||||||
|
# Rapatrie le fichier de fonctions si il n'est pas dans le dossier courant
|
||||||
|
sudo cp ../settings/scripts/_common.sh ./_common.sh
|
||||||
|
sudo chmod a+rx _common.sh
|
||||||
|
fi
|
||||||
|
source _common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# LOAD SETTINGS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
# Source app helpers
|
|
||||||
source /usr/share/yunohost/helpers
|
|
||||||
final_path=$(ynh_app_setting_get $app final_path)
|
final_path=$(ynh_app_setting_get $app final_path)
|
||||||
domain=$(ynh_app_setting_get $app domain)
|
domain=$(ynh_app_setting_get $app domain)
|
||||||
|
db_name=$(ynh_app_setting_get $app db_name)
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STANDARD BACKUP STEPS
|
||||||
|
#=================================================
|
||||||
|
# BACKUP OF THE MAIN DIR OF THE APP
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# The parameter $1 is the backup directory location
|
CHECK_SIZE "$final_path"
|
||||||
# which will be compressed afterward
|
ynh_backup "$final_path" "${YNH_APP_BACKUP_DIR}$final_path"
|
||||||
backup_dir=$1/apps/$app
|
|
||||||
sudo mkdir -p "$backup_dir"
|
|
||||||
|
|
||||||
# Backup sources & data
|
#=================================================
|
||||||
sudo cp -a $final_path/. $backup_dir/sources
|
# BACKUP OF THE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Copy Nginx and YunoHost parameters to make the script "standalone"
|
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${YNH_APP_BACKUP_DIR}/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
sudo cp -a /etc/yunohost/apps/$app/. $backup_dir/yunohost
|
|
||||||
sudo cp -a /etc/nginx/conf.d/$domain.d/$app.conf $backup_dir/nginx.conf
|
|
||||||
|
|
||||||
# Copy dedicated php-fpm process to backup folder
|
#=================================================
|
||||||
sudo cp -a /etc/php5/fpm/pool.d/$app.conf $backup_dir/php-fpm.conf
|
# BACKUP OF THE PHP-FPM CONFIGURATION
|
||||||
sudo cp -a /etc/php5/fpm/conf.d/20-$app.ini $backup_dir/php-fpm.ini
|
#=================================================
|
||||||
|
|
||||||
# Backup db
|
ynh_backup "/etc/php5/fpm/pool.d/$app.conf" "${YNH_APP_BACKUP_DIR}/etc/php5/fpm/pool.d/$app.conf"
|
||||||
root_pwd=$(sudo cat /etc/yunohost/mysql)
|
ynh_backup "/etc/php5/fpm/conf.d/20-$app.ini" "${YNH_APP_BACKUP_DIR}/etc/php5/fpm/conf.d/20-$app.ini"
|
||||||
sudo mysqldump -u root -p$root_pwd --no-create-db $app --result-file="$backup_dir/db.sql"
|
|
||||||
|
|
||||||
# Copie du fichier sk.php
|
#=================================================
|
||||||
sudo cp -a /etc/teampass/sk.php $backup_dir/sk.php
|
# BACKUP OF THE SQL BDD
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_mysql_dump_db "$db_name" > db.sql
|
||||||
|
CHECK_SIZE "db.sql"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC BACKUP
|
||||||
|
#=================================================
|
||||||
|
# BACKUP SK.PHP
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_backup "/etc/teampass/sk.php" "${YNH_APP_BACKUP_DIR}/etc/teampass/sk.php"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP CRON FILE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_backup "/etc/cron.d/teampass" "${YNH_APP_BACKUP_DIR}/etc/cron.d/teampass"
|
||||||
|
|
156
scripts/install
156
scripts/install
|
@ -1,59 +1,93 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script
|
#=================================================
|
||||||
|
# GENERIC STARTING
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
CLEAN_SETUP () {
|
source _common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# MANAGE FAILURE OF THE SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_clean_setup () {
|
||||||
# Nettoyage des résidus d'installation non pris en charge par le script remove.
|
# Nettoyage des résidus d'installation non pris en charge par le script remove.
|
||||||
# Pas de nettoyage supplémentaire nécessaire ici...
|
# Pas de nettoyage supplémentaire nécessaire ici...
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
TRAP_ON # Active trap pour arrêter le script si une erreur est détectée.
|
ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est détectée.
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RETRIEVE ARGUMENTS FROM THE MANIFEST
|
||||||
|
#=================================================
|
||||||
|
|
||||||
domain=$YNH_APP_ARG_DOMAIN
|
domain=$YNH_APP_ARG_DOMAIN
|
||||||
path=$YNH_APP_ARG_PATH
|
path_url=$YNH_APP_ARG_PATH
|
||||||
password_admin=$YNH_APP_ARG_PASSWORD
|
password_admin=$YNH_APP_ARG_PASSWORD
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
# Source app helpers
|
#=================================================
|
||||||
source /usr/share/yunohost/helpers
|
# CHECK IF THE APP CAN BE INSTALLED WITH THIS ARGS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Vérifie que les variables ne sont pas vides.
|
path_url=$(ynh_normalize_url_path $path_url) # Vérifie et corrige la syntaxe du path.
|
||||||
CHECK_VAR "$app" "app name not set"
|
|
||||||
|
|
||||||
CHECK_PATH # Vérifie et corrige la syntaxe du path.
|
|
||||||
CHECK_DOMAINPATH # Vérifie la disponibilité du path et du domaine.
|
CHECK_DOMAINPATH # Vérifie la disponibilité du path et du domaine.
|
||||||
|
|
||||||
CHECK_FINALPATH # Vérifie que le dossier de destination n'est pas déjà utilisé.
|
CHECK_FINALPATH # Vérifie que le dossier de destination n'est pas déjà utilisé.
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STORE SETTINGS FROM MANIFEST
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Enregistre les infos dans la config YunoHost
|
|
||||||
ynh_app_setting_set $app domain $domain
|
ynh_app_setting_set $app domain $domain
|
||||||
ynh_app_setting_set $app path $path
|
ynh_app_setting_set $app path $path_url
|
||||||
|
|
||||||
GENERATE_DB $app # Créer une base de données et un utilisateur dédié au nom de l'app.
|
#=================================================
|
||||||
|
# STANDARD MODIFICATIONS
|
||||||
|
#=================================================
|
||||||
|
# CREATE A SQL BDD
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
db_name=$(ynh_sanitize_dbid $app)
|
||||||
|
ynh_app_setting_set $app db_name $db_name
|
||||||
|
ynh_mysql_setup_db $db_name $db_name
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Créer le repertoire de destination et stocke son emplacement.
|
|
||||||
sudo mkdir "$final_path"
|
|
||||||
ynh_app_setting_set $app final_path $final_path
|
ynh_app_setting_set $app final_path $final_path
|
||||||
|
ynh_setup_source "$final_path" # Télécharge la source, décompresse et copie dans $final_path
|
||||||
SETUP_SOURCE "teampass.tar.gz" # Télécharge la source, décompresse et copie dans $final_path
|
|
||||||
|
|
||||||
# Delete the install directory.
|
# Delete the install directory.
|
||||||
# SECURE_REMOVE '$final_path/install'
|
# SECURE_REMOVE '$final_path/install'
|
||||||
|
|
||||||
# Et copie le fichier de config nginx
|
#=================================================
|
||||||
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
|
# NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_add_nginx_config
|
||||||
|
|
||||||
# Modifie les variables dans le fichier de configuration nginx
|
#=================================================
|
||||||
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
# CREATE DEDICATED USER
|
||||||
sudo sed -i "s@__FINALPATH__@$final_path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
#=================================================
|
||||||
sudo sed -i "s@__NAMETOCHANGE__@$app@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
|
||||||
|
|
||||||
ADD_SYS_USER # Créer un user système dédié pour l'application
|
ynh_system_user_create $app # Créer un utilisateur système dédié à l'app
|
||||||
POOL_FPM # Créer le fichier de configuration du pool php-fpm et le configure.
|
|
||||||
|
#=================================================
|
||||||
|
# PHP-FPM CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_add_fpm_config # Créer le fichier de configuration du pool php-fpm et le configure.
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC SETUP
|
||||||
|
#=================================================
|
||||||
|
# FILL THE DATABASE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Copie du script contenant la fonction bCrypt
|
# Copie du script contenant la fonction bCrypt
|
||||||
sudo cp ../conf/mdphash.php $final_path
|
sudo cp ../conf/mdphash.php $final_path
|
||||||
|
@ -62,7 +96,7 @@ sudo cp ../conf/mdphash.php $final_path
|
||||||
if [ $(echo $LANG | cut -c1-2) == "fr" ]
|
if [ $(echo $LANG | cut -c1-2) == "fr" ]
|
||||||
then
|
then
|
||||||
langue=french
|
langue=french
|
||||||
folders=partagés
|
folders=partagés # Le dossier partagé est actuellement désactivé par défaut. Encore un bug...
|
||||||
roles=utilisateurs
|
roles=utilisateurs
|
||||||
else
|
else
|
||||||
langue=english
|
langue=english
|
||||||
|
@ -71,7 +105,7 @@ else
|
||||||
fi
|
fi
|
||||||
sed -i "s@__FINALPATH__@$final_path@g" ../conf/populate.sql
|
sed -i "s@__FINALPATH__@$final_path@g" ../conf/populate.sql
|
||||||
sed -i "s@__DOMAIN__@$domain@g" ../conf/populate.sql
|
sed -i "s@__DOMAIN__@$domain@g" ../conf/populate.sql
|
||||||
sed -i "s@__PATH__@$path@g" ../conf/populate.sql
|
sed -i "s@__PATH__@$path_url@g" ../conf/populate.sql
|
||||||
sed -i "s@__FOLDERS__@$folders@g" ../conf/populate.sql
|
sed -i "s@__FOLDERS__@$folders@g" ../conf/populate.sql
|
||||||
sed -i "s@__ROLES__@$roles@g" ../conf/populate.sql
|
sed -i "s@__ROLES__@$roles@g" ../conf/populate.sql
|
||||||
sed -i "s@__VERSION__@$(sed -n 3p $final_path/changelog.md)@g" ../conf/populate.sql
|
sed -i "s@__VERSION__@$(sed -n 3p $final_path/changelog.md)@g" ../conf/populate.sql
|
||||||
|
@ -83,28 +117,43 @@ sed -i "s@__LANG__@$langue@g" ../conf/populate.sql
|
||||||
ynh_app_setting_set $app langue $langue
|
ynh_app_setting_set $app langue $langue
|
||||||
|
|
||||||
# Import du fichier SQL
|
# Import du fichier SQL
|
||||||
mysql -u $db_user -p$db_pwd $db_user < ../conf/populate.sql
|
mysql -u $db_name -p$db_pwd $db_name < ../conf/populate.sql
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CONFIGURE TEAMPASS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Remplacement des variables dans les fichier settings.php et sk.php
|
# Remplacement des variables dans les fichier settings.php et sk.php
|
||||||
sed -i "s@__DBUSER__@$db_user@g" ../conf/settings.php
|
sed -i "s@__DBUSER__@$db_name@g" ../conf/settings.php
|
||||||
sed -i "s@__DBPWD__@$db_pwd@g" ../conf/settings.php
|
sed -i "s@__DBPWD__@$db_pwd@g" ../conf/settings.php
|
||||||
sed -i "s@__FINALPATH__@$final_path@g" ../conf/settings.php
|
sed -i "s@__FINALPATH__@$final_path@g" ../conf/settings.php
|
||||||
path_sk_file=/etc/teampass/
|
path_sk_file=/etc/teampass/
|
||||||
sudo mkdir $path_sk_file
|
sudo mkdir $path_sk_file
|
||||||
sed -i "s@__SKPATH__@$path_sk_file@g" ../conf/settings.php
|
sed -i "s@__SKPATH__@$path_sk_file@g" ../conf/settings.php
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE A SALTKEY
|
||||||
|
#=================================================
|
||||||
|
|
||||||
saltkey=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{32\}\).*/\1/p')
|
saltkey=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{32\}\).*/\1/p')
|
||||||
sed -i "s@__SALTKEY__@$saltkey@g" ../conf/sk.php
|
sed -i "s@__SALTKEY__@$saltkey@g" ../conf/sk.php
|
||||||
|
|
||||||
# Et copie des fichiers à leurs emplacements.
|
#=================================================
|
||||||
|
# COPY THE FILES
|
||||||
|
#=================================================
|
||||||
|
|
||||||
sudo cp ../conf/sk.php $path_sk_file/sk.php
|
sudo cp ../conf/sk.php $path_sk_file/sk.php
|
||||||
sudo chown -R root:$app $path_sk_file
|
sudo chown -R root:$app $path_sk_file
|
||||||
sudo chmod 750 $path_sk_file
|
sudo chmod 750 $path_sk_file
|
||||||
sudo cp ../conf/settings.php $final_path/includes/config/settings.php
|
sudo cp ../conf/settings.php $final_path/includes/config/settings.php
|
||||||
STORE_MD5_CONFIG "settings.php" "$final_path/includes/config/settings.php" # Enregistre la somme de contrôle du fichier de config
|
ynh_store_file_checksum "$final_path/includes/config/settings.php" # Enregistre la somme de contrôle du fichier de config
|
||||||
sudo cp $final_path/includes/libraries/csrfp/libs/csrfp.config.sample.php $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Créer le fichier de config de csrfp
|
sudo cp $final_path/includes/libraries/csrfp/libs/csrfp.config.sample.php $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Créer le fichier de config de csrfp
|
||||||
sed -i "s@CSRFP_TOKEN\" => \"@&$(head -n40 /dev/urandom | tr -c -d 'a-f0-9' | head -c50)@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne un token, valide en hexadécimal
|
sed -i "s@CSRFP_TOKEN\" => \"@&$(head -n40 /dev/urandom | tr -c -d 'a-f0-9' | head -c50)@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne un token, valide en hexadécimal
|
||||||
sed -i "s@jsUrl\" => \"@&$domain$path/includes/libraries/csrfp/js/csrfprotector.js@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne l'adresse de csrfprotector.js
|
sed -i "s@jsUrl\" => \"@&$domain$path_url/includes/libraries/csrfp/js/csrfprotector.js@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne l'adresse de csrfprotector.js
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE THE USERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Ajout des utilisateurs actuels dans la base yunohost
|
# Ajout des utilisateurs actuels dans la base yunohost
|
||||||
teampass_users=$(ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x objectClass=mailAccount uid | grep uid: | sed 's/uid: //' | xargs)
|
teampass_users=$(ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x objectClass=mailAccount uid | grep uid: | sed 's/uid: //' | xargs)
|
||||||
|
@ -115,28 +164,35 @@ do
|
||||||
password=$(php ../conf/mdphash.php $real_password)
|
password=$(php ../conf/mdphash.php $real_password)
|
||||||
mail=$(sudo ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x uid=$teampassuser mail | grep mail: | sed 's/mail: //' | head -n1)
|
mail=$(sudo ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x uid=$teampassuser mail | grep mail: | sed 's/mail: //' | head -n1)
|
||||||
# Creation de l'utilisateur
|
# Creation de l'utilisateur
|
||||||
mysql -u $db_user -p$db_pwd $db_user -e "INSERT INTO teampass_users (id, login, pw, groupes_visibles, derniers, key_tempo, last_pw_change, last_pw, admin, fonction_id, groupes_interdits, last_connexion, gestionnaire, email, favourites, latest_items, personal_folder, can_create_root_folder) VALUES (NULL, '$teampassuser', '$password', '1', '', '', '', '', '0', '1', '', '', '0', '$mail', '', '', '1', '1');"
|
mysql -u $db_name -p$db_pwd $db_name -e "INSERT INTO teampass_users (id, login, pw, groupes_visibles, derniers, key_tempo, last_pw_change, last_pw, admin, fonction_id, groupes_interdits, last_connexion, gestionnaire, email, favourites, latest_items, personal_folder, can_create_root_folder) VALUES (NULL, '$teampassuser', '$password', '1', '', '', '', '', '0', '1', '', '', '0', '$mail', '', '', '1', '1');"
|
||||||
# Creation du repertoire personnel
|
# Creation du repertoire personnel
|
||||||
id_user=$(mysql -u $db_user -p$db_pwd $db_user -se "SELECT id from teampass_users where login='$teampassuser';")
|
id_user=$(mysql -u $db_name -p$db_pwd $db_name -se "SELECT id from teampass_users where login='$teampassuser';")
|
||||||
mysql -u $db_user -p$db_pwd $db_user -e "INSERT INTO teampass_nested_tree (id, parent_id, title, nleft, nright, nlevel, bloquer_creation, bloquer_modification, personal_folder, renewal_period) VALUES (NULL, 0, '$id_user', 0, 0, 1, 0, 0, 1, 0);"
|
mysql -u $db_name -p$db_pwd $db_name -e "INSERT INTO teampass_nested_tree (id, parent_id, title, nleft, nright, nlevel, bloquer_creation, bloquer_modification, personal_folder, renewal_period) VALUES (NULL, 0, '$id_user', 0, 0, 1, 0, 0, 1, 0);"
|
||||||
|
|
||||||
((id++))
|
((id++))
|
||||||
done
|
done
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE A CRON FILE FOR AUTOMATIC BACKUP
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
echo "0 0 * * 0 $app cd $final_path/backups && php script.backup.php" > /etc/cron.d/teampass
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALISATION
|
||||||
|
#=================================================
|
||||||
|
# SECURING FILES AND DIRECTORIES
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Configure les droits d'accès au fichiers
|
|
||||||
# -rw-r--r-- sur les fichiers
|
|
||||||
sudo find $final_path -type f -print0 | xargs -0 sudo chmod 644
|
|
||||||
# drwxr-xr-x sur les dossiers
|
|
||||||
sudo find $final_path -type d -print0 | xargs -0 sudo chmod 755
|
|
||||||
# Les dossiers files et upload ont besoin d'un droit d'écriture.
|
|
||||||
sudo chmod 774 -R $final_path/files $final_path/upload
|
|
||||||
# Le script de conversion csv xml doit être exécutable, au moins par root.
|
|
||||||
sudo chmod 744 $final_path/CsvToXml_For_Teampass.sh
|
|
||||||
# Les fichiers appartiennent à root
|
# Les fichiers appartiennent à root
|
||||||
sudo chown -R root:$app $final_path
|
sudo chown -R root: $final_path
|
||||||
|
# Sauf les dossiers files et upload
|
||||||
|
sudo chown -R $app: $final_path/files $final_path/upload
|
||||||
|
# Restreint l'accès au dossier de backup
|
||||||
|
sudo chmod 750 $final_path/backups
|
||||||
|
|
||||||
# Recharge la configuration Nginx
|
#=================================================
|
||||||
sudo service nginx reload
|
# RELOAD NGINX
|
||||||
# Régénère la configuration de SSOwat
|
#=================================================
|
||||||
sudo yunohost app ssowatconf
|
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
|
|
@ -1,34 +1,61 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script
|
#=================================================
|
||||||
|
# GENERIC STARTING
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Récupère les infos de l'application.
|
source _common.sh
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
|
||||||
|
|
||||||
# Source app helpers
|
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# LOAD SETTINGS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
domain=$(ynh_app_setting_get $app domain)
|
domain=$(ynh_app_setting_get $app domain)
|
||||||
|
db_name=$(ynh_app_setting_get $app db_name)
|
||||||
|
|
||||||
REMOVE_BDD $app # Suppression de la base de donnée et de l'utilisateur associé.
|
#=================================================
|
||||||
|
# STANDARD REMOVE
|
||||||
|
#=================================================
|
||||||
|
# REMOVE THE SQL BDD
|
||||||
|
#=================================================
|
||||||
|
|
||||||
SECURE_REMOVE '/var/www/$app' # Suppression du dossier de l'application
|
ynh_mysql_remove_db $db_name $db_name # Suppression de la base de donnée et de l'utilisateur associé.
|
||||||
|
|
||||||
# Remove the sk.php
|
#=================================================
|
||||||
if [ -e "/etc/teampass/" ]; then
|
# REMOVE THE MAIN DIR OF THE APP
|
||||||
echo "Delete sk.php"
|
#=================================================
|
||||||
sudo rm -r "/etc/teampass/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
REMOVE_NGINX_CONF # Suppression de la configuration nginx
|
ynh_secure_remove "/var/www/$app" # Suppression du dossier de l'application
|
||||||
|
|
||||||
SECURE_REMOVE '/var/log/$app/' # Suppression des log
|
#=================================================
|
||||||
|
# REMOVE THE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
REMOVE_FPM_CONF # Suppression de la configuration du pool php-fpm
|
ynh_remove_nginx_config # Suppression de la configuration nginx
|
||||||
|
|
||||||
REMOVE_SYS_USER # Supprime l'user système dédié pour l'application
|
#=================================================
|
||||||
|
# REMOVE THE PHP-FPM CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Régénère la configuration de SSOwat
|
ynh_remove_fpm_config # Suppression de la configuration du pool php-fpm
|
||||||
sudo yunohost app ssowatconf
|
|
||||||
|
|
||||||
echo -e "\e[0m" # Restore normal color
|
#=================================================
|
||||||
|
# SPECIFIC REMOVE
|
||||||
|
#=================================================
|
||||||
|
# REMOVE THE SK.PHP FILE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_secure_remove "/etc/teampass"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALISATION
|
||||||
|
#=================================================
|
||||||
|
# REMOVE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_system_user_delete $app
|
||||||
|
|
127
scripts/restore
127
scripts/restore
|
@ -1,57 +1,110 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Récupère les infos de l'application.
|
#=================================================
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
# GENERIC STARTING
|
||||||
|
#=================================================
|
||||||
|
# MANAGE FAILURE OF THE SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Source app helpers
|
# Exit on command errors and treat unset variables as an error
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
if [ ! -e _common.sh ]; then
|
||||||
|
# Rapatrie le fichier de fonctions si il n'est pas dans le dossier courant
|
||||||
|
sudo cp ../settings/scripts/_common.sh ./_common.sh
|
||||||
|
sudo chmod a+rx _common.sh
|
||||||
|
fi
|
||||||
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# LOAD SETTINGS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
domain=$(ynh_app_setting_get $app domain)
|
domain=$(ynh_app_setting_get $app domain)
|
||||||
|
path_url=$(ynh_app_setting_get $app path)
|
||||||
final_path=$(ynh_app_setting_get $app final_path)
|
final_path=$(ynh_app_setting_get $app final_path)
|
||||||
|
db_name=$(ynh_app_setting_get $app db_name)
|
||||||
|
|
||||||
# The parameter $1 is the uncompressed restore directory location
|
#=================================================
|
||||||
backup_dir=$1/apps/$app
|
# CHECK IF THE APP CAN BE RESTORED
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Restore Nginx
|
sudo yunohost app checkurl "${domain}${path_url}" -a "$app" \
|
||||||
conf=/etc/nginx/conf.d/$domain.d/$app.conf
|
|| ynh_die "Path not available: ${domain}${path_url}"
|
||||||
if [ -f $conf ]; then
|
test ! -d $final_path \
|
||||||
echo "There is already a nginx conf file at this path: $conf " >&2
|
|| ynh_die "There is already a directory: $final_path "
|
||||||
ynh_die
|
|
||||||
fi
|
|
||||||
sudo cp -a $backup_dir/nginx.conf $conf
|
|
||||||
|
|
||||||
# Restore YunoHost parameters
|
#=================================================
|
||||||
sudo cp -a $backup_dir/yunohost/. /etc/yunohost/apps/$app
|
# STANDARD RESTORE STEPS
|
||||||
|
#=================================================
|
||||||
|
# RESTORE OF THE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Restore sources & data
|
ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
sudo cp -a "$backup_dir/sources/." $final_path
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE OF THE MAIN DIR OF THE APP
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_restore_file "$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE OF THE SQL BDD
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Créer la base de donnée et la restaure
|
|
||||||
db_pwd=$(ynh_app_setting_get $app mysqlpwd)
|
db_pwd=$(ynh_app_setting_get $app mysqlpwd)
|
||||||
db_user=$app
|
ynh_mysql_setup_db $db_name $db_name $db_pwd
|
||||||
ynh_mysql_create_db $db_user $db_user $db_pwd
|
ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql
|
||||||
mysql --debug-check -u $db_user -p$db_pwd $db_user < ${backup_dir}/db.sql
|
|
||||||
|
|
||||||
# Copy dedicated php-fpm process from backup folder to the right location
|
#=================================================
|
||||||
sudo cp -a $backup_dir/php-fpm.conf /etc/php5/fpm/pool.d/$app.conf
|
# RECREATE OF THE DEDICATED USER
|
||||||
sudo cp -a $backup_dir/php-fpm.ini /etc/php5/fpm/conf.d/20-$app.ini
|
#=================================================
|
||||||
|
|
||||||
# ADD_SYS_USER # Créer un user système dédié pour l'application
|
ynh_system_user_create $app # Recreate the dedicated user, if not exist
|
||||||
if ! ynh_system_user_exists "$app" # Test l'existence de l'utilisateur
|
|
||||||
then
|
|
||||||
sudo useradd -d /var/www/$app --system --user-group $app --shell /usr/sbin/nologin || (echo "Unable to create $app system account" >&2 && false)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copie du fichier sk.php
|
#=================================================
|
||||||
sudo mkdir /etc/teampass
|
# RESTORE USER RIGHTS
|
||||||
sudo cp -a $backup_dir/sk.php /etc/teampass/sk.php
|
#=================================================
|
||||||
sudo chown -R root:$app /etc/teampass/sk.php
|
|
||||||
|
|
||||||
# Les fichiers appartiennent à root
|
# Les fichiers appartiennent à root
|
||||||
sudo chown -R root:$app $final_path
|
sudo chown -R root: $final_path
|
||||||
|
# Sauf les dossiers files et upload
|
||||||
|
sudo chown -R $app: $final_path/files $final_path/upload
|
||||||
|
|
||||||
# And Reload service
|
#=================================================
|
||||||
sudo service php5-fpm reload
|
# RESTORE OF THE PHP-FPM CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Reload webserver
|
ynh_restore_file "/etc/php5/fpm/pool.d/$app.conf"
|
||||||
sudo service nginx reload
|
ynh_restore_file "/etc/php5/fpm/conf.d/20-$app.ini"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC RESTORE
|
||||||
|
#=================================================
|
||||||
|
# RESTORE THE SK.PHP FILE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_restore_file "/etc/teampass/sk.php"
|
||||||
|
sudo chown -R root:$app "/etc/teampass/sk.php"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE CRON FILE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_restore_file "/etc/cron.d/teampass"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALISATION
|
||||||
|
#=================================================
|
||||||
|
# RELOAD NGINX AND PHP-FPM
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
sudo systemctl reload php5-fpm
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
|
110
scripts/upgrade
110
scripts/upgrade
|
@ -1,53 +1,93 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script
|
#=================================================
|
||||||
|
# GENERIC STARTING
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Récupère les infos de l'application.
|
source _common.sh
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
|
||||||
|
|
||||||
# Source app helpers
|
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# LOAD SETTINGS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
domain=$(ynh_app_setting_get $app domain)
|
domain=$(ynh_app_setting_get $app domain)
|
||||||
path=$(ynh_app_setting_get $app path)
|
path_url=$(ynh_app_setting_get $app path)
|
||||||
final_path=$(ynh_app_setting_get $app final_path)
|
final_path=$(ynh_app_setting_get $app final_path)
|
||||||
|
|
||||||
CHECK_PATH # Vérifie et corrige la syntaxe du path.
|
#=================================================
|
||||||
|
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||||
|
#=================================================
|
||||||
|
|
||||||
SETUP_SOURCE "teampass.tar.gz" # Télécharge la source, décompresse et copie dans $final_path
|
BACKUP_BEFORE_UPGRADE # Backup the current version of the app
|
||||||
|
ynh_clean_setup () {
|
||||||
|
BACKUP_FAIL_UPGRADE # restore it if the upgrade fails
|
||||||
|
}
|
||||||
|
ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est détectée.
|
||||||
|
|
||||||
# Delete the install directory.
|
#=================================================
|
||||||
SECURE_REMOVE '$final_path/install'
|
# CHECK THE PATH
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# Et copie le fichier de config nginx
|
path_url=$(ynh_normalize_url_path $path_url) # Vérifie et corrige la syntaxe du path.
|
||||||
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
|
|
||||||
|
|
||||||
# Modifie les variables dans le fichier de configuration nginx
|
#=================================================
|
||||||
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
# STANDARD UPGRADE STEPS
|
||||||
sudo sed -i "s@__FINALPATH__@$final_path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
#=================================================
|
||||||
sudo sed -i "s@__NAMETOCHANGE__@$app@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
ADD_SYS_USER # Créer un user système dédié pour l'application
|
ynh_setup_source "$final_path" # Télécharge la source, décompresse et copie dans $final_path
|
||||||
POOL_FPM # Créer le fichier de configuration du pool php-fpm et le configure.
|
|
||||||
|
|
||||||
# sudo chown www-data: -R $final_path
|
#=================================================
|
||||||
# sudo chmod 770 -R $final_path
|
# NGINX CONFIGURATION
|
||||||
# sudo find $final_path -type f -print0 | xargs -0 sudo chmod 740 # Applique les permissions sur les fichiers seulement (rwxr-----)
|
#=================================================
|
||||||
# sudo chmod 770 -R $final_path/files $final_path/upload
|
|
||||||
# sudo chmod a+x $final_path/CsvToXml_For_Teampass.sh
|
ynh_add_nginx_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_system_user_create $app # Create the dedicated user, if not exist
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# PHP-FPM CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_add_fpm_config # Créer le fichier de configuration du pool php-fpm et le configure.
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC UPGRADE
|
||||||
|
#=================================================
|
||||||
|
# ...
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE A CRON FILE FOR AUTOMATIC BACKUP
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
echo "0 0 * * 0 $app cd $final_path/backups && php script.backup.php" > /etc/cron.d/teampass
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALISATION
|
||||||
|
#=================================================
|
||||||
|
# SECURING FILES AND DIRECTORIES
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# -rw-r--r-- sur les fichiers
|
|
||||||
sudo find $final_path -type f -print0 | xargs -0 sudo chmod 644
|
|
||||||
# drwxr-xr-x sur les dossiers
|
|
||||||
sudo find $final_path -type d -print0 | xargs -0 sudo chmod 755
|
|
||||||
# Les dossiers files et upload ont besoin d'un droit d'écriture.
|
|
||||||
sudo chmod 774 -R $final_path/files $final_path/upload
|
|
||||||
# Le script de conversion csv xml doit être exécutable, au moins par root.
|
|
||||||
sudo chmod 744 $final_path/CsvToXml_For_Teampass.sh
|
|
||||||
# Les fichiers appartiennent à root
|
# Les fichiers appartiennent à root
|
||||||
sudo chown -R root: $final_path
|
sudo chown -R root: $final_path
|
||||||
|
# Sauf les dossiers files et upload
|
||||||
|
sudo chown -R $app: $final_path/files $final_path/upload
|
||||||
|
# Restreint l'accès au dossier de backup
|
||||||
|
sudo chmod 750 $final_path/backups
|
||||||
|
|
||||||
# Recharge la configuration Nginx
|
#=================================================
|
||||||
sudo service nginx reload
|
# RELOAD NGINX
|
||||||
# Régénère la configuration de SSOwat
|
#=================================================
|
||||||
sudo yunohost app ssowatconf
|
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
|
Loading…
Reference in a new issue