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。
之后在合适位置终端执行如下操作:
|
|
对于中国大陆用户,也可使用gitee上的镜像:
|
|
运行时会要求输入sudo密码(终端不会显示,输入后回车),该密码用于获取root权限,将会用且仅用于:
- 复制文件到EasyConnect安装目录
- 访问和修改EasyConnect启动器.desktop文件
- 提供EasyMonitor等程序需要的权限
安全警告:询问用户得到的sudo密码将以明文写入/usr/share/sangfor/EasyConnect/RunEasyConnect.sh以避免每次启动EasyConnect时终端询问密码。如果有安全需求请谨慎使用。或者有什么好的解决方法可以给我提issue。
第三步:运行EasyConnect
完成后可正常使用启动器快捷方式启动EasyConnect。
卸载
如果需要卸载补丁,可使用uninstall参数执行安装脚本:
|
|
原理
以下为该fix项目的原理。如果脚本在你的发行版无法正常工作,可以参考这部分原理并手动操作。
(EasyConnect-linux的安装位置固定为 /usr/share/sangfor/EasyConnect
)
第一步:解决依赖问题
根据DotIN13这篇博客,EasyConnect正常运行需要libpango、libpangocairo、libpangoft软件包的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,无需终端运行脚本。