Having a completely different image and build system the Dockerfile will always differ quite significantly from the upstream one. Nonetheless, it's still useful to make the commont parts to look alike as much as possible to ease maintanance and update. Note, this is just a small set of changes that are possible, more effort into this direction may follow at later stage.
111 lines
5.1 KiB
Docker
111 lines
5.1 KiB
Docker
# SPDX-License-Identifier: Apache-2.0
|
|
#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.4
|
|
#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.4-%RELEASE%
|
|
#!BuildVersion: 15.6
|
|
|
|
ARG SLE_VERSION
|
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
|
|
|
FROM registry.suse.com/bci/bci-base:$SLE_VERSION AS base
|
|
|
|
RUN zypper -n in --no-recommends shim-x86_64 shim-aarch64 grub2-x86_64-efi grub2-arm64-efi dosfstools mtools
|
|
|
|
WORKDIR /tmp
|
|
COPY prepare-efi.sh /bin/
|
|
RUN set -euo pipefail; chmod +x /bin/prepare-efi.sh
|
|
RUN /bin/prepare-efi.sh
|
|
|
|
COPY --from=micro / /installroot/
|
|
RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes%g' /etc/zypp/zypp.conf
|
|
|
|
#!ArchExclusiveLine: x86_64
|
|
RUN if [ "$(uname -m)" = "x86_64" ];then \
|
|
zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
|
|
fi
|
|
#!ArchExclusiveLine: aarch64
|
|
RUN if [ "$(uname -m)" = "aarch64" ];then \
|
|
zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
|
|
fi
|
|
|
|
# DATABASE
|
|
RUN mkdir -p /installroot/var/lib/ironic && \
|
|
/installroot/usr/bin/sqlite3 /installroot/var/lib/ironic/ironic.sqlite "pragma journal_mode=wal" && \
|
|
zypper --installroot /installroot --non-interactive remove sqlite3
|
|
|
|
# build actual image
|
|
FROM micro AS final
|
|
|
|
MAINTAINER SUSE LLC (https://www.suse.com/)
|
|
# Define labels according to https://en.opensuse.org/Building_derived_containers
|
|
LABEL org.opencontainers.image.title="SLE Openstack Ironic Container Image"
|
|
LABEL org.opencontainers.image.description="Openstack Ironic based on the SLE Base Container Image."
|
|
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
|
|
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
|
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
|
LABEL org.opencontainers.image.version="26.1.2.4"
|
|
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:26.1.2.4-%RELEASE%"
|
|
LABEL org.openbuildservice.disturl="%DISTURL%"
|
|
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
|
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
|
LABEL com.suse.lifecycle-url="https://www.suse.com/lifecycle"
|
|
LABEL com.suse.image-type="application"
|
|
LABEL com.suse.release-stage="released"
|
|
# endlabelprefix
|
|
|
|
COPY --from=base /installroot /
|
|
|
|
RUN set -euo pipefail; ln -s /usr/bin/python3.11 /usr/local/bin/python3; \
|
|
ln -s /usr/bin/pydoc3.11 /usr/local/bin/pydoc
|
|
|
|
ENV GRUB_DIR=/tftpboot/boot/grub
|
|
|
|
# workaround for mkisofs command failing
|
|
RUN echo 'alias mkisofs="xorriso -as mkisofs"' >> ~/.bashrc
|
|
COPY mkisofs_wrapper /usr/bin/mkisofs
|
|
RUN set -euo pipefail; chmod +x /usr/bin/mkisofs
|
|
|
|
RUN mkdir -p /tftpboot
|
|
RUN mkdir -p $GRUB_DIR
|
|
|
|
COPY scripts/ /bin/
|
|
COPY configure-nonroot.sh /bin/
|
|
RUN set -euo pipefail; chmod +x /bin/configure-ironic.sh /bin/rundnsmasq /bin/runhttpd /bin/runironic /bin/runlogwatch.sh /bin/configure-nonroot.sh
|
|
|
|
# No need to support the Legacy BIOS boot
|
|
#RUN cp /usr/share/syslinux/pxelinux.0 /tftpboot
|
|
#RUN cp /usr/share/syslinux/chain.c32 /tftpboot/
|
|
|
|
# IRONIC #
|
|
RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
|
|
#!ArchExclusiveLine: x86_64
|
|
RUN if [ "$(uname -m)" = "x86_64" ];then \
|
|
cp /usr/share/ipxe/ipxe-x86_64.efi /tftpboot/ipxe.efi ;\
|
|
fi
|
|
#!ArchExclusiveLine: aarch64
|
|
RUN if [ "$(uname -m)" = "aarch64" ]; then\
|
|
cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
|
|
fi
|
|
|
|
COPY --from=base /tmp/esp-x86_64.img /tmp/uefi_esp-x86_64.img
|
|
COPY --from=base /tmp/esp-aarch64.img /tmp/uefi_esp-arm64.img
|
|
|
|
COPY ironic-config/ironic.conf.j2 /etc/ironic/
|
|
COPY ironic-config/inspector.ipxe.j2 ironic-config/httpd-ironic-api.conf.j2 ironic-config/ipxe_config.template /tmp/
|
|
COPY ironic-config/network-data-schema-empty.json /etc/ironic/
|
|
|
|
# DNSMASQ
|
|
COPY ironic-config/dnsmasq.conf.j2 /etc/
|
|
|
|
# Workaround
|
|
# Removing the 010-ironic.conf file that comes with the package
|
|
RUN rm /etc/ironic/ironic.conf.d/010-ironic.conf
|
|
|
|
# Custom httpd config, removes all but the bare minimum needed modules
|
|
COPY ironic-config/httpd.conf.j2 /etc/httpd/conf/
|
|
COPY ironic-config/httpd-modules.conf /etc/httpd/conf.modules.d/
|
|
COPY ironic-config/apache2-vmedia.conf.j2 /etc/httpd-vmedia.conf.j2
|
|
COPY ironic-config/apache2-ipxe.conf.j2 /etc/httpd-ipxe.conf.j2
|
|
|
|
# configure non-root user and set relevant permissions
|
|
RUN configure-nonroot.sh && rm -f /bin/configure-nonroot.sh
|