■zabbix-agent(Windows用)をコンパイルしたい。 ※参考にしたサイト http://www.zabbix.jp/node/218 ・コンパイルを行うサーバ(サーバA)へ下記をインストールした Visual Studio C++2008 Windows SDK for Windows Server 2008 and .NET Framework 3.5 ・下記をダウンロード、解凍した http://prdownloads.sourceforge.net/zabbix/zabbix-2.0.3.tar.gz ・Visual StudioのVC++ディレクトリへ以下を追加 実行可能ファイル「C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin」 インクルードファイル「C:\Program Files\Microsoft SDKs\Windows\v6.1\Include」 ライブラリファイル「C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib」 ・パッチ適用 linux上で下記を実行しパッチ適用 # patch -p1 < ../zabbix-2.0.3-eventlog-source-regex-07.patch zabbix-2.0.3-eventlog-source-regex-07.patch の内容(active.cを修正している模様) ------------------------------------------------------------------------------------------ diff -uNrp zabbix-2.0.3rc1.orig/src/zabbix_agent/active.c zabbix-2.0.3rc1/src/zabbix_agent/active.c --- zabbix-2.0.3rc1.orig/src/zabbix_agent/active.c 2012-10-03 19:35:55.496378584 +0900 +++ zabbix-2.0.3rc1/src/zabbix_agent/active.c 2012-10-03 19:36:29.548378516 +0900 @@ -732,7 +732,7 @@ static void process_active_checks(char * unsigned long timestamp, logeventid; unsigned short severity; char key_severity[MAX_STRING_LEN], str_severity[32] /* for `regex_match_ex' */; - char key_source[MAX_STRING_LEN], *source = NULL; + char key_source[MAX_STRING_LEN], str_source[32]; /* for `regex_match_ex' */; char key_logeventid[MAX_STRING_LEN], str_logeventid[8] /* for `regex_match_ex' */ ; #endif char encoding[32]; @@ -1047,7 +1047,8 @@ static void process_active_checks(char * if (SUCCEED == regexp_match_ex(regexps, regexps_num, value, pattern, ZBX_CASE_SENSITIVE) && SUCCEED == regexp_match_ex(regexps, regexps_ num, str_severity, key_severity, ZBX_IGNORE_CAS E) && - (('\0' == *key_source) ? 1 : (0 == strcmp(ke y_source, source))) && + SUCCEED == regexp_match_ex(regexps, regexps_ num, str_source, + key_source, ZBX_IGNORE_CASE) && SUCCEED == regexp_match_ex(regexps, regexps_ num, str_logeventid, key_logeventid, ZBX_CASE_SEN SITIVE)) { diff -uNrp zabbix-2.0.3rc1.orig/src/zabbix_server/trapper/active.c zabbix-2.0.3rc1/src/zabbix_server /trapper/active.c --- zabbix-2.0.3rc1.orig/src/zabbix_server/trapper/active.c 2012-10-03 19:35:55.512378584 +0900 +++ zabbix-2.0.3rc1/src/zabbix_server/trapper/active.c 2012-10-03 19:37:20.588378423 +0900 @@ -421,6 +421,11 @@ int send_list_of_active_checks_json(zbx_ *key_severity == '@') add_regexp_name(®exp, ®exp_alloc, ®exp_num, key_sev erity + 1); + /* dealing with `source' parameter */ + if ( 0 == get_param(params, 4, source, sizeof(source)) && + *source == '@') + add_regexp_name(®exp, ®exp_alloc, ®exp_num, source + 1); + /* dealing with `logeventid' parameter */ if (0 == get_param(params, 5, key_logeventid, sizeof(key_logeventid)) && *key_logeventid == '@') ------------------------------------------------------------------------------------------ ・パッチ適用で更新されたactive.cファイルをサーバAの同ファイルへ上書き ・コンパイル cd C:\Users\Administrator\Desktop\2.0.3コンパイルテスト\2\zabbix-2.0.3\build\win32\project nmake Makefile_agent 以下が出力された ------------------------------------------------------------------------------------------ cl.exe /nologo ..\..\..\src\zabbix_agent\active.c /Fo"..\..\..\src\zabbi x_agent\active.o" /I .\ /I ..\include /I ..\..\..\include /I ..\..\..\src\zabbix _agent /O2 /Ob1 /GF /FD /EHsc /MT /Gy /W3 /c /TC /D _WINDOWS /D _WIN32_WINNT=0x0 500 /D _CONSOLE /D UNICODE /D _UNICODE /D NDEBUG /D WIN32 /D HAVE_WINLDAP_H /D H AVE_ASSERT_H /D ZABBIX_SERVICE /D WITH_AGENT_METRICS /D WITH_COMMON_METRICS /D W ITH_SPECIFIC_METRICS /D WITH_SIMPLE_METRICS /D "_VC80_UPGRADE=0x0600" /D HAVE_IP V6 active.c ..\..\..\src\zabbix_agent\active.c(736) : error C2143: 構文エラー : ';' が '型' の前にありません。 ..\..\..\src\zabbix_agent\active.c(738) : error C2143: 構文エラー : ';' が '型' の前にありません。 ..\..\..\src\zabbix_agent\active.c(739) : error C2143: 構文エラー : ';' が '型' の前にありません。 ..\..\..\src\zabbix_agent\active.c(741) : error C2275: 'AGENT_RESULT' : この型は 演算子として使用できません ..\..\..\include\sysinfo.h(35) : 'AGENT_RESULT' の宣言を確認してください 。 ..\..\..\src\zabbix_agent\active.c(741) : error C2146: 構文エラー : ';' が、識別 子 'result' の前に必要です。 ..\..\..\src\zabbix_agent\active.c(741) : error C2065: 'result' : 定義されていな い識別子です。 ..\..\..\src\zabbix_agent\active.c(745) : error C2065: 'result' : 定義されていな い識別子です。 ..\..\..\src\zabbix_agent\active.c(745) : warning C4133: '関数' : 'int *' と 'AG ENT_RESULT *' の間で型に互換性がありません。 ..\..\..\src\zabbix_agent\active.c(775) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(775) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(775) : warning C4024: 'get_param' : の型が 3 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(775) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(776) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(776) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(778) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(778) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(778) : warning C4024: 'zbx_strupper' : の型が 1 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(787) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(787) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(787) : warning C4024: 'get_param' : の型が 3 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(787) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(788) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(788) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(790) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(790) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(790) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(790) : warning C4047: '関数' : 間接参照のレベ ルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(790) : warning C4024: 'strcmp' : の型が 1 の 仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(792) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(792) : warning C4047: '関数' : 間接参照のレベ ルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(792) : warning C4024: 'strcmp' : の型が 1 の 仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(799) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(799) : warning C4047: '関数' : 間接参照のレベ ルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(799) : warning C4024: 'process_log' : の型が 4 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(873) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(873) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(873) : warning C4024: 'get_param' : の型が 3 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(873) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(874) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(874) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(876) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(876) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(876) : warning C4024: 'zbx_strupper' : の型が 1 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(885) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(885) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(885) : warning C4024: 'get_param' : の型が 3 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(885) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(886) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(886) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(888) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(888) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(888) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(888) : warning C4047: '関数' : 間接参照のレベ ルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(888) : warning C4024: 'strcmp' : の型が 1 の 仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(890) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(890) : warning C4047: '関数' : 間接参照のレベ ルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(890) : warning C4024: 'strcmp' : の型が 1 の 仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(898) : error C2065: 'encoding' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(898) : warning C4047: '関数' : 間接参照のレベ ルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(898) : warning C4024: 'process_logrt' : の型 が 5 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(985) : error C2065: 'key_logeventid' : 定義さ れていない識別子です。 ..\..\..\src\zabbix_agent\active.c(985) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(985) : warning C4024: 'get_param' : の型が 3 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(985) : error C2065: 'key_logeventid' : 定義さ れていない識別子です。 ..\..\..\src\zabbix_agent\active.c(986) : error C2065: 'key_logeventid' : 定義さ れていない識別子です。 ..\..\..\src\zabbix_agent\active.c(986) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(995) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(995) : warning C4047: '関数' : 間接参照のレベ ルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(995) : warning C4024: 'get_param' : の型が 3 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(995) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(996) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(996) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(998) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(998) : error C2100: 間接指定演算子 (*) の使い 方が正しくありません。 ..\..\..\src\zabbix_agent\active.c(998) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(998) : warning C4047: '関数' : 間接参照のレベ ルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(998) : warning C4024: 'strcmp' : の型が 1 の 仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1000) : error C2065: 'tmp' : 定義されていない 識別子です。 ..\..\..\src\zabbix_agent\active.c(1000) : warning C4047: '関数' : 間接参照のレ ベルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1000) : warning C4024: 'strcmp' : の型が 1 の 仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1008) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1008) : warning C4047: '関数' : 間接参照のレ ベルが 'char **' と 'int *' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1008) : warning C4024: 'process_eventlog' : の型が 4 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1045) : error C2065: 'str_logeventid' : 定義 されていない識別子です。 ..\..\..\src\zabbix_agent\active.c(1045) : warning C4047: '関数' : 間接参照のレ ベルが 'char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1045) : warning C4024: '__zbx_zbx_snprintf' : の型が 1 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1045) : error C2065: 'str_logeventid' : 定義 されていない識別子です。 ..\..\..\src\zabbix_agent\active.c(1052) : error C2065: 'str_logeventid' : 定義 されていない識別子です。 ..\..\..\src\zabbix_agent\active.c(1052) : warning C4047: '関数' : 間接参照のレ ベルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1052) : warning C4024: 'regexp_match_ex' : の 型が 3 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1053) : error C2065: 'key_logeventid' : 定義 されていない識別子です。 ..\..\..\src\zabbix_agent\active.c(1053) : warning C4047: '関数' : 間接参照のレ ベルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1053) : warning C4024: 'regexp_match_ex' : の 型が 4 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1057) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1057) : warning C4047: '関数' : 間接参照のレ ベルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1057) : warning C4024: 'process_value' : の型 が 9 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1062) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1062) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1062) : warning C4022: 'free' : 1 番目の実引 数のポインタの型が、仮引数のポインタの型と異なります。 ..\..\..\src\zabbix_agent\active.c(1062) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1062) : warning C4047: '=' : 間接参照のレベル が 'int' と 'void *' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1103) : error C2065: 'result' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1103) : warning C4133: '関数' : 'int *' と 'A GENT_RESULT *' の間で型に互換性がありません。 ..\..\..\src\zabbix_agent\active.c(1105) : error C2065: 'result' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1105) : warning C4133: '関数' : 'int *' と 'A GENT_RESULT *' の間で型に互換性がありません。 ..\..\..\src\zabbix_agent\active.c(1106) : error C2065: 'result' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1106) : warning C4133: '関数' : 'int *' と 'A GENT_RESULT *' の間で型に互換性がありません。 ..\..\..\src\zabbix_agent\active.c(1124) : error C2065: 'result' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1124) : warning C4133: '関数' : 'int *' と 'A GENT_RESULT *' の間で型に互換性がありません。 NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\ VC\BIN\cl.exe"' : リターン コード '0x2' Stop. ------------------------------------------------------------------------------------------ ・734行目から736行目の行末尾のセミコロンを消し、コメントアウトの前の  行末尾につけたところ、エラーがだいぶ減少した。 ------------------------------------------------------------------------------------------ active.c ..\..\..\src\zabbix_agent\active.c(1008) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1008) : warning C4047: '関数' : 間接参照のレ ベルが 'char **' と 'int *' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1008) : warning C4024: 'process_eventlog' : の型が 4 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1057) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1057) : warning C4047: '関数' : 間接参照のレ ベルが 'const char *' と 'int' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1057) : warning C4024: 'process_value' : の型 が 9 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1062) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1062) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1062) : warning C4022: 'free' : 1 番目の実引 数のポインタの型が、仮引数のポインタの型と異なります。 ..\..\..\src\zabbix_agent\active.c(1062) : error C2065: 'source' : 定義されてい ない識別子です。 ..\..\..\src\zabbix_agent\active.c(1062) : warning C4047: '=' : 間接参照のレベル が 'int' と 'void *' で異なっています。 NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\ VC\BIN\cl.exe"' : リターン コード '0x2' Stop. ------------------------------------------------------------------------------------------ ・「..\..\..\src\zabbix_agent\active.c(1008) : error C2065: 'source' : 定義されてい ない識別子です。」と出力されていたので、734行目に「const char source;」を追記したところ、 「定義されていない識別子」のエラーは出なくなったが、「異なる'const'修飾子です。」のエラーが 出るようになった。 ------------------------------------------------------------------------------------------ active.c ..\..\..\src\zabbix_agent\active.c(1009) : warning C4090: '関数' : 異なる 'const ' 修飾子です。 ..\..\..\src\zabbix_agent\active.c(1058) : warning C4047: '関数' : 間接参照のレ ベルが 'const char *' と 'const char' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1058) : warning C4024: 'process_value' : の型 が 9 の仮引数および実引数と異なります。 ..\..\..\src\zabbix_agent\active.c(1063) : warning C4022: 'free' : 1 番目の実引 数のポインタの型が、仮引数のポインタの型と異なります。 ..\..\..\src\zabbix_agent\active.c(1063) : warning C4047: '=' : 間接参照のレベル が 'const char' と 'void *' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1063) : error C2166: 左辺値は const オブジェ クトに指定されています。 NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\ VC\BIN\cl.exe"' : リターン コード '0x2' Stop. ------------------------------------------------------------------------------------------ ・1058行目のsourceだけ「&」が付いていなかったので、「&」を付けたところ、下記のエラーに なった。 ------------------------------------------------------------------------------------------ active.c ..\..\..\src\zabbix_agent\active.c(1009) : warning C4090: '関数' : 異なる 'const ' 修飾子です。 ..\..\..\src\zabbix_agent\active.c(1063) : warning C4022: 'free' : 1 番目の実引 数のポインタの型が、仮引数のポインタの型と異なります。 ..\..\..\src\zabbix_agent\active.c(1063) : warning C4047: '=' : 間接参照のレベル が 'const char' と 'void *' で異なっています。 ..\..\..\src\zabbix_agent\active.c(1063) : error C2166: 左辺値は const オブジェ クトに指定されています。 NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\ VC\BIN\cl.exe"' : リターン コード '0x2' Stop. ------------------------------------------------------------------------------------------ ・734行目の「const」を消して「char source;」としたところ、エラーなくzabbix-agentd.confが 作成された。