
集群管理任务调度后端【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/mesos1/mesos点击查看免费下载导读Apache Mesos 是基于 Autotoolsautoconf/automake/libtool构建的分布式系统内核其configure脚本是决定编译产物形态、依赖来源与运行性能的总开关。本文以官方文档 docs/configuration/autotools.md 为骨架逐项讲解 Mesosconfigure的功能开关--enable-*/--disable-*、可选依赖包参数--with-*与影响配置的环境变量并深入 configure.ac2985 行、3rdparty/Makefile.am 与 Makefile.am 等构建脚本还原每个选项在源码中的真实作用。读完本文你将能够根据部署场景如启用 GPU 隔离、搭建 SSL 通信、追求极致消息性能或接入系统自带依赖精准定制 Mesos 的构建配置。说明文中所有选项均来自当前仓库configure.ac与官方文档./configure --help始终是查看最新选项的第一来源文档原文即如此提示。一、Autotools 构建体系概览Mesos 的源码根目录包含 configure.ac、Makefile.am、bootstrap 等文件。configure.ac是 autoconf 的输入经bootstrap后生成configure脚本Makefile.am是 automake 的输入生成 Makefile.in。第三方依赖则统一收纳在 3rdparty/ 下其中 3rdparty/Makefile.am 负责解压、打补丁并逐个构建 bundled捆绑依赖。一个典型的构建流程为./bootstrap # 生成 configure 与 Makefile.in mkdir build cd build ../configure [选项...] make -j $(nproc)configure脚本中的选项大体分为三类功能开关Optional features--enable-*/--disable-*控制某个能力是否编译进产物可选依赖包Optional packages--with-*指定第三方库位置或切换捆绑/系统依赖环境变量通过AC_ARG_VAR声明供用户覆盖configure的自动探测结果。它们在configure.ac中的定义位置分别是第 204–397 行的 Optional features 段与第 399–575 行的 Optional packages 段。二、Autotools 通用选项以下选项由 autoconf/automake/libtool 基础设施提供适用于绝大多数 Autotools 项目Mesos 文档也完整列出选项说明--enable-static[PKGS]构建静态库。[默认yes]--enable-shared[PKGS]构建共享库。[默认yes]--enable-fast-install[PKGS]为快速安装优化。[默认yes]--enable-dependency-tracking不拒绝慢速依赖提取器保守选项。--disable-dependency-tracking加速一次性构建不追踪依赖适合只编译一次的场景。--enable-silent-rules精简构建输出如需查看完整命令可用make V1撤销。--disable-silent-rules输出详细构建命令可用make V0撤销。--disable-maintainer-mode关闭仅供维护者使用的 make 规则与依赖避免干扰普通安装者。--disable-libtool-lock避免 libtool 加锁。注意可能破坏并行构建。其中--enable-silent-rules与make V1/V0的对应关系是官方文档明确给出的用法适合在 CI 日志中快速定位编译错误。三、Mesos 专属功能开关Optional Features这些选项定义于 configure.ac是 Mesos 构建配置的核心。3.1 依赖来源控制--disable-bundledMesos 在 3rdparty/ 中捆绑了大量第三方库Boost、protobuf、glog、LevelDB、ZooKeeper 等见 3rdparty/ 目录下的各.tar.gz与.patch。默认情况下enable_bundledyes构建时使用捆绑库。# 默认行为使用捆绑依赖 ../configure # 改用系统预装依赖要求系统已安装全部依赖 ../configure --disable-bundled在 configure.ac 的注释中明确写道当用户指定了--with-XXXDIR或使用--disable-bundled时configure 会attempt to use preinstalled dependencies instead of the bundled versions。以 Boost 为例configure.acif test x$without_bundled_boost xyes || \ test x$enable_bundled ! xyes; then AC_CHECK_HEADERS([boost/version.hpp], [found_boostyes]) if test x$found_boost xyes; then with_bundled_boostno else AC_MSG_ERROR([cannot find Boost ...]) fi else with_bundled_boostyes fi AM_CONDITIONAL([WITH_BUNDLED_BOOST], [test x$with_bundled_boost xyes])即一旦选择非捆绑模式configure 会尝试探测系统头文件找不到则直接报错并提示--with-XXXDIR指定路径。此后 3rdparty/Makefile.am 会依据WITH_BUNDLED_*条件宏决定是编译捆绑库还是链接系统库例如 libprocess 对 libev/libevent 的二选一逻辑见 3rdparty/libprocess/Makefile.am。3.2 Python 打包工具--disable-bundled-pip/setuptools/wheelMesos 构建 Python 绑定时会捆绑 pip、setuptools、wheel 三个 Python 打包工具对应 3rdparty/ 下的pip-7.1.2.tar.gz、setuptools-20.9.0.tar.gz、wheel-0.24.0.tar.gz。--disable-bundled-pip不使用捆绑 pip改用PYTHONPATH中的已安装版本--disable-bundled-setuptools同上针对 setuptools--disable-bundled-wheel同上针对 wheel。默认均为启用捆绑configure.ac且仅在检测到 Python 时生效——3rdparty/Makefile.am 中WITH_BUNDLED_PIP/SETUPTOOLS/WHEEL条件块整体包在if HAS_PYTHON之内。这三个选项适合需要固定打包工具版本的发行版构建场景。3.3 编译优化与调试--enable-debug/--enable-optimize/--enable-gc-unused--enable-debug启用调试信息。[默认no]。若已设置CFLAGS/CXXFLAGS本选项不会覆盖它们。--enable-optimize启用优化-O2。[默认no]。同样的不覆盖用户自定义的CFLAGS/CXXFLAGS。两者在 configure.ac 中的实际逻辑为debug_flags-g1 if test x$enable_debug xyes; then debug_flags-g -fno-omit-frame-pointer elif test x$enable_optimize xyes; then debug_flags fi if test x$enable_optimize xyes; then optimize_flags-O2 else optimize_flags-O0 fi AS_IF([test x${ac_cv_env_CFLAGS_set} x], [CFLAGS$debug_flags $optimize_flags]) AS_IF([test x${ac_cv_env_CXXFLAGS_set} x], [CXXFLAGS$debug_flags $optimize_flags])可见默认两者皆 no时采用-g1 -O0--enable-debug增加-g -fno-omit-frame-pointer保留栈帧便于调试器回溯--enable-optimize改为-O2。由于只有环境变量未被显式设置时才注入默认 flags用户完全可以通过导出CFLAGS/CXXFLAGS完全掌控编译参数。--enable-gc-unused对未使用的程序段启用垃圾回收可显著减小最终构建产物体积。[默认no]。该选项启用后会向编译与链接加入-ffunction-sections -fdata-sections与-Wl,--gc-sections并在配置阶段先用这些参数做一次试链接若工具链不支持则直接AC_MSG_ERRORconfigure.ac。适合对磁盘占用敏感的生产镜像。3.4 静态断言--enable-static-unimplemented[默认no]。启用后通过AC_DEFINE([ENABLE_STATIC_UNIMPLEMENTED], [1])定义宏configure.ac使尚未实现的接口在编译期产生静态断言错误而非运行期才暴露。适合 Mesos 模块/插件开发者在编写自定义实现时尽早发现问题。3.5 消息传递性能--enable-lock-free-event-queuelibprocess 是 Mesos 全部节点间通信的事件驱动库。该选项启用 libprocess 中的无锁事件队列官方文档描述为greatly improves message passing performance大幅提升消息传递性能。源码层面configure.ac 在启用时定义LOCK_FREE_EVENT_QUEUE宏AS_IF([test x$enable_lock_free_event_queue xyes], [AC_DEFINE([LOCK_FREE_EVENT_QUEUE])])当前仓库中该选项默认关闭enable_lock_free_event_queueno且带有TODO(benh): Eventually make this enabled by default.注释。对消息吞吐有极致要求的集群可以尝试开启并结合基准测试验证收益代码结构上相关队列实现在 libprocess 的 src/event_queue.hpp 与 src/mpsc_linked_queue.hpp 中。3.6 事件循环后端--enable-libeventlibprocess 默认使用 libev 作为事件循环--enable-libevent切换为 libevent。[默认no]且要求系统装有 libevent 2 的开发包。启用后 configure.ac 会执行if test x$enable_libevent xyes; then if test x$without_bundled_libevent xyes || \ test x$enable_bundled ! xyes; then MESOS_HAVE_LIBEVENT() else with_bundled_libeventyes fi AC_DEFINE([USE_LIBEVENT], [1]) fi在构建层面3rdparty/libprocess/Makefile.am 依据ENABLE_LIBEVENT条件在捆绑 libev 与捆绑 libevent 之间切换链接目标当ENABLE_SSL与ENABLE_LIBEVENT同时启用时还会额外链接libevent_openssl.la并编译 src/posix/libevent/libevent_ssl_socket.cpp 等 SSL socket 实现见 3rdparty/libprocess/Makefile.am。这也解释了为何 SSL 与 libevent 常需配对使用。3.7 SSL 支持--enable-ssl为 libprocess 通信启用 SSL 加密。[默认no]。启用时会检查openssl/ssl.h、libssl 与 libcryptoconfigure.acif test x$enable_ssl xyes; then if test x$found_ssl ! xyes; then AC_MSG_ERROR([cannot find libssl ...]) fi if test x$found_crypto ! xyes; then AC_MSG_ERROR([cannot find libcrypto ...]) fi LIBS-lssl -lcrypto $LIBS AC_DEFINE([USE_SSL_SOCKET], [1]) fi找不到 libssl/libcrypto 会直接终止配置。SSL 相关的运行时配置证书、认证等见官方文档 docs/ssl.md。该选项与 3.6 的--enable-libevent配合时libprocess 将编译专用的 libevent SSL socket 实现。3.8 分析支持--enable-perftools启用 Google perftoolsgperftools性能分析支持。[默认no]。启用后定义HAS_GPERFTOOLS条件configure.ac3rdparty/Makefile.am 会构建捆绑的 gperftools3rdparty/gperftools-2.5.tar.gz并链接libprofiler.la使 Mesos 主进程支持 CPU 剖析。性能排查时可配合官方文档 docs/performance-profiling.md 使用。3.9 测试与验证--enable-tests-install/--enable-parallel-test-execution--enable-tests-install构建并安装测试及其辅助工具。[默认no]。启用后定义INSTALL_TESTS条件并AC_DEFINE([MESOS_INSTALL_TESTS], [1])configure.acsrc/Makefile.am 随之提供installcheck-local目标可从安装树直接运行mesos-tests --build_dir/nowhere --source_dir/nowhere方便在干净环境验证安装产物。--enable-parallel-test-execution尝试并行运行测试。注意configure.ac中的声明为--disable-parallel-test-execution即默认启用enable_parallel_test_executionyes。启用后TEST_DRIVER被设置为 support/mesos-gtest-runner.py并以--sequential*ROOT_*指定 ROOT 测试必须串行configure.acsrc/Makefile.am 中make check通过$(TEST_DRIVER) ./mesos-tests驱动测试。3.10 隔离器与平台特性--enable-xfs-disk- isolator构建 XFS 磁盘隔离器。[默认no]仅支持 Linux。启用后检查 XFS 配额头文件xfs/xfs.h、linux/dqblk_xfs.h、sys/quota.h等、libblkid 头文件与blkid_devno_to_devname符号任一缺失即报错configure.ac并定义ENABLE_XFS_DISK_ISOLATOR。该隔离器提供基于 XFS 项目配额project quota的磁盘用量隔离能力对应文档见 docs/isolators/disk-xfs.md。--disable-use-nvml禁用 NVML 头文件NVIDIA 管理库即关闭 GPU 支持探测。注意文档表格中该选项写作--disable-use-nvml而configure.ac中对应的选项名为--disable-nvml默认启用 NVMLenable_nvmlyes见 configure.ac。启用 NVML 时定义ENABLE_NVML宏configure.acGPU 支持详情见 docs/gpu-support.md。--disable-werror禁止将编译器警告视为致命错误。默认启用-Werror--disable-werror使WERROR变量为空configure.ac该变量随后被注入 src/Makefile.am 的MESOS_CPPFLAGS。当使用较新工具链编译时如遇新警告导致失败可加此选项。--disable-zlib禁用 zlib 压缩。官方文档明确警告这会使 webui 响应性大幅下降不推荐。--enable-install-module-dependencies安装模块开发所需的第三方捆绑依赖Boost、protobuf、glog 等。[默认no]。启用后 configure.ac 导出MODULE_CFLAGS-I${libdir}/mesos/3rdparty/include与MODULE_LDFLAGS3rdparty/Makefile.am 中的install-module-dependencies目标会把这些捆绑库的头文件/库文件安装到$(pkg3rdpartydir)。编写 Mesos 模块docs/modules.md时开启此选项可免去手工拷贝依赖。--disable-java不构建 Java 绑定。--disable-python不构建 Python 绑定。--disable-python-dependency-installmake install安装 Python 包期间不再下载或安装外部依赖configure.ac。这对离线/内网环境的安装尤为重要。--enable-new-cli构建新的 Python CLI 替代旧 CLI。[默认no]。需要 Python 3可通过PYTHON_3环境变量指定解释器未设置PYTHON_3时配置直接报错configure.ac且要求 Python ≥ 3.6、构建时还需要tox来跑 CLI 测试configure.ac。新 CLI 源码位于 src/python/cli_new/。四、可选依赖包参数Optional Packages--with-*定义于 configure.ac。按其语义可分为两类A. 指定系统库位置不涉及捆绑切换选项说明--with-apr[DIR]指定 apr-1 库位置Mesos 构建硬性依赖详见 configure.ac。--with-curl[DIR]指定 curl 库位置。--with-libevent[DIR]指定 libevent 库位置。--with-libprocess[DIR]指定 libprocess 库位置。--with-libarchive[DIR]指定 libarchive 库位置。--with-libseccomp[DIR]指定 libseccomp 库位置Seccomp 隔离器依赖。--with-sasl[DIR]指定 sasl2 库位置认证模块依赖对应 3rdparty/cyrus-sasl-2.1.27rc3.patch。--with-ssl[DIR]指定 ssl 库位置配合--enable-ssl。--with-stout[DIR]指定 stout 库位置。--with-svn[DIR]指定 svn-1 库位置。--with-zlib[DIR]指定 zlib 库位置。--with-nl[DIR]指定 libnl3 库位置网络隔离器必需见MESOS_HAVE_LIBNL3检查configure.ac。B. 切换为系统安装版本--with-XXX[DIR]DIR 为可选前缀选项说明--with-boost[DIR]不使用捆绑 Boost改用指定位置前缀下的已安装版本。--with-concurrentqueue[DIR]同上针对 concurrentqueuelibprocess 消息队列依赖3rdparty/concurrentqueue-7b69a8f.tar.gz。--with-elfio[DIR]同上针对 ELFIOstout 依赖。--with-glog[DIR]同上针对 glog日志库3rdparty/glog-0.4.0.tar.gz。--with-gmock[DIR]同上针对 gmock测试框架。--with-http-parser[DIR]同上针对 http-parser。--with-leveldb[DIR]同上针对 LevelDB状态存储3rdparty/leveldb-1.19.tar.gz。--with-libev[DIR]同上针对 libev。--with-nvml[DIR]同上针对 NVML 头文件GPU 支持。--with-picojson[DIR]同上针对 picojson。--with-protobuf[DIR]同上针对 protobuf3rdparty/protobuf-3.5.0.tar.gz。--with-zookeeper[DIR]同上针对 ZooKeeper3rdparty/zookeeper-3.4.8.tar.gz。--with-grpc[DIR]、--with-jemalloc[DIR]、--with-rapidjson[DIR]、--with-re2[DIR]分别对应 gRPC、jemalloc、rapidjson、re2语义相同。此外还有两个特殊选项--with-gnu-ld假定 C 编译器使用 GNUld。[默认no]。--with-sysroot[DIR]在DIR若省略则为编译器默认 sysroot中搜索依赖库常用于交叉编译。--with-network-isolator构建网络隔离器。注意 configure.ac 中的处理该选项已标记弃用使用时打印AC_MSG_WARN([--with-network-isolator is being deprecated, please use --enable-port-mapping-isolator instead.])并自动把enable_port_mapping_isolator置为 yes。网络隔离器仅支持 Linux 且依赖 libnl3。4.1--with-XXX[DIR]的底层机制以 libev 为例configure.acAC_ARG_WITH([libev], AS_HELP_STRING([--with-libev:DIR:], [excludes building and using the bundled libev ...]), [without_bundled_libevyes], [])也就是说--with-libev[DIR]出现即置without_bundled_libevyes随后如 configure.ac在without_bundled_libevyes或--disable-bundled时改为探测系统安装版本找不到则报错并提示补DIR。AM_CONDITIONAL([WITH_BUNDLED_LIBEV], ...)再把结果传给 3rdparty/Makefile.am 决定走捆绑构建还是-lev系统链接。这与第 3.1 节的--disable-bundled形成全局禁用 单库覆盖的配合关系。五、影响 configure 的环境变量configure.ac通过AC_ARG_VAR声明这些变量configure.ac用于覆盖自动探测或指定非标准路径变量说明JAVA_HOMEJDK 安装位置。未设置时 configure 会尝试从java/javac自动推导失败则AC_MSG_ERRORconfigure.ac。JAVA_CPPFLAGSJNI 预处理器 flags未设置时自动生成-I$JAVA_HOME/include -I$JAVA_HOME/include/OSconfigure.ac。JAVA_JVM_LIBRARYlibjvm.so的完整路径。configure 会在$JAVA_HOME/lib/server、$JAVA_HOME/jre/lib/server及各架构子目录amd64、i386、arm、aarch64、ppc64、s390x等中查找configure.ac。MAVEN_HOMEMaven 安装目录configure 在MAVEN_HOME/bin下寻找mvnconfigure.ac。PROTOBUF_JAR非捆绑prefixed构建时 protobuf jar 的完整路径configure.ac。PYTHON指定用于构建 Python 2 绑定的解释器。PYTHON_VERSION已安装的 Python 2 版本如2.3会被追加到 Python 2 解释器规范名后即python$PYTHON_VERSION。注意PYTHON与PYTHON_VERSION不能同时指定否则报错configure.ac。PYTHON_3指定 Python 3 解释器构建新 CLI 时必须设置configure.ac。PYTHON_3_VERSION已安装的 Python 3 版本如3.6追加到 Python 3 解释器规范名后configure.ac。典型用法示例# 使用系统 Python 3 构建新 CLI PYTHON_3/usr/bin/python3 ../configure --enable-new-cli # 指定 JDK 与 JVM 库 JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 \ JAVA_JVM_LIBRARY/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so \ ../configure # 离线环境make install 时不下载 Python 依赖 ../configure --disable-python-dependency-install六、组合实战典型构建场景6.1 生产集群最小体积构建../configure \ --disable-bundled-pip \ --disable-bundled-setuptools \ --disable-bundled-wheel \ --enable-gc-unused \ --disable-java \ --disable-python要点--enable-gc-unused裁剪未用代码段--disable-java/--disable-python去掉不需要的语言绑定三个--disable-bundled-*让make install不再折腾 Python 打包工具。6.2 启用 SSL 的 master/agent 构建../configure --enable-ssl --with-ssl/usrconfigure会验证 libssl/libcrypto 存在并定义USE_SSL_SOCKETconfigure.ac。SSL 运行时配置证书路径、--ssl_cert_file等见 docs/ssl.md。6.3 GPU 支持构建# 使用系统 NVML 头文件关闭捆绑 NVML ../configure --with-nvml/usr/local/cudaNVML 相关选项的完整语义为默认启用 NVML 支持并使用捆绑头文件3rdparty/nvml-352.79.tar.gz--with-nvml[DIR]切换为系统头文件--disable-nvml彻底关闭 GPU 支持。配置细节可参考 docs/gpu-support.md。6.4 面向模块开发者的构建../configure --enable-install-module-dependencies make sudo make install安装后${libdir}/mesos/3rdparty/include与${libdir}/mesos/3rdparty/lib下即具备编写 docs/modules.md 所述模块所需的全部捆绑依赖通过MODULE_CFLAGS/MODULE_LDFLAGS引用。七、注意事项与排查建议最新选项以./configure --help为准官方文档明确声明这是最权威的来源不同版本的 Mesos 选项集可能存在差异本文基于当前仓库1.12.0见 configure.ac 的AC_INIT([mesos], [1.12.0])。非捆绑构建的依赖完整性--disable-bundled或任一--with-XXX会要求系统提供对应依赖缺失时 configure 会以AC_MSG_ERROR终止并给出提示按提示安装开发包或补指定路径即可。平台限制XFS 磁盘隔离器、网络/端口映射隔离器均仅支持 Linuxconfigure 会显式检查OS_NAME见 configure.ac 的 OS 判定与各隔离器检查段FreeBSD/macOS 构建则受host_os分支的 flags 调整影响configure.ac。编译器要求GCC ≥ 4.8或兼容的 Clang且要求 C11 标准支持AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])configure.aclibstdcGCC 4.8/libcClang 3.5是已知的兼容边界configure.ac。调试与优化互斥关系--enable-debug与--enable-optimize的 flags 注入逻辑在 configure.ac 中互斥分支处理同时开启时优化分支覆盖调试 flags实际以CXXFLAGS内容为准。通过合理组合上述选项开发者可以在编译期精确控制 Mesos 的功能面、依赖形态与性能特性为后续集群部署与模块开发打下坚实基础。更多构建细节可继续阅读 docs/building.md 与 docs/configuration/autotools.md。赞分享集群管理任务调度后端【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/mesos1/mesos点击查看免费下载相关推荐Apache Mesos 配置完全指南Master/Agent 运行时参数与 Autotools/CMake 构建选项Apache Mesos 配置完全指南Master/Agent 运行时参数与 Autotools/CMake 构建选项 本文以 Apache Mesos 官方集群管理任务调度后端Apache Mesos 的 CMake 构建配置选项全解析Apache Mesos 的 CMake 构建配置选项全解析 Apache Mesos 官方同时维护 Autotools 与 CMake 两套构建系统其中 C集群管理任务调度后端Apache Mesos CMake 配置选项完全指南从构建开关到打包发布Apache Mesos CMake 配置选项完全指南从构建开关到打包发布 本指南以 Apache Mesos 官方 CMake Options 文档为骨架云原生集群管理容器编排任务调度上一篇Exceptionless多租户架构企业级错误管理解决方案下一篇终极指南如何使用Kubergrunt提升Kubernetes集群管理效率创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考