summaryrefslogtreecommitdiffstats
path: root/lib/libbpf/ci/rootfs/mkrootfs_arch.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libbpf/ci/rootfs/mkrootfs_arch.sh')
-rwxr-xr-xlib/libbpf/ci/rootfs/mkrootfs_arch.sh107
1 files changed, 107 insertions, 0 deletions
diff --git a/lib/libbpf/ci/rootfs/mkrootfs_arch.sh b/lib/libbpf/ci/rootfs/mkrootfs_arch.sh
new file mode 100755
index 0000000..90e2d58
--- /dev/null
+++ b/lib/libbpf/ci/rootfs/mkrootfs_arch.sh
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+# This script is based on drgn script for generating Arch Linux bootstrap
+# images.
+# https://github.com/osandov/drgn/blob/master/scripts/vmtest/mkrootfs.sh
+
+set -euo pipefail
+
+usage () {
+ USAGE_STRING="usage: $0 [NAME]
+ $0 -h
+
+Build an Arch Linux root filesystem image for testing libbpf in a virtual
+machine.
+
+The image is generated as a zstd-compressed tarball.
+
+This must be run as root, as most of the installation is done in a chroot.
+
+Arguments:
+ NAME name of generated image file (default:
+ libbpf-vmtest-rootfs-\$DATE.tar.zst)
+
+Options:
+ -h display this help message and exit"
+
+ case "$1" in
+ out)
+ echo "$USAGE_STRING"
+ exit 0
+ ;;
+ err)
+ echo "$USAGE_STRING" >&2
+ exit 1
+ ;;
+ esac
+}
+
+while getopts "h" OPT; do
+ case "$OPT" in
+ h)
+ usage out
+ ;;
+ *)
+ usage err
+ ;;
+ esac
+done
+if [[ $OPTIND -eq $# ]]; then
+ NAME="${!OPTIND}"
+elif [[ $OPTIND -gt $# ]]; then
+ NAME="libbpf-vmtest-rootfs-$(date +%Y.%m.%d).tar.zst"
+else
+ usage err
+fi
+
+pacman_conf=
+root=
+trap 'rm -rf "$pacman_conf" "$root"' EXIT
+pacman_conf="$(mktemp -p "$PWD")"
+cat > "$pacman_conf" << "EOF"
+[options]
+Architecture = x86_64
+CheckSpace
+SigLevel = Required DatabaseOptional
+[core]
+Include = /etc/pacman.d/mirrorlist
+[extra]
+Include = /etc/pacman.d/mirrorlist
+[community]
+Include = /etc/pacman.d/mirrorlist
+EOF
+root="$(mktemp -d -p "$PWD")"
+
+packages=(
+ busybox
+ # libbpf dependencies.
+ libelf
+ zlib
+ # selftests test_progs dependencies.
+ binutils
+ elfutils
+ ethtool
+ glibc
+ iproute2
+ # selftests test_verifier dependencies.
+ libcap
+)
+
+pacstrap -C "$pacman_conf" -cGM "$root" "${packages[@]}"
+
+# Remove unnecessary files from the chroot.
+
+# We don't need the pacman databases anymore.
+rm -rf "$root/var/lib/pacman/sync/"
+# We don't need D, Fortran, or Go.
+ rm -f "$root/usr/lib/libgdruntime."* \
+ "$root/usr/lib/libgphobos."* \
+ "$root/usr/lib/libgfortran."* \
+ "$root/usr/lib/libgo."*
+# We don't need any documentation.
+rm -rf "$root/usr/share/{doc,help,man,texinfo}"
+
+"$(dirname "$0")"/mkrootfs_tweak.sh "$root"
+
+tar -C "$root" -c . | zstd -T0 -19 -o "$NAME"
+chmod 644 "$NAME"