Tiny CoreにKAKASIを入れる: iconvエラー回避

  • 投稿日:
  • 更新日:2016/11/02
  • by
  • カテゴリ:

ひさびさにTiny Core Linuxネタです。

今回はKAKASI (Kanji Kana Simple Inverter)を入れてみました。

iconvでトラブル

まずはダウンロードして普通にインストールを試みます。

$ tce-load -i compiletc
(上記はコンパイル環境をロードしていない場合)
$ cd /tmp
$ wget http://kakasi.namazu.org/stable/kakasi-2.3.6.tar.gz
$ ./configure
(途中省略)
checking for iconv declaration...
extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
configure: error: can not use EUC-JP or UTF-8 encoding on iconv

すると、iconvのチェックでエラーが出ることがあります。

調べてみたのですが、configureの中でiconvのチェック用に呼び出している関数が異常終了していました。ところが、その関数を別途単体でテストしてもエラーが出ません。

仕方ないので、チェックをスルーさせることにしました。後述しますが、iconvをフィルタに通せばいいだけなので実害はほとんどありません。

変更点は次のパッチにしてあります。

kakasi-2.3.6.diff

$ patch -p0 < kakasi-2.3.6.diff

あとは、いつもの(?)tczを作るやり方で以下のようにインストールを行いました。

$ mkdir -p /tmp/pkg/usr/local
$ ./configure --prefix=/tmp/pkg/usr/local
$ make
$ make install
(ここまでで/tmp/pkg以下にインストールされます。ここからパッケージを作成します)
$ tce-load -i squashfs-tools-4.x
$ cd /tmp
$ mksquashfs pkg kakasi-2.3.6.tcz
$ cd pkg/
$ find usr -not -type d > ../kakasi-2.3.6.tcz.list
完成したkakasi-2.3.6.tczとkakasi-2.3.6.tcz.listをtceディレクトリに入れておきます。
$ cp kakasi-2.3.6.tcz kakasi-2.3.6.tcz.list /mnt/sda1/tce/optional/

完成品をこちらに置いておきます。

kakasi-2.3.6-tcz.tar.gz

実行してみよう

さて、できたkakasiをテストしてみます。kakasiはデフォルトで文字エンコーディングがEUC-JPである必要があるため、オプションまたはフィルタで変換が必要です。例えば、サンプルとしてWikipediaから取った以下の文章を使ってみます。

ロンドンは、グレートブリテンおよび北アイルランド連合王国およびこれを構成するイングランドの首都。イギリスや欧州連合域内で最大の都市圏を形成している。ロンドンはテムズ川河畔に位置し、2,000年前のローマ帝国によるロンディニウム創建が都市の起源である。ロンディニウム当時の街の中心部は、現在のシティ・オブ・ロンドン(シティ)に当たる地域にあった。シティの市街壁内の面積は約1平方マイルあり、中世以来その範囲はほぼ変わっていない。少なくとも19世紀以降、「ロンドン」の名称はシティの市街壁を越えて開発が進んだシティ周辺地域をも含めて用いられている。ロンドンは市街地の大部分はコナベーションにより形成されている。ロンドンを管轄するリージョンであるグレーター・ロンドンでは、選挙で選出されたロンドン市長とロンドン議会により統治が行われている。

こちらにも置いておきます。

sample-wikipedia-london.txt

これを変換してみます。

$ cat sample-wikipedia-london.txt | kakasi -i UTF-8 -o UTF-8 -w
c?-c?3c??c?3c?/c??c?0c?,c?<c??c??c?*c??c?3c??c??c?3e??c?"c?$c?+c?)c?3c??i?#e??g?e?=c??c??c?3c??c??c??f'?f??c??c??c?$c?3c?0c?)c?3c??c?.i&?i?=c??c?$c?.c?*c?9c??f,'e7?i?#e??e??e??c?'f??e$'c?.i?=e8?e?c??e="f??c??c?&c??c??c??c?-c?3c??c?3c?/c??c? c?:e7?f23g??c?+d=?g=.c??c??2,000 e94e??c?.c?-c?<c??e8?e?=c?+c??c??c?-c?3c??c?#c??c?&c? e?5e;:c??i?=e8?c?.h57f:?c?'c??c??c??c?-c?3c??c?#c??c?&c? e=?f??c?.h!?c?.d8-e??i?(c?/c??g>e?(c?.c?7c??c?#c?;c?*c??c?;c?-c?3c??c?3o<?c?7c??c?#o<?c?+e=?c??c??e?0e??c?+c??c?#c??c??c?7c??c?#c?.e8?h!?e#?e??c?.i?"g)?c?/g4?1 e93f?9c??c?$c?+c??c??c??d8-d8?d;%f?%c??c?.g/?e?2c?/c?;c?<e$?c?c?#c?&c??c?*c??c??e0?c?*c?c?(c??19 d8?g4?d;%i??c??c??c?-c?3c??c?3c??c?.e??g'0c?/c?7c??c?#c?.e8?h!?e#?c??h6?c??c?&i??g?:c??i?2c??c? c?7c??c?#e?(h>:e?0e??c??c??e?+c??c?&g?(c??c??c??c?&c??c??c??c?-c?3c??c?3c?/e8?h!?e?0c?.e$'i?(e??c?/c?3c??c??c?<c?7c?'c?3c?+c??c??e="f??c??c??c?&c??c??c??c?-c?3c??c?3c??g.!h=?c??c??c?*c?<c?8c?'c?3c?'c??c??c?0c?,c?<c??c?<c?;c?-c?3c??c?3c?'c?/c??i?8f??c?'i?8e?:c??c??c??c?-c?3c??c?3e8?i?7c?(c?-c?3c??c?3h-0d<?c?+c??c??g51f2;c??h!?c?c??c?&c??c??c??

