CoreELEC中Google Drive插件不全局代理的解决方法

2020-07-15

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网站)

编译自己的Chromium (win10)

使用DockerHub自动构建arm架构Image