Ubuntu
從編譯的原始碼替換多個 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
在這裡它安裝在包管理器中:
有沒有人有任何想法讓這個工作?
好吧,一方面,
Provides:
它不適用於指定版本的依賴項。來自Debian 政策手冊,“虛擬包 - 提供”:如果關係欄位附加了版本號,則只會考慮真正的包
$$ … $$. 換句話說,如果指定了版本號,這是一個忽略該包名稱的所有提供並僅考慮真實包的請求。
對庫的依賴幾乎總是版本化的。所以這是行不通的。
相反,您可以:
- 下載 Debian 軟體包
apt-get source PACKAGE
(當然,您需要更新庫的 sonames(我敢打賭 ABI 已更改),並且可能重建很多依賴 ffmpeg 的東西。如果 API 更改,其中一些可能需要更改源。- 或者,簡單的方法:將其安裝到
/usr/local
. 您可以建構一個.deb
,並給它一個不同的包名稱(例如,local-ffmpeg
)。然後,您可以將它與 Debian 提供的 ffmpeg 一起安裝,而不必擔心上述所有問題。您也可以使用stow
將其安裝在/usr/local
.