diff --git a/.gitignore b/.gitignore index 86f8aff..972c33b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,6 @@ kata-static-*.tar.zst /demo/kilocode/kilo /demo/netdebug/netdebug /demo/opencode/opencode +/demo/goose/goose .bunkerbox/ demo/crush/crush diff --git a/demo/goose/run-demo.sh b/demo/goose/run-demo.sh new file mode 100755 index 0000000..3a13798 --- /dev/null +++ b/demo/goose/run-demo.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)" + +if [ -n "${PROD:-}" ]; then + BUILD_PROFILE="release" + MAKE_TARGET="release" +else + BUILD_PROFILE="debug" + MAKE_TARGET="dev" +fi + +SHARE_DIR="${SCRIPT_DIR}/share" +OCI_DIR="${SHARE_DIR}/oci" +KATA_DIR="${SHARE_DIR}/kata" +OCI_FILE="${OCI_DIR}/bunkerbox-goose-1.45.0.oci" +RUNTIME_CONF="${SHARE_DIR}/goose.conf" +BUNKERBOX="${PROJECT_ROOT}/target/${BUILD_PROFILE}/bunkerbox" +BUNKERBOX_IMAGE="${PROJECT_ROOT}/target/${BUILD_PROFILE}/bunkerbox-image" +GOOSE_LINK="${SCRIPT_DIR}/goose" +KATA_VERSION="${KATA_VERSION:-3.32.0}" +KATA_TARBALL_NAME="kata-static-${KATA_VERSION}-amd64.tar.zst" +KATA_TARBALL="${SCRIPT_DIR}/${KATA_TARBALL_NAME}" +KATA_SHARE_TARBALL="${SHARE_DIR}/${KATA_TARBALL_NAME}" +KATA_URL="https://github.com/kata-containers/kata-containers/releases/download/${KATA_VERSION}/${KATA_TARBALL_NAME}" +KATA_ARCHIVE_PREFIX="/$(printf '%s/%s' opt kata)" +KATA_ARCHIVE_PATH=".${KATA_ARCHIVE_PREFIX}" + +rm -f "$GOOSE_LINK" +rm -rf "$OCI_DIR" "$KATA_DIR" +mkdir -p "$OCI_DIR" "$KATA_DIR" + +make -C "$PROJECT_ROOT" "${MAKE_TARGET}" + +if [ ! -x "${KATA_DIR}/bin/containerd-shim-kata-v2" ]; then + if [ ! -f "$KATA_TARBALL" ]; then + echo "Downloading Kata ${KATA_VERSION}..." + curl -fL "$KATA_URL" -o "$KATA_TARBALL" + fi + + cp "$KATA_TARBALL" "$KATA_SHARE_TARBALL" + + echo "Installing Kata ${KATA_VERSION} to ${KATA_DIR}" + rm -rf "$KATA_DIR" + mkdir -p "$KATA_DIR" + tar --use-compress-program=unzstd -xf "$KATA_SHARE_TARBALL" -C "$KATA_DIR" --strip-components=3 "$KATA_ARCHIVE_PATH" + rm -f "$KATA_SHARE_TARBALL" +fi + +if grep -Rqs "$KATA_ARCHIVE_PREFIX" "$KATA_DIR"; then + echo "Updating Kata config paths for ${KATA_DIR}" + grep -RIl "$KATA_ARCHIVE_PREFIX" "$KATA_DIR" \ + | xargs -r sed -i "s#${KATA_ARCHIVE_PREFIX}#${KATA_DIR}#g" +fi + +QEMU_BIOS="${KATA_DIR}/share/kata-qemu/qemu/bios-256k.bin" +if [ -f "$QEMU_BIOS" ]; then + sed -i "s#^firmware = \"\"#firmware = \"${QEMU_BIOS}\"#" \ + "${KATA_DIR}/share/defaults/kata-containers/configuration.toml" \ + "${KATA_DIR}/share/defaults/kata-containers/configuration-qemu.toml" +fi + +QEMU_BIN="${KATA_DIR}/bin/qemu-system-x86_64" +QEMU_REAL="${KATA_DIR}/bin/qemu-system-x86_64.real" +QEMU_DATA_DIR="${KATA_DIR}/share/kata-qemu/qemu" +if [ -x "$QEMU_BIN" ] && [ ! -x "$QEMU_REAL" ]; then + mv "$QEMU_BIN" "$QEMU_REAL" + cat > "$QEMU_BIN" <