読者です 読者をやめる 読者になる 読者になる

apt では self-build の提供するパッケージに依存する self-build パッケージの依存関係ができない

self-build パッケージをインストールするためのユーティリティーを作成することも考えていましたが,%post だけでやっているやっつけなので,時間と手間を考えると,利用者側にもある程度依存関係を理解して頂くのが良いかと思います.

手前みそでは簡単なユーティリティーをつくるとしても,それを self-build-setup に同封する価値がなさそうです.

しばらく考えてみます.とりあえず現在の対策をまとめてみました.

【パッケージャー側】他の self-build パッケージに依存している場合は,self-build-ffmpeg(-mh).spec の Prereq: のうち,self-build パッケージにより提供されるパッケージのものを,すべて self-build に置き換えて記述しておく

【利用者側】もし apt-get install self-build-xxxxx をして,途中で rpm ビルドエラーが起こったら,/vat/tmp/self-build-xxxxx.log をチェックの上,必要なものを apt-get reinstall した上で apt-get reinstall self-build-xxxxx を実行してもらう

いい加減,アカウント取得した方が良さそうな気がしてきました.近い将来,アカウント取得の許可のお願いしてみようと思います.

以下は,他の self-build パッケージに依存している場合について,悩んだときのメモです.くだらないですが,残しておきます.

self-build パッケージをインストールするためのユーティリティーが必要!?

ffmpeg(-mh) は依存する self-build パッケージが 1 段階で済むので,まだ楽なのです.実際には,ヘルパースクリプトも含めると次の手順で ffmpeg(-mh) がインストールできます.

# apt-get install self-build-setup
# apt-get install self-build-xvidcore self-build-faac self-build-lame self-build-x264 self-build-libdca self-build-a52dec
# apt-get install self-build-ffmpeg(-mh)

ところが,あの self-build パッケージが提供するパッケージに依存するその self-build パッケージの提供するパッケージに依存するこの self-build パッケージをインストールするということになってしまう self-build パッケージが今後出てくると,何に依存するかを知っていないと,人によってはインストールするのにも一苦労為かねないかもしれません.

そろそろ self-build のために,self-build パッケージをインストールする専用ユーティリティーが必要かなと感じ始めました.先ほど帰宅の電車で朧気ながら考えていたのですが,こんな感じです.

まず,self-build-setup はあらかじめインストールする.
これは仕方のないこととして,この中に self-build ツールを同封してもらう.
また self-build-xxxxx.spec の Prereq: のうち,self-build により提供されるパッケージのものはすべて self-build に置き換える.

そして,apt-get の操作に習って…,

# self-build install ffmpeg
self-build-ffmpeg は以下の self-build パッケージに依存しています:
self-build-xvidcore self-build-faac self-build-lame self-build-x264 self-build-libdca self-build-a52dec

としておき,さらに,各々に対して,self-build-xxxxx が依存している self-build パッケージを調べて,self-build 依存が無くなるまでチェックし,各依存の段階ごとで apt-get install を再帰的におこなう.

self-build remove ffmpeg もまた然りです.

そんなユーティリティーを考える必要があるかなーと思い始めました.

self-build の self-build に依存する Prereq: には self-build で記述しないといけない!?

以下は,self-build-ffmpeg-0.4.9-0.20080128vl2.i386.rpm, self-build-ffmpeg-mh-0.33-0vl2.i386.rpm にて,修正しました.self-build どうしの依存関係としてのメモとして,残しておきます.


先ほど self-build-ffmpeg(-mh) を apt-get して気づいたことですが,id:munepi:20080310:1205167630 にも書いたことが apt-cache unmet として表に出てしまいました.たいへん申し訳ありません.

例えば ffmpeg と a52dec-devel だけ今のシステムからわざと抜いて,self-build-ffmpeg をインストールしようとすると,次のようになります.

$ sudo apt-get install self-build-ffmpeg
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
いくつかのパッケージをインストールすることができません。おそらく、
ありえない状況を要求したか、(必要なパッケージがまだそろっていなかっ
たり、まだIncomingから移動されていない)不安定なディストリビューション
を使用していないでしょうか。

単純な操作だけを行った時に、パッケージがインストール
できない場合は、バグリポートしてください。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージは解決できない依存関係を持っています:
  self-build-ffmpeg: 先行依存: a52dec-devel それをインストールすることができません
E: 壊れたパッケージです

この現象が起こるのは,簡単な例で説明しますと,self-build-setup をインストールしない状態で,self-build-mplayer をインストールしたときに,自動で mplayerrpm をインストールしてくれないのと同じ原因です.しかしながら,この場合は上記のようなエラーを出すので,ちょっと事情が異なります.

この状態で apt-cache unmet をしてみると,案の定解決不可能な依存情報を持っていますとなります.

$ apt-cache unmet
パッケージ self-build-ffmpeg のバージョン 0.4.9-0.20080128vl1 は解決不可能な依存情報を持っています:
 先行依存: a52dec-devel

もちろん,self-build-a52dec を入れておれば,このメッセージは吐かないのですが,さすがに apt-cache unmet をするときに,すべての self-build パッケージを入れておかないなんていうのはちょっと困りました.

対策としては,self-build-ffmpeg(-mh).spec の Prereq: のうち,self-build パッケージにより提供されるパッケージのものを,すべて self-build に置き換えることだと思います,たぶん.こうすると,apt-cache unmet に「解決不可能な依存情報を持っています」が出てこなくなるはずです.