|
| 1 | +# SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause |
| 2 | +FROM debian:bookworm-slim |
| 3 | +RUN <<EOF |
| 4 | +#!/bin/sh |
| 5 | + |
| 6 | +apt-get update -y |
| 7 | +apt-get install -y \ |
| 8 | + --no-install-suggests \ |
| 9 | + --no-install-recommends \ |
| 10 | + ca-certificates \ |
| 11 | + wget \ |
| 12 | + qemu-system-arm \ |
| 13 | + ipxe-qemu \ |
| 14 | + gcc-aarch64-linux-gnu \ |
| 15 | + libc6-dev-arm64-cross \ |
| 16 | + crossbuild-essential-arm64 \ |
| 17 | + build-essential \ |
| 18 | + flex \ |
| 19 | + bison \ |
| 20 | + ninja-build \ |
| 21 | + make \ |
| 22 | + gpg \ |
| 23 | + gpg-agent \ |
| 24 | + git \ |
| 25 | + curl |
| 26 | +rm -rf /var/lib/apt/lists/* |
| 27 | +EOF |
| 28 | + |
| 29 | + |
| 30 | +-----BEGIN PGP PUBLIC KEY BLOCK----- |
| 31 | + |
| 32 | +mQENBEu7PVUBCADN/1+JPpAxp3fDk8jZQ3cUKA3W0maOlyI/4+nlDai1gh83m9CN |
| 33 | +uGyY5kYLPBIR/sdG2hN5TVxTcE8qPCD9MivJXzOhBAmhQl0eXra0qmBBNu9kv+ZP |
| 34 | +qtPORPg2Jch1zZL5jOMawIE0xARZPgu21rPKNJo7V+HejWAHh0/LfFxzzI8LZ1LJ |
| 35 | +ACUuHEgfDJEi+u2wxDfjVaTO8HluNXm4TUIr16ExTx+61VDIE9qd3ikXkHgjp8xF |
| 36 | +sH0qG5IfcFDTPx9L2Fyk0utTnuNW014P4R31n32U9OolFm1MyOzWrMwVBoTi34aE |
| 37 | +nJRT6Aq/WaRfhjIWWkxhWnUgFbPPjMAkWL9fABEBAAG0WFhlbi5vcmcgWGVuIHRy |
| 38 | +ZWUgY29kZSBzaWduaW5nIChzaWduYXR1cmVzIG9uIHRoZSB4ZW4gaHlwZXJ2aXNv |
| 39 | +ciBhbmQgdG9vbHMpIDxwZ3BAeGVuLm9yZz6JAU0EEwECACAFAku7PVUCGwMGCwkI |
| 40 | +BwMCBBUCCAMEFgIDAQIeAQIXgAAhCRCD/hTJV+gr2RYhBCPjIiwUX0R1+oBgp4P+ |
| 41 | +FMlX6CvZbMsH/jTs0LU/GouRrkjP71eOuEN/j127hYNbeDmTNclIz0PIhs0Ojsa4 |
| 42 | +hu6nPZkKuLniHBSgSo3MHwYYYzuiqaCFN4JtoRAZPtVpUPsGj/qgXeSgSBv0gKWk |
| 43 | +TOIdpqAtlJCvo2QgI2qC68tRDlraLAyX1Ert/HGx8uAJ44a4RorhBmSJuWt0NiEu |
| 44 | +LrlWoRJech/G7VO6gC0CLzaxmxwu3HuTfZqCYnnNEUgszAi+KShdZUMZkwffuFpd |
| 45 | +6H8+pguFqIaGsXQIWBG1+FVCi9kdiN7Eme8Mxz75nKQnmEsP+d1p9uCzIui24me3 |
| 46 | +XGXPw9dq7cCDIXZv+iq5Si7zMPm76S74Yyc= |
| 47 | +=h6NI |
| 48 | +-----END PGP PUBLIC KEY BLOCK----- |
| 49 | +EOF |
| 50 | + |
| 51 | +RUN <<EOF |
| 52 | +#!/bin/sh |
| 53 | + |
| 54 | +set -ve |
| 55 | + |
| 56 | + |
| 57 | +EOF |
| 58 | + |
| 59 | +RUN <<EOF |
| 60 | +#!/bin/sh |
| 61 | + |
| 62 | +set -ve |
| 63 | + |
| 64 | +wget https://downloads.xenproject.org/release/xen/4.18.3/xen-4.18.3.tar.gz |
| 65 | +EOF |
| 66 | + |
| 67 | +RUN <<EOF |
| 68 | +#!/bin/sh |
| 69 | + |
| 70 | +set -ve |
| 71 | + |
| 72 | +wget https://downloads.xenproject.org/release/xen/4.18.3/xen-4.18.3.tar.gz.sig |
| 73 | +gpg --verify xen-4.18.3.tar.gz.sig xen-4.18.3.tar.gz |
| 74 | +EOF |
| 75 | + |
| 76 | +RUN <<EOF |
| 77 | +#!/bin/sh |
| 78 | + |
| 79 | +set -ve |
| 80 | + |
| 81 | +tar xzf xen-4.18.3.tar.gz |
| 82 | +EOF |
| 83 | + |
| 84 | +RUN <<EOF |
| 85 | +#!/bin/sh |
| 86 | + |
| 87 | +set -ve |
| 88 | + |
| 89 | +export WORKING_DIR="$(realpath `pwd`)" |
| 90 | +echo WORKING_DIR=${WORKING_DIR} |
| 91 | +cd ./xen-4.18.3/ |
| 92 | +export EXTRA_CFLAGS_XEN_CORE=" -Wno-array-bounds " |
| 93 | +./configure --build=x86_64-unknown-linux-gnu --host=aarch64-linux-gnu \ |
| 94 | + --disable-monitors \ |
| 95 | + --disable-ocamltools \ |
| 96 | + --disable-tools \ |
| 97 | + --disable-docs \ |
| 98 | + --disable-systemd \ |
| 99 | + --enable-debug |
| 100 | +make debug=y debug_symbols=y XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- |
| 101 | +ls $(pwd)/dist/install/boot/ |
| 102 | +file $(pwd)/dist/install/boot/* |
| 103 | +export XEN_KERNEL=$(realpath dist/install/boot/xen-4.18.3) |
| 104 | +echo XEN_KERNEL=${XEN_KERNEL} |
| 105 | +cp "${XEN_KERNEL}" "${WORKING_DIR}"/xen-4.18.3-kernel |
| 106 | +EOF |
| 107 | + |
| 108 | +#RUN <<EOF |
| 109 | +##!/bin/sh |
| 110 | + |
| 111 | +#curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y |
| 112 | +#. "${HOME}/.cargo/env" |
| 113 | +#rustup toolchain install --profile minimal nightly --target aarch64-linux-none |
| 114 | +#EOF |
| 115 | + |
| 116 | +COPY ./target/aarch64-xen-hvm/release/oxerun.bin /oxerun.bin |
| 117 | + |
| 118 | +COPY <<"EOF" /run_qemu_oxerun.sh |
| 119 | +#!/bin/sh |
| 120 | + |
| 121 | +QEMU_OUTPUT=${QEMU_OUTPUT:-/qemu_output.stdout} |
| 122 | +XEN_KERNEL=${XEN_KERNEL:-/xen-4.18.3-kernel} |
| 123 | +DOM0_UNIKERNEL=${DOM0_UNIKERNEL:-/oxerun.bin} |
| 124 | + |
| 125 | +echo QEMU_OUTPUT="${QEMU_OUTPUT}" |
| 126 | +echo XEN_KERNEL="${XEN_KERNEL}" |
| 127 | +echo DOM0_UNIKERNEL="${DOM0_UNIKERNEL}" |
| 128 | + |
| 129 | +if [ ! -f "${XEN_KERNEL}" ]; then |
| 130 | + printf 'XEN_KERNEL value %s does not exist!\n' "${XEN_KERNEL}" 1>&2 |
| 131 | +fi |
| 132 | + |
| 133 | +if [ ! -f "${DOM0_UNIKERNEL}" ]; then |
| 134 | + printf 'DOM0_UNIKERNEL value %s does not exist!\n' "${DOM0_UNIKERNEL}" 1>&2 |
| 135 | +fi |
| 136 | + |
| 137 | +qemu-system-aarch64 \ |
| 138 | + -D qemu.log \ |
| 139 | + -d guest_errors \ |
| 140 | + -machine virt,virtualization=on,gic-version=3 \ |
| 141 | + -cpu cortex-a57 \ |
| 142 | + -chardev file,id=char0,path="${QEMU_OUTPUT}" \ |
| 143 | + -serial chardev:char0 \ |
| 144 | + -monitor none \ |
| 145 | + -display none \ |
| 146 | + -m 8192 \ |
| 147 | + -smp 4 \ |
| 148 | + -kernel "${XEN_KERNEL}" \ |
| 149 | + -append 'dom0_mem=4G loglvl=none guest_loglvl=none sync_console=true' \ |
| 150 | + -device guest-loader,addr=0x80000000,kernel="${DOM0_UNIKERNEL}",bootargs='dom0_mem=4G loglvl=none guest_loglvl=none sync_console=true' |
| 151 | + |
| 152 | +cat > /tmp/expected_output <<DOF |
| 153 | + Xen 4.18.3 |
| 154 | +oxerun hello world |
| 155 | +DOF |
| 156 | + |
| 157 | +if ! diff -w -u /tmp/expected_output "${QEMU_OUTPUT}"> /dev/null 2>&1; then |
| 158 | + diff -w -u /tmp/expected_output "${QEMU_OUTPUT}" |
| 159 | + exit 1 |
| 160 | +fi |
| 161 | + |
| 162 | +exit 0 |
| 163 | +EOF |
| 164 | + |
| 165 | +CMD ["/bin/sh", "/run_qemu_oxerun.sh"] |
0 commit comments