| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
crystal: install gc-static for static linking on alpine Alpine has gc-static package available. Install it to enable static linking test which was previously skipped. Tested: crystal build main.cr --static now works on alpine Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
brew_repo: handle uses_from_macos dependencies for Linux bottles Problem: On Linux, brew packages like curl fail to run due to missing implicit dependencies that are listed in uses_from_macos field (e.g. krb5, openldap). These dependencies work on macOS because they're system libraries, but on Linux they must be installed as real packages. Root Cause Analysis: 1. Homebrew formula.json API has "uses_from_macos" field for each formula 2. Example curl formula: uses_from_macos: ["krb5", "openldap"] 3. On macOS: these are system libs, no need to install 4. On Linux: Homebrew converts them to real dependencies 5. epkg's BrewFormula struct was missing uses_from_macos field 6. Even if added, the field has multiple formats: - Simple string: "krb5" → runtime dependency - Hash with string: {"bison": "build"} → build dependency - Hash with list: {"python": ["build", "test"]} → multiple types Solution: 1. Add UsesFromMacosEntry enum to handle all three formats 2. Add UsesFromMacosType enum for single/multiple type values 3. In to_package(): for Linux bottles, add uses_from_macos entries to appropriate dependency lists based on their types 4. Update curl.sh to remove manual krb5/openldap (now auto-resolved) Verification: $ epkg -e dev-brew info curl | grep requires requires: brotli, libnghttp2, ..., krb5, openldap $ ./tests/dev-projects/run.sh -o brew -t curl [brew/curl] OK Fixes: tests/dev-projects/langs/curl.sh curl HTTPS fails on brew error: curl: (60) SSL certificate ... unable to get local issuer certificate Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: install gcc for brew packages needing libstdc++ Problem: Brew packages (openjdk, zig, erlang, elixir, scala) depend on libstdc++.so.6 which is not declared in their sbom dependencies. Running these binaries fails with: libstdc++.so.6: cannot open shared object file Solution: Pre-install gcc (which provides libstdc++) for OS=brew in affected lang test scripts: - java.sh: openjdk needs libstdc++ - zig.sh: zig needs libstdc++ - erlang.sh: erlang/beam.smp needs libstdc++ - elixir.sh: depends on erlang, also use bash wrapper for run_ebin - scala.sh: depends on openjdk Note: Elixir additionally needs bash wrapper because run_ebin's elf-loader PATH doesn't include erl binary when executing elixir script directly. Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: install gcc for brew packages needing libstdc++ Problem: Brew packages (openjdk, zig, erlang, elixir, scala) depend on libstdc++.so.6 which is not declared in their sbom dependencies. Running these binaries fails with: libstdc++.so.6: cannot open shared object file Solution: Pre-install gcc (which provides libstdc++) for OS=brew in affected lang test scripts: - java.sh: openjdk needs libstdc++ - zig.sh: zig needs libstdc++ - erlang.sh: erlang/beam.smp needs libstdc++ - elixir.sh: depends on erlang, also use bash wrapper for run_ebin - scala.sh: depends on openjdk Note: Elixir additionally needs bash wrapper because run_ebin's elf-loader PATH doesn't include erl binary when executing elixir script directly. Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
go: fix log message in VM mode skip Problem: go.sh uses 'log' command which on macOS is the system log viewer (/usr/bin/log), not a logging function. This causes error: log: Unknown subcommand 'Skipping go build test...' Solution: Replace 'log' with 'echo' to properly display the skip message. Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: add msys2 support for dev-projects tests - Add msys2 to ALL_OS list in tests/common.sh - Handle msys2 like conda in run_ebin/run_ebin_if (skip ebin tests) - Use bash instead of /bin/sh for msys2 (no /bin/sh available) - Install only bash (not busybox) for msys2 bootstrap_shell - Update lang test scripts to use bash for shell commands on msys2: - c.sh, clang.sh, cpp.sh, crystal.sh, erlang.sh, java.sh - lisp.sh, lua.sh, python.sh, ruby.sh, rust.sh, zig.sh msys2 is a Windows-native package manager that runs without VM. It has bash but no /bin/sh, requiring special handling similar to conda on Windows. Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 4 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: install gcc for brew packages needing libstdc++ Problem: Brew packages (openjdk, zig, erlang, elixir, scala) depend on libstdc++.so.6 which is not declared in their sbom dependencies. Running these binaries fails with: libstdc++.so.6: cannot open shared object file Solution: Pre-install gcc (which provides libstdc++) for OS=brew in affected lang test scripts: - java.sh: openjdk needs libstdc++ - zig.sh: zig needs libstdc++ - erlang.sh: erlang/beam.smp needs libstdc++ - elixir.sh: depends on erlang, also use bash wrapper for run_ebin - scala.sh: depends on openjdk Note: Elixir additionally needs bash wrapper because run_ebin's elf-loader PATH doesn't include erl binary when executing elixir script directly. Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 | |
tests: use TEST_TMP for persistent storage in VM guest Problem: On macOS/Windows with libkrun VM, /tmp in guest is ephemeral (tmpfs). Each epkg run command starts a new VM session, so files in /tmp created by one run command are lost when VM exits. Root Cause: - VM guest /tmp is mounted as tmpfs by guest init (MOUNT_SPECS_VMM_INIT) - Host /tmp is not shared via virtiofs, so guest /tmp is isolated - Each epkg run creates fresh VM -> fresh /tmp -> no persistence Solution: 1. Create TEST_TMP=/tmp/epkg-test-$LANG_NAME on host 2. Pass --mount TEST_TMP to epkg run for virtiofs sharing 3. Update test scripts to use $TEST_TMP instead of /tmp Files changed: - common.sh: Add TEST_TMP creation and --mount in run() - langs/*.sh: Replace /tmp/xxx with $TEST_TMP/xxx Tested: - rust.sh: OK (cargo build/run persists across VM sessions) - node.sh: OK (npm install persists) - c.sh: OK (gcc/make build) Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 3 个月前 |