: O. Yuanying

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%]

やったー!!!インストール成功です。