Adding snapcraft build support from source

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>
This commit is contained in:
Ondrej Kubik 2017-06-26 17:04:27 +00:00
parent 60495e4765
commit a538c14976
11 changed files with 385 additions and 0 deletions

44
snap-src/config Executable file
View file

@ -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"

23
snap-src/mongodb-backup Executable file
View file

@ -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}

31
snap-src/mongodb-control Executable file
View file

@ -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

16
snap-src/mongodb-restore Executable file
View file

@ -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

26
snap-src/wekan-control Executable file
View file

@ -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

48
snap-src/wekan-help Executable file
View file

@ -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"

36
snap-src/wekan-read-settings Executable file
View file

@ -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