目录还在,服务却没了,而且无法一眼看出软件包是否仍处于已安装状态。在 Debian 系系统上,残留的 /etc/openvpn 通常意味着包被 remove 了但没有 purge,这是一种有文档记录的状态,而不是损坏。你看到的文件多半是配置,而不是程序。

按手册顺序操作:读取包状态,决定保留什么,有意识地 purge,然后确认还剩下什么。在 purge 之前,每一步都可以回退。

先读取包状态

从包数据库入手,而不是文件系统。dpkg -l openvpn 会输出两字母状态,rc 表示包已被移除但配置文件被保留。dpkg-query -W -f='${Status}\n' openvpn 用文字给出同样的答案。目录列表无法告诉你这些。

不要把 Community OpenVPN 与 Access Server 或 NetworkManager 插件混为一谈。它们是不同的包,移除路径也不同。

如果状态是 ii,说明包已安装,目录是正常的。如果是 rc,只剩配置。如果查询没有任何返回,说明包已被 purge,目录属于别的东西。

在 remove 与 purge 之间做选择

remove 删除程序、保留配置。purge 连配置一起删除,并运行包的清理脚本。两者都是关于状态的管理决策,而不是同一条命令的两种写法。

选择之前,先用 dpkg -L openvpn 列出包拥有哪些路径。这份输出是包所管理路径的地图,也是判断 purge 会删掉什么时正确的输入。目录中不在该列表里的任何文件都来自别处。把这些文件当作需要你复核的自家文件,而不是包的残留。

对已经 remove 的包执行 purge 是允许的。并不要求先重新安装。

保留你仍然需要的东西

在 purge 之前,保留你仍然需要的东西:配置文件、客户端证书、私钥、CCD 文件以及任何本地脚本。以适合机密信息的权限复制它们,并记录副本所在的位置。

检查是否有其他服务或管理器在使用同一目录。第二个 VPN 实例或自动化脚本可能依赖一条看起来像残留配置的路径。

如果机器要退役,本地文件只是问题中较小的一半。导出的配置和远程授权会比任何被删除的目录活得更久。

purge 并验证

通过包管理器执行 purge,而不是直接删除目录。sudo apt purge openvpn 会让包数据库和清理脚本继续参与流程。

之后重复状态查询,确认包不再出现。用 systemctl status openvpn@server 或你使用的 unit 名称确认服务已消失,并测试普通网络。

purge 不会删除的文件

有些文件是有意设计为 purge 也不会删除的。由维护者脚本处理的生成配置并不总是被 dpkg 的文件数据库所知。用户主目录中的配置不在系统目录清理范围内。而管理员手工创建的内容从来不属于该包。每一种都需要单独复核。

递归删除所有名字里带 VPN 的路径,正是可用凭据和无关配置消失的方式。

最后撤销机器不再需要的东西:导出的配置文件、已签发的客户端证书,以及任何曾通过它认证的账户。删除本地目录并不会撤销仍存在于别处的凭据。dpkg 参考记录了这些状态以及 purge 的范围。

相关文章