Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,58 @@ steps:
provider: gcp
machineType: n2-standard-2
enableNestedVirtualization: true

- label: "quark-test on ubuntu 18.04 (no bpf)"
key: test_ubuntu_18_04
command: "./.buildkite/runtest_distro.sh ubuntu 18.04 -k"
depends_on:
- make_docker
agents:
image: family/core-ubuntu-2404
provider: gcp
machineType: n2-standard-2
enableNestedVirtualization: true

- label: "quark-test on ubuntu 20.04"
key: test_ubuntu_20_04
command: "./.buildkite/runtest_distro.sh ubuntu 20.04"
depends_on:
- make_docker
agents:
image: family/core-ubuntu-2404
provider: gcp
machineType: n2-standard-2
enableNestedVirtualization: true

- label: "quark-test on ubuntu 22.04"
key: test_ubuntu_22_04
command: "./.buildkite/runtest_distro.sh ubuntu 22.04"
depends_on:
- make_docker
agents:
image: family/core-ubuntu-2404
provider: gcp
machineType: n2-standard-2
enableNestedVirtualization: true

- label: "quark-test on ubuntu 24.04"
key: test_ubuntu_24_04
command: "./.buildkite/runtest_distro.sh ubuntu 24.04"
depends_on:
- make_docker
agents:
image: family/core-ubuntu-2404
provider: gcp
machineType: n2-standard-2
enableNestedVirtualization: true

- label: "quark-test on ubuntu 25.04"
key: test_ubuntu_25_04
command: "./.buildkite/runtest_distro.sh ubuntu 25.04"
depends_on:
- make_docker
agents:
image: family/core-ubuntu-2404
provider: gcp
machineType: n2-standard-2
enableNestedVirtualization: true
1 change: 1 addition & 0 deletions .buildkite/runtest_distro.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,6 @@ sudo kvm-ok
case "$DISTRO" in
fedora) sudo ./krun-fedora.sh initramfs.gz "$DISTROVER" quark-test $@;;
rhel) sudo ./krun-rhel.sh initramfs.gz "$DISTROVER" quark-test $@;;
ubuntu) sudo ./krun-ubuntu.sh initramfs.gz "$DISTROVER" quark-test $@;;
*) echo bad distribution "$DISTROVER" 1>&2;;
esac
50 changes: 43 additions & 7 deletions krun-fedora.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,36 @@
set -euo pipefail

SCRIPT=${0##*/}
VERBOSE=0

log() { (( VERBOSE )) && printf '%s\n' "INFO: $*" >&2 || true; }
log_error() { printf '%s\n' "ERROR: $*" >&2; }
die() { log_error "$*"; exit 1; }

function usage
{
echo "usage: $SCRIPT initramfs.gz FEDORAVERSION command" 1>&2
echo "usage: $SCRIPT [-v] initramfs.gz FEDORAVERSION command..." 1>&2
echo
echo " -v Verbose output"
echo " initramfs.gz Path to initramfs image"
echo " FEDORAVERSION Fedora version (e.g. 39, 40, rawhide)"
echo " command... Command to run in guest"
echo
echo "Examples:"
echo " $SCRIPT initramfs.gz 40 /bin/bash"
echo " $SCRIPT -v initramfs.gz rawhide quark-test -vvv"
exit 1
}

while getopts "vh" opt; do
case $opt in
v) VERBOSE=1 ;;
h) usage ;;
*) usage ;;
esac
done
shift $((OPTIND - 1))

if [ $# -lt 3 ]; then
usage
fi
Expand All @@ -18,30 +41,43 @@ INITRAMFS="$1"
FEDORAVER="$2"
shift 2

[[ -f $INITRAMFS ]] || die "Initramfs not found: $INITRAMFS"
[[ -f ./krun.sh ]] || die "Required launcher ./krun.sh is missing"

case $FEDORAVER in
2?|3?) URL="https://archives.fedoraproject.org/pub/archive/fedora/linux/updates/$FEDORAVER/Everything/x86_64/Packages/k";;
43|rawhide) URL="https://ftp.fau.de/fedora/linux/development/$FEDORAVER/Everything/x86_64/os/Packages/k";;
4?) URL="https://ftp.fau.de/fedora/linux/updates/$FEDORAVER/Everything/x86_64/Packages/k";;
*) echo bad version "$FEDORAVER" 1>&2;;
*) die "Unsupported Fedora version: $FEDORAVER";;
esac

log "Searching for Fedora $FEDORAVER kernel..."

TMPDIR=$(mktemp -d "/tmp/$SCRIPT.XXXXXXXXXX")
trap 'rm -rf "$TMPDIR"' EXIT
readonly TMPDIR
cleanup() { [[ -d "$TMPDIR" ]] && rm -rf "$TMPDIR"; }
trap cleanup EXIT

