X-Git-Url: https://code.citadel.org/?p=citadel-docker.git;a=blobdiff_plain;f=Dockerfile;h=38711f29ad96a0dfc17e8e79f7c9641af124a295;hp=71bb53660eb225dfd37c6e314486d0f821f7ff94;hb=HEAD;hpb=2bb55e4ad7fe19905142babb26f5dc76ae06354f diff --git a/Dockerfile b/Dockerfile index 71bb536..a726bcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,41 +1,119 @@ -FROM bitnami/minideb:latest +# Dockerfile for Citadel +# +# Copyright (c) 2019-2023 by the citadel.org team +# +# This program is open source software. Use, duplication, or disclosure +# is subject to the terms of the GNU General Public License, version 3. +# This script implements a two stage build. In the first stage we load in a full set of +# development tools and build all of the components, including a version of Berkeley DB newer than +# the one supplied in the repo. Everything in /usr/local is copied into the second stage, which +# is built with only runtime libraries to keep the image small. + +#################################################################################################### + +# Debian Slim has all of the architectures we build on (amd64, i386, arm32) +# The first stage build will bring in all of our development tools. +FROM debian:bullseye-slim AS build-stage + +# All long term persistent data goes here. Any volume driver may be used. VOLUME /citadel-data # Install prerequisites -RUN install_packages make build-essential zlib1g-dev libldap2-dev libssl-dev gettext libical-dev libexpat1-dev curl libcurl4-openssl-dev git autoconf automake netbase supervisor +RUN apt -y update +RUN apt -y install gcc bison make zlib1g-dev libldap2-dev libssl-dev gettext libical-dev libexpat1-dev curl libcurl4-openssl-dev git autoconf automake netbase libreadline-dev + +# Build our own local copy of Berkeley DB, because the one included with the system libs is too old. +# We will install it to /usr/local and carry it over to the second stage build. +# build and install Berkeley DB +RUN sh -c 'mkdir /tmp/db_build' +RUN sh -c 'cd /tmp/db_build && curl -k https://easyinstall.citadel.org/db-18.1.40.tar.gz | tar xvzf -' +RUN sh -c '\ + cd /tmp/db_build/db-18.1.40/build_unix && \ + ../dist/configure --prefix=/usr/local \ + --with-cryptography=no --disable-hash --disable-heap --disable-queue \ + --disable-replication --disable-statistics \ + --with-uniquename=_ctdl \ + --enable-static --disable-shared \ + --disable-compat185 --disable-cxx --disable-debug \ + --disable-dump185 --disable-java --disable-tcl --disable-test --without-rpm' +RUN sh -c 'cd /tmp/db_build/db-18.1.40/build_unix && make -j`cat /proc/cpuinfo | grep processor | wc -l`' +RUN sh -c 'cd /tmp/db_build/db-18.1.40/build_unix && make install_lib' +RUN sh -c 'cd /tmp/db_build/db-18.1.40/build_unix && make install_include' +RUN sh -c 'cd /tmp/db_build/db-18.1.40/build_unix && make install_utilities' +RUN sh -c 'rm -fr /tmp/db_build' + +# Create our build directory +RUN mkdir /tmp/ctdl_build + +# Deploy "ctdlvisor", a small supervisor program which runs inside the container to wrangle the various services +ADD ctdlvisor.c /tmp +RUN sh -c '\ + cd /tmp && \ + cc ctdlvisor.c -o /usr/local/bin/ctdlvisor && \ + rm -vf /tmp/ctdlvisor.c' + +# Download the latest Citadel code +RUN curl https://easyinstall.citadel.org/libcitadel-easyinstall.tar.gz | tar xvzf - +RUN curl https://easyinstall.citadel.org/citadel-easyinstall.tar.gz | tar xvzf - +RUN curl https://easyinstall.citadel.org/webcit-easyinstall.tar.gz | tar xvzf - +RUN curl https://easyinstall.citadel.org/textclient-easyinstall.tar.gz | tar xvzf - + +# Build libcitadel +RUN sh -c '\ + cd libcitadel && \ + ./configure --prefix=/usr/local && \ + make && \ + make install' + +# Build the Citadel Server +RUN sh -c '\ + export CFLAGS=-I/usr/local/include && \ + export LDFLAGS=-L/usr/local/lib && \ + cd citadel && \ + ./configure && \ + make && \ + make install' -# Download and build libsieve -RUN sh -c '( curl http://easyinstall.citadel.org/libsieve-2.2.7-ctdl2.tar.gz | tar xvzf - ) && cd libsieve-2.2.7/src && ./configure --prefix=/usr && make && make install' +# Build the WebCit front end +RUN sh -c '\ + export CFLAGS=-I/usr/local/include && \ + export LDFLAGS=-L/usr/local/lib && \ + cd webcit && \ + ./configure && \ + make && \ + make install' -# Download and build Citadel -WORKDIR /tmp/ctdl_build -RUN sh -c 'git clone git://git.citadel.org/appl/gitroot/citadel.git' -RUN sh -c 'cd /tmp/ctdl_build/citadel/libcitadel && ./bootstrap && ./configure --prefix=/usr && make && make install' -RUN sh -c 'cd /tmp/ctdl_build/citadel/citadel && ./bootstrap && ./configure && make && make install' -RUN sh -c 'cd /tmp/ctdl_build/citadel/webcit && ./bootstrap && ./configure && make && make install' -RUN sh -c 'cd /tmp/ctdl_build/citadel/textclient && ./bootstrap && ./configure --prefix=/usr && make && make install' -RUN sh -c 'cd / && rm -vfr /tmp/ctdl_build' -RUN sh -c 'rm -vrf /usr/local/citadel/data /usr/local/citadel/files /usr/local/citadel/keys /usr/local/webcit/keys' +# Build the text mode client +RUN sh -c '\ + export CFLAGS=-I/usr/local/include && \ + export LDFLAGS=-L/usr/local/lib && \ + cd textclient && \ + ./configure --prefix=/usr/local --ctdldir=/citadel_data && \ + make && \ + cp citadel /usr/local/bin && \ + cp citadel.rc /usr/local/etc && \ + rm -vrf /usr/local/citadel/data /usr/local/citadel/files /usr/local/citadel/keys /usr/local/webcit/keys' -# Supervisor -ADD supervisor.conf /etc/ -ADD citadel-docker-startup.sh /usr/local/bin/ +#################################################################################################### + +# Second stage build only needs runtime libraries. +FROM debian:bullseye-slim AS final-stage + +# All long term persistent data goes here. Any volume driver may be used. +VOLUME /citadel-data + +# Install prerequisites +RUN apt -y update +RUN apt -y install zlib1g libical3 libexpat1 curl libcurl4 netbase libreadline8 libldap-2.4-2 libssl1.1 + +# Bring in Citadel and libraries +COPY --from=build-stage /usr/local/ /usr/local/ +RUN ldconfig -v # Ports -EXPOSE 25/tcp -EXPOSE 80/tcp -EXPOSE 110/tcp -EXPOSE 119/tcp -EXPOSE 143/tcp -EXPOSE 443/tcp -EXPOSE 465/tcp -EXPOSE 504/tcp -EXPOSE 563/tcp -EXPOSE 587/tcp -EXPOSE 993/tcp -EXPOSE 995/tcp -EXPOSE 2020/tcp -EXPOSE 5222/tcp - -CMD /usr/local/bin/citadel-docker-startup.sh +EXPOSE 25 80 110 119 143 443 465 504 563 587 993 995 5222 + +# Let's go! +ENTRYPOINT ["/usr/local/bin/ctdlvisor"] +