From 3b0858f41e2aa68d4e40198ef2e91085b45f2fa7 Mon Sep 17 00:00:00 2001
From: Xueshan Feng <xueshan-feng@stanford.edu>
Date: Tue, 3 Mar 2020 14:31:13 -0800
Subject: [PATCH] rename /release to /artifacts; move stage build to build.sh.

---
 Dockerfile |  31 +---------
 build.sh   | 165 +++++++++++++++++++++++++++++++----------------------
 2 files changed, 100 insertions(+), 96 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 01063c5..b0a9a5f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,28 +1,5 @@
-FROM debian:buster-slim AS stage1
+FROM debian:buster-slim AS stage
 
-ARG OPENLDAP_VERSION=openldap-2.4.49
-ARG CYRUS_SASL_VERSION=cyrus-sasl-2.1.27
-ENV OPENLDAP_TARBALL ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${OPENLDAP_VERSION}.tgz
-ENV CYRUS_SASL_TARBALL https://github.com/cyrusimap/cyrus-sasl/releases/download/${CYRUS_SASL_VERSION}/${CYRUS_SASL_VERSION}.tar.gz
-
-ENV HOME /
-ENV DEBIAN_FRONTEND noninteractive
-RUN apt-get update && \
-	apt-get install -y -qq  \
-	ca-certificates \
-	coreutils \
-	file \
-	gcc \
-	groff-base \
-	libsasl2-modules-gssapi-mit \
-	libc6-dev \
-	libssl-dev \
-	libsasl2-dev \
-	libperl-dev \
-	libltdl-dev \
-	libltdl7 \
-	make \
-	wget
 ADD build.sh /
 RUN /build.sh
 
@@ -34,19 +11,17 @@ RUN apt-get update && \
 	apt-get install -y -qq  \
 	ca-certificates \
 	coreutils \
-	libldap-2.4-2 \
-	libsasl2-modules-gssapi-mit \
+	libsasl2-2 \
 	libltdl7 \
 	libtcmalloc-minimal4 \
 	openssl \
-	sasl2-bin \
     lmdb-utils \
     krb5-user \
     kstart \
     procps \
 	wget
 
-COPY --from=stage1 /release /
+COPY --from=stage /artifacts /
 RUN mkdir -p /etc/ldap/sasl2 \
 	&& echo "mech_list: GSSAPI EXTERNAL" >> /etc/ldap/sasl2/slapd.conf \
 	&& mkdir -p /var/lib/ldap/accesslog \
diff --git a/build.sh b/build.sh
index e77113d..c165703 100755
--- a/build.sh
+++ b/build.sh
@@ -1,74 +1,103 @@
-#!/bin/bash
+#!/bin/bash -e
+# Maintainer: sfeng@stanford.edu
 
-# Download
-wget ${CYRUS_SASL_TARBALL} 1> NUL 2> NUL
-tar xzvf ${CYRUS_SASL_VERSION}.tar.gz
-wget ${OPENLDAP_TARBALL} 1> NUL 2> NUL
-tar xzvf ${OPENLDAP_VERSION}.tgz
+OPENLDAP_VERSION=openldap-2.4.49
+CYRUS_SASL_VERSION=cyrus-sasl-2.1.27
+OPENLDAP_TARBALL=ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${OPENLDAP_VERSION}.tgz
+CYRUS_SASL_TARBALL=https://github.com/cyrusimap/cyrus-sasl/releases/download/${CYRUS_SASL_VERSION}/${CYRUS_SASL_VERSION}.tar.gz
+DEBIAN_FRONTEND=noninteractive
+WORKDIR=/
+ARTIFACTS=/artifacts
+
+# Download software required to build OpenLAP and Cyrus SASL
+function apt_get_install {
+    apt-get update && \
+	apt-get install -y -qq  \
+	ca-certificates \
+	coreutils \
+	file \
+	gcc \
+	groff-base \
+	libsasl2-modules-gssapi-mit \
+	libc6-dev \
+	libssl-dev \
+	libsasl2-dev \
+	libperl-dev \
+	libltdl-dev \
+	libltdl7 \
+    openssl \
+	make \
+	wget
+}
+
+# Download packages
+function download_packages {
+    wget ${CYRUS_SASL_TARBALL} 1> NUL 2> NUL
+    tar xzvf ${CYRUS_SASL_VERSION}.tar.gz
+    wget ${OPENLDAP_TARBALL} 1> NUL 2> NUL
+    tar xzvf ${OPENLDAP_VERSION}.tgz
+}
 
 # Insatall cyrus_sasl
