匿名 | ログイン | 新しいユーザーの作成 | 2024-12-05 04:06 JST |
メイン | マイビュー | 検索 | 変更履歴 | ロードマップ | Vine Linux ホーム |
課題の詳細を表示 [ コメントにジャンプ ] | [ 課題の履歴 ] [ 印刷 ] | ||||||||
ID | プロジェクト | カテゴリ | 登録日 | 最終更新 | |||||
0000481 | Vine Linux | 1 バグ | 2007-02-17 11:31 | 2007-07-07 00:34 | |||||
報告者 | anonymous | ||||||||
担当者 | kaneko | ||||||||
優先度 | 中 | 再現性 | 不明 | ||||||
状態 | 完了 | 解決状況 | 不明 | ||||||
バージョン | |||||||||
修正予定バージョン | 修正済バージョン | ||||||||
概要 | 0000481: ri で command not found: pager | ||||||||
説明 | ri コマンドを実行すると次のようにエラーになります。 $ ri /usr/bin/ri:43: command not found: pager /usr/lib/ruby/1.8/rdoc/ri/ri_options.rb:127:in `write': Broken pipe (Errno::EPIPE) from /usr/lib/ruby/1.8/rdoc/ri/ri_options.rb:127:in `puts' from /usr/lib/ruby/1.8/rdoc/ri/ri_options.rb:127:in `usage' from /usr/lib/ruby/1.8/rdoc/ri/ri_display.rb:51:in `display_usage' from /usr/lib/ruby/1.8/rdoc/ri/ri_display.rb:201:in `page' from /usr/lib/ruby/1.8/rdoc/ri/ri_display.rb:50:in `display_usage' from /usr/lib/ruby/1.8/rdoc/ri/ri_driver.rb:129:in `process_args' from /usr/bin/ri:48 ri --no-pager で正しく表示されているようです。 インストールしたVine Linuxのバージョンは、4.0です。 ri は apt-get install rdoc でインストールしています。 ハードウェア環境は、ThinkPad X31 です。 | ||||||||
タグ | 設定されていません。 | ||||||||
arch | x86, x86_64, ppc | ||||||||
パッケージ | rdoc less util-linux lv w3m | ||||||||
添付ファイル | |||||||||
コメント | |
(0002410) kaneko (開発者) 2007-03-30 00:15 |
> ri コマンドを実行すると次のようにエラーになります。 > > $ ri > /usr/bin/ri:43: command not found: pager /usr/lib/ruby/1.8/rdoc/ri/ri_display.rb の 211 行目以降に 以下の記載があります。 def setup_pager unless @options.use_stdout for pager in [ ENV['PAGER'], "pager", "less", "more" ].compact.uniq return IO.popen(pager, "w") rescue nil end @options.use_stdout = true nil end end 環境変数 PAGER が設定されていないと、最初に IO.popen("pager", "w") が実行され、コマンド pager が存在しないために上記のエラーとなります。 解決方法としては、以下の 3 つがあると思います。 (1) /usr/lib/ruby/1.8/rdoc/ri/ri_display.rb に以下のパッチを当てて、 pager を検索対象から除外する。 --- ri_display.rb.new 2007-03-30 00:10:10.000000000 +0900 +++ ri_display.rb.old 2007-03-30 00:09:37.000000000 +0900 @@ -210,7 +210,7 @@ def setup_pager unless @options.use_stdout - for pager in [ ENV['PAGER'], "less", "more" ].compact.uniq + for pager in [ ENV['PAGER'], "pager", "less", "more" ].compact.uniq return IO.popen(pager, "w") rescue nil end @options.use_stdout = true (2) 環境変数 PAGER に適切なコマンド (less とか) を設定する。 $ export PAGER=less .bash_profile に設定してもいいでしょう。 (3) /usr/bin/pager として /usr/bin/less のシンボリックリンクを作成する。 # ln -s /usr/bin/less /usr/bin/pager |
(0002411) kaneko (開発者) 2007-03-30 00:17 |
> (1) /usr/lib/ruby/1.8/rdoc/ri/ri_display.rb に以下のパッチを当てて、 > pager を検索対象から除外する。 すみません、パッチの向きが逆でした。 正しいパッチは以下の通りです。 --- ri_display.rb.old 2007-03-30 00:09:37.000000000 +0900 +++ ri_display.rb.new 2007-03-30 00:10:10.000000000 +0900 @@ -210,7 +210,7 @@ def setup_pager unless @options.use_stdout - for pager in [ ENV['PAGER'], "pager", "less", "more" ].compact.uniq + for pager in [ ENV['PAGER'], "less", "more" ].compact.uniq return IO.popen(pager, "w") rescue nil end @options.use_stdout = true |
(0002412) anonymous (参照) 2007-03-30 03:06 |
> (3) /usr/bin/pager として /usr/bin/less のシンボリックリンクを作成する。 less util-linux(more) lv w3m など他のパッケージの修正が必要になりますが update-alternatives を使って less などを /usr/bin/pager にしておくといいのかもしれません。 less などが Provides:pager となっていれば Requires:pager で利用できるし apt-cache search pager で見つかるようにもなります。 |
(0002413) anonymous (参照) 2007-03-31 03:01 |
> (1) /usr/lib/ruby/1.8/rdoc/ri/ri_display.rb に以下のパッチを当てて、 > pager を検索対象から除外する。 > --- ri_display.rb.old 2007-03-30 00:09:37.000000000 +0900 > +++ ri_display.rb.new 2007-03-30 00:10:10.000000000 +0900 > - for pager in [ ENV['PAGER'], "pager", "less", "more" ].compact.uniq > + for pager in [ ENV['PAGER'], "less", "more" ].compact.uniq rdoc の rpm -q --changelog を見たら 1.8.1-0vl2 で - added ruby-1.8.1-ri-pager.patch: - changed pager search order: ENV['PAGER'], pager, ... となっています。 現在は version が上がって Patch900: ruby-1.8.5-ri_pager.patch となっていて --- ruby-1.8.5.orig/lib/rdoc/ri/ri_display.rb 2006-06-27 05:44:14.000000000 +0900 +++ ruby-1.8.5/lib/rdoc/ri/ri_display.rb 2006-09-19 15:37:10.000000000 +0900 - for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq + for pager in [ ENV['PAGER'], "pager", "less", "more" ].compact.uniq となってます。 (1) の提案と逆のことをしている patch のようです。 この patch が作られた経緯は知りませんが、今でも必要なものなのでしょうか? |
(0002414) kaneko (開発者) 2007-03-31 09:24 |
対象バージョンに4.1とSeedを追加しました。 > (1) の提案と逆のことをしている patch のようです。 > この patch が作られた経緯は知りませんが、今でも必要なものなのでしょうか? 情報ありがとうございます。 このパッチが必要かどうかはともかくとして、 pager というコマンドが update-alternatives で提供されるなら、 検索する順序としては妥当ではないかと思います。 update-alternatives の適用について開発者MLでも議論をお願いしていますが、 BTSのコメントも逐次開発者MLへ流れますので、 引き続き情報提供などお願いします。 また、 > less util-linux(more) lv w3m 以外の pager 候補がありましたら、ご提案ください。 |
(0002415) anonymous (参照) 2007-03-31 20:14 |
> pager というコマンドが update-alternatives で提供されるなら、 > 検索する順序としては妥当ではないかと思います。 update-alternatives 関連は Seed でしかできないように思います。 4.x だと Plus ではないパッケージは Eratta での更新だけですよね? 4.2 のリリース時なら可能なのかな? > for pager in [ ENV['PAGER'], "pager", "less", "more" ].compact.uniq > return IO.popen(pager, "w") rescue nil > end (ruby はちょっとネットで調べてみただけですが) 最初の PAGER だけは ENV[] で処理されるので、未定義なら nil になって .compact で捨てられます。 次の "pager" は .compact では捨てられずに残るので return IO.popen(pager, "w") rescue nil に渡されます。 ここが pager ではなく less や more なら 4.x の環境でもコマンドが実行できて PAGER が未定義でもエラーにならないと思います。 less や util-linux(more) のパッケージは kernel -> initscripts -> console-tools -> gzip -> less kernel -> initscripts -> util-linux といったふうに依存関係が kernel にまでつながっていて 通常はアンインストールできないパッケージなので command not found ということにはなりません。 消極的な対応かもしれませんが、 Patch を外すととりあえず less で動作するようになります。 ///// 積極的な対応ということであれば pager を提供するしないという話ではなくて、 pager が使えなくてもエラーで終了しないようになおす必要があると思います。 現状は、順番に試して使えるものを見つけるというのではなく 最初の一つだけを利用するようです。 変数 PAGER が定義されていればそれだけで終了して 次の候補になっている pager less more などを利用しません。 $ PAGER="hoge" ri /usr/bin/ri:43: command not found: hoge 略 for 文のところを 実行できるコマンドかどうかチェックする 実行できないのであれば次の候補にうつる という処理にすればいいように思います。 for pager in [ ENV['PAGER'], "pager", "less", "more" ].compact.uniq if test(?X,pager) then return IO.popen(pager, "w") rescue nil end end といったような感じでしょうか? とりあえず、test(?X, ) を使うとなると コマンドを 絶対PATH に直すというステップも必要なようです。 他にスマートなやり方があるのかもしれません。 rubyに詳しくないので、あとはメンテナーさんや詳しい方にお願いします。 |
(0002416) kaneko (開発者) 2007-04-03 16:14 |
アーキテクチャに依存しない問題ですので、arch に x86_64 と ppc を 追加しました。 > > pager というコマンドが update-alternatives で提供されるなら、 > > 検索する順序としては妥当ではないかと思います。 > > update-alternatives 関連は Seed でしかできないように思います。 Seedにおける対応は(パッチの変更、update-alternativesでの対応、 その他?)開発者MLで検討中ですのでしばらくお待ちください。 # 先にも書きましたが、引き続き情報提供は歓迎します。 > 4.x だと Plus ではないパッケージは Eratta での更新だけですよね? > 4.2 のリリース時なら可能なのかな? これは個人的な意見ですが、4.1 での対応は パッケージは修正しない 回避方法として環境変数PAGERを設定する ということでひとまず十分ではないかと思います。 パッケージ修正でしか対応できないという種類の問題ではないので…。 > for 文のところを > 実行できるコマンドかどうかチェックする > 実行できないのであれば次の候補にうつる > という処理にすればいいように思います。 ご提案ありがとうございます。 この方法も選択肢に含めて、開発者MLで検討させてください。 |
(0002417) kaneko (開発者) 2007-04-11 22:05 |
Seed ML での検討の結果、対応は以下のとおりとします。 ・4.1 ではパッケージ側での対応はしません。 ユーザの環境変数 PAGER に適切なページャのコマンドを設定してください。 ~/.bash_profile に export PAGER=less などと設定すると、ri がきちんと動作するようになります。 ・Seed では、update-alternatives を用いて /usr/bin/pager に /usr/bin/less /usr/bin/more /usr/bin/lv /usr/bin/w3m という優先度順に設定されるようにしました。つまり Seed では、 (1) 環境変数 PAGER が設定されていれば、それが優先 (2) 設定されていなければ、システムデフォルトの pager として上記の優先度順でコマンドが割り当てられる。 となります。 関連パッケージに less util-linux lv w3m を追加、 担当者を kaneko に、 状態を確認待ちに変更します。 |
(0002418) anonymous (参照) 2007-04-13 00:09 |
> ・Seed では、update-alternatives を用いて /usr/bin/pager に > 関連パッケージに less util-linux lv w3m を追加、 Requires(post,preun): alternatives が必要です。 あと Provides: pager があったほうがいいと思います。 %files セクションに %{_bindir}/pager は含まれないので Provides: pager %{_bindir}/pager のほうがいいと思うのですが update-alternatives で提供されるコマンドを Provides: に入れるかどうか 指針が必要かもしれません。 |
(0002419) kaneko (開発者) 2007-04-13 01:40 |
Provides: pager Requires(post,preun): alternatives を追加して less, lv, util-linux, w3m の各パッケージを VineSeed に put しました。 > %files セクションに %{_bindir}/pager は含まれないので > Provides: pager %{_bindir}/pager > のほうがいいと思うのですが ri の不具合対応として pager 対応だけそこまで手厚くするのは、 他のパッケージと比較するとやりすぎだと思いますので、 これは対応しません。 強いニーズがあるなら、他の Provides パッケージも含めて、 要望として別途検討すべきだと思います。 |
(0002420) kazutaka (開発者) 2007-07-07 00:34 |
一通りの対応が行われたので、これで完了にします。 > > %files セクションに %{_bindir}/pager は含まれないので > > Provides: pager %{_bindir}/pager > > のほうがいいと思うのですが > > ri の不具合対応として pager 対応だけそこまで手厚くするのは、 > 他のパッケージと比較するとやりすぎだと思いますので、 > これは対応しません。 > > 強いニーズがあるなら、他の Provides パッケージも含めて、 > 要望として別途検討すべきだと思います。 これについては特にどなたからも要望が上げられて いませんし、現状の他のパッケージと見比べてみても Provides を付けるのはちょっと例外的なようですので、 これ以上の対応は行わなくて良いと思います。 ハラダ |
課題の履歴 | |||
変更日 | ユーザー名 | 項目 | 変更内容 |
2007-02-17 11:31 | anonymous | 新規課題 | |
2007-03-30 00:15 | kaneko | コメント追加: 0002410 | |
2007-03-30 00:17 | kaneko | コメント追加: 0002411 | |
2007-03-30 03:06 | anonymous | コメント追加: 0002412 | |
2007-03-31 03:01 | anonymous | コメント追加: 0002413 | |
2007-03-31 09:24 | kaneko | バージョン | 4.0 => 4.0,4.1,VineSeed |
2007-03-31 09:24 | kaneko | コメント追加: 0002414 | |
2007-03-31 20:14 | anonymous | コメント追加: 0002415 | |
2007-04-03 16:14 | kaneko | arch | x86 => x86, x86_64, ppc |
2007-04-03 16:14 | kaneko | コメント追加: 0002416 | |
2007-04-11 22:05 | kaneko | パッケージ | rdoc-1.8.5-0vl1.1 => rdoc less util-linux lv w3m |
2007-04-11 22:05 | kaneko | 担当者 | => kaneko |
2007-04-11 22:05 | kaneko | 状態 | 新規 => テスト待ち |
2007-04-11 22:05 | kaneko | コメント追加: 0002417 | |
2007-04-13 00:09 | anonymous | コメント追加: 0002418 | |
2007-04-13 01:40 | kaneko | コメント追加: 0002419 | |
2007-07-07 00:34 | kazutaka | 状態 | テスト待ち => 完了 |
2007-07-07 00:34 | kazutaka | コメント追加: 0002420 |
Copyright © 2000 - 2024 MantisBT Team Copyright © 2012 - 2024 Project Vine |