從編譯源替換多個 Debian 軟體包

從編譯源替換多個 Debian 軟體包

我必須從原始碼儲存庫下載並安裝庫的一個版本。問題是 Kubuntu 套件管理器中的其他套件需要安裝這個庫。現在我正在使用 ffmpeg,但我以前必須這樣做(例如 OpenCV),我正在尋找未來執行此操作的最佳方法...

所以我想做的是創建一個 debian 軟體包,我可以使用 checkinstall 與 dpkg 一起安裝它。我已經解壓縮了 deb 檔案來修改它,試圖讓它正常工作

問題是,ffmpeg 在套件管理器中被分成多個包,如果不需要的話,我不想編寫 5/6 個包來替換每個包。我已確保它已使用所有這些包所需的所有內容正確編譯。

我一直在嘗試使用“需要”和“替換”,但它似乎無法正常工作。當我之後嘗試安裝 VLC 時,它要求安裝套件管理器中的所有內容。我還確保版本號碼比套件管理器中的版本號晚。

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

這裡它被安裝在套件管理器中:

ffmpeg 套件管理器 ffmpeg 套件管理器 2

有人對讓它發揮作用有什麼想法嗎?

答案1

一方面,它Provides:不適用於指定版本的依賴項。來自Debian 政策手冊,“虛擬包 - 提供”:

如果關係欄位附加了版本號,則只有真正的套件才會被考慮[...]。換句話說,如果指定了版本號,則這是忽略該套件名稱的所有 Provides 並僅考慮真實套件的請求。

對庫的依賴關係幾乎總是有版本的。所以那是行不通的。

相反,您可以:

  • 下載 Debian 軟體包 ( apt-get source PACKAGE) 並將其更新為最新的 ffmpeg(事實上,您甚至可以將所需的修補程式傳送到 Debian bug 追蹤器)。當然,您需要更新庫的 sonames(我敢打賭 ABI 已更改),並且可能需要重建許多依賴 ffmpeg 的東西。如果 API 發生變化,其中一些可能需要更改原始程式碼。
  • 或者,簡單的方法:將其安裝到/usr/local.您可以建置其中.deb的一個,並為其指定一個不同的套件名稱(例如,local-ffmpeg)。然後您可以將它與 Debian 提供的 ffmpeg 一起安裝,而不必擔心上述所有問題。您也可以使用stow將其安裝在/usr/local.

相關內容