Skip to content

Commit

Permalink
Backport crossbuild scripts from v4 (#3011)
Browse files Browse the repository at this point in the history
* Append the prefix 'build-' to the containers

The scheme was copied from 'master' during the backport. we are just
keeping the same prefix expected by 'crossbuild.mk'

* Backport crossbuild.mk

The files were copied over verbatim.

* Backport Dockerfiles split in .deps as needed by crossbuild.mk

That scheme was copied from 'master' being necessary to create
a common container with all dependencies (Dockerfile.deps) and
the Dockerfile use for running the instance with the FreeRADIUS
service.

* Add systemd tests

It will add capability to spin a docker container running the systemd
service and build/install the respective package doing basic tests like
start/stop/restart and checking if the service has been properly
registered.
  • Loading branch information
jpereira committed Mar 2, 2020
1 parent 395a247 commit 72d3bfd
Show file tree
Hide file tree
Showing 33 changed files with 733 additions and 219 deletions.
11 changes: 11 additions & 0 deletions Makefile
Expand Up @@ -34,12 +34,14 @@ endif
ifneq "$(MAKECMDGOALS)" "deb"
ifneq "$(MAKECMDGOALS)" "rpm"
ifeq "$(findstring docker,$(MAKECMDGOALS))" ""
ifeq "$(findstring crossbuild,$(MAKECMDGOALS))" ""
$(if $(wildcard Make.inc),,$(error Missing 'Make.inc' Run './configure [options]' and retry))

include Make.inc
endif
endif
endif
endif

MFLAGS += --no-print-directory

Expand All @@ -55,10 +57,12 @@ export DESTDIR := $(R)
ifneq "$(MAKECMDGOALS)" "deb"
ifneq "$(MAKECMDGOALS)" "rpm"
ifeq "$(findstring docker,$(MAKECMDGOALS))" ""
ifeq "$(findstring crossbuild,$(MAKECMDGOALS))" ""
include scripts/boiler.mk
endif
endif
endif
endif

#
# To work around OpenSSL issues with travis.
Expand Down Expand Up @@ -367,3 +371,10 @@ warnings:
whitespace:
@for x in $$(git ls-files raddb/ src/); do unexpand $$x > $$x.bak; cp $$x.bak $$x; rm -f $$x.bak;done
@perl -p -i -e 'trim' $$(git ls-files src/)

#
# Include the crossbuild make file only if we're cross building
#
ifneq "$(findstring crossbuild,$(MAKECMDGOALS))" ""
include scripts/docker/crossbuild/crossbuild.mk
endif
@@ -1,47 +1,10 @@
ARG from=alpine:latest
FROM ${from} as build

#
# Install build tools
#
RUN apk update
RUN apk add git gcc make

#
# Create build directory
#
RUN mkdir -p /usr/local/src/repositories
WORKDIR /usr/local/src/repositories

#
# Shallow clone the FreeRADIUS source
#
ARG source=https://github.com/FreeRADIUS/freeradius-server.git
ARG release=v3.0.x

RUN git clone --depth 1 --single-branch --branch ${release} ${source}
WORKDIR freeradius-server

#
# Install build dependencies
#
# essential
RUN apk add libc-dev talloc-dev
RUN apk add openssl openssl-dev
RUN apk add linux-headers
# general
RUN apk add pcre-dev libidn-dev krb5-dev samba-dev curl-dev json-c-dev
RUN apk add openldap-dev unbound-dev
# languages
RUN apk add ruby-dev perl-dev python2-dev
# databases
RUN apk add hiredis-dev libmemcached-dev gdbm-dev libcouchbase-dev
# sql
RUN apk add postgresql-dev mariadb-dev unixodbc-dev sqlite-dev
ARG from=freeradius/alpine-deps
FROM ${from}

#
# Build the server
#
WORKDIR /usr/local/src/repositories
RUN ./configure --prefix=/opt
RUN make -j2
RUN make install
Expand All @@ -50,8 +13,7 @@ RUN rm /opt/lib/*.a
#
# Clean environment and run the server
#
FROM ${from}
COPY --from=build /opt /opt
COPY --from=0 /opt /opt

#
# These are needed for the server to start
Expand Down
40 changes: 40 additions & 0 deletions scripts/docker/build-alpine/Dockerfile.deps
@@ -0,0 +1,40 @@
ARG from=alpine:latest
FROM ${from}

#
# Install build tools
#
RUN apk update
RUN apk add git gcc make rsync

#
# Create build directory
#
RUN mkdir -p /usr/local/src/repositories
WORKDIR /usr/local/src/repositories

#
# Shallow clone the FreeRADIUS source
#
ARG source=https://github.com/FreeRADIUS/freeradius-server.git
ARG release=v3.0.x

RUN git clone --depth 1 --single-branch --branch ${release} ${source}
WORKDIR freeradius-server

#
# Install build dependencies
#
# essential
RUN apk add libc-dev talloc-dev
RUN apk add openssl openssl-dev
RUN apk add linux-headers
# general
RUN apk add pcre-dev libidn-dev krb5-dev samba-dev curl-dev json-c-dev
RUN apk add openldap-dev unbound-dev
# languages
RUN apk add ruby-dev perl-dev python2-dev
# databases
RUN apk add hiredis-dev libmemcached-dev gdbm-dev libcouchbase-dev
# sql
RUN apk add postgresql-dev mariadb-dev unixodbc-dev sqlite-dev
File renamed without changes.
28 changes: 28 additions & 0 deletions scripts/docker/build-centos7/Dockerfile
@@ -0,0 +1,28 @@
ARG from=freeradius/centos7-deps
FROM ${from}

#
# Clean environment and run the server
#
COPY --from=0 /root/rpms /tmp/

# Use LTB's openldap packages intead of the distribution version to avoid linking against NSS
RUN echo $'[ltb-project]\n\
name=LTB project packages\n\
baseurl=https://ltb-project.org/rpm/$releasever/$basearch\n\
enabled=1\n\
gpgcheck=1\n\
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LTB-project'\
> /etc/yum.repos.d/ltb-project.repo \
&& rpm --import https://ltb-project.org/lib/RPM-GPG-KEY-LTB-project \
\
# EPEL repository for freetds and hiredis
&& yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
\
&& yum install -y /tmp/*.rpm

COPY docker-entrypoint.sh /

EXPOSE 1812/udp 1813/udp
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["radiusd"]
@@ -1,12 +1,13 @@
ARG from=centos:centos7
FROM ${from} as build
FROM ${from}

#
# Install build tools
#
RUN yum groupinstall -y "Development Tools"
RUN yum install -y rpmdevtools
RUN yum install -y openssl
RUN yum install -y rsync

#
# Create build directory
Expand Down Expand Up @@ -66,30 +67,3 @@ RUN rpmbuild -bb --define '_release $release' "$BUILDDIR/SPECS/freeradius.spec"

RUN mkdir /root/rpms
RUN mv $BUILDDIR/RPMS/*/*.rpm /root/rpms/

#
# Clean environment and run the server
#
FROM ${from}
COPY --from=build /root/rpms /tmp/

# Use LTB's openldap packages intead of the distribution version to avoid linking against NSS
RUN echo $'[ltb-project]\n\
name=LTB project packages\n\
baseurl=https://ltb-project.org/rpm/$releasever/$basearch\n\
enabled=1\n\
gpgcheck=1\n\
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LTB-project'\
> /etc/yum.repos.d/ltb-project.repo \
&& rpm --import https://ltb-project.org/lib/RPM-GPG-KEY-LTB-project \
\
# EPEL repository for freetds and hiredis
&& yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
\
&& yum install -y /tmp/*.rpm

COPY docker-entrypoint.sh /

EXPOSE 1812/udp 1813/udp
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["radiusd"]
31 changes: 31 additions & 0 deletions scripts/docker/build-centos7/Dockerfile.systemd
@@ -0,0 +1,31 @@
FROM freeradius-build/centos7:latest

ARG osname=centos7

ENV container docker
ENV LC_ALL C

#
# Some systemd adjustments
#
RUN cd /lib/systemd/system/sysinit.target.wants/; \
for i in *; do [ $i = systemd-tmpfiles-setup.service ] || rm -f $i; done

RUN rm -f /lib/systemd/system/multi-user.target.wants/* \
/etc/systemd/system/*.wants/* \
/lib/systemd/system/local-fs.target.wants/* \
/lib/systemd/system/sockets.target.wants/*udev* \
/lib/systemd/system/sockets.target.wants/*initctl* \
/lib/systemd/system/basic.target.wants/* \
/lib/systemd/system/anaconda.target.wants/*

#
# Build packages
#
WORKDIR /root

#
#
# Start systemd service
#
CMD ["/lib/systemd/systemd"]
File renamed without changes.
20 changes: 20 additions & 0 deletions scripts/docker/build-debian10/Dockerfile
@@ -0,0 +1,20 @@
ARG from=freeradius/debian10-deps
FROM ${from}

#
# Clean environment and run the server
#
COPY --from=0 /usr/local/src/repositories/*.deb /tmp/

RUN apt-get update \
&& apt-get install -y /tmp/*.deb \
&& apt-get clean \
&& rm -r /var/lib/apt/lists/* /tmp/*.deb \
\
&& ln -s /etc/freeradius /etc/raddb

COPY docker-entrypoint.sh /

EXPOSE 1812/udp 1813/udp
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["freeradius"]
@@ -1,13 +1,13 @@
ARG from=debian:buster
FROM ${from} as build
FROM ${from}

ARG gccver=7

#
# Install build tools
#
RUN apt-get update
RUN apt-get install -y devscripts equivs git quilt g++-${gccver}
RUN apt-get install -y devscripts equivs git quilt g++-${gccver} rsync

#
# Create build directory
Expand Down Expand Up @@ -37,22 +37,3 @@ RUN git checkout ${release}; \
# Build the server
#
RUN make -j2 deb

#
# Clean environment and run the server
#
FROM ${from}
COPY --from=build /usr/local/src/repositories/*.deb /tmp/

RUN apt-get update \
&& apt-get install -y /tmp/*.deb \
&& apt-get clean \
&& rm -r /var/lib/apt/lists/* /tmp/*.deb \
\
&& ln -s /etc/freeradius /etc/raddb

COPY docker-entrypoint.sh /

EXPOSE 1812/udp 1813/udp
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["freeradius"]
21 changes: 21 additions & 0 deletions scripts/docker/build-debian8/Dockerfile
@@ -0,0 +1,21 @@
ARG from=freeradius/debian8-deps
FROM ${from}

#
# Clean environment and run the server
#
COPY --from=0 /usr/local/src/repositories/*.deb /tmp/

RUN apt-get update \
&& dpkg -i /tmp/*.deb || true \
&& apt-get -y -f install \
&& apt-get clean \
&& rm -r /var/lib/apt/lists/* /tmp/*.deb \
\
&& ln -s /etc/freeradius /etc/raddb

COPY docker-entrypoint.sh /

EXPOSE 1812/udp 1813/udp
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["freeradius"]
@@ -1,13 +1,13 @@
ARG from=debian:jessie
FROM ${from} as build
FROM ${from}

ARG gccver=4.9

#
# Install build tools
#
RUN apt-get update
RUN apt-get install -y devscripts equivs git quilt g++-${gccver}
RUN apt-get install -y devscripts equivs git quilt g++-${gccver} rsync

#
# Create build directory
Expand Down Expand Up @@ -37,23 +37,3 @@ RUN git checkout ${release}; \
# Build the server
#
RUN make -j2 deb

#
# Clean environment and run the server
#
FROM ${from}
COPY --from=build /usr/local/src/repositories/*.deb /tmp/

RUN apt-get update \
&& dpkg -i /tmp/*.deb || true \
&& apt-get -y -f install \
&& apt-get clean \
&& rm -r /var/lib/apt/lists/* /tmp/*.deb \
\
&& ln -s /etc/freeradius /etc/raddb

COPY docker-entrypoint.sh /

EXPOSE 1812/udp 1813/udp
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["freeradius"]
File renamed without changes.
20 changes: 20 additions & 0 deletions scripts/docker/build-debian9/Dockerfile
@@ -0,0 +1,20 @@
ARG from=freeradius/debian9-deps
FROM ${from}

#
# Clean environment and run the server
#
COPY --from=0 /usr/local/src/repositories/*.deb /tmp/

RUN apt-get update \
&& apt-get install -y /tmp/*.deb \
&& apt-get clean \
&& rm -r /var/lib/apt/lists/* /tmp/*.deb \
\
&& ln -s /etc/freeradius /etc/raddb

COPY docker-entrypoint.sh /

EXPOSE 1812/udp 1813/udp
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["freeradius"]

0 comments on commit 72d3bfd

Please sign in to comment.