Torben Nehmer
d3ed55ffb6
Successfully builds the container, places the files, scripts and links we need so fart into the right places using a rootfs tar file so that we don't pollute the container unneccessarily and keep the Dockerfile simple. Any in-container scripting is missing so far, so the whole thing does not yet start up successfully or popluate the config share in any way. That is for another day.
149 lines
4.8 KiB
Bash
Executable File
149 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -ex
|
|
|
|
# Configuration options you usually edit go here
|
|
ROUNDCUBEMAIL_VERSION=1.3.7
|
|
CHECK_GPG=false
|
|
CLEAN_INTERMEDIATES=false
|
|
CONTAINER_VOLUME_CONFIG=/var/roundcube/config
|
|
CONTAINER_WEBROOT=/var/www/html
|
|
CONTAINER_PHP_CONFD=/usr/local/etc/php/conf.d/
|
|
CONTAINER_SCRIPTS=/usr/local/sbin
|
|
|
|
# This is internal stuff used to build everything
|
|
# Be aware, that several of these paths are used with rm -rf!
|
|
SRCDIR=$(pwd)/src
|
|
TMPDIR=$(pwd)/tmp
|
|
BUILDDIR=$(pwd)/build
|
|
SCRIPTS_SRC=${SRCDIR}/scripts
|
|
ROUNDCUBE_DOWNLOAD=${TMPDIR}/roundcubemail.tar.gz
|
|
ROUNDCUBE_ASC_DOWNLOAD=${ROUDCUBE_DOWNLOAD}.asc
|
|
ROUNDCUBE_SRC=${TMPDIR}/roundcubemail
|
|
ISPCONFIG_DOWNLOAD=${TMPDIR}/ispconfig3_roundcube.zip
|
|
ISPCONFIG_SRC=${TMPDIR}/ispconfig3_roundcube
|
|
ROOTFSTREE=${TMPDIR}/tree
|
|
ROOTFSFILE=${BUILDDIR}/rootfs.tar.gz
|
|
CONFIG_DST=${ROOTFSTREE}${CONTAINER_VOLUME_CONFIG}
|
|
WEBROOT_DST=${ROOTFSTREE}${CONTAINER_WEBROOT}
|
|
PHP_CONFD_DST=${ROOTFSTREE}${CONTAINER_PHP_CONFD}
|
|
SCRIPTS_DST=${ROOTFSTREE}${CONTAINER_SCRIPTS}
|
|
|
|
#### Sanitize Build Enviornment
|
|
if [ -d ${TMPDIR} ]; then
|
|
rm -rf ${TMPDIR}
|
|
fi
|
|
mkdir ${TMPDIR}
|
|
|
|
if [ -d ${BUILDDIR} ]; then
|
|
rm -rf ${BUILDDIR}
|
|
fi
|
|
mkdir ${BUILDDIR}
|
|
|
|
#### Prepare the roundcube source
|
|
|
|
# Download Roundcube and verify GPG if configured to do so:
|
|
if [ -f ${ROUNDCUBE_DOWNLOAD} ]; then
|
|
rm -f ${ROUNDCUBE_DOWNLOAD}
|
|
fi
|
|
|
|
curl -o ${ROUNDCUBE_DOWNLOAD} \
|
|
-SL https://github.com/roundcube/roundcubemail/releases/download/${ROUNDCUBEMAIL_VERSION}/roundcubemail-${ROUNDCUBEMAIL_VERSION}-complete.tar.gz
|
|
|
|
if [ "$CHECK_GPG" = true ]; then
|
|
export GNUPGHOME="$(mktemp -d)"
|
|
|
|
if [ -f ${ROUNDCUBE_ASC_DOWNLOAD} ]; then
|
|
rm -f ${ROUNDCUBE_ASC_DOWNLOAD}
|
|
fi
|
|
curl -o ${ROUNDCUBE_ASC_DOWNLOAD} \
|
|
-SL https://github.com/roundcube/roundcubemail/releases/download/${ROUNDCUBEMAIL_VERSION}/roundcubemail-${ROUNDCUBEMAIL_VERSION}-complete.tar.gz.asc
|
|
|
|
# ha.pool.sks-keyservers.net seems to be unreliable, use pgp.mit.edu as fallback
|
|
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys F3E4C04BB3DB5D4215C45F7F5AB2BAA141C4F7D5 \
|
|
|| gpg --keyserver pgp.mit.edu --recv-keys F3E4C04BB3DB5D4215C45F7F5AB2BAA141C4F7D5
|
|
|
|
gpg --batch --verify ${ROUNDCUBE_ASC_DOWNLOAD} ${ROUNDCUBE_DOWNLOAD}
|
|
|
|
# Clean up behind us
|
|
if [ "$CLEAN_INTERMEDIATES" = true ]; then
|
|
gpgconf --kill all
|
|
rm -rf "$GNUPGHOME" ${ROUNDCUBE_ASC_DOWNLOAD}
|
|
fi
|
|
fi
|
|
|
|
# Extract the file into a temporary location and clean up behind us
|
|
tar -xzf ${ROUNDCUBE_DOWNLOAD} -C ${TMPDIR}
|
|
|
|
# upstream tarballs include ./roundcubemail-${ROUNDCUBEMAIL_VERSION}/ so this gives us TMPDIR/roundcubemail-${ROUNDCUBEMAIL_VERSION}
|
|
mv ${TMPDIR}/roundcubemail-${ROUNDCUBEMAIL_VERSION} ${ROUNDCUBE_SRC}
|
|
|
|
# Clean up the source tree for later use
|
|
rm -rf ${ROUNDCUBE_SRC}/installer
|
|
|
|
# Clean up behind us
|
|
if [ "$CLEAN_INTERMEDIATES" = true ]; then
|
|
rm -f ${ROUNDCUBE_DOWNLOAD}
|
|
fi
|
|
|
|
|
|
#### Prepare the ISPConfig Stuff
|
|
|
|
if [ -f ${ISPCONFIG_DOWNLOAD} ]; then
|
|
rm -f ${ISPCONFIG_DOWNLOAD}
|
|
fi
|
|
curl -o ${ISPCONFIG_DOWNLOAD} -SL https://github.com/w2c/ispconfig3_roundcube/archive/master.zip
|
|
|
|
unzip -q ${ISPCONFIG_DOWNLOAD} -d ${TMPDIR}
|
|
# This gives us a dir ispconfig3_roundcube-master, which we normalize
|
|
mv ${TMPDIR}/ispconfig3_roundcube-master ${ISPCONFIG_SRC}
|
|
|
|
# Clean up the source tree for later use
|
|
rm -f ${ISPCONFIG_SRC}/.gitignore ${ISPCONFIG_SRC}/README.md
|
|
|
|
#### Create the ROOT FS TREE
|
|
|
|
mkdir -p ${ROOTFSTREE}
|
|
|
|
# Prepare the Webroot directory with the source tree, then create some links, which we'll
|
|
# need during runtime, they will be created by our entry point script.
|
|
mkdir -p ${WEBROOT_DST}
|
|
tar -c --one-file-system -C ${ROUNDCUBE_SRC} . | tar -x -C ${WEBROOT_DST}
|
|
ln -s ${CONTAINER_VOLUME_CONFIG}/config.inc.php ${WEBROOT_DST}/config/config.inc.php
|
|
cp ${SRCDIR}/db.inc.php ${WEBROOT_DST}/config/db.inc.php
|
|
|
|
# Setup PHP
|
|
mkdir -p ${PHP_CONFD_DST}
|
|
cp ${SRCDIR}/php.ini ${PHP_CONFD_DST}/php.ini
|
|
|
|
# Move the ISPConfig Plugins into place, again create some links which we'll need during
|
|
# runtime. These too will be created by our entry point script
|
|
tar -c --one-file-system -C ${ISPCONFIG_SRC} . | tar -x -C ${WEBROOT_DST}/plugins
|
|
ln -s ${CONTAINER_VOLUME_CONFIG}/ispconfig3_account.inc.php ${WEBROOT_DST}/plugins/ispconfig3_account/config/config.inc.php
|
|
|
|
# Add Entry Point
|
|
cp -a ${SRCDIR}/docker-entrypoint.sh ${ROOTFSTREE}
|
|
|
|
# Add all helper scripts
|
|
mkdir -p ${SCRIPTS_DST}
|
|
|
|
curl -o ${SCRIPTS_DST}/wait-for-it.sh \
|
|
-SL https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh
|
|
chmod +x ${SCRIPTS_DST}/wait-for-it.sh
|
|
|
|
cp -a ${SCRIPTS_SRC}/* ${SCRIPTS_DST}
|
|
|
|
# Clean up behind us
|
|
if [ "$CLEAN_INTERMEDIATES" = true ]; then
|
|
rm -rf ${ROUNDCUBE_SRC}
|
|
rm -rf ${ISPCONFIG_SRC}
|
|
fi
|
|
|
|
#### Now we tar everything together, so that the Dockerfile can put everything in place in one run
|
|
tar -czf ${ROOTFSFILE} -C ${ROOTFSTREE} .
|
|
|
|
# Clean up behind us
|
|
if [ "$CLEAN_INTERMEDIATES" = true ]; then
|
|
rm -rf ${ROOTFSTREE}
|
|
fi
|