我在 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 会输出警告。