From a538c149768ee565ea1b0db3ef8e3bb2a7759da0 Mon Sep 17 00:00:00 2001 From: Ondrej Kubik Date: Mon, 26 Jun 2017 17:04:27 +0000 Subject: [PATCH 1/2] Adding snapcraft build support from source Signed-off-by: Ondrej Kubik --- .gitignore | 4 ++ snap-src/config | 44 ++++++++++++ snap-src/mongodb-backup | 23 +++++++ snap-src/mongodb-control | 31 +++++++++ snap-src/mongodb-restore | 16 +++++ snap-src/wekan-control | 26 ++++++++ snap-src/wekan-help | 48 ++++++++++++++ snap-src/wekan-read-settings | 36 ++++++++++ snap/gui/icon.png | Bin 0 -> 12302 bytes snap/hooks/configure | 32 +++++++++ snapcraft.yaml | 125 +++++++++++++++++++++++++++++++++++ 11 files changed, 385 insertions(+) create mode 100755 snap-src/config create mode 100755 snap-src/mongodb-backup create mode 100755 snap-src/mongodb-control create mode 100755 snap-src/mongodb-restore create mode 100755 snap-src/wekan-control create mode 100755 snap-src/wekan-help create mode 100755 snap-src/wekan-read-settings create mode 100644 snap/gui/icon.png create mode 100755 snap/hooks/configure create mode 100644 snapcraft.yaml diff --git a/.gitignore b/.gitignore index 0ee9499b3..7642f23dd 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 000000000..dbf8402c4 --- /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 000000000..bef8bf9bc --- /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 000000000..08af132d4 --- /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 000000000..c1c827750 --- /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 000000000..905642edf --- /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 000000000..bbf0e1388 --- /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 " +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 =''" +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 000000000..aec05bba2 --- /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 0000000000000000000000000000000000000000..1382e2565acec2ec6a8ca844e007e8e245ab75d2 GIT binary patch literal 12302 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

E*!w(>;!l|m&%P_v- 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 YFsyBcV*M~O5{lwgqDFy~|M&C%0BdNFSO5S3 literal 0 HcmV?d00001 diff --git a/snap/hooks/configure b/snap/hooks/configure new file mode 100755 index 000000000..1e2b0ec75 --- /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 000000000..6dcc735f2 --- /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 From aca2692214f6dd3a260668204cd0588fe95b60dd Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 27 Jun 2017 17:18:06 +0300 Subject: [PATCH 2/2] Add snapcraft build support from source. Thanks to kubiko ! --- CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19288264f..e8602046b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,15 @@ # Upcoming Wekan release -This release fixes the following bugs: +This release adds the following new features: + +* [Snapcraft build support from source](https://github.com/wekan/wekan/pull/1091). + +and fixes the following bugs: * [Fix incorrect attachment link with subfolder in the url](https://github.com/wekan/wekan/pull/1086); * [Fix link to card](https://github.com/wekan/wekan/pull/1087). -Thanks to GitHub user nztqa for contributions. +Thanks to GitHub users kubiko and nztqa for their contributions. # v0.26 2017-06-26 Wekan release