我在 dpkg 套件中有以下 postint 腳本:
rm -f /SOMEDIRECTORY/current
ln -s /SOMEDIRECTORY/releases/RELEASESHA /SOMEDIRECTORY/current
ln -s /SOMEDIRECTORY/shared/config/config.json /SOMEDIRECTORY/releases/RELEASESHA/config/config.json
這是安裝前的目錄樹:
drwxr-xr-x 2 user user 4096 May 12 15:21 config
drwxr-xr-x 3 user user 4096 May 14 08:56 shared
drwxr-xr-x 6 user user 4096 May 14 10:06 releases
lrwxrwxrwx 1 root root 49 May 14 10:14 current -> /SOMEDIRECTORY/releases/RELEASESHA
當我嘗試安裝 deb 套件時,它試圖刪除符號連結指向的目錄,而不是僅刪除符號連結:
dpkg: warning: unable to delete old directory '/SOMEDIRECTORY/releases/OLD_RELEASESHA': Directory not empty
當我手動運行該rm -f
命令時,它按預期工作,但是當 postinst 運行時,它將該命令更改為其他內容,試圖刪除符號鏈接指向的目錄,而不僅僅是符號鏈接本身?
有人有想法嗎?謝謝
答案1
該錯誤訊息不是來自 postinst 中的任何命令。
您沒有提供太多信息,但我的猜測是,當您嘗試安裝 deb 軟體包時,系統上已經存在該軟體包的舊版本。在這種情況下,dpkg 會在安裝新版本之前嘗試清除舊版本。/SOMEDIRECTORY/releases/OLD_RELEASESHA
那時它預計是空的,因為那裡沒有其他包有文件,所以它嘗試刪除它,但有是其中的一些文件不屬於任何包。這很好,只是不符合預期,因此 dpkg 輸出警告。