1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/piwigo_ynh.git synced 2024-09-03 20:06:03 +02:00

Normalization from example_ynh

This commit is contained in:
Maniack Crudelis 2019-02-17 19:28:37 +01:00
parent 0dbb9aceb3
commit 3e51013a99
15 changed files with 423 additions and 247 deletions

View file

@ -1,19 +1,35 @@
Piwigo for YunoHost # Piwigo for YunoHost
---------------------
[![Integration level](https://dash.yunohost.org/integration/piwigo.svg)](https://dash.yunohost.org/appci/app/piwigo)
[![Install Piwigo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=piwigo) [![Install Piwigo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=piwigo)
[![Integration level](https://dash.yunohost.org/integration/piwigo.svg)](https://ci-apps.yunohost.org/jenkins/job/piwigo%20%28Community%29/lastBuild/consoleFull) > *This package allow you to install Piwigo quickly and simply on a YunoHost server.
If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.*
[Piwigo](http://piwigo.org) is a photo gallery software for the web, built by an active community of users and developers. ## Overview
[Piwigo](http://piwigo.org) is a photo gallery software for the web, built by an active community of users and developers
Extensions make Piwigo easily customizable. Icing on the cake, Piwigo is free and opensource. Extensions make Piwigo easily customizable. Icing on the cake, Piwigo is free and opensource.
**Shipped version:** 2.9.4 **Shipped version:** 2.9.4
## Screenshots
![](http://piwigo.org/screenshots/homepage/piwigo-batch-manager.png) ![](http://piwigo.org/screenshots/homepage/piwigo-batch-manager.png)
## Features ## Demo
* [YunoHost demo](https://demo.yunohost.org/piwigo/)
* [Official demo](http://piwigo.org/demo/)
## Configuration
## Documentation
* Official documentation: https://piwigo.org/doc/doku.php
* YunoHost documentation: https://yunohost.org/#/app_piwigo
## YunoHost specific features
In addition to Piwigo core features, the following are made available with In addition to Piwigo core features, the following are made available with
this package: this package:
@ -25,14 +41,32 @@ this package:
* allow other users management, and guest mode * allow other users management, and guest mode
* Allow one YunoHost user to be the administrator (set at the installation) * Allow one YunoHost user to be the administrator (set at the installation)
#### Supported architectures
* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/piwigo%20%28Official%29.svg)](https://ci-apps.yunohost.org/ci/apps/piwigo/)
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/piwigo%20%28Official%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/piwigo/)
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/piwigo%20%28Official%29.svg)](https://ci-stretch.nohost.me/ci/apps/piwigo/)
## Limitations ## Limitations
No limitation known. ## Additionnal informations
It has been tested on x86_64 and ARM.
## Links ## Links
* Report a bug: https://github.com/YunoHost-Apps/piwigo_ynh/issues * Report a bug: https://github.com/YunoHost-Apps/piwigo_ynh/issues
* Piwigo website: http://piwigo.org/ * Piwigo website: http://piwigo.org/
* YunoHost website: https://yunohost.org/ * YunoHost website: https://yunohost.org/
---
Developers infos
----------------
Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/piwigo_ynh/tree/testing).
To try the testing branch, please proceed like that.
```
sudo yunohost app install https://github.com/YunoHost-Apps/piwigo_ynh/tree/testing --debug
or
sudo yunohost app upgrade piwigo -u https://github.com/YunoHost-Apps/piwigo_ynh/tree/testing --debug
```

View file

@ -1,3 +1,6 @@
SOURCE_URL=http://piwigo.org/download/dlcounter.php?code=2.9.4 SOURCE_URL=http://piwigo.org/download/dlcounter.php?code=2.9.4
SOURCE_SUM=00fafe6887af62e34ee97dc9b8e4be0720af9f27ea1cdb16ab6217f462574a3c SOURCE_SUM=00fafe6887af62e34ee97dc9b8e4be0720af9f27ea1cdb16ab6217f462574a3c
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=zip SOURCE_FORMAT=zip
SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=

View file

@ -1,8 +1,8 @@
<?php <?php
$conf['dblayer'] = 'mysqli'; $conf['dblayer'] = 'mysqli';
$conf['db_base'] = 'DBTOCHANGE'; $conf['db_base'] = '__DBTOCHANGE__';
$conf['db_user'] = 'USERTOCHANGE'; $conf['db_user'] = '__USERTOCHANGE__';
$conf['db_password'] = 'PASSTOCHANGE'; $conf['db_password'] = '__PASSTOCHANGE__';
$conf['db_host'] = 'localhost'; $conf['db_host'] = 'localhost';
$prefixeTable = ''; $prefixeTable = '';

View file

@ -1,5 +1,6 @@
SOURCE_URL=https://github.com/VSLCatena/ldap_login/archive/1c682e41c23b8f7bddf2e3ff4afaa9373b280a7b.zip SOURCE_URL=https://github.com/VSLCatena/ldap_login/archive/1c682e41c23b8f7bddf2e3ff4afaa9373b280a7b.zip
SOURCE_SUM=188fcc3220375ca7c506b321ce9cc91d03966040ece096fb4fcd11d45411206f SOURCE_SUM=188fcc3220375ca7c506b321ce9cc91d03966040ece096fb4fcd11d45411206f
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=zip SOURCE_FORMAT=zip
SOURCE_IN_SUBDIR=true SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=

View file

@ -1,5 +1,6 @@
SOURCE_URL=http://piwigo.org/ext/download.php?rid=5525 SOURCE_URL=http://piwigo.org/ext/download.php?rid=5525
SOURCE_SUM=85b9a06f2c7ca8ae9698e6151c7631f519c945f696b02da72f9ff53243d7e4ca SOURCE_SUM=85b9a06f2c7ca8ae9698e6151c7631f519c945f696b02da72f9ff53243d7e4ca
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=zip SOURCE_FORMAT=zip
SOURCE_IN_SUBDIR=false SOURCE_IN_SUBDIR=false
SOURCE_FILENAME=

View file

@ -1,14 +1,20 @@
location __PATH__ { #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
location __PATH__/ {
# Path to source
alias __FINALPATH__/ ; alias __FINALPATH__/ ;
# Force usage of https
if ($scheme = http) { if ($scheme = http) {
rewrite ^ https://$server_name$request_uri? permanent; rewrite ^ https://$server_name$request_uri? permanent;
} }
client_max_body_size 100M; client_max_body_size 100M;
index index.php; index index.php;
default_type text/html; default_type text/html;
location ~ [^/]\.php(/|$) { location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock;
fastcgi_index index.php; fastcgi_index index.php;
include fastcgi_params; include fastcgi_params;
fastcgi_param REMOTE_USER $remote_user if_not_empty; fastcgi_param REMOTE_USER $remote_user if_not_empty;

View file

@ -6,7 +6,7 @@
"en": "photo gallery", "en": "photo gallery",
"fr": "Galerie photo" "fr": "Galerie photo"
}, },
"version": "2.9.4~ynh1", "version": "2.9.4~ynh2",
"url": "http://piwigo.org", "url": "http://piwigo.org",
"license": "GPL-2.0", "license": "GPL-2.0",
"maintainer": { "maintainer": {
@ -64,6 +64,7 @@
}, },
{ {
"name": "language", "name": "language",
"type": "string",
"ask": { "ask": {
"en": "Choose the application language", "en": "Choose the application language",
"fr": "Choisissez la langue de l'application" "fr": "Choisissez la langue de l'application"

View file

@ -68,12 +68,47 @@ ynh_remove_fail2ban_config () {
} }
# Delete a file checksum from the app settings # Delete a file checksum from the app settings
#=================================================
# Check available space before creating a temp directory.
# #
# $app should be defined when calling this helper # $app should be defined when calling this helper
# usage: ynh_smart_mktemp --min_size="Min size"
# #
# usage: ynh_remove_file_checksum file # usage: ynh_remove_file_checksum file
# | arg: file - The file for which the checksum will be deleted # | arg: file - The file for which the checksum will be deleted
ynh_delete_file_checksum () { ynh_delete_file_checksum () {
local checksum_setting_name=checksum_${1//[\/ ]/_} # Replace all '/' and ' ' by '_' local checksum_setting_name=checksum_${1//[\/ ]/_} # Replace all '/' and ' ' by '_'
ynh_app_setting_delete $app $checksum_setting_name ynh_app_setting_delete $app $checksum_setting_name
# | arg: -s, --min_size= - Minimal size needed for the temporary directory, in Mb
ynh_smart_mktemp () {
# Declare an array to define the options of this helper.
declare -Ar args_array=( [s]=min_size= )
local min_size
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
min_size="${min_size:-300}"
# Transform the minimum size from megabytes to kilobytes
min_size=$(( $min_size * 1024 ))
# Check if there's enough free space in a directory
is_there_enough_space () {
local free_space=$(df --output=avail "$1" | sed 1d)
test $free_space -ge $min_size
}
if is_there_enough_space /tmp; then
local tmpdir=/tmp
elif is_there_enough_space /var; then
local tmpdir=/var
elif is_there_enough_space /; then
local tmpdir=/
elif is_there_enough_space /home; then
local tmpdir=/home
else
ynh_die "Insufficient free space to continue..."
fi
echo "$(sudo mktemp --directory --tmpdir="$tmpdir")"
} }

View file

@ -1,16 +1,12 @@
#!/bin/bash #!/bin/bash
#=================================================
# GENERIC START
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then source ../settings/scripts/_common.sh
# Fetch helpers file if not in current directory
cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -33,42 +29,44 @@ db_name=$(ynh_app_setting_get $app db_name)
#================================================= #=================================================
# STANDARD BACKUP STEPS # STANDARD BACKUP STEPS
#================================================= #=================================================
# BACKUP APP MAIN DIR # BACKUP THE APP MAIN DIR
#================================================= #=================================================
ynh_backup "$final_path" ynh_backup "$final_path"
# Copy the data directory
backup_core_only=$(ynh_app_setting_get "$app" backup_core_only)
if [ -z $backup_core_only ] # If backup_core_only setting set, don't backup data directory
then
ynh_backup /home/yunohost.app/${app}/upload
else
echo "Data dir won't be saved, because backup_core_only is set." >&2
# Remove the option so that next regular backup will be complete
ynh_app_setting_delete $app backup_core_only
fi
#================================================= #=================================================
# BACKUP FAIL2BAN CONFIGURATION # BACKUP THE NGINX CONFIGURATION
#=================================================
ynh_backup "/etc/fail2ban/jail.d/$app.conf"
ynh_backup "/etc/fail2ban/filter.d/$app.conf"
#=================================================
# BACKUP NGINX CONFIGURATION
#================================================= #=================================================
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
#================================================= #=================================================
# BACKUP PHP-FPM CONFIGURATION # BACKUP THE PHP-FPM CONFIGURATION
#================================================= #=================================================
ynh_backup "/etc/php5/fpm/pool.d/$app.conf"
#================================================= #=================================================
# BACKUP MYSQL DB # BACKUP THE MYSQL DATABASE
#================================================= #=================================================
ynh_mysql_dump_db "$db_name" > db.sql ynh_mysql_dump_db "$db_name" > db.sql
#=================================================
# BACKUP FAIL2BAN CONFIGURATION
#=================================================
ynh_backup "/etc/php5/fpm/pool.d/$app.conf"
ynh_backup "/etc/fail2ban/jail.d/$app.conf"
ynh_backup "/etc/fail2ban/filter.d/$app.conf"
#=================================================
# SPECIFIC BACKUP
#=================================================
# BACKUP THE DATA DIRECTORY
#=================================================
# The 1 parameter indicates the directory is "big",
# so that it won't be backed up before upgrade
# This argument has to be the third one.
ynh_backup "/home/yunohost.app/${app}/upload" "/home/yunohost.app/${app}/upload" 1

View file

@ -21,6 +21,13 @@ new_path=$YNH_APP_NEW_PATH
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
#=================================================
# LOAD SETTINGS
#=================================================
# Needed for helper "ynh_add_nginx_config"
final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# CHECK PATHS SYNTAX # CHECK PATHS SYNTAX
#================================================= #=================================================
@ -59,18 +66,17 @@ if [ $change_path -eq 1 ]
then then
# Make a backup of the original nginx config file if modified # Make a backup of the original nginx config file if modified
ynh_backup_if_checksum_is_different "$nginx_conf_path" ynh_backup_if_checksum_is_different "$nginx_conf_path"
# Replace locations starting with old_path # Set global variables for nginx helper
# Look for every location possible patterns (see https://nginx.org/en/docs/http/ngx_http_core_module.html#location) domain="$old_domain"
ynh_replace_string "location\( \(=\|~\|~\*\|\^~\)\)\? $old_path" "location\1 $new_path" "$nginx_conf_path" path_url="$new_path"
# Replace path in "return" directives # Create a dedicated nginx config
ynh_replace_string "return \([[:digit:]]\{3\}\) $old_path" "return \1 $new_path" "$nginx_conf_path" ynh_add_nginx_config
# Calculate and store the nginx config file checksum
ynh_store_file_checksum "$nginx_conf_path"
fi fi
# Change the domain for nginx # Change the domain for nginx
if [ $change_domain -eq 1 ] if [ $change_domain -eq 1 ]
then then
# Delete file checksum for the old conf file location
ynh_delete_file_checksum "$nginx_conf_path" ynh_delete_file_checksum "$nginx_conf_path"
mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf
# Store file checksum for the new config file location # Store file checksum for the new config file location
@ -84,3 +90,4 @@ fi
#================================================= #=================================================
systemctl reload nginx systemctl reload nginx

View file

@ -1,5 +1,4 @@
#!/bin/bash #!/bin/bash
shopt -s extglob # sets extended pattern matching options in the bash shell
#================================================= #=================================================
# GENERIC STARTING # GENERIC STARTING
@ -14,39 +13,31 @@ source /usr/share/yunohost/helpers
# MANAGE SCRIPT FAILURE # MANAGE SCRIPT FAILURE
#================================================= #=================================================
ynh_abort_if_errors # Stop script if an error is detected # Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#================================================= #=================================================
# RETRIEVE ARGUMENTS FROM THE MANIFEST # RETRIEVE ARGUMENTS FROM THE MANIFEST
#================================================= #=================================================
# Retrieve app id
app=$YNH_APP_INSTANCE_NAME
# Retrieve arguments
domain=$YNH_APP_ARG_DOMAIN domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH path_url=$YNH_APP_ARG_PATH
admin=$YNH_APP_ARG_ADMIN admin=$YNH_APP_ARG_ADMIN
is_public=$YNH_APP_ARG_IS_PUBLIC is_public=$YNH_APP_ARG_IS_PUBLIC
language=$YNH_APP_ARG_LANGUAGE language=$YNH_APP_ARG_LANGUAGE
if [ "$language" = "fr" ] ; then app=$YNH_APP_INSTANCE_NAME
applanguage="fr_FR"
else
applanguage="en_UK"
fi
#================================================= #=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#================================================= #=================================================
path_url=$(ynh_normalize_url_path $path_url) # Check and normalize path
final_path=/var/www/$app final_path=/var/www/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder" test ! -e "$final_path" || ynh_die "This path already contains a folder"
# Check web path availability # Normalize the url path syntax
ynh_webpath_available $domain $path_url path_url=$(ynh_normalize_url_path $path_url)
# Register (book) web path # Register (book) web path
ynh_webpath_register $app $domain $path_url ynh_webpath_register $app $domain $path_url
@ -54,11 +45,11 @@ ynh_webpath_register $app $domain $path_url
# STORE SETTINGS FROM MANIFEST # STORE SETTINGS FROM MANIFEST
#================================================= #=================================================
ynh_app_setting_set $app domain "$domain" ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app path_url "$path_url" ynh_app_setting_set $app path $path_url
ynh_app_setting_set $app admin "$admin" ynh_app_setting_set $app admin $admin
ynh_app_setting_set $app is_public "$is_public" ynh_app_setting_set $app is_public $is_public
ynh_app_setting_set $app language "$language" ynh_app_setting_set $app language $language
#================================================= #=================================================
# STANDARD MODIFICATIONS # STANDARD MODIFICATIONS
@ -73,20 +64,19 @@ ynh_install_app_dependencies "$pkg_dependencies"
#================================================= #=================================================
db_name=$(ynh_sanitize_dbid $app) db_name=$(ynh_sanitize_dbid $app)
db_user="$db_name" ynh_app_setting_set $app db_name $db_name
ynh_app_setting_set "$app" db_name "$db_name" ynh_mysql_setup_db $db_name $db_name
# Initialize database
ynh_mysql_setup_db "$db_user" "$db_name"
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_app_setting_set $app final_path "$final_path" ynh_app_setting_set $app final_path $final_path
# Create tmp directory and fetch app inside # Create tmp directory and fetch app inside
tmpdir=$(mktemp -d) tmpdir="$(ynh_smart_mktemp --min_size=300)"
ynh_setup_source "$tmpdir" ynh_setup_source "$tmpdir"
# Fetch needed plugins # Fetch needed plugins
mkdir -p $tmpdir/plugins/Ldap_Login mkdir -p $tmpdir/plugins/Ldap_Login
ynh_setup_source "$tmpdir/plugins/Ldap_Login" ldap_plugin ynh_setup_source "$tmpdir/plugins/Ldap_Login" ldap_plugin
@ -96,11 +86,24 @@ ynh_setup_source "$tmpdir/plugins" log_failed_logins_plugin
# CREATE DEDICATED USER # CREATE DEDICATED USER
#================================================= #=================================================
ynh_system_user_create $app # Create a dedicated system user # Create a system user
ynh_system_user_create $app
#=================================================
# NGINX CONFIGURATION
#=================================================
# Create a dedicated nginx config
ynh_add_nginx_config
#================================================= #=================================================
# SPECIFIC SETUP # SPECIFIC SETUP
#================================================= #=================================================
# COPY FILES TO $FINAL_PATH
#=================================================
# sets extended pattern matching options in the bash shell
shopt -s extglob
# Install files and set permissions # Install files and set permissions
mkdir $final_path mkdir $final_path
@ -123,69 +126,99 @@ chown -R $app: $final_path
chown -R $app: $datapath chown -R $app: $datapath
chmod 755 -R $final_path/_data chmod 755 -R $final_path/_data
ynh_secure_remove "$tmpdir"
#================================================= #=================================================
# NGINX AND PHP-FPM CONFIGURATION # PHP-FPM CONFIGURATION
#================================================= #=================================================
ynh_add_nginx_config # Create a dedicated php-fpm config
# Copy and set php-fpm configuration
ynh_add_fpm_config ynh_add_fpm_config
#=================================================
# SETUP APPLICATION WITH CURL
#=================================================
ynh_app_setting_set $app unprotected_uris "/"
# Reload SSOwat config
yunohost app ssowatconf
# Reload Nginx
systemctl reload nginx
# Generate random password for admin
adm_pwd=$(ynh_string_random 24)
ynh_app_setting_set $app admin_pwd "$adm_pwd"
if [ "$language" = "fr" ] ; then
applanguage="fr_FR"
else
applanguage="en_UK"
fi
# Configure piwigo via curl
mail="$(ynh_user_get_info $admin mail)"
# Installation with curl
ynh_local_curl "/install.php?language=$applanguage" "install=true" "dbuser=$db_name" "dbpasswd=$db_pwd" "dbname=$db_name" "admin_name=$admin" "admin_pass1=$adm_pwd" "admin_pass2=$adm_pwd" "admin_mail=$mail"
#================================================= #=================================================
# CONFIGURE PIWIGO # CONFIGURE PIWIGO
#================================================= #=================================================
ynh_app_setting_set "$app" unprotected_uris "/"
yunohost app ssowatconf
# Generate random password for admin
adm_pwd=$(ynh_string_random 24)
ynh_app_setting_set $app admin_pwd "$adm_pwd"
# Configure piwigo via curl
mail="$(ynh_user_get_info $admin mail)"
ynh_local_curl "/install.php?language=$applanguage" "install=true" "dbuser=$db_user" "dbpasswd=$db_pwd" "dbname=$db_name" "admin_name=$admin" "admin_pass1=$adm_pwd" "admin_pass2=$adm_pwd" "admin_mail=$mail"
# Change local config # Change local config
cp ../conf/config.inc.php $final_path/local/config/ cp ../conf/config.inc.php $final_path/local/config/
# Calculate and store the config file checksum # Calculate and store the config file checksum
ynh_store_file_checksum "$final_path/local/config/config.inc.php" ynh_store_file_checksum "$final_path/local/config/config.inc.php"
# Setup database in local/config/database.inc.php # Setup database in local/config/database.inc.php
ynh_replace_string "DBTOCHANGE" "$db_name" ../conf/database.inc.php ynh_replace_string "__DBTOCHANGE__" "$db_name" ../conf/database.inc.php
ynh_replace_string "USERTOCHANGE" "$db_user" ../conf/database.inc.php ynh_replace_string "__USERTOCHANGE__" "$db_name" ../conf/database.inc.php
ynh_replace_string "PASSTOCHANGE" "$db_pwd" ../conf/database.inc.php ynh_replace_string "__PASSTOCHANGE__" "$db_pwd" ../conf/database.inc.php
cp ../conf/database.inc.php $final_path/local/config/database.inc.php cp ../conf/database.inc.php $final_path/local/config/database.inc.php
# Calculate and store the database config file checksum # Calculate and store the database config file checksum
ynh_store_file_checksum "$final_path/local/config/database.inc.php" ynh_store_file_checksum "$final_path/local/config/database.inc.php"
#================================================= #=================================================
# ADD LDAP & FAIL2BAN PLUGINS # ADD LDAP PLUGINS
#================================================= #=================================================
# Configure and activate LDAP plugin # Configure and activate LDAP plugin
ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "INSERT INTO plugins (id,state,version) VALUES ('Ldap_Login','active','1.1');" ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "INSERT INTO plugins (id,state,version) VALUES ('Ldap_Login','active','1.1');"
cp ../conf/data.dat $final_path/plugins/Ldap_Login cp ../conf/data.dat $final_path/plugins/Ldap_Login
#=================================================
# CONFIGURE FAIL2BAN
#=================================================
# Configure and activate log_failed_logins plugin # Configure and activate log_failed_logins plugin
ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "INSERT INTO plugins (id,state,version) VALUES ('log_failed_logins','active','1.2');" ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "INSERT INTO plugins (id,state,version) VALUES ('log_failed_logins','active','1.2');"
ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "INSERT INTO config (param, value) VALUES ('logFailedLoginsFilename','/var/log/${app}FailedLogins.log');" ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "INSERT INTO config (param, value) VALUES ('logFailedLoginsFilename','/var/log/${app}FailedLogins.log');"
touch "/var/log/${app}FailedLogins.log" touch "/var/log/${app}FailedLogins.log"
chown $app: "/var/log/${app}FailedLogins.log" chown $app: "/var/log/${app}FailedLogins.log"
# Set-up fail2ban ynh_add_fail2ban_config --logpath="/var/log/${app}FailedLogins.log" --failregex="ip=<HOST>" --max_retry=6
ynh_add_fail2ban_config "/var/log/${app}FailedLogins.log" "ip=<HOST>" 6
#=================================================
# GENERIC FINALIZATION
#=================================================
# SETUP SSOWAT
#=================================================
# Protect URIs if private # Protect URIs if private
if [ $is_public -eq 0 ]; if [ $is_public -eq 0 ]
then then
ynh_app_setting_delete "$app" unprotected_uris ynh_app_setting_delete $app unprotected_uris
ynh_app_setting_set "$app" protected_uris "/" ynh_app_setting_set $app protected_uris "/"
fi fi
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX
#================================================= #=================================================
systemctl reload nginx systemctl reload nginx

View file

@ -17,6 +17,7 @@ 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) db_name=$(ynh_app_setting_get $app db_name)
final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# STANDARD REMOVE # STANDARD REMOVE
@ -28,16 +29,32 @@ db_name=$(ynh_app_setting_get $app db_name)
ynh_remove_app_dependencies ynh_remove_app_dependencies
#================================================= #=================================================
# REMOVE THE MYSQL DB # REMOVE THE MYSQL DATABASE
#================================================= #=================================================
ynh_mysql_remove_db "$app" "$db_name" # Remove a database if it exists, along with the associated user
ynh_mysql_remove_db $db_name $db_name
#================================================= #=================================================
# REMOVE APP MAIN DIR # REMOVE APP MAIN DIR
#================================================= #=================================================
ynh_secure_remove "/var/www/$app" # Remove the app directory securely
ynh_secure_remove "$final_path"
#=================================================
# REMOVE NGINX CONFIGURATION
#=================================================
# Remove the dedicated nginx config
ynh_remove_nginx_config
#=================================================
# REMOVE PHP-FPM CONFIGURATION
#=================================================
# Remove the dedicated php-fpm config
ynh_remove_fpm_config
#================================================= #=================================================
# REMOVE FAIL2BAN CONFIGURATION # REMOVE FAIL2BAN CONFIGURATION
@ -46,14 +63,11 @@ ynh_secure_remove "/var/www/$app"
ynh_remove_fail2ban_config ynh_remove_fail2ban_config
#================================================= #=================================================
# REMOVE NGINX AND PHP-FPM CONFIGURATION # GENERIC FINALIZATION
#=================================================
ynh_remove_fpm_config
ynh_remove_nginx_config
#================================================= #=================================================
# REMOVE DEDICATED USER # REMOVE DEDICATED USER
#================================================= #=================================================
# Delete a system user
ynh_system_user_delete $app ynh_system_user_delete $app

View file

@ -1,15 +1,12 @@
#!/bin/bash #!/bin/bash
#=================================================
# GENERIC START
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then source ../settings/scripts/_common.sh
# Fetch helpers file if not in current directory
cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -41,53 +38,42 @@ test ! -d $final_path \
|| ynh_die "There is already a directory: $final_path " || ynh_die "There is already a directory: $final_path "
#================================================= #=================================================
# STANDARD RESTORE STEPS # STANDARD RESTORATION STEPS
#================================================= #=================================================
# RESTORE NGINX CONFIGURATION # RESTORE THE NGINX CONFIGURATION
#================================================= #=================================================
ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
#================================================= #=================================================
# RESTORE APP MAIN DIR # RESTORE THE APP MAIN DIR
#================================================= #=================================================
ynh_restore_file "$final_path" ynh_restore_file "$final_path"
# Restore data directory if backed-up
if [ -d "$YNH_BACKUP_DIR/apps/${app}/backup/home/yunohost.app/${app}/upload" ] ; then
ynh_restore_file "/home/yunohost.app/${app}/upload"
else
# Create app data folder
mkdir /home/yunohost.app/${app}/upload
fi
# Create temporary data folder
mkdir -p /home/yunohost.app/${app}/_data
# Remove the option backup_core_only if it's in the settings.yml file
ynh_app_setting_delete $app backup_core_only
#================================================= #=================================================
# RESTORE MYSQL DB # RESTORE THE MYSQL DATABASE
#================================================= #=================================================
db_pwd=$(ynh_app_setting_get $app mysqlpwd) db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_mysql_create_db $db_name $db_name $db_pwd ynh_mysql_setup_db $db_name $db_name $db_pwd
ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql
#================================================= #=================================================
# RECREATE OF THE DEDICATED USER # RECREATE THE DEDICATED USER
#================================================= #=================================================
ynh_system_user_create $app # Recreate the dedicated user, if not existing # Create the dedicated user (if not existing)
ynh_system_user_create $app
#================================================= #=================================================
# RESTORE USER RIGHTS # RESTORE THE PHP-FPM CONFIGURATION
#================================================= #=================================================
chown -R $app: $final_path ynh_restore_file "/etc/php/7.0/fpm/pool.d/$app.conf"
chown -R $app: /home/yunohost.app/${app}
#================================================= #=================================================
# RESTORE FAIL2BAN CONFIGURATION # RESTORE THE FAIL2BAN CONFIGURATION
#================================================= #=================================================
ynh_restore_file "/etc/fail2ban/jail.d/$app.conf" ynh_restore_file "/etc/fail2ban/jail.d/$app.conf"
ynh_restore_file "/etc/fail2ban/filter.d/$app.conf" ynh_restore_file "/etc/fail2ban/filter.d/$app.conf"
@ -98,10 +84,30 @@ chown $app: "/var/log/${app}FailedLogins.log"
systemctl restart fail2ban systemctl restart fail2ban
#================================================= #=================================================
# RESTORE PHP-FPM CONFIGURATION # SPECIFIC RESTORATION
#=================================================
# RESTORE THE DATA DIRECTORY
#=================================================
# The data directory will be restored only if it exists in the backup archive
# So only if it was backup previously.
if [ -d "$YNH_BACKUP_DIR/apps/$app/backup/home/yunohost.app/${app}/upload" ]
then
ynh_restore_file "/home/yunohost.app/${app}/upload"
else
# Create app folders
mkdir -p "/home/yunohost.app/${app}/upload"
fi
# Create temporary data folder
mkdir -p /home/yunohost.app/${app}/_data
#=================================================
# RESTORE USER RIGHTS
#================================================= #=================================================
ynh_restore_file /etc/php5/fpm/pool.d/$app.conf ynh_restore_file /etc/php5/fpm/pool.d/$app.conf
chown -R $app: $final_path
chown -R $app: /home/yunohost.app/${app}
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
@ -111,3 +117,4 @@ ynh_restore_file /etc/php5/fpm/pool.d/$app.conf
systemctl reload php5-fpm systemctl reload php5-fpm
systemctl reload nginx systemctl reload nginx

View file

@ -1,8 +1,5 @@
#!/bin/bash #!/bin/bash
shopt -s extglob # sets extended pattern matching options in the bash shell
# Exit on command errors and treat unset variables as an error
set -eu
#================================================= #=================================================
# GENERIC STARTING # GENERIC STARTING
#================================================= #=================================================
@ -15,45 +12,34 @@ source /usr/share/yunohost/helpers
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
# Set app specific variables
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
# Check destination directory domain=$(ynh_app_setting_get $app domain)
destdir="/var/www/$app" path_url=$(ynh_app_setting_get $app path)
[[ ! -d $destdir ]] && ynh_die \ admin=$(ynh_app_setting_get $app admin)
"The destination directory '$destdir' does not exist.\ is_public=$(ynh_app_setting_get $app is_public)
The app is not correctly installed, you should remove it first." final_path=$(ynh_app_setting_get $app final_path)
language=$(ynh_app_setting_get $app language)
db_name=$(ynh_app_setting_get $app db_name)
admin_pwd=$(ynh_app_setting_get $app admin_pwd)
# Retrieve arguments #=================================================
domain=$(ynh_app_setting_get "$app" domain) # ENSURE DOWNWARD COMPATIBILITY
#=================================================
path_url=$(ynh_app_setting_get "$app" path_url) # If db_name doesn't exist, create it
# Compatibility with previous version if [ -z $db_name ]; then
if [ -z "$path_url" ] ; then db_name=$(ynh_sanitize_dbid $app)
path_url=$(ynh_app_setting_get "$app" path) ynh_app_setting_set $app db_name $db_name
ynh_app_setting_set $app path_url "$path_url"
fi
path_url=$(ynh_normalize_url_path $path_url)
final_path=$(ynh_app_setting_get "$app" final_path)
# Compatibility with previous version
if [ -z "$final_path" ] ; then
final_path="/var/www/$app"
ynh_app_setting_set $app final_path "$final_path"
fi fi
db_name=$(ynh_app_setting_get "$app" db_name) # If final_path doesn't exist, create it
# Compatibility with previous version if [ -z $final_path ]; then
if [ -z "$db_name" ] ; then final_path=/var/www/$app
db_name=$app ynh_app_setting_set $app final_path $final_path
ynh_app_setting_set "$app" db_name "$db_name"
fi fi
db_user="$db_name"
db_pwd=$(ynh_app_setting_get "$app" mysqlpwd)
admin=$(ynh_app_setting_get "$app" admin)
admin_pwd=$(ynh_app_setting_get "$app" admin_pwd)
# Compatibility with previous version; password was not set # Compatibility with previous version; password was not set
if [ -z "$admin_pwd" ] ; then if [ -z "$admin_pwd" ] ; then
# Generate a new password # Generate a new password
@ -64,74 +50,99 @@ if [ -z "$admin_pwd" ] ; then
hashed_password=$(cd $final_path ; php hash_password.php $admin_pwd) hashed_password=$(cd $final_path ; php hash_password.php $admin_pwd)
# Update password hash in database # Update password hash in database
ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "UPDATE users SET password='$hashed_password' WHERE username='$admin';" db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "UPDATE users SET password='$hashed_password' WHERE username='$admin';"
ynh_app_setting_set $app admin_pwd "$admin_pwd" ynh_app_setting_set $app admin_pwd "$admin_pwd"
# Remove the temporary hash generation script # Remove the temporary hash generation script
ynh_secure_remove "$final_path/hash_password.php" ynh_secure_remove "$final_path/hash_password.php"
fi fi
language=$(ynh_app_setting_get "$app" language) # Use path instead of path_url in settings.yml...
if [ "$language" = "fr" ] ; then if [ -z "$path_url" ]
applanguage="fr_FR" then
else path_url=$(ynh_app_setting_get $app path_url)
applanguage="en_UK" ynh_app_setting_set $app path $path_url
ynh_app_setting_delete $app path_url
fi fi
is_public=$(ynh_app_setting_get "$app" is_public)
#================================================= #=================================================
# MANAGE SCRIPT FAILURE # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#================================================= #=================================================
# Use prior backup and restore on error only if backup feature # Backup the current version of the app
# exists on installed instance ynh_backup_before_upgrade
if [ -f "/etc/yunohost/apps/$app/scripts/backup" ] ; then
# Notify the backup process that it should not save the data directory
ynh_app_setting_set $app backup_core_only 1
ynh_backup_before_upgrade # Backup the current version of the app
ynh_clean_setup () { ynh_clean_setup () {
# restore it if the upgrade fails
ynh_restore_upgradebackup ynh_restore_upgradebackup
} }
ynh_abort_if_errors # Stop script if an error is detected # Exit if an error occurs during the execution of the script
fi ynh_abort_if_errors
#================================================= #=================================================
# INSTALL DEPENDENCIES # CHECK THE PATH
#================================================= #=================================================
ynh_install_app_dependencies "$pkg_dependencies" # Normalize the URL path syntax
path_url=$(ynh_normalize_url_path $path_url)
#=================================================
# STANDARD UPGRADE STEPS
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
# Create tmp directory and fetch app inside # Create tmp directory and fetch app inside
tmpdir=$(ynh_mkdir_tmp) tmpdir=$(ynh_mkdir_tmp)
tmpdir="$(ynh_smart_mktemp --min_size=300)"
ynh_setup_source "$tmpdir" ynh_setup_source "$tmpdir"
# Fetch needed plugins # Fetch needed plugins
mkdir -p $tmpdir/plugins/Ldap_Login mkdir -p $tmpdir/plugins/Ldap_Login
ynh_setup_source "$tmpdir/plugins/Ldap_Login" ldap_plugin ynh_setup_source "$tmpdir/plugins/Ldap_Login" ldap_plugin
ynh_setup_source "$tmpdir/plugins" log_failed_logins_plugin ynh_setup_source "$tmpdir/plugins" log_failed_logins_plugin
#=================================================
# NGINX CONFIGURATION
#=================================================
# Create a dedicated nginx config
ynh_add_nginx_config
#=================================================
# UPGRADE DEPENDENCIES
#=================================================
ynh_install_app_dependencies "$pkg_dependencies"
#================================================= #=================================================
# CREATE DEDICATED USER # CREATE DEDICATED USER
#================================================= #=================================================
ynh_system_user_create $app # Create dedicated user if not existing # Create a dedicated user (if not existing)
ynh_system_user_create $app
#================================================= #=================================================
# SPECIFIC SETUP # PHP-FPM CONFIGURATION
#================================================= #=================================================
# We store photos (potentially large data) on /home/yunohost.app # Create a dedicated php-fpm config
ynh_add_fpm_config
#=================================================
# SPECIFIC UPGRADE
#=================================================
# COPY FILES TO $FINAL_PATH
#=================================================
# sets extended pattern matching options in the bash shell
shopt -s extglob
datapath=/home/yunohost.app/$app datapath=/home/yunohost.app/$app
# Install files and set permissions # Install files and set permissions
cp -a $tmpdir/!(upload|_data|galleries) $final_path cp -a $tmpdir/!(upload|_data|galleries) $final_path
# Backward compatibility: # Backward compatibility:
# If the _data subdirectory wasn't already moved to /home/yunohost.app/$app, # If the _data subdirectory wasn't already moved to /home/yunohost.app/$app,
# then move it there # then move it there
@ -152,68 +163,93 @@ chown -R $app: $final_path
chown -R $app: $datapath chown -R $app: $datapath
chmod 755 -R $final_path/_data chmod 755 -R $final_path/_data
ynh_secure_remove "$tmpdir"
#================================================= #=================================================
# NGINX AND PHP-FPM CONFIGURATION # UPGRADE APPLICATION WITH CURL
#================================================= #=================================================
ynh_add_nginx_config ynh_app_setting_set $app unprotected_uris "/"
ynh_store_file_checksum "/etc/nginx/conf.d/$domain.d/$app.conf" # Reload SSOwat config
yunohost app ssowatconf
# Copy and set php-fpm configuration # Reload Nginx
ynh_add_fpm_config systemctl reload nginx
if [ "$language" = "fr" ] ; then
applanguage="fr_FR"
else
applanguage="en_UK"
fi
# Upgrade piwigo via curl
ynh_local_curl "/upgrade.php?language=$applanguage&now=true" "language=$applanguage" "username=$admin" "password=$admin_pwd"
#================================================= #=================================================
# CONFIGURE PIWIGO # CONFIGURE PIWIGO
#================================================= #=================================================
ynh_print_info "Configuring piwigo..."
ynh_app_setting_set "$app" unprotected_uris "/"
yunohost app ssowatconf
# Configure piwigo via curl
ynh_local_curl "/upgrade.php?language=$applanguage&now=true" "language=$applanguage" "username=$admin" "password=$admin_pwd"
# Make a backup of the original config file if modified # Make a backup of the original config file if modified
ynh_backup_if_checksum_is_different "$final_path/local/config/config.inc.php" ynh_backup_if_checksum_is_different "$final_path/local/config/config.inc.php"
# Change local config # Change local config
cp ../conf/config.inc.php $final_path/local/config/ cp ../conf/config.inc.php $final_path/local/config/
# Calculate and store the config file checksum # Calculate and store the config file checksum
ynh_store_file_checksum "$final_path/local/config/config.inc.php" ynh_store_file_checksum "$final_path/local/config/config.inc.php"
# Make a backup of the original database config file if modified # Make a backup of the original database config file if modified
ynh_backup_if_checksum_is_different "$final_path/local/config/database.inc.php" ynh_backup_if_checksum_is_different "$final_path/local/config/database.inc.php"
# Setup database in local/config/database.inc.php # Setup database in local/config/database.inc.php
ynh_replace_string "DBTOCHANGE" "$db_name" ../conf/database.inc.php ynh_replace_string "__DBTOCHANGE__" "$db_name" ../conf/database.inc.php
ynh_replace_string "USERTOCHANGE" "$db_user" ../conf/database.inc.php ynh_replace_string "__USERTOCHANGE__" "$db_name" ../conf/database.inc.php
ynh_replace_string "PASSTOCHANGE" "$db_pwd" ../conf/database.inc.php db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_replace_string "__PASSTOCHANGE__" "$db_pwd" ../conf/database.inc.php
cp ../conf/database.inc.php $final_path/local/config/database.inc.php cp ../conf/database.inc.php $final_path/local/config/database.inc.php
# Calculate and store the database config file checksum # Calculate and store the database config file checksum
ynh_store_file_checksum "$final_path/local/config/database.inc.php" ynh_store_file_checksum "$final_path/local/config/database.inc.php"
#================================================= #=================================================
# ADD LDAP & FAIL2BAN PLUGINS # ADD LDAP PLUGINS
#================================================= #=================================================
# Configure and activate LDAP plugin # Configure and activate LDAP plugin
ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "UPDATE plugins SET state='active' WHERE id='Ldap_Login';" ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "UPDATE plugins SET state='active' WHERE id='Ldap_Login';"
cp ../conf/data.dat $final_path/plugins/Ldap_Login cp ../conf/data.dat $final_path/plugins/Ldap_Login
#=================================================
# UPGRADE FAIL2BAN
#=================================================
# Configure and activate log_failed_logins plugin # Configure and activate log_failed_logins plugin
ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "INSERT INTO plugins (id,state,version) VALUES ('log_failed_logins','active','1.2');" 2>&1 > /dev/null ||ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "UPDATE plugins SET state='active' WHERE id='log_failed_logins';" ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "INSERT INTO plugins (id,state,version) VALUES ('log_failed_logins','active','1.2');" 2>&1 > /dev/null ||ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "UPDATE plugins SET state='active' WHERE id='log_failed_logins';"
ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "INSERT INTO config (param, value) VALUES ('logFailedLoginsFilename','/var/log/${app}FailedLogins.log');" 2>&1 > /dev/null || ynh_mysql_connect_as $db_name $db_pwd $db_user <<< "UPDATE config SET value='/var/log/${app}FailedLogins.log' WHERE param='logFailedLoginsFilename';" ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "INSERT INTO config (param, value) VALUES ('logFailedLoginsFilename','/var/log/${app}FailedLogins.log');" 2>&1 > /dev/null || ynh_mysql_connect_as $db_name $db_pwd $db_name <<< "UPDATE config SET value='/var/log/${app}FailedLogins.log' WHERE param='logFailedLoginsFilename';"
touch "/var/log/${app}FailedLogins.log" touch "/var/log/${app}FailedLogins.log"
chown $app: "/var/log/${app}FailedLogins.log" chown $app: "/var/log/${app}FailedLogins.log"
# Set-up fail2ban ynh_add_fail2ban_config --logpath="/var/log/${app}FailedLogins.log" --failregex="ip=<HOST>" --max_retry=6
ynh_add_fail2ban_config "/var/log/${app}FailedLogins.log" "ip=<HOST>" 6
#=================================================
# GENERIC FINALIZATION
#=================================================
# SETUP SSOWAT
#=================================================
# Protect URIs if private # Protect URIs if private
if [ $is_public -eq 0 ]; if [ $is_public -eq 0 ]
then then
ynh_app_setting_delete "$app" unprotected_uris ynh_app_setting_delete $app unprotected_uris
ynh_app_setting_set "$app" protected_uris "/" ynh_app_setting_set $app protected_uris "/"
fi fi
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX
#================================================= #=================================================
systemctl reload nginx systemctl reload nginx