1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/photonix_ynh.git synced 2024-09-03 19:56:29 +02:00
photonix_ynh/scripts/_common.sh
2021-05-03 23:38:35 -04:00

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
}