CoreELEC是专用于晶晨SOC的基于KODI定制的Linux发行版,职业高清播放器系统。然而对比桌面版KODI还是有不少坑点,尤其是想要用高性能盒子做all-in-one方案的时候。耗费了数小时才跳出这个代理的大坑。
现在不少人的Google Drive团队盘里都有几十T的片库,为了让家庭影院物尽其用就有了这次折腾。
Bug描述
设备:S922X 盒子
Repro:在设置好了CoreELEC里的socks5代理之后,Google Drive Add-on在认证账号之后无法获取账号信息。
背景
在插件中心中安装Docker,并运行v2ray代理。
解决方案
尝试一(失败)
首先考虑直接在本机运行一个openwrt的docker镜像当软路由用。根据之前N1的经验,kanshudj/n1-openwrtgateway:r20
这个docker镜像是在ARM上成功率最高的。一通设置之后代理就是跑不起来,更换了数个openwrt image之后还是报同样的错误。
然后在github上找到插件报错的源代码,应该是CoreELEC的内核精简导致iptables里功能不全。如果要修复这个问题就需要找到缺失的部分并重新编译CoreELEC。
没有时间精力,放弃。
尝试二(成功)
转而研究GD插件的代码,看看为什么插件不会走代理。插件的Github在此。
一番研究之后发现这是因为它直接用两个urllib2进行网络访问。本来打算给插件加一个代理配置项,在查询urllib2的代理参数时发现它会默认读取环境变量中的*_PROXY
来进行代理设置。于是乎转而研究如何给插件加上环境变量。
又进行一番研究以后发现在/storage/.kodi/addons/plugin.googledrive
下建立profile.d
文件夹,里面的所有*.profile
都会被拿出来当作shell执行一番。所以在里面设置好代理就完事啦。
注意v2ray只支持原生http协议,并不支持原生https代理(但并不意味着这种代理模式只能访问http网站)