diff docker/libervia/Dockerfile @ 21:0e78c8a4626e

Added Dockerfiles to create Docker images for easy installation + scripts to manages them. see README for details.
author Goffi <goffi@goffi.org>
date Sun, 19 Oct 2014 15:14:40 +0200
parents
children b27e7f9ad479
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docker/libervia/Dockerfile	Sun Oct 19 15:14:40 2014 +0200
@@ -0,0 +1,115 @@
+####################################################################
+#                                                                  #
+#                       Salut à Toi/Libervia                       #
+# This Dockerfile build Libervia, the web frontend for Salut à Toi #
+#   Salut à Toi is a multi-frontends multi-purposes XMPP client    #
+#                                                                  #
+####################################################################
+
+FROM salutatoi/media:latest
+
+MAINTAINER Goffi <goffi@goffi.org>
+
+##############
+# txJSON-RPC #
+##############
+
+WORKDIR /tmp/txjsonrpc
+
+# wget and tar are not installed, so we use python
+RUN python -c 'import urllib2,tarfile,cStringIO;tar=tarfile.open(fileobj=cStringIO.StringIO(urllib2.urlopen("https://pypi.python.org/packages/source/t/txJSON-RPC/txJSON-RPC-0.3.1.tar.gz").read()));tar.extractall()'
+
+# we don't need setuptools, so we just install through python
+RUN cd tx*; sed -i "s/from setuptools/from distutils.core/" setup.py; python setup.py install
+
+WORKDIR /tmp
+
+RUN rm -rf txjsonrpc
+
+###########
+# PYJAMAS #
+###########
+
+WORKDIR /usr/share
+
+# as the situation with pyjamas is complicated, we get the archive from our own ftp
+RUN python -c 'import urllib2,tarfile,cStringIO;tar=tarfile.open(fileobj=cStringIO.StringIO(urllib2.urlopen("http://ftp.goffi.org/pyjamas/pyjamas.tar.bz2").read()));tar.extractall()'
+
+WORKDIR pyjamas
+
+RUN python bootstrap.py
+
+RUN ln -s /usr/share/pyjamas/bin/pyjsbuild /usr/local/bin/pyjsbuild
+
+############
+# LIBERVIA #
+############
+
+WORKDIR /tmp
+
+RUN hg clone http://repos.goffi.org/libervia
+
+WORKDIR libervia
+
+RUN python setup.py install
+
+WORKDIR /tmp
+
+RUN rm -rf libervia
+
+#####################
+# FIRST LAUNCH TEST #
+#####################
+
+# this script check if libervia and admin accounts exist, and create them if necessary
+# then it launch libervia
+RUN echo '#!/usr/bin/env python2\n\
+import os, sys, subprocess, string, random\n\
+from sat.plugins import plugin_misc_account as account\n\
+from sat.tools import config\n\
+from sat_frontends.bridge import DBus\n\
+def generate_pwd():\n\
+    chars = string.letters + string.digits\n\
+    length = 12\n\
+    return "".join(random.choice(chars) for _ in range(length))\n\
+sat=DBus.DBusBridgeFrontend()\n\
+sat.getReady()\n\
+admin_email = sat.getConfig(account.CONFIG_SECTION, "admin_email") or account.default_conf["admin_email"]\n\
+for profile in ["libervia", "admin"]:\n\
+    if not sat.getProfileName(profile):\n\
+        print "{} profile doesn'\''t exists, creating it".format(profile)\n\
+        print "registering {}@{}".format(profile, sat.getNewAccountDomain())\n\
+        pwd = generate_pwd()\n\
+        if profile == "libervia":\n\
+            config.fixConfigOption("libervia", "passphrase", pwd)\n\
+        elif profile == "admin":\n\
+            with open("/home/sat/ADMIN_PWD", "w") as f:\n\
+                f.write(pwd)\n\
+        sat.registerSatAccount(admin_email, pwd, profile)\n\
+os.execvp("libervia", ["libervia"] + sys.argv[1:])\n\
+' > /usr/bin/libervia_cont_launch && chmod 555 /usr/bin/libervia_cont_launch
+
+#########
+# D-Bus #
+#########
+
+RUN cp /usr/local/bin/dbus_wrap /usr/local/bin/libervia_cont_launch && chmod 555 /usr/local/bin/libervia_cont_launch
+
+#########
+# Ports #
+#########
+
+# HTTP
+EXPOSE 8080
+
+# HTTPS
+EXPOSE 8443
+
+##########
+# LAUNCH #
+##########
+
+USER sat
+
+ENTRYPOINT ["libervia_cont_launch", "fg"]
+CMD ["-t", "http"]