mirror of
https://github.com/YunoHost-Apps/gogs_ynh.git
synced 2024-09-03 20:36:23 +02:00
160 lines
5.5 KiB
Bash
160 lines
5.5 KiB
Bash
#=================================================
|
|
# SET ALL CONSTANTS
|
|
#=================================================
|
|
|
|
app=$YNH_APP_INSTANCE_NAME
|
|
dbname=$app
|
|
dbuser=$app
|
|
final_path="/opt/$app"
|
|
DATADIR="/home/$app"
|
|
REPO_PATH="$DATADIR/repositories"
|
|
DATA_PATH="$DATADIR/data"
|
|
|
|
# Detect the system architecture to download the right tarball
|
|
# NOTE: `uname -m` is more accurate and universal than `arch`
|
|
# See https://en.wikipedia.org/wiki/Uname
|
|
if [ -n "$(uname -m | grep 64)" ]; then
|
|
architecture="x86-64"
|
|
elif [ -n "$(uname -m | grep 86)" ]; then
|
|
architecture="i386"
|
|
elif [ -n "$(uname -m | grep arm)" ]; then
|
|
architecture="arm"
|
|
else
|
|
ynh_die "Unable to detect your achitecture, please open a bug describing \
|
|
your hardware and the result of the command \"uname -m\"." 1
|
|
fi
|
|
|
|
#=================================================
|
|
# DEFINE ALL COMMON FONCTIONS
|
|
#=================================================
|
|
|
|
create_dir() {
|
|
mkdir -p "$final_path/data"
|
|
mkdir -p "$final_path/custom/conf/auth.d"
|
|
mkdir -p "$DATA_PATH/avatars"
|
|
mkdir -p "$DATA_PATH/attachments"
|
|
mkdir -p "/var/log/$app"
|
|
}
|
|
|
|
config_nginx() {
|
|
if [ "$path_url" != "/" ]
|
|
then
|
|
ynh_replace_string "^#sub_path_only" "" "../conf/nginx.conf"
|
|
fi
|
|
ynh_add_nginx_config
|
|
}
|
|
|
|
config_gogs() {
|
|
ynh_backup_if_checksum_is_different "$final_path/custom/conf/app.ini"
|
|
ynh_backup_if_checksum_is_different "$final_path/custom/conf/auth.d/ldap.conf"
|
|
|
|
cp ../conf/app.ini "$final_path/custom/conf"
|
|
cp ../conf/ldap.conf "$final_path/custom/conf/auth.d/ldap.conf"
|
|
|
|
if [ "$path_url" = "/" ]
|
|
then
|
|
ynh_replace_string "__URL__" "$domain" "$final_path/custom/conf/app.ini"
|
|
else
|
|
ynh_replace_string "__URL__" "$domain${path_url%/}" "$final_path/custom/conf/app.ini"
|
|
fi
|
|
|
|
ynh_replace_string "__REPOS_PATH__" "$REPO_PATH" "$final_path/custom/conf/app.ini"
|
|
ynh_replace_string "__DB_PASSWORD__" "$dbpass" "$final_path/custom/conf/app.ini"
|
|
ynh_replace_string "__DB_USER__" "$dbuser" "$final_path/custom/conf/app.ini"
|
|
ynh_replace_string "__DOMAIN__" "$domain" "$final_path/custom/conf/app.ini"
|
|
ynh_replace_string "__KEY__" "$key" "$final_path/custom/conf/app.ini"
|
|
ynh_replace_string "__DATA_PATH__" "$DATA_PATH" "$final_path/custom/conf/app.ini"
|
|
ynh_replace_string "__PORT__" $port "$final_path/custom/conf/app.ini"
|
|
ynh_replace_string "__APP__" $app "$final_path/custom/conf/app.ini"
|
|
|
|
if [[ "$is_public" = '1' ]]
|
|
then
|
|
ynh_replace_string "__PRIVATE_MODE__" "false" "$final_path/custom/conf/app.ini"
|
|
else
|
|
ynh_replace_string "__PRIVATE_MODE__" "true" "$final_path/custom/conf/app.ini"
|
|
fi
|
|
|
|
ynh_replace_string "__ADMIN__" "$admin" "$final_path/custom/conf/auth.d/ldap.conf"
|
|
|
|
ynh_store_file_checksum "$final_path/custom/conf/app.ini"
|
|
ynh_store_file_checksum "$final_path/custom/conf/auth.d/ldap.conf"
|
|
}
|
|
|
|
set_permission() {
|
|
chown -R $app:$app "$final_path"
|
|
chown -R $app:$app "/home/$app"
|
|
chown -R $app:$app "/var/log/$app"
|
|
chmod u=rwX,g=rX,o= "$final_path"
|
|
chmod u=rwX,g=rX,o= "/home/$app"
|
|
chmod u=rwX,g=rX,o= "/var/log/$app"
|
|
}
|
|
|
|
set_access_settings() {
|
|
if [ "$is_public" = '1' ]
|
|
then
|
|
ynh_app_setting_set $app unprotected_uris "/"
|
|
else
|
|
# For an access to the git server by https in private mode we need to allow the access to theses URL :
|
|
# - "DOMAIN/PATH/USER/REPOSITORY/info/refs"
|
|
# - "DOMAIN/PATH/USER/REPOSITORY/git-upload-pack"
|
|
# - "DOMAIN/PATH/USER/REPOSITORY/git-receive-pack"
|
|
|
|
excaped_domain=${domain//'.'/'%.'}
|
|
excaped_domain=${excaped_domain//'-'/'%-'}
|
|
excaped_path=${path_url//'.'/'%.'}
|
|
excaped_path=${excaped_path//'-'/'%-'}
|
|
ynh_app_setting_set $app skipped_regex "$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-receive%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-upload%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/info/refs"
|
|
fi
|
|
}
|
|
|
|
|
|
# Start or restart a service and follow its booting
|
|
#
|
|
# usage: ynh_check_starting "Line to match" [Log file] [Timeout] [Service name]
|
|
#
|
|
# | arg: Line to match - The line to find in the log to attest the service have finished to boot.
|
|
# | arg: Log file - The log file to watch
|
|
# | arg: Service name
|
|
# /var/log/$app/$app.log will be used if no other log is defined.
|
|
# | arg: Timeout - The maximum time to wait before ending the watching. Defaut 300 seconds.
|
|
ynh_check_starting () {
|
|
local line_to_match="$1"
|
|
local service_name="${4:-$app}"
|
|
local app_log="${2:-/var/log/$service_name/$service_name.log}"
|
|
local timeout=${3:-300}
|
|
|
|
ynh_clean_check_starting () {
|
|
# Stop the execution of tail.
|
|
kill -s 15 $pid_tail 2>&1
|
|
ynh_secure_remove "$templog" 2>&1
|
|
}
|
|
|
|
echo "Starting of $service_name" >&2
|
|
systemctl stop $service_name
|
|
local templog="$(mktemp)"
|
|
# Following the starting of the app in its log
|
|
tail -F -n0 "$app_log" > "$templog" &
|
|
# Get the PID of the tail command
|
|
local pid_tail=$!
|
|
systemctl start $service_name
|
|
|
|
local i=0
|
|
for i in `seq 1 $timeout`
|
|
do
|
|
# Read the log until the sentence is found, that means the app finished to start. Or run until the timeout
|
|
if grep --quiet "$line_to_match" "$templog"
|
|
then
|
|
echo "The service $service_name has correctly started." >&2
|
|
break
|
|
fi
|
|
echo -n "." >&2
|
|
sleep 1
|
|
done
|
|
if [ $i -eq $timeout ]
|
|
then
|
|
echo "The service $service_name didn't fully started before the timeout." >&2
|
|
fi
|
|
|
|
echo ""
|
|
ynh_clean_check_starting
|
|
}
|