![apt-get 清除端口映射](https://linux22.com/image/575337/apt-get%20%E6%B8%85%E9%99%A4%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84.png)
我在相对较新安装的 debian squeeze 上打开了端口 111 上的 rpc.statd。我执行了 apt-get purge portmap,因为我想禁用 rpc 服务并关闭我的机器上的开放端口;我看到了以下内容:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libtirpc1 rpcbind
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
libtirpc1 rpcbind
The following packages will be REMOVED:
nfs-common* portmap*
The following NEW packages will be installed:
libtirpc1 rpcbind
0 upgraded, 2 newly installed, 2 to remove and 0 not upgraded.
Need to get 127 kB of archives.
After this operation, 438 kB disk space will be freed.
Do you want to continue [Y/n]? n
长话短说,我能够删除 portmap,而无需安装其他软件包,方法是先执行 apt-get purge nfs-common,然后执行 apt-get purge portmap。
有人能解释一下这种行为吗?为什么在第一种情况下,apt-get 尝试清除 portmap 时会尝试安装 rpcbind 和 libtirpc1,而在第二种情况下却不会?从上面的输出中可以清楚地看出,apt-get 一开始打算删除 nfs-common 和 portmap。我能找到的唯一其他相关细节是 fam 依赖于 portmap,但这是一个远程服务器,不需要 fam 和 gui。这是错误还是我遗漏了什么?如果是这样,应该向谁报告?
答案1
APT 的设计初衷是让您不会遇到系统故障。它不知道您正在运行服务器,也不需要某个软件包或其他软件包。
如果您尝试删除某个软件包,但其他软件包依赖于您要删除的软件包,但也可以改用其他软件包,则在尝试删除该软件包时,您会看到类似这样的行为。当您尝试删除它所依赖的软件包时,APT 将建议安装替代方案。
如果您尝试清除邮件传输代理(邮件服务器),您会经常看到这种情况。有大量程序需要 MTA,因此当您尝试清除 exim 或 postfix 时,另一个将被安装。
答案2
只需在 /etc/default/portmap 中执行以下操作即可停止 portmap 监听外部接口:
# If you want portmap to listen only to the loopback
# interface, uncomment the following line (it will be
# uncommented automatically if you configure this
# through debconf).
OPTIONS="-i 127.0.0.1"
然后做:
/etc/init.d/portmap restart
我认为这个问题很简单,但很棘手。Apt 确实安装了 rpcbind,因为你从输出中删除了 portmap:
The following extra packages will be installed:
libtirpc1 rpcbind
但随后它还注意到 rpcbind 不再需要,因为 nfs-common 也将被删除。从您的输出中:
The following packages were automatically installed and are no longer required:
libtirpc1 rpcbind
Use 'apt-get autoremove' to remove them.
如果您回答“y”,则 apt 将删除 portmap 和 nfs-common,并安装 libtirpc1 和 rpcbind。然后,您将运行 apt-get autoremove 来删除 libtirpc1 和 rpcbind。
我认为这可能是 apt 决策过程中重要性顺序的问题。
即规则:portmap删除,然后安装rpcbind
比规则更重要:nfs-common 已删除,因此我不需要 rpcbind
可以在不知道 nfs-common 被删除的情况下检查第一条规则。包不再需要比依赖关系被破坏更重要。之后运行“apt-get autoremove”可以轻松“修复”这个问题。
我不认为这是一个错误,只是 apt 决策过程的结果。