Mercurial > sat_docs
view docker/base/Dockerfile @ 103:e69883c1ec30
docker (libervia_cont): added a "status" command:
- if libervia container is not running, it exits with error code 1
- if libervia container is running but no server is launched, it exits with error code 2
- if libervia container is running and server is launcher, it exits with error code 0 (success)
server detection is done by doing a simple grep on logs, that's not perfectly reliable (ports can be changed in configuration, even if that doesn't really make sense in Docker context) but should be good enough for this purpose.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 27 Feb 2016 00:45:40 +0100 |
parents | 6e6274aa3916 |
children | b69056368901 |
line wrap: on
line source
############################################################### # # # Salut à Toi/base # # This Dockerfile build a « Salut à Toi » base image # # Salut à Toi is a multi-frontends multi-purposes XMPP client # # # ############################################################### FROM debian:jessie MAINTAINER Goffi <goffi@goffi.org> ######## # BASE # ######## ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN apt-get upgrade -y RUN apt-get install -y --no-install-recommends locales dbus-x11 python python-gobject-2 python-dbus python-lxml python-mutagen python-pil python-crypto python-feed python-potr python-twisted-core python-twisted-mail python-twisted-web python-twisted-words python-wokkel python-xdg python-xe python-zope.interface python-gi python-urwid python-markdown python-html2text mercurial python-pip RUN apt-get clean # dokuwiki module is needed for the blog importer RUN pip install dokuwiki # we need UTF-8 locale RUN sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen RUN locale-gen ENV LC_ALL en_US.UTF-8 # it's better to have a dedicated user RUN useradd -m sat # will be used to put many SàT specific data RUN mkdir -p /usr/share/sat RUN mkdir /usr/share/sat/certificates RUN addgroup tls-cert --gid 9999 && chown :tls-cert /usr/share/sat/certificates && chmod 2770 /usr/share/sat/certificates RUN adduser sat tls-cert ################ # URWID SÀTEXT # ################ WORKDIR /tmp RUN hg clone https://repos.goffi.org/urwid-satext WORKDIR urwid-satext RUN python setup.py install --prefix /usr --install-lib /usr/lib/python2.7/dist-packages WORKDIR /tmp RUN rm -rf urwid-satext ##################### # CORE INSTALLATION # ##################### WORKDIR /tmp RUN hg clone https://repos.goffi.org/sat WORKDIR sat RUN python setup.py install --prefix /usr --install-lib /usr/lib/python2.7/dist-packages WORKDIR /tmp RUN rm -rf sat ###################### # SàT CONFIGURATION # ###################### # Following scripts make the configuration as automatic and easy as possible # we want .pid files in /tmp so they are removed if container are deleted RUN echo '[DEFAULT]\npid_dir=/tmp' >> /etc/sat.conf # we auto-create libervia account if it doesn't exists in Libervia container # so we remove it from reserved_list in plugin account RUN echo '\n[plugin account]\nreserved_list=' >> /etc/sat.conf # This script set account domain in sat.conf if not already set # if not set, domain is got from prosody container or DOMAIN environment variable RUN echo '#!/usr/bin/env python2\n\ import os, os.path, xmlrpclib, ConfigParser, socket, subprocess\n\ from sat.core.constants import Const as C\n\ from sat.tools import config as sat_config\n\ SECTION = "plugin account"\n\ OPTION = "new_account_domain"\n\ CONFIG_PATH = "/home/sat/.config/sat/sat.conf"\n\ try:\n\ os.makedirs(os.path.dirname(CONFIG_PATH))\n\ except OSError:\n\ pass\n\ config = ConfigParser.SafeConfigParser()\n\ config.read(C.CONFIG_FILES)\n\ domain = sat_config.getConfig(config, SECTION, OPTION)\n\ if domain is None:\n\ os.getenv("DOMAIN")\n\ if domain is None:\n\ proxy = xmlrpclib.ServerProxy("http://prosody:9999/")\n\ try:\n\ if "prosody" not in open("/etc/hosts").read():\n\ raise socket.gaierror # this avoid waiting for timeout if prosody is not linked\n\ domain = proxy.getenv("DOMAIN")\n\ except socket.gaierror:\n\ print "No prosody container connected or known domain, using \"localhost\" for new domains"\n\ domain = "localhost"\n\ config = ConfigParser.SafeConfigParser()\n\ config.readfp(open(CONFIG_PATH, "a+"))\n\ try:\n\ config.add_section(SECTION)\n\ except ConfigParser.DuplicateSectionError:\n\ pass\n\ config.set(SECTION, OPTION, domain)\n\ config.write(open(CONFIG_PATH, "w"))\n\ subprocess.call(["add_host", domain, "prosody"])\n\ for subdomain in ("chat", "proxy", "upload", "pubsub", "salut"):\n\ subprocess.call(["add_host", "{}.{}".format(subdomain, domain), "prosody"])\n\ ' > /usr/local/bin/set_account_domain && chmod 0555 /usr/local/bin/set_account_domain # account domain is set, then sat is launched with D-Bus activated RUN echo '#!/bin/sh\n\ chmod a+w /etc/hosts\n\ su -c "set_account_domain && dbus-launch /usr/bin/sat $@" sat\n\ '> /usr/local/bin/sat && chmod 0500 /usr/local/bin/sat # this script add aliases to /etc/hosts RUN echo '#!/usr/bin/env python2\n\ import sys, re\n\ if len(sys.argv) < 2 or len(sys.argv) > 3:\n\ sys.exit(1)\n\ host = sys.argv[1]\n\ alias = sys.argv[2] if len(sys.argv) == 3 else "localhost"\n\ if host == "localhost" or host == alias:\n\ sys.exit(0)\n\ print "Adding host {} as an alias of {}".format(host, alias)\n\ with open("/etc/hosts", "r+") as f:\n\ buf = re.sub(r"\\b{}\\b".format(alias), "{}\\t{}".format(alias, host), f.read(), 1)\n\ f.seek(0)\n\ f.write(buf)\ ' > /usr/local/bin/add_host && chmod 0555 /usr/local/bin/add_host # This script simulate prosodyctl adduser/passwd/deluser and call it on the prosody container RUN echo '#!/usr/bin/env python2\n\ import sys, xmlrpclib\n\ proxy = xmlrpclib.ServerProxy("http://prosody:9999/")\n\ def pwd():\n\ pwd1=raw_input(); pwd2=raw_input(); assert pwd1==pwd2\n\ return pwd1\n\ password = pwd() if sys.argv[1] in ["adduser", "passwd"] else ""\n\ sys.exit(proxy.prosodyctl(sys.argv[1], sys.argv[2], password))\n\ ' > /usr/local/bin/prosodyctl ######### # D-Bus # ######### # we need a TCP socket RUN sed -i "s&<listen>unix:tmpdir=/tmp</listen>&\0\n <listen>tcp:host=localhost,bind=*,port=55555,family=ipv4</listen>\n <auth>ANONYMOUS</auth>\n <allow_anonymous/>&" /etc/dbus-1/session.conf # this script will launch the command with good D-BUS parameters # it needs to be copied and made executable by frontends RUN echo '#!/bin/sh\nexport DBUS_SESSION_BUS_ADDRESS=tcp:host=sat,port=55555,family=ipv4\nexec /usr/bin/$(basename "$0") "$@"' > /usr/local/bin/dbus_wrap ########## # LAUNCH # ########## WORKDIR /home/sat ENTRYPOINT ["/bin/bash"]