AppImage / type2-runtime

The runtime is the executable part of every AppImage. It mounts the payload via FUSE and executes the entrypoint.
Other
17 stars 13 forks source link

`OWD` is not set when `APPIMAGE_EXTRACT_AND_RUN=1` #23

Open lalten opened 5 months ago

lalten commented 5 months ago

See https://github.com/lalten/rules_appimage/issues/156

To reproduce:

cd `mktemp -d`

echo 'bazel_dep(name="rules_appimage", version="1.8.0")' > MODULE.bazel

cat <<'EOF' >BUILD
load("@rules_appimage//appimage:appimage.bzl", "appimage")
sh_binary(
    name = "test_sh",
    srcs = ["test.sh"],
)
appimage(
    name = "test.appimage",
    binary = ":test_sh",
)
EOF

cat <<'EOF' >test.sh
#!/bin/bash
pwd
env | sort
EOF

chmod +x test.sh

bazel build //:test.appimage

I've attached the resulting test.appimage: test.appimage.tar.gz

❯ env -i -- PATH="/bin" bazel-bin/test.appimage
/tmp/.mount_test.aIPOIGM/test_sh.runfiles/_main
APPDIR=/tmp/.mount_test.aIPOIGM
APPIMAGE=/home/user/.cache/bazel/_bazel_user/5f48ff965103b174f3c248651ebad24d/execroot/_main/bazel-out/k8-fastbuild/bin/test.appimage
ARGV0=bazel-bin/test.appimage
BUILD_WORKING_DIRECTORY=/home/user/repo
OLDPWD=/home/user/repo
OWD=/home/user/repo
PATH=/bin
PWD=/tmp/.mount_test.aIPOIGM/test_sh.runfiles/_main
RUNFILES_DIR=/tmp/.mount_test.aIPOIGM/test_sh.runfiles
SHLVL=1
TMPDIR=/tmp
_=/bin/env
❯ env -i -- PATH="/bin" APPIMAGE_EXTRACT_AND_RUN=1 bazel-bin/test.appimage
/tmp/appimage_extracted_065248ba50a9cbfc7dc25b7b2eaffc36/test_sh.runfiles/_main
APPDIR=/tmp/appimage_extracted_065248ba50a9cbfc7dc25b7b2eaffc36
APPIMAGE=/home/user/.cache/bazel/_bazel_user/5f48ff965103b174f3c248651ebad24d/execroot/_main/bazel-out/k8-fastbuild/bin/test.appimage
APPIMAGE_EXTRACT_AND_RUN=1
ARGV0=bazel-bin/test.appimage
BUILD_WORKING_DIRECTORY=
OLDPWD=/home/user/repo
PATH=/bin
PWD=/tmp/appimage_extracted_065248ba50a9cbfc7dc25b7b2eaffc36/test_sh.runfiles/_main
RUNFILES_DIR=/tmp/appimage_extracted_065248ba50a9cbfc7dc25b7b2eaffc36/test_sh.runfiles
SHLVL=1
TMPDIR=/tmp
_=/bin/env

you can see the OWD variable from https://github.com/AppImage/type2-runtime/blob/9594e2b1306a83b1020145f4e4e29c61065536a4/src/runtime/runtime.c#L1710 is set only when the appimage is mounted via fuse, but not when running with APPIMAGE_EXTRACT_AND_RUN=1.

It probably also makes sense to prefix the env var with APPIMAGE_ but that's a different issue.

probonopd commented 5 months ago

Thanks for pointing this out @lalten. Would you be willing to send a pull request? Thanks.