簡體   English   中英

在Alpine Linux上編譯Mesos時出錯

[英]Errors compiling Mesos on Alpine Linux

我正在嘗試創建一個Mesos 0.27.1映像以用於基於Alpine Linux的測試,並且已經設法通過反復試驗使其在大多數情況下得以通過。 現在,我遇到了一個看起來很底層的錯誤,我想知道這是否意味着我根本無法在Alpine上使用Mesos。

錯誤是這樣的:

libtool: compile:  g++ -DPACKAGE_NAME=\"libprocess\" -DPACKAGE_TARNAME=\"libprocess\" -DPACKAGE_VERSION=\"0.0.1\" "-DPACKAGE_STRING=\"libprocess 0.0.1\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"libprocess\" -DVERSION=\"0.0.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_APR_POOLS_H=1 -DHAVE_LIBAPR_1=1 -DHAVE_SVN_VERSION_H=1 -DHAVE_LIBSVN_SUBR_1=1 -DHAVE_SVN_DELTA_H=1 -DHAVE_LIBSVN_DELTA_1=1 -DHAVE_LIBCURL=1 -DHAVE_PTHREAD_PRIO_INHERIT=1 -DHAVE_PTHREAD=1 -DHAVE_LIBZ=1 -DHAVE_LIBDL=1 -I. -DBUILD_DIR=\"/usr/src/mesos-0.27.1/3rdparty/libprocess\" -I./include -I./3rdparty/stout/include -isystem 3rdparty/boost-1.53.0 -I3rdparty/libev-4.15 -I3rdparty/picojson-1.3.0 -DPICOJSON_USE_INT64 -D__STDC_FORMAT_MACROS -I3rdparty/glog-0.3.3/src -I3rdparty/ry-http-parser-1c3624a -I/usr/include/subversion-1 -I/usr/include/apr-1 -I/usr/include/apr-1.0 -g1 -O0 -Wno-unused-local-typedefs -std=c++11 -MT libprocess_la-logging.lo -MD -MP -MF .deps/libprocess_la-logging.Tpo -c src/logging.cpp  -fPIC -DPIC -o libprocess_la-logging.o
In file included from ./include/process/time.hpp:18:0,
                 from ./include/process/clock.hpp:18,
                 from ./include/process/delay.hpp:16,
                 from src/logging.cpp:15:
./3rdparty/stout/include/stout/duration.hpp:80:27: error: 'timeval' does not name a type
   explicit Duration(const timeval& t)
                           ^
./3rdparty/stout/include/stout/duration.hpp: In constructor 'Duration::Duration(const int&)':
./3rdparty/stout/include/stout/duration.hpp:82:15: error: request for member 'tv_sec' in 't', which is of non-class type 'const int'
     nanos = t.tv_sec * SECONDS + t.tv_usec * MICROSECONDS;
               ^
./3rdparty/stout/include/stout/duration.hpp:82:36: error: request for member 'tv_usec' in 't', which is of non-class type 'const int'
     nanos = t.tv_sec * SECONDS + t.tv_usec * MICROSECONDS;
                                    ^
./3rdparty/stout/include/stout/duration.hpp: In member function 'timeval Duration::timeval() const':
./3rdparty/stout/include/stout/duration.hpp:95:3: error: return type 'struct timeval' is incomplete
   {
   ^
./3rdparty/stout/include/stout/duration.hpp:96:20: error: aggregate 'timeval t' has incomplete type and cannot be defined
     struct timeval t;
                    ^
Makefile:844: recipe for target 'libprocess_la-logging.lo' failed
make[4]: *** [libprocess_la-logging.lo] Error 1
make[4]: Leaving directory '/usr/src/mesos-0.27.1/3rdparty/libprocess'
Makefile:1321: recipe for target 'all-recursive' failed
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory '/usr/src/mesos-0.27.1/3rdparty/libprocess'
Makefile:490: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/usr/src/mesos-0.27.1/3rdparty'
Makefile:443: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/usr/src/mesos-0.27.1/3rdparty'
Makefile:682: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1

我現在應該放棄所有希望並放棄這項努力嗎?

我有一個可以編譯的構建。 如果您想看看我做了什么,可以從這里開始:

https://github.com/jimfcarroll/mesos-on-alpine/blob/alpine/alpine/build.sh

您可以像這樣使用它:

https://github.com/jimfcarroll/mesos-on-alpine/blob/alpine/alpine/README

它對系統包含文件進行了更改,並且有一個代碼補丁,它是從我的mesos高山分支摘錄而來的。 您可以查看這些內容以查看更改。

它可以正常運行,但是大約有10-15個測試失敗。

其中一些失敗與Alpine標准命令(例如:“ cp”和“ du”)采用的參數比mesos期望的參數不同有關。

至少一個原因是由於我的補丁程序消除了與讀取fstab的mesos有關的功能。

我不確定其他人。

我的目標不是獲得基於阿爾卑斯的mesos-master和mesos-slave(盡管如果可以的話,那會很好),而是構建libmesos.so,以便我可以通過移動來運行基於Docker Alpine的Mesos框架庫一旦建立就結束了。

編輯:我應該注意,我還沒有使它能夠成功地對抗中層釋放的mesos-master和mesos-slave,因此以此為起點。 我很想看看是否有人能取得更大的進步。

我今天遇到了這個問題,David C Rankin回答幫助我完成了這項工作。 在/3rdparty/libprocess/3rdparty/stout/include/stout/duration.hpp中,我只是在#include <sys/time.h>下的#include time.h調用下添加了它。

在那之后,您可能會遇到安裝POM的問題(不存在ssl證書,未找到tools.jar),但這些問題不在此答案的范圍之內。

從Git中的最新代碼開始,Mesos現在應立即在Alpine Linux上構建(請參閱https://issues.apache.org/jira/browse/MESOS-5540)-這些更改應包含在后續的Apache中Mesos發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM