首页 > 解决方案 > 在 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 commad 会抛出不同的错误。其中之一是:

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 映像时做错了什么?请帮我。

标签: dockerapache-sparkmakefilemesos

解决方案


您通过运行make -j 6. 这将导致make在 6 个线程中运行,并且所有线程都将同时输出。移动到-j 1能够排除故障。

要解决此类问题,您需要在构建失败之前停止构建。如果您使用的是 buildx,请查看这篇SO 帖子如何创建阶段和中间图像。完成中间阶段后,您将创建容器并执行手动步骤并逐个解决问题。

为了检查您的问题,我构建了映像,直到./configure创建容器以进一步排除故障。我看到的是缺少一些先决条件,例如build-essential, autogen, autoconf. 我什至需要default-jdk,但这可能是路径问题,因为我看到您正在安装openjdk-8-jdk. 缺少库仍然存在问题,因此您需要从这一点继续。


推荐阅读