Skip to content

Commit 3908b43

Browse files
stanek-michalhaesbaert
authored andcommitted
Add testing on Ubuntu kernel and enhance distro scripts
Add krun-ubuntu.sh which downloads and extracts kernel image from official Ubuntu mirrors, then hands it off to generic krun.sh. Handle both compressed and uncompressed kernels. Support 20.04, 22.04, 24.04, 25.04, amd64 only for now. Add Ubuntu to buildkite CI. Enhance all distro scripts with better logging and error handling.
1 parent f215e54 commit 3908b43

File tree

5 files changed

+325
-14
lines changed

5 files changed

+325
-14
lines changed

.buildkite/pipeline.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,3 +384,58 @@ steps:
384384
provider: gcp
385385
machineType: n2-standard-2
386386
enableNestedVirtualization: true
387+
388+
- label: "quark-test on ubuntu 18.04 (no bpf)"
389+
key: test_ubuntu_18_04
390+
command: "./.buildkite/runtest_distro.sh ubuntu 18.04 -k"
391+
depends_on:
392+
- make_docker
393+
agents:
394+
image: family/core-ubuntu-2404
395+
provider: gcp
396+
machineType: n2-standard-2
397+
enableNestedVirtualization: true
398+
399+
- label: "quark-test on ubuntu 20.04"
400+
key: test_ubuntu_20_04
401+
command: "./.buildkite/runtest_distro.sh ubuntu 20.04"
402+
depends_on:
403+
- make_docker
404+
agents:
405+
image: family/core-ubuntu-2404
406+
provider: gcp
407+
machineType: n2-standard-2
408+
enableNestedVirtualization: true
409+
410+
- label: "quark-test on ubuntu 22.04"
411+
key: test_ubuntu_22_04
412+
command: "./.buildkite/runtest_distro.sh ubuntu 22.04"
413+
depends_on:
414+
- make_docker
415+
agents:
416+
image: family/core-ubuntu-2404
417+
provider: gcp
418+
machineType: n2-standard-2
419+
enableNestedVirtualization: true
420+
421+
- label: "quark-test on ubuntu 24.04"
422+
key: test_ubuntu_24_04
423+
command: "./.buildkite/runtest_distro.sh ubuntu 24.04"
424+
depends_on:
425+
- make_docker
426+
agents:
427+
image: family/core-ubuntu-2404
428+
provider: gcp
429+
machineType: n2-standard-2
430+
enableNestedVirtualization: true
431+
432+
- label: "quark-test on ubuntu 25.04"
433+
key: test_ubuntu_25_04
434+
command: "./.buildkite/runtest_distro.sh ubuntu 25.04"
435+
depends_on:
436+
- make_docker
437+
agents:
438+
image: family/core-ubuntu-2404
439+
provider: gcp
440+
machineType: n2-standard-2
441+
enableNestedVirtualization: true

.buildkite/runtest_distro.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,6 @@ sudo kvm-ok
3636
case "$DISTRO" in
3737
fedora) sudo ./krun-fedora.sh initramfs.gz "$DISTROVER" quark-test $@;;
3838
rhel) sudo ./krun-rhel.sh initramfs.gz "$DISTROVER" quark-test $@;;
39+
ubuntu) sudo ./krun-ubuntu.sh initramfs.gz "$DISTROVER" quark-test $@;;
3940
*) echo bad distribution "$DISTROVER" 1>&2;;
4041
esac

krun-fedora.sh

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,36 @@
33
set -euo pipefail
44

