From f747b89a5d3c8c807946f186d94f796a22e536df Mon Sep 17 00:00:00 2001 From: Disassembler Date: Thu, 13 Sep 2018 22:02:25 +0200 Subject: [PATCH] LXCize Pandora setup --- pandora/setup.sh | 46 +++++++++++++++----------------- pandora/setup/etc/init.d/pandora | 16 +++-------- 2 files changed, 25 insertions(+), 37 deletions(-) diff --git a/pandora/setup.sh b/pandora/setup.sh index 5136229..ccf6e9b 100755 --- a/pandora/setup.sh +++ b/pandora/setup.sh @@ -1,39 +1,31 @@ #!/bin/sh set -e -SOURCE_DIR=$(realpath $(dirname "${0}"))/pandora +SOURCE_DIR=$(realpath $(dirname "${0}"))/setup # Check prerequisites -lxc-ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh -lxc-ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh -lxc-ls | grep -q rabbitmq || $(realpath $(dirname "${0}"))/rabbitmq.sh -service postgres start -service rabbitmq start - -# Build Docker container -docker build -t pandora ${SOURCE_DIR} -cp ${SOURCE_DIR}/etc/init.d/pandora /etc/init.d/pandora -rc-update -u +[ ! -e /run/openrc/started/postgres ] && service postgres start && STOP_POSTGRES=1 +[ ! -e /run/openrc/started/rabbitmq ] && service rabbitmq start && STOP_RABBITMQ=1 # Create PostgreSQL user and database export PANDORA_PWD=$(head -c 18 /dev/urandom | base64) -envsubst <${SOURCE_DIR}/createdb.sql | docker exec -i postgres psql +envsubst <${SOURCE_DIR}/createdb.sql | lxc-attach -u 5432 -g 5432 postgres -- psql # Configure RabbitMQ export PANDORA_RABBIT_PWD=$(head -c 18 /dev/urandom | base64 | tr -d "/") -docker exec rabbitmq rabbitmqctl add_user pandora ${PANDORA_RABBIT_PWD} -docker exec rabbitmq rabbitmqctl add_vhost /pandora -docker exec rabbitmq rabbitmqctl set_permissions -p /pandora pandora ".*" ".*" ".*" +lxc-attach rabbitmq -- rabbitmqctl add_user pandora ${PANDORA_RABBIT_PWD} +lxc-attach rabbitmq -- rabbitmqctl add_vhost /pandora +lxc-attach rabbitmq -- rabbitmqctl set_permissions -p /pandora pandora ".*" ".*" ".*" # Configure Pandora mkdir -p /srv/pandora/conf /srv/pandora/data chown 8002:8002 /srv/pandora/data # Copy customized configuration if VANILLA environment variable is not set, else use the default pandora config if [ ${VANILLA:-0} -eq 0 ]; then - cp ${SOURCE_DIR}/srv/pandora/conf/config.jsonc /srv/pandora/conf/config.jsonc + cp ${SOURCE_DIR}/srv/pandora/conf/config.jsonc /srv/pandora/conf else chown 8002:8002 /srv/pandora/conf - docker run --rm -v /srv/pandora/conf:/srv/pandora/conf pandora cp /srv/pandora/pandora/config.pandora.jsonc /srv/pandora/conf/config.jsonc + cp /var/lib/lxc/pandora/pandora/srv/pandora/pandora/config.pandora.jsonc /srv/pandora/conf fi cp ${SOURCE_DIR}/srv/pandora/conf/gunicorn_config.py /srv/pandora/conf/gunicorn_config.py envsubst <${SOURCE_DIR}/srv/pandora/conf/local_settings.py >/srv/pandora/conf/local_settings.py @@ -44,19 +36,23 @@ if [ ${DEBUG:-0} -eq 0 ]; then fi # Populate database -docker run --rm -h pandora --link postgres -v /srv/pandora/conf:/srv/pandora/conf pandora /srv/pandora/pandora/manage.py migrate --noinput -docker run --rm -h pandora --link postgres -v /srv/pandora/conf:/srv/pandora/conf pandora /srv/pandora/pandora/manage.py sqlfindindex -docker run --rm -h pandora --link postgres -v /srv/pandora/conf:/srv/pandora/conf pandora /srv/pandora/pandora/manage.py sync_itemsort -docker run --rm -h pandora --link postgres -v /srv/pandora/conf:/srv/pandora/conf pandora /srv/pandora/pandora/manage.py sync_documentsort +lxc-execute pandora -- /srv/pandora/pandora/manage.py migrate --noinput +lxc-execute pandora -- /srv/pandora/pandora/manage.py sqlfindindex +lxc-execute pandora -- /srv/pandora/pandora/manage.py sync_itemsort +lxc-execute pandora -- /srv/pandora/pandora/manage.py sync_documentsort # Create admin account export PANDORA_ADMIN_USER=admin export PANDORA_ADMIN_EMAIL=admin@example.com export PANDORA_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) -export PANDORA_ADMIN_HASH=$(docker run --rm -h pandora -e DJANGO_SETTINGS_MODULE=pandora.settings -v /srv/pandora/conf:/srv/pandora/conf pandora python3 -c "from django.contrib.auth.hashers import make_password; print(make_password('${PANDORA_ADMIN_PWD}'))") -envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql pandora +export PANDORA_ADMIN_HASH=$(lxc-execute pandora -- sh -c "DJANGO_SETTINGS_MODULE=pandora.settings python3 -c \"from django.contrib.auth.hashers import make_password; print(make_password('${PANDORA_ADMIN_PWD}'))\"") +envsubst <${SOURCE_DIR}/adminpwd.sql | lxc-attach -u 5432 -g 5432 postgres -- psql pandora vmmgr update-login pandora "${PANDORA_ADMIN_USER}" "${PANDORA_ADMIN_PWD}" +# Install service +cp ${SOURCE_DIR}/etc/init.d/pandora /etc/init.d/pandora +rc-update -u + # Stop services required for build -service rabbitmq stop -service postgres stop +[ ! -z ${STOP_POSTGRES} ] && service postgres stop +[ ! -z ${STOP_RABBITMQ} ] && service rabbitmq stop diff --git a/pandora/setup/etc/init.d/pandora b/pandora/setup/etc/init.d/pandora index 02a6680..5a7df95 100755 --- a/pandora/setup/etc/init.d/pandora +++ b/pandora/setup/etc/init.d/pandora @@ -1,21 +1,13 @@ #!/sbin/openrc-run -description="Pan.do/ra docker container" +description="Pan.do/ra container" depend() { - need docker postfix postgres rabbitmq + need cgroups postgres rabbitmq } start() { - /usr/bin/docker run -d --rm \ - --name pandora \ - -h pandora \ - --link postfix \ - --link postgres \ - --link rabbitmq \ - -v /srv/pandora/conf:/srv/pandora/conf \ - -v /srv/pandora/data:/srv/pandora/data \ - pandora + lxc-start pandora } start_post() { @@ -27,5 +19,5 @@ stop_pre() { } stop() { - /usr/bin/docker stop pandora + lxc-stop pandora }