为什么 postrm 在清除时运行两次?

Ula*_*ach 4 package-management packaging apt deb

我创建了一个包,其中包含postrm一个删除用户的脚本。运行时sudo apt-get remove ...postrm脚本的行为符合预期:

vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get -y remove datim4u-auto-cert-updater
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  datim4u-auto-cert-updater
0 upgraded, 0 newly installed, 1 to remove and 32 not upgraded.
After this operation, 18.4 kB disk space will be freed.
(Reading database ... 70225 files and directories currently installed.)
Removing datim4u-auto-cert-updater (1.0.1~trusty) ...
Removing user datim4u_auto_cert_updater and its home directory...
Looking for files to backup/remove ...
Removing files ...
Removing user `datim4u_auto_cert_updater' ...
Warning: group `datim4u_auto_cert_updater' has no more members.
Done.
Run Code Online (Sandbox Code Playgroud)

但是,在运行时sudo apt-get purge ...postrm脚本运行了两次,导致错误/usr/sbin/deluser: The user '...' does not exist.

vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get -y purge datim4u-auto-cert-updater
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  datim4u-auto-cert-updater*
0 upgraded, 0 newly installed, 1 to remove and 32 not upgraded.
After this operation, 18.4 kB disk space will be freed.
(Reading database ... 70225 files and directories currently installed.)
Removing datim4u-auto-cert-updater (1.0.1~trusty) ...
Removing user datim4u_auto_cert_updater and its home directory...
Looking for files to backup/remove ...
Removing files ...
Removing user `datim4u_auto_cert_updater' ...
Warning: group `datim4u_auto_cert_updater' has no more members.
Done.
Purging configuration files for datim4u-auto-cert-updater (1.0.1~trusty) ...
Removing user datim4u_auto_cert_updater and its home directory...
/usr/sbin/deluser: The user `datim4u_auto_cert_updater' does not exist.
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 5

这是预料之中的,也是正常的。维护者脚本在包配置期间可能会被多次调用,并且使用指示调用它们的操作的参数来调用它们。您可以在维护者脚本的 Debian Wiki 页面中查看该过程,包括删除和清除过程的流程图(而不是先删除软件包,然后在不同的操作中清除):

<code>postrm 删除</code>,然后 <code>postrm purge</code>

您的所有维护者脚本 ( {pre,post}{inst,rm}) 都应该记录传递给它们的参数并采取相应的操作。