forked from ScoDoc/ScoDoc
136 lines
3.8 KiB
Bash
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
|
|
}
|