#!/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 }