Vine Linux バグトラッキングシステム - Vine Linux
課題の詳細を表示
0000434Vine Linux1 バグ公開2006-12-11 22:472008-03-17 19:31
anonymous 
 
不明 
完了保留 
4.0 
 
x86
a2ps-4.13b-53vl1
0000434: a2ps で日本語が文字化け
Vine 4.0 で a2ps を使って日本語を含むファイルを ps に変換すると、日本語部分がどうも変になります。
設定されていません。
? foo.ps (18,938) 2006-12-17 13:56
http://mantis.vinelinux.org/file_download.php?file_id=125&type=bug
? synaptic.status.calamus.2006.1226 (33,007) 2006-12-25 22:04
http://mantis.vinelinux.org/file_download.php?file_id=126&type=bug
課題の履歴
2006-12-11 22:47anonymous新規課題
2006-12-11 23:00anonymousコメント追加: 0002249
2006-12-17 13:56anonymous添付ファイル追加: foo.ps
2006-12-17 13:56anonymousコメント追加: 0002250
2006-12-25 22:04anonymous添付ファイル追加: synaptic.status.calamus.2006.1226
2006-12-25 22:04anonymousコメント追加: 0002251
2007-01-07 20:44anonymousコメント追加: 0002252
2007-04-05 21:38anonymousコメント追加: 0002253
2008-03-17 19:31kazutaka状態新規 => 完了
2008-03-17 19:31kazutaka解決状況不明 => 保留
2008-03-17 19:31kazutakaコメント追加: 0002254

コメント
(0002249)
anonymous   
2006-12-11 23:00   
> Vine 4.0 で a2ps を使って日本語を含むファイルを ps に変換すると、日本語部
> 分がどうも変になります。

(すみません。本文書く前に送信してしまいました。)

上記に付いて、出力された ps ファイルを見てみると、
どうも日本語の部分で、2byte 出力されるべきところが、
下位1byteのみ出力されているように見えます。

例えば、

      This is a test.
      これはテストです。

とだけかかれたファイルを変換した場合、Vine 3.2CR の a2ps と Vine 4.0 の a2ps で変換した物どうしを
比べると、以下のような違いがあります。
違いは、(This is a test.) の次の行の () の中で、byte 数が半分になっています。
また、上(Vine 3.2CR のもの) のbyte列のうち1つおきのデータが下(Vine 4.0)のbyte列に現れます。
おそらく、入力か出力のところで、上位byteが落ちていると思うのですが、これ以上の原因追求はできませんでした。

なお、環境変数は、LANG=ja_JP.eucJP としてあり、また、--encoding euc-jp を付けても同じ現象が起きます。

また、Vine 3.2CR のa2psのバイナリをVine4.0に持ってきて動かしても、やはり日本語が化けます。
逆にVine4.0のバイナリをVine3.2に持っていくと、ちゃんと表示されます。

なんとなく、ライブラリがおかしい気がするのですが、ちょっとわかりません。

----------------------------------------------------------------------------------------------
% diff -patch foo.txt.v3.ps foo.txt.v4.ps
*** foo.txt.v3.ps 2006-12-11 22:46:11.000000000 +0900
--- foo.txt.v4.ps 2006-12-11 22:45:46.000000000 +0900

*** 770,781 ****
  /y0 y v get bfs th add sub store
  x0 y0 moveto
  (This is a test.) p n
! (\244\263\244\354\244\317\245\306\245\271\245\310\244\307\244\271\241\243) N
! (stdin) (1/1 \245\332\241\274\245\270) (06\307\257 12\267\35611\306\374 22:40) title
  border
  grestore
--- 770,781 ----
  /y0 y v get bfs th add sub store
  x0 y0 moveto
  (This is a test.) p n
! (\263\354\317\306\271\310\307\271\243) N
! (foo.txt) (1/1 \245\332\241\274\245\270) (06\307\257 12\267\35611\306\374 22:45) title
  border
  grestore
