diff --git a/lxc-apps/opendatakit-build/install.sh b/lxc-apps/opendatakit-build/install.sh deleted file mode 100755 index 7795f7f..0000000 --- a/lxc-apps/opendatakit-build/install.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -set -ev - -cd $(realpath $(dirname "${0}"))/install - -# Check prerequisites -[ ! -e /run/openrc/started/postgres ] && service postgres start && STOP_POSTGRES=1 - -# Create databases -export OPENDATAKITBUILD_PWD=$(head -c 18 /dev/urandom | base64 | tr -d '+/=') -envsubst /srv/opendatakit-build/conf/config.yml -lxc-execute opendatakit-build -- sh -c 'cd /srv/opendatakit-build; rake db:migrate' - -# Install service -cp etc/init.d/opendatakit-build /etc/init.d/opendatakit-build -rc-update -u - -# Stop services required for build -[ ! -z ${STOP_POSTGRES} ] && service postgres stop - -# Register application -vmmgr register-app opendatakit-build odkbuild diff --git a/lxc-apps/opendatakit-build/install/createdb.sql b/lxc-apps/opendatakit-build/install/createdb.sql deleted file mode 100644 index 1b73f2b..0000000 --- a/lxc-apps/opendatakit-build/install/createdb.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE ROLE opendatakitbuild NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN ENCRYPTED PASSWORD '${OPENDATAKITBUILD_PWD}'; -CREATE DATABASE opendatakitbuild; -REVOKE ALL ON DATABASE opendatakitbuild FROM public; -ALTER DATABASE opendatakitbuild OWNER TO opendatakitbuild; diff --git a/lxc-apps/opendatakit-build/install/etc/init.d/opendatakit-build b/lxc-apps/opendatakit-build/install/etc/init.d/opendatakit-build deleted file mode 100755 index 57751dd..0000000 --- a/lxc-apps/opendatakit-build/install/etc/init.d/opendatakit-build +++ /dev/null @@ -1,23 +0,0 @@ -#!/sbin/openrc-run - -description="OpenDataKit Build container" - -depend() { - need postgres -} - -start() { - lxc-start opendatakit-build -} - -start_post() { - vmmgr register-proxy opendatakit-build -} - -stop_pre() { - vmmgr unregister-proxy opendatakit-build -} - -stop() { - lxc-stop opendatakit-build -} diff --git a/lxc-apps/opendatakit-build/lxcfile b/lxc-apps/opendatakit-build/lxcfile index cea70cf..d4371e7 100644 --- a/lxc-apps/opendatakit-build/lxcfile +++ b/lxc-apps/opendatakit-build/lxcfile @@ -40,7 +40,4 @@ EOF COPY lxc -MOUNT FILE /etc/ssl/services.pem usr/local/share/ca-certificates/services.crt -MOUNT FILE /srv/opendatakit-build/conf/config.yml srv/opendatakit-build/config.yml - CMD s6-svscan /etc/services.d diff --git a/lxc-apps/opendatakit-build/uninstall.sh b/lxc-apps/opendatakit-build/uninstall.sh deleted file mode 100755 index a71d1cd..0000000 --- a/lxc-apps/opendatakit-build/uninstall.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -ev - -# Remove service -rm -f /etc/init.d/opendatakit-build -rc-update -u - -# Drop database and user -[ ! -e /run/openrc/started/postgres ] && service postgres start && STOP_POSTGRES=1 -echo 'DROP DATABASE IF EXISTS opendatakitbuild; DROP ROLE IF EXISTS opendatakitbuild;' | lxc-attach -u 5432 -g 5432 postgres -- psql -[ ! -z ${STOP_POSTGRES} ] && service postgres stop - -# Unregister application -vmmgr unregister-app opendatakit-build diff --git a/lxc-apps/opendatakit/install.sh b/lxc-apps/opendatakit/install.sh index e13ed83..63f9f08 100755 --- a/lxc-apps/opendatakit/install.sh +++ b/lxc-apps/opendatakit/install.sh @@ -3,45 +3,58 @@ set -ev cd $(realpath $(dirname "${0}"))/install -# Check prerequisites -[ ! -e /run/openrc/started/postgres ] && service postgres start && STOP_POSTGRES=1 +# Create Postgres instance +mkdir -p /srv/opendatakit/postgres_data +chown -R 105432:105432 /srv/opendatakit/postgres_data +chmod 700 /srv/opendatakit/postgres_data +lxc-execute -n opendatakit-postgres -- initdb -D /var/lib/postgresql + +# Configure Postgres +cp postgres_data/postgresql.conf /srv/opendatakit/postgres_data/postgresql.conf +cp postgres_data/pg_hba.conf /srv/opendatakit/postgres_data/pg_hba.conf # Create databases export OPENDATAKIT_PWD=$(head -c 18 /dev/urandom | base64 | tr -d '+/=') -envsubst /srv/opendatakit/conf/jdbc.properties -envsubst /srv/opendatakit/conf/security.properties -cp srv/opendatakit/conf/server.xml /srv/opendatakit/conf/server.xml -chown -R 8015:8015 /srv/opendatakit/conf +envsubst /srv/opendatakit/odk_conf/jdbc.properties +envsubst /srv/opendatakit/odk_conf/security.properties +cp odk_conf/server.xml /srv/opendatakit/odk_conf/server.xml +chown -R 108015:108015 /srv/opendatakit/odk_conf -# Install service -cp etc/init.d/opendatakit /etc/init.d/opendatakit -rc-update -u +# Configure OpenDataKit Build +export OPENDATAKITBUILD_COOKIE_SECRET=$(head -c 8 /dev/urandom | hexdump -e '"%x"') +mkdir -p /srv/opendatakit/odkbuild_conf +envsubst /srv/opendatakit/odkbuild_conf/config.yml +lxc-execute opendatakit-build -- sh -c 'cd /srv/opendatakit-build; rake db:migrate' +chown -R 100000:100000 /srv/opendatakit/odkbuild_conf # Populate database -lxc-start opendatakit +service opendatakit start until grep -q 'org.apache.catalina.startup.Catalina.start Server startup' /var/log/lxc/opendatakit.log; do sleep 1 done -lxc-stop opendatakit +service opendatakit stop # Update admin account export OPENDATAKIT_ADMIN_PWD=$(head -c 12 /dev/urandom | base64 | tr -d '+/=') -export OPENDATAKIT_ADMIN_SALT=$(head -c 4 /dev/urandom | hexdump -e '"%x"') # Must be 8 characters +export OPENDATAKIT_ADMIN_SALT=$(head -c 4 /dev/urandom | hexdump -e '"%x"') # Must be exactly 8 characters export OPENDATAKIT_ADMIN_BASIC_HASH=$(echo -n "${OPENDATAKIT_ADMIN_PWD}{${OPENDATAKIT_ADMIN_SALT}}" | sha1sum | tr -d " -") export OPENDATAKIT_ADMIN_DIGEST_HASH=$(echo -n "${OPENDATAKIT_ADMIN_USER}:${OPENDATAKIT_ADMIN_REALM}:${OPENDATAKIT_ADMIN_PWD}" | md5sum | tr -d " -") -envsubst 0 logs only + # statements running at least this number + # of milliseconds + + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = on +#log_checkpoints = off +#log_connections = off +#log_disconnections = off +#log_duration = off +#log_error_verbosity = default # terse, default, or verbose messages +#log_hostname = off +log_line_prefix = '%m [%p] %q%u@%d ' # special values: + # %a = application name + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %p = process ID + # %t = timestamp without milliseconds + # %m = timestamp with milliseconds + # %n = timestamp with milliseconds (as a Unix epoch) + # %i = command tag + # %e = SQL state + # %c = session ID + # %l = session line number + # %s = session start timestamp + # %v = virtual transaction ID + # %x = transaction ID (0 if none) + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_lock_waits = off # log lock waits >= deadlock_timeout +#log_statement = 'all' # none, ddl, mod, all +#log_replication_commands = off +#log_temp_files = -1 # log temporary files equal or larger + # than the specified size in kilobytes; + # -1 disables, 0 logs all temp files +log_timezone = 'Europe/Prague' + + +# - Process Title - + +#cluster_name = '' # added to process titles if nonempty + # (change requires restart) +#update_process_title = on + + +#------------------------------------------------------------------------------ +# RUNTIME STATISTICS +#------------------------------------------------------------------------------ + +# - Query/Index Statistics Collector - + +#track_activities = on +#track_counts = on +#track_io_timing = off +#track_functions = none # none, pl, all +#track_activity_query_size = 1024 # (change requires restart) +#stats_temp_directory = 'pg_stat_tmp' + + +# - Statistics Monitoring - + +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off +#log_statement_stats = off + + +#------------------------------------------------------------------------------ +# AUTOVACUUM PARAMETERS +#------------------------------------------------------------------------------ + +#autovacuum = on # Enable autovacuum subprocess? 'on' + # requires track_counts to also be on. +#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and + # their durations, > 0 logs only + # actions running at least this number + # of milliseconds. +#autovacuum_max_workers = 3 # max number of autovacuum subprocesses + # (change requires restart) +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 50 # min number of row updates before + # vacuum +#autovacuum_analyze_threshold = 50 # min number of row updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age + # before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for + # autovacuum, in milliseconds; + # -1 means use vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#------------------------------------------------------------------------------ +# CLIENT CONNECTION DEFAULTS +#------------------------------------------------------------------------------ + +# - Statement Behavior - + +#search_path = '"$user", public' # schema names +#default_tablespace = '' # a tablespace name, '' uses the default +#temp_tablespaces = '' # a list of tablespace names, '' uses + # only default tablespace +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#default_transaction_deferrable = off +#session_replication_role = 'origin' +#statement_timeout = 0 # in milliseconds, 0 is disabled +#lock_timeout = 0 # in milliseconds, 0 is disabled +#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled +#vacuum_freeze_min_age = 50000000 +#vacuum_freeze_table_age = 150000000 +#vacuum_multixact_freeze_min_age = 5000000 +#vacuum_multixact_freeze_table_age = 150000000 +#bytea_output = 'hex' # hex, escape +#xmlbinary = 'base64' +#xmloption = 'content' +#gin_fuzzy_search_limit = 0 +#gin_pending_list_limit = 4MB + +# - Locale and Formatting - + +datestyle = 'iso, mdy' +#intervalstyle = 'postgres' +timezone = 'Europe/Prague' +#timezone_abbreviations = 'Default' # Select the set of available time zone + # abbreviations. Currently, there are + # Default + # Australia (historical usage) + # India + # You can create your own file in + # share/timezonesets/. +#extra_float_digits = 0 # min -15, max 3 +#client_encoding = sql_ascii # actually, defaults to database + # encoding + +# These settings are initialized by initdb, but they can be changed. +lc_messages = 'C' # locale for system error message + # strings +lc_monetary = 'C' # locale for monetary formatting +lc_numeric = 'C' # locale for number formatting +lc_time = 'C' # locale for time formatting + +# default configuration for text search +default_text_search_config = 'pg_catalog.english' + +# - Other Defaults - + +#dynamic_library_path = '$libdir' +#local_preload_libraries = '' +#session_preload_libraries = '' + + +#------------------------------------------------------------------------------ +# LOCK MANAGEMENT +#------------------------------------------------------------------------------ + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_relation = -2 # negative values mean + # (max_pred_locks_per_transaction + # / -max_pred_locks_per_relation) - 1 +#max_pred_locks_per_page = 2 # min 0 + + +#------------------------------------------------------------------------------ +# VERSION/PLATFORM COMPATIBILITY +#------------------------------------------------------------------------------ + +# - Previous PostgreSQL Versions - + +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#default_with_oids = off +#escape_string_warning = on +#lo_compat_privileges = off +#operator_precedence_warning = off +#quote_all_identifiers = off +#standard_conforming_strings = on +#synchronize_seqscans = on + +# - Other Platforms and Clients - + +#transform_null_equals = off + + +#------------------------------------------------------------------------------ +# ERROR HANDLING +#------------------------------------------------------------------------------ + +#exit_on_error = off # terminate session on any error? +#restart_after_crash = on # reinitialize after backend crash? + + +#------------------------------------------------------------------------------ +# CONFIG FILE INCLUDES +#------------------------------------------------------------------------------ + +# These options allow settings to be loaded from files other than the +# default postgresql.conf. + +#include_dir = 'conf.d' # include files ending in '.conf' from + # directory 'conf.d' +#include_if_exists = 'exists.conf' # include file only if it exists +#include = 'special.conf' # include file + + +#------------------------------------------------------------------------------ +# CUSTOMIZED OPTIONS +#------------------------------------------------------------------------------ + +# Add settings for extensions here diff --git a/lxc-apps/opendatakit/install/srv/opendatakit/update-conf.sh b/lxc-apps/opendatakit/install/update-conf.sh old mode 100755 new mode 100644 similarity index 100% rename from lxc-apps/opendatakit/install/srv/opendatakit/update-conf.sh rename to lxc-apps/opendatakit/install/update-conf.sh diff --git a/lxc-apps/opendatakit/lxcfile b/lxc-apps/opendatakit/lxcfile index 8eab6b6..e2dbf69 100644 --- a/lxc-apps/opendatakit/lxcfile +++ b/lxc-apps/opendatakit/lxcfile @@ -23,10 +23,6 @@ RUN EOF rm /tmp/odk.war EOF -MOUNT FILE /srv/opendatakit/conf/server.xml srv/tomcat/conf/server.xml -MOUNT FILE /srv/opendatakit/conf/jdbc.properties srv/tomcat/webapps/ROOT/WEB-INF/classes/jdbc.properties -MOUNT FILE /srv/opendatakit/conf/security.properties srv/tomcat/webapps/ROOT/WEB-INF/classes/security.properties - USER 8015 8015 WORKDIR /srv/tomcat CMD catalina.sh run diff --git a/lxc-apps/opendatakit/meta b/lxc-apps/opendatakit/meta new file mode 100644 index 0000000..b0d4e27 --- /dev/null +++ b/lxc-apps/opendatakit/meta @@ -0,0 +1,38 @@ +{ + "version": "2.0.3-190620", + "meta": { + "title": "OpenDataKit", + "desc-cs": "Sběr formulářových dat", + "desc-en": "Form data collection", + "license": "GPL", + }, + "containers": { + "opendatakit": { + "image": "opendatakit_2.0.3-190620", + "depends": [ + "opendatakit-postgres" + ], + "mounts": [ + ["FILE", "/srv/opendatakit/odk_conf/server.xml", "/srv/tomcat/conf/server.xml"], + ["FILE", "/srv/opendatakit/odk_conf/jdbc.properties", "/srv/tomcat/webapps/ROOT/WEB-INF/classes/jdbc.properties"], + ["FILE", "/srv/opendatakit/odk_conf/security.properties", "/srv/tomcat/webapps/ROOT/WEB-INF/classes/security.properties"] + ] + }, + "opendatakit-build": { + "image": "opendatakit-build_0.3.5-190620", + "depends": [ + "opendatakit-postgres" + ], + "mounts": [ + ["FILE", "/etc/ssl/services.pem", "/usr/local/share/ca-certificates/services.crt"], + ["FILE", "/srv/opendatakit/odkbuild_conf/config.yml", "/srv/opendatakit-build/config.yml"] + ] + }, + "opendatakit-postgres": { + "image": "postgis_11.3.0-190620", + "mounts": [ + ["DIR", "/srv/opendatakit/postgres_data", "/var/lib/postgresql"] + ] + } + } +} diff --git a/lxc-apps/opendatakit/uninstall.sh b/lxc-apps/opendatakit/uninstall.sh index d965a2d..b5ee139 100755 --- a/lxc-apps/opendatakit/uninstall.sh +++ b/lxc-apps/opendatakit/uninstall.sh @@ -1,14 +1,8 @@ #!/bin/sh set -ev -# Remove service -rm -f /etc/init.d/opendatakit -rc-update -u - -# Drop database and user -[ ! -e /run/openrc/started/postgres ] && service postgres start && STOP_POSTGRES=1 -echo 'DROP DATABASE IF EXISTS opendatakit; DROP ROLE IF EXISTS opendatakit;' | lxc-attach -u 5432 -g 5432 postgres -- psql -[ ! -z ${STOP_POSTGRES} ] && service postgres stop +# Remove persistent data +rm -rf /srv/opendatakit # Unregister application vmmgr unregister-app opendatakit