【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
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端末で以下のコマンドを実行する。

$ LANG=C;grip

 これで、英語モードの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行目を修正する。

char versionbuf[20];
   
char versionbuf[22];

 修正が完了したら、作業用ディレクトリに戻り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」を付けた。

Release: 15%{?dist}
   ↓
Release: 15_1%{?dist}

 次に、以下のコマンドでパッケージのビルドを行う。

# 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

関連リンク:
自分で作るRPMパッケージ
http://www.atmarkit.co.jp/flinux/special/mkrpm/mkrpm01.html

Linux Tips Index



 Linux Squareフォーラム Linux Tipsカテゴリ別インデックス
インストール/RPM ブート/ブートローダ
ファイル操作 環境設定
ユーザー管理 コンソール/ターミナル
X Window System セキュリティ
トラブルシューティング 他OS関係
ネットワーク ハードウェア
Webサーバ Samba
GNOME KDE
OpenOffice.org エミュレータ
ソフトウェア そのほか/FAQ
全Tips公開順インデックス Linux Tips月間ランキング
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

ホワイトペーパーTechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)



- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています