Containers bring the ability to have ready-to-use environments
isolated completely from the build environment. Once users manually
build it, they can launch the desired container, jump into it and have
a setup ready for development. On the other hand, if users prefer to
use bare metal instead of a containerized environment, it is still
useful to have a the full list of the required packages.

Signed-off-by: Leo Sandoval <[email protected]>
---
 INSTALL                 | 158 ++++++++++++++++++++++++++++++++++++++++
 container/Containerfile |  16 ++++
 container/check.sh      |  18 +++++
 3 files changed, 192 insertions(+)
 create mode 100644 container/Containerfile
 create mode 100644 container/check.sh

diff --git a/INSTALL b/INSTALL
index 22b68cb6c7..305e0ae29a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -109,6 +109,13 @@ To use the gdb_grub GDB script you'll need:
 * GNU Debugger > 7, built with python support (gdb package)
 * Python >= 3.5 (python3 package)
 
+To easier the task of package installation, the Container section list
+the above packages per distribution (see the command line examples, the
+--build-arg PKGS argument on the podman build command). In case the 
installation
+of these packages is not possible on your host, one can rely on containers 
which
+are ready-to-use container images for GRUB development. For more informacion 
see
+Container section.
+
 Configuring the GRUB
 ====================
 
@@ -358,3 +365,154 @@ operates.
 `--version'
      Print the version of Autoconf used to generate the `configure'
      script, and exit.
+
+Container
+=========
+
+Containers bring the ability to have ready-to-use environments isolated 
completely
+from the build environment. Once users manually build it, they can launch the 
desired
+container, jump into it and have a setup ready for development. On the other 
hand, if users
+prefer to use bare metal instead of a containerized environment, it is still 
useful to have a
+the full list of the required packages.
+
+Assuming your build OS support containers, e.g. all Linux distros, install 
'podman' on
+your favorite distro, move into the container folder then build a specific 
distro image with
+
+$ cd container
+$ podman build \
+  --build-arg BASE_IMAGE=fedora \
+  --build-arg PKG_MANAGER=dnf \
+  --build-arg PKGS="\
+        attr \
+        autoconf \
+        automake \
+        autopoint \
+        bison \
+        btrfs-progs \
+        cpio \
+        cryptsetup \
+        dosfstools \
+        e2fsprogs \
+        edk2-ovmf \
+        edk2-ovmf-ia32 \
+        erofs-utils \
+        exfatprogs \
+        f2fs-tools \
+        flex \
+        gawk \
+        genromfs \
+        gettext \
+        git \
+        hfsplus-tools \
+        jfsutils \
+        libtool \
+        lzop \
+        make \
+        mtools \
+        nilfs-utils \
+        ntfsprogs \
+        parted \
+        patch \
+        pkg-config \
+        python3 \
+        qemu-system-arm \
+        qemu-system-aarch64 \
+        qemu-system-riscv \
+        qemu-system-x86 \
+       rsync \
+        squashfs-tools \
+        swtpm-tools \
+        texinfo \
+       texinfo-tex \
+        texlive \
+        tpm2-tools \
+        udftools \
+        unifont \
+        unifont-fonts \
+        which \
+        words \
+        xfsprogs \
+        xorriso \
+        zfs-fuse" \
+  -t fedora-grub .
+
+or in case you prefer Debian
+
+$ cd container
+$ podman build \
+  --build-arg BASE_IMAGE=debian \
+  --build-arg PKG_MANAGER=apt \
+  --build-arg PKGS="\
+        attr \
+        autoconf \
+        automake \
+        autopoint \
+        bison \
+        btrfs-progs \
+        cpio \
+        cryptsetup \
+        dosfstools \
+        e2fsprogs \
+        erofs-utils \
+        exfatprogs \
+        f2fs-tools \
+        flex \
+        gawk \
+        genromfs \
+        gettext \
+        git \
+        hfsplus \
+        jfsutils \
+        libtool \
+        lzop \
+        make \
+        mtools \
+        nilfs-tools \
+        ntfs-3g \
+        ovmf \
+        ovmf-ia32 \
+        parted \
+        patch \
+        pkg-config \
+        python3 \
+        qemu-efi-aarch64 \
+        qemu-efi-arm \
+        qemu-system \
+       rsync \
+        squashfs-tools \
+        swtpm-tools \
+        texinfo \
+        texlive \
+        tpm2-tools \
+        udftools \
+        unifont \
+        wamerican \
+        which \
+        xfonts-unifont \
+        xfsprogs \
+        xorriso \
+        zfs-fuse" \
+  -t debian-grub .
+
+once built, you can run/launch any of the aboven
+
+$ podman run -it fedora-grub
+
+or
+
+$ podman run -it debian-grub
+
+and execute the standard build/test commands inside it, e.g
+
+  # ./linguas.sh
+  # ./bootstrap
+  # ./configure
+  # make
+  # make html
+  # make pdf
+  # make check
+
+The above commands are collected in a single script inside the container 
called 'check.sh'
+and can be useful as sanity check for testing latest upstream changes with
+
+$ podman run fedora-grub /grub/check.sh
diff --git a/container/Containerfile b/container/Containerfile
new file mode 100644
index 0000000000..c74f6270c9
--- /dev/null
+++ b/container/Containerfile
@@ -0,0 +1,16 @@
+ARG BASE_IMAGE
+FROM ${BASE_IMAGE}
+
+ARG PKG_MANAGER
+ARG PKGS
+ARG GIT_CLONE_DEPTH=1
+ARG GRUB_REPO=https://git.savannah.gnu.org/git/grub.git
+ARG GRUB_DIR=/grub
+
+RUN $PKG_MANAGER update -y && $PKG_MANAGER install -y ${PKGS}
+RUN git clone --depth ${GIT_CLONE_DEPTH} ${GRUB_REPO} ${GRUB_DIR}
+
+WORKDIR ${GRUB_DIR}
+
+COPY check.sh .
+RUN chmod +x check.sh
diff --git a/container/check.sh b/container/check.sh
new file mode 100644
index 0000000000..aa3eebcdd5
--- /dev/null
+++ b/container/check.sh
@@ -0,0 +1,18 @@
+#! /bin/sh
+
+set -e
+set -x
+
+cd /grub
+
+./linguas.sh
+./bootstrap
+./configure
+make
+make html
+make pdf
+make check || true
+
+if [ -f test-suite.log ]; then
+    cat test-suite.log
+fi
-- 
2.50.1


_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to