-cd /${CYRUS_SASL_VERSION}
-sed -i'' '/maj_stat\s=\sgss_acquire_cred/{n;s/text->server_name/GSS_C_NO_NAME/}' plugins/gssapi.c
-./configure --prefix=/release/usr --sysconfdir='${prefix}/etc' --libexecdir='${prefix}/lib' \
-     CFLAGS="-Wno-cast-function-type -Wno-implicit-function-declaration" && make && make
+function install_cyrus_sasl {
+    cd ${WORKDIR}/${CYRUS_SASL_VERSION}
+    sed -i'' '/maj_stat\s=\sgss_acquire_cred/{n;s/text->server_name/GSS_C_NO_NAME/}' plugins/gssapi.c
+    ./configure --prefix=${ARTIFACTS}/usr --sysconfdir='${prefix}/etc' --libexecdir='${prefix}/lib' \
+        --with-gss_impl=mit \
+        CFLAGS="-Wno-cast-function-type -Wno-implicit-function-declaration" && make && make install
+    ln -s ${ARTIFACTS}/usr/lib/sasl2 /usr/lib/sasl2
+}
 
-mkdir /release
-# Install openldap
-cd /${OPENLDAP_VERSION}
-./configure \
-    --prefix=/release/usr \
-    --libexecdir='${prefix}/lib' \
-    --sysconfdir='${prefix}/etc' \
-    --localstatedir=/var \
-    --mandir='${prefix}/share/man' \
-    --disable-hdb \
-    --disable-bdb \
-    --enable-debug \
-    --enable-dynamic \
-    --enable-syslog \
-    --enable-proctitle \
-    --enable-local \
-    --enable-slapd \
-    --enable-dynacl \
-    --enable-aci \
-    --enable-cleartext \
-    --enable-crypt \
-    --disable-lmpasswd \
-    --enable-spasswd \
-    --enable-modules \
-    --enable-rewrite \
-    --enable-rlookups \
-    --enable-slapi \
-    --disable-slp \
-    --enable-backends=mod \
-    --disable-ndb \
-    --disable-sql \
-    --enable-overlays=mod \
-    --with-subdir=ldap \
-    --with-cyrus-sasl \
-    --with-threads \
-    --with-tls=openssl \
-    --with-odbc=unixodbc \
-      CFLAGS="-Wno-cast-function-type \
-            -Wno-implicit-function-declaration \
-            -Wno-incompatible-pointer-types \
-            -Wno-pointer-compare"
-make depend && make 
-make install
+# Install OpenLDAP
+function install_openldap {
+    cd ${WORKDIR}/${OPENLDAP_VERSION}
+    ./configure \
+        --prefix=${ARTIFACTS}/usr \
+        --libexecdir='${prefix}/lib' \
+        --sysconfdir='${prefix}/etc' \
+        --localstatedir=/var \
+        --mandir='${prefix}/share/man' \
+        --disable-hdb \
+        --disable-bdb \
+        --disable-slp \
+        --disable-ndb \
+        --disable-sql \
+        --disable-lmpasswd \
+        --enable-debug \
+        --enable-dynamic \
+        --enable-syslog \
+        --enable-proctitle \
+        --enable-local \
+        --enable-slapd \
+        --enable-dynacl \
+        --enable-aci \
+        --enable-cleartext \
+        --enable-crypt \
+        --enable-spasswd \
+        --enable-modules \
+        --enable-rewrite \
+        --enable-rlookups \
+        --enable-slapi \
+        --enable-backends=mod \
+        --enable-overlays=mod \
+        --with-subdir=ldap \
+        --with-cyrus-sasl \
+        --with-threads \
+        --with-tls=openssl \
+        LDFLAGS="-L/usr/local/lib -Wl,-rpath,/artifacts/usr/lib/sasl2" \
+        CFLAGS="-Wno-cast-function-type \
+                -Wno-implicit-function-declaration \
+                -Wno-incompatible-pointer-types \
+                -Wno-pointer-compare"
+    make depend && make 
+    make install
+}
 
-# # Copy code to /artifacts, without developent tools
-# mkdir -p /release/usr/lib/x86_64-linux-gnu \
-#         /release/usr/sbin \
-#         /release/usr/bin \
-#         /release/etc/default \
-#         /release/etc/ldap \
-#         /release/usr/lib/ldap
-# cp -av /usr/lib/x86_64-linux-gnu/libsasl2* /release/usr/lib/x86_64-linux-gnu/
-# cp -av /usr/sbin/sasl* /release/usr/sbin/
-# cp -av /etc/ldap /release/etc/ldap/
-# cp -av /etc/default/slapd /release/etc/default/
-# cp -av /usr/lib/ldap /release/usr/lib/ldap/
-# cp -av /usr/lib/*slap* /release/usr/lib/
-# cp -av /usr/sbin/slap* /release/usr/sbin/
-# cp -av /usr/bin/ldap* /release/usr/bin
+## MAIN
+mkdir -p ${ARTIFACTS}/usr ${ARTIFACTS}/lib ${ARTIFACTS}/etc ${ARTIFACTS}/usr/share/man/man1
+cd ${WORKDIR}
+apt_get_install
+download_packages
+install_cyrus_sasl
+install_openldap
 
-- 
GitLab