(0002250)
anonymous   
2006-12-17 13:56   
私も a2ps はたまに使うのでテストしてみましたが、特に問題は見られませんでした。

a2ps は、
# apt-get update
# apt-get install a2ps
で入れました。(psutils なども一緒に入りました。)

$ cat foo.txt
This is a test.
これはテストです。
$ file foo.txt
foo.txt: EUC text
$ a2ps foo.txt > foo.ps
[foo.txt (プレーン): 1ページ, 1シート]
[合計: 1ページ, 1シート] 標準出力へ転送します
$ cat foo.ps (からの抜粋)
(This is a test.) p n
(\244\263\244\354\244\317\245\306\245\271\245\310\244\307\244\271\241\243) N
となりました。evince で見ても化けていません。
参考のため foo.ps を添付します。

というわけで、必ず出る症状というわけではないのではないでしょうか。
私の環境は、
CPU は Pentium M 1.4GHz。
Vine 4.0 を CD からクリーンインストール。
言語関係は日本語を選択。
インストールクラスはデスクトップで、パッケージは TeX など使う予定のないものを除外。
シェルは bash。
環境変数などは Vine デフォルトに多少追加した程度。(削除や上書きはないつもり)
$ uname -a
Linux hoge.localdomain 2.6.16-0vl60 0000001 SMP Fri Oct 27 03:39:46 JST 2006 i686 i686 i386 GNU/Linux
です。

症状を再現させる条件として何か思い当たることはありませんか?

--
森口
(0002251)
anonymous   
2006-12-25 22:04   
> 症状を再現させる条件として何か思い当たることはありませんか?

返事が遅くなりました。

たしかにインストールした素の状態で、a2ps のみ install するとうまくいきました。
ただ、添付したsynaptic の設定ファイルで指定されたパッケージ群をインストールすると
文字化けを起こすようになります。

この設定ファイルにはできるだけ欲張ってインストールするよう、コンフリクトしない限り多くのパッケージを指定してあります。(なので問題が起きている?)
ただ、インストール中には特にワーニングは出ていないようです。

これまでの現象から、なにかしら shared library が置き換わってしまっているようと想定して、
現在、怪しそうなパッケージを1つづつインストールしてみて、いつ文字化けが起きるかを見てみているのですが、数が多すぎてうまくいっていません。

なにか有効な方法などあるのでしょうか?
(0002252)
anonymous   
2007-01-07 20:44   
> たしかにインストールした素の状態で、a2ps のみ install するとうまくいきま
> した。
> ただ、添付したsynaptic の設定ファイルで指定されたパッケージ群をインストー
> ルすると
> 文字化けを起こすようになります。

症状再現できました。
libsafe が入っていると起こります。

何をどう直すべきなのかまではわかりません。

--
森口
(0002253)
anonymous   
2007-04-05 21:38   
> 症状再現できました。
> libsafe が入っていると起こります。
>
> 何をどう直すべきなのかまではわかりません。

正しい対処法ではないのですが、私の環境(一般ユーザIDでも root ID でも) では
少なくとも LD_PRELOAD という環境変数に /lib/libsafe.so.2.0.16 という値が入っています。
これを、外して a2ps を実行するとうまくいきます。具体的には、

    env LD_PRELOAD= a2ps

とすると、ちゃんと日本語も変換できました。

なぜ LD_PRELOAD がセットされているのか、libsafe が入っているとなぜダメなのか、
それはまだわかりません。
(0002254)
kazutaka   
2008-03-17 19:31   
> なぜ LD_PRELOAD がセットされているのか、libsafe が入っているとなぜダメな
> のか、
> それはまだわかりません。

LD_PRELOAD は、libsafe に含まれる /etc/profile.d/libsafe.sh (or .chs)
によりセットされているようです。

少し調べてみたものの、「libsafe が入っていると a2ps で化ける」理由
までは分かりませんでした。

現状では「a2ps で日本語を扱う場合は libsafe をインストールしない」
というのが現実的な対応だと思います。(バッドノウハウ的でいやですが…)

今後の参考のためにも、保留として残しておきます。