# 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/runironic-exporter /bin/runlogwatch.sh /bin/configure-nonroot.sh COPY ironic-config/inspector.ipxe.j2 ironic-config/httpd-ironic-api.conf.j2 \ ironic-config/ipxe_config.template ironic-config/dnsmasq.conf.j2 \ /templates/ # 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 ironic-config/network-data-schema-empty.json /etc/ironic/ # 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 /templates/httpd-vmedia.conf.j2 COPY ironic-config/apache2-ipxe.conf.j2 /templates/httpd-ipxe.conf.j2 # configure non-root user and set relevant permissions RUN configure-nonroot.sh && rm -f /bin/configure-nonroot.sh