[[Linux/evlog]] ---- contents #contents ---- #br * evlog make [#l2d63160] ここでは evlog をソースから make します。 正直よく make 通ったなという感じなので、こんなことして作った物を実際運用しようとかは止めた方がいいでしょう。 ;-P~ 使用する場合は rpm 入れられる環境でのみ使用するか、素直に諦めることを強くお勧めします。 #br ** make する [#wb8a2a93] #br *** そのまま configure, make 試行 [#c08242bf] $ ./configure (snip) evlog configuration: Version = 1.6.1 Kernel header directory = /usr/include/linux evlog configuration directory = /etc/evlog.d evlog plugins directory = /opt/evlog/plugins System Executables = /sbin Man pages = /usr/man Libraries = /usr/lib Header files = /usr/include Data files = /usr/share State information = /var/evlog System configuration = /etc Init (rc) scripts = /etc/init.d Share directory = /usr/share/evlog $ make #br *** ぶっちゃけ無理 [#v7d48c3c] - 試験した環境が gcc 4.3.2 の Debian5.0.6 なので、 make するのは果てしなく険しい道のりっぽい。 -- [evlog-dev] can not compile evlog on gcc 4 // ttp://osdir.com/ml/linux.kernel.event-logging/2007-02/msg00000.html #br *** 強引にやってみる [#f00b4772] 以下、ものすごく強引に make を通すためだけにソースをいじりまくります。~ 起動するのか試したところ、何と evlogd 起動しました(笑) - %%%replace __FUNCTION__ by " "%%% がどこを指すのか悩んだけど、ここっぽい? $ diff -bup ./user/include/evlog.h.in.org ./user/include/evlog.h.in --- ./user/include/evlog.h.in.org 2010-10-18 21:44:07.000000000 +0900 +++ ./user/include/evlog.h.in 2010-10-18 21:44:39.000000000 +0900 @@ -191,7 +191,7 @@ struct evlog_position { char file[128]; }; -#define _EVLOG_POS { __LINE__, __FUNCTION__, __FILE__ } +#define _EVLOG_POS { __LINE__, " ", __FILE__ } struct evlog_info { char format[128+64]; - PTHREAD_THREADS_MAX がないからって _POSIX_THREAD_THREADS_MAX で置き換えるか?~ test set だし、まぁいいか... $ diff -bup ./user/lib/test/threadTest.c.org ./user/lib/test/threadTest.c --- ./user/lib/test/threadTest.c.org 2010-10-18 19:51:11.000000000 +0900 +++ ./user/lib/test/threadTest.c 2010-10-18 19:51:56.000000000 +0900 @@ -33,7 +33,7 @@ * */ -#define MAX_THREADS (PTHREAD_THREADS_MAX-2) +#define MAX_THREADS (_POSIX_THREAD_THREADS_MAX-2) struct workerStats { pthread_t tid; - _evlTmplArchTypeInfo いじり $ diff -bup ./user/include/evl_template.h.org ./user/include/evl_template.h --- ./user/include/evl_template.h.org 2004-04-30 09:22:59.000000000 +0900 +++ ./user/include/evl_template.h 2010-10-18 19:45:28.000000000 +0900 @@ -469,7 +469,7 @@ extern int evlatt_getstructfromarray(con extern void _evlTmplSemanticError(const char *fmt, ...); extern tmpl_type_info_t _evlTmplTypeInfo[]; -extern tmpl_arch_type_info_t _evlTmplArchTypeInfo[][]; +extern tmpl_arch_type_info_t _evlTmplArchTypeInfo[][24]; extern void _evlTmplDprintf(const char *fmt, ...); extern int _evlEndsWith(const char *s, const char *suffix); $ diff -bup ./user/lib/test/threadTest2.c.org ./user/lib/test/threadTest2.c --- ./user/lib/test/threadTest2.c.org 2010-10-18 19:51:20.000000000 +0900 +++ ./user/lib/test/threadTest2.c 2010-10-18 19:52:08.000000000 +0900 @@ -24,7 +24,7 @@ * (which in turn calls posix_log_vprintf). */ -#define MAX_THREADS (PTHREAD_THREADS_MAX-2) +#define MAX_THREADS (_POSIX_THREAD_THREADS_MAX-2) struct workerStats { pthread_t tid; - 他にもいろいろ出てくる $ diff -bup ./user/lib/template/convert.c.org ./user/lib/template/convert.c --- ./user/lib/template/convert.c.org 2010-10-18 19:54:02.000000000 +0900 +++ ./user/lib/template/convert.c 2010-10-18 19:55:07.000000000 +0900 @@ -245,6 +245,7 @@ conv_swap_long(int log_arch, tmpl_base_t } break; default: + ; } } $ diff -bup ./user/lib/util/format.c.org ./user/lib/util/format.c --- ./user/lib/util/format.c.org 2010-10-18 19:57:11.000000000 +0900 +++ ./user/lib/util/format.c 2010-10-18 19:57:42.000000000 +0900 @@ -287,6 +287,7 @@ makeAttrSegment(char *attrSpec, int allo seg->u2.fs_attribute = NULL; break; default: + ; } seg->fs_userfmt = attrFmt; if (attrFmt @@ -476,6 +477,7 @@ _evlAllocateFmtBuf(const evl_list_t *hea size += _evlGetMaxDumpLen(); break; default: + ; } p = p->li_next; } while (p != head); @@ -668,6 +670,7 @@ adjustUintType(const char *mod, int prom case TY_LONG: return TY_ULONG; case TY_LONGLONG: return TY_ULONGLONG; default: + ; } return ty; } - asm/atomic.h を強引に読ませるために configure し直し $ ./configure CPPFLAGS=-I/usr/src/linux-headers-2.6.26-2-amd64/include - 強引に typedef する $ diff -bup ./user/cmd/evlogd/ksym_mod.c.org ./user/cmd/evlogd/ksym_mod.c --- ./user/cmd/evlogd/ksym_mod.c.org 2010-10-18 22:04:28.000000000 +0900 +++ ./user/cmd/evlogd/ksym_mod.c 2010-10-18 22:04:46.000000000 +0900 @@ -80,6 +80,7 @@ * Changed llseek() to lseek64() in order to skip a libc warning. */ +typedef unsigned char u8; /* Includes. */ #include <stdio.h> #br *** make install [#a5381058] make install は特に何もなく実行可能。 # make install デフォルトのまま configure すると、インストール先は /usr/local/ 配下になるので、それが嫌な人はあらかじめ suffix を変更するよう configure しておきましょう。 #br * evlog-telco make [#babe09be] evlog-telco を make するには、 evlog を make install まで済ませてあることが必要です。 #br ** make [#v6eb649c] 何だか evlforward の Makefile で BUILDROOT が指定してあり、とんでもないところへ install してしまうので... - /var/tmp/evlog-telco-buildroot から / に変更したり、 /etc/rd.d/init.d/ でなく /etc/init.d/ に変更したり。 $ diff -bup evlforward/Makefile.org evlforward/Makefile --- evlforward/Makefile.org 2010-10-20 22:38:36.000000000 +0900 +++ evlforward/Makefile 2010-10-20 22:48:16.000000000 +0900 @@ -1,5 +1,5 @@ # evlforward (POSIX Event Logging Telco Extensions) -BUILDROOT=/var/tmp/evlog-telco-buildroot +BUILDROOT=/ CC= gcc FSSTND = -DFSSTND SYSLOGD_FLAGS= -DSYSLOG_INET -DSYSLOG_UNIXAF -DNO_SCCS ${FSSTND} @@ -31,13 +31,13 @@ evlforward.1.gz: evlforward.1 install: test -e $(BUILDROOT) || mkdir -p $(BUILDROOT) - test -e $(BUILDROOT)/etc/rc.d/init.d || mkdir -p $(BUILDROOT)/etc/rc.d/init.d + test -e $(BUILDROOT)/etc/init.d || mkdir -p $(BUILDROOT)/etc/init.d test -e $(BUILDROOT)/usr/man/man1 || mkdir -p $(BUILDROOT)/usr/man/man1 test -e $(BUILDROOT)/sbin || mkdir -p $(BUILDROOT)/sbin - chmod 755 $(BUILDROOT)/etc/rc.d/init.d + # chmod 755 $(BUILDROOT)/etc/rc.d/init.d cp ./evlforward $(BUILDROOT)/sbin # chmod 744 $(BUILDROOT)/sbin/evlforward - cp ./evlforward.init $(BUILDROOT)/etc/rc.d/init.d/evlforward + cp ./evlforward.init $(BUILDROOT)/etc/init.d/evlforward cp ./evlforward.1.gz $(BUILDROOT)/usr/man/man1/. clean: - その後普通に make して $ make - evlforward だけ入れればいいや、なので # cd evlforward # make install #br * evlog 起動設定 [#laa17346] - chkconfig に従って、 init script を有効にする # update-rc.d evlaction defaults 90 40 # update-rc.d evlnotify defaults 80 50 # update-rc.d evlog defaults 9 90 # update-rc.d evlforward defaults 91 39 -- 今回の OS は Debian なので、 update-rc.d を使います。~ defaults 指定なので、 runlevel 2,3,4,5 は start 、 runlevel 0,1,6 は stop になります。 -- evlforward の script には chkconfig 指定がないので、 evlactiond 起動後に転送開始するよう、順位を調整しました。 #br * 更新履歴 [#eab18feb] - 2010/12/12 evlog 起動設定を追加 - 2010/10/20 evlog を make install, evlog-telco も make install した - 2010/10/18 強引に make までやった - 2010/10/17 configure だけ