log "Fetching package list from $URL"
RPMURL=$(lynx -dump -listonly "$URL"|grep kernel-core)
RPMURL=${RPMURL##* }
RPM=$(basename "$RPMURL")
VMLINUZ=${RPM##kernel-core-}
VMLINUZ=${VMLINUZ%%.rpm}
VMLINUZ=$TMPDIR/lib/modules/$VMLINUZ/vmlinuz

# echo URL $URL
# echo RPMURL $RPMURL
# echo RPM $RPM
# echo VMLINUZ $VMLINUZ
log "URL: $URL"
log "RPMURL: $RPMURL"
log "Downloading kernel RPM: $RPM"
log "Target vmlinuz: $VMLINUZ"

cd "$TMPDIR"
curl -s "$RPMURL" | rpm2cpio - | cpio -idm
cd -

[[ -f "$VMLINUZ" ]] || die "vmlinuz not found: $VMLINUZ"

log "Kernel ready: $VMLINUZ"
log "Handing off to ./krun.sh"

./krun.sh "$INITRAMFS" "$VMLINUZ" "$@"
48 changes: 41 additions & 7 deletions krun-rhel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,36 @@
set -euo pipefail

SCRIPT=${0##*/}
VERBOSE=0

log() { (( VERBOSE )) && printf '%s\n' "INFO: $*" >&2 || true; }
log_error() { printf '%s\n' "ERROR: $*" >&2; }
die() { log_error "$*"; exit 1; }

function usage
{
echo "usage: $SCRIPT initramfs.gz RHELVER command" 1>&2
echo "usage: $SCRIPT [-v] initramfs.gz RHELVER command..." 1>&2
echo
echo " -v Verbose output"
echo " initramfs.gz Path to initramfs image"
echo " RHELVER RHEL version (e.g. 8, 9, 8.4, 9.1)"
echo " command... Command to run in guest"
echo
echo "Examples:"
echo " $SCRIPT initramfs.gz 9 /bin/bash"
echo " $SCRIPT -v initramfs.gz 8.4 quark-test -vvv"
exit 1
}

while getopts "vh" opt; do
case $opt in
v) VERBOSE=1 ;;
h) usage ;;
*) usage ;;
esac
done
shift $((OPTIND - 1))

if [ $# -lt 3 ]; then
usage
fi
Expand All @@ -18,30 +41,41 @@ INITRAMFS="$1"
RHELVER="$2"
shift 2

[[ -f $INITRAMFS ]] || die "Initramfs not found: $INITRAMFS"
[[ -f ./krun.sh ]] || die "Required launcher ./krun.sh is missing"

case $RHELVER in
8|9) URL="https://ftp.fau.de/rockylinux/$RHELVER/BaseOS/x86_64/os/Packages/k";;
8.[34]) URL="https://dl.rockylinux.org/vault/rocky/$RHELVER/BaseOS/x86_64/os/Packages";;
8.?|9.?) URL="https://dl.rockylinux.org/vault/rocky/$RHELVER/BaseOS/x86_64/os/Packages/k";;
*) echo bad version "$RHELVER" 1>&2;;
*) die "Unsupported RHEL version: $RHELVER";;
esac

log "Searching for RHEL $RHELVER kernel..."

TMPDIR=$(mktemp -d "/tmp/$SCRIPT.XXXXXXXXXX")
trap 'rm -rf "$TMPDIR"' EXIT
readonly TMPDIR
cleanup() { [[ -d "$TMPDIR" ]] && rm -rf "$TMPDIR"; }
trap cleanup EXIT

log "Fetching package list from $URL"
RPMURL=$(lynx -dump -listonly "$URL"|grep kernel-core)
RPMURL=${RPMURL##* }
RPM=$(basename "$RPMURL")
VMLINUZ=${RPM##kernel-core-}
VMLINUZ=${VMLINUZ%%.rpm}
VMLINUZ=$TMPDIR/lib/modules/$VMLINUZ/vmlinuz

# echo URL $URL
# echo RPMURL $RPMURL
# echo RPM $RPM
# echo VMLINUZ $VMLINUZ
log "Downloading kernel RPM: $RPM"
log "Target vmlinuz: $VMLINUZ"

cd "$TMPDIR"
curl -s "$RPMURL" | rpm2cpio - | cpio -idm
cd -

[[ -f "$VMLINUZ" ]] || die "vmlinuz not found: $VMLINUZ"

log "Kernel ready: $VMLINUZ"
log "Handing off to ./krun.sh"

./krun.sh "$INITRAMFS" "$VMLINUZ" "$@"
Loading