Package-Management
如何處理在 dpkg 降級後應該存在但被刪除的文件
我們有一個基於 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
中,刪除符號連結並恢復備份(如果存在)。