N1盒子CoreELEC+旁路由

目录

前情提要

上一篇文章中刷了YYF固件(Android),安装Kodi用于看片,安装Entware环境用于PT挂机和媒体服务器。经评论区提醒Android下的Kodi画质不如CoreELEC下的,而且CoreELEC是纯精简版Linux,相比Android没有中间商赚取差价,效率更高。只是装不了Android APP了,影响不大,遂折腾。

至于旁路由,能够更充分的利用N1,主要功能是科学和屏蔽广告,因为是OpenWrt要再加点什么功能也比较方便。

CoreELEC

CoreELEC是一个专为Kodi打造的精简LInux发行版,据说是专门优化的,播放效果和兼容性比Android上的Kodi好很多,还具有一些影音方面的高级功能,比较适合影视爱好者。

写入U盘

首先N1需要降级才能用各种固件,这部分请参考别的文章。

CoreELEC镜像使用恩山论坛 M大的版本 ,已经对N1做好了适配,目前更新到 9.2 。为了后面使用OpenWrt,需要安装 9.0.2 版(因为需要更新内核,只找到 9.0.19.0.2 有适配的新内核)

首先通过Etcher写入镜像到u盘,N1插上U盘重启,默认就会引导U盘内的系统,第一次启动可能时间长一些。


这时候需要一个鼠标,启动后要关闭自动更新(因为固件是修改适配N1的,更新官方的就开不出来了),进行语言、网络等设置。

具体使用和App版的Kodi并没有区别。

写入EMMC

另一种方式是写到EMMC(内部存储),这样就替换了原来的Android系统。

ssh root@N1的IP 登陆系统,默认密码“coreelec”。

