FedoraCore4にircd-hybridをインストール
とりあえずいつも通りにグーグル先生に聞いてみた。すぐにFedoraでircd-hybridというページが見つかるのでとりあえずこの通りにやってみる。
が、
参照元のページはFedoraCore2のせいか、FedoraCore4ではうまくいかない。まず最初のrpmbuild --rebuild ircd-hybrid-7.0-1.fr.src.rpm
でエラーが出る。
[root@kojiro ircd]# rpmbuild --rebuild ircd-hybrid-7.0-1.fr.src.rpm (中略) bison -y -d ircd_parser.y gcc -I../include -I../adns -O2 -g -DNDEBUG -DSMALL_NET=1 -DIRCD_PREFIX=\"/usr\" -I. -c y.tab.c ircd_parser.y:61: error: static declaration of 'yy_aconf' follows non-static declaration ../include/s_conf.h:56: error: previous declaration of 'yy_aconf' was here make[1]: *** [y.tab.o] Error 1 make[1]: Leaving directory `/usr/src/redhat/BUILD/ircd-hybrid-7.0/src' make: *** [build] Error 2 error: Bad exit status from /var/tmp/rpm-tmp.4453 (%build)
よくわからんがircd_parser.y:61で宣言されているyy_aconf
という変数がおかしいらしい。とりあえずソースをいじらないとダメだと言う事だけは判ったorz
なんか色々ぐぐっているとFC4になったことでGCCのバージョンが4になり、このようなコンパイルエラーが出ることがある模様。(詳細不明)
仕方ないのでソースをインストールする。
[root@kojiro ircd]# rpm -ivh ircd-hybrid-7.0-1.fr.src.rpm [root@kojiro ircd]# cd /usr/src/redhat/SOURCES/ [root@kojiro SOURCES]# pwd /usr/src/redhat/SOURCES [root@kojiro SOURCES]# ll total 1436 -rw-r--r-- 1 root root 1412385 Jan 3 2004 ircd-hybrid-7.0.tgz -rw-r--r-- 1 root root 757 Jan 3 2004 ircd-hybrid-change_uid.patch -rw-rw-r-- 1 root root 10983 Feb 17 2004 ircd-hybrid-config.patch -rwxr-xr-x 1 root root 1137 Feb 17 2004 ircd-hybrid.init -rw-r--r-- 1 root root 423 Jan 3 2004 ircd-hybrid-opt.patch -rw-r--r-- 1 root root 40 Feb 17 2004 ircd-hybrid.sysconfig
/usr/src/redhat/SOURCES
ディレクトリにある「ircd-hybrid-7.0.tgz」を展開するとソースがあるのでそれをいじる。
[root@kojiro SOURCES]# tar xvf ircd-hybrid-7.0.tgz [root@kojiro SOURCES]# cd ircd-hybrid-7.0/src/ [root@kojiro src]# pwd /usr/src/redhat/SOURCES/ircd-hybrid-7.0/src [root@kojiro src]# ll *.y -rw-r--r-- 1 1006 1006 68016 Nov 12 2002 ircd_parser.y
ありました、ircd_parser.y
。この66行目のyy_aconfを宣言しているところのstaticをはずすと良いらしい。(これも色々調べた結果だが、詳細不明。)
int yyparse(); static struct ConfItem *yy_achead = NULL; static struct ConfItem *yy_aconf = NULL; static struct ConfItem *yy_aprev = NULL; static int yy_acount = 0; static struct ConfItem *yy_hconf; static struct ConfItem *yy_lconf;
これを、
int yyparse(); static struct ConfItem *yy_achead = NULL; struct ConfItem *yy_aconf = NULL; static struct ConfItem *yy_aprev = NULL; static int yy_acount = 0; static struct ConfItem *yy_hconf; static struct ConfItem *yy_lconf;
このように編集。他の変数にはstaticがついてるのにキモチワルイけど仕方なし。
[root@kojiro SOURCES]# rm ircd-hybrid-7.0.tgz rm: remove regular file `ircd-hybrid-7.0.tgz'? y [root@kojiro SOURCES]# tar czvf ircd-hybrid-7.0.tgz ircd-hybrid-7.0 [root@kojiro SOURCES]# cd ../SPECS/ [root@kojiro SPECS]# rpmbuild -ba ircd-hybrid.spec (中略) Wrote: /usr/src/redhat/SRPMS/ircd-hybrid-7.0-1.fr.src.rpm Wrote: /usr/src/redhat/RPMS/i386/ircd-hybrid-7.0-1.fr.i386.rpm Wrote: /usr/src/redhat/RPMS/i386/ircd-hybrid-debuginfo-7.0-1.fr.i386.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.84271 + umask 022 + cd /usr/src/redhat/BUILD + cd ircd-hybrid-7.0 + rm -rf /var/tmp/ircd-hybrid-7.0-root + exit 0
ircd-hybrid-7.0.tgzを削除して、修正したソースをircd-hybrid-7.0.tgzに再度圧縮してやる。その後SPECSディレクトリに移動し、rpmを作成。今度はエラーは出なかったので、ちゃんとコンパイルできた模様。
/usr/src/redhat/RPMS/i386/
ディレクトリにrpmができてるのでこれをインストールしてやる。
[root@kojiro SPECS]# cd /usr/src/redhat/RPMS/i386/ [root@kojiro i386]# pwd /usr/src/redhat/RPMS/i386 [root@kojiro i386]# ll total 2024 -rw-r--r-- 1 root root 735859 Aug 8 17:43 ircd-hybrid-7.0-1.fr.i386.rpm -rw-r--r-- 1 root root 1314942 Aug 8 17:44 ircd-hybrid-debuginfo-7.0-1.fr.i386.rpm [root@kojiro i386]# rpm -ivh ircd-hybrid-7.0-1.fr.i386.rpm Preparing... ########################################### [100%] error: %pre(ircd-hybrid-7.0-1.fr.i386) scriptlet failed, exit status 4 error: install: %pre scriptlet failed (2), skipping ircd-hybrid-7.0-1.fr
ハイ、またエラーが出ましたよ!!
よくわからんけど%preのとこでエラーが出てるってさ。とりあえず、またspecファイrの該当の場所(%preの部分)を確認してみる。
[root@kojiro SPECS]# more ircd-hybrid.spec %pre if [ -n "`id -g ircd 2>/dev/null`" ]; then if [ "`id -g ircd 2>/dev/null`" != "75" ]; then echo "Error: group ircd doesn't have gid=75. Correct this before inst alling ircd." 1>&2 exit 1 fi else /usr/sbin/groupadd -f -g 75 ircd 2>/dev/null fi if [ -n "`id -u ircd 2>/dev/null`" ]; then if [ "`id -u ircd`" != "75" ]; then echo "Error: user ircd doesn't have uid=75. Correct this before insta lling ircd." 1>&2 exit 1 fi else /usr/sbin/useradd -g ircd -d /etc/ircd -u 75 -c "IRC service account" -s /bin/true ircd 2> /dev/null fi
なんかよくわからんが(判らんことだらけ)、ircd用のユーザとグループを作成しているところでエラーが出ていることだけはわかった。どうもircdというユーザには75というユーザIDをつけたいらしい。
んでこの75番というユーザIDはradvdというユーザが使用している。
[root@kojiro SPECS]# id radvd uid=75(radvd) gid=75(radvd) groups=75(radvd)
一体radvdってなんでしょう?というわけで毎度の事ながら、グーグル先生にお尋ね。ありましたよradvdについて語っているページが。
radvdとはルータ通知を行うデーモンであり,これを立ち上げておくことによって,IPv6ホストに対して静的自動設定を提供することができる.通常,ルータとなるマシンでは起動する.
通常,ルータとなるマシンでは起動する、ですか。じゃあいらないね。(FedoraCoreをフルでインストールするとこうなる。)
というわけでradvdを削除した後に、もう一度気を取り直してircdのインストール。
[root@kojiro i386]# yum remove radvd [root@kojiro i386]# rpm -ivh ircd-hybrid-7.0-1.fr.i386.rpm Preparing... ########################################### [100%] 1:ircd-hybrid ########################################### [100%]
やったー!!!インストール成功です。