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
9 changes: 6 additions & 3 deletions .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,14 @@ jobs:
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64 || true
if [ ! -d ".unikraft/unikraft" ] || [ -z "$(ls -A .unikraft/unikraft 2>/dev/null)" ]; then
echo "::warning::kraft didn't clone unikraft sources; cloning manually"
UK_BRANCH=$(grep -E '^ version:' kraft.yaml | head -1 | awk '{print $2}')
UK_SOURCE=$(awk '/^unikraft:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
UK_BRANCH=$(awk '/^unikraft:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
ELF_SOURCE=$(awk '/app-elfloader:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
ELF_BRANCH=$(awk '/app-elfloader:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
mkdir -p .unikraft/apps .unikraft/libs
rm -rf .unikraft/unikraft .unikraft/apps/elfloader .unikraft/libs/libelf .unikraft/build
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/unikraft.git .unikraft/unikraft
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/app-elfloader.git .unikraft/apps/elfloader
git clone --branch "$UK_BRANCH" --depth 1 "$UK_SOURCE" .unikraft/unikraft
git clone --branch "$ELF_BRANCH" --depth 1 "$ELF_SOURCE" .unikraft/apps/elfloader
git clone --branch staging --depth 1 https://github.com/unikraft/lib-libelf.git .unikraft/libs/libelf
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64
fi
Expand Down
9 changes: 6 additions & 3 deletions .github/workflows/publish-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,14 @@ jobs:
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64 || true
# Fallback: manual source clone + build
if [ ! -f ".unikraft/build/${{ matrix.example.kernel }}" ]; then
UK_BRANCH=$(grep 'version:' kraft.yaml | head -1 | awk '{print $2}')
UK_SOURCE=$(awk '/^unikraft:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
UK_BRANCH=$(awk '/^unikraft:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
ELF_SOURCE=$(awk '/app-elfloader:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
ELF_BRANCH=$(awk '/app-elfloader:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
mkdir -p .unikraft/apps .unikraft/libs
rm -rf .unikraft/unikraft .unikraft/apps/elfloader
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/unikraft.git .unikraft/unikraft
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/app-elfloader.git .unikraft/apps/elfloader
git clone --branch "$UK_BRANCH" --depth 1 "$UK_SOURCE" .unikraft/unikraft
git clone --branch "$ELF_BRANCH" --depth 1 "$ELF_SOURCE" .unikraft/apps/elfloader
git clone --branch staging --depth 1 https://github.com/unikraft/lib-libelf.git .unikraft/libs/libelf
rm -rf .unikraft/build
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64
Expand Down
27 changes: 18 additions & 9 deletions .github/workflows/test-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,14 @@ jobs:
# Manually clone the components and rebuild with --no-fetch/--no-update.
if [ ! -d ".unikraft/unikraft" ] || [ -z "$(ls -A .unikraft/unikraft 2>/dev/null)" ]; then
echo "::warning::kraft didn't clone unikraft sources; cloning manually"
UK_BRANCH=$(grep -E '^ version:' kraft.yaml | head -1 | awk '{print $2}')
UK_SOURCE=$(awk '/^unikraft:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
UK_BRANCH=$(awk '/^unikraft:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
ELF_SOURCE=$(awk '/app-elfloader:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
ELF_BRANCH=$(awk '/app-elfloader:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
mkdir -p .unikraft/apps .unikraft/libs
rm -rf .unikraft/unikraft .unikraft/apps/elfloader .unikraft/libs/libelf .unikraft/build
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/unikraft.git .unikraft/unikraft
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/app-elfloader.git .unikraft/apps/elfloader
git clone --branch "$UK_BRANCH" --depth 1 "$UK_SOURCE" .unikraft/unikraft
git clone --branch "$ELF_BRANCH" --depth 1 "$ELF_SOURCE" .unikraft/apps/elfloader
git clone --branch staging --depth 1 https://github.com/unikraft/lib-libelf.git .unikraft/libs/libelf
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64
fi
Expand Down Expand Up @@ -299,11 +302,14 @@ jobs:
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64 || true
if [ ! -d ".unikraft/unikraft" ] || [ -z "$(ls -A .unikraft/unikraft 2>/dev/null)" ]; then
echo "::warning::kraft didn't clone unikraft sources; cloning manually"
UK_BRANCH=$(grep -E '^ version:' kraft.yaml | head -1 | awk '{print $2}')
UK_SOURCE=$(awk '/^unikraft:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
UK_BRANCH=$(awk '/^unikraft:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
ELF_SOURCE=$(awk '/app-elfloader:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
ELF_BRANCH=$(awk '/app-elfloader:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
mkdir -p .unikraft/apps .unikraft/libs
rm -rf .unikraft/unikraft .unikraft/apps/elfloader .unikraft/libs/libelf .unikraft/build
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/unikraft.git .unikraft/unikraft
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/app-elfloader.git .unikraft/apps/elfloader
git clone --branch "$UK_BRANCH" --depth 1 "$UK_SOURCE" .unikraft/unikraft
git clone --branch "$ELF_BRANCH" --depth 1 "$ELF_SOURCE" .unikraft/apps/elfloader
git clone --branch staging --depth 1 https://github.com/unikraft/lib-libelf.git .unikraft/libs/libelf
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64
fi
Expand Down Expand Up @@ -440,11 +446,14 @@ jobs:
just rootfs
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64 || true
if [ ! -d ".unikraft/unikraft" ] || [ -z "$(ls -A .unikraft/unikraft 2>/dev/null)" ]; then
UK_BRANCH=$(grep -E '^ version:' kraft.yaml | head -1 | awk '{print $2}')
UK_SOURCE=$(awk '/^unikraft:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
UK_BRANCH=$(awk '/^unikraft:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
ELF_SOURCE=$(awk '/app-elfloader:/{f=1} f && /source:/{print $2; exit}' kraft.yaml)
ELF_BRANCH=$(awk '/app-elfloader:/{f=1} f && /version:/{print $2; exit}' kraft.yaml)
mkdir -p .unikraft/apps .unikraft/libs
rm -rf .unikraft/unikraft .unikraft/apps/elfloader .unikraft/libs/libelf .unikraft/build
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/unikraft.git .unikraft/unikraft
git clone --branch $UK_BRANCH --depth 1 https://github.com/unikraft/app-elfloader.git .unikraft/apps/elfloader
git clone --branch "$UK_BRANCH" --depth 1 "$UK_SOURCE" .unikraft/unikraft
git clone --branch "$ELF_BRANCH" --depth 1 "$ELF_SOURCE" .unikraft/apps/elfloader
git clone --branch staging --depth 1 https://github.com/unikraft/lib-libelf.git .unikraft/libs/libelf
kraft-hyperlight --no-prompt build --plat hyperlight --arch x86_64
fi
Expand Down
7 changes: 5 additions & 2 deletions examples/dotnet-nativeaot/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@ unikraft:
CONFIG_OPTIMIZE_PIE: 'y'
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'
CONFIG_APPELFLOADER: 'y'
CONFIG_APPELFLOADER_VFSEXEC: 'y'
Expand Down
7 changes: 5 additions & 2 deletions examples/go/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ unikraft:
# VFS and initrd support
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# ELF loader - Go binary location
Expand Down
7 changes: 5 additions & 2 deletions examples/helloworld-c/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ unikraft:
CONFIG_OPTIMIZE_PIE: 'y'
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'
CONFIG_APPELFLOADER: 'y'
CONFIG_APPELFLOADER_VFSEXEC: 'y'
Expand Down
7 changes: 5 additions & 2 deletions examples/hostfs-posix-c/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ unikraft:
# VFS + initrd as ramfs (for /bin/hello and the ELF loader)
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# devfs + /dev/hcall (needed for HYPERLIGHT_HCALL symbol;
Expand Down
7 changes: 5 additions & 2 deletions examples/hostfs-posix-py/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ unikraft:
# VFS + initrd as ramfs (for /usr/local/bin/python3 and the ELF loader)
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# devfs + /dev/hcall (needed for HYPERLIGHT_HCALL symbol;
Expand Down
7 changes: 5 additions & 2 deletions examples/multifn-c/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@ unikraft:
CONFIG_OPTIMIZE_PIE: 'y'
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'
CONFIG_APPELFLOADER: 'y'
CONFIG_APPELFLOADER_VFSEXEC: 'y'
Expand Down
11 changes: 4 additions & 7 deletions examples/powershell/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,15 @@ unikraft:
CONFIG_OPTIMIZE_SIZE: 'y'
CONFIG_OPTIMIZE_PIE: 'y'

# VFS and initrd support - cpiovfs for zero-copy mount, ramfs for /tmp
# VFS and initrd support - cpiovfs for zero-copy mount
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI1_MP: '/tmp'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI1_DRIVER: 'ramfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI2_MP: '/root'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI2_DRIVER: 'ramfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# ELF loader - execute PowerShell binary
CONFIG_APPELFLOADER: 'y'
Expand Down
11 changes: 7 additions & 4 deletions examples/python-agent-driver/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,20 @@ unikraft:
CONFIG_LIBUKINTCTLR_HYPERLIGHT: 'y'
CONFIG_HYPERLIGHT_MAX_GUEST_LOG_LEVEL: 4

CONFIG_LIBUKPRINT_KLVL_CRIT: 'y'
CONFIG_LIBUKPRINT_KLVL_INFO: 'y'
CONFIG_LIBUKPRINT_PRINT_TIME: 'n'
CONFIG_LIBUKPRINT_PRINT_SRCNAME: 'n'
CONFIG_LIBUKPRINT_PRINT_SRCNAME: 'y'
CONFIG_LIBUKBOOT_BANNER_NONE: 'y'
CONFIG_OPTIMIZE_SIZE: 'y'
CONFIG_OPTIMIZE_PIE: 'y'

CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

CONFIG_LIBDEVFS: 'y'
Expand Down
7 changes: 5 additions & 2 deletions examples/python-agent/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ unikraft:
# VFS + initrd as ramfs (for /usr/local/bin/python3 and the ELF loader)
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# devfs + /dev/hcall (needed for HYPERLIGHT_HCALL symbol;
Expand Down
7 changes: 5 additions & 2 deletions examples/python-tools/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ unikraft:
# VFS and initrd support
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# devfs and host call device (/dev/hcall)
Expand Down
7 changes: 5 additions & 2 deletions examples/python/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,11 @@ unikraft:
# VFS and initrd support
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# ELF loader - execute Python binary, script passed via cmdline
Expand Down
7 changes: 5 additions & 2 deletions examples/rust/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ unikraft:
# VFS and initrd support
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# ELF loader - Rust binary location
Expand Down
10 changes: 6 additions & 4 deletions examples/shell/kraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ unikraft:
CONFIG_OPTIMIZE_SIZE: 'y'
CONFIG_OPTIMIZE_PIE: 'y'

# VFS and initrd support - use ramfs with CPIO extraction
# (ramfs handles symlinks reliably, which BusyBox needs for applet symlinks)
# VFS and initrd support - cpiovfs for zero-copy mount from CPIO
CONFIG_LIBVFSCORE: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_INITRD: 'y'
CONFIG_LIBRAMFS: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI_CUSTOM: 'y'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_MP: '/'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_DRIVER: 'cpiovfs'
CONFIG_LIBVFSCORE_AUTOMOUNT_CI0_UKOPTS_IFINITRD0: 'y'
CONFIG_LIBCPIOVFS: 'y'
CONFIG_LIBUKCPIO: 'y'

# ELF loader - execute /bin/sh, script/command passed via cmdline
Expand Down
41 changes: 41 additions & 0 deletions host/examples/test_cpiovfs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
use hyperlight_unikraft::Sandbox;

fn main() -> anyhow::Result<()> {
let kernel = std::env::args()
.nth(1)
.expect("usage: test_cpiovfs <kernel> <initrd>");
let initrd = std::env::args()
.nth(2)
.expect("usage: test_cpiovfs <kernel> <initrd>");

eprintln!("=== Test: build + init + snapshot + restore + call ===");
{
let mut sbox = Sandbox::builder(&kernel)
.initrd_file(&initrd)
.heap_size(3 * 512 * 1024 * 1024)
.build()?;
eprintln!(" build OK");
sbox.restore()?;
let _: () = sbox.call_named("init", ())?;
eprintln!(" init OK");
sbox.snapshot_now()?;
eprintln!(" snapshot OK");

let snap_path = "/tmp/cpiovfs_snapshot.hls";
sbox.save_snapshot(snap_path)?;
let snap_size = std::fs::metadata(snap_path)?.len();
eprintln!(
" snapshot size: {} MiB ({} bytes)",
snap_size / 1024 / 1024,
snap_size
);

sbox.restore()?;
eprintln!(" restore OK");
let _: () = sbox.call_named("run", "print('test ok')".to_string())?;
eprintln!(" call OK");
}

eprintln!("=== All tests passed ===");
Ok(())
}
6 changes: 5 additions & 1 deletion host/src/bin/pyhl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -464,8 +464,12 @@ fn cmd_run(args: RunArgs) -> Result<()> {
.map(|m| parse_mount(m))
.collect::<Result<_>>()?;

let initrd = home.join(INITRD_FILE);

let t_load = Instant::now();
let mut sandbox = if run_preopens.is_empty() {
let mut sandbox = if initrd.is_file() {
Sandbox::from_snapshot_file_with_initrd(&snapshot, &run_preopens, &initrd)?
} else if run_preopens.is_empty() {
Sandbox::from_snapshot_file(&snapshot)?
} else {
Sandbox::from_snapshot_file_with(&snapshot, &run_preopens)?
Expand Down
Loading
Loading