55
SCRIPT=${0##*/}
6+
VERBOSE=0
7+
8+
log() { (( VERBOSE )) && printf '%s\n' "INFO: $*" >&2 || true; }
9+
log_error() { printf '%s\n' "ERROR: $*" >&2; }
10+
die() { log_error "$*"; exit 1; }
611

712
function usage
813
{
9-
echo "usage: $SCRIPT initramfs.gz FEDORAVERSION command" 1>&2
14+
echo "usage: $SCRIPT [-v] initramfs.gz FEDORAVERSION command..." 1>&2
15+
echo
16+
echo " -v Verbose output"
17+
echo " initramfs.gz Path to initramfs image"
18+
echo " FEDORAVERSION Fedora version (e.g. 39, 40, rawhide)"
19+
echo " command... Command to run in guest"
20+
echo
21+
echo "Examples:"
22+
echo " $SCRIPT initramfs.gz 40 /bin/bash"
23+
echo " $SCRIPT -v initramfs.gz rawhide quark-test -vvv"
1024
exit 1
1125
}
1226

27+
while getopts "vh" opt; do
28+
case $opt in
29+
v) VERBOSE=1 ;;
30+
h) usage ;;
31+
*) usage ;;
32+
esac
33+
done
34+
shift $((OPTIND - 1))
35+
1336
if [ $# -lt 3 ]; then
1437
usage
1538
fi
@@ -18,30 +41,43 @@ INITRAMFS="$1"
1841
FEDORAVER="$2"
1942
shift 2
2043

44+
[[ -f $INITRAMFS ]] || die "Initramfs not found: $INITRAMFS"
45+
[[ -f ./krun.sh ]] || die "Required launcher ./krun.sh is missing"
46+
2147
case $FEDORAVER in
2248
2?|3?) URL="https://archives.fedoraproject.org/pub/archive/fedora/linux/updates/$FEDORAVER/Everything/x86_64/Packages/k";;
2349
43|rawhide) URL="https://ftp.fau.de/fedora/linux/development/$FEDORAVER/Everything/x86_64/os/Packages/k";;
2450
4?) URL="https://ftp.fau.de/fedora/linux/updates/$FEDORAVER/Everything/x86_64/Packages/k";;
25-
*) echo bad version "$FEDORAVER" 1>&2;;
51+
*) die "Unsupported Fedora version: $FEDORAVER";;
2652
esac
2753

54+
log "Searching for Fedora $FEDORAVER kernel..."
55+
2856
TMPDIR=$(mktemp -d "/tmp/$SCRIPT.XXXXXXXXXX")
29-
trap 'rm -rf "$TMPDIR"' EXIT
57+
readonly TMPDIR
58+
cleanup() { [[ -d "$TMPDIR" ]] && rm -rf "$TMPDIR"; }
59+
trap cleanup EXIT
3060

