Linux Tips |
|
ロケールの問題でプログラムが正常に動作しない場合には
北浦訓行
2007/2/8 |
Fedora Coreの公式リポジトリに登録されているパッケージは、動作チェックを行っているため基本的に問題なく動作する。しかし、ロケールの違いなどで正常に動作しないものも存在する。ここでは、ロケールの問題で動作しない「Grip」というソフトウェアを例にその解決法を紹介する(注)。
注:ここで挙げた対処方法は、あくまで暫定的な措置なので自己責任の下で作業していただきたい。そのため、新しいバージョンがリリースされた場合は、そちらを使用することをお勧めする。 |
Gripは、音楽CDなどのリッピングに利用されるソフトウェアだ。Fedora Extrasに収録されているが、起動すると「バグ報告ツール」が表示されて異常終了する。
「バグ報告ツール」の情報だけではなく、GNOME端末からもエラー情報を確認できる。GNOME端末で「grip」コマンドを実行すると、以下のようなメッセージが表示される。
$ grip
*** buffer overflow detected ***: grip terminated
======= Backtrace: =========
/lib/i686/nosegneg/libc.so.6(__chk_fail+0x41)[0xad1be1]
/lib/i686/nosegneg/libc.so.6[0xad13f8]
/lib/i686/nosegneg/libc.so.6(_IO_default_xsputn+0xb4)[0xa513d4]
(省略) |
最初の行に「buffer overflow detected」とある。これは、jaロケールでバッファオーバーフローが発生していることを示す。対策としては、「日本語以外のロケールで使用する」「プログラムのソースを修正してコンパイルし直す」などが考えられる。
最初に簡単で安全な対処方法を紹介する。それは、日本語のロケールをやめて、英語モードで起動する方法だ。GNOME端末で以下のコマンドを実行する。
これで、英語モードのGripが起動する。
|
英語モードで起動したGrip |
次は、日本語でGripを使用する方法だ。この場合は、ソースを修正してパッケージを作成する必要がある(注)。
まず、yumで最新版のソースファイルをダウンロードするにはを参考にソースファイルをダウンロードする。Fedora Core 6の場合、GripはFedora Extrasにある。
yumdownloaderをインストールしていない場合は、rootでログインして以下のコマンドを実行する。
# yum install yumdownloader |
以下のコマンドで、Gripのソースファイルをダウンロードする。
# yumdownloader --enablerepo=extras-source --source grip |
次に、ソースファイルをインストールする。
# rpm -ihv grip-3.2.0-15.fc6.src.rpm |
ソースファイルは、/usr/src/redhat/SOURCESにインストールされる。その中のgrip-3.2.0.tar.gzに今回修正するファイル(grip.c)が含まれている。まず、grip-3.2.0.tar.gzを作業用ディレクトリ(/tmp)にコピーして展開する。
$ cp /usr/src/redhat/SOURCES/grip-3.2.0.tar.gz /tmp
$ cd /tmp
$ tar zxf grip-3.2.0.tar.gz
$ cd grip-3.2.0/src |
展開したら、grip.cというファイルの518行目を修正する。
↓
修正が完了したら、作業用ディレクトリに戻りtarボールを作成する。
$ tar cvf grip-3.2.0.tar.gz grip-3.2.0
$ ls -l grip-3.2.0.tar.gz
-rw-r--r-- 1 nori nori 2529280 1月 26 16:08 grip-3.2.0.tar.gz |
rootでこのファイルを元のファイルに上書きする。
# cp grip-3.2.0.tar.gz /usr/src/redhat/SOURCES/
cp: `/usr/src/redhat/SOURCES/grip-3.2.0.tar.gz' を上書きしてもよろしいですか(yes/no)? y ←[y]キーを入力 |
今回は修正前のパッケージと区別するために、SPECファイル(grip.spec)を修正する。
# cd /usr/src/redhat/SPECS/
# ls
grip.spec |
修正した個所は、パッケージのリリース番号を示す「Release:」部分だ。ここでは、パッケージのリリース番号の後ろに「_1」を付けた。
↓
次に、以下のコマンドでパッケージのビルドを行う。
# rpmbuild --bb grip.spec
エラー: ビルド依存性の失敗:
vte-devel は grip-3.2.0-15_1.i386 に必要とされています
cdparanoia-devel は grip-3.2.0-15_1.i386 に必要とされています
id3lib-devel は grip-3.2.0-15_1.i386 に必要とされています |
結果を見ると、依存性のエラーが発生している。不足しているファイルをyumでインストールして、再度ビルドを実行すれば問題を解決できる。
# yum install vte-devel cdparanoia-devel id3lib-devel
# rpmbuild --bb grip.spec
# cd ../RPMS/i386
# ls
grip-3.2.0-15_1.i386.rpm grip-debuginfo-3.2.0-15_1.i386.rpm |
後は、rpmコマンドでgrip-3.2.0-15_1.i386.rpmをインストール(アップデート)する。
# rpm -Uhv grip-3.2.0-15_1.i386.rpm |
[アプリケーション]メニューの[サウンドとビデオ]−[Grip]を選択すると、日本語のGripが起動する。
|
日本語で起動したGrip |
Linux Squareフォーラム Linux Tipsカテゴリ別インデックス |
Linux & OSS 記事ランキング
本日
月間