From 2fc4ba87ac8b96d47b994e496af4278353a1f70f Mon Sep 17 00:00:00 2001 From: root Date: Wed, 21 Aug 2013 09:29:59 +0200 Subject: [PATCH] new: added ``etherpad`` lxc. --- precise/etherpad/hooks/install | 72 +++++++++ precise/etherpad/hooks/start | 3 + precise/etherpad/hooks/stop | 3 + precise/etherpad/metadata.yaml | 10 ++ precise/etherpad/revision | 1 + .../src/etc/etherpad-lite/settings.json | 153 ++++++++++++++++++ .../etherpad/src/etc/init/etherpad-lite.conf | 18 +++ .../src/etc/logrotate.d/etherpad-lite | 13 ++ 8 files changed, 273 insertions(+) create mode 100755 precise/etherpad/hooks/install create mode 100755 precise/etherpad/hooks/start create mode 100755 precise/etherpad/hooks/stop create mode 100644 precise/etherpad/metadata.yaml create mode 100644 precise/etherpad/revision create mode 100644 precise/etherpad/src/etc/etherpad-lite/settings.json create mode 100644 precise/etherpad/src/etc/init/etherpad-lite.conf create mode 100644 precise/etherpad/src/etc/logrotate.d/etherpad-lite diff --git a/precise/etherpad/hooks/install b/precise/etherpad/hooks/install new file mode 100755 index 0000000..958bb22 --- /dev/null +++ b/precise/etherpad/hooks/install @@ -0,0 +1,72 @@ +#!/bin/bash + + +ETHERPAD_LITE_USER=${ETHERPAD_LITE_USER:-etherpad} +ETHERPAD_LITE_GROUP=${ETHERPAD_LITE_GROUP:-etherpad} + +set -eux # -x for verbose logging to juju debug-log + +apt-get -y install git-core sqlite3 python-software-properties + + + +sudo add-apt-repository -y ppa:chris-lea/node.js +sudo apt-get update +sudo apt-get install -y nodejs + + +mkdir /opt/apps -p + +( + cd /opt/apps && + git clone git://github.com/ether/etherpad-lite.git && + cd etherpad-lite && + adduser --system --home=/home/"$ETHERPAD_LITE_USER" --group "$ETHERPAD_LITE_GROUP" && + chown "$ETHERPAD_LITE_USER":"$ETHERPAD_LITE_GROUP" /opt/apps/etherpad-lite -R && + ## -H is to force HOME environment variable to change to etherpad one. + sudo -u "$ETHERPAD_LITE_USER" -H bin/installDeps.sh +) + +## +## Config file +## + +config_file="/etc/etherpad-lite/settings.json" + +[ -e "$config_file" ] || cp "src/etc/etherpad-lite/settings.json" "$config_file" + +ln -sf "$config_file" /opt/apps/etherpad-lite/settings.json + + +## +## Storage +## + +# is set from config file and by lxc-scripts as its declared as a data-dir + + +## +## Startup file +## + +cp src/etc/init/etherpad-lite.conf /etc/init/etherpad-lite.conf + +## +## Logrotate +## + +cp src/etc/logrotate.d/etherpad-lite /etc/logrotate.d/etherpad-lite + + +## +## sqlite3 module +## + +apt-get install -y build-essential +( +## XXXvlab: not very sure why you need to go in this directory +cd /opt/apps/etherpad-lite && +sudo -u "$ETHERPAD_LITE_USER" -H npm install sqlite3 +) +chown "$ETHERPAD_LITE_USER" /var/lib/etherpad-lite + diff --git a/precise/etherpad/hooks/start b/precise/etherpad/hooks/start new file mode 100755 index 0000000..9eb7853 --- /dev/null +++ b/precise/etherpad/hooks/start @@ -0,0 +1,3 @@ +#!/bin/bash + +juju-log "Nothing to Start for base." diff --git a/precise/etherpad/hooks/stop b/precise/etherpad/hooks/stop new file mode 100755 index 0000000..170162b --- /dev/null +++ b/precise/etherpad/hooks/stop @@ -0,0 +1,3 @@ +#!/bin/bash + +juju-log "Nothing to stop for base." diff --git a/precise/etherpad/metadata.yaml b/precise/etherpad/metadata.yaml new file mode 100644 index 0000000..939c252 --- /dev/null +++ b/precise/etherpad/metadata.yaml @@ -0,0 +1,10 @@ +name: etherpad +summary: "Etherpad-lite server" +maintainer: "Valentin Lab " +inherit: base-0k +description: | + Etherpad-lite service. +config-resources: + - /etc/etherpad-lite +data-resources: + - /var/lib/etherpad-lite diff --git a/precise/etherpad/revision b/precise/etherpad/revision new file mode 100644 index 0000000..573541a --- /dev/null +++ b/precise/etherpad/revision @@ -0,0 +1 @@ +0 diff --git a/precise/etherpad/src/etc/etherpad-lite/settings.json b/precise/etherpad/src/etc/etherpad-lite/settings.json new file mode 100644 index 0000000..34ea844 --- /dev/null +++ b/precise/etherpad/src/etc/etherpad-lite/settings.json @@ -0,0 +1,153 @@ +/* + This file must be valid JSON. But comments are allowed + + Please edit settings.json, not settings.json.template +*/ +{ + // Name your instance! + "title": "Etherpad", + + // favicon default name + // alternatively, set up a fully specified Url to your own favicon + "favicon": "favicon.ico", + + //IP and port which etherpad should bind at + "ip": "0.0.0.0", + "port" : 9001, + + // Session Key, used for reconnecting user sessions + // Set this to a secure string at least 10 characters long. Do not share this value. + "sessionKey" : "", + + /* + // Node native SSL support + // this is disabled by default + // + // make sure to have the minimum and correct file access permissions set + // so that the Etherpad server can access them + + "ssl" : { + "key" : "/path-to-your/epl-server.key", + "cert" : "/path-to-your/epl-server.crt" + }, + + */ + + //The Type of the database. You can choose between dirty, postgres, sqlite and mysql + //You shouldn't use "dirty" for for anything else than testing or development + /* + "dbType" : "dirty", + //the database specific settings + "dbSettings" : { + "filename" : "var/dirty.db" + }, + */ + "dbType" : "sqlite", + //the database specific settings + + "dbSettings" : { + "filename" : "/var/lib/etherpad-lite/main.sqlite" + }, + + /* An Example of MySQL Configuration + "dbType" : "mysql", + "dbSettings" : { + "user" : "root", + "host" : "localhost", + "password": "", + "database": "store" + }, + */ + + //the default text of a pad + "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n", + + /* Users must have a session to access pads. This effectively allows only group pads to be accessed. */ + "requireSession" : false, + + /* Users may edit pads but not create new ones. Pad creation is only via the API. This applies both to group pads and regular pads. */ + "editOnly" : false, + + /* if true, all css & js will be minified before sending to the client. This will improve the loading performance massivly, + but makes it impossible to debug the javascript/css */ + "minify" : true, + + /* How long may clients use served javascript code (in seconds)? Without versioning this + may cause problems during deployment. Set to 0 to disable caching */ + "maxAge" : 21600, // 60 * 60 * 6 = 6 hours + + /* This is the path to the Abiword executable. Setting it to null, disables abiword. + Abiword is needed to advanced import/export features of pads*/ + "abiword" : null, + + /* This setting is used if you require authentication of all users. + Note: /admin always requires authentication. */ + "requireAuthentication": false, + + /* Require authorization by a module, or a user with is_admin set, see below. */ + "requireAuthorization": false, + + /* Users for basic authentication. is_admin = true gives access to /admin. + If you do not uncomment this, /admin will not be available! */ + + "users": { + "admin": { + "password": "acdlElmap", + "is_admin": true + }, + /* + "user": { + "password": "changeme1", + "is_admin": false + } + */ + }, + + + // restrict socket.io transport methods + "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"], + + /* The log level we are using, can be: DEBUG, INFO, WARN, ERROR */ + "loglevel": "INFO", + + //Logging configuration. See log4js documentation for further information + // https://github.com/nomiddlename/log4js-node + // You can add as many appenders as you want here: + "logconfig" : + { "appenders": [ + { "type": "console" + //, "category": "access"// only logs pad access + } + /* + , { "type": "file" + , "filename": "your-log-file-here.log" + , "maxLogSize": 1024 + , "backups": 3 // how many log files there're gonna be at max + //, "category": "test" // only log a specific category + }*/ + /* + , { "type": "logLevelFilter" + , "level": "warn" // filters out all log messages that have a lower level than "error" + , "appender": + { Use whatever appender you want here } + }*/ + /* + , { "type": "logLevelFilter" + , "level": "error" // filters out all log messages that have a lower level than "error" + , "appender": + { "type": "smtp" + , "subject": "An error occured in your EPL instance!" + , "recipients": "bar@blurdybloop.com, baz@blurdybloop.com" + , "sendInterval": 60*5 // in secs -- will buffer log messages; set to 0 to send a mail for every message + , "transport": "SMTP", "SMTP": { // see https://github.com/andris9/Nodemailer#possible-transport-methods + "host": "smtp.example.com", "port": 465, + "secureConnection": true, + "auth": { + "user": "foo@example.com", + "pass": "bar_foo" + } + } + } + }*/ + ] } +} diff --git a/precise/etherpad/src/etc/init/etherpad-lite.conf b/precise/etherpad/src/etc/init/etherpad-lite.conf new file mode 100644 index 0000000..781d1c4 --- /dev/null +++ b/precise/etherpad/src/etc/init/etherpad-lite.conf @@ -0,0 +1,18 @@ +# Etherpad-lite upstart +# this script will start/stop Etherpad-lite +description "Etherpad-Lite Server" +version "1.0" +author "Valentin Lab" + +start on started networking +stop on runlevel [!2345] + +env LOG_FILE=/var/log/etherpad-lite.log +env USER=etherpad + + +script + chdir /opt/apps/etherpad-lite + exec sudo -u "$USER" bin/run.sh >> "$LOG_FILE" 2>&1 +end script + diff --git a/precise/etherpad/src/etc/logrotate.d/etherpad-lite b/precise/etherpad/src/etc/logrotate.d/etherpad-lite new file mode 100644 index 0000000..62adab8 --- /dev/null +++ b/precise/etherpad/src/etc/logrotate.d/etherpad-lite @@ -0,0 +1,13 @@ +/var/log/etherpad-lite.log +{ + rotate 4 + weekly + missingok + notifempty + compress + delaycompress + sharedscripts + postrotate + restart etherpad-lite >/dev/null 2>&1 || true + endscript +}