因此,我尝试在 Alpine Linux Docker 容器内构建 musl-libc。配置脚本成功,但 make 立即停止,因为它无法运行 mkdir:
mkdir -p lib
make: mkdir: Operation not permitted
make: *** [Makefile:96: lib] Error 127
使用 strace,我可以看到它在检查各种 mkdir 符号链接的访问时获得 EPERM,因此它实际上从未运行命令本身:
faccessat2(AT_FDCWD, "/usr/local/sbin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/usr/local/bin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/usr/sbin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/usr/bin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/sbin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/bin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
我不知道这是为什么。我以 root 身份运行 make,并且/bin/busybox
无论如何,为所有用户设置了可执行位。我可以从命令行很好地创建目录。这是怎么回事?我该如何解决?
编辑:
根据要求,这是我正在使用的 Dockerfile:
FROM alpine
ENV UTILS='vim tmux gdb strace git mandoc'
ENV DEPS='gcc make'
RUN apk update && apk add $DEPS $UTILS
ADD musl-src /musl-libc
ENV NPROC=6
RUN cd musl-libc && ./configure --prefix=/usr --enable-debug && \
make -j$NPROC
RUN cd musl-libc && make install
需要 musl 源./musl-src
.