Time-stamp: "99/06/20 20:49:52 yasuhide"

mutt で e-mail のやりとりをする

ごめんなさい。まだ作業中です。

  1. ダウンロード
  2. インストール
  3. 初期設定
  4. 試しに使ってみる
  5. 今回の失敗

ダウンロード

インストール

初期設定

試しに使ってみる

今回の失敗

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 め!」と思って、
    # 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 の多用に御用心

メールは
dasen@typhoon.co.jp まで。