我的deb文件删除/ opt

时间:2012-10-22 22:42:50

标签: debian dpkg

我的deb文件安装到/ opt / myCompany / myProgram,当我用dpkg -P myProgram清除包时,一切都被删除 - 甚至/ opt(如果我的是唯一包含/ opt文件的包) - 我该如何避免在清除期间删除/ opt文件夹?

我已经尝试检查postrm中是否存在/ opt并添加它如果它没有但没有欢乐......似乎在运行postrm脚本后删除了该文件夹。目前我在/ opt中使用postinst添加一个隐藏文件 - 这会阻止删除,但感觉hackey - 应该有更好的方法。

谢谢,

2 个答案:

答案 0 :(得分:1)

那只是debian。每当它从非debian标准目录(例如你的/opt)中删除一个包时,该目录中没有文件,dpkg将尝试删除该目录。

如果删除时/opt中有其他文件,则会收到“/ opt不为空;未删除”的消息,就是这样。

另一种“hacky”方式是在postrm中添加/ opt的重新创建,但它并不比隐藏文件更清晰:)

答案 1 :(得分:0)

这个问题大约在7年前问过,但是我在Google搜索中偶然发现了一个类似的问题,并认为无论如何我都会发布答案,因为这个问题的答案并不是真正的解决方案。

以下问题也是相关的(但属于/ usr / local而不是/ opt),可以类似地解决:

dpkg: warning: while removing directory /usr/local not empty so not removed

我可以使用以下技术解决此问题。

Debian软件包(.deb)只是一个具有3个成员的“ ar”归档文件:

$ ar t package.deb
debian-binary
control.tar.gz
data.tar.xz

根据* .deb的使用期限,data.tar.xz成员可能会被命名为data.tar.gz。相应地调整命令。

已安装到目标系统的文件包含在data.tar.xz成员中。如果您提取data.tar.xz成员并列出其内容,例如,您将看到类似以下的内容。

$ ar p package.deb data.tar.xz | unzx -c | tar t
./
./opt/
./opt/myCompany/
./opt/myCompany/myProgram

从data.tar.xz文件中删除./opt/目录成员(但不删除其内容)将阻止dpkg在卸载软件包时尝试删除/ opt目录。

$ ar x package.deb data.tar.xz
$ unzx data.tar.xz
$ tar --delete --occurrence -f data.tar ./opt/
$ #tar --delete --occurrence -f data.tar ./usr/local/

现在,如果您列出data.tar文件的内容,则应该看到类似以下内容的

$ tar tf data.tar
./
./opt/myCompany/
./opt/myCompany/myProgram
  • 注意../opt/成员已被删除。

最后一步是重新压缩data.tar文件,并用修改后的文件替换deb中的data.tar.xz成员。

以下是从tar文件存档中删除./opt/条目并将deb中的tar文件存档替换为修改后的完整过程的一个示例:

$ ar x package.deb data.tar.xz
$ unzx data.tar.xz
$ tar --delete --occurrence -f data.tar ./opt/
$ xz data.tar
$ ar r package.deb data.tar.xz
$ rm data.tar.xz

现在,当从系统中删除/卸载deb时,dpkg不会尝试删除/ opt目录。