Package-Management

如何處理在 dpkg 降級後應該存在但被刪除的文件

  • February 26, 2020

我們有一個基於 Raspberry Pi/Raspbian 的產品,並使用 Debian 軟體包來推出軟體升級(用 Python 編寫)。

我在正確安裝新軟體包時遇到問題,特別是在提供有效的降級路徑時。我是 Debian 的普通使用者,但對包管理世界很陌生。

我們的包中有一些文件和腳本/usr/local/bin。但是,這些文件不是DEBIAN封包件夾的一部分。它們在我們的產品生產過程中被複製到 SD 卡上。

我現在創建的包需要替換其中一個文件,所以我DEBIAN/usr/local/bin在包中創建了一個文件夾,其中包含新文件。

這適用於使用我的新軟體包進行升級,但是在降級時,dpkg會刪除新文件並嘗試刪除/usr/local/bin文件夾,因為就它而言,它們以前不存在。舊版本的軟體包需要該文件,因此無法正確安裝和執行。

我嘗試使用pre\post inst\rm新包中的腳本在安裝時復製文件,然後在刪除時將其複制回來,但我的理解是操作的順序意味著這不會成功,因為刪除發生在新包之後包已經執行了它的所有腳本。

有沒有辦法防止在降級期間刪除此文件?

我希望我已經把問題說清楚了。

我的解決方案與@muru 在評論中建議的差不多:

  • 將新文件放入/opt/appname/bin包中
  • postinst中,備份文件/usr/local/bin並用符號連結替換到/opt/appname/bin.
  • postrm中,刪除符號連結並恢復備份(如果存在)。

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