configureでチェックをスルーしたせいか、文字化けしてしまいます。では、iconvを外出しにしてみます。

$ iconv -f UTF-8 -t EUCJP sample-wikipedia-london.txt | kakasi -w | iconv -f EUCJP -t UTF-8
ロンドン は 、 グレートブリテン および 北 アイルランド 連合王国 およびこれ を 構成 する イングランド の 首都 。 イギリス や 欧州 連合 域内 で 最大 の 都市圏 を 形成 している 。 ロンドン は テムズ 川 河畔 に 位置 し 、 2,000 年前 の ローマ 帝国 による ロンディニウム 創建 が 都市 の 起源 である 。 ロンディニウム 当時 の 街 の 中心部 は 、 現在 の シティ ・ オブ ・ ロンドン ( シティ ) に 当た る 地域 にあった 。 シティ の 市街 壁 内 の 面積 は 約 1 平方 マイル あり 、 中世 以来 その 範囲 はほぼ 変わ っていない 。 少なくとも 19 世紀 以降 、「 ロンドン 」 の 名称 は シティ の 市街 壁 を 越え て 開発 が 進ん だ シティ 周辺 地域 をも 含め て 用い られている 。 ロンドン は 市街地 の 大部分 は コナベーション により 形成 されている 。 ロンドン を 管轄 する リージョン である グレーター ・ ロンドン では 、 選挙 で 選出 された ロンドン 市長 と ロンドン 議会 により 統治 が 行わ れている 。

うまくいきました。kakasi -wで分かち書きされています。

やっぱりnkfもなくちゃ

configureでのエラーのせいか、iconvは微妙に不安定なので、nkfも試してみます。

ソースファイルをhttps://osdn.jp/projects/nkf/からダウンロードし、makeします。

$ cd /tmp
$ wget http://iij.dl.osdn.jp/nkf/64158/nkf-2.1.4.tar.gz
$ tar xvfz nkf-2.1.4.tar.gz
$ cd nkf-2.1.4
$ make
$ make test
$ mkdir -p pkg/usr/local/bin
$ cp nkf pkg/usr/local/bin
(マニュアル等をパッケージに含める場合はここで適宜コピーして下さい。ここからパッケージ作成)
$ mksquashfs pkg nkf-2.1.4.tcz
$ cd pkg
$ find usr -not -type d > ../nkf-2.1.4.tcz.list
$ cp nkf-2.1.4.tcz nkf-2.1.4.tcz.list /mnt/sda1/tce/optional

特に問題無く終了すると思います。以下にも置いておきます。

nkf-2.1.4-tcz.tar.gz

最後にロードして準備完了です。

$ tce-load -i nkf-2.1.4

テストしてみる

先ほどのファイルをnkf + kakasiで変換してみます。

$ nkf -e sample-wikipedia-london.txt | kakasi -JH | nkf -u
ロンドンは、グレートブリテンおよびきたアイルランドれんごうおうこくおよびこれをこうせいするイングランドのしゅと。イギリスやおうしゅうれんごういきないでさいだいのとしけんをけいせいしている。ロンドンはテムズかわかはんにいちし、2,000ねんまえのローマていこくによるロンディニウムそうけんがとしのきげんである。ロンディニウムとうじのまちのちゅうしんぶは、げんざいのシティ・オブ・ロンドン(シティ)にあたるちいきにあった。シティのしがいかべないのめんせきはやく1へいほうマイルあり、ちゅうせいいらいそのはんいはほぼかわっていない。すくなくとも19せいきいこう、「ロンドン」のめいしょうはシティのしがいかべをこえてかいはつがすすんだシティしゅうへんちいきをもふくめてもちいられている。ロンドンはしがいちのだいぶぶんはコナベーションによりけいせいされている。ロンドンをかんかつするリージョンであるグレーター・ロンドンでは、せんきょでせんしゅつされたロンドンしちょうとロンドンぎかいによりとうちがおこなわれている。

こちらもうまく動作しています。同じ変換ではつまらないので、ここではkakasi -JHで漢字を平仮名に変換してみました。

基本的にはiconvでもnkfでも問題無く動作するようですが、両者の変換は厳密には異なります。まぁ、nkfの方が高機能で、たいていの場合に入力文字コードを自動判別しますし、ひらがな→カタカナ変換など、kakasiが持つ機能まで一部備えています。

どちらを使ってもいいのですが、Tiny Coreのiconvには-gオプション(文字コード自動判別)がないようなので、nkfのほうが使っていて楽かもしれません。

こちらもよく読まれています