ごめんなさい。まだ作業中です。
Vine Linux 1.0 beta 1 には、すでに日本語化された slang が入っているので、 『そのまま入れても大丈夫かなぁ…。』と思ってやってみました。すると、
$ rpm --rebuild mutt-0.93.2ijp2-3jrpm.src.rpm (途中省略) gcc -o mutt addrbook.o alias.o attach.o browser.o buffy.o color.o commands.o complete.o compose.o copy.o curs_lib.o curs_main.o date.o edit.o enter.o flags.o init.o filter.o from.o getdomain.o handler.o hash.o hdrline.o headers.o help.o hook.o keymap.o lib.o main.o mbox.o menu.o mh.o mx.o pager.o parse.o pattern.o postpone.o query.o recvattach.o rfc822.o rfc1524.o rfc2047.o score.o send.o sendlib.o signal.o sort.o status.o system.o thread.o khenkan.o resize.o pop.o -L/usr/lib -lnsl -lslang -lm pager.o: In function `display_line': pager.o(.text+0x17a5): undefined reference to `kanji_pos' khenkan.o: In function `jp_snprintf': khenkan.o(.text+0x11c8): undefined reference to `kanji_pos' khenkan.o(.text+0x1274): undefined reference to `kanji_pos' make: *** [mutt] Error 1 Bad exit status from /var/tmp/rpm-tmp.20235 (%build)なんていうエラーが出ました。
とりあえず、原因を調べるべく…。
$ cd rpm/BUILD/mutt-0.93.2i/ $ grep -i kanji_pos * grep: doc: Is a directory khenkan.c:int kanji_pos(unsigned char *beg, unsigned char *end) khenkan.c: if (kanji_pos((unsigned char *)str, (unsigned char *)(d-1)) == 1) { khenkan.c: if (kanji_pos((unsigned char *)str, (unsigned char *)(d-1)) == 1) { khenkan.h:extern int kanji_pos(unsigned char *, unsigned char *); pager.c:int kanji_pos(unsigned char *, unsigned char *); pager.c: if (kanji_pos(buf, buf_ptr) == 2) grep: rx: Is a directoryという具合でした。khenkan.c に kanji_pos 関数に関する記述があるようなので、 khenkan.c をとりあえず見てみる。848 行目から 872 行目にかけてのブロックが kanji_pos 関数についての記述なのだが、
#if 0 /* def MUTT_JED_SLANG Now it's in JED's SLANG */ /* EUC で、2byte 文字の位置を返す。 * 0: ASCII * 1: 1 byte 目 * 2: 2 byte 目 */ int kanji_pos(unsigned char *beg, unsigned char *end) { int ret = 0; while(*beg) { if (*beg & 0x80) { if (ret == 1) { ret = 2; } else { ret = 1; } } else { ret = 0; } if (beg == end) break; beg++; } return ret; } #endifという具合で、要はこの部分はコンパイルされていないのである。 エラーも出るわな…。
で、試しに、#if 0 と #endif をコメントアウトして、
$ ./configure --with-slang --enable-locales-fix $ makeしてみると、エラーもなくコンパイル出来ました。
『もうこうなったら手パッチ当てた rpm でも公開するか?』 なんていう僭越なことを考えて、jrpm のパッケージから spec file をパクって 書き換えていると…。
Requires: slang_jp >= 1.2.2j053という行が燦然ときらめいていたといふ…。
あわてて jrpm の slang & slang-devel を入れようとすると…。
# rpm -ivh slang_jp-1.2.2j054-3jrpm.i386.rpm /usr/lib/libslang.so.1.2.2 conflicts with file from slang-1.2.2j052-2 error: slang_jp-1.2.2j054-3jrpm.i386.rpm cannot be installedとのたまふ。
# rpm -ivh slang_jp-1.2.2j054-3jrpm.i386.rpmとしてもダメ。
# rpm -Uvh --force slang_jp-1.2.2j054-3jrpm.i386.rpm # rpm -Uvh --force slang_jp-devel-1.2.2j054-3jrpmして、
$ cd ~/rpm/BUILD/mutt-0.93.2i $ ./configure --with-slang --enable-locales-fix $ makeとすると、無事コンパイルが出来るようになりました。
ただ、副作用として、
$ rpm -qf /usr/include/slang/slkanji.h slang-devel-1.2.2j052-2 slang_jp-devel-1.2.2j054-3jrpmという具合で、rpm のデータベースが壊れました (ToT)
# rpm -e slang removing these packages would break dependencies: slang >= 1.2.2j is needed by jed-0.98.7j052-3 slang >= 1.2 is needed by newt-0.30_jp-6というので、「両方とも消してやれ〜!」と思いましたが、
# rpm -e newt removing these packages would break dependencies: newt >= 0.8 is needed by rhs-hwdiag-0.30-1vl0 snack is needed by setuptool-1.0-1 libnewt.so.0.30 is needed by kbdconfig-1.8.3-1vl2 libnewt.so.0.30 is needed by mouseconfig-3.1.3-1vl1 libnewt.so.0.30 is needed by ntsysv-0.9.6-1vl2 libnewt.so.0.30 is needed by rhs-hwdiag-0.30-1vl0 libnewt.so.0.30 is needed by sndconfig-0.27-1vl0 libnewt.so.0.30 is needed by timeconfig-2.5-1vl2 libnewt.so.0.30 is needed by Xconfigurator-3.82-1vl8ですって…。これは無理ですね。
ただ、まだ mutt を入れる前だったので、slang_jp-1.2.2j054-3jrpm.i386.rpm を
消して、Vine 的な slang-(devel)-1.2.2j054 を作ればいいか、と思い、
手作業で作成しようとしたら…。
なんと、jrpm の slang_jp は、菊谷さんの所にある、パッチ済のソースが
ベースだったという…。
『これじゃ作れないじゃないかぁ〜!」と思いながら、ダメモトで Vine 1.0R の SRPM をダウンロードしました。『運が良ければ j054 が当たっているかもしれないし、最悪、これに手で j054 を当てればいいや〜』 なんて考えていたのですが…。
天はまだ私を見放してはいなかったようです。 Vine 1.0R の slang-1.2.2_jp-4.src.rpm は、j054 パッチが当たっていました!
# rpm -e slang_jp-devel # rpm -e slang_jp # rpm -Uvh slang-1.2.2_jp-4.i386.rpm # rpm -Uvh slang-devel-1.2.2_jp-4.i386.rpmで、どうにかこうにか slang のアップグレードに成功しました。
ここまで来ればあとは mutt をインストールするだけですね。
$ cd $ cd rpm/SRPMS $ rpm --rebuild mutt-0.93.2ijp2-3jrpm.src.rpmとすると、
Wrote: /home/yasuhide/rpm/RPMS/i386/mutt-0.93.2ijp2-3jrpm.i386.rpmというメッセージが流れて来ました。『やったぁ。これでインストールできるぞ』と 思ったのですが…。
$ cd ../RPMS/i386/ $ su # rpm -ivh mutt-0.93.2ijp2-3jrpm.i386.rpm failed dependencies: slang_jp >= 1.2.2j053 is needed by mutt-0.93.2ijp2-3jrpm…天は我にさらなる苦難を与えようとしていた(謎
わけのわからないことはこの位でやめておくとして、 どうも、Vine の slang パッケージに、日本語化パッチのバージョン名が 入っていないために、jrpm のパッケージとの間で整合性がとれないようです。 実際、他のパッケージが、kanji_pos 関数のように、j053 のパッチ以降で 追加・変更された関数を使用していたとしたら、依存関係の調整がうまくいかず、 困ったことになると思います。
まあ、/usr/local に入れるなり、他の MUA(Mail User Agent) を使うなり、 あるいは --force オプションを使うなりすればいいのかもしれませんが…。 やはりここは rpm をきちんと使って入れたいので…。
というわけで、
Requires: slang >= 1.2.2_jp-4の問題の解決が急務ですね。
ホントは最新の mutt に対応した spec file を作成したかったのですが、 どうしても root でなければ rebuild 出来ないようなミョーなものしか 出来なかったので…。
1064 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i mutt-0.93.2ijp2-3.spec 1065 ls -l mutt-0.93.2ijp2-3.spec 1066 mv mutt-0.93.2ijp2-3.spec mutt-0.93.2ijp2-3.spec.orig 1067 cp mutt-0.93.2ijp2-3.spec.orig mutt-0.93.2ijp2-3.spec 1068 ls -l ../SOURCES/mutt-0.93.2i.tar.gz 1069 cd ../SOURCES/ 1070 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i mutt-0.93.2i.tar.gz 1071 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i mutt-0.93.2i-jp2.pat.gz 1072 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i mutt-0.93.2i-rpm.patch 1073 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i pgp.c.diff 1074 ls -l $ rpm -bs mutt-0.93.2ijp2-3.spec Wrote: /home/yasuhide/rpm/SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm $ cd ../SRPMS/ $ cd ../SRPMS/ $ rpm --rebuild mutt-0.93.2ijp2-3jrpm.src.rpm $ cd ../RPMS/i386/ $ rpm -pql mutt-0.93.2ijp2-3jrpm.i386.rpm /etc/Muttrc /usr/bin/mutt /usr/doc/mutt-0.93.2ijp2 /usr/doc/mutt-0.93.2ijp2/COPYING /usr/doc/mutt-0.93.2ijp2/COPYRIGHT /usr/doc/mutt-0.93.2ijp2/Mush.rc /usr/doc/mutt-0.93.2ijp2/NEWS /usr/doc/mutt-0.93.2ijp2/PGP-Notes.txt /usr/doc/mutt-0.93.2ijp2/Pine.rc /usr/doc/mutt-0.93.2ijp2/README /usr/doc/mutt-0.93.2ijp2/manual.txt /usr/doc/mutt-0.93.2ijp2/sample.mailcap /usr/doc/mutt-0.93.2ijp2/sample.muttrc /usr/doc/mutt-0.93.2ijp2/sample.muttrc-for-japanese /usr/man/man1/mutt.1 $ su # slang_jp そのまま (^^; SOURCE 消えてる (ToT) 1087 cd ../../SPECS/ 1088 rpm -vbs mutt-0.93.2ijp2-3.spec 1089 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i mutt-0.93.2i.tar.gz 1090 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i mutt-0.93.2i-jp2.pat.gz 1091 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i mutt-0.93.2i-rpm.patch 1092 rpm2cpio ../SRPMS/mutt-0.93.2ijp2-3jrpm.src.rpm |cpio -i pgp.c.diff 1093 cd ../../SPECS/rpm -vbs mutt-0.93.2ijp2-3.spec 1094 rpm -vbs mutt-0.93.2ijp2-3.spec 1095 mv mutt-0.93.2i.tar.gz ../SOURCES/ 1096 mv mutt-0.93.2i-jp2.pat.gz ../SOURCES/ 1097 mv mutt-0.93.2i-rpm.patch ../SOURCES/ 1098 mv pgp.c.diff ../SOURCES/ 1099 rpm -vbs mutt-0.93.2ijp2-3.spec 1100 cd ../SRPMS/ 1101 ls -l mutt-0.93* 1102 rm mutt-0.93.2ijp2-3* 1103 cd ../SPECS/ 1104 rpm -bs mutt-0.93.2ijp2-vine1.spec 1105 cd ../SRPMS/ 1106 cd ../SPECS/ 1107 rpm -bs mutt-0.93.2ijp2-vine1.spec 1108 cd ../SRPMS/ 1109 rpm --rebuild mutt-0.93.2ijp2-vine1.src.rpm |& tee ./rebuild.log 1110 rpm --rebuild mutt-0.93.2ijp2-vine1.src.rpm 2>&1 | tee ./rebuild.log 1111 cd ../RPMS/i386/
教訓:
rpm --force の多用に御用心