上个星期下载的文件,你双击一下,连接成功,习惯就留了下来:每当 VPN 断开,你就把同一个文件再运行一次。眼前什么都没坏,所以这种做法一直存在。你实际上是在把应用覆盖安装到它自己身上,然后再从安装程序的末尾把它打开。

安装程序结束后,程序住在磁盘上的另一个位置,有自己的图标、自己的设置和自己的后台服务。下载只是投递方式,把它留着完全没问题,但它不是你用来连接的东西。

下载究竟在磁盘上放了什么

.run 文件是一种命名惯例,不是文件类型。它可能是 shell 脚本、自解压归档、编译好的二进制文件,也可能是运行时自行决定成为其中哪一种的东西。后缀不会告诉你它是谁发布的,也不会告诉你该不该信任它,所以安装说明总是从可信渠道获取文件开始,而不是从一条命令开始。

对于以这种方式交付的供应商,安装程序会解开自己的载荷,写入应用及其配套文件,并在桌面环境中登记它需要的东西。完成后,真正值得关注的是应用二进制、一个桌面项,以及应用通常会启动的服务。这些没有一个是下载下来的那个文件。看看安装程序在最后输出里提到的目录,你会立刻明白差别。

反复运行它还掩盖了诊断信息。如果完全重装后应用能打开,但从菜单却打不开,你学不到究竟是缺了哪一部分,因为安装程序把所有部分都重建了。

只安装一次,用供应商自己的调用方式

严格照文档中的调用执行,包括它指定的解释器。对 PIA 的 Linux 客户端来说,指南通过 sh 调用安装程序,所以命令的形式是解释器后面跟着你真正下载的文件。

sh ./pia-linux-VERSION.run

VERSION 是你所取版本的占位符,不是建议你去寻找某个具体编号。请把这条命令当作有系统级后果的代码执行,因为它确实如此:它不是检查文件的方法,运行两次也不会教给你第一次没教的东西。

同一份指南里有一个细节容易被跳过,值得重申:不要在安装程序前面加 sudo。它会自己请求所需的行政授权,而把它包进 root shell 会改变安装落到哪个用户的环境里。同样的道理,「让每个下载都变成可执行再运行它」不是通用规则;请解释器读取脚本和直接执行文件是两种不同操作,失败方式也不同。

安装程序结束后,供应商会说明如何通过刚安装的应用登录并连接。以后每次连接都属于那里。如果你还在输入安装程序的路径来上网,那你已经不知不觉把安装程序变成了工作流程的一部分。

启动器、商店和托盘是三个不同的地方

应用菜单、软件商店目录和托盘区域是由不同组件维护的独立界面,安装程序可以填充其中一个而不碰其他。独立安装程序通常会写一个桌面项,那只是启动器集成,仅此而已。它不会让应用变成商店托管的安装,也不保证托盘图标。

托盘指示器需要双方支持:正在运行的应用必须导出它,桌面必须为它提供宿主。在移除了传统托盘的桌面上,期待指示器的应用可以运行得很好却什么都不显示,这是集成缺口,而不是安装失败。报告桌面版本和应用版本,才能让这个缺口变得可处理。

所以当应用打开却没有图标时,不要重装。检查是否有进程在运行、窗口是否藏在后台启动之后,以及桌面是否支持这类指示器。在没有托盘宿主的桌面上缺少指示器是预期行为,不是故障。第五次重装同一个下载,只会刷新本来就已经能用的东西。

记录安装的归属

写下哪个渠道安装了应用、哪个组件更新它、什么会移除它。这三个答案通常不是同一个程序,而一台没人知道这些的机器,就是两份 VPN 客户端最终争夺同一条路由的机器。

删掉下载的安装程序并不是卸载任何东西,关掉窗口也不一定会停止它安装的服务或阻止策略。清理之前,先弄清楚登录时运行什么、重启后留下什么。

安装程序完成使命后,把它放进你记得住的文件夹,别再把它当成应用。下次隧道出问题时,从已安装的应用开始,让下载只是你安装那天的遗留物。上面描述的调用和首次启动步骤,可以参考 PIA Linux 安装指南。

相关文章