summaryrefslogtreecommitdiffstats
path: root/debian
diff options
context:
space:
mode:
authorFrédéric Péters <fpeters@entrouvert.com>2015-07-15 16:37:50 (GMT)
committerFrédéric Péters <fpeters@entrouvert.com>2015-09-29 16:12:41 (GMT)
commit7688d998bb347624742299804f165ca23960bc62 (patch)
tree2f766d181b52f2ab02578fa523ad09b5673e4026 /debian
parent0e93097856c193a7db83b706695d2c16171df212 (diff)
downloadwelco-7688d998bb347624742299804f165ca23960bc62.zip
welco-7688d998bb347624742299804f165ca23960bc62.tar.gz
welco-7688d998bb347624742299804f165ca23960bc62.tar.bz2
debian: basic packaging
Diffstat (limited to 'debian')
-rw-r--r--debian/changelog5
-rw-r--r--debian/compat1
-rw-r--r--debian/control29
-rw-r--r--debian/debian_config.py18
-rw-r--r--debian/nginx-example.conf58
-rw-r--r--debian/pydist-overrides1
-rw-r--r--debian/python-welco.dirs1
-rw-r--r--debian/python-welco.docs2
-rw-r--r--debian/python-welco.install2
-rwxr-xr-xdebian/rules8
-rw-r--r--debian/settings.py55
-rwxr-xr-xdebian/welco-manage26
-rw-r--r--debian/welco.dirs5
-rw-r--r--debian/welco.docs3
-rw-r--r--debian/welco.init195
-rw-r--r--debian/welco.install3
-rw-r--r--debian/welco.postinst44
17 files changed, 456 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..7c7b2d4
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,5 @@
+welco (0-0) unstable; urgency=low
+
+ * Initial release
+
+ -- Frederic Peters <fpeters@entrouvert.com> Wed, 15 Jul 2015 18:36:33 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..91ac935
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,29 @@
+Source: welco
+Maintainer: Frederic Peters <fpters@entrouvert.com>
+Section: python
+Priority: optional
+Build-Depends: python-setuptools (>= 0.6b3), python-all (>= 2.6.6-3), debhelper (>= 7)
+Standards-Version: 3.9.6
+X-Python-Version: >= 2.7
+
+Package: python-welco
+Architecture: all
+Depends: ${misc:Depends}, ${python:Depends},
+ python-django (>= 1.7),
+ python-gadjo,
+ python-requests,
+ libjs-pdf
+Recommends: python-django-mellon
+Description: Multichannel request processing (Python module)
+
+Package: welco
+Architecture: all
+Depends: ${misc:Depends},
+ python-welco (= ${binary:Version}),
+ python-hobo,
+ python-django-tenant-schemas,
+ python-psycopg2,
+ python-django-mellon,
+ gunicorn
+Recommends: nginx, postgresql
+Description: Multichannel request processing
diff --git a/debian/debian_config.py b/debian/debian_config.py
new file mode 100644
index 0000000..89010dd
--- /dev/null
+++ b/debian/debian_config.py
@@ -0,0 +1,18 @@
+# This file is sourced by "execfile" from welco.settings
+
+import os
+
+PROJECT_NAME = 'welco'
+
+# SAML2 authentication
+INSTALLED_APPS += ('mellon',)
+
+#
+# hobotization (multitenant)
+#
+execfile('/usr/lib/hobo/debian_config_common.py')
+
+#
+# local settings
+#
+execfile(os.path.join(ETC_DIR, 'settings.py'))
diff --git a/debian/nginx-example.conf b/debian/nginx-example.conf
new file mode 100644
index 0000000..2b87664
--- /dev/null
+++ b/debian/nginx-example.conf
@@ -0,0 +1,58 @@
+server {
+ listen 443;
+ server_name *-welco.example.org;
+
+ ssl on;
+ ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
+ ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
+
+ access_log /var/log/nginx/welco.example.org-access.log combined;
+ error_log /var/log/nginx/welco.example.org-error.log;
+
+ location ~ ^/static/(.+)$ {
+ root /;
+ try_files /var/lib/welco/tenants/$host/static/$1
+ /var/lib/welco/collectstatic/$1
+ =404;
+ }
+
+ location ~ ^/media/(.+)$ {
+ alias /var/lib/welco/tenants/$host/media/$1;
+ }
+
+ location / {
+ proxy_pass http://unix:/var/run/welco/welco.sock;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-SSL on;
+ proxy_set_header X-Forwarded-Protocol ssl;
+ proxy_set_header X-Forwarded-Proto https;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+}
+
+server {
+ listen 80;
+ server_name *-welco.example.org;
+
+ access_log /var/log/nginx/welco.example.org-access.log combined;
+ error_log /var/log/nginx/welco.example.org-error.log;
+
+ location ~ ^/static/(.+)$ {
+ root /;
+ try_files /var/lib/welco/tenants/$host/static/$1
+ /var/lib/welco/collectstatic/$1
+ =404;
+ }
+
+ location ~ ^/media/(.+)$ {
+ alias /var/lib/welco/tenants/$host/media/$1;
+ }
+
+ location / {
+ proxy_pass http://unix:/var/run/welco/welco.sock;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+}
diff --git a/debian/pydist-overrides b/debian/pydist-overrides
new file mode 100644
index 0000000..0c6fbc3
--- /dev/null
+++ b/debian/pydist-overrides
@@ -0,0 +1 @@
+django_ckeditor python-django-ckeditor
diff --git a/debian/python-welco.dirs b/debian/python-welco.dirs
new file mode 100644
index 0000000..4b74e9e
--- /dev/null
+++ b/debian/python-welco.dirs
@@ -0,0 +1 @@
+/usr/lib/welco
diff --git a/debian/python-welco.docs b/debian/python-welco.docs
new file mode 100644
index 0000000..2e3abae
--- /dev/null
+++ b/debian/python-welco.docs
@@ -0,0 +1,2 @@
+COPYING
+README
diff --git a/debian/python-welco.install b/debian/python-welco.install
new file mode 100644
index 0000000..7c56255
--- /dev/null
+++ b/debian/python-welco.install
@@ -0,0 +1,2 @@
+usr/bin/manage.py /usr/lib/welco
+usr/lib/python2*/*-packages
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..de1bd88
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,8 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+ dh $@ --with python2
diff --git a/debian/settings.py b/debian/settings.py
new file mode 100644
index 0000000..42779e4
--- /dev/null
+++ b/debian/settings.py
@@ -0,0 +1,55 @@
+# Configuration for welco.
+# You can override Welco default settings here
+
+# Welco is a Django application: for the full list of settings and their
+# values, see https://docs.djangoproject.com/en/1.7/ref/settings/
+# For more information on settings see
+# https://docs.djangoproject.com/en/1.7/topics/settings/
+
+# WARNING! Quick-start development settings unsuitable for production!
+# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
+
+# This file is sourced by "execfile" from /usr/lib/welco/debian_config.py
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = False
+TEMPLATE_DEBUG = False
+
+#ADMINS = (
+# # ('User 1', 'watchdog@example.net'),
+# # ('User 2', 'janitor@example.net'),
+#)
+
+# ALLOWED_HOSTS must be correct in production!
+# See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
+ALLOWED_HOSTS = [
+ '*',
+]
+
+# Databases
+# Default: a local database named "welco"
+# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
+# Warning: don't change ENGINE
+# DATABASES['default']['NAME'] = 'welco'
+# DATABASES['default']['USER'] = 'welco'
+# DATABASES['default']['PASSWORD'] = '******'
+# DATABASES['default']['HOST'] = 'localhost'
+# DATABASES['default']['PORT'] = '5432'
+
+LANGUAGE_CODE = 'fr-fr'
+TIME_ZONE = 'Europe/Paris'
+
+# Email configuration
+# EMAIL_SUBJECT_PREFIX = '[welco] '
+# SERVER_EMAIL = 'root@welco.example.org'
+# DEFAULT_FROM_EMAIL = 'webmaster@welco.example.org'
+
+# SMTP configuration
+# EMAIL_HOST = 'localhost'
+# EMAIL_HOST_USER = ''
+# EMAIL_HOST_PASSWORD = ''
+# EMAIL_PORT = 25
+
+# HTTPS Security
+# CSRF_COOKIE_SECURE = True
+# SESSION_COOKIE_SECURE = True
diff --git a/debian/welco-manage b/debian/welco-manage
new file mode 100755
index 0000000..bac4e6d
--- /dev/null
+++ b/debian/welco-manage
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+NAME=welco
+MANAGE=/usr/lib/$NAME/manage.py
+
+# load Debian default configuration
+export WELCO_SETTINGS_FILE=/usr/lib/$NAME/debian_config.py
+
+# check user
+if test x$1 = x"--forceuser"
+then
+ shift
+elif test $(id -un) != "$NAME"
+then
+ echo "error: must use $0 with user ${NAME}"
+ exit 1
+fi
+
+if test $# -eq 0
+then
+ python ${MANAGE} help
+ exit 1
+fi
+
+python ${MANAGE} "$@"
+
diff --git a/debian/welco.dirs b/debian/welco.dirs
new file mode 100644
index 0000000..465820d
--- /dev/null
+++ b/debian/welco.dirs
@@ -0,0 +1,5 @@
+/etc/welco
+/usr/lib/welco
+/var/lib/welco/collectstatic
+/var/lib/welco/tenants
+/var/log/welco
diff --git a/debian/welco.docs b/debian/welco.docs
new file mode 100644
index 0000000..68b8457
--- /dev/null
+++ b/debian/welco.docs
@@ -0,0 +1,3 @@
+COPYING
+README
+debian/nginx-example.conf
diff --git a/debian/welco.init b/debian/welco.init
new file mode 100644
index 0000000..bf262e1
--- /dev/null
+++ b/debian/welco.init
@@ -0,0 +1,195 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: welco
+# Required-Start: $network $local_fs $remote_fs $syslog
+# Required-Stop: $network $local_fs $remote_fs $syslog
+# Should-start: postgresql
+# Should-stop: postgresql
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Portal Management System
+# Description: Portal Management System
+### END INIT INFO
+
+# Author: Entr'ouvert <info@entrouvert.com>
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC"=Multichannel request processing"
+NAME=welco
+DAEMON=/usr/bin/gunicorn
+RUN_DIR=/run/$NAME
+PIDFILE=$RUN_DIR/$NAME.pid
+LOG_DIR=/var/log/$NAME
+SCRIPTNAME=/etc/init.d/$NAME
+BIND=unix:$RUN_DIR/$NAME.sock
+WORKERS=5
+TIMEOUT=30
+
+WELCO_SETTINGS_FILE=/usr/lib/$NAME/debian_config.py
+MANAGE_SCRIPT="/usr/bin/$NAME-manage"
+
+USER=$NAME
+GROUP=$NAME
+
+# Exit if the package is not installed
+[ -x $MANAGE_SCRIPT ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+DAEMON_ARGS=${DAEMON_ARGS:-"--pid $PIDFILE \
+--user $USER --group $GROUP \
+--daemon \
+--access-logfile $LOG_DIR/gunicorn-access.log \
+--log-file $LOG_DIR/gunicorn-error.log \
+--bind=$BIND \
+--workers=$WORKERS \
+--worker-class=sync \
+--timeout=$TIMEOUT \
+--name $NAME \
+$NAME.wsgi:application"}
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+# Create /run directory
+if [ ! -d $RUN_DIR ]; then
+ install -d -m 755 -o $USER -g $GROUP $RUN_DIR
+fi
+
+# environment for wsgi
+export WELCO_SETTINGS_FILE
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --exec $DAEMON -- \
+ $DAEMON_ARGS \
+ || return 2
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ # Wait for children to finish too if this is a daemon that forks
+ # and if the daemon is only ever run from this initscript.
+ # If the above conditions are not satisfied then add some other code
+ # that waits for the process to drop all resources that could be
+ # needed by services started subsequently. A last resort is to
+ # sleep for some time.
+ start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+ [ "$?" = 2 ] && return 2
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name `basename $DAEMON`
+ return 0
+}
+
+do_migrate() {
+ log_action_msg "Applying migrations (migrate_schemas).."
+ su $USER -s /bin/sh -p -c "$MANAGE_SCRIPT migrate_schemas"
+ log_action_msg "done"
+}
+
+do_collectstatic() {
+ log_action_msg "Collect static files (collectstatic).."
+ su $USER -s /bin/sh -p -c "$MANAGE_SCRIPT collectstatic --noinput"
+ log_action_msg "done"
+}
+
+case "$1" in
+ start)
+ log_daemon_msg "Starting $DESC " "$NAME"
+ do_migrate
+ do_collectstatic
+ do_start
+ case "$?" in
+ 0|1) log_end_msg 0 ;;
+ 2) log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) log_end_msg 0 ;;
+ 2) log_end_msg 1 ;;
+ esac
+ ;;
+ status)
+ status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+ ;;
+ reload|force-reload)
+ #
+ # If do_reload() is not implemented then leave this commented out
+ # and leave 'force-reload' as an alias for 'restart'.
+ #
+ log_daemon_msg "Reloading $DESC" "$NAME"
+ do_collectstatic
+ do_migrate
+ do_reload
+ log_end_msg $?
+ ;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented then remove the
+ # 'force-reload' alias
+ #
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_migrate
+ do_collectstatic
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
+ exit 3
+ ;;
+esac
diff --git a/debian/welco.install b/debian/welco.install
new file mode 100644
index 0000000..e62f67f
--- /dev/null
+++ b/debian/welco.install
@@ -0,0 +1,3 @@
+debian/welco-manage /usr/bin
+debian/settings.py /etc/welco
+debian/debian_config.py /usr/lib/welco
diff --git a/debian/welco.postinst b/debian/welco.postinst
new file mode 100644
index 0000000..ee073d7
--- /dev/null
+++ b/debian/welco.postinst
@@ -0,0 +1,44 @@
+#! /bin/sh
+
+set -e
+
+NAME="welco"
+USER=$NAME
+GROUP=$NAME
+CONFIG_DIR="/etc/$NAME"
+
+case "$1" in
+ configure)
+
+ # make sure the administrative user exists
+ if ! getent passwd $USER >/dev/null; then
+ adduser --disabled-password --quiet --system \
+ --no-create-home --home /var/lib/$NAME \
+ --gecos "$NAME user" --group $USER
+ fi
+ # ensure dirs ownership
+ chown $USER:$GROUP /var/log/$NAME
+ chown $USER:$GROUP /var/lib/$NAME/collectstatic
+ chown $USER:$GROUP /var/lib/$NAME/tenants
+ # create a secret file
+ SECRET_FILE=$CONFIG_DIR/secret
+ if [ ! -f $SECRET_FILE ]; then
+ echo -n "Generating Django secret..." >&2
+ cat /dev/urandom | tr -dc [:alnum:]-_\!\%\^:\; | head -c70 > $SECRET_FILE
+ chown root:$GROUP $SECRET_FILE
+ chmod 0440 $SECRET_FILE
+ fi
+ ;;
+
+ abort-upgrade|abort-remove|abort-deconfigure)
+ ;;
+
+ *)
+ echo "postinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+#DEBHELPER#
+
+exit 0