为了给客户提供有价值的反馈和服务,我们不断分析 3CX V16 (Debian 9) 到 V18 (Debian 10) 的迁移状态/过程。我们这样做是为了找出可能影响升级过程的常见隐患/错误。在最近的分析中,我们已经确定了导致系统升级失败的两个主要问题。APT 被锁定,或不支持的第三方源列表。
APT 锁定
66% 的系统在升级时被中止,是由于 APT 进程被卡住。具体来说,这些系统中的大多数都有一个 2021 年开始的 apt-update 进程,并且一直卡在那里。解决这个问题的方法是在尝试升级之前简单地重新启动系统。
你可以通过发给管理员邮箱中的升级失败日志来确认系统升级失败是否由我们描述的这个 66% 原因导致的。如果日志中包含下列错误中的其中一种,那么重启系统后应该就可以解决升级失败的问题了。
APT 锁定导致的升级失败样例:
[19:06:24] Failed: Output of ps aux (apt lock)
/var/lib/apt/lists/lock:root 15914 0.0 0.1 45940 7548 ? S 2021 14:40 | \_ apt-get updateroot 11289 0.0 0.0 12780 916 ? S 19:06 0:0 | \_ grep 15914
[08:14:52] Failed: Output of ps aux (apt lock)
/var/lib/apt/lists/lock:root 11550 0.0 0.1 45976 7816 ? S Sep24 4:24 | \_ apt-get updateroot 28281 0.0 0.0 12780 928 ? S 08:14 0:00 | \_ grep 11550
[14:27:53] Failed: Output of ps aux (apt lock)
/var/lib/apt/lists/lock:root 14734 0.0 0.4 46288 8336 ? S Sep26 6:04 | \_ apt-get updateroot 26262 0.0 0.0 12780 984 ? S 14:27 0:00 | \_ grep 14734
第三方源列表
18% 的升级失败是由于 /etc/apt/sources.list.d/ 目录下的第三方源列表造成的。为了确保顺利升级,3CX 必须尽量减少第三方资源库或软件包破坏进程的可能性。这就是为什么我们只允许少量的、经过我们团队测试的第三方源列表。这意味着,当升级脚本检测到任何允许之外的源列表时,它将中止升级而不做任何改变。
确定要删除的第三方来源名单
与上面描述的 APT 问题类似,识别任何干扰升级的第三方源列表是很容易的。如果发送到你的电子邮件的日志包含与下面类似的条目,那么你就有需要(重新)移动的第三方源列表,以便升级脚本继续进行。
- 准备工作:发现一个不常见的源列表 /etc/apt/sources.list.d/: 3xcpbx.list
- 准备工作:发现一个不常见的源列表 /etc/apt/sources.list.d/: 3cxpbx.listecho
- 准备工作:发现一个不常见的源列表 /etc/apt/sources.list.d/: hetzner-mirror.list
在上面的例子中,你可以看到三个源列表,hetzner-mirror.list 和两个看起来像 3CX 的但拼写错误的(3xcpbx.list,3cxpbx.listecho)。这将导致升级中止。
允许的源地址
- google-cloud.list
- google-cloud-sdk.list
- backports.list gce_sdk.list
- 3cxpbx.list
- 3cxpbx-testing.list
- rasp.list
- digitalocean-agent.list
- google_osconfig_managed.list
- google-cloud-monitoring.list
- google-cloud-logging.list
- droplet-agent.list
确保 /etc/apt/sources.list.d/ 下的任何文件都包含在上述列表中。
我的系统不属于上述问题
所描述的两个问题占所有中止升级的 84%,并且不会以任何方式影响正在运行的系统,因为升级脚本在做出任何改变之前就已经退出了。如果你的系统属于剩下的 16%,请参考本文档。
常用建议
- 安排在工作时间之外进行升级
- 在升级(任何软件)之前,你应该始终对你的虚拟机以及 3CX 进行完整的备份(存储在机器之外)。
- 确保系统有足够的资源(特别是内存和磁盘空间)。
- 如果你要部署到一台新的机器上,确保在恢复备份之前关闭旧的机器,否则你会出现 FQDN DNS 问题(在新旧服务器之间不断切换)。