linux版本EasyConnect一键修复shell脚本

linux版本EasyConnect一键修复shell脚本

背景

主力系统换到manjaro有一段时间了,暑假在家想访问学校内网的资源,结果学校限定的linux版本EasyConnect (v7.6.3)装完没法直接使用。呔!

折腾

搜了一下得到两个比较有用的链接。

一个是如何在Manjaro Linux优雅地使用EasyConnect,照着做了但是最后一步连接成功概率是玄学。 另一个是Docker版本,但是想水个98还要专门开docker也太麻烦了,pass。 不过发现虽然我不想用Docker版本,但是它的文档里写了解决方法,亲测有效。

为了避免每次运行都要打开终端,我把进行的修改和每次启动EasyConnect需要执行的命令都写成了脚本,最后可以直接在启动器启动EasyConnect并且正常运行。耶!

使用

第一步:安装EasyConnect

正常安装你的学校/公司/组织对应版本的EasyConnect并尝试启动

如果能够正常使用,那无需执行本项目。

如果你遇到:启动后没有出现界面/尝试连接一段时间后闪退 等现象,则本项目可能有所帮助。

我以v7.6.3版本为基准编写的本项目,供参考

(安装后版本可在 /usr/share/sangfor/EasyConnect/resources/conf/version.xml中查看)

第二步:安装补丁

执行前确保已经安装了git和bash。

之后在合适位置终端执行如下操作:

1
2
3
git clone https://github.com/du33169/EasyConnect-linux-fix.git
cd EasyConnect-linux-fix
bash ./EasyConnect-fix.sh

对于中国大陆用户,也可使用gitee上的镜像:

1
2
3
git clone https://gitee.com/du33169/EasyConnect-linux-fix.git
cd EasyConnect-linux-fix
bash ./EasyConnect-fix.sh

运行时会要求输入sudo密码(终端不会显示,输入后回车),该密码用于获取root权限,将会用且仅用于:

  • 复制文件到EasyConnect安装目录
  • 访问和修改EasyConnect启动器.desktop文件
  • 提供EasyMonitor等程序需要的权限

安全警告:询问用户得到的sudo密码以明文写入/usr/share/sangfor/EasyConnect/RunEasyConnect.sh以避免每次启动EasyConnect时终端询问密码。如果有安全需求请谨慎使用。或者有什么好的解决方法可以给我提issue。

第三步:运行EasyConnect

完成后可正常使用启动器快捷方式启动EasyConnect。

卸载

如果需要卸载补丁,可使用uninstall参数执行安装脚本:

1
bash ./EasyConnect-fix.sh uninstall

原理

以下为该fix项目的原理。如果脚本在你的发行版无法正常工作,可以参考这部分原理并手动操作。

(EasyConnect-linux的安装位置固定为 /usr/share/sangfor/EasyConnect

第一步:解决依赖问题

根据DotIN13这篇博客,EasyConnect正常运行需要libpangolibpangocairolibpangoft软件包的1.0版本,与系统安装的版本不符。通过下载软件包并将其中中EasyConnect需要的运行库data.tar.xz/usr/lib/x86_64-linux-gnu/*.so.0.4200.3以及*.so.0提取,并直接复制到EasyConnect的安装目录下即可解决依赖问题(复制操作需要权限)。

需要指出的是,其中的*.so.0.4200.3文件是真正的运行库,而同名的*.so.0则是指向对应运行库的软链接。在本项目中,需要的动态库已经位于patch目录下。

考虑到软链接在压缩、git拉取等操作时很容易失效,并且指向的只是同一目录下的库文件,本项目附带的patch目录中直接将各个*.so.0.4200.3重命名为对应*.so.0。这样就不需要使用软链接。

第二步:解决sslservice启动问题

DotIN13文章中通过定时启动服务的方式经过实践很难把握时机,Hagb的这篇笔记指出ECAgent.log中出现 cms client connect failed时为一个关键时刻。此时启动sslservice(/usr/share/sangfor/EasyConnect/resources/shell/sslservice.sh)即可正常连接。

patch中的RunEasyConnect.sh即解决上述问题的辅助启动脚本,以该脚本代替 /usr/share/sangfor/EasyConnect/EasyConnect可执行文件即可正常启动。

关于最后while循环的笔记:经过实验sslservice只需启动一次,无需重复;但RunEasyConnect.sh在启动ssl服务后需要等待EasyConnect主进程结束,否则会造成闪退。常用的wait命令未起效果,此处暂时采用while循环检测EasyConnect进程并sleep的方法。

第三步:修改.desktop文件

EasyConnect的启动器文件安装至 /usr/share/applications/EasyConnect.desktop,为了简化启动EasyConnect时的操作,fix脚本修改该文件并将执行前述辅助启动脚本的命令写入(修改操作需要权限),这样就可在启动器以常规方式启动EasyConnect,无需终端运行脚本。

项目地址

声明

  • 本项目在DotIN13Hagb得到的结果基础上进行简单的整理和自动化得到,特此鸣谢。
  • 本项目为第三方补丁,与EasyConnect及Sangfor官方无关。
0%