解决UC-CK无法apt升级unifi软件包版本问题

问题

公司的一个办公区使用了UniFi Cloud Key UC-CK,一款比较老的Ubnt控制器。最近发现其unifi软件一直无法正常升级。这如何解决呢?

排查

使用ssh登录到root帐号,发现这个UC-CK其实使用的是基于debian jessie的armhf的发行版。那不出意外,它添加了一个ubnt自己的apt源,来获取和更新unifi软件包。通过查找,发现/etc/apt/sources.list.d目录下有一个ubnt-unifi.list文件,其内容如下

然后尝试通过apt update更新,一直报错。手工尝试下载后发现,其实是因为跳转到的最终资源域名的ssl证书验证无法通过,并且网站要求使用TLS1.2,所以如此看来,只要解决https下载的问题就可以解决。

方案选取

问题知道了,使用什么方案来解决呢?

目前看来,有两条路可以选择

  • 让Debian jessie支持TLS1.2并更新根证书
  • 自制一个不跳转HTTPS的中转源站

第一条路,最为彻底,但是投入较高。Debian jessie已经很老了,更新根证书相对还好说,把对应新的证书的deb包强行安装上就可以。但是TLS1.2的支持就会困难很多。鉴于debian的openssl是系统的依赖库,如果一路更换的话,会牵扯到很多依赖的问题,这不是一个成本低的路线。

第二条路,看起来更可行。我们完全可以搭建一个HTTPS转HTTP的代理,让UC-CK来访问代理服务器来解决问题

方案部署

这里找了一台Ubuntu 22.04的Linux服务器作为中转机器。首先需要一个nginx环境。由于这个机器已经装了nginx,并存在已有的服务,所以这里就不额外安装了,而是打算添加一个新的配置文件,通过80端口的host来进行转发。配置文件如下

配置文件的核心逻辑就是进行HTTP转发,并跟随30x的跳转。配置文件准备好后,reload一下nginx服务使配置生效。

然后在UC-CK中修改hosts文件,将www.ubnt.com指向服务器IP。

解决

全部配置修改完成后,尝试重新apt update操作,发现成功提示存在可更新的软件包,列出后发现是unifi的新版本。操作apt upgrade即成功更新unifi服务。至此,UC-CK可以成功正常升级了

发表评论

为防机器,验证码请直接输入4个数字1

*