Preface

树莓派的初始化

树莓派的系统直接使用官方提供的Raspberry Pi OS(powered by Debian 12)。

此处遇到一个小问题,即使用Raspberry Pi Imager对系统进行定制时,写入的Wi-Fi配置无效。暂时不清楚这是笔者的配置问题还是Raspberry Pi Imager的bug。解决方案也很简单,树莓派开机后使用有线网络登录并激活Wi-Fi即可。

由于Raspberry Pi OS使用NetworkManager作为默认的网络管理工具,因此完全不需要使用iwiwlist以及wpa_cli等命令,也不需要手工编写wpa_supplicant.conf以激活Wi-Fi连接。直接使用NetworkManager提供的命令行工具nmtui即可方便的添加Wi-Fi配置。

激活Wi-Fi后,在自己的路由器中为树莓派设置静态IP绑定。鉴于IPv6的兼容性,这里依然选择使用IPv4。笔者使用小米的家用路由器,因此局域网段为192.168.31.0/24。树莓派分配的IP地址为192.168.31.23。在路由器中配置静态IP绑定的方式,相比在Raspberry Pi OS配置IP地址更为方便灵活。

激活网络后,可以更换系统的软件源,以期取得更快的软件下载安装速度。对应Raspberry Pi OS而言,因为它是Debian的衍生版本,因此可以直接使用Debian的软件源;同时,对于树莓派特有的软件,需要单独替换/etc/apt/sources.list.d/raspi.list。这里使用清华大学Tuna协会提供的软件镜像,具体参考:

安装docker

Docker CE的安装也参考了清华大学Tuna协会的帮助

以下操作均需使用特权(普通用户配合sudo命令)。

笔者采用自动方式安装,执行以下命令即可将Docker CE的下载地址以及软件源地址修改为清华大学开源软件镜像站,并进行无人值守自动安装:

DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" curl -fsSL https://get.docker.com/ | sudo -Esh

等待安装完成后,编辑/etc/docker/daemon.json,将如下内容写入。该部分是限制docker生成的日志文件的大小。笔者使用SD卡作为树莓派的硬盘,因此希望尽量减少写入以延长SD卡的寿命。

{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "1"
}
}

此外,默认情况下,普通用户无法执行docker的相关命令,如有需要可以按以下步骤,授权普通用户执行docker命令。

sudo gpasswd -a $USER docker         # 1. 将用户添加到`docker`用户组
sudo chmod a+rw /var/run/docker.sock # 2. 使docker.sock可以被用户组成员读写
# sudo systemctl restart docker # 3. 重启docker服务使改动生效

完成以上操作后,重启docker服务使改动生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

配置Meta Kernel(代理核心)

主要参考示例配置

在家目录下创建文件~/mihomo/data/config.yaml,注意文件的后缀必须是yaml而非yml。将示例配置拷贝到该文件中,并进行以下定制。

proxy-providers字段进行如下的改动,以<>包裹的字段要根据实际情况替换:

proxy-providers:
<name>:
<<: *p
url: "<url>" # proxy订阅链接
path: ./profiles/<name> # 下载的配置文件的路径,~/mihomo/data/profiles/<name>
interval: 86400 # 每天自动更新
type: http
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300

使用MetaCubeXD作为Meta Kernel的外部控制器(图形前端)。添加或者修改以下字段以启用外部控制器:

external-controller: 192.168.31.0:9090 # 允许局域网内的设备访问
external-ui: ui # ui资源文件的路径,~/mihomo/data/ui
secret: "" # optional,访问metacubexd时提供的“密码”

secret字段相当于访问密码,如不需要可以置空或者删除该字段。

Meta Kernel in docker

MetaCubeXD提供了一种在docker内运行Meta Kernal和MetaCubeXD的方法。

创建~/mihomo/docker-compose.yml,写入以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3'

services:
metacubexd:
container_name: metacubexd
image: ghcr.io/metacubex/metacubexd
restart: always # 随系统启动
ports:
- '80:80' # 将docker内的80端口映射到host的80端口

meta:
container_name: meta
image: docker.io/metacubex/mihomo:Alpha
restart: always
network_mode: host
cap_add:
- NET_ADMIN
volumes:
- ./data:/root/.config/mihomo

Meta Kernel的默认配置目录是/root/.config/mihomo/,因此笔者将主机下的~/mihomo/data/目录整体挂载过去,即可使上一步编写的config.yaml生效。

切换到~/mihomo/目录,使用以下命令即可启动docker:

docker compose up -d

此时即可在浏览器中访问树莓派的IP地址192.168.31.23,访问MetaCubeXD了。在MetaCubeXD中选择自己订阅的代理即可。

可以使用以下命令更新、重启这两个docker服务(需要进入~/mihomo目录):

docker compose kill    # 停止meta dockers服务
docker compose rm # 删除meta dockers服务
docker compose restart # 重启meta dockers服务
docker compose pull && docker compose up -d # 更新并重启

如需排查问题,可以使用以下命令进入meta docker:

docker exec -it meta sh # meta docker仅提供sh终端

Meta Kernel on Windows

TO BE FINISHED…