如何解决在 ubuntu 20.04 上安装 Mesos 导致 makefile 问题
我试图使用 Dockefile 在 ubuntu 20.04 上安装 mesos 最新版本(1.9.0)。
FROM ubuntu:20.04
ENV MESOS_VERSION 1.9.0
ENV MESOS_ARTIFACT_FILENAME mesos-${MESOS_VERSION}.tar.gz
# Install Mesos dependencies
# Compile and install Mesos (compilation phase uses 6 threads for speed up this process)
# Uninstall Mesos build dependencies
RUN apt-get update && apt-get install -y \
openjdk-8-jdk \
python-dev \
libcurl4-nss-dev \
libsasl2-dev \
libsasl2-modules \
maven \
libapr1-dev \
libsvn-dev \
zlib1g-dev
RUN wget http://archive.apache.org/dist/mesos/${MESOS_VERSION}/${MESOS_ARTIFACT_FILENAME} \
&& tar -xf ${MESOS_ARTIFACT_FILENAME}
RUN cd mesos-${MESOS_VERSION} \
&& mkdir build \
&& cd build \
&& ../configure \
&& make -j 6 \
&& cp src/.libs/libmesos-${MESOS_VERSION}.so /usr/local/lib/libmesos-${MESOS_VERSION}.so \
&& cd ../.. \
&& rm -rf mesos-${MESOS_VERSION} ${MESOS_ARTIFACT_FILENAME} \
&& apt-get purge -y \
openjdk-8-jdk \
python-dev \
libsasl2-dev \
libsasl2-modules \
maven \
zlib1g-dev \
&& apt-get clean \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/local/lib/libmesos-${MESOS_VERSION}.so /usr/lib/libmesos.so
它一直工作到配置命令
../configure \
&& make -j 6 \
配置后,make 命令抛出不同的错误。其中之一是:
ar: 'u' 修饰符被忽略,因为 'D' 是默认值(参见 'U')
rc/core/lib/gpr/log_linux.cc:42:13: error: ambiguating new declaration of 'long int gettid()'
42 | static long gettid(void) { return syscall(__NR_gettid); }
| ^~~~~~
In file included from /usr/include/unistd.h:1170,from src/core/lib/gpr/log_linux.cc:40:
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h:34:16: note: old declaration '__pid_t gettid()'
34 | extern _pid_t gettid (void) _THROW;
| ^~~~~~
src/core/lib/gpr/log_linux.cc:42:13: warning: 'long int gettid()' defined but not used [-Wunused-function]
42 | static long gettid(void) { return syscall(__NR_gettid); }
| ^~~~~~
make[4]: *** [Makefile:2650: /mesos-1.9.0/build/3rdparty/grpc-1.10.0/objs/opt/src/core/lib/gpr/log_linux.o] Error 1
我在为海马构建 mesos-spark-docker 镜像时做错了什么??请帮帮我。
解决方法
您通过运行 make -j 6
来掩盖 make 中的真正问题。这将导致 make
在 6 个线程中运行,并且所有线程都将同时输出。移至 -j 1
以进行故障排除。
要解决此类问题,您需要在构建失败之前停止构建。如果您使用的是 buildx,请查看此SO post 如何创建阶段和中间映像。完成中间阶段后,您将创建容器并执行手动步骤并逐个解决问题。
为了检查您的问题,我构建了映像直到 ./configure
并创建容器以进一步排除故障。我看到的是缺少一些先决条件,例如 build-essential
、autogen
、autoconf
。我什至需要 default-jdk
,但这可能是路径问题,因为我看到您正在安装 openjdk-8-jdk
。仍然存在缺少库的问题,因此您需要从这一点继续。
我在这个网站上找到了解决方案 It's works for me
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。