mirror of
https://github.com/YunoHost-Apps/photonix_ynh.git
synced 2024-09-03 19:56:29 +02:00
228 lines
7.7 KiB
Bash
228 lines
7.7 KiB
Bash
#!/bin/bash
|
|
|
|
#=================================================
|
|
# COMMON VARIABLES
|
|
#=================================================
|
|
|
|
# dependencies used by the app
|
|
pkg_dependencies="acl python3 python3-pip python3-venv nodejs postgresql postgresql-contrib postgresql-common redis-server libsasl2-dev libldap2-dev libssl-dev build-essential curl gfortran gnupg libatlas-base-dev libblas-dev libblas3 libfreetype6 libfreetype6-dev libhdf5-dev libjpeg-dev liblapack-dev liblapack3 libpq-dev libtiff5-dev netcat"
|
|
|
|
#=================================================
|
|
# PERSONAL HELPERS
|
|
#=================================================
|
|
|
|
#=================================================
|
|
# EXPERIMENTAL HELPERS
|
|
#=================================================
|
|
|
|
function set_permissions {
|
|
mkdir -p "$final_path/srv"
|
|
chown -R root:$app "$final_path"
|
|
chmod -R g=u,g-w,o-rwx "$final_path"
|
|
setfacl -n -m g:www-data:--x "$final_path";
|
|
setfacl -nR -m d:g:www-data:r-x -m g:www-data:r-x "$final_path/srv";
|
|
|
|
mkdir -p "$data_path/data/"{photos,raw-photos-processed,cache,models}
|
|
chown -R $app:$app "$data_path"
|
|
chmod -R g=u,g-w,o-rwx "$data_path"
|
|
setfacl -n -m g:www-data:--x "$data_path";
|
|
setfacl -nR -m d:g:www-data:r-x -m g:www-data:r-x "$data_path/data";
|
|
|
|
|
|
mkdir -p "/var/log/$app"
|
|
chmod o-rwx "/var/log/$app"
|
|
}
|
|
|
|
function patch_files {
|
|
find "$final_path" -type f | while read file; do
|
|
ynh_replace_string -m "'/srv" -r "'$final_path/srv" -f "$file"
|
|
ynh_replace_string -m "'/data" -r "'$data_path/data" -f "$file"
|
|
done
|
|
|
|
set_permissions
|
|
}
|
|
|
|
function build_django_backend {
|
|
chown -R $app:$app "$final_path"
|
|
pushd "$final_path"
|
|
sudo -u $app python3 -m venv "$final_path/venv"
|
|
sudo -u $app $final_path/venv/bin/pip --cache-dir "$final_path/.cache/pip" install -U wheel pip setuptools 2>&1
|
|
while read requirement ; do
|
|
if [ ! -z "$requirement" ] && [[ ! "$requirement" =~ ^'#'.* ]]; then
|
|
sudo -u $app PYTHONUNBUFFERED=1 "$final_path/venv/bin/pip" --cache-dir "$final_path/.cache/pip" install "$requirement" 2>&1
|
|
fi
|
|
done < "$final_path/requirements.txt"
|
|
sudo -u $app $final_path/venv/bin/pip --cache-dir "$final_path/.cache/pip" install -U django-auth-ldap 2>&1
|
|
sudo -u $app mkdir -p "$final_path/srv"
|
|
sudo -u $app cp -rT "$final_path/photonix" "$final_path/srv/photonix"
|
|
popd
|
|
pushd "$final_path/srv"
|
|
sudo -u $app $final_path/venv/bin/python "$final_path/srv/photonix/manage.py" collectstatic --noinput --link 2>&1
|
|
popd
|
|
|
|
set_permissions
|
|
}
|
|
|
|
function set_node_vars {
|
|
ynh_exec_warn_less ynh_install_nodejs --nodejs_version=14
|
|
ynh_use_nodejs
|
|
node_path=$nodejs_path:$(sudo -u $app sh -c 'echo $PATH')
|
|
}
|
|
|
|
function build_node_frontend {
|
|
set_node_vars
|
|
|
|
chown -R $app:$app "$final_path"
|
|
sudo -u $app touch "$final_path/.yarnrc"
|
|
sudo -u $app mkdir -p "$final_path/srv/ui"
|
|
pushd "$final_path"
|
|
sudo -u $app cp -T "$final_path/ui/package.json" "$final_path/srv/ui/package.json"
|
|
sudo -u $app cp -T "$final_path/ui/yarn.lock" "$final_path/srv/ui/yarn.lock"
|
|
popd
|
|
|
|
pushd "$final_path/srv/ui"
|
|
sudo -u $app env "PATH=$node_path" yarn --cache-folder $final_path/yarn-cache --use-yarnrc $final_path/.yarnrc install 2>&1
|
|
sudo -u $app cp -rT "$final_path/ui/public" "$final_path/srv/ui/public"
|
|
sudo -u $app cp -rT "$final_path/ui/src" "$final_path/srv/ui/src"
|
|
sudo -u $app env "PATH=$node_path" yarn --cache-folder $final_path/yarn-cache --use-yarnrc $final_path/.yarnrc build 2>&1
|
|
popd
|
|
|
|
sudo -u $app cp -rT "$final_path/ui/public" "$final_path/srv/ui/public"
|
|
|
|
set_permissions
|
|
}
|
|
|
|
function add_envfile {
|
|
secret_key=$(ynh_app_setting_get --app=$app --key=secret_key)
|
|
|
|
if [ -z $secret_key ]; then
|
|
secret_key=$(ynh_string_random -l 64)
|
|
ynh_app_setting_set --app=$app --key=secret_key --value=$secret_key
|
|
fi
|
|
|
|
ynh_add_config --template="photonix.env" --destination="$final_path/photonix.env"
|
|
|
|
set_permissions
|
|
}
|
|
|
|
function apply_db_migrations {
|
|
pushd "$final_path/srv/photonix" || ynh_die
|
|
sudo -u $app bash -c "
|
|
source \"$final_path/venv/bin/activate\"
|
|
set -a
|
|
source \"$final_path/photonix.env\"
|
|
python \"$final_path/photonix/manage.py\" makemigrations
|
|
python \"$final_path/photonix/manage.py\" migrate"
|
|
popd
|
|
}
|
|
|
|
services="app_server watch_photos raw_scheduler raw_processor thumbnail_processor classification_scheduler classification_color_processor classification_location_processor classification_style_processor classification_object_processor rescan_photos_periodically"
|
|
|
|
function set_up_logrotate {
|
|
local i=0
|
|
for service in $services; do
|
|
if (($i == 0)); then
|
|
ynh_use_logrotate --logfile="/var/log/$app/$app-$service.log"
|
|
else
|
|
ynh_use_logrotate --logfile="/var/log/$app/$app-$service.log" --nonappend
|
|
i=1
|
|
fi
|
|
done
|
|
}
|
|
|
|
function add_systemd_configs {
|
|
for service in $services; do
|
|
ynh_add_systemd_config --service=$app-$service --template=$service.service
|
|
done
|
|
}
|
|
|
|
function remove_systemd_configs {
|
|
for service in $services; do
|
|
ynh_remove_systemd_config --service=$app-$service
|
|
done
|
|
}
|
|
|
|
function integrate_services {
|
|
for service in $services; do
|
|
yunohost service add $app-$service --description="Photonix $service" --log="/var/log/$app/$app-$service.log"
|
|
done
|
|
}
|
|
|
|
function remove_service_integrations {
|
|
for service in $services; do
|
|
yunohost service remove $app-$service
|
|
done
|
|
}
|
|
|
|
function start_services {
|
|
for service in $services; do
|
|
ynh_systemd_action --service_name=$app-$service --action="start" --log_path="/var/log/$app/$app-$service.log"
|
|
done
|
|
}
|
|
|
|
function stop_services {
|
|
for service in $services; do
|
|
ynh_systemd_action --service_name=$app-$service --action="stop" --log_path="/var/log/$app/$app-$service.log"
|
|
done
|
|
}
|
|
|
|
function backup_services {
|
|
for service in $services; do
|
|
ynh_backup --src_path="/etc/systemd/system/$app-$service.service"
|
|
done
|
|
}
|
|
|
|
function load_settings {
|
|
final_path="$(ynh_app_setting_get --app=$app --key=final_path)"
|
|
data_path="$(ynh_app_setting_get --app=$app --key=data_path)"
|
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
|
path_url=$(ynh_app_setting_get --app=$app --key=path)
|
|
db_name=$(ynh_app_setting_get --app=$app --key=db_name)
|
|
db_user=$db_name
|
|
db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd)
|
|
admin=$(ynh_app_setting_get --app=$app --key=admin)
|
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
|
classification_color_enabled=$(ynh_app_setting_get --app=$app --key=classification_color_enabled)
|
|
classification_location_enabled=$(ynh_app_setting_get --app=$app --key=classification_location_enabled)
|
|
classification_style_enabled=$(ynh_app_setting_get --app=$app --key=classification_style_enabled)
|
|
classification_object_enabled=$(ynh_app_setting_get --app=$app --key=classification_object_enabled)
|
|
}
|
|
|
|
#=================================================
|
|
# FUTURE OFFICIAL HELPERS
|
|
#=================================================
|
|
|
|
# Install or update the main directory yunohost.multimedia
|
|
#
|
|
# usage: ynh_multimedia_build_main_dir
|
|
ynh_multimedia_build_main_dir () {
|
|
local ynh_media_release="v1.2"
|
|
local checksum="806a827ba1902d6911095602a9221181"
|
|
|
|
# Download yunohost.multimedia scripts
|
|
wget -nv https://github.com/YunoHost-Apps/yunohost.multimedia/archive/${ynh_media_release}.tar.gz 2>&1
|
|
|
|
# Check the control sum
|
|
echo "${checksum} ${ynh_media_release}.tar.gz" | md5sum -c --status \
|
|
|| ynh_die "Corrupt source"
|
|
|
|
# Check if the package acl is installed. Or install it.
|
|
ynh_package_is_installed 'acl' \
|
|
|| ynh_package_install acl
|
|
|
|
# Extract
|
|
mkdir yunohost.multimedia-master
|
|
tar -xf ${ynh_media_release}.tar.gz -C yunohost.multimedia-master --strip-components 1
|
|
./yunohost.multimedia-master/script/ynh_media_build.sh
|
|
}
|
|
|
|
# Grant write access to multimedia directories to a specified user
|
|
#
|
|
# usage: ynh_multimedia_addaccess user_name
|
|
#
|
|
# | arg: user_name - User to be granted write access
|
|
ynh_multimedia_addaccess () {
|
|
local user_name=$1
|
|
groupadd -f multimedia
|
|
usermod -a -G multimedia $user_name
|
|
}
|