执行 /flash/installtoemmc 执行写入EMMC的命令。(需要注意的是 9.0.2 以上版本使用 /flash/installtoemmc ,旧版使用 /flash/installtointernal

等执行完成重启并拔掉U盘就可以了。


如果你写到eMMC后,想刷回安卓系统,其实很简单就可以刷回W大的官改固件,只需按照刷官改的方法,准备好usb burning tool,加载固件,点击“开始”刷机,然后ssh登录到CoreELEC系统,执行:reboot update命令,N1会自动重启,然后进入刷机模式,等待刷机完成即可。

Entware

安装非常简单 installentware ,安装完成后重启, opkg update 更新软件源,安装上Transmission等软件就可以实现之前在安卓下的下载机和媒体服务器了(详见前一篇)。

蓝牙遥控问题


如果是同款遥控器,需要用到 这个帖子 的适配文件,复制到 /storage/.kodi/userdata/keymaps/ 路径下,重启N1即可使用。

不过有个Bug,在输入界面会出现自动输入‘i’的情况,导致无法正常输入,不过论坛里的大神已经在帖子下面回复了解决办法。

在系统-插件里面按‘system tools’这个插件,然后SSH登陆。
执行

systemctl stop kodi
systemctl stop eventlircd
evtest

接着 vi ~/.config/hwdb.d/99-iprc1000.hwdb 修改文件为(注意格式,有空格)


#IPRC1000 remote
evdev:input:b*v0A5Cp8502*
  KEYBOARD_KEY_7000c=unknown

然后执行


systemd-hwdb update
udevadm trigger
reboot

重启后就可以正常使用了,不过还有个问题是遥控器蓝牙长时间不用断开后,再次按键需要很久才能连上使用,在Android下没有这个问题。。。

旁路由

替换内核

由于CoreELEC自带内核过于精简,缺少某些功能(IPSET),导致OpenWRT下包括科学等一些插件启动不了,有人做了新的内核,只要简单地替换就可以了。( 这个Docker镜像的说明中 提供了一种不用替换内核添加IPSET功能的办法,尚未尝试)

下载 新的内核 (9.0.2版)

  • 如果是U盘启动,直接替换U盘下 /flash/kernel.img 即可。

  • 如果是EMMC启动,先把文件传到N1,执行 mount -o rw,remount /flash 挂载分区为可写,再替换 /flash/kernel.img

  • 如果已经装了新版本的CoreELEC,并且配置了一堆东西不想重新装旧版(像我一样),也是有办法的。下载恩山论坛 M大帖子 里面的“升级脚本”,没错,升级脚本是可以降级的。。。原理就是替换system分区和内核。然后按照上面写的同样操作就可以了。

    不过降级换内核后,我一连接蓝牙遥控器就卡死,只能用App控制了,不知道是内核的问题还是降级的问题。。。

    Docker 和OpenWRT安装

    Docker是一个容器,有些东西跑一下需要一堆配置,用Docker就可以直接拉取别人做好的镜像,简单设置就可以使用,而且有虚拟化的功能,OpenWRT就是独立安装在这样一个容器下的。

    在CoreELEC下安装比较简单,在Kodi插件-服务程序下可以找到Docker,由于网络原因特别慢,可能需要等上一会儿或是多试几次。

    安装后就可以SSH登陆, docker pull kanshudj/n1-openwrtgateway 抓取镜像(这个镜像还有个R9版本,功能更多),这一步可能也要很长时间,取决于网络。

    开启网卡混杂模式
    ip link set eth0 promisc on

    创建Macvlan复用网卡,用于虚拟主机接入局域网,这里的gateway和subnet根据自己的网段设置
    docker network create -d macvlan –subnet=192.168.2.0/24 –gateway=192.168.2.1 -o parent=eth0 macnet

    创建名为op的OpenWRT容器
    docker run –name op –restart always -d –network macnet –privileged kanshudj/n1-openwrtgateway /sbin/init

    创建成功后,启动容器的bash进行设置
    docker exec -it op /bin/bash

    修改网关IP等信息 vi /etc/config/network

    停用防火墙(之前没有这么操作,客户端一直连不上网)
    /etc/init.d/firewall disable&&/etc/init.d/firewall stop

    重启网络 /etc/init.d/network restart

    exit 退出到CoreELEC环境下后,重启容器 docker restart op

    这时候尝试打开 http://192.168.2.20 (改成自己设置的),出现OpenWRT登陆界面,默认密码是“password”

    客户端设置

    成功配置并运行OpenWRT后,在客户端设置网关和DNS为容器的IP,我设置的是 192.168.2.20 ,如能成功上网,即配置成功。


    旁路由功能

  • 自带插件
    这个固件默认只有DDNS、广告过滤和科学功能,在服务中可以配置启用,这个版本的科学功能只支持“绕过大陆IP”模式,如需要“某list模式”和更多的功能,可以使用 kanshudj/n1-openwrtgateway:r9.10.1 这个镜像。
  • 科学功能使用的PDNSD默认使用OpenDNS,有些域名如“sogou.com”会解析不了,修改成阿里和腾讯的DNS服务器即可。 vi /etc/pdnsd.conf 找到 label = “opendns”; 将下面的ip改成 223.5.5.5, 119.29.29.29

  • 插件安装
    我这里还加了一个解除黄逸云锁定的功能,是用的 这个插件
  • 这个插件依赖 curlnode ,先安装一下 opkg update && opkg install curl && opkg install node

    然后下载插件包
    wget https://github.com/project-openwrt/luci-app-unblockneteasemusic/releases/download/v2.7-1/luci-app-unblockneteasemusic_2.7-1_all.ipk

    安装插件 opkg install luci-app-unblockneteasemusic_2.7-1_all.ipk

    这个插件有个问题就是在Web界面设置的时候不能启动,需要手动执行 /etc/init.d/unblockneteasemusic start 启动。可以在系统-启动项-本地启动脚本中添加这条开机自动执行。

    默认情况下客户端会自动生效,IOS和MAC需要安装 证书 并信任。

    体验

    需要的设备设置网关,出了问题别的设备也能正常使用。和原来一样在局域网中,Homekit等各种服务也能正常使用。
    测试了一下,带宽没什么损失,手机上玩游戏也没有跳ping,延迟和直连路由器差不多,看来N1的性能跑这几个小东西还是绰绰有余。

    还有就是绕过国内IP模式的话,BT/PT的国外流量也会被代理,其他的东西也多多少少会受影响,后面可能会换个其它方式吧。

    参考

    https://post.smzdm.com/p/a25r675q/
    https://zorz.cc/post/n1-docker-openwrt.html
    https://www.right.com.cn/forum/thread-740477-1-1.html
    https://www.gitmemory.com/issue/kob/N1/2/509879330
    https://www.right.com.cn/forum/thread-331363-1-2.html
    https://www.gitmemory.com/issue/kob/N1/2/509879330