summaryrefslogtreecommitdiff
path: root/util/docker-init.sh
diff options
context:
space:
mode:
Diffstat (limited to 'util/docker-init.sh')
-rwxr-xr-xutil/docker-init.sh87
1 files changed, 87 insertions, 0 deletions
diff --git a/util/docker-init.sh b/util/docker-init.sh
new file mode 100755
index 00000000..dce2339c
--- /dev/null
+++ b/util/docker-init.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+if ! test -f /var/vndb-docker-image; then
+ echo "This script should only be run from within the VNDB docker container."
+ echo "Check the README for instructions."
+ exit 1
+fi
+
+
+mkdevuser() {
+ # Create a new user with the same UID and GID as the owner of the VNDB
+ # directory. This allows for convenient exchange of files without worrying
+ # about permission stuff.
+ USER_UID=`stat -c '%u' /var/www`
+ USER_GID=`stat -c '%g' /var/www`
+ groupadd -g $USER_GID devgroup
+ useradd -u $USER_UID -g $USER_GID -m -s /bin/bash devuser
+
+ # So you can easily do a 'psql -U vndb'
+ echo '*:*:*:vndb:vndb' >/home/devuser/.pgpass
+ echo '*:*:*:vndb_site:vndb_site' >>/home/devuser/.pgpass
+ echo '*:*:*:vndb_multi:vndb_multi' >>/home/devuser/.pgpass
+ chown devuser /home/devuser/.pgpass
+ chmod 600 /home/devuser/.pgpass
+}
+
+
+pg_start() {
+ echo 'local all postgres peer' >/etc/postgresql/9.6/main/pg_hba.conf
+ echo 'local all all md5' >>/etc/postgresql/9.6/main/pg_hba.conf
+ # I'm glad Ubuntu 17.10 still has an init script for this
+ /etc/init.d/postgresql start
+}
+
+
+pg_init() {
+ if test -f /var/lib/postgresql/vndb-init-done; then
+ echo "Database initialization already done."
+ echo "Run the following as root to bypass this check:"
+ echo " rm /var/lib/postgresql/vndb-init-done"
+ return
+ fi
+ su postgres -c '/var/www/util/docker-init.sh pg_load_superuser'
+ su devuser -c '/var/www/util/docker-init.sh pg_load_vndb'
+ touch /var/lib/postgresql/vndb-init-done
+}
+
+# Should run as the postgres user
+pg_load_superuser() {
+ psql -f /var/www/util/sql/superuser_init.sql
+ echo "ALTER ROLE vndb LOGIN UNENCRYPTED PASSWORD 'vndb'" | psql -U postgres
+ echo "ALTER ROLE vndb_site LOGIN UNENCRYPTED PASSWORD 'vndb_site'" | psql -U postgres
+ echo "ALTER ROLE vndb_multi LOGIN UNENCRYPTED PASSWORD 'vndb_multi'" | psql -U postgres
+}
+
+# Should run as devuser
+pg_load_vndb() {
+ cd /var/www
+ psql -U vndb -f util/sql/all.sql
+}
+
+
+# Should run as devuser
+devshell() {
+ cd /var/www
+ make && util/vndb.pl
+ bash
+}
+
+
+case "$1" in
+ '')
+ mkdevuser
+ pg_start
+ pg_init
+ exec su devuser -c '/var/www/util/docker-init.sh devshell'
+ ;;
+ pg_load_superuser)
+ pg_load_superuser
+ ;;
+ pg_load_vndb)
+ pg_load_vndb
+ ;;
+ devshell)
+ devshell
+ ;;
+esac