summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-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
-rw-r--r--snap/gui/icon.pngbin0 -> 12302 bytes
-rwxr-xr-xsnap/hooks/configure32
-rw-r--r--snapcraft.yaml125
11 files changed, 385 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 0ee9499b..7642f23d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,7 @@ node_modules/
packages/kadira-flow-router/
packages/meteor-useraccounts-core/
package-lock.json
+**/parts/
+**/stage
+**/prime
+**/*.snap
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
diff --git a/snap/gui/icon.png b/snap/gui/icon.png
new file mode 100644
index 00000000..1382e256
--- /dev/null
+++ b/snap/gui/icon.png
Binary files differ
diff --git a/snap/hooks/configure b/snap/hooks/configure
new file mode 100755
index 00000000..1e2b0ec7
--- /dev/null
+++ b/snap/hooks/configure
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# read wekan config
+. $SNAP/bin/config
+
+# create run dir, we're going to use it for unix socket
+mkdir -p $SNAP_DATA/share
+mkdir -p $SNAP_DATA/shared
+
+# settings were altered by user, safest way to get them applied is to restart service
+
+# TODO: remove this workaround once it's not needed
+# for the moment we can't read settings outside of the hook,
+# so store all settings in helpper script which is then picked by main wrapper
+echo -e "#!/bin/sh\n" > $SETTINGS_FILE
+for key in ${keys[@]}
+do
+ # snappy is picky about key syntax, using mapping
+ MAP_KEY="KEY_$key"
+ if value=$(snapctl get ${!MAP_KEY}); then
+ echo "export $key='$value'" >> $SETTINGS_FILE
+ elif [ -d "${!key}" ]; then
+ # store back value from SETTINGS_FILE
+ echo "export $key='${!key}'" >> $SETTINGS_FILE
+ fi
+done
+
+# set file executable
+chmod 755 $SETTINGS_FILE
+# we can't use snapctl to restart service, may be one day ....
+
+echo "Setting has been updated, restart service."
diff --git a/snapcraft.yaml b/snapcraft.yaml
new file mode 100644
index 00000000..6dcc735f
--- /dev/null
+++ b/snapcraft.yaml
@@ -0,0 +1,125 @@
+name: wekan
+version: "0.26-SNAPSHOT"
+summary: The open-source Trello-like kanban
+description: |
+ Wekan is an open-source and collaborative kanban board application.
+
+ Whether you’re maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
+ Depending on target environment, some configuration settings might need to be adjusted.
+ For full list of configuration options call:
+ $ wekan.help
+
+confinement: strict
+grade: stable
+
+architectures:
+ - amd64
+
+plugs:
+ mongodb-plug:
+ interface: content
+ target: $SNAP_DATA/shared
+
+slots:
+ mongodb-slot:
+ interface: content
+ write:
+ - $SNAP_DATA/share
+
+apps:
+ wekan:
+ command: wekan-control
+ daemon: simple
+ plugs: [network, network-bind]
+
+ mongodb:
+ command: mongodb-control
+ daemon: simple
+ plugs: [network, network-bind]
+
+ help:
+ command: wekan-help
+
+ database-backup:
+ command: mongodb-backup
+ plugs: [network, network-bind]
+
+ database-list-backups:
+ command: ls -ald $SNAP_COMMON/db-backups/*
+
+ database-restore:
+ command: mongodb-restore
+ plugs: [network, network-bind]
+
+parts:
+ mongodb:
+ source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.14.tgz
+ plugin: dump
+ stage-packages: [libssl1.0.0]
+ filesets:
+ mongo:
+ - usr
+ - bin
+ - lib
+ stage:
+ - $mongo
+ prime:
+ - $mongo
+
+ wekan:
+ source: .
+ plugin: nodejs
+ node-engine: 4.8.1
+ node-packages:
+ - npm@4.6.1
+ - node-gyp
+ - node-pre-gyp
+ - fibers@1.0.15
+ build-packages:
+ - python
+ - g++
+ - capnproto
+ - nodejs
+ - nodejs-legacy
+ - curl
+ prepare: |
+ echo "Cleaning environment first"
+ rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
+ echo "installing meteor first"
+ curl https://install.meteor.com/ -o install_meteor.sh
+ sed -i "s|RELEASE=.*|RELEASE=\"1.4.4.1\"|g" install_meteor.sh
+ chmod +x install_meteor.sh
+ sh install_meteor.sh
+ rm install_meteor.sh
+ mkdir -p packages
+ git clone https://github.com/wekan/flow-router.git packages/kadira-flow-router
+ git clone https://github.com/meteor-useraccounts/core.git packages/meteor-useraccounts-core
+ build: |
+ rm -rf package-lock.json .build
+ meteor add standard-minifier-js --allow-superuser
+ meteor npm install --allow-superuser
+ meteor build .build --directory --allow-superuser
+ cp fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
+ sed -i "s|build\/Release\/bson|browser_build\/bson|g" .build/bundle/programs/server/npm/node_modules/meteor/cfs_gridfs/node_modules/mongodb/node_modules/bson/ext/index.js
+ cd .build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
+ rm -rf node_modules/bcrypt
+ npm install bcrypt
+ cd ../../../../
+ npm install
+ install: |
+ cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
+ cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
+ organize:
+ README: README.wekan
+
+ helpers:
+ source: snap-src
+ plugin: dump
+ organize:
+ wekan-control: bin/wekan-control
+ mongodb-control: bin/mongodb-control
+ wekan-read-settings: bin/wekan-read-settings
+ wekan-help: bin/wekan-help
+ mongodb-backup: bin/mongodb-backup
+ mongodb-restore: bin/mongodb-restore
+ config: bin/config