plone.docker/master: Refs #75 - Prepare release 4.3.15

Alin Voinea <jenkins-z4DKO/[email protected]> Tue, 01 Aug 2017 02:45:17 -0700 (PDT)
Newsgroups gmane.comp.web.zope.plone.cvs
Message-ID <[email protected]>
Repository: plone.docker
Branch: refs/heads/master
Date: 2017-08-01T12:38:40+03:00
Author: Alin Voinea (avoinea) <[email protected]>
Commit: https://github.com/plone/plone.docker/commit/4385d530b79ff8d38727145d68f17aed9a6b4c5f

Refs #75 - Prepare release 4.3.15

Files changed:
A 4.3/4.3.15/alpine/Dockerfile
A 4.3/4.3.15/alpine/docker-entrypoint.sh
A 4.3/4.3.15/alpine/docker-initialize.py
A 4.3/4.3.15/debian/Dockerfile
A 4.3/4.3.15/debian/docker-entrypoint.sh
A 4.3/4.3.15/debian/docker-initialize.py

diff --git a/4.3/4.3.15/alpine/Dockerfile b/4.3/4.3.15/alpine/Dockerfile
new file mode 100644
index 0000000..72fd6f8
--- /dev/null
+++ b/4.3/4.3.15/alpine/Dockerfile
@@ -0,0 +1,70 @@
+FROM python:2.7-alpine
+
+ENV PLONE_MAJOR=4.3 \
+    PLONE_VERSION=4.3.14 \
+    PLONE_MD5=e10c55a870735b90e7a82c2f2a39d123
+
+LABEL plone=$PLONE_VERSION \
+    os="alpine" \
+    os.version="3.4" \
+    name="Plone 4" \
+    description="Plone image, based on Unified Installer" \
+    maintainer="Plone Community"
+
+RUN addgroup -g 500 plone \
+ && adduser -S -D -G plone -u 500 -h /plone plone \
+ && mkdir -p /data/filestorage /data/blobstorage \
+ && chown -R plone:plone /data \
+ && apk add --no-cache --virtual .build-deps \
+    curl \
+    bzip2-dev \
+    gcc \
+    libc-dev \
+    ncurses-dev \
+    openssl-dev \
+    readline-dev \
+    zlib-dev \
+    sudo \
+    make \
+    libxml2-dev \
+    libxslt-dev \
+    libjpeg-turbo-dev \
+    libpng-dev openssl \
+ && curl -SL -o Plone.tgz https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \
+ && tar -zxvf Plone.tgz \
+ && curl -SL -o /Plone-$PLONE_VERSION-UnifiedInstaller/helper_scripts/user_group_utilities.sh https://raw.githubusercontent.com/plone/Installers-UnifiedInstaller/master/helper_scripts/user_group_utilities.sh \
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \
+      --password=admin \
+      --daemon-user=plone \
+      --owner=plone \
+      --group=plone \
+      --target=/plone \
+      --instance=instance \
+      --var=/data \
+      none \
+ && cd /plone/instance \
+ && sed -i 's/parts =/parts =\n    zeoserver/g' buildout.cfg \
+ && echo -e '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \
+ && sudo -u plone LIBRARY_PATH=/lib:/usr/lib bin/buildout \
+ && chown -R plone:plone /plone /data \
+ && apk del .build-deps \
+ && apk add --no-cache --virtual .run-deps \
+    bash \
+    libxml2 \
+    libxslt \
+    libjpeg-turbo \
+    rsync \
+ && rm -rf /Plone* \
+ && rm -rf /plone/buildout-cache/downloads/* \
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' +
+
+VOLUME /data
+
+COPY docker-initialize.py docker-entrypoint.sh /
+
+EXPOSE 8080
+USER plone
+WORKDIR /plone/instance
+
+ENTRYPOINT ["/docker-entrypoint.sh"]
+CMD ["start"]
diff --git a/4.3/4.3.15/alpine/docker-entrypoint.sh b/4.3/4.3.15/alpine/docker-entrypoint.sh
new file mode 100755
index 0000000..72bd07c
--- /dev/null
+++ b/4.3/4.3.15/alpine/docker-entrypoint.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+set -e
+
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status"
+START="start restart zeoserver"
+CMD="bin/instance"
+
+python /docker-initialize.py
+
+if [ -e "custom.cfg" ]; then
+  if [ ! -e "bin/develop" ]; then
+    bin/buildout -c custom.cfg
+    python /docker-initialize.py
+  fi
+fi
+
+if [[ "$1" == "zeo"* ]]; then
+  CMD="bin/zeoserver"
+fi
+
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then
+  HEALTH_CHECK_TIMEOUT=1
+fi
+
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then
+  HEALTH_CHECK_INTERVAL=1
+fi
+
+if [[ $START == *"$1"* ]]; then
+  _stop() {
+    $CMD stop
+    kill -TERM $child 2>/dev/null
+  }
+
+  trap _stop SIGTERM SIGINT
+  $CMD start
+  $CMD logtail &
+  child=$!
+
+  pid=`$CMD status | sed 's/[^0-9]*//g'`
+  if [ ! -z "$pid" ]; then
+    echo "Application running on pid=$pid"
+    sleep "$HEALTH_CHECK_TIMEOUT"
+    while kill -0 "$pid" 2> /dev/null; do
+      sleep "$HEALTH_CHECK_INTERVAL"
+    done
+  else
+    echo "Application didn't start normally. Shutting down!"
+    _stop
+  fi
+else
+  if [[ $COMMANDS == *"$1"* ]]; then
+    exec bin/instance "$@"
+  fi
+  exec "$@"
+fi
diff --git a/4.3/4.3.15/alpine/docker-initialize.py b/4.3/4.3.15/alpine/docker-initialize.py
new file mode 100755
index 0000000..087bde9
--- /dev/null
+++ b/4.3/4.3.15/alpine/docker-initialize.py
@@ -0,0 +1,178 @@
+#!/plone/instance/bin/python
+
+import re
+import os
+import warnings
+warnings.simplefilter('always', DeprecationWarning)
+
+class Environment(object):
+    """ Configure container via environment variables
+    """
+    def __init__(self, env=os.environ,
+                 zope_conf="/plone/instance/parts/instance/etc/zope.conf",
+                 custom_conf="/plone/instance/custom.cfg",
+                 zeopack_conf="/plone/instance/bin/zeopack",
+                 zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf"
+                 ):
+        self.env = env
+        self.zope_conf = zope_conf
+        self.custom_conf = custom_conf
+        self.zeopack_conf = zeopack_conf
+        self.zeoserver_conf = zeoserver_conf
+
+    def zeoclient(self):
+        """ ZEO Client
+        """
+        server = self.env.get("ZEO_ADDRESS", None)
+        if not server:
+            return
+
+        config = ""
+        with open(self.zope_conf, "r") as cfile:
+            config = cfile.read()
+
+        # Already initialized
+        if "<blobstorage>" not in config:
+            return
+
+        read_only = self.env.get("ZEO_READ_ONLY", "false")
+        zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false")
+        shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off")
+        zeo_storage=self.env.get("ZEO_STORAGE", "1")
+        zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB")
+        zeo_conf = ZEO_TEMPLATE.format(
+            zeo_address=server,
+            read_only=read_only,
+            zeo_client_read_only_fallback=zeo_ro_fallback,
+            shared_blob_dir=shared_blob_dir,
+            zeo_storage=zeo_storage,
+            zeo_client_cache_size=zeo_client_cache_size
+        )
+
+        pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL)
+        config = re.sub(pattern, zeo_conf, config)
+
+        with open(self.zope_conf, "w") as cfile:
+            cfile.write(config)
+
+    def zeopack(self):
+        """ ZEO Pack
+        """
+        server = self.env.get("ZEO_ADDRESS", None)
+        if not server:
+            return
+
+        if ":" in server:
+            host, port = server.split(":")
+        else:
+            host, port = (server, "8100")
+
+        with open(self.zeopack_conf, 'r') as cfile:
+            text = cfile.read()
+            text = text.replace('address = "8100"', 'address = "%s"' % server)
+            text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host)
+            text = text.replace('port = "8100"', 'port = "%s"' % port)
+
+        with open(self.zeopack_conf, 'w') as cfile:
+            cfile.write(text)
+
+    def zeoserver(self):
+        """ ZEO Server
+        """
+        pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '')
+        if pack_keep_old.lower() in ("false", "no", "0", "n", "f"):
+            with open(self.zeoserver_conf, 'r') as cfile:
+                text = cfile.read()
+                if 'pack-keep-old' not in text:
+                    text = text.replace(
+                        '</filestorage>',
+                        '  pack-keep-old false\n</filestorage>'
+                    )
+
+            with open(self.zeoserver_conf, 'w') as cfile:
+                cfile.write(text)
+
+    def buildout(self):
+        """ Buildout from environment variables
+        """
+        # Already configured
+        if os.path.exists(self.custom_conf):
+            return
+
+        eggs = self.env.get("PLONE_ADDONS",
+               self.env.get("ADDONS", "")).strip().split()
+        if not eggs:
+            eggs = self.env.get("BUILDOUT_EGGS", "").strip().split()
+            if eggs:
+                warnings.warn(
+                    "BUILDOUT_EGGS is deprecated. Please use "
+                    "PLONE_ADDONS instead !!!", DeprecationWarning)
+
+        zcml = self.env.get("PLONE_ZCML",
+               self.env.get("ZCML", "")).strip().split()
+        if not zcml:
+            zcml = self.env.get("BUILDOUT_ZCML", "").strip().split()
+            if zcml:
+                warnings.warn(
+                    "BUILDOUT_ZCML is deprecated. Please use "
+                    "PLONE_ZCML instead !!!", DeprecationWarning)
+
+        develop = self.env.get("PLONE_DEVELOP",
+                  self.env.get("DEVELOP", "")).strip().split()
+        if not develop:
+            develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split()
+            if develop:
+                warnings.warn(
+                    "BUILDOUT_DEVELOP is deprecated. Please use "
+                    "PLONE_DEVELOP instead !!!", DeprecationWarning)
+
+        if not (eggs or zcml or develop):
+            return
+
+        buildout = BUILDOUT_TEMPLATE.format(
+            eggs="\n\t".join(eggs),
+            zcml="\n\t".join(zcml),
+            develop="\n\t".join(develop)
+        )
+
+        with open(self.custom_conf, 'w') as cfile:
+            cfile.write(buildout)
+
+    def setup(self, **kwargs):
+        self.buildout()
+        self.zeoclient()
+        self.zeopack()
+        self.zeoserver()
+
+    __call__ = setup
+
+ZEO_TEMPLATE = """
+    <zeoclient>
+      read-only {read_only}
+      read-only-fallback {zeo_client_read_only_fallback}
+      blob-dir /data/blobstorage
+      shared-blob-dir {shared_blob_dir}
+      server {zeo_address}
+      storage {zeo_storage}
+      name zeostorage
+      var /plone/instance/parts/instance/var
+      cache-size {zeo_client_cache_size}
+    </zeoclient>
+""".strip()
+
+BUILDOUT_TEMPLATE = """
+[buildout]
+extends = develop.cfg
+develop += {develop}
+eggs += {eggs}
+zcml += {zcml}
+"""
+
+def initialize():
+    """ Configure Plone instance as ZEO Client
+    """
+    environment = Environment()
+    environment.setup()
+
+if __name__ == "__main__":
+    initialize()
diff --git a/4.3/4.3.15/debian/Dockerfile b/4.3/4.3.15/debian/Dockerfile
new file mode 100644
index 0000000..293034f
--- /dev/null
+++ b/4.3/4.3.15/debian/Dockerfile
@@ -0,0 +1,55 @@
+FROM python:2.7-slim
+
+ENV PLONE_MAJOR=4.3 \
+    PLONE_VERSION=4.3.14 \
+    PLONE_MD5=e10c55a870735b90e7a82c2f2a39d123
+
+LABEL plone=$PLONE_VERSION \
+    os="debian" \
+    os.version="8" \
+    name="Plone 4" \
+    description="Plone image, based on Unified Installer" \
+    maintainer="Plone Community"
+
+RUN useradd --system -m -d /plone -U -u 500 plone \
+ && mkdir -p /data/filestorage /data/blobstorage \
+ && chown -R plone:plone /data \
+ && buildDeps="wget sudo python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-turbo-dev libtiff5-dev libopenjp2-7-dev" \
+ && runDeps="libxml2 libxslt1.1 libjpeg62 rsync lynx wv libtiff5 libopenjp2-7 poppler-utils" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends $buildDeps \
+ && wget -O Plone.tgz https://launchpad.net/plone/$PLONE_MAJOR/$PLONE_VERSION/+download/Plone-$PLONE_VERSION-UnifiedInstaller.tgz \
+ && echo "$PLONE_MD5 Plone.tgz" | md5sum -c - \
+ && tar -xzf Plone.tgz \
+ && ./Plone-$PLONE_VERSION-UnifiedInstaller/install.sh \
+      --password=admin \
+      --daemon-user=plone \
+      --owner=plone \
+      --group=plone \
+      --target=/plone \
+      --instance=instance \
+      --var=/data \
+      none \
+ && cd /plone/instance \
+ && sed -i 's/parts =/parts =\n    zeoserver/g' buildout.cfg \
+ && echo '\n[zeoserver]\n<= zeoserver_base\nrecipe = plone.recipe.zeoserver' >> buildout.cfg \
+ && sudo -u plone bin/buildout \
+ && chown -R plone:plone /plone /data \
+ && rm -rf /Plone* \
+ && SUDO_FORCE_REMOVE=yes apt-get remove --purge -y $buildDeps \
+ && apt-get install -y --no-install-recommends $runDeps \
+ && rm -rf /var/lib/apt/lists/* \
+ && rm -rf /plone/buildout-cache/downloads/* \
+ && rm -rf /plone/Plone-docs \
+ && find /plone \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' +
+
+VOLUME /data
+
+COPY docker-initialize.py docker-entrypoint.sh /
+
+EXPOSE 8080
+USER plone
+WORKDIR /plone/instance
+
+ENTRYPOINT ["/docker-entrypoint.sh"]
+CMD ["start"]
diff --git a/4.3/4.3.15/debian/docker-entrypoint.sh b/4.3/4.3.15/debian/docker-entrypoint.sh
new file mode 100755
index 0000000..72bd07c
--- /dev/null
+++ b/4.3/4.3.15/debian/docker-entrypoint.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+set -e
+
+COMMANDS="debug help logtail show stop adduser fg kill quit run wait console foreground logreopen reload shell status"
+START="start restart zeoserver"
+CMD="bin/instance"
+
+python /docker-initialize.py
+
+if [ -e "custom.cfg" ]; then
+  if [ ! -e "bin/develop" ]; then
+    bin/buildout -c custom.cfg
+    python /docker-initialize.py
+  fi
+fi
+
+if [[ "$1" == "zeo"* ]]; then
+  CMD="bin/zeoserver"
+fi
+
+if [ -z "$HEALTH_CHECK_TIMEOUT" ]; then
+  HEALTH_CHECK_TIMEOUT=1
+fi
+
+if [ -z "$HEALTH_CHECK_INTERVAL" ]; then
+  HEALTH_CHECK_INTERVAL=1
+fi
+
+if [[ $START == *"$1"* ]]; then
+  _stop() {
+    $CMD stop
+    kill -TERM $child 2>/dev/null
+  }
+
+  trap _stop SIGTERM SIGINT
+  $CMD start
+  $CMD logtail &
+  child=$!
+
+  pid=`$CMD status | sed 's/[^0-9]*//g'`
+  if [ ! -z "$pid" ]; then
+    echo "Application running on pid=$pid"
+    sleep "$HEALTH_CHECK_TIMEOUT"
+    while kill -0 "$pid" 2> /dev/null; do
+      sleep "$HEALTH_CHECK_INTERVAL"
+    done
+  else
+    echo "Application didn't start normally. Shutting down!"
+    _stop
+  fi
+else
+  if [[ $COMMANDS == *"$1"* ]]; then
+    exec bin/instance "$@"
+  fi
+  exec "$@"
+fi
diff --git a/4.3/4.3.15/debian/docker-initialize.py b/4.3/4.3.15/debian/docker-initialize.py
new file mode 100755
index 0000000..087bde9
--- /dev/null
+++ b/4.3/4.3.15/debian/docker-initialize.py
@@ -0,0 +1,178 @@
+#!/plone/instance/bin/python
+
+import re
+import os
+import warnings
+warnings.simplefilter('always', DeprecationWarning)
+
+class Environment(object):
+    """ Configure container via environment variables
+    """
+    def __init__(self, env=os.environ,
+                 zope_conf="/plone/instance/parts/instance/etc/zope.conf",
+                 custom_conf="/plone/instance/custom.cfg",
+                 zeopack_conf="/plone/instance/bin/zeopack",
+                 zeoserver_conf="/plone/instance/parts/zeoserver/etc/zeo.conf"
+                 ):
+        self.env = env
+        self.zope_conf = zope_conf
+        self.custom_conf = custom_conf
+        self.zeopack_conf = zeopack_conf
+        self.zeoserver_conf = zeoserver_conf
+
+    def zeoclient(self):
+        """ ZEO Client
+        """
+        server = self.env.get("ZEO_ADDRESS", None)
+        if not server:
+            return
+
+        config = ""
+        with open(self.zope_conf, "r") as cfile:
+            config = cfile.read()
+
+        # Already initialized
+        if "<blobstorage>" not in config:
+            return
+
+        read_only = self.env.get("ZEO_READ_ONLY", "false")
+        zeo_ro_fallback = self.env.get("ZEO_CLIENT_READ_ONLY_FALLBACK", "false")
+        shared_blob_dir=self.env.get("ZEO_SHARED_BLOB_DIR", "off")
+        zeo_storage=self.env.get("ZEO_STORAGE", "1")
+        zeo_client_cache_size=self.env.get("ZEO_CLIENT_CACHE_SIZE", "128MB")
+        zeo_conf = ZEO_TEMPLATE.format(
+            zeo_address=server,
+            read_only=read_only,
+            zeo_client_read_only_fallback=zeo_ro_fallback,
+            shared_blob_dir=shared_blob_dir,
+            zeo_storage=zeo_storage,
+            zeo_client_cache_size=zeo_client_cache_size
+        )
+
+        pattern = re.compile(r"<blobstorage>.+</blobstorage>", re.DOTALL)
+        config = re.sub(pattern, zeo_conf, config)
+
+        with open(self.zope_conf, "w") as cfile:
+            cfile.write(config)
+
+    def zeopack(self):
+        """ ZEO Pack
+        """
+        server = self.env.get("ZEO_ADDRESS", None)
+        if not server:
+            return
+
+        if ":" in server:
+            host, port = server.split(":")
+        else:
+            host, port = (server, "8100")
+
+        with open(self.zeopack_conf, 'r') as cfile:
+            text = cfile.read()
+            text = text.replace('address = "8100"', 'address = "%s"' % server)
+            text = text.replace('host = "127.0.0.1"', 'host = "%s"' % host)
+            text = text.replace('port = "8100"', 'port = "%s"' % port)
+
+        with open(self.zeopack_conf, 'w') as cfile:
+            cfile.write(text)
+
+    def zeoserver(self):
+        """ ZEO Server
+        """
+        pack_keep_old = self.env.get("ZEO_PACK_KEEP_OLD", '')
+        if pack_keep_old.lower() in ("false", "no", "0", "n", "f"):
+            with open(self.zeoserver_conf, 'r') as cfile:
+                text = cfile.read()
+                if 'pack-keep-old' not in text:
+                    text = text.replace(
+                        '</filestorage>',
+                        '  pack-keep-old false\n</filestorage>'
+                    )
+
+            with open(self.zeoserver_conf, 'w') as cfile:
+                cfile.write(text)
+
+    def buildout(self):
+        """ Buildout from environment variables
+        """
+        # Already configured
+        if os.path.exists(self.custom_conf):
+            return
+
+        eggs = self.env.get("PLONE_ADDONS",
+               self.env.get("ADDONS", "")).strip().split()
+        if not eggs:
+            eggs = self.env.get("BUILDOUT_EGGS", "").strip().split()
+            if eggs:
+                warnings.warn(
+                    "BUILDOUT_EGGS is deprecated. Please use "
+                    "PLONE_ADDONS instead !!!", DeprecationWarning)
+
+        zcml = self.env.get("PLONE_ZCML",
+               self.env.get("ZCML", "")).strip().split()
+        if not zcml:
+            zcml = self.env.get("BUILDOUT_ZCML", "").strip().split()
+            if zcml:
+                warnings.warn(
+                    "BUILDOUT_ZCML is deprecated. Please use "
+                    "PLONE_ZCML instead !!!", DeprecationWarning)
+
+        develop = self.env.get("PLONE_DEVELOP",
+                  self.env.get("DEVELOP", "")).strip().split()
+        if not develop:
+            develop = self.env.get("BUILDOUT_DEVELOP", "").strip().split()
+            if develop:
+                warnings.warn(
+                    "BUILDOUT_DEVELOP is deprecated. Please use "
+                    "PLONE_DEVELOP instead !!!", DeprecationWarning)
+
+        if not (eggs or zcml or develop):
+            return
+
+        buildout = BUILDOUT_TEMPLATE.format(
+            eggs="\n\t".join(eggs),
+            zcml="\n\t".join(zcml),
+            develop="\n\t".join(develop)
+        )
+
+        with open(self.custom_conf, 'w') as cfile:
+            cfile.write(buildout)
+
+    def setup(self, **kwargs):
+        self.buildout()
+        self.zeoclient()
+        self.zeopack()
+        self.zeoserver()
+
+    __call__ = setup
+
+ZEO_TEMPLATE = """
+    <zeoclient>
+      read-only {read_only}
+      read-only-fallback {zeo_client_read_only_fallback}
+      blob-dir /data/blobstorage
+      shared-blob-dir {shared_blob_dir}
+      server {zeo_address}
+      storage {zeo_storage}
+      name zeostorage
+      var /plone/instance/parts/instance/var
+      cache-size {zeo_client_cache_size}
+    </zeoclient>
+""".strip()
+
+BUILDOUT_TEMPLATE = """
+[buildout]
+extends = develop.cfg
+develop += {develop}
+eggs += {eggs}
+zcml += {zcml}
+"""
+
+def initialize():
+    """ Configure Plone instance as ZEO Client
+    """
+    environment = Environment()
+    environment.setup()
+
+if __name__ == "__main__":
+    initialize()



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot