1
0
forked from ScoDoc/ScoDoc
ScoDoc/tools/utils.sh

136 lines
3.8 KiB
Bash

#!/bin/bash
# Misc utilities for ScoDoc install shell scripts
to_lower() {
echo "$1" | tr "[:upper:]" "[:lower:]"
}
to_upper() {
echo "$1" | tr "[:lower:]" "[:upper:]"
}
norm_ans() {
x=$(to_upper "$1" | tr O Y)
echo "${x:0:1}"
}
check_uid_root() {
if [ "$UID" != "0" ]
then
echo "Erreur: le script $1 doit etre lance par root"
exit 1
fi
}
terminate() {
status=${2:-1} # default: exit 1
echo
echo "Erreur: $1"
echo
exit $status
}
# Start/stop scodoc, using sysv or systemd
scodocctl() {
if [ "$1" = "start" ]; then
echo "Starting ScoDoc..."
elif [ "$1" = "stop" ]; then
echo "Stopping ScoDoc"
else
echo "Error: invalid argument for scodocctl"
exit 1
fi
if [ -e /etc/systemd/system/scodoc.service ]
then
systemctl $1 scodoc
else
echo "(using legacy SystemV)"
/etc/init.d/scodoc "$1"
fi
}
# --- Ensure postgres user scodoc exists
init_postgres_user() { # run as root
if [ -z $(echo "select usename from pg_user;" | su -c "(cd; $PSQL -d template1 -p $POSTGRES_PORT)" "$POSTGRES_SUPERUSER" | grep "$POSTGRES_USER") ]
then
# add database user
echo "Creating postgresql user $POSTGRES_USER"
su -c "(cd; createuser -p $POSTGRES_PORT --createdb --no-superuser --no-createrole ${POSTGRES_USER})" "$POSTGRES_SUPERUSER"
fi
}
# --- Ensure Unix user "scodoc" exists
check_create_scodoc_user() {
if ! id -u "${SCODOC_USER}" &> /dev/null
then
echo "Creating unix user ${SCODOC_USER}"
adduser --shell /bin/bash --disabled-password --gecos "ScoDoc service" "${SCODOC_USER}" || die "failed to create user"
else
echo "Unix user ${SCODOC_USER} exists"
fi
# Check / set FLASK_APP
scodoc_home=$(getent passwd "${SCODOC_USER}" | cut -d: -f 6)
if [ -e "$scodoc_home/.profile" ] && [ $(grep -c FLASK_APP "$scodoc_home/.profile") == 0 ]
then
echo "export FLASK_APP=scodoc.py" >> "$scodoc_home/.profile"
fi
}
# --- Give all ScoDoc files (/opt/scodoc) to user "scodoc":
change_scodoc_file_ownership() {
echo "Changing owner of ${SCODOC_DIR} to ${SCODOC_USER}"
chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "${SCODOC_DIR}" || die "change_scodoc_file_ownership failed on ${SCODOC_DIR}"
}
# Création du répertoire local (scodoc-data) et vérification du propriétaire
set_scodoc_var_dir() {
echo "Checking $SCODOC_VAR_DIR..."
[ -z ${SCODOC_VAR_DIR+x} ] && die "Error: env var SCODOC_VAR_DIR not set"
[ -d "$SCODOC_VAR_DIR" ] || mkdir "$SCODOC_VAR_DIR" || die "can't create $SCODOC_VAR_DIR directory"
for d in archives photos tmp log config certs config/version config/depts config/logos
do
[ -d "$SCODOC_VAR_DIR/$d" ] || mkdir "$SCODOC_VAR_DIR/$d" || die "can't create $SCODOC_VAR_DIR/$d subdirectory"
done
chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "${SCODOC_VAR_DIR}" || die "change_scodoc_file_ownership failed on ${SCODOC_VAR_DIR}"
}
# XXX inutilise
gen_passwd() {
PASSWORD_LENGTH="8"
ALLOWABLE_ASCII="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@#$%^&*()_+=-?><"
SEED=$(head -c4 /dev/urandom | od -t u4 | awk '{ print $2 }')
RANDOM=$SEED
n=1
password=""
while [ "$n" -le "$PASSWORD_LENGTH" ]
do
password="$password${ALLOWABLE_ASCII:$((RANDOM%${#ALLOWABLE_ASCII})):1}"
n=$((n+1))
done
echo "$password"
}
# Status file: indique si l'install s'est complètement déroulée
create_install_status() {
touch "${SCODOC_INSTALL_STATUS_FILE}" || die "can't create ${SCODOC_INSTALL_STATUS_FILE}"
}
remove_install_status() {
if [ -e "${SCODOC_INSTALL_STATUS_FILE}" ]
then
rm -f "${SCODOC_INSTALL_STATUS_FILE}"
fi
}
#
alarm_admin() {
echo "Error: alarm_admin $1"
echo "Sending email to admin..."
echo "Subject: ScoDoc: $1" | mail -s "ScoDoc: $1" root <<EOF
Erreur lors de la mise à jour de ScoDoc sur $(hostname --fqdn)
EOF
}