| # Copyright 2017 The Kubernetes Authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| FROM BASEIMAGE |
| |
| # If we're building for another architecture than amd64, the CROSS_BUILD_ placeholder is removed so |
| # e.g. CROSS_BUILD_COPY turns into COPY |
| # If we're building normally, for amd64, CROSS_BUILD lines are removed |
| CROSS_BUILD_COPY qemu-ARCH-static /usr/bin/ |
| |
| ENV DEBIAN_FRONTEND=noninteractive |
| |
| # Smaller package install size. |
| COPY excludes /etc/dpkg/dpkg.cfg.d/excludes |
| |
| # Convenience script for building on this base image. |
| COPY clean-install /usr/local/bin/clean-install |
| |
| # Update system packages. |
| RUN apt-get update \ |
| && apt-get dist-upgrade -y |
| |
| # Hold required packages to avoid breaking the installation of packages |
| RUN apt-mark hold apt gnupg adduser passwd libsemanage1 libcap2 |
| |
| # Remove unnecessary packages. |
| # This list was generated manually by listing the installed packages (`apt list --installed`), |
| # then running `apt-cache rdepends --installed --no-recommends` to find the "root" packages. |
| # The root packages were evaluated based on whether they were needed in the container image. |
| # Several utilities (e.g. ping) were kept for usefulness, but may be removed in later versions. |
| RUN echo "Yes, do as I say!" | apt-get purge \ |
| bash \ |
| debconf-i18n \ |
| e2fslibs \ |
| e2fsprogs \ |
| init \ |
| initscripts \ |
| libcap2-bin \ |
| libkmod2 \ |
| libmount1 \ |
| libsmartcols1 \ |
| libudev1 \ |
| libblkid1 \ |
| libncursesw5 \ |
| libprocps6 \ |
| libslang2 \ |
| libss2 \ |
| libsystemd0 \ |
| libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl \ |
| ncurses-base \ |
| ncurses-bin \ |
| systemd \ |
| systemd-sysv \ |
| sysv-rc \ |
| tzdata |
| |
| # No-op stubs replace some unnecessary binaries that may be depended on in the install process (in |
| # particular we don't run an init process). |
| WORKDIR /usr/local/bin |
| RUN touch noop && \ |
| chmod 555 noop && \ |
| ln -s noop runlevel && \ |
| ln -s noop invoke-rc.d && \ |
| ln -s noop update-rc.d |
| WORKDIR / |
| |
| # Cleanup cached and unnecessary files. |
| RUN apt-get autoremove -y && \ |
| apt-get clean -y && \ |
| tar -czf /usr/share/copyrights.tar.gz /usr/share/common-licenses /usr/share/doc/*/copyright && \ |
| rm -rf \ |
| /usr/share/doc \ |
| /usr/share/man \ |
| /usr/share/info \ |
| /usr/share/locale \ |
| /var/lib/apt/lists/* \ |
| /var/log/* \ |
| /var/cache/debconf/* \ |
| /usr/share/common-licenses* \ |
| /usr/share/bash-completion \ |
| ~/.bashrc \ |
| ~/.profile \ |
| /etc/systemd \ |
| /lib/lsb \ |
| /lib/udev \ |
| /usr/lib/x86_64-linux-gnu/gconv/IBM* \ |
| /usr/lib/x86_64-linux-gnu/gconv/EBC* && \ |
| mkdir -p /usr/share/man/man1 /usr/share/man/man2 \ |
| /usr/share/man/man3 /usr/share/man/man4 \ |
| /usr/share/man/man5 /usr/share/man/man6 \ |
| /usr/share/man/man7 /usr/share/man/man8 |