From a214f925bceee346ad61172a83c4933b1956d915 Mon Sep 17 00:00:00 2001 From: pvincent Date: Sun, 20 Oct 2024 18:36:46 +0400 Subject: [PATCH] limesurvey --- recipes/limesurvey/crud.sh | 210 +++++++++++++++++++ recipes/limesurvey/install.sh | 61 ++++++ templates/apps/limesurvey/limesurvey-host.j2 | 16 ++ 3 files changed, 287 insertions(+) create mode 100755 recipes/limesurvey/crud.sh create mode 100755 recipes/limesurvey/install.sh create mode 100644 templates/apps/limesurvey/limesurvey-host.j2 diff --git a/recipes/limesurvey/crud.sh b/recipes/limesurvey/crud.sh new file mode 100755 index 0000000..ce3c37b --- /dev/null +++ b/recipes/limesurvey/crud.sh @@ -0,0 +1,210 @@ +#!/bin/bash + +function check_database_exists() { + db-maria list | grep -q "$longname" +} + +function check_port_used() { + # shellcheck disable=SC2034 + usedport=$(lxc exec "$container" -- bash -c "grep listen /etc/nginx/sites-enabled/$longname.conf | cut -d' ' -f6") + [[ "$usedport" == "$port" ]] +} + +function check_service_running() { + lxc exec "$container" -- bash -c "systemctl is-active --quiet nginx.service" +} + +function _read() { + disable_trace + check_database_exists + check_container "$container" + check_port_used + check_service_running + enable_trace + return 0 +} + +function _create() { + + echo "creating limesurvey instance for <$shortname> ..." + + mkdir -p "$MIAOU_CONFIGDIR/apps/limesurvey" + APP_PORT=$port APP_NAME=$shortname tera -e --env-key env -t "$MIAOU_BASEDIR/templates/apps/limesurvey/limesurvey-host.j2" -o "$MIAOU_CONFIGDIR/apps/limesurvey/$shortname.conf" "$MIAOU_CONFIGDIR/miaou.expanded.yaml" + echo "creating templates ... OK" + + echo "copying files to container <$container> ... " + lxc file push --uid 0 --gid 0 "$MIAOU_CONFIGDIR/apps/limesurvey/$shortname.conf" "$container/etc/nginx/sites-available/$longname.conf" + echo "copying files to container <$container> ... OK" + + if ! (db-maria list | grep -q "$longname"); then + echo "create empty database <$longname> ... " + db-maria create "$longname" + echo "create empty database <$longname> ... OK" + else + echo "database already exists!" + fi + + echo "initialize limesurvey $shortname $longname ..." + lxc exec "$container" -- bash < /var/www/limesurvey/$shortname/application/config/config.php + array( + 'db' => array( + 'connectionString' => 'mysql:host=ct1.lxd;port=3306;dbname=$longname;', + 'username' => '$longname', + 'password' => '$longname', + 'charset' => 'utf8mb4', + 'emulatePrepare' => true, + 'tablePrefix' => '', + ), + + 'session' => array ( + 'sessionName'=>'$(genpasswd 10)', + ), + + 'urlManager' => array( + 'urlFormat' => 'get', + 'rules' => array(), + 'showScriptName' => true, + ), + + ), + 'config'=>array( + 'debug'=>0, + 'debugsql'=>0, // Set this to 1 to enanble sql logging, only active when debug = 2 + 'mysqlEngine' => 'MYISAM', + ) +); +EOT2 + echo 'initializing admin...' + cd /var/www/limesurvey/$shortname/application/commands + set +e + php console.php install pvincent reunion pvincent pvincent@arcode.re + [[ \$? -ne 0 ]] && echo 'already initialized!' + set -e + echo OK + echo 'Please visit URL with ?r=admin to log in!' + + else + echo "config.php already defined!" + fi + + chown -R www-data:www-data /var/www/limesurvey/$shortname + + echo "enabling limesurvey host into nginx" + ln -sf "/etc/nginx/sites-available/$longname.conf" "/etc/nginx/sites-enabled/$longname.conf" + + echo "reloading nginx" + nginx -tq && systemctl reload nginx +EOF + echo "initialize limesurvey $shortname $longname ... OK" +} + +function _update() { + echo "update" +} + +function _delete() { + echo "delete" +} + +function usage() { + echo "Usage: $COMMAND_NAME -c|r|u|d --port PORT --container CONTAINER --name NAME" + exit 2 +} + +### MAIN + +# init_strict + +COMMAND_NAME=$(basename "$0") + +# read the options + +TEMP=$(getopt -n "$COMMAND_NAME" -o crud --long port:,container:,name:,fqdn:,domain:,subdomain: -- "$@") +# shellcheck disable=SC2181 +[[ "$?" -eq 0 ]] || usage +eval set -- "$TEMP" + +action="unset" +port="unset" +container="unset" +shortname="unset" +longname="unset" + +# extract options and their arguments into variables. +while true; do + case "$1" in + --port) + port=$2 + shift 2 + ;; + --fqdn) + shift 2 + ;; + --container) + container=$2 + shift 2 + ;; + --name) + shortname=$2 + longname="limesurvey-$shortname" + shift 2 + ;; + --domain) + shift 2 + ;; + --subdomain) + shift 2 + ;; + -c) + [[ "$action" == "unset" ]] || usage + action="_create" + shift 1 + ;; + -r) + [[ "$action" == "unset" ]] || usage + action="_read" + shift 1 + ;; + -u) + [[ "$action" == "unset" ]] || usage + action="_update" + shift 1 + ;; + -d) + [[ "$action" == "unset" ]] || usage + action="_delete" + shift 1 + ;; + --) + shift + break + ;; + *) + echoerr "Internal error: unrecognized option: <$1>" + exit 1 + ;; + esac +done + +. "$MIAOU_BASEDIR/lib/init.sh" +[[ + "$action" != unset && + "$port" != unset && + "$container" != unset && + "$shortname" != unset ]] || usage +$action diff --git a/recipes/limesurvey/install.sh b/recipes/limesurvey/install.sh new file mode 100755 index 0000000..d993ab6 --- /dev/null +++ b/recipes/limesurvey/install.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +MANDATORY_PACKAGES_STRING="nginx php-fpm php-mysql php-zip php-gd php-xml php-ldap php-imap composer mariadb-client" + +### CHECK + +function check() { + PREFIX="recipe:limesurvey:check" + check_mandatory_packages || return 21 + check_limesurvey_zip || return 22 + return 0 +} + +function check_mandatory_packages() { + lxc exec "$CONTAINER" -- bash </dev/null | grep -q ^ii + done +EOF +} + +function check_limesurvey_zip() { + lxc exec "$CONTAINER" -- test -f /var/www/limesurvey-latest.zip +} + +### INSTALL + +function install() { + PREFIX="recipe:limesurvey:install" + : $PREFIX + launch_container "$CONTAINER" + echo "initializing limesurvey ... " + + lxc exec "$CONTAINER" -- bash <