61+
log "Fetching package list from $URL"
3162
RPMURL=$(lynx -dump -listonly "$URL"|grep kernel-core)
3263
RPMURL=${RPMURL##* }
3364
RPM=$(basename "$RPMURL")
3465
VMLINUZ=${RPM##kernel-core-}
3566
VMLINUZ=${VMLINUZ%%.rpm}
3667
VMLINUZ=$TMPDIR/lib/modules/$VMLINUZ/vmlinuz
3768

38-
# echo URL $URL
39-
# echo RPMURL $RPMURL
40-
# echo RPM $RPM
41-
# echo VMLINUZ $VMLINUZ
69+
log "URL: $URL"
70+
log "RPMURL: $RPMURL"
71+
log "Downloading kernel RPM: $RPM"
72+
log "Target vmlinuz: $VMLINUZ"
4273

4374
cd "$TMPDIR"
4475
curl -s "$RPMURL" | rpm2cpio - | cpio -idm
4576
cd -
4677

78+
[[ -f "$VMLINUZ" ]] || die "vmlinuz not found: $VMLINUZ"
79+
80+
log "Kernel ready: $VMLINUZ"
81+
log "Handing off to ./krun.sh"
82+
4783
./krun.sh "$INITRAMFS" "$VMLINUZ" "$@"

krun-rhel.sh

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,36 @@
33
set -euo pipefail
44

55
SCRIPT=${0##*/}
6+
VERBOSE=0
7+
8+
log() { (( VERBOSE )) && printf '%s\n' "INFO: $*" >&2 || true; }
9+
log_error() { printf '%s\n' "ERROR: $*" >&2; }
10+
die() { log_error "$*"; exit 1; }
611

712
function usage
813
{
9-
echo "usage: $SCRIPT initramfs.gz RHELVER command" 1>&2
14+
echo "usage: $SCRIPT [-v] initramfs.gz RHELVER command..." 1>&2
15+
echo
16+
echo " -v Verbose output"
17+
echo " initramfs.gz Path to initramfs image"
18+
echo " RHELVER RHEL version (e.g. 8, 9, 8.4, 9.1)"
19+
echo " command... Command to run in guest"
20+
echo
21+
echo "Examples:"
22+
echo " $SCRIPT initramfs.gz 9 /bin/bash"
23+
echo " $SCRIPT -v initramfs.gz 8.4 quark-test -vvv"
1024
exit 1
1125
}
1226

27+
while getopts "vh" opt; do
28+
case $opt in
29+
v) VERBOSE=1 ;;
30+
h) usage ;;
31+
*) usage ;;
32+
esac
33+
done
34+
shift $((OPTIND - 1))
35+
1336
if [ $# -lt 3 ]; then
1437
usage
1538
fi
@@ -18,30 +41,41 @@ INITRAMFS="$1"
1841
RHELVER="$2"
1942
shift 2
2043

44+
[[ -f $INITRAMFS ]] || die "Initramfs not found: $INITRAMFS"
45+
[[ -f ./krun.sh ]] || die "Required launcher ./krun.sh is missing"
46+
2147
case $RHELVER in
2248
8|9) URL="https://ftp.fau.de/rockylinux/$RHELVER/BaseOS/x86_64/os/Packages/k";;
2349
8.[34]) URL="https://dl.rockylinux.org/vault/rocky/$RHELVER/BaseOS/x86_64/os/Packages";;
2450
8.?|9.?) URL="https://dl.rockylinux.org/vault/rocky/$RHELVER/BaseOS/x86_64/os/Packages/k";;
25-
*) echo bad version "$RHELVER" 1>&2;;
51+
*) die "Unsupported RHEL version: $RHELVER";;
2652
esac
2753

54+
log "Searching for RHEL $RHELVER kernel..."
55+
2856
TMPDIR=$(mktemp -d "/tmp/$SCRIPT.XXXXXXXXXX")
29-
trap 'rm -rf "$TMPDIR"' EXIT
57+
readonly TMPDIR
58+
cleanup() { [[ -d "$TMPDIR" ]] && rm -rf "$TMPDIR"; }
59+
trap cleanup EXIT
3060

61+
log "Fetching package list from $URL"
3162
RPMURL=$(lynx -dump -listonly "$URL"|grep kernel-core)
3263
RPMURL=${RPMURL##* }
3364
RPM=$(basename "$RPMURL")
3465
VMLINUZ=${RPM##kernel-core-}
3566
VMLINUZ=${VMLINUZ%%.rpm}
3667
VMLINUZ=$TMPDIR/lib/modules/$VMLINUZ/vmlinuz
3768

38-
# echo URL $URL
39-
# echo RPMURL $RPMURL
40-
# echo RPM $RPM
41-
# echo VMLINUZ $VMLINUZ
69+
log "Downloading kernel RPM: $RPM"
70+
log "Target vmlinuz: $VMLINUZ"
4271

4372
cd "$TMPDIR"
4473
curl -s "$RPMURL" | rpm2cpio - | cpio -idm
4574
cd -
4675

76+
[[ -f "$VMLINUZ" ]] || die "vmlinuz not found: $VMLINUZ"
77+
78+
log "Kernel ready: $VMLINUZ"
79+
log "Handing off to ./krun.sh"
80+
4781
./krun.sh "$INITRAMFS" "$VMLINUZ" "$@"

0 commit comments

Comments
 (0)