Files
warewulf/Dockerfile
Jonathon Anderson 1047032bae Updated Makefile to account for vendor/ in dist
The previous PR #890 introduced a `Defaults.mk` target for defining
default variables for future calls to `make`. This functionality was
already present in a different form, but this new "real" target had an
unintended side-effect of causing the target to be called automatically
at reference, even the optional reference `-include Defaults.mk`. This
is undesirable as it causes the generation of defaults even during a
`make clean`.

This commit resolves these issues and further refactors the Makefile,
building on the work in #890, but with additional understanding:

* Convert the `Defaults.mk` target to the "phony" `defaults` target,
  preventing automatic generation
* Refactor and split `clean` targets
* Update `cleanvendor` to reflect `OFFLINE_BUILD`, similar to the
  `vendor` target
* Move "tools" targets into `Tools.mk`
* Add `ARCH` to `Variables.mk` for architecture-specific actions

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
2023-08-31 16:35:21 -06:00

95 lines
3.3 KiB
Docker

FROM opensuse/tumbleweed:latest as builder
RUN zypper -n install --no-recommends git go1.18 libgpgme-devel &&\
zypper -n install -t pattern devel_basis
# now build the warewulf
COPY . /warewulf-src
RUN cd /warewulf-src &&\
make clean \
OFFLINE_BUILD=1 &&\
make defaults \
PREFIX=/usr \
BINDIR=/usr/bin \
SYSCONFDIR=/etc \
DATADIR=/usr/share \
LOCALSTATEDIR=/var/lib \
SHAREDSTATEDIR=/var/lib \
MANDIR=/usr/share/man \
INFODIR=/usr/share/info \
DOCDIR=/usr/share/doc \
SRVDIR=/var/lib \
TFTPDIR=/srv/tftpboot \
SYSTEMDDIR=/usr/lib/systemd/system \
BASHCOMPDIR=/etc/warewulf/bash_completion.d/ \
FIREWALLDDIR=/usr/lib/firewalld/services \
WWCLIENTDIR=/warewulf &&\
make lint &&\
make &&\
make install
# now all again but just the bare install for running the stuff
FROM opensuse/tumbleweed:latest
LABEL Description="Warewulf Base Container"
LABEL maintainer="Christian Goll <cgoll@suse.com>"
COPY --from=builder /usr/bin/wwctl /usr/bin/wwctl
COPY --from=builder /var/lib/warewulf /var/lib/warewulf
COPY --from=builder /usr/share/warewulf /usr/share/warewulf
COPY --from=builder /usr/lib/systemd/system/warewulfd.service /container-scripts/warewulfd.service
COPY --from=builder /etc/warewulf /etc/warewulf
COPY --from=builder /warewulf-src/container-scripts /container-scripts
RUN zypper -n install \
cpio \
gzip \
pigz \
rsync \
openssh-clients \
less \
dhcp-server \
iproute2 \
vim \
yq \
tftp \
systemd \
&& \
zypper clean -a && \
systemctl enable dhcpd && \
systemctl enable tftp.socket &&\
export DHCPDCONF=/etc/sysconfig/dhcpd; test -e $DHCPDCONF && \
sed -i 's/^DHCPD_INTERFACE=""/DHCPD_INTERFACE="ANY"/' $DHCPDCONF && \
sed -i 's/^DHCPD_RUN_CHROOTED="yes"/DHCPD_RUN_CHROOTED="no"/' $DHCPDCONF && \
WW4CONF=/etc/warewulf/warewulf.conf; test -e $WW4CONF && \
yq e '.ipaddr |= "EMPTY"' -i $WW4CONF && \
yq e '.netmask |= "EMPTY"' -i $WW4CONF && \
yq e '.network |= "EMPTY"' -i $WW4CONF && \
yq e '.dhcp.["range start"] |= "EMPTY"' -i $WW4CONF && \
yq e '.dhcp.["range end"] |= "EMPTY"' -i $WW4CONF && \
yq e '.nfs.enabled |= false' -i $WW4CONF && \
mkdir -p /container && \
cp -vr container-scripts/label-* \
container-scripts/wwctl \
container-scripts/warewulf.service \
container-scripts/warewulf-container-manage.sh \
container-scripts/config-warewulf \
/container &&\
mkdir -p /usr/share/bash_completion/completions/ &&\
cp /etc/warewulf/bash_completion.d/warewulf /usr/share/bash_completion/completions/warewulf &&\
mv -v container-scripts/ww4-config.service /etc/systemd/system/ &&\
mv -v container-scripts/warewulfd.service /etc/systemd/system/ &&\
systemctl enable ww4-config &&\
systemctl enable warewulfd
CMD [ "/usr/sbin/init" ]
EXPOSE 67/udp 68/udp 69/udp 80 9873
LABEL INSTALL="/usr/bin/docker run --env IMAGE=IMAGE --rm --privileged -v /:/host IMAGE /bin/bash /container/label-install"
LABEL UNINSTALL="/usr/bin/docker run --rm --privileged -v /:/host IMAGE /bin/bash /container/label-uninstall"
LABEL PURGE="/usr/bin/docker run -ti --rm --privileged -v /:/host IMAGE /bin/bash /container/label-purge"
LABEL RUN="/usr/bin/docker run -d --replace --name \${NAME} --privileged --net=host -v /:/host -v /etc/warewulf:/etc/warewulf -v /var/lib/warewulf/:/var/lib/warewulf/ -e NAME=\${NAME} -e IMAGE=\${IMAGE} \${IMAGE}"