I’m using Varrsh 6 LTS in some places, and need a way to rebuild dependent modules …. which seem to need recompiling even for a minor feature release (E.g. 6.0.1 to 6.0.2).
I use dynamic (DNS routing), var and vsthrottle.
Firstly, here’s a Dockerfile –
FROM debian:buster as builder
ARG VARNISH_VERSION=6.0.8-1~buster
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -qy update && \
apt-get -qy install eatmydata apt-transport-https lsb-release ca-certificates curl gnupg wget && \
apt-get clean
RUN echo "\
Package: varnish\n\
Pin: version ${VARNISH_VERSION}\n\
Pin-Priority: 1001 \
\
Package: varnish-dev \n\
Pin: version ${VARNISH_VERSION} \n\
Pin-Priority: 1001 \
" >> /etc/apt/preferences.d/varnish
RUN echo "deb https://packagecloud.io/varnishcache/varnish60lts/debian/ buster main" > /etc/apt/sources.list.d/varnish.list
RUN wget -qO /tmp/varnish.gpg https://packagecloud.io/varnishcache/varnish60lts/gpgkey && \
apt-key add /tmp/varnish.gpg && \
apt-get -q update && \
eatmydata -- apt-get -qy install varnish varnish-dev automake libtool make libncurses-dev pkg-config python3-docutils unzip libgetdns10 libgetdns-dev
RUN apt-cache policy varnish
WORKDIR /tmp
RUN wget -qO /tmp/varnish.zip https://github.com/varnish/varnish-modules/archive/refs/heads/6.0.zip && \
unzip /tmp/varnish.zip && \
cd varnish-modules-6.0 && \
bash bootstrap && \
./configure --disable-dependency-tracking && \
make && \
make check && \
make install
RUN wget -qO /tmp/dynamic.zip https://github.com/nigoroll/libvmod-dynamic/archive/refs/heads/6.0.zip && \
unzip /tmp/dynamic.zip && \
cd libvmod-dynamic-6.0 && \
bash autogen.sh && \
bash configure && \
make && \
make install
FROM debian:buster
WORKDIR /srv/export
COPY --from=builder /usr/lib/varnish/vmods/libvmod_dynamic.so /srv/export/
COPY --from=builder /usr/lib/varnish/vmods/libvmod_proxy.so /srv/export/
COPY --from=builder /usr/lib/varnish/vmods/libvmod_var.so /srv/export/
COPY --from=builder /usr/lib/varnish/vmods/libvmod_vsthrottle.so /srv/export/
COPY --from=builder /usr/lib/varnish/vmods/libvmod_header.so /srv/export/
and then, I copy the files out of that build pipeline (dare i call it that?) with this shell script
#!/bin/bash
set -eux
# Build a new set of varnish modules.
# Each version of varnish needs it's own build of some modules - moving from e.g. varnish 6.0.7~1-stretch to 6.0.8~1-stretch
# isn't possible without these modules being rebuilt.
[ -d $(pwd)/tmp ] && rm -Rf $(pwd)/tmp
docker build --pull -f Dockerfile -t builder .
mkdir tmp
docker run -v $(pwd)/tmp:/srv/tmp -ti builder bash -c 'cp /srv/export/* /srv/tmp'
Then it’s just a case of running ‘build.sh’ and waiting …. and you’ll find the files you want in ‘tmp’.