$ ./dockerbuild build-centos7
```
+to build the server, and
+
+```bash
+$ ./dockerbuild -j build-centos7
+```
+
+to build the jenkins image.
+
### Running
The ``docker run`` command is used to create new containers from
-FROM freeradius/centos6-deps
+ARG from=freeradius/centos6-deps
ARG cc=gcc
+FROM ${from}
+
WORKDIR /usr/local/src/repositories/freeradius-server
RUN CC=${cc} ./configure --prefix=/opt/freeradius
RUN make -j2
RUN make
WORKDIR /
-FROM freeradius/centos6-deps
+FROM ${from}
COPY --from=0 /opt/freeradius /opt/freeradius
EXPOSE 1812/udp 1813/udp
-FROM freeradius/centos6-deps
+ARG from=freeradius/centos6-deps
+
+FROM ${from}
#
# This is necessary for the jenkins server to talk to the docker instance
RUN adduser jenkins
RUN printf jenkins1 | passwd --stdin jenkins
RUN mkdir /var/run/sshd
+
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN sed -i 's|session required pam_loginuid.so|session optional pam_loginuid.so|g' /etc/pam.d/sshd
-FROM freeradius/centos7-deps
+ARG from=freeradius/centos7-deps
ARG cc=gcc
+FROM ${from}
+
WORKDIR /usr/local/src/repositories/freeradius-server
RUN CC=${cc} ./configure --prefix=/opt/freeradius
RUN make -j2
RUN make
WORKDIR /
-FROM freeradius/centos7-deps
+FROM ${from}
COPY --from=0 /opt/freeradius /opt/freeradius
EXPOSE 1812/udp 1813/udp
-FROM freeradius/centos7-deps
+ARG from=freeradius/centos7-deps
+
+FROM ${from}
#
# This is necessary for the jenkins server to talk to the docker instance
RUN adduser jenkins
RUN printf jenkins1 | passwd --stdin jenkins
RUN mkdir /var/run/sshd
+
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN sed -i 's|session required pam_loginuid.so|session optional pam_loginuid.so|g' /etc/pam.d/sshd
-FROM freeradius/debian7-deps
+ARG from=freeradius/debian7-deps
ARG cc=gcc
+FROM ${from}
+
WORKDIR /usr/local/src/repositories/freeradius-server
RUN git checkout v3.0.x
RUN CC=${cc} ./configure --prefix=/opt/freeradius
RUN make
WORKDIR /
-FROM freeradius/debian7-deps
+FROM ${from}
COPY --from=0 /opt/freeradius /opt/freeradius
EXPOSE 1812/udp 1813/udp
-FROM freeradius/debian7-deps
+ARG from=freeradius/debian7-deps
+ARG osname=wheezy
+
+FROM ${from}
#
# This is necessary for the jenkins server to talk to the docker instance
RUN hg clone http://hg.openjdk.java.net/jdk8/jdk8 YourOpenJDK ;\
cd YourOpenJDK ;\
bash ./get_source.sh
-RUN apt-get install -y cpio zip openjdk-7-jdk libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev cups libcups2-dev
-RUN apt-get install -y libfreetype6-dev libasound2-dev
+RUN apt-get install -y cpio zip openjdk-7-jdk libX11-dev libxext-dev libxrender-dev \
+ libxtst-dev libxt-dev cups libcups2-dev libfreetype6-dev libasound2-dev
RUN cd YourOpenJDK && bash ./configure && make
RUN cd YourOpenJDK && make install
-RUN apt-get install -y sudo && echo "jenkins ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
+RUN apt-get install -y openssh-server sudo
+
RUN useradd -m jenkins
RUN echo "jenkins:jenkins1" | chpasswd
+RUN echo "jenkins ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
RUN mkdir /var/run/sshd
+
# RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN sed -i 's|session required pam_loginuid.so|session optional pam_loginuid.so|g' /etc/pam.d/sshd
-FROM freeradius/debian8-deps
+ARG from=freeradius/debian8-deps
ARG cc=gcc
+FROM ${from}
+
WORKDIR /usr/local/src/repositories/freeradius-server
RUN CC=${cc} ./configure --prefix=/opt/freeradius
RUN make -j2
RUN make
WORKDIR /
-FROM freeradius/debian8-deps
+FROM ${from}
COPY --from=0 /opt/freeradius /opt/freeradius
EXPOSE 1812/udp 1813/udp
-FROM freeradius/debian8-deps
+ARG from=freeradius/debian8-deps
+ARG osname=jessie
+
+FROM ${from}
#
# This is necessary for the jenkins server to talk to the docker instance
#
-RUN echo deb http://ftp.debian.org/debian jessie-backports main >> /etc/apt/sources.list
-RUN apt-get update && apt-get -t jessie-backports install -y openjdk-8-jre-headless
+RUN echo deb http://ftp.debian.org/debian ${osname}-backports main >> /etc/apt/sources.list
+RUN apt-get update && apt-get -t ${osname}-backports install -y openjdk-8-jre-headless
RUN apt-get install -y openssh-server sudo
RUN useradd -m jenkins
RUN echo "jenkins:jenkins1" | chpasswd
RUN echo "jenkins ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
-
RUN mkdir /var/run/sshd
+
# RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN sed -i 's|session required pam_loginuid.so|session optional pam_loginuid.so|g' /etc/pam.d/sshd
-FROM freeradius/debian9-deps
+ARG from=freeradius/debian9-deps
ARG cc=gcc
+FROM ${from}
+
WORKDIR /usr/local/src/repositories/freeradius-server
RUN CC=${cc} ./configure --prefix=/opt/freeradius
RUN make -j2
RUN make
WORKDIR /
-FROM freeradius/debian9-deps
+FROM ${from}
COPY --from=0 /opt/freeradius /opt/freeradius
EXPOSE 1812/udp 1813/udp
-FROM freeradius/debian9-deps
+ARG from=freeradius/debian9-deps
+ARG osname=stretch
+
+FROM ${from}
#
# This is necessary for the jenkins server to talk to the docker instance
#
-RUN echo deb http://ftp.debian.org/debian stretch-backports main >> /etc/apt/sources.list
-RUN apt-get update && apt-get -t stretch-backports install -y openjdk-8-jre-headless
+RUN echo deb http://ftp.debian.org/debian ${osname}-backports main >> /etc/apt/sources.list
+RUN apt-get update && apt-get -t ${osname}-backports install -y openjdk-8-jre-headless
RUN apt-get install -y openssh-server sudo
RUN useradd -m jenkins
--- /dev/null
+ARG from=freeradius/debiansid-deps
+ARG cc=gcc
+
+FROM ${from}
+
+WORKDIR /usr/local/src/repositories/freeradius-server
+RUN CC=${cc} ./configure --prefix=/opt/freeradius
+RUN make -j2
+RUN make install
+WORKDIR /opt/freeradius/etc/raddb
+RUN sed -i -e 's/allow_vulnerable_openssl.*/allow_vulnerable_openssl = yes/' radiusd.conf
+WORKDIR certs
+RUN make
+WORKDIR /
+
+FROM ${from}
+COPY --from=0 /opt/freeradius /opt/freeradius
+
+EXPOSE 1812/udp 1813/udp
+CMD ["/opt/freeradius/sbin/radiusd", "-X"]
+
--- /dev/null
+FROM debian:sid
+
+ARG gccver=7
+ARG clangver=5.0
+ARG osname=unstable
+
+#
+# Install add-apt-repository
+#
+RUN apt-get update && \
+ apt-get install -y software-properties-common gnupg2 && \
+ apt-get clean && \
+ rm -r /var/lib/apt/lists/*
+
+# Stretch uses GCC-6.3 by default, so it doesn't need to be updated to get C11 functionality.
+
+# For clang
+RUN echo "deb http://apt.llvm.org/${osname}/ llvm-toolchain-${clangver} main" >> /etc/apt/sources.list && \
+ apt-key adv --fetch-keys http://apt.llvm.org/llvm-snapshot.gpg.key
+
+RUN apt-get update && \
+# Development utilities
+ apt-get install -y devscripts equivs git quilt && \
+# Compilers
+ apt-get install -y g++-${gccver} llvm-${clangver} clang-${clangver} lldb-${clangver} && \
+# eapol_test dependencies
+ apt-get install -y libnl-3-dev libnl-genl-3-dev
+
+RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gccver} 50 \
+ --slave /usr/bin/g++ g++ /usr/bin/g++-${gccver} && \
+ update-alternatives --config gcc
+
+RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${clangver} 60 && \
+ update-alternatives --config clang
+
+RUN update-alternatives --install /usr/bin/lldb lldb /usr/bin/lldb-${clangver} 60 && \
+ update-alternatives --config lldb
+
+
+#
+# Setup a src dir in /usr/local
+#
+RUN mkdir -p /usr/local/src/repositories
+WORKDIR /usr/local/src/repositories
+
+#
+# Get a modern version of cmake. We need 3.8.2 or later to build libkqueue rpms
+#
+RUN curl -f -o cmake.sh https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.sh
+RUN [ "$(cat cmake.sh | openssl sha256 | sed 's/^.* //')" = "bb26b1871f9e5c2fb73476186cc94d03b674608f704b48b94d617340b87b4d73" ]
+RUN sh cmake.sh --skip-license --prefix=/usr/local
+
+#
+# Grab libkqueue and build
+#
+WORKDIR /usr/local/src/repositories
+RUN git clone --branch master --depth=1 https://github.com/mheily/libkqueue.git
+
+WORKDIR libkqueue
+RUN cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib ./ && \
+ make && \
+ cpack -P libkqueue-dev -G DEB && \
+ dpkg -i --force-all ./libkqueue-*deb
+
+WORKDIR /usr/local/src/repositories
+
+#
+# Shallow clone the FreeRADIUS source
+#
+ARG source=https://github.com/FreeRADIUS/freeradius-server.git
+RUN git clone --depth 1 --no-single-branch ${source}
+WORKDIR freeradius-server
+
+#
+# Install build dependencies for all branches
+#
+RUN for i in $(git for-each-ref --format='%(refname:short)' refs/remotes/origin 2>/dev/null | sed -e 's#origin/##' | egrep "^v[0-9]*\.[0-9x]*\.x$");\
+ do \
+ git checkout $i; \
+ if [ -e ./debian/control.in ] ; then debian/rules debian/control ; fi ; echo 'y' | mk-build-deps -irt'apt-get -yV' debian/control ; \
+ done
+
--- /dev/null
+ARG from=freeradius/debiansid-deps
+ARG osname=sid
+
+FROM ${from}
+
+#
+# This is necessary for the jenkins server to talk to the docker instance
+#
+RUN echo deb http://ftp.debian.org/debian ${osname}-backports main >> /etc/apt/sources.list
+RUN apt-get update && apt-get -t ${osname}-backports install -y openjdk-8-jre-headless
+RUN apt-get install -y openssh-server sudo
+
+RUN useradd -m jenkins
+RUN echo "jenkins:jenkins1" | chpasswd
+RUN echo "jenkins ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
+RUN mkdir /var/run/sshd
+
+# RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
+RUN sed -i 's|session required pam_loginuid.so|session optional pam_loginuid.so|g' /etc/pam.d/sshd
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd","-D"]
-FROM freeradius/ubuntu14-deps
+ARG from=freeradius/ubuntu14-deps
ARG cc=gcc
+FROM ${from}
+
WORKDIR /usr/local/src/repositories/freeradius-server
RUN CC=${cc} ./configure --prefix=/opt/freeradius
RUN make -j2
RUN make
WORKDIR /
-FROM freeradius/ubuntu14-deps
+FROM ${from}
COPY --from=0 /opt/freeradius /opt/freeradius
EXPOSE 1812/udp 1813/udp
-FROM freeradius/ubuntu14-deps
+ARG from=freeradius/ubuntu14-deps
+ARG osname=trusty
+
+FROM ${from}
#
# This is necessary for the jenkins server to talk to the docker instance
#
-#RUN echo deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse >> /etc/apt/sources.list
RUN apt-add-repository ppa:openjdk-r/ppa
RUN apt-get update && apt-get install -y openjdk-8-jre-headless
-RUN apt-get install -y openssh-server
+
+RUN apt-get install -y openssh-server sudo
+
RUN useradd -m jenkins
RUN echo "jenkins:jenkins1" | chpasswd
RUN echo "jenkins ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
RUN mkdir /var/run/sshd
+
# RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN sed -i 's|session required pam_loginuid.so|session optional pam_loginuid.so|g' /etc/pam.d/sshd
-FROM freeradius/ubuntu16-deps
+ARG from=freeradius/ubuntu16-deps
ARG cc=gcc
+FROM ${from}
+
WORKDIR /usr/local/src/repositories/freeradius-server
RUN CC=${cc} ./configure --prefix=/opt/freeradius
RUN make -j2
RUN make
WORKDIR /
-FROM freeradius/ubuntu16-deps
+FROM ${from}
COPY --from=0 /opt/freeradius /opt/freeradius
EXPOSE 1812/udp 1813/udp
-FROM freeradius/ubuntu16-deps
+ARG from=freeradius/ubuntu16-deps
+ARG osname=xenial
+
+FROM ${from}
#
# This is necessary for the jenkins server to talk to the docker instance
#
-#RUN echo deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse >> /etc/apt/sources.list
RUN apt-add-repository ppa:openjdk-r/ppa
RUN apt-get update && apt-get install -y openjdk-8-jre-headless
-RUN apt-get install -y openssh-server
+
+RUN apt-get install -y openssh-server sudo
+
RUN useradd -m jenkins
RUN echo "jenkins:jenkins1" | chpasswd
RUN echo "jenkins ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
RUN mkdir /var/run/sshd
+
# RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN sed -i 's|session required pam_loginuid.so|session optional pam_loginuid.so|g' /etc/pam.d/sshd