蓝灯(lantern)在无界面的linux下运行的时候,会遇到一个错误:
error while loading shared libraries: libappindicator3.so.1: cannot open shared object file: No such file or directory
错误原因是蓝灯运行需要加载一个系统托盘的类,这个类的作用就是出现一个最小化的图标,图标虽小,还是调用了ui的类库,因此,没有桌面是没办法运行蓝灯的。特别注意,诸如:
apt-get install libappindicator3-1
的解决办法对不想要桌面的用户是没有毛线用处的。因为你不得不为了这个类库,再安装一大堆桌面依赖类库,甚至不小心把桌面系统安上了。
说实话,这个类应当是可以选择加载的。比如:
lantern -headless
确实,这样运行蓝灯就不会加载那个托盘了。但坑爹的地方在于,从源码可以看出,蓝灯运行的时候只是根据headless决定是否显示界面,而非是否加载界面。真心想不明白,加载界面不显示,为什么蓝灯要捂着耳朵盗铃,闭上眼睛就说界面没有了。
因此,解决方案是,编译的时候就不要那个托盘小界面。这里:
HEADLESS=true make linux
这个编译可以说是漫长而且痛苦的,各种依赖类库安装一大堆,索性丢到docker里面去编译:
HEADLESS=true make docker-linux
为了支持docker,配置go。坑爹的是vps不支持。因为docker需要创建虚拟网卡。只能拉到本地编译。下面是我编译好的linux server版本:
校验码(sha512):
c86ef16d17aee3cf9aed6c175c597426991c6b3fec6bc4944bfc5dfe4ef115f2d21a3ee8dbee75be2a06d20e7e8411d1b5a081016d5c77330613642294305146 lantern_linux_386_server
491e6c28ff1a1de5baee7139ebdae5cfcb06327d4a586e9404632adcfdf83fd19e2a08177800482df6c618e745b7b811ad8fe92e256a50901c9702936c2b8dc3 lantern_linux_amd64_server
幸好生在个开源的世界,看看源码,或许能够彻底的解决问题 :)