Or perhaps it would be more accurate to say that it is nondeterministic. This is because it currently succeeds more or less by accident: the AppRun symlink points to ./gnu/store/...-profile/bin/hello, which points to /gnu/store/...-hello-2.12.1/bin/hello (note: absolute path!). There shouldn't be any reason for that to exist inside the chroot, except that the daemon's reference scanner has noticed that some of the inputs to the appimage-building derivation *may* have their hashes visible in the built appimage. I say "may" because the appimage is compressed with squashfs, so it's a matter of luck whether a hash is actually directly visible. Currently, in the master branch, it happens to be visible, but in my local repository it isn't, and so it fails for me.
To demonstrate this without relying on the fickle compression, find the store path of the appimage built during the tests/pack.scm "appimage" test case after running "make check TESTS=tests/pack.scm" (the "check-appimage" derivation is printed into tests/pack.log, from there you can find the appimage derivation and its output path), and call it $IMAGE. Then: $ IMAGE=/gnu/store/2c8m9in2pkgkf8p9qgv17dqz19jfxmmm-hello-appimage.AppImage $ mkdir test-root $ mkdir test-root/proc $ mkdir test-root/tmp $ cp "$IMAGE" test-root/test-image $ unshare --user --mount --map-root-user then, in the subshell spawned by unshare: $ mount --bind /proc test-root/proc $ chroot ./test-root /test-image --appimage-extract-and-run you should see "Failed to run /tmp/appimage_extracted_e331827d4eb2f579cccf6fb79143c261/AppRun: No such file or directory" or something like it. - reepca
signature.asc
Description: PGP signature