hhvm icon indicating copy to clipboard operation
hhvm copied to clipboard

[ Crash ] EOPNOTSUPP hh_client on linux kernel version 6.9 and below in Docker (using overlayfs)

Open lexidor opened this issue 6 months ago • 5 comments

Describe the bug When running hh_client with a modern hhvm build on the 6.1 kernel (the default of Debian 12), an error is raised EOPNOTSUPP. This error is not raised on a 6.12 kernel.

Standalone code, or other way to reproduce the problem

Steps to reproduce the behavior:

  1. Compile your own hhvm and hh_client from this PR: https://github.com/facebook/hhvm/pull/9564
  2. Create an empty /etc/hh.conf file
  3. Create an new directory with .hhconfig and file.hack. Both can be empty.
  4. Typecheck your code with hh_server --check .
  5. Typecheck your code with hh_server . or hh_client
  6. This last step fails with the error described above.

Expected behavior

No errors!

Actual behavior

("Unix.Unix_error(Unix.EOPNOTSUPP, \"hh_open_tmpfile\", \"/tmp/hh_server\")")
Raised by primitive operation at Sys_utils.atomically_create_and_init_file in file "hack/src/utils/sys/sys_utils.ml", line 772, characters 11-71
Called from Server_progress.ErrorsWrite.new_empty_file.(fun) in file "hack/src/client_and_server/server_progress.ml", lines 446-453, characters 14-53

Environment

  • Operating system

'Debian 12 (Bookworm)'

  • Installation method

'built from source' 'running in docker'

  • HHVM Version

HipHop VM 6.79.0-dev (rel) (non-lowptr) Compiler: heads/fix-oss-build-0-g03747d03a401005326a90060621b41bf88ef999c Repo schema: 4e0f8e27bd2ef969b1c0606be3fec128f116cac8 hackc-ea9ee869cba86727ff515f59ac651db9dd90a203-6.79.0-dev

lexidor avatar May 28 '25 20:05 lexidor

~~A naïve search indicates the error is related to an unsupported socket operation, so straceing your hh_client process might yield some more useful context on the exact operation / syscall that's failing here.~~

Edit: probably it's O_TMPFILE from b784cacd3b72d9c346c206ef6f7b02f5fa34acfe by elimination. What filesystem were you using?

mszabo-wikia avatar May 28 '25 22:05 mszabo-wikia

Edit: probably it's O_TMPFILE from b784cac by elimination. What filesystem were you using?

I didn't change the default, so ext4.

I marked this issue as won't fix, because this looks like a missing (implicit) system requirement. Have I misjudged that?

lexidor avatar May 29 '25 06:05 lexidor

Yeah, from some more digging this seems to be because overlayfs (used by Docker and co for container filesystems) didn't support O_TMPFILE until https://github.com/torvalds/linux/commit/9a87907de3597a339cc129229d1a20bc7365ea5f / 6.10.x.

In theory the code could have a fallback for this but I don't think it'd be worth doing, since support exists now and (AIUI) bind-mounting some local directory instead of using an in-container directory should be a usable workaround on older systems. Certainly good to have this noted in an issue though in case someone runs into it.

mszabo-wikia avatar May 29 '25 12:05 mszabo-wikia

On Debian, you can install a newer kernel from backports. Currently, kernel 6.12.32 is available in bookwork-backports. It should also work fine if you run it directly on the system rather than using Docker.

@lexidor It would be useful to change the title of this issue to say it's an issue with Docker/overlayfs specifically.

Daniel15 avatar Jul 01 '25 22:07 Daniel15

@lexidor It would be useful to change the title of this issue to say it's an issue with Docker/overlayfs specifically.

I have changed the issue title.

lexidor avatar Jul 01 '25 22:07 lexidor