diff --git a/images/Makefile b/images/Makefile new file mode 100644 index 0000000..611c55c --- /dev/null +++ b/images/Makefile @@ -0,0 +1,105 @@ +DRY_RUN := false +REPOSITORY := falcosecurity/kernel-testing +ARCH ?= $(shell uname -m) +YAML_FILE := images.yaml + +.PHONY: build-rootfs build-kernel docker-push generate-yaml build-all initrd-builder modernprobe-builder builder + +builder: + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Building builder image: docker build -t $(REPOSITORY)/builder:0.0.1-$(ARCH) builder"; \ + else \ + echo "Building modernprobe-builder image"; \ + docker build -t $(REPOSITORY)/builder:0.0.1-$(ARCH) builder; \ + fi + +modernprobe-builder: + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Building modernprobe-builder image: docker build -t $(REPOSITORY)/modernprobe-builder:0.0.1-$(ARCH) modernprobe-builder"; \ + else \ + echo "Building modernprobe-builder image"; \ + docker build -t $(REPOSITORY)/modernprobe-builder:0.0.1-$(ARCH) modernprobe-builder; \ + fi + +initrd-builder: + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Building initrd-builder image: docker build -t initrd-builder:0.0.1 initrd-builder"; \ + else \ + echo "Building initrd-builder image"; \ + docker build -t initrd-builder:0.0.1 initrd-builder; \ + fi + +build-rootfs: + @for rootfs_dir in $$(find . -type f -name "Dockerfile" -path "*$(ARCH)/*" -printf '%h\n'); do \ + version=$$(basename $$rootfs_dir); \ + distro=$$(basename $$(dirname $$rootfs_dir)); \ + image=$(REPOSITORY)/$$distro-image:$$version-$(ARCH); \ + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Building rootfs image: docker build -t $$image $$rootfs_dir"; \ + else \ + echo "Building rootfs image: $$image"; \ + docker build -t $$image $$rootfs_dir; \ + fi; \ + done + +build-kernel: initrd-builder + @for kernel_dir in $$(find . -type f -name "Dockerfile.kernel" -path "*$(ARCH)/*" -printf '%h\n'); do \ + version=$$(basename $$kernel_dir); \ + distro=$$(basename $$(dirname $$kernel_dir)); \ + image=$(REPOSITORY)/$$distro-kernel:$$version-$(ARCH); \ + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Building kernel image: docker build -t $$image -f $$kernel_dir/Dockerfile.kernel $$kernel_dir"; \ + else \ + echo "Building kernel image: $$image"; \ + docker build -t $$image -f $$kernel_dir/Dockerfile.kernel $$kernel_dir; \ + fi; \ + done + +docker-push: + @for image in $$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "$(REPOSITORY)" | grep "$(ARCH)"); do \ + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Pushing image: docker push $$image"; \ + else \ + echo "Pushing image: $$image"; \ + docker push $$image; \ + fi; \ + done + +%: initrd-builder + @version=$$(basename $@); \ + distro=$$(basename $$(dirname $@)); \ + arch=$(ARCH); \ + rootfs_dir=$$(find . -type d -path "./$$arch/$$distro/$$version"); \ + kernel_dir=$$(find . -type d -path "./$$arch/$$distro/$$version"); \ + rootfs_image=$(REPOSITORY)/$$distro-image:$$version-$$arch; \ + kernel_image=$(REPOSITORY)/$$distro-kernel:$$version-$$arch; \ + if [ -n "$$rootfs_dir" ]; then \ + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Building rootfs image: docker build -t $$rootfs_image $$rootfs_dir"; \ + else \ + echo "Building rootfs image: $$rootfs_image"; \ + docker build -t $$rootfs_image $$rootfs_dir; \ + fi; \ + fi; \ + if [ -n "$$kernel_dir" ]; then \ + if [ "$(DRY_RUN)" = "true" ]; then \ + echo "Dry run: Building kernel image: docker build -t $$kernel_image -f $$kernel_dir/Dockerfile.kernel $$kernel_dir"; \ + else \ + echo "Building kernel image: $$kernel_image"; \ + docker build -t $$kernel_image -f $$kernel_dir/Dockerfile.kernel $$kernel_dir; \ + fi; \ + fi; + +generate-yaml: + @echo "machines:" > $(YAML_FILE) + @for rootfs_image in $$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "$(REPOSITORY)" | grep "$(ARCH)" | grep "\-image" | sort); do \ + version=$$(echo $$rootfs_image | cut -d':' -f2 | cut -d'-' -f1); \ + distro=$$(echo $$rootfs_image | cut -d'/' -f2 | cut -d'-' -f1); \ + arch=$(ARCH); \ + kernel_image=$$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "$(REPOSITORY)/$$distro-kernel:$$version-$$arch"); \ + if [ -n "$$kernel_image" ]; then \ + echo " - {name: \"$$distro-$$version\", kernel: \"$$kernel_image\", rootfs: \"$$rootfs_image\", arch: \"$$arch\"}" >> $(YAML_FILE); \ + fi; \ + done + +build-all: build-rootfs build-kernel diff --git a/images/README.md b/images/README.md new file mode 100644 index 0000000..28cbbbb --- /dev/null +++ b/images/README.md @@ -0,0 +1,82 @@ +# Images + +Makefile present in this directory is specifically designed to generate the static Docker images required by Ignite to run tests on different Linux distributions. The workflow provided by this Makefile is designed to be straightforward, consisting of three main commands: + +1. `build-all`: This target builds all the necessary Docker images for the different versions and distributions required for testing with Firecracker. + +2. `docker-push`: Optionally, you can use this target to push the resulting Docker images to a Docker Hub registry for easier distribution and access. + +3. `generate-yaml`: This target allows you to generate a YAML file (`images.yaml`) containing the matrix of new image information. The generated YAML file can be conveniently copied to the variables file of Ansible to keep the test environment up to date. + +## Prerequisites + +Before using the Makefile, ensure you have the following installed: + +- Docker: The containerization platform used for building and pushing images. + +## Makefile Targets + +The Makefile provides several targets, each serving a specific purpose: + +- `initrd-builder`: This target builds the `initrd-builder` image, necessary for creating the initrd for each image. + +- `builder`, `modernprobe-builder`: These targets build specific builder images used by the CI system to prepare all the precompiled files for the tests. + +- `build-rootfs` and `build-kernel`: These targets build root filesystem and kernel images, respectively. The `build-kernel` target depends on `initrd-builder`, which must be built first. + +- `docker-push`: This target pushes the built images to a Docker Hub registry. You can use this step to make the images accessible to other systems. + +- `generate-yaml`: This target generates a YAML file named `images.yaml`, which contains information about the built images. The YAML file includes details about the kernel and rootfs images for each version and distribution. This generated YAML file can be conveniently copied to the variables file of Ansible to keep the test environment up to date. + +- `build-all`: This target is a convenience target that sequentially builds both root filesystem and kernel images. + +## Usage + +The typical workflow for using this Makefile is as follows: + +1. Build the `initrd-builder` image first, which is required for creating the initrd for each image: + +``` +make initrd-builder +``` + +2. Build the specific builder images (`builder`, `modernprobe-builder`) used by the CI system: + +``` +make builder +make modernprobe-builder +``` + +3. Build all the required images for testing with Firecracker using the following command: + +``` +make build-all +``` + +4. Optionally, push the built images to a Docker Hub registry with: + +``` +make docker-push +``` + +5. Generate the YAML file containing the image matrix with: + +``` +make generate-yaml +``` + +After running these commands, you will have the necessary Docker images for your Firecracker test environment, and the image matrix will be available in the `images.yaml` file. You can then easily integrate this information into your Ansible setup. + +## Customization + +You can customize the Makefile to suit your specific requirements. The variables you can modify include: + +- `DRY_RUN`: Set this variable to `true` for a dry run, where the build commands will be printed but not executed. + +- `REPOSITORY`: The Docker repository where the built images will be tagged and pushed. + +- `ARCH`: The architecture for which the images will be built. By default, it will use the output of `uname -p`. + +- `YAML_FILE`: The name of the YAML file that will be generated by the `generate-yaml` target. + +Feel free to adjust these variables to match your desired configuration. diff --git a/images/aarch64/amazonlinux2/5.4/Dockerfile b/images/aarch64/amazonlinux2/5.4/Dockerfile new file mode 100644 index 0000000..6436447 --- /dev/null +++ b/images/aarch64/amazonlinux2/5.4/Dockerfile @@ -0,0 +1,46 @@ +FROM amazonlinux:2 + +ARG VERSION=5.4.247-162 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.4/latest/aarch64' + +RUN yum install -y \ + binutils-devel \ + chrony \ + clang \ + gcc10 \ + gcc10-c++ \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}/@ && \ + yum install -y ./*.rpm && \ + rm -v ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.19/cmake-3.19.8-Linux-aarch64.tar.gz && \ + tar -xaf cmake-3.19.8-Linux-aarch64.tar.gz && \ + rm -vf cmake-3.19.8-Linux-aarch64.tar.gz && \ + mv cmake-3.19.8-Linux-aarch64 /opt/cmake-3.19.8 && \ + ln -sf /opt/cmake-3.19.8/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.350.amzn2.aarch64/ && \ + ln -s /usr/src/kernels/${VERSION}.350.amzn2.aarch64/ /lib/modules/${VERSION}.350.amzn2.aarch64/build && \ + rm -vf /usr/bin/gcc /usr/bin/g++ && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc10-gcc 100 --slave /usr/bin/g++ g++ /usr/bin/gcc10-c++ && \ + update-alternatives --auto gcc && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/aarch64/amazonlinux2/5.4/Dockerfile.kernel b/images/aarch64/amazonlinux2/5.4/Dockerfile.kernel new file mode 100644 index 0000000..c119c29 --- /dev/null +++ b/images/aarch64/amazonlinux2/5.4/Dockerfile.kernel @@ -0,0 +1,47 @@ +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION=5.4.247-162 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.4/latest/aarch64' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-5.4.247-162.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}/@ && \ + grep -E 'kernel-devel-5.4.247-162.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + find ./extracted/ -name 'vmlinuz-*' -exec cp -v {} extracted/vmlinux \; + +FROM amazonlinux:2 as kmod-builder + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.4/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/5.4.247-162.350.amzn2.aarch64/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/aarch64/amazonlinux2022/5.15/Dockerfile b/images/aarch64/amazonlinux2022/5.15/Dockerfile new file mode 100644 index 0000000..366f934 --- /dev/null +++ b/images/aarch64/amazonlinux2022/5.15/Dockerfile @@ -0,0 +1,37 @@ +FROM amazonlinux:2022 + +ARG VERSION=5.15.73-45 +ARG URL='https://al2022-repos-us-east-1-9761ab97.s3.dualstack.us-east-1.amazonaws.com/core/mirrors/latest/aarch64' + + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y \ + binutils-devel \ + chrony \ + clang \ + cmake \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}@ && \ + grep -E 'bpftool-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo bpftool.rpm ${URL}@ && \ + dnf install -y ./*.rpm && \ + rm -f ./*.rpm && \ + mkdir -p /lib/modules/5.15.73-45.135.amzn2022.aarch64/ && \ + ln -s /usr/src/kernels/5.15.73-45.135.amzn2022.aarch64/ /lib/modules/5.15.73-45.135.amzn2022.aarch64/build && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/aarch64/amazonlinux2022/5.15/Dockerfile.kernel b/images/aarch64/amazonlinux2022/5.15/Dockerfile.kernel new file mode 100644 index 0000000..daddc94 --- /dev/null +++ b/images/aarch64/amazonlinux2022/5.15/Dockerfile.kernel @@ -0,0 +1,48 @@ +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION=5.15.73-45 +ARG URL='https://al2022-repos-us-east-1-9761ab97.s3.dualstack.us-east-1.amazonaws.com/core/mirrors/latest/aarch64' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-5.15.73-45.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}@ && \ + grep -E 'kernel-devel-5.15.73-45.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}@ && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + find ./extracted/lib/modules -name vmlinuz -exec cp -v {} extracted/vmlinux.gz \; && \ + gunzip extracted/vmlinux.gz + +FROM amazonlinux:2023 as kmod-builder + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.15/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/5.15.73-45.135.amzn2022.aarch64/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/aarch64/archlinux/4.14/Dockerfile b/images/aarch64/archlinux/4.14/Dockerfile new file mode 100644 index 0000000..2e7b083 --- /dev/null +++ b/images/aarch64/archlinux/4.14/Dockerfile @@ -0,0 +1,35 @@ +FROM lopsided/archlinux:latest + +ARG VERSION=4.14.15-1 +ARG URL='http://tardis.tiny-vps.com/aarm/packages' + +WORKDIR /home/ubuntu + +RUN pacman -Syyu --noconfirm && \ + pacman -S --noconfirm \ + clang \ + cmake \ + gcc \ + git \ + libcap \ + llvm \ + make \ + openssh \ + python \ + rsync \ + systemd \ + wget && \ + ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime && \ + echo 'LANG=en_US.UTF-8' > /etc/locale.gen && \ + locale-gen && \ + echo 'LANG=en_US.UTF-8' > /etc/locale.conf && \ + echo 'archlinux' > /etc/hostname && \ + systemctl enable sshd && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -Lo headers.tar.xz ${URL}/l/linux-aarch64-headers/linux-aarch64-headers-4.14.15-1-aarch64.pkg.tar.xz && \ + pacman -U --noconfirm ./headers.tar.xz && \ + rm -v ./headers.tar.xz && \ + ln -s /usr/lib/systemd/systemd /sbin/init && \ + yes | pacman -Scc || exit 0 diff --git a/images/aarch64/archlinux/4.14/Dockerfile.kernel b/images/aarch64/archlinux/4.14/Dockerfile.kernel new file mode 100644 index 0000000..72f87d2 --- /dev/null +++ b/images/aarch64/archlinux/4.14/Dockerfile.kernel @@ -0,0 +1,25 @@ +FROM initrd-builder:0.0.1 AS builder + +ARG VERSION=4.14.15-1 +ARG URL='http://tardis.tiny-vps.com/aarm/packages' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + apt update && apt install -y file && \ + curl -Lo kernel.pkg.tar.xz ${URL}/l/linux-aarch64/linux-aarch64-4.14.15-1-aarch64.pkg.tar.xz && \ + mkdir extracted && \ + cd extracted && \ + ls ../*.tar.xz | \ + xargs -I@ tar -xaf @ && \ + find . -name '*.gz' -exec gunzip {} \; && \ + find . -name '*ko*' && \ + mv ./usr/lib . && \ + cp -v boot/Image vmlinux && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=builder /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=builder /home/ubuntu/out/initrd /boot/ +COPY --from=builder /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/aarch64/fedora/6.2/Dockerfile b/images/aarch64/fedora/6.2/Dockerfile new file mode 100644 index 0000000..837d1a0 --- /dev/null +++ b/images/aarch64/fedora/6.2/Dockerfile @@ -0,0 +1,27 @@ +FROM fedora:38 + +ARG VERSION=6.2.9-300 +ARG HVERSION=6.2.6-300 +ARG ARCH=aarch64 +ARG URL='https://mirrors.kernel.org/fedora/releases/38/Everything/aarch64/os/Packages' + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y \ + clang \ + cmake \ + iproute \ + libcap-devel \ + llvm \ + openssh-server \ + rsync \ + systemd && \ + curl -Lo bpftool.rpm ${URL}/b/bpftool-${HVERSION}.fc38.${ARCH}.rpm && \ + curl -Lo sources.rpm ${URL}/k/kernel-devel-${VERSION}.fc38.${ARCH}.rpm && \ + curl -Lo headers.rpm ${URL}/k/kernel-headers-${HVERSION}.fc38.${ARCH}.rpm && \ + dnf install -y ./*.rpm && \ + rm -v ./*.rpm && \ + mkdir -p /lib/modules/${VERSION}.fc38.${ARCH} && \ + ln -s /usr/src/kernels/${VERSION}.fc38.${ARCH}/ /lib/modules/${VERSION}.fc38.${ARCH}/build && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/aarch64/fedora/6.2/Dockerfile.kernel b/images/aarch64/fedora/6.2/Dockerfile.kernel new file mode 100644 index 0000000..f1a2cad --- /dev/null +++ b/images/aarch64/fedora/6.2/Dockerfile.kernel @@ -0,0 +1,61 @@ +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION=6.2.9-300 +ARG HVERSION=6.2.6-300 +ARG ARCH=aarch64 +ARG URL='https://mirrors.kernel.org/fedora/releases/38/Everything/aarch64/os/Packages/k/' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.rpm ${URL}kernel-core-${VERSION}.fc38.${ARCH}.rpm && \ + curl -Lo headers.rpm ${URL}kernel-headers-${HVERSION}.fc38.${ARCH}.rpm && \ + curl -Lo modules.rpm ${URL}kernel-modules-${VERSION}.fc38.${ARCH}.rpm && \ + curl -Lo sources.rpm ${URL}kernel-devel-${VERSION}.fc38.${ARCH}.rpm && \ + curl -Lo modules-core.rpm ${URL}kernel-modules-core-${VERSION}.fc38.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + rpm2cpio sources.rpm > sources.cpio && \ + rpm2cpio modules-core.rpm > modules-core.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cpio -idmv < ../modules.cpio && \ + cpio -idmv < ../sources.cpio && \ + cpio -idmv < ../modules-core.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + VMLINUX=$(find lib/modules -name vmlinuz) ; \ + SKIP=$(objdump -EL -b binary -D -m aarch64 $VMLINUX | \ + grep '00088b1f' | awk '{print $1}' | cut -d: -f1 | \ + tr '[:lower:]' '[:upper:]' | xargs -I@ printf "%d" 0x@ ) ; \ + dd if=$VMLINUX of=/home/ubuntu/extracted/vmlinux.gz bs=1 skip=$SKIP && \ + gunzip /home/ubuntu/extracted/vmlinux.gz || exit 0 + + #extract-vmlinux $(find lib/modules -name vmlinuz) > /home/ubuntu/extracted/vmlinux + +FROM fedora:38 as kmod-builder + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://gitlab.com/cki-project/kernel-ark/-/raw/fedora-6.2/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/6.2.9-300.fc38.aarch64/" make + + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ diff --git a/images/aarch64/oraclelinux/4.14/Dockerfile b/images/aarch64/oraclelinux/4.14/Dockerfile new file mode 100644 index 0000000..253eeb0 --- /dev/null +++ b/images/aarch64/oraclelinux/4.14/Dockerfile @@ -0,0 +1,40 @@ +FROM oraclelinux:7 + +ARG VERSION=4.14.35-2047.527.2 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL7/latest/aarch64' + +COPY /dev.repo /etc/yum.repos.d/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y \ + binutils-devel \ + elfutils-libelf-devel \ + git \ + iproute \ + kmod \ + libcap-devel \ + make \ + openssh-server \ + oracle-softwarecollection-release-el7 \ + rsync \ + systemd \ + tar && \ + yum install -y oracle-armtoolset-1 && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-${VERSION}.el7uek.aarch64.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el7uek.aarch64.rpm && \ + curl -Lo libdtrace-devel.rpm ${URL}/getPackage/libdtrace-ctf-devel-1.1.0-2.el7.aarch64.rpm && \ + curl -Lo libdtrace.rpm ${URL}/getPackage/libdtrace-ctf-1.1.0-2.el7.aarch64.rpm && \ + yum install -y --skip-broken ./kernel.rpm ./devel.rpm ./libdtrace.rpm ./libdtrace-devel.rpm && \ + echo 'source /opt/oracle/oracle-armtoolset-1/enable' >> /root/.bashrc && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + curl -LO https://cmake.org/files/v3.19/cmake-3.19.8-Linux-aarch64.tar.gz && \ + tar -xaf cmake-3.19.8-Linux-aarch64.tar.gz && \ + rm -vf cmake-3.19.8-Linux-aarch64.tar.gz && \ + mv cmake-3.19.8-Linux-aarch64 /opt/cmake-3.19.8 && \ + ln -sf /opt/cmake-3.19.8/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.el7uek.aarch64/ && \ + ln -s /usr/src/kernels/${VERSION}.el7uek.aarch64/ /lib/modules/${VERSION}.el7uek.aarch64/build && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/aarch64/oraclelinux/4.14/Dockerfile.kernel b/images/aarch64/oraclelinux/4.14/Dockerfile.kernel new file mode 100644 index 0000000..18fe76c --- /dev/null +++ b/images/aarch64/oraclelinux/4.14/Dockerfile.kernel @@ -0,0 +1,61 @@ +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION=4.14.35-2047.527.2 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL7/latest/aarch64' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-${VERSION}.el7uek.aarch64.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el7uek.aarch64.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio devel.rpm > devel.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../devel.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + find ./extracted/ -name 'vmlinuz-*' -exec cp -v {} extracted/vmlinux \; + +FROM amazonlinux:2 as kmod-builder + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc elfutils-libelf-devel gcc && \ + curl -Lo libdtrace-devel.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/aarch64/getPackage/libdtrace-ctf-devel-1.1.0-2.el7.aarch64.rpm && \ + curl -Lo libdtrace.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/aarch64/getPackage/libdtrace-ctf-1.1.0-2.el7.aarch64.rpm && \ + yum install -y --skip-broken ./libdtrace.rpm ./libdtrace-devel.rpm && \ + curl -Lo source.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/aarch64/getPackageSource/kernel-uek-4.14.35-2047.527.2.el7uek.src.rpm && \ + mkdir src && \ + cd src && \ + rpm2cpio ../source.rpm > source.cpio && \ + cpio -idmv < ./source.cpio && \ + tar -xaf linux-4.14.35.tar.bz2 && \ + cd .. && \ + find src -name 'virtio_mmio.c' -exec cp -v {} . \; && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + sed -ie 's/virtio-mmio/my-virtio-mmio/g' virtio_mmio.c && \ + mkdir -p /opt/oracle/oracle-armtoolset-1/root/bin/ && \ + ln -s /usr/bin/gcc /opt/oracle/oracle-armtoolset-1/root/bin/gcc && \ + ln -s /usr/bin/ld /opt/oracle/oracle-armtoolset-1/root/bin/ld && \ + ln -s /usr/bin/nm /opt/oracle/oracle-armtoolset-1/root/bin/nm && \ + ln -s /usr/bin/objdump /opt/oracle/oracle-armtoolset-1/root/bin/objdump && \ + ln -s /usr/bin/objcopy /opt/oracle/oracle-armtoolset-1/root/bin/objcopy && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/4.14.35-2047.527.2.el7uek.aarch64/" make + +FROM initrd-builder:0.0.1 AS stage2 + +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/aarch64/oraclelinux/4.14/dev.repo b/images/aarch64/oraclelinux/4.14/dev.repo new file mode 100644 index 0000000..afd3ce4 --- /dev/null +++ b/images/aarch64/oraclelinux/4.14/dev.repo @@ -0,0 +1,6 @@ +[developer] +name=Packages for test and development - Oracle Linux 7 +baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/developer/$basearch +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle +gpgcheck=1 +enabled=1 diff --git a/images/aarch64/oraclelinux/5.15/Dockerfile b/images/aarch64/oraclelinux/5.15/Dockerfile new file mode 100644 index 0000000..e90ec1d --- /dev/null +++ b/images/aarch64/oraclelinux/5.15/Dockerfile @@ -0,0 +1,35 @@ +FROM oraclelinux:9 + +ARG VERSION=5.15.0-8.91.4.1 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL9/baseos/latest/aarch64' +ARG ARCH='aarch64' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-core-${VERSION}.el9uek.${ARCH}.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el9uek.${ARCH}.rpm && \ + curl -L -o modules.rpm ${URL}/getPackage/kernel-uek-modules-${VERSION}.el9uek.${ARCH}.rpm && \ + curl -L -o bpftool.rpm ${URL}/getPackage/bpftool-${VERSION}.el9uek.${ARCH}.rpm && \ + yum install -y ./kernel.rpm ./devel.rpm ./modules.rpm ./bpftool.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + curl -LO https://cmake.org/files/v3.19/cmake-3.19.8-Linux-aarch64.tar.gz && \ + tar -xaf cmake-3.19.8-Linux-aarch64.tar.gz && \ + rm -vf cmake-3.19.8-Linux-aarch64.tar.gz && \ + mv cmake-3.19.8-Linux-aarch64 /opt/cmake-3.19.8 && \ + ln -sf /opt/cmake-3.19.8/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/5.15.0-8.91.4.1.el9uek.${ARCH}/ && \ + ln -s /usr/src/kernels/5.15.0-8.91.4.1.el9uek.${ARCH}/ /lib/modules/5.15.0-8.91.4.1.el9uek.${ARCH}/build diff --git a/images/aarch64/oraclelinux/5.15/Dockerfile.kernel b/images/aarch64/oraclelinux/5.15/Dockerfile.kernel new file mode 100644 index 0000000..a8016e7 --- /dev/null +++ b/images/aarch64/oraclelinux/5.15/Dockerfile.kernel @@ -0,0 +1,52 @@ +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION=5.15.0-8.91.4.1 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL9/baseos/latest/aarch64' +ARG ARCH='aarch64' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-core-${VERSION}.el9uek.${ARCH}.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el9uek.${ARCH}.rpm && \ + curl -L -o modules.rpm ${URL}/getPackage/kernel-uek-modules-${VERSION}.el9uek.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio devel.rpm > devel.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../devel.cpio && \ + cpio -idmv < ../modules.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + find ./extracted/ -name 'vmlinuz*' -exec cp -v {} extracted/vmlinux \; + +FROM oraclelinux:9 as kmod-builder + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.15/drivers/virtio/virtio_mmio.c' && \ + sed -ie 's/virtio-mmio/my-virtio-mmio/g' virtio_mmio.c && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/5.15.0-8.91.4.1.el9uek.aarch64/" make + +FROM initrd-builder:0.0.1 AS stage2 + +#RUN mkdir -p /home/ubuntu/out + +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +#COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/out/test.ko +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/aarch64/ubuntu/6.3/Dockerfile b/images/aarch64/ubuntu/6.3/Dockerfile new file mode 100644 index 0000000..083f27b --- /dev/null +++ b/images/aarch64/ubuntu/6.3/Dockerfile @@ -0,0 +1,51 @@ +FROM ubuntu:23.04 + +ARG VERSION=6.3.0-7 +ARG URL='http://ports.ubuntu.com/ubuntu-ports/pool/main/l/linux/' + +WORKDIR /home/ubuntu + +RUN apt-get update && apt-get install -y \ + build-essential \ + clang \ + cmake \ + curl \ + curl \ + dbus \ + git \ + iproute2 \ + iputils-ping \ + kmod \ + libcap-dev \ + libelf-dev \ + llvm \ + net-tools \ + openssh-server \ + rng-tools \ + rsync \ + sudo \ + systemd \ + udev \ + wget && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + curl ${URL} | \ + grep -E "linux-headers-${VERSION}|linux-tools-${VERSION}" | \ + grep "arm64" | \ + grep -v "64k" | \ + cut -d\" -f8 | \ + xargs -I@ curl -LO ${URL}@ && \ + curl ${URL} | \ + grep -E "linux-headers-${VERSION}|linux-tools-common-${VERSION}" | \ + grep -E "_all.deb" | \ + grep -v "64k" | \ + cut -d\" -f8 | \ + xargs -I@ curl -LO ${URL}@ && \ + find . -name '*.deb' | xargs -n1 dpkg -i --force-depends && \ + rm -f *.deb && \ + find /usr/lib/linux-tools/ -name bpftool -exec ln -s {} /usr/bin/bpftool \; && \ + sed -ie '/^ConditionVirtualization.*/d' /lib/systemd/system/systemd-timesyncd.service && \ + echo "" > /etc/machine-id && echo "" > /var/lib/dbus/machine-id && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/aarch64/ubuntu/6.3/Dockerfile.kernel b/images/aarch64/ubuntu/6.3/Dockerfile.kernel new file mode 100644 index 0000000..24c94d5 --- /dev/null +++ b/images/aarch64/ubuntu/6.3/Dockerfile.kernel @@ -0,0 +1,30 @@ +FROM initrd-builder:0.0.1 AS builder + +ARG VERSION=6.3.0-7-generic +ARG URL='http://ports.ubuntu.com/ubuntu-ports/pool/main/l/linux/' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl ${URL} | \ + grep 'arm64' | \ + grep -v '64k' | \ + grep -oE "linux-image-unsigned-${VERSION}.*deb\"|linux-modules-${VERSION}.*deb\"" | \ + tr -d '"' | \ + xargs -I@ curl -LO ${URL}@ && \ + ls -lah && \ + mkdir extracted && \ + ls *deb | \ + xargs -I@ dpkg -x @ extracted && \ + find extracted -name 'vmlinuz*' | \ + xargs -I@ mv @ extracted/vmlinux.gz && \ + gunzip extracted/vmlinux.gz && \ + cd extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=builder /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=builder /home/ubuntu//out/initrd /boot/ +COPY --from=builder /home/ubuntu/.placeholder /lib/modules/ + diff --git a/images/builder/Dockerfile b/images/builder/Dockerfile new file mode 100644 index 0000000..c51d90f --- /dev/null +++ b/images/builder/Dockerfile @@ -0,0 +1,35 @@ +FROM centos:7 + +COPY /dhclient.service /usr/lib/systemd/system/ + +RUN yum -y install centos-release-scl && \ + yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ && \ + source /opt/rh/devtoolset-9/enable && \ + yum install -y \ + cmake \ + curl \ + dhclient \ + gcc \ + git \ + iproute \ + libcap-devel \ + libstdc++ \ + m4 \ + make \ + openssh-server \ + rpm-build \ + rsync \ + systemd \ + tar \ + wget && \ + curl -L -o /tmp/cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.22.5/cmake-3.22.5-linux-$(uname -m).tar.gz && \ + gzip -d /tmp/cmake.tar.gz && \ + tar -xpf /tmp/cmake.tar --directory=/tmp && \ + cp -R /tmp/cmake-3.22.5-linux-$(uname -m)/* /usr && \ + rm -rf /tmp/cmake-3.22.5-linux-$(uname -m) cmake.tar && \ + yum clean all && \ + rm -rf /var/cache/yum /usr/man /usr/doc && \ + systemctl enable dhclient && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/builder/Dockerfile.kernel b/images/builder/Dockerfile.kernel new file mode 100644 index 0000000..77adc44 --- /dev/null +++ b/images/builder/Dockerfile.kernel @@ -0,0 +1 @@ +FROM weaveworks/ubuntu-kernel:5.14.16 diff --git a/images/builder/dhclient.service b/images/builder/dhclient.service new file mode 100644 index 0000000..373c458 --- /dev/null +++ b/images/builder/dhclient.service @@ -0,0 +1,12 @@ +[Unit] +Description=DHCP Client +Wants=network.target +Before=network.target + +[Service] +Type=forking +PIDFile=/run/dhclient.pid +ExecStart=/usr/sbin/dhclient + +[Install] +WantedBy=multi-user.target diff --git a/images/initrd-builder/Dockerfile b/images/initrd-builder/Dockerfile new file mode 100644 index 0000000..02de423 --- /dev/null +++ b/images/initrd-builder/Dockerfile @@ -0,0 +1,33 @@ +FROM busybox:stable AS initrd-base + +FROM ubuntu:22.04 + +WORKDIR /home/ubuntu/ + +RUN mkdir -p /home/ubuntu/out/ + +COPY --from=initrd-base / /home/ubuntu/out/ + +ADD create.sh Makefile.virtio_mmio /opt/initrd-builder/ + +RUN apt update && \ + apt install -y \ + build-essential \ + libelf-dev \ + gcc \ + kmod \ + xz-utils \ + p7zip-full \ + rpm2cpio \ + curl \ + cpio \ + binutils \ + bzip2 \ + gzip \ + lzop \ + lz4 \ + zstd && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + curl -Lo /usr/bin/extract-vmlinux https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux && \ + chmod +x /usr/bin/extract-vmlinux diff --git a/images/initrd-builder/Makefile.virtio_mmio b/images/initrd-builder/Makefile.virtio_mmio new file mode 100644 index 0000000..32dea1f --- /dev/null +++ b/images/initrd-builder/Makefile.virtio_mmio @@ -0,0 +1,23 @@ +obj-m +=virtio_mmio.o + +# Compiler flags +EXTRA_CFLAGS := -DCONFIG_VIRTIO_MMIO_CMDLINE_DEVICES + +# Name of the kernel module +MODULE_NAME := virtio_mmio + +KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build + +# Default target +all: $(MODULE_NAME).ko + +# Rule to build the kernel module +$(MODULE_NAME).ko: $(MODULE_PATH) + $(MAKE) -C $(KERNEL_DIR) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" M=$(PWD) modules + +# Rule to clean the kernel module +clean: + rm -rf *.o *.ko *.mod.* *.symvers *.order *.mod .* + +.PHONY: all clean + diff --git a/images/initrd-builder/create.sh b/images/initrd-builder/create.sh new file mode 100755 index 0000000..9e61261 --- /dev/null +++ b/images/initrd-builder/create.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +LIBPATH=${1:-.} +OUTDIR=/home/ubuntu/out + +MODULES=( virtio_mmio virtio_blk virtio_net ext4 crc32c ) +UNAMER=$(ls ${LIBPATH}/lib/modules/ | head -n1) + +NEWMOD='../virtio_mmio.ko' +OLDMOD=$(find ${LIBPATH} -name virtio_mmio.ko) + +if [[ -f ${NEWMOD} ]]; then + >&2 echo 'Copying virtio_mmio new module' + cp -vf ${NEWMOD} ${OLDMOD} || { + mkdir -p ${OUTDIR}/lib/modules/${UNAMER}/kernel/drivers/virtio/ + cp -vf ${NEWMOD} ${OUTDIR}/lib/modules/${UNAMER}/kernel/drivers/virtio/ + } +fi + +>&2 echo LIBPATH=$LIBPATH +>&2 echo UNAMER=$UNAMER +depmod -b ${LIBPATH} ${UNAMER} + +mkdir -p ${OUTDIR}/lib/modules/${UNAMER} +#cp -a ${LIBPATH}/lib/modules/${UNAMER}/* ${OUTDIR}/lib/modules/${UNAMER}/ + +cd $LIBPATH + +readarray MODULES_PATH < <( + for MODULE in ${MODULES[@]}; do + >&2 echo listing deps of module $MODULE + modprobe -d . -S ${UNAMER} -n --show-depends ${MODULE} | grep -Ev '^builtin' | cut -d. -f2- + done +) +for MODULE_PATH in ${MODULES_PATH[@]}; do + mkdir -p ${OUTDIR}/$(dirname ${MODULE_PATH}) + echo cp ./$MODULE_PATH ${OUTDIR}/$(dirname ${MODULE_PATH}) + cp ./$MODULE_PATH ${OUTDIR}/$(dirname ${MODULE_PATH}) +done + +mkdir -p ${OUTDIR}/{bin,dev,etc,lib,lib64,mnt,proc,root,sbin,sys} +cp -a /dev/{null,console,tty} ${OUTDIR}/dev/ + +cat < ${OUTDIR}/init +#!/bin/busybox sh + +mount -t proc none /proc +mount -t sysfs none /sys +mount -t devtmpfs dev /dev + +# Load essential modules +depmod + +if grep -q NOMODULES /proc/cmdline ; then + echo "skipping kmods" +else + +EOF + +for MODULE in ${MODULES[@]}; do + if [[ $MODULE == 'virtio_mmio' ]]; then + echo -e "\tmodprobe $MODULE"' $(cat /proc/cmdline | grep -o "device=[^\ ]*" | paste -s)' + else + echo -e "\tmodprobe $MODULE" + fi +done >> ${OUTDIR}/init + +cat <> ${OUTDIR}/init + +fi + +# Mount the root filesystem. +mount /dev/vda /mnt/ + +# TODO: add support for static ip from cmdline +# e.g.: ifconfig eth0 10.0.2.15 +ifconfig eth0 up +udhcpc -t 5 -q -s /bin/simple.script + +if [ -L /mnt/etc/resolv.conf ]; then + unlink /mnt/etc/resolv.conf + cat /etc/resolv.conf > /mnt/etc/resolv.conf +fi + +if grep -q DEBUG /proc/cmdline ; then + exec /bin/sh +else + # Clean up. + umount /proc + umount /sys + + # Boot the real thing. + exec switch_root /mnt/ /sbin/init +fi +EOF + +chmod +x ${OUTDIR}/init + +curl -L -o ${OUTDIR}/bin/simple.script https://git.busybox.net/busybox/plain/examples/udhcp/simple.script +chmod +x ${OUTDIR}/bin/simple.script + +cd ${OUTDIR} + +find . -print0 | cpio --null --create --verbose --format=newc > initrd +cd - + diff --git a/images/modernprobe-builder/Dockerfile b/images/modernprobe-builder/Dockerfile new file mode 100644 index 0000000..0dcaceb --- /dev/null +++ b/images/modernprobe-builder/Dockerfile @@ -0,0 +1,29 @@ +FROM fedora:latest + +COPY /dhclient.service /usr/lib/systemd/system/ + +RUN dnf install -y \ + autoconf \ + automake \ + automake \ + bpftool \ + ca-certificates \ + clang \ + cmake \ + dhclient \ + gcc \ + gcc-c++ \ + git \ + iproute \ + libbpf-devel \ + make \ + openssh-server \ + pkg-config \ + rsync \ + systemd && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + systemctl enable dhclient && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/modernprobe-builder/Dockerfile.kernel b/images/modernprobe-builder/Dockerfile.kernel new file mode 100644 index 0000000..77adc44 --- /dev/null +++ b/images/modernprobe-builder/Dockerfile.kernel @@ -0,0 +1 @@ +FROM weaveworks/ubuntu-kernel:5.14.16 diff --git a/images/modernprobe-builder/dhclient.service b/images/modernprobe-builder/dhclient.service new file mode 100644 index 0000000..373c458 --- /dev/null +++ b/images/modernprobe-builder/dhclient.service @@ -0,0 +1,12 @@ +[Unit] +Description=DHCP Client +Wants=network.target +Before=network.target + +[Service] +Type=forking +PIDFile=/run/dhclient.pid +ExecStart=/usr/sbin/dhclient + +[Install] +WantedBy=multi-user.target diff --git a/images/x86_64/amazonlinux2/4.19/Dockerfile b/images/x86_64/amazonlinux2/4.19/Dockerfile new file mode 100644 index 0000000..58b49db --- /dev/null +++ b/images/x86_64/amazonlinux2/4.19/Dockerfile @@ -0,0 +1,45 @@ +FROM amazonlinux:2 + +ARG VERSION=4.19.84-33.70 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-ng/latest/x86_64' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc10 \ + gcc10-c++ \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}/@ && \ + yum install -y ./*.rpm && \ + rm -v ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.amzn2.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.amzn2.x86_64/ /lib/modules/${VERSION}.amzn2.x86_64/build && \ + rm -vf /usr/bin/gcc /usr/bin/g++ && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc10-gcc 100 --slave /usr/bin/g++ g++ /usr/bin/gcc10-c++ && \ + update-alternatives --auto gcc && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/amazonlinux2/4.19/Dockerfile.kernel b/images/x86_64/amazonlinux2/4.19/Dockerfile.kernel new file mode 100644 index 0000000..537a581 --- /dev/null +++ b/images/x86_64/amazonlinux2/4.19/Dockerfile.kernel @@ -0,0 +1,56 @@ +ARG VERSION=4.19.84-33.70 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-ng/latest/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz-*') > extracted/vmlinux + +FROM amazonlinux:2 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v4.19/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/${VERSION}.amzn2.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/amazonlinux2/5.10/Dockerfile b/images/x86_64/amazonlinux2/5.10/Dockerfile new file mode 100644 index 0000000..df18f97 --- /dev/null +++ b/images/x86_64/amazonlinux2/5.10/Dockerfile @@ -0,0 +1,45 @@ +FROM amazonlinux:2 + +ARG VERSION=5.10.184-175.749 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.10/latest/x86_64' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc10 \ + gcc10-c++ \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}/@ && \ + yum install -y ./*.rpm && \ + rm -v ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.amzn2.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.amzn2.x86_64/ /lib/modules/${VERSION}.amzn2.x86_64/build && \ + rm -vf /usr/bin/gcc /usr/bin/g++ && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc10-gcc 100 --slave /usr/bin/g++ g++ /usr/bin/gcc10-c++ && \ + update-alternatives --auto gcc && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/amazonlinux2/5.10/Dockerfile.kernel b/images/x86_64/amazonlinux2/5.10/Dockerfile.kernel new file mode 100644 index 0000000..bea40cd --- /dev/null +++ b/images/x86_64/amazonlinux2/5.10/Dockerfile.kernel @@ -0,0 +1,57 @@ +ARG VERSION=5.10.184-175.749 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.10/latest/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz-*') > extracted/vmlinux + +FROM amazonlinux:2 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc10 && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.10/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/${VERSION}.amzn2.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/amazonlinux2/5.15/Dockerfile b/images/x86_64/amazonlinux2/5.15/Dockerfile new file mode 100644 index 0000000..ea6b966 --- /dev/null +++ b/images/x86_64/amazonlinux2/5.15/Dockerfile @@ -0,0 +1,45 @@ +FROM amazonlinux:2 + +ARG VERSION=5.15.117-73.143 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.15/latest/x86_64' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc10 \ + gcc10-c++ \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}/@ && \ + yum install -y ./*.rpm && \ + rm -v ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.amzn2.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.amzn2.x86_64/ /lib/modules/${VERSION}.amzn2.x86_64/build && \ + rm -vf /usr/bin/gcc /usr/bin/g++ && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc10-gcc 100 --slave /usr/bin/g++ g++ /usr/bin/gcc10-c++ && \ + update-alternatives --auto gcc && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/amazonlinux2/5.15/Dockerfile.kernel b/images/x86_64/amazonlinux2/5.15/Dockerfile.kernel new file mode 100644 index 0000000..af38f6a --- /dev/null +++ b/images/x86_64/amazonlinux2/5.15/Dockerfile.kernel @@ -0,0 +1,57 @@ +ARG VERSION=5.15.117-73.143 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.15/latest/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz-*') > extracted/vmlinux + +FROM amazonlinux:2 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc10 && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.15/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/${VERSION}.amzn2.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/amazonlinux2/5.4/Dockerfile b/images/x86_64/amazonlinux2/5.4/Dockerfile new file mode 100644 index 0000000..91bc9f9 --- /dev/null +++ b/images/x86_64/amazonlinux2/5.4/Dockerfile @@ -0,0 +1,45 @@ +FROM amazonlinux:2 + +ARG VERSION=5.4.247-162.350 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.4/latest/x86_64' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc10 \ + gcc10-c++ \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}/@ && \ + yum install -y ./*.rpm && \ + rm -v ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.amzn2.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.amzn2.x86_64/ /lib/modules/${VERSION}.amzn2.x86_64/build && \ + rm -vf /usr/bin/gcc /usr/bin/g++ && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc10-gcc 100 --slave /usr/bin/g++ g++ /usr/bin/gcc10-c++ && \ + update-alternatives --auto gcc && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/amazonlinux2/5.4/Dockerfile.kernel b/images/x86_64/amazonlinux2/5.4/Dockerfile.kernel new file mode 100644 index 0000000..c3b9120 --- /dev/null +++ b/images/x86_64/amazonlinux2/5.4/Dockerfile.kernel @@ -0,0 +1,56 @@ +ARG VERSION=5.4.247-162.350 +ARG URL='http://amazonlinux.us-east-1.amazonaws.com/2/extras/kernel-5.4/latest/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"/repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}/@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}/@ && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz-*') > extracted/vmlinux + +FROM amazonlinux:2 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.4/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/${VERSION}.amzn2.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/amazonlinux2022/5.15/Dockerfile b/images/x86_64/amazonlinux2022/5.15/Dockerfile new file mode 100644 index 0000000..cb9013e --- /dev/null +++ b/images/x86_64/amazonlinux2022/5.15/Dockerfile @@ -0,0 +1,38 @@ +FROM amazonlinux:2022 + +ARG VERSION=5.15.73-45 +ARG URL='https://al2022-repos-us-east-1-9761ab97.s3.dualstack.us-east-1.amazonaws.com/core/mirrors/latest/x86_64' + + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y \ + binutils-devel \ + clang \ + cmake \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}@ && \ + grep -E 'bpftool-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo bpftool.rpm ${URL}@ && \ + dnf install -y ./*.rpm && \ + rm -vf ./*.rpm && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + mkdir -p /lib/modules/5.15.73-45.135.amzn2022.x86_64/ && \ + ln -s /usr/src/kernels/5.15.73-45.135.amzn2022.x86_64/ /lib/modules/5.15.73-45.135.amzn2022.x86_64/build && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/amazonlinux2022/5.15/Dockerfile.kernel b/images/x86_64/amazonlinux2022/5.15/Dockerfile.kernel new file mode 100644 index 0000000..f85f0dc --- /dev/null +++ b/images/x86_64/amazonlinux2022/5.15/Dockerfile.kernel @@ -0,0 +1,56 @@ +ARG VERSION=5.15.73-45 +ARG URL='https://al2022-repos-us-east-1-9761ab97.s3.dualstack.us-east-1.amazonaws.com/core/mirrors/latest/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm "${URL}@" && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + extract-vmlinux $(find ./extracted/lib/modules -name vmlinuz) > extracted/vmlinux + +FROM amazonlinux:2023 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.15/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/5.15.73-45.135.amzn2022.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/amazonlinux2023/6.1/Dockerfile b/images/x86_64/amazonlinux2023/6.1/Dockerfile new file mode 100644 index 0000000..82694e4 --- /dev/null +++ b/images/x86_64/amazonlinux2023/6.1/Dockerfile @@ -0,0 +1,38 @@ +FROM amazonlinux:2023 + +ARG VERSION=6.1.34-58 +ARG URL='https://cdn.amazonlinux.com/al2023/core/mirrors/latest/x86_64' + + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y \ + binutils-devel \ + clang \ + cmake \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-headers-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm ${URL}@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo sources.rpm ${URL}@ && \ + grep -E 'bpftool-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo bpftool.rpm ${URL}@ && \ + dnf install -y ./headers.rpm ./bpftool.rpm ./sources.rpm && \ + rm -vf ./headers.rpm ./bpftool.rpm ./sources.rpm && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + mkdir -p /lib/modules/6.1.34-58.102.amzn2023.x86_64/ && \ + ln -s /usr/src/kernels/6.1.34-58.102.amzn2023.x86_64/ /lib/modules/6.1.34-58.102.amzn2023.x86_64/build && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/amazonlinux2023/6.1/Dockerfile.kernel b/images/x86_64/amazonlinux2023/6.1/Dockerfile.kernel new file mode 100644 index 0000000..c0cc619 --- /dev/null +++ b/images/x86_64/amazonlinux2023/6.1/Dockerfile.kernel @@ -0,0 +1,56 @@ +ARG VERSION=6.1.34-58 +ARG URL='https://cdn.amazonlinux.com/al2023/core/mirrors/latest/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -sLO "$URL"/mirror.list && \ + URL=$(cat mirror.list) && \ + curl -sLO "${URL}"repodata/primary.xml.gz && \ + gunzip primary.xml.gz && \ + grep -E 'kernel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo kernel.rpm ${URL}@ && \ + grep -E 'kernel-devel-'${VERSION}'.*.rpm' primary.xml | grep href | cut -d\" -f2 | \ + xargs -I@ curl -Lo headers.rpm "${URL}@" && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cd .. && \ + extract-vmlinux $(find ./extracted/lib/modules -name vmlinuz) > extracted/vmlinux + +FROM amazonlinux:2023 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v6.1/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/6.1.34-58.102.amzn2023.${ARCH}/" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/archlinux/5.18/Dockerfile b/images/x86_64/archlinux/5.18/Dockerfile new file mode 100644 index 0000000..d783ff0 --- /dev/null +++ b/images/x86_64/archlinux/5.18/Dockerfile @@ -0,0 +1,30 @@ +FROM archlinux:base + +WORKDIR /home/ubuntu + +RUN echo 'Server=https://archive.archlinux.org/repos/2022/08/04/$repo/os/$arch' > /etc/pacman.d/mirrorlist && \ +pacman -Syyu --noconfirm && \ + pacman -S --noconfirm \ + bpf \ + clang \ + cmake \ + gcc \ + git \ + libcap \ + linux-headers \ + llvm \ + make \ + openssh \ + python \ + rsync \ + wget && \ + yes | pacman -Scc && \ + ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime && \ + echo 'LANG=en_US.UTF-8' > /etc/locale.gen && \ + locale-gen && \ + echo 'LANG=en_US.UTF-8' > /etc/locale.conf && \ + echo 'archlinux' > /etc/hostname && \ + systemctl enable sshd && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/archlinux/5.18/Dockerfile.kernel b/images/x86_64/archlinux/5.18/Dockerfile.kernel new file mode 100644 index 0000000..40cf0c5 --- /dev/null +++ b/images/x86_64/archlinux/5.18/Dockerfile.kernel @@ -0,0 +1,29 @@ +ARG VERSION +ARG URL +ARG ARCH + +FROM initrd-builder:0.0.1 AS builder + +ARG VERSION=linux-5.18.16.arch1-1 +ARG URL='https://archive.archlinux.org/packages/l' +ARG ARCH=x86_64 + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.pkg.tar.zst ${URL}/linux/linux-${VERSION}-${ARCH}.pkg.tar.zst && \ + curl -Lo headers.pkg.tar.zst ${URL}/linux-headers/linux-headers-${VERSION}-${ARCH}.pkg.tar.zst && \ + mkdir extracted && \ + cd extracted && \ + ls ../*.tar.zst | \ + xargs -I@ tar -xaf @ && \ + find . -name '*.zst' -exec zstd -d --rm -f {} \; && \ + mv ./usr/lib . && \ + extract-vmlinux $(find . -name 'vmlinux') > vmlinux && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=builder /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=builder /home/ubuntu/out/initrd /boot/ +COPY --from=builder /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/archlinux/6.0/Dockerfile b/images/x86_64/archlinux/6.0/Dockerfile new file mode 100644 index 0000000..dd9b49e --- /dev/null +++ b/images/x86_64/archlinux/6.0/Dockerfile @@ -0,0 +1,35 @@ +FROM archlinux:base + +ARG VERSION=6.0.12.arch1-1 +ARG URL='https://archive.archlinux.org/packages' + +WORKDIR /home/ubuntu + +RUN pacman -Syyu --noconfirm && \ + pacman -S --noconfirm \ + clang \ + cmake \ + gcc \ + git \ + libcap \ + llvm \ + make \ + openssh \ + python \ + rsync \ + wget && \ + yes | pacman -Scc && \ + curl -Lo headers.tar.zst ${URL}/l/linux-headers/linux-headers-${VERSION}-x86_64.pkg.tar.zst && \ + curl -Lo bpf.tar.zst ${URL}/b/bpf/bpf-6.0-2-x86_64.pkg.tar.zst && \ + pacman -U --noconfirm ./headers.tar.zst && \ + pacman -U --noconfirm ./bpf.tar.zst && \ + rm -v ./headers.tar.zst ./bpf.tar.zst && \ + ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime && \ + echo 'LANG=en_US.UTF-8' > /etc/locale.gen && \ + locale-gen && \ + echo 'LANG=en_US.UTF-8' > /etc/locale.conf && \ + echo 'archlinux' > /etc/hostname && \ + systemctl enable sshd && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/archlinux/6.0/Dockerfile.kernel b/images/x86_64/archlinux/6.0/Dockerfile.kernel new file mode 100644 index 0000000..b591d57 --- /dev/null +++ b/images/x86_64/archlinux/6.0/Dockerfile.kernel @@ -0,0 +1,29 @@ +ARG VERSION +ARG URL +ARG ARCH + +FROM initrd-builder:0.0.1 AS builder + +ARG VERSION=6.0.12.arch1-1 +ARG URL='https://archive.archlinux.org/packages/l' +ARG ARCH=x86_64 + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.pkg.tar.zst ${URL}/linux/linux-${VERSION}-${ARCH}.pkg.tar.zst && \ + curl -Lo headers.pkg.tar.zst ${URL}/linux-headers/linux-headers-${VERSION}-${ARCH}.pkg.tar.zst && \ + mkdir extracted && \ + cd extracted && \ + ls ../*.tar.zst | \ + xargs -I@ tar -xaf @ && \ + find . -name '*.zst' -exec zstd -d --rm -f {} \; && \ + mv ./usr/lib . && \ + extract-vmlinux $(find . -name 'vmlinux') > vmlinux && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=builder /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=builder /home/ubuntu/out/initrd /boot/ +COPY --from=builder /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/centos/3.10/Dockerfile b/images/x86_64/centos/3.10/Dockerfile new file mode 100644 index 0000000..bf26cce --- /dev/null +++ b/images/x86_64/centos/3.10/Dockerfile @@ -0,0 +1,34 @@ +FROM centos:centos7.9.2009 + +ARG VERSION=3.10.0-1160 +ARG BASEOS_URL='http://mirror.centos.org/centos/7.9.2009/os/x86_64/Packages' + +RUN yum group install -y "Development Tools" && \ + yum install -y \ + cmake \ + curl \ + gcc \ + git \ + iproute \ + libcap-devel \ + libstdc++ \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -Lo headers.rpm ${BASEOS_URL}/kernel-devel-${VERSION}.el7.x86_64.rpm && \ + yum install -y ./headers.rpm && \ + rm -f ./headers.rpm && \ + mkdir -p /lib/modules/${VERSION}.el7.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.el7.x86_64/ /lib/modules/${VERSION}.el7.x86_64/build && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + yum clean all && \ + rm -rf /var/cache/yum && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/centos/3.10/Dockerfile.kernel b/images/x86_64/centos/3.10/Dockerfile.kernel new file mode 100644 index 0000000..111c4a4 --- /dev/null +++ b/images/x86_64/centos/3.10/Dockerfile.kernel @@ -0,0 +1,59 @@ +ARG VERSION=3.10.0-1160 +ARG BASEOS_URL='http://mirror.centos.org/centos/7.9.2009/os/x86_64/Packages' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG BASEOS_URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.rpm ${BASEOS_URL}/kernel-${VERSION}.el7.x86_64.rpm && \ + curl -Lo headers.rpm ${BASEOS_URL}/kernel-devel-${VERSION}.el7.x86_64.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz*') > extracted/vmlinux + +FROM centos:centos7.9.2009 as kmod-builder + +ARG VERSION +ARG BASEOS_URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + mkdir src && \ + cd src && \ + curl -Lo source.rpm 'https://archive.kernel.org/centos-vault/7.9.2009/os/Source/SPackages/kernel-3.10.0-1160.el7.src.rpm' && \ + rpm2cpio source.rpm > source.cpio && \ + cpio -idmv < source.cpio && \ + tar -xaf 'linux-3.10.0-1160.el7.tar.xz' && \ + cd .. && \ + find src -name 'virtio_mmio.c' -exec cp -v {} . \; && \ + KERNEL_DIR='/home/ubuntu/extracted/usr/src/kernels/3.10.0-1160.el7.x86_64/' make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + ls -lah /home/ubuntu/ && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/centos/4.18/Dockerfile b/images/x86_64/centos/4.18/Dockerfile new file mode 100644 index 0000000..6959df5 --- /dev/null +++ b/images/x86_64/centos/4.18/Dockerfile @@ -0,0 +1,29 @@ +FROM quay.io/centos/centos:stream8 + +ARG VERSION=4.18.0-497 +ARG BASEOS_URL='http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages' + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y --allowerasing \ + clang \ + cmake \ + curl \ + git \ + iproute \ + libcap-devel \ + llvm \ + openssh-server \ + rsync \ + systemd && \ + curl -Lo headers.rpm ${BASEOS_URL}/kernel-devel-${VERSION}.el8.x86_64.rpm && \ + curl -Lo bpftool.rpm ${BASEOS_URL}/bpftool-${VERSION}.el8.x86_64.rpm && \ + dnf install -y ./*.rpm && \ + rm -v ./*.rpm && \ + mkdir -p /lib/modules/${VERSION}.el8.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.el8.x86_64/ /lib/modules/${VERSION}.el8.x86_64/build && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + mkdir -p /lib/modules/${VERSION}.fc38.x86_64 && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/centos/4.18/Dockerfile.kernel b/images/x86_64/centos/4.18/Dockerfile.kernel new file mode 100644 index 0000000..6576487 --- /dev/null +++ b/images/x86_64/centos/4.18/Dockerfile.kernel @@ -0,0 +1,58 @@ +ARG VERSION=4.18.0-497 +ARG BASEOS_URL='http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG BASEOS_URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.rpm ${BASEOS_URL}/kernel-${VERSION}.el8.${ARCH}.rpm && \ + curl -Lo modules.rpm ${BASEOS_URL}/kernel-modules-${VERSION}.el8.${ARCH}.rpm && \ + curl -Lo core.rpm ${BASEOS_URL}/kernel-core-${VERSION}.el8.${ARCH}.rpm && \ + curl -Lo headers.rpm ${BASEOS_URL}/kernel-devel-${VERSION}.el8.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + rpm2cpio core.rpm > core.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../modules.cpio && \ + cpio -idmv < ../core.cpio && \ + cpio -idmv < ../headers.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz*') > extracted/vmlinux + +FROM quay.io/centos/centos:stream8 as kmod-builder + +ARG VERSION +ARG BASEOS_URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-8/-/raw/c8s/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/4.18.0-497.el8.x86_64" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + ls -lah /home/ubuntu/ && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/centos/5.14/Dockerfile b/images/x86_64/centos/5.14/Dockerfile new file mode 100644 index 0000000..43db49b --- /dev/null +++ b/images/x86_64/centos/5.14/Dockerfile @@ -0,0 +1,30 @@ +FROM quay.io/centos/centos:stream9 + +ARG VERSION=5.14.0-325 +ARG BASEOS_URL='https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages' +ARG APPSTR_URL='http://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages' + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y --allowerasing \ + clang \ + cmake \ + curl \ + git \ + iproute \ + libcap-devel \ + llvm \ + openssh-server \ + rsync \ + systemd && \ + curl -Lo headers.rpm ${APPSTR_URL}/kernel-devel-${VERSION}.el9.x86_64.rpm && \ + curl -Lo bpftool.rpm ${BASEOS_URL}/bpftool-7.1.0-325.el9.x86_64.rpm && \ + dnf install -y ./*.rpm && \ + rm -v ./*.rpm && \ + mkdir -p /lib/modules/${VERSION}.el9.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.el9.x86_64/ /lib/modules/${VERSION}.el9.x86_64/build && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + mkdir -p /lib/modules/${VERSION}.fc38.x86_64 && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/centos/5.14/Dockerfile.kernel b/images/x86_64/centos/5.14/Dockerfile.kernel new file mode 100644 index 0000000..a02ff8d --- /dev/null +++ b/images/x86_64/centos/5.14/Dockerfile.kernel @@ -0,0 +1,60 @@ +ARG VERSION=5.14.0-325 +ARG BASEOS_URL='https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages' +ARG APPSTR_URL='http://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG BASEOS_URL +ARG APPSTR_URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.rpm ${BASEOS_URL}/kernel-${VERSION}.el9.${ARCH}.rpm && \ + curl -Lo modules.rpm ${BASEOS_URL}/kernel-modules-core-${VERSION}.el9.${ARCH}.rpm && \ + curl -Lo core.rpm ${BASEOS_URL}/kernel-core-${VERSION}.el9.${ARCH}.rpm && \ + curl -Lo headers.rpm ${APPSTR_URL}/kernel-devel-${VERSION}.el9.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + rpm2cpio core.rpm > core.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../modules.cpio && \ + cpio -idmv < ../core.cpio && \ + cpio -idmv < ../headers.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz*') > extracted/vmlinux + +FROM quay.io/centos/centos:stream9 as kmod-builder + +ARG VERSION +ARG BASEOS_URL +ARG APPSTR_URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/raw/main/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/5.14.0-325.el9.x86_64" make + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/fedora/5.17/Dockerfile b/images/x86_64/fedora/5.17/Dockerfile new file mode 100644 index 0000000..90e4ae2 --- /dev/null +++ b/images/x86_64/fedora/5.17/Dockerfile @@ -0,0 +1,28 @@ +FROM fedora:36 + +ARG VERSION=5.17.5-300 +ARG HVERSION=5.17.0-300 +ARG URL='https://mirrors.kernel.org/fedora/releases/36/Everything/x86_64/os/Packages' + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y \ + clang \ + cmake \ + iproute \ + libcap-devel \ + llvm \ + openssh-server \ + rsync \ + systemd && \ + curl -Lo bpftool.rpm ${URL}/b/bpftool-${HVERSION}.fc36.x86_64.rpm && \ + curl -Lo sources.rpm ${URL}/k/kernel-devel-${VERSION}.fc36.x86_64.rpm && \ + curl -Lo headers.rpm ${URL}/k/kernel-headers-${HVERSION}.fc36.x86_64.rpm && \ + dnf install -y ./*.rpm && \ + rm -v ./*.rpm && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + mkdir -p /lib/modules/${VERSION}.fc36.x86_64 && \ + ln -s /usr/src/kernels/${VERSION}.fc36.x86_64/ /lib/modules/${VERSION}.fc36.x86_64/build && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/fedora/5.17/Dockerfile.kernel b/images/x86_64/fedora/5.17/Dockerfile.kernel new file mode 100644 index 0000000..35af1e5 --- /dev/null +++ b/images/x86_64/fedora/5.17/Dockerfile.kernel @@ -0,0 +1,60 @@ +ARG VERSION=5.17.5-300 +ARG HVERSION=5.17.0-300 +ARG URL='https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/36/Everything/x86_64/os/Packages/k/' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG HVERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.rpm ${URL}kernel-core-${VERSION}.fc36.${ARCH}.rpm && \ + curl -Lo headers.rpm ${URL}kernel-headers-${HVERSION}.fc36.${ARCH}.rpm && \ + curl -Lo modules.rpm ${URL}kernel-modules-${VERSION}.fc36.${ARCH}.rpm && \ + curl -Lo sources.rpm ${URL}kernel-devel-${VERSION}.fc36.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + rpm2cpio sources.rpm > sources.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cpio -idmv < ../modules.cpio && \ + cpio -idmv < ../sources.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + extract-vmlinux $(find lib/modules -name vmlinuz) > /home/ubuntu/extracted/vmlinux + +FROM fedora:36 as kmod-builder + +ARG VERSION +ARG HVERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://gitlab.com/cki-project/kernel-ark/-/raw/fedora-5.17/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/${VERSION}.fc36.${ARCH}/" make + + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ diff --git a/images/x86_64/fedora/5.8/Dockerfile b/images/x86_64/fedora/5.8/Dockerfile new file mode 100644 index 0000000..5674c76 --- /dev/null +++ b/images/x86_64/fedora/5.8/Dockerfile @@ -0,0 +1,28 @@ +FROM fedora:33 + +ARG VERSION=5.8.15-301 +ARG HVERSION=5.8.11-300 +ARG URL='https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/33/Everything/x86_64/os/Packages' + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y \ + clang \ + cmake \ + iproute \ + libcap-devel \ + llvm \ + openssh-server \ + rsync \ + systemd && \ + curl -Lo bpftool.rpm ${URL}/b/bpftool-${HVERSION}.fc33.x86_64.rpm && \ + curl -Lo sources.rpm ${URL}/k/kernel-devel-${VERSION}.fc33.x86_64.rpm && \ + curl -Lo headers.rpm ${URL}/k/kernel-headers-${HVERSION}.fc33.x86_64.rpm && \ + dnf install -y ./*.rpm && \ + rm -v ./*.rpm && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + mkdir -p /lib/modules/${VERSION}.fc33.x86_64 && \ + ln -s /usr/src/kernels/${VERSION}.fc33.x86_64/ /lib/modules/${VERSION}.fc33.x86_64/build && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/fedora/5.8/Dockerfile.kernel b/images/x86_64/fedora/5.8/Dockerfile.kernel new file mode 100644 index 0000000..6eec085 --- /dev/null +++ b/images/x86_64/fedora/5.8/Dockerfile.kernel @@ -0,0 +1,60 @@ +ARG VERSION=5.8.15-301 +ARG HVERSION=5.8.11-300 +ARG URL='https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/33/Everything/x86_64/os/Packages/k/' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG HVERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.rpm ${URL}kernel-core-${VERSION}.fc33.${ARCH}.rpm && \ + curl -Lo headers.rpm ${URL}kernel-headers-${HVERSION}.fc33.${ARCH}.rpm && \ + curl -Lo modules.rpm ${URL}kernel-modules-${VERSION}.fc33.${ARCH}.rpm && \ + curl -Lo sources.rpm ${URL}kernel-devel-${VERSION}.fc33.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + rpm2cpio sources.rpm > sources.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cpio -idmv < ../modules.cpio && \ + cpio -idmv < ../sources.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + extract-vmlinux $(find lib/modules -name vmlinuz) > /home/ubuntu/extracted/vmlinux + +FROM fedora:33 as kmod-builder + +ARG VERSION +ARG HVERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://gitlab.com/cki-project/kernel-ark/-/raw/linux-5.8.y/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/${VERSION}.fc33.${ARCH}/" make && ls -alh /home/ubuntu/extracted/lib/modules/ + + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ diff --git a/images/x86_64/fedora/6.2/Dockerfile b/images/x86_64/fedora/6.2/Dockerfile new file mode 100644 index 0000000..53c71ac --- /dev/null +++ b/images/x86_64/fedora/6.2/Dockerfile @@ -0,0 +1,28 @@ +FROM fedora:38 + +ARG VERSION=6.2.9-300 +ARG HVERSION=6.2.6-300 +ARG URL='https://mirrors.kernel.org/fedora/releases/38/Everything/x86_64/os/Packages' + +RUN dnf groupinstall -y 'Development Tools' && \ + dnf install -y \ + clang \ + cmake \ + iproute \ + libcap-devel \ + llvm \ + openssh-server \ + rsync \ + systemd && \ + curl -Lo bpftool.rpm ${URL}/b/bpftool-${HVERSION}.fc38.x86_64.rpm && \ + curl -Lo sources.rpm ${URL}/k/kernel-devel-${VERSION}.fc38.x86_64.rpm && \ + curl -Lo headers.rpm ${URL}/k/kernel-headers-${HVERSION}.fc38.x86_64.rpm && \ + dnf install -y ./*.rpm && \ + rm -v ./*.rpm && \ + dnf clean all && \ + rm -rf /var/cache/yum && \ + mkdir -p /lib/modules/${VERSION}.fc38.x86_64 && \ + ln -s /usr/src/kernels/${VERSION}.fc38.x86_64/ /lib/modules/${VERSION}.fc38.x86_64/build && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/fedora/6.2/Dockerfile.kernel b/images/x86_64/fedora/6.2/Dockerfile.kernel new file mode 100644 index 0000000..fd18fd1 --- /dev/null +++ b/images/x86_64/fedora/6.2/Dockerfile.kernel @@ -0,0 +1,65 @@ +ARG VERSION=6.2.9-300 +ARG HVERSION=6.2.6-300 +ARG URL='https://mirrors.kernel.org/fedora/releases/38/Everything/x86_64/os/Packages' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG HVERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -Lo kernel.rpm ${URL}/k/kernel-core-${VERSION}.fc38.${ARCH}.rpm && \ + curl -Lo headers.rpm ${URL}/k/kernel-headers-${HVERSION}.fc38.${ARCH}.rpm && \ + curl -Lo modules.rpm ${URL}/k/kernel-modules-${VERSION}.fc38.${ARCH}.rpm && \ + curl -Lo sources.rpm ${URL}/k/kernel-devel-${VERSION}.fc38.${ARCH}.rpm && \ + curl -Lo modules-core.rpm ${URL}/k/kernel-modules-core-${VERSION}.fc38.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio headers.rpm > headers.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + rpm2cpio sources.rpm > sources.cpio && \ + rpm2cpio modules-core.rpm > modules-core.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../headers.cpio && \ + cpio -idmv < ../modules.cpio && \ + cpio -idmv < ../sources.cpio && \ + cpio -idmv < ../modules-core.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + extract-vmlinux $(find lib/modules -name vmlinuz) > /home/ubuntu/extracted/vmlinux + +FROM fedora:38 as kmod-builder + +ARG VERSION +ARG HVERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + + +RUN dnf groupinstall -y 'Development Tools' && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://gitlab.com/cki-project/kernel-ark/-/raw/fedora-6.2/drivers/virtio/virtio_mmio.c' && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/${VERSION}.fc38.${ARCH}/" make && \ + find /home/ubuntu/extracted/lib/modules/ -name '*.ko' + + +FROM initrd-builder:0.0.1 AS stage2 +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ diff --git a/images/x86_64/oraclelinux/2.6/Dockerfile b/images/x86_64/oraclelinux/2.6/Dockerfile new file mode 100644 index 0000000..cbbdee8 --- /dev/null +++ b/images/x86_64/oraclelinux/2.6/Dockerfile @@ -0,0 +1,33 @@ +FROM oraclelinux:7 + +ARG VERSION=3.10.0-1160.92.1.0.2 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL7/MODRHCK/x86_64' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-${VERSION}.el7.x86_64.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-devel-${VERSION}.el7.x86_64.rpm && \ + yum install -y ./*.rpm && \ + rm -f ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -f cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.el7.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.el7.x86_64/ /lib/modules/${VERSION}.el7.x86_64/build diff --git a/images/x86_64/oraclelinux/2.6/Dockerfile.kernel b/images/x86_64/oraclelinux/2.6/Dockerfile.kernel new file mode 100644 index 0000000..7137044 --- /dev/null +++ b/images/x86_64/oraclelinux/2.6/Dockerfile.kernel @@ -0,0 +1,53 @@ +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION=2.6.39-400.330.1 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL6/UEK/latest/x86_64' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-${VERSION}.el6uek.x86_64.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el6uek.x86_64.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio devel.rpm > devel.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../devel.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz-*') > extracted/vmlinux + +FROM oraclelinux:7 as kmod-builder + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +COPY /virtio_mmio.c /home/ubuntu/virtio_mmio.c + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc && \ + mkdir src && \ + cd src && \ + curl -Lo source.rpm 'https://oss.oracle.com/ol6/SRPMS-updates/kernel-uek-2.6.39-400.330.1.el6uek.src.rpm' && \ + rpm2cpio source.rpm > source.cpio && \ + cpio -idmv < ./source.cpio && \ + tar -xaf linux-2.6.39.tar.bz2 && \ + cd .. && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + sed -ie 's/virtio-mmio/my-virtio-mmio/g' virtio_mmio.c && \ + echo KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/2.6.39-400.330.1.el6uek.x86_64/" make > cmd + +#FROM initrd-builder:0.0.1 AS stage2 +# +#COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +#COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +#RUN cd /home/ubuntu/extracted && \ +# /opt/initrd-builder/create.sh +# +#FROM scratch +# +#COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +#COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +#COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/oraclelinux/3.10/Dockerfile b/images/x86_64/oraclelinux/3.10/Dockerfile new file mode 100644 index 0000000..c0b6eb3 --- /dev/null +++ b/images/x86_64/oraclelinux/3.10/Dockerfile @@ -0,0 +1,38 @@ +FROM oraclelinux:7 + +ARG VERSION=3.10.0-1160.92.1.0.2 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL7/MODRHCK/x86_64' + +COPY /dev.repo /etc/yum.repos.d/ + +RUN yum install -y \ + binutils-devel \ + gcc \ + git \ + iproute \ + kmod \ + libcap-devel \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -Lo kernel.rpm ${URL}/getPackage/kernel-${VERSION}.el7.x86_64.rpm && \ + curl -Lo devel.rpm ${URL}/getPackage/kernel-devel-${VERSION}.el7.x86_64.rpm && \ + yum install -y ./*.rpm && \ + rm -f ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.el7.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.el7.x86_64/ /lib/modules/${VERSION}.el7.x86_64/build && \ + yum install -y oracle-softwarecollection-release-el7 && \ + yum install -y llvm-toolset-7 && \ + find /opt/rh/llvm-toolset-7/root/usr/bin/ ! -type d -exec ln -s {} /usr/bin \; && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/oraclelinux/3.10/Dockerfile.kernel b/images/x86_64/oraclelinux/3.10/Dockerfile.kernel new file mode 100644 index 0000000..bdd3f9b --- /dev/null +++ b/images/x86_64/oraclelinux/3.10/Dockerfile.kernel @@ -0,0 +1,61 @@ +ARG VERSION=3.10.0-1160.92.1.0.2 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL7/MODRHCK/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-${VERSION}.el7.${ARCH}.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-devel-${VERSION}.el7.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio devel.rpm > devel.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../devel.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz-*') > extracted/vmlinux + +FROM oraclelinux:7 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc elfutils-libelf-devel && \ + mkdir src && \ + cd src && \ + curl -Lo source.rpm 'https://oss.oracle.com/ol7/SRPMS-updates/kernel-3.10.0-1160.92.1.0.2.el7.src.rpm' && \ + rpm2cpio source.rpm > source.cpio && \ + cpio -idmv < ./source.cpio && \ + tar -xaf linux-3.10.0-1160.92.1.el7.tar.xz && \ + cd .. && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + find src -name virtio_mmio.c -exec cp -v {} . \; && \ + sed -ie 's/virtio-mmio/my-virtio-mmio/g' virtio_mmio.c && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/3.10.0-1160.92.1.0.2.el7.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 + +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/oraclelinux/3.10/dev.repo b/images/x86_64/oraclelinux/3.10/dev.repo new file mode 100644 index 0000000..afd3ce4 --- /dev/null +++ b/images/x86_64/oraclelinux/3.10/dev.repo @@ -0,0 +1,6 @@ +[developer] +name=Packages for test and development - Oracle Linux 7 +baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/developer/$basearch +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle +gpgcheck=1 +enabled=1 diff --git a/images/x86_64/oraclelinux/4.14/Dockerfile b/images/x86_64/oraclelinux/4.14/Dockerfile new file mode 100644 index 0000000..a4c1fd6 --- /dev/null +++ b/images/x86_64/oraclelinux/4.14/Dockerfile @@ -0,0 +1,42 @@ +FROM oraclelinux:7 + +ARG VERSION=4.14.35-2047.526.2 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL7/UEKR5/x86_64' + +COPY /dev.repo /etc/yum.repos.d/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y \ + binutils-devel \ + elfutils-libelf-devel \ + gcc \ + git \ + iproute \ + kmod \ + libcap-devel \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -Lo kernel.rpm ${URL}/getPackage/kernel-uek-${VERSION}.el7uek.x86_64.rpm && \ + curl -Lo devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el7uek.x86_64.rpm && \ + curl -Lo libdtrace-devel.rpm ${URL}/getPackage/libdtrace-ctf-devel-1.1.0-2.el7.x86_64.rpm && \ + curl -Lo libdtrace.rpm ${URL}/getPackage/libdtrace-ctf-1.1.0-2.el7.x86_64.rpm && \ + yum install -y --skip-broken ./*.rpm && \ + rm -vf ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/${VERSION}.el7uek.x86_64/ && \ + ln -s /usr/src/kernels/${VERSION}.el7uek.x86_64/ /lib/modules/${VERSION}.el7uek.x86_64/build && \ + yum install -y oracle-softwarecollection-release-el7 && \ + yum install -y llvm-toolset-7 && \ + find /opt/rh/llvm-toolset-7/root/usr/bin/ ! -type d -exec ln -s {} /usr/bin \; && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/oraclelinux/4.14/Dockerfile.kernel b/images/x86_64/oraclelinux/4.14/Dockerfile.kernel new file mode 100644 index 0000000..d43f49f --- /dev/null +++ b/images/x86_64/oraclelinux/4.14/Dockerfile.kernel @@ -0,0 +1,57 @@ +ARG VERSION=4.14.35-2047.526.2 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL7/UEKR5/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-${VERSION}.el7uek.${ARCH}.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el7uek.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio devel.rpm > devel.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../devel.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz-*') > extracted/vmlinux + +FROM oraclelinux:7 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc elfutils-libelf-devel && \ + curl -Lo libdtrace-devel.rpm ${URL}/getPackage/libdtrace-ctf-devel-1.1.0-2.el7.${ARCH}.rpm && \ + curl -Lo libdtrace.rpm ${URL}/getPackage/libdtrace-ctf-1.1.0-2.el7.${ARCH}.rpm && \ + yum install -y --skip-broken ./libdtrace.rpm ./libdtrace-devel.rpm && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v4.14/drivers/virtio/virtio_mmio.c' && \ + sed -ie 's/virtio-mmio/my-virtio-mmio/g' virtio_mmio.c && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/4.14.35-2047.526.2.el7uek.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 + +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/oraclelinux/4.14/dev.repo b/images/x86_64/oraclelinux/4.14/dev.repo new file mode 100644 index 0000000..afd3ce4 --- /dev/null +++ b/images/x86_64/oraclelinux/4.14/dev.repo @@ -0,0 +1,6 @@ +[developer] +name=Packages for test and development - Oracle Linux 7 +baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/developer/$basearch +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle +gpgcheck=1 +enabled=1 diff --git a/images/x86_64/oraclelinux/5.15/Dockerfile b/images/x86_64/oraclelinux/5.15/Dockerfile new file mode 100644 index 0000000..76c28a2 --- /dev/null +++ b/images/x86_64/oraclelinux/5.15/Dockerfile @@ -0,0 +1,37 @@ +FROM oraclelinux:9 + +ARG VERSION=5.15.0-8.91.4.1 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL9/UEKR7/x86_64' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -Lo kernel.rpm ${URL}/getPackage/kernel-uek-core-${VERSION}.el9uek.x86_64.rpm && \ + curl -Lo devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el9uek.x86_64.rpm && \ + curl -Lo modules.rpm ${URL}/getPackage/kernel-uek-modules-${VERSION}.el9uek.x86_64.rpm && \ + curl -Lo bpftool.rpm ${URL}/getPackage/bpftool-${VERSION}.el9uek.x86_64.rpm && \ + yum install -y ./*.rpm && \ + rm -f ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/5.15.0-8.91.4.1.el9uek.x86_64/ && \ + ln -s /usr/src/kernels/5.15.0-8.91.4.1.el9uek.x86_64/ /lib/modules/5.15.0-8.91.4.1.el9uek.x86_64/build && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/oraclelinux/5.15/Dockerfile.kernel b/images/x86_64/oraclelinux/5.15/Dockerfile.kernel new file mode 100644 index 0000000..10ff9f4 --- /dev/null +++ b/images/x86_64/oraclelinux/5.15/Dockerfile.kernel @@ -0,0 +1,57 @@ +ARG VERSION=5.15.0-8.91.4.1 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL9/UEKR7/x86_64' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-core-${VERSION}.el9uek.${ARCH}.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el9uek.${ARCH}.rpm && \ + curl -L -o modules.rpm ${URL}/getPackage/kernel-uek-modules-${VERSION}.el9uek.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio devel.rpm > devel.cpio && \ + rpm2cpio modules.rpm > modules.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../devel.cpio && \ + cpio -idmv < ../modules.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz') > extracted/vmlinux + +FROM oraclelinux:9 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.15/drivers/virtio/virtio_mmio.c' && \ + sed -ie 's/virtio-mmio/my-virtio-mmio/g' virtio_mmio.c && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/5.15.0-8.91.4.1.el9uek.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 + +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/oraclelinux/5.4/Dockerfile b/images/x86_64/oraclelinux/5.4/Dockerfile new file mode 100644 index 0000000..6f99177 --- /dev/null +++ b/images/x86_64/oraclelinux/5.4/Dockerfile @@ -0,0 +1,35 @@ +FROM oraclelinux:8 + +ARG VERSION=5.4.17-2136.320.7.1 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL8/UEKR6/x86_64/' + +RUN yum install -y \ + binutils-devel \ + clang \ + gcc \ + git \ + iproute \ + kmod \ + libcap-devel \ + llvm \ + make \ + openssh-server \ + rsync \ + systemd \ + tar && \ + curl -Lo kernel.rpm ${URL}/getPackage/kernel-uek-${VERSION}.el8uek.x86_64.rpm && \ + curl -Lo devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el8uek.x86_64.rpm && \ + yum install -y ./*.rpm && \ + rm -vf ./*.rpm && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ && \ + mkdir -p /lib/modules/5.4.17-2136.320.7.1.el8uek.x86_64/ && \ + ln -s /usr/src/kernels/5.4.17-2136.320.7.1.el8uek.x86_64/ /lib/modules/5.4.17-2136.320.7.1.el8uek.x86_64/build && \ + yum clean all && \ + rm -rf /var/cache/yum diff --git a/images/x86_64/oraclelinux/5.4/Dockerfile.kernel b/images/x86_64/oraclelinux/5.4/Dockerfile.kernel new file mode 100644 index 0000000..f7b8563 --- /dev/null +++ b/images/x86_64/oraclelinux/5.4/Dockerfile.kernel @@ -0,0 +1,54 @@ +ARG VERSION=5.4.17-2136.320.7.1 +ARG URL='https://yum.oracle.com/repo/OracleLinux/OL8/UEKR6/x86_64/' +ARG ARCH=x86_64 + +FROM initrd-builder:0.0.1 AS stage1 + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl -L -o kernel.rpm ${URL}/getPackage/kernel-uek-${VERSION}.el8uek.${ARCH}.rpm && \ + curl -L -o devel.rpm ${URL}/getPackage/kernel-uek-devel-${VERSION}.el8uek.${ARCH}.rpm && \ + rpm2cpio kernel.rpm > kernel.cpio && \ + rpm2cpio devel.rpm > devel.cpio && \ + mkdir extracted && \ + cd extracted && \ + cpio -idmv < ../kernel.cpio && \ + cpio -idmv < ../devel.cpio && \ + find . -name '*.xz' -exec xz -d {} \; && \ + cd .. && \ + extract-vmlinux $(find ./extracted/ -name 'vmlinuz') > extracted/vmlinux + +FROM oraclelinux:8 as kmod-builder + +ARG VERSION +ARG URL +ARG ARCH + +WORKDIR /home/ubuntu +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=stage1 /opt/initrd-builder/* /opt/initrd-builder/ + +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y gcc && \ + cp -v /opt/initrd-builder/Makefile.virtio_mmio Makefile && \ + curl -LO 'https://raw.githubusercontent.com/torvalds/linux/v5.4/drivers/virtio/virtio_mmio.c' && \ + sed -ie 's/virtio-mmio/my-virtio-mmio/g' virtio_mmio.c && \ + KERNEL_DIR="/home/ubuntu/extracted/usr/src/kernels/5.4.17-2136.320.7.1.el8uek.x86_64/" make + +FROM initrd-builder:0.0.1 AS stage2 + +COPY --from=stage1 /home/ubuntu/extracted /home/ubuntu/extracted/ +COPY --from=kmod-builder /home/ubuntu/virtio_mmio.ko /home/ubuntu/ +RUN cd /home/ubuntu/extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=stage1 /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=stage2 /home/ubuntu/out/initrd /boot/ +COPY --from=stage1 /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/ubuntu/4.15/Dockerfile b/images/x86_64/ubuntu/4.15/Dockerfile new file mode 100644 index 0000000..58fcc3b --- /dev/null +++ b/images/x86_64/ubuntu/4.15/Dockerfile @@ -0,0 +1,45 @@ +FROM ubuntu:18.04 + +ARG VERSION=4.15.0-213 +ARG URL='http://mirrors.edge.kernel.org/ubuntu/pool/main/l/linux/' + +WORKDIR /home/ubuntu + +RUN apt-get update && apt-get install -y \ + build-essential \ + clang \ + curl \ + dbus \ + git \ + iproute2 \ + iputils-ping \ + kmod \ + libcap-dev \ + libelf-dev \ + llvm \ + net-tools \ + openssh-server \ + rng-tools \ + rsync \ + sudo \ + systemd \ + udev \ + wget && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + curl ${URL} | \ + grep -E "linux-headers-${VERSION}|linux-tools-${VERSION}|linux-tools-common_${VERSION}" | \ + grep -vE 'i386|lowlatency' | \ + cut -d\" -f2 | \ + xargs -I@ curl -LO ${URL}@ && \ + find . -name '*.deb' | xargs -n1 dpkg -i --force-depends && \ + rm -f *.deb && \ + echo "" > /etc/machine-id && echo "" > /var/lib/dbus/machine-id && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd && \ + curl -LO https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz && \ + tar -xaf cmake-3.16.7-Linux-x86_64.tar.gz && \ + rm -vf cmake-3.16.7-Linux-x86_64.tar.gz && \ + mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7 && \ + ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ diff --git a/images/x86_64/ubuntu/4.15/Dockerfile.kernel b/images/x86_64/ubuntu/4.15/Dockerfile.kernel new file mode 100644 index 0000000..0ef4550 --- /dev/null +++ b/images/x86_64/ubuntu/4.15/Dockerfile.kernel @@ -0,0 +1,25 @@ +FROM initrd-builder:0.0.1 AS builder + +ARG VERSION=4.15.0-213-generic +ARG URL='http://mirrors.edge.kernel.org/ubuntu/pool/main/l/linux/' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl ${URL} | \ + grep -E "kernel-image-${VERSION}|linux-modules-${VERSION}" | \ + grep -E "amd64" | \ + cut -d\" -f2 | \ + xargs -I@ curl -LO ${URL}@ && \ + mkdir extracted && \ + ls *deb | \ + xargs -I@ dpkg -x @ extracted && \ + extract-vmlinux extracted/boot/vmlinuz > out/vmlinux && \ + cd extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=builder /home/ubuntu/out/vmlinux /boot/ +COPY --from=builder /home/ubuntu/out/initrd /boot/ +COPY --from=builder /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/ubuntu/6.2/Dockerfile b/images/x86_64/ubuntu/6.2/Dockerfile new file mode 100644 index 0000000..e6c17c0 --- /dev/null +++ b/images/x86_64/ubuntu/6.2/Dockerfile @@ -0,0 +1,36 @@ +FROM ubuntu:22.04 + +ARG VERSION=6.2.0-26-generic + +WORKDIR /home/ubuntu + +RUN echo 'deb http://mirrors.edge.kernel.org/ubuntu/ jammy main' > /etc/apt/sources.list.d/kernel.org.list && \ + apt-get update && apt-get install -y \ + build-essential \ + clang \ + cmake \ + curl \ + dbus \ + git \ + iproute2 \ + iputils-ping \ + kmod \ + libcap-dev \ + libelf-dev \ + linux-headers-${VERSION} \ + linux-tools-${VERSION} \ + llvm \ + net-tools \ + openssh-server \ + rng-tools \ + rsync \ + sudo \ + systemd \ + udev \ + wget && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + echo "" > /etc/machine-id && echo "" > /var/lib/dbus/machine-id && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/ubuntu/6.2/Dockerfile.kernel b/images/x86_64/ubuntu/6.2/Dockerfile.kernel new file mode 100644 index 0000000..da1aa91 --- /dev/null +++ b/images/x86_64/ubuntu/6.2/Dockerfile.kernel @@ -0,0 +1,24 @@ +FROM initrd-builder:0.0.1 AS builder + +ARG VERSION=6.2.0-26-generic +ARG URL='http://mirrors.edge.kernel.org/ubuntu/pool/main/l/linux/' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl ${URL} | \ + grep -E "linux-image-unsigned-${VERSION}|linux-modules-${VERSION}" | \ + cut -d\" -f2 | \ + xargs -I@ curl -LO ${URL}@ && \ + mkdir extracted && \ + ls *deb | \ + xargs -I@ dpkg -x @ extracted && \ + extract-vmlinux extracted/boot/vmlinuz-${VERSION} > extracted/vmlinux && \ + cd extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=builder /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=builder /home/ubuntu//out/initrd /boot/ +COPY --from=builder /home/ubuntu/.placeholder /lib/modules/ diff --git a/images/x86_64/ubuntu/6.3/Dockerfile b/images/x86_64/ubuntu/6.3/Dockerfile new file mode 100644 index 0000000..d13298b --- /dev/null +++ b/images/x86_64/ubuntu/6.3/Dockerfile @@ -0,0 +1,40 @@ +FROM ubuntu:23.04 + +ARG VERSION=6.3.0-7 +ARG URL='http://mirrors.edge.kernel.org/ubuntu/pool/main/l/linux/' + +WORKDIR /home/ubuntu + +RUN apt-get update && apt-get install -y \ + build-essential \ + clang \ + cmake \ + curl \ + dbus \ + git \ + iproute2 \ + iputils-ping \ + kmod \ + libcap-dev \ + libelf-dev \ + llvm \ + net-tools \ + openssh-server \ + rng-tools \ + rsync \ + sudo \ + systemd \ + udev \ + wget && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + curl ${URL} | \ + grep -E "linux-headers-${VERSION}|linux-tools-${VERSION}|linux-tools-common_${VERSION}" | \ + cut -d\" -f2 | \ + xargs -I@ curl -LO ${URL}@ && \ + find . -name '*.deb' | xargs -n1 dpkg -i --force-depends && \ + rm -f *.deb && \ + echo "" > /etc/machine-id && echo "" > /var/lib/dbus/machine-id && \ + sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config && \ + echo 'UseDNS no' >> /etc/ssh/sshd_config && \ + echo "root:root" | chpasswd diff --git a/images/x86_64/ubuntu/6.3/Dockerfile.kernel b/images/x86_64/ubuntu/6.3/Dockerfile.kernel new file mode 100644 index 0000000..c76907b --- /dev/null +++ b/images/x86_64/ubuntu/6.3/Dockerfile.kernel @@ -0,0 +1,24 @@ +FROM initrd-builder:0.0.1 AS builder + +ARG VERSION=6.3.0-7-generic +ARG URL='http://mirrors.edge.kernel.org/ubuntu/pool/main/l/linux/' + +WORKDIR /home/ubuntu + +RUN touch .placeholder && \ + curl ${URL} | \ + grep -E "linux-image-unsigned-${VERSION}|linux-modules-${VERSION}" | \ + cut -d\" -f2 | \ + xargs -I@ curl -LO ${URL}@ && \ + mkdir extracted && \ + ls *deb | \ + xargs -I@ dpkg -x @ extracted && \ + extract-vmlinux extracted/boot/vmlinuz-${VERSION} > extracted/vmlinux && \ + cd extracted && \ + /opt/initrd-builder/create.sh + +FROM scratch + +COPY --from=builder /home/ubuntu/extracted/vmlinux /boot/ +COPY --from=builder /home/ubuntu//out/initrd /boot/ +COPY --from=builder /home/ubuntu/.placeholder /lib/modules/