如果 运行 在具有 tmpfs 的容器中,为什么介子无法确定 time_t 的大小?
Why can't meson determine the size of time_t if running in a container with a tmpfs?
受 systemd 的 meson.build
文件的启发,我创建了以下文件:
project('test','c')
cc = meson.get_compiler('c')
cc.sizeof('time_t', prefix : '#include <sys/time.h>')
如果我通过 docker run --rm -it ubuntu:18.04 bash
在容器中 运行 并通过 apt update && apt install -y meson gcc
安装介子,这将按预期工作,返回:
Checking for size of "time_t": 8
但是,在docker run
上加上标志--tmpfs /tmp
,结果是这样的:
Checking for size of "time_t": -1
为什么会这样? meson 是否可以在 /tmp
中创建临时可执行文件?
比较了两个容器中/tmp
的挂载选项后,结果很简单:docker似乎默认设置了noexec
,这就是为什么你必须显式设置 exec
标志:
--tmpfs /tmp:rw,nosuid,nodev,exec
受 systemd 的 meson.build
文件的启发,我创建了以下文件:
project('test','c')
cc = meson.get_compiler('c')
cc.sizeof('time_t', prefix : '#include <sys/time.h>')
如果我通过 docker run --rm -it ubuntu:18.04 bash
在容器中 运行 并通过 apt update && apt install -y meson gcc
安装介子,这将按预期工作,返回:
Checking for size of "time_t": 8
但是,在docker run
上加上标志--tmpfs /tmp
,结果是这样的:
Checking for size of "time_t": -1
为什么会这样? meson 是否可以在 /tmp
中创建临时可执行文件?
比较了两个容器中/tmp
的挂载选项后,结果很简单:docker似乎默认设置了noexec
,这就是为什么你必须显式设置 exec
标志:
--tmpfs /tmp:rw,nosuid,nodev,exec