From 2910ce17c7f99a9232a67cf321ab2c86b5d9c14b Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Fri, 12 May 2023 00:59:36 +0000 Subject: [PATCH] Add generator for debian images --- .github/workflows/images.yml | 20 +++++++++++ tools/qemu-debian-img/.gitignore | 4 +++ tools/qemu-debian-img/Dockerfile.template | 29 +++++++++++++++ tools/qemu-debian-img/generate-images.sh | 44 +++++++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 .github/workflows/images.yml create mode 100644 tools/qemu-debian-img/.gitignore create mode 100644 tools/qemu-debian-img/Dockerfile.template create mode 100755 tools/qemu-debian-img/generate-images.sh diff --git a/.github/workflows/images.yml b/.github/workflows/images.yml new file mode 100644 index 0000000..548ad6b --- /dev/null +++ b/.github/workflows/images.yml @@ -0,0 +1,20 @@ +name: Generate Images + +on: + workflow_dispatch: + +jobs: + debian-images: + name: Debian Images + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + + - name: debootstrap + run: ./tools/qemu-debian-img/generate-images.sh + + - name: Archive images + uses: actions/upload-artifact@v3 + with: + name: debian-images + path: /home/runner/work/out-of-tree/out-of-tree/tools/qemu-debian-img/*.tar.gz diff --git a/tools/qemu-debian-img/.gitignore b/tools/qemu-debian-img/.gitignore new file mode 100644 index 0000000..a9d6f6b --- /dev/null +++ b/tools/qemu-debian-img/.gitignore @@ -0,0 +1,4 @@ +* +!.gitignore +!Dockerfile.template +!generate-images.sh diff --git a/tools/qemu-debian-img/Dockerfile.template b/tools/qemu-debian-img/Dockerfile.template new file mode 100644 index 0000000..7f8c36d --- /dev/null +++ b/tools/qemu-debian-img/Dockerfile.template @@ -0,0 +1,29 @@ +FROM debian:_VERSION_ + +ENV DEBIAN_FRONTEND=noninteractive + +RUN echo 'deb [check-valid-until=no trusted=yes] _REPOSITORY_ _RELEASE_ main contrib' > /etc/apt/sources.list +RUN echo 'deb [check-valid-until=no trusted=yes] _REPOSITORY_ _RELEASE_-updates main contrib' >> /etc/apt/sources.list + +RUN apt-get update +RUN apt-get remove -y iputils-ping +RUN apt-get autoremove -y +RUN apt-get install -y debootstrap qemu-utils + +ENV TMPDIR=/tmp/debian +ENV IMAGEDIR=/tmp/image +ENV IMAGE=/shared/out_of_tree_debian__VERSION_.img +ENV REPOSITORY=_REPOSITORY_ +ENV RELEASE=_RELEASE_ + +RUN mkdir $IMAGEDIR + +# Must be executed with --privileged because of /dev/loop +CMD debootstrap --include=openssh-server,policykit-1 \ + $RELEASE $TMPDIR $REPOSITORY && \ + /shared/setup.sh $TMPDIR && \ + qemu-img create $IMAGE 2G && \ + mkfs.ext4 -F $IMAGE && \ + mount -o loop $IMAGE $IMAGEDIR && \ + cp -a $TMPDIR/* $IMAGEDIR/ && \ + umount $IMAGEDIR diff --git a/tools/qemu-debian-img/generate-images.sh b/tools/qemu-debian-img/generate-images.sh new file mode 100755 index 0000000..d45e9c7 --- /dev/null +++ b/tools/qemu-debian-img/generate-images.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +set -eux + +cd $(dirname $(realpath $0)) + +for version in 7 8 9 10 11; do + if [[ $version -eq 7 ]]; then + release=wheezy + last_version=7.11.0 + fi + if [[ $version -eq 8 ]]; then + release=jessie + last_version=8.11.1 + fi + if [[ $version -eq 9 ]]; then + release=stretch + last_version=9.13.0 + fi + if [[ $version -eq 10 ]]; then + release=buster + last_version=10.13.0 + fi + if [[ $version -eq 11 ]]; then + release=bullseye + last_version=11.6.0 + fi + + mkdir $version + + sed "s/_VERSION_/${version}/" Dockerfile.template >> $version/Dockerfile + sed -i "s/_RELEASE_/${release}/" $version/Dockerfile + + repository=$(wget -q -O - https://cdimage.debian.org/mirror/cdimage/archive/${last_version}/amd64/jigdo-bd/debian-${last_version}-amd64-BD-1.jigdo | gunzip | awk -F= '/snapshot.debian.org/ {print $2}' | cut -d ' ' -f 1) + + sed -i "s;_REPOSITORY_;${repository};" $version/Dockerfile + + docker build -t gen-debian${version}-image $version + rm -rf $version + + docker run --privileged -v $(pwd):/shared -t gen-debian${version}-image + + tar -Szcf out_of_tree_debian_${version}.img.tar.gz out_of_tree_debian_${version}.img +done