ソース コード リポジトリからライブラリのバージョンをダウンロードしてインストールする必要がありました。問題は、Kubuntu パッケージ マネージャーの他のパッケージではこのライブラリのインストールが必要なことです。現在、ffmpeg を使用していますが、以前にもこれを実行したことがあります (例: OpenCV)。今後は、これを実行する最善の方法を検討しています...
そこで私がやろうとしているのは、checkinstallを使ってdpkgでインストールできるDebianパッケージを作成することです。その後、debファイルを解凍して修正し、正しく動作するようにしました。
問題は、ffmpeg がパッケージ マネージャーで複数のパッケージに分割されており、必要がないのに 5/6 個のパッケージを記述して、それぞれを置き換えたくないことです。これらすべてのパッケージに必要なものがすべて適切にコンパイルされていることを確認しました。
「Requires」と「Replaces」を使用しようとしましたが、正しく動作しないようです。その後 VLC をインストールしようとすると、パッケージ マネージャーからすべてをインストールするように求められます。また、バージョン番号がパッケージ マネージャーのバージョン番号よりも新しいことも確認しました。
これが私の deb 制御ファイルに書かれている内容です。私が見る限り、これはすべて muon パッケージ マネージャーで認識されます。
Package: ffmpeg
Priority: extra
Section: checkinstall
Installed-Size: 172216
Maintainer: root@skund
Architecture: amd64
Version: 8:1.2.1-git-2
Provides: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Replaces: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Description: Package created with checkinstall 1.6.2
パッケージ マネージャーにインストールすると次のようになります。
これを機能させるためのアイデアを持っている人はいますか?
答え1
まあ、まずProvides:
バージョンを指定する依存関係では動作しません。Debian ポリシーマニュアル、「仮想パッケージ - 提供」:
関係フィールドにバージョン番号が添付されている場合、実際のパッケージのみが考慮されます [...]。つまり、バージョン番号が指定されている場合、これはそのパッケージ名のすべての Provides を無視し、実際のパッケージのみを考慮するように要求することになります。
ライブラリへの依存関係は、ほとんどの場合バージョン管理されています。そのため、これは機能しません。
代わりに、次のことができます。
- Debian パッケージ (
apt-get source PACKAGE
) をダウンロードし、最新の ffmpeg に更新します (実際、必要なパッチを Debian バグ トラッカーに送信することもできます)。もちろん、ライブラリの soname を更新する必要があります (ABI が変更されたはずです)。また、ffmpeg に依存する多くのものを再構築する必要があるでしょう。API が変更された場合は、ソースの変更が必要になる場合があります。 - または、簡単な方法として、 にインストールします
/usr/local
。.deb
の を作成し、別のパッケージ名 (例: ) を付けることができます。その後、Debian 提供の ffmpeg と一緒にインストールすれば、上記のすべてのことを心配する必要がなくなります。を使用して にインストールするlocal-ffmpeg
こともできます。stow
/usr/local