Ubuntu

從編譯的原始碼替換多個 Debian 軟體包

  • April 29, 2013

我不得不從其原始碼儲存庫下載並安裝一個庫版本。問題是來自 Kubuntu 包管理器的其他包需要安裝這個庫。現在我正在使用 ffmpeg,但我以前必須這樣做(例如 OpenCV),我正在尋找未來最好的方法……

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

問題是,ffmpeg 在包管理器中被拆分為多個包,如果我不需要,我不想編寫 5/6 包來替換每個包。我已確保它已正確編譯所有這些軟體包所需的一切。

我一直在嘗試使用“要求”和“替換”,但它似乎無法正常工作。當我之後嘗試安裝 VLC 時,它會要求安裝包管理器中的所有 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

有沒有人有任何想法讓這個工作?

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

如果關係欄位附加了版本號,則只會考慮真正的包

$$ … $$. 換句話說,如果指定了版本號,這是一個忽略該包名稱的所有提供並僅考慮真實包的請求。

對庫的依賴幾乎總是版本化的。所以這是行不通的。

相反,您可以:

  • 下載 Debian 軟體包apt-get source PACKAGE(當然,您需要更新庫的 sonames(我敢打賭 ABI 已更改),並且可能重建很多依賴 ffmpeg 的東西。如果 API 更改,其中一些可能需要更改源。
  • 或者,簡單的方法:將其安裝到/usr/local. 您可以建構一個.deb,並給它一個不同的包名稱(例如,local-ffmpeg)。然後,您可以將它與 Debian 提供的 ffmpeg 一起安裝,而不必擔心上述所有問題。您也可以使用stow將其安裝在/usr/local.

引用自:https://unix.stackexchange.com/questions/74073