summaryrefslogtreecommitdiffstats
path: root/snap-src
diff options
context:
space:
mode:
authorOndrej Kubik <ondrej.kubik@canonical.com>2017-06-26 17:04:27 +0000
committerOndrej Kubik <ondrej.kubik@canonical.com>2017-06-27 13:22:52 +0000
commita538c149768ee565ea1b0db3ef8e3bb2a7759da0 (patch)
tree6f3afd2ad16ab2d8bca3467f1f7c71ae95402185 /snap-src
parent60495e4765363b95e8e1859406d80c5588062e14 (diff)
downloadwekan-a538c149768ee565ea1b0db3ef8e3bb2a7759da0.tar.gz
wekan-a538c149768ee565ea1b0db3ef8e3bb2a7759da0.tar.bz2
wekan-a538c149768ee565ea1b0db3ef8e3bb2a7759da0.zip
Adding snapcraft build support from source
Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>
Diffstat (limited to 'snap-src')
-rwxr-xr-xsnap-src/config44
-rwxr-xr-xsnap-src/mongodb-backup23
-rwxr-xr-xsnap-src/mongodb-control31
-rwxr-xr-xsnap-src/mongodb-restore16
-rwxr-xr-xsnap-src/wekan-control26
-rwxr-xr-xsnap-src/wekan-help48
-rwxr-xr-xsnap-src/wekan-read-settings36
7 files changed, 224 insertions, 0 deletions
diff --git a/snap-src/config b/snap-src/config
new file mode 100755
index 00000000..dbf8402c
--- /dev/null
+++ b/snap-src/config
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# store here all configuration options for wekan snap
+# read configured settings first
+SETTINGS_FILE="$SNAP_COMMON/wekan_settings.sh"
+[ -f $SETTINGS_FILE ] && . $SETTINGS_FILE
+
+# list of supported keys
+keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB"
+
+# default values
+DESCRIPTION_MONGODB_BIND_UNIX_SOCKET="mongodb binding unix socket:\n"\
+"\t\t\t Default behaviour will preffer binding over unix socket, to disable unix socket binding set value to 'nill' string\n"\
+"\t\t\t To bind to instance of mongo provided through contect interface set to relative path to the socket inside shared directory"
+DEFAULT_MONGODB_BIND_UNIX_SOCKET="$SNAP_DATA/share"
+KEY_MONGODB_BIND_UNIX_SOCKET="mongodb-bind-unix-socket"
+
+DESCRIPTION_MONGODB_PORT="mongodb binding port: eg 27017 when using localhost"
+DEFAULT_MONGODB_PORT="27019"
+KEY_MONGODB_PORT='mongodb-port'
+
+DESCRIPTION_MONGODB_BIND_IP="mongodb binding ip address: eg 127.0.0.1 for localhost\n\t\tIf not defined default unix socket is used instead"
+DEFAULT_MONGODB_BIND_IP=""
+KEY_MONGODB_BIND_IP="mongodb-bind-ip"
+
+DESCRIPTION_MAIL_URL="wekan mail binding"
+DEFAULT_MAIL_URL="smtp://user:pass@mailserver.examples.com:25/"
+KEY_MAIL_URL="mail-url"
+
+DESCRIPTION_MAIL_FROM="wekan's admin mail from name email address"
+DEFAULT_MAIL_FROM="wekan-admin@example.com"
+KEY_MAIL_FROM="mail-from"
+
+DESCRIPTION_ROOT_URL="wekan's root url, eg http://127.0.0.1, https://example.com, https://wekan.example.com, http://example.com/wekan"
+DEFAULT_ROOT_URL="http://127.0.0.1"
+KEY_ROOT_URL="root-url"
+
+DESCRIPTION_PORT="port wekan is exposed at"
+DEFAULT_PORT="8080"
+KEY_PORT="port"
+
+DESCRIPTION_DISABLE_MONGODB="Disable mongodb service: use only if binding to database outside of the snap. Valid values: [true,false]"
+DEFAULT_DISABLE_MONGODB="false"
+KEY_DISABLE_MONGODB="disable-mongodb"
diff --git a/snap-src/mongodb-backup b/snap-src/mongodb-backup
new file mode 100755
index 00000000..bef8bf9b
--- /dev/null
+++ b/snap-src/mongodb-backup
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# get wekan/mongo settings
+source $SNAP/bin/wekan-read-settings
+
+# make sure we have set minimum env variables for locale
+if [ -z "$LANG" ]; then
+ export LANG=en_US.UTF-8
+fi
+
+export LC_ALL=C
+
+if [ -z $1 ]; then
+ DATE=`/bin/date +%Y%m%dT%H%M%S`
+ mkdir -p $SNAP_COMMON/db-backups/
+ ARCHIVE=$SNAP_COMMON/db-backups/wekan-$DATE.backup
+else
+ ARCHIVE=$1
+fi
+# start mongodb backup
+[ "x" == "x${MONGODB_BIND_IP}" ] && MONGODB_BIND_IP="127.0.0.1"
+ echo "using bind ip"
+mongodump --host $MONGODB_BIND_IP --port $MONGODB_PORT -d wekan --gzip --archive=${ARCHIVE}
diff --git a/snap-src/mongodb-control b/snap-src/mongodb-control
new file mode 100755
index 00000000..08af132d
--- /dev/null
+++ b/snap-src/mongodb-control
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+# get wekan/mongo settings
+source $SNAP/bin/wekan-read-settings
+
+if [ "true" == "${DISABLE_MONGODB}" ]; then
+ echo "mongodb is disabled. Not starting it"
+ exit 0
+fi
+
+# make sure we have set minimum env variables for locale
+if [ -z "$LANG" ]; then
+ export LANG=en_US.UTF-8
+fi
+
+export LC_ALL=C
+
+# start mongo deamon
+BIND_OPTIONS=""
+if [ "nill" != "$MONGODB_BIND_UNIX_SOCKET" ] && [ "x" != "x${MONGODB_BIND_UNIX_SOCKET}" ]; then
+ BIND_OPTIONS+=" --unixSocketPrefix $MONGODB_BIND_UNIX_SOCKET"
+fi
+if [ "x" != "x${MONGODB_BIND_IP}" ]; then
+ BIND_OPTIONS+=" --bind_ip $MONGODB_BIND_IP"
+fi
+if [ "x" != "x${MONGODB_PORT}" ]; then
+ BIND_OPTIONS+=" --port $MONGODB_PORT"
+fi
+echo "mongodb bind options: $BIND_OPTIONS"
+
+mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS
diff --git a/snap-src/mongodb-restore b/snap-src/mongodb-restore
new file mode 100755
index 00000000..c1c82775
--- /dev/null
+++ b/snap-src/mongodb-restore
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# get wekan/mongo settings
+source $SNAP/bin/wekan-read-settings
+
+# make sure we have set minimum env variables for locale
+if [ -z "$LANG" ]; then
+ export LANG=en_US.UTF-8
+fi
+
+export LC_ALL=C
+
+# start mongodb backup
+[ "x" == "x${MONGODB_BIND_IP}" ] && MONGODB_BIND_IP="127.0.0.1"
+echo "using bind ip"
+mongorestore --host $MONGODB_BIND_IP --port $MONGODB_PORT -d wekan --gzip --archive=$1
diff --git a/snap-src/wekan-control b/snap-src/wekan-control
new file mode 100755
index 00000000..905642ed
--- /dev/null
+++ b/snap-src/wekan-control
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+SYSTEMD_WEKAN_SERVICE="snap.${SNAP_NAME}.wekan"
+SYSTEMD_MONGODB_SERVICE="snap.${SNAP_NAME}.mongodb"
+
+# get wekan/mongo settings
+source $SNAP/bin/wekan-read-settings
+
+export NODE_PATH=$SNAP/bin
+# if possible we prefer to bind over unix socket
+if [ "nill" != "$MONGODB_BIND_UNIX_SOCKET" ] && [ "x" != "x$MONGODB_BIND_UNIX_SOCKET" ]; then
+ if [ -d $MONGODB_BIND_UNIX_SOCKET ]; then
+ export MONGO_URL="mongodb://$MONGODB_BIND_UNIX_SOCKET/mongodb-${MONGODB_PORT}.sock/wekan"
+ else
+ export MONGO_URL="mongodb://$SNAP_DATA/shared/$MONGODB_BIND_UNIX_SOCKET/wekan"
+ fi
+else
+ [ "x" == "x$MONGODB_BIND_IP" ] && MONGODB_BIND_IP="127.0.0.1"
+ export MONGO_URL="mongodb://$MONGODB_BIND_IP:$MONGODB_PORT/wekan"
+fi
+
+echo -e "MONGO_URL=$MONGO_URL"
+APPLICATION_DIRECTORY=$SNAP
+APPLICATION_START=main.js
+cd $APPLICATION_DIRECTORY
+$NODE_PATH/node $APPLICATION_START
diff --git a/snap-src/wekan-help b/snap-src/wekan-help
new file mode 100755
index 00000000..bbf0e138
--- /dev/null
+++ b/snap-src/wekan-help
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+source $SNAP/bin/config &>/dev/null
+
+echo -e "Wekan: The open-source Trello-like kanban.\n"
+echo -e "Make sure you have connected all interfaces, check more by calling $ snap interfaces"
+echo -e "\n"
+echo -e "${SNAP_NAME} has two services, to check status/restart/stop use systemd commands"
+echo -e "mongodb service:"
+echo -e "\t$ sudo systemctl status/start/stop/restart snap.$SNAP_NAME.mongodb"
+echo -e "wekan service"
+echo -e "\t$ sudo systemctl status/start/stop/restart snap.$SNAP_NAME.wekan"
+echo -e "\n"
+echo -e "To make backup of wekan's database use: $ ${SNAP_NAME}.database-backup [backup file]"
+echo -e "\t backup file is optional parameter, if not passed backup is created in directory:"
+echo -e "\t\t${SNAP_COMMON}/db-backups"
+echo -e "To list existing backups in default directory: $ ${SNAP_NAME}.database-list-backups"
+echo -e "To restore wekan's database use: ${SNAP_NAME}.database-restore <path to backup>"
+echo -e "\n"
+echo -e "wekan can be configured to share mongodb with other services using content interface"
+echo -e "\t-sharing mongodb from $SNAP_NAME to other snap(s):"
+echo -e "\t\t-connect mongodb-slot with plug from corresponding snap(s)"
+echo -e "\t\t-configure corresponding service to use mongodb unix socket in shared directory, socket file name is: mongodb-$MONGODB_PORT.sock"
+echo -e "\t-sharing mongodb from other snap to $SNAP_NAME:"
+echo -e "\t\t-connect mongodb-plug with slot from snap providing mongodb"
+echo -e "\t\t-disable mongodb in $SNAP_NAME by calling: $ snap set $SNAP_NAME set disable-mongodb='true'"
+echo -e "\t\t-set mongodb-bind-unix-socket to point to serving mongodb. Use relative path inside shared directory, e.g run/mongodb-27017.sock"
+echo -e "\n"
+# parse config file for supported settings keys
+echo -e "wekan supports settings keys"
+echo -e "values can be changed by calling\n$ snap set $SNAP_NAME <key name>='<key value>'"
+echo -e "list of supported keys:"
+for key in ${keys[@]}
+do
+ default_value="DEFAULT_$key"
+ description="DESCRIPTION_$key"
+ snappy_key="KEY_$key"
+ echo -e "\t${!snappy_key}: ${!description}"
+ if [ "x" == "x${!key}" ]; then
+ echo -e "\t\tNo value set, using default value: '${!default_value}'"
+ else
+ echo -e "\t\tCurrent value set to: '${!key}', (default value: '${!default_value}')"
+ fi
+done
+echo -e "\nFor changes to take effect restart wekan service,"
+echo -e "if mongodb key was change also restart mongodb service, before restarting wekan"
+echo -e "to restart mongodb: $ sudo systemctl restart snap.$SNAP_NAME.mongodb"
+echo -e "to restart wekan: $ sudo systemctl restart snap.$SNAP_NAME.wekan"
diff --git a/snap-src/wekan-read-settings b/snap-src/wekan-read-settings
new file mode 100755
index 00000000..aec05bba
--- /dev/null
+++ b/snap-src/wekan-read-settings
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# read wekan config
+source $SNAP/bin/config
+
+# TODO: uncomment following, once snapctl can be called from outside the hooks
+# for key in ${keys[@]}
+# do
+# # snappy is picky about key syntax, using mapping
+# MAP_KEY="KEY_$key"
+# SNAPPY_KEY=
+# if value=$(snapctl get ${!MAP_KEY}); then
+# echo "$key='$value'"
+# export $key=$value
+# else
+# # use default value
+# default_value="DEFAULT_$key"
+# echo "using default value: $key='${!default_value}'"
+# export $key=${!default_value}
+# fi
+# done
+
+# TODO: get rid of this workaround once above can be used
+# loop through all values, and if not defined, use default value
+for key in ${keys[@]}
+do
+ if [ "x" == "x${!key}" ]; then
+ # use default value
+ default_value="DEFAULT_$key"
+ echo "using default value: $key='${!default_value}'"
+ export $key=${!default_value}
+ # echo "export $key='${!def_value}'" >> $SETTINGS_FILE
+ else
+ echo "$key='${!key}'"
+ fi
+done