2018年10月19日金曜日

Debian packageのdependencyをごまかして (強制的に) installする方法

*** 更新情報 ***

2018-10-22現在、Debian sidにおけるcalibreの最新版はqtbase-abi-5-11-2へ対応したversionへ更新されたので、以下の不整合は発生しない。

*** 更新情報ここまで ***


calibreというebook readerがある。

読むだけではなく、formatの変換なども行える (swiss army knife的に)多機能なsoftwareで、個人的に使えないと非常に困るのだが、先にupdateされるQt libraryへのdependencyで不整合を起こしuninstallされ (かけ)ることがままある。

最近も、Qt relatedなpackagesが更新されて、これらが提供するvirtual packageであるqtbase-abi-5-11-0がqtbase-abi-5-11-2へ上がった。calibreの実体programを提供するpackageであるcalibre-bin 3.32.0_dfsg-1+b1はqtbase-abi-5-11-0にdependしているため不整合を起こしてuninstallされかけた。

calibreを新しいQtとlinkしてbuildした上でcontrolを修正するのが最も真っ当な方法だが、たかが5.11.0 → 5.11.2の変化ならどうにかなるだろう、という根拠のない推測からdependencyをごまかしてuninstallされないようにした。実際、calibreは無事立ち上がり、特に問題なく動作しているので、ひとまずこの状態で使ってみる。

無論、ABIのversionが変わっている以上互換性は保証されず、強制的にinstallしても動作しなかったり、意図しない動作になったりする可能性があるので注意。

やり方の概要


以前にも同じようなことをした記憶があったので検索してみた所、

cf. https://typeinf-memo.blogspot.com/2015/08/debian-unstable-sidexperimental.html

に似たような記事を書いていた。

前回はcontrolから不要なdependencyを削除していたが、今回もやることは余り変わらない (今回はversionを書き換えるだけ)。

* binary packageをdownloadして展開
* control.tar.xzを展開してcontrolを書き換える
* 改編したcontrolを含むcontrol.tar.xzを生成
* 変更したcontrol.tar.xzを含むbinary packageを生成
* installして動作確認

具体的な手順


* calibre-binのbinary packageをdownload

% apt-get download calibre-bin

* arでbinary packageを展開

% ar x calibre-bin_3.32.0_dfsg-1+b1_amd64.deb

control.tar.xz、data.tar.xz、debian-binaryが生成される。

* control.tar.xzを展開

% tar xJf control.tar.xz

control、md5sumsが生成される

* 適当なtext editor (vimなど)でcontrolを書き換える。今回の場合"qtbase-abi-5-11-0"を"qtbase-abi-5-11-2"へ書き換えて保存する

* 書き換えたcontrolを含むcontrol.tar.xzを作る

% tar --create --file control.tar.xz --xz md5sums control

* 作り直したcontrol.tar.xzを含むbinary packageを生成する

% ar rcs calibre-bin_3.32.0_dfsg-1+b1_amd64.deb debian-binary control.tar.xz data.tar.xz

* dpkg -iでinstallし動作確認

% sudo dpkg -i calibre-bin_3.32.0_dfsg-1+b1_amd64.deb

* aptitudeなどを使っている場合はupdateによる書き換えを防ぐためにcalibre-binをholdしておくとよい

おつかれさまでした。

0 件のコメント:

コメントを投稿