树莓派上的科学上网

树莓派上不论是raspbian的安装/更新,还是conda/pip的安装/更新,都因为科学原因不太稳定,因此可以先准备科学安装/更新环境。


1 系统安装及配置(废弃)

1.1 换国内镜像源

解决升级慢或 Cannot initiate the connection to mirrors.opencas.cn 问题(ps.使用 nano 是因为用 vi 会有 bug 输入很麻烦):

1
sudo nano /etc/apt/sources.list

修改 sources.list,注释第一行,在最后添加国内镜像站:

1
2
deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ stretch main non-free contrib

同样的:

1
sudo nano /etc/apt/sources.list.d/raspi.list

修改 raspi.list,注释第一行,在最后添加:

1
deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main ui

也可以使用其他镜像站,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 中国科学技术大学
Raspbian http://mirrors.ustc.edu.cn/raspbian/raspbian/
# 阿里云
Raspbian http://mirrors.aliyun.com/raspbian/raspbian/
# 清华大学
Raspbian http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/
# 华中科技大学
Raspbian http://mirrors.hustunique.com/raspbian/raspbian/
Arch Linux ARM http://mirrors.hustunique.com/archlinuxarm/
# 华南农业大学(华南用户)
Raspbian http://mirrors.scau.edu.cn/raspbian/
# 大连东软信息学院源(北方用户)
Raspbian http://mirrors.neusoft.edu.cn/raspbian/raspbian/
# 重庆大学源(中西部用户)
Raspbian http://mirrors.cqu.edu.cn/Raspbian/raspbian/
# 中山大学 已跳转至中国科学技术大学源
Raspbian http://mirror.sysu.edu.cn/raspbian/raspbian/
# 新加坡国立大学
Raspbian http://mirror.nus.edu.sg/raspbian/raspbian

固件升级,谨慎操作,可能会踩到奇怪的编译坑

1
sudo rpi-update && sudo reboot -h now

软件包升级:

1
sudo apt-get update && time sudo apt-get upgrade && time sudo apt-get dist-upgrade

软件包清理,顺便装个 vim:

1
2
sudo apt-get clean
sudo apt-get install -y vim

解决树莓派的 locale 警告:

1
sudo dpkg-reconfigure locales

选择生成 en_GB.UTF-8en_US.UTF-8zh_CN.UTF-8

为空项设置值:

1
2
sudo update-locale LANGUAGE="en_GB.UTF-8"
sudo update-locale LC_ALL="en_GB.UTF-8"

2 搭建科学工具(废弃)

2.1 安装 SS

安装 shadowsocks 命令行客户端:

1
2
3
4
5
6
7
pip install shadowsocks
sudo apt-get install -y shadowsocks-libev
# 更新 CPAN
sudo cpan install CPAN
# 重载 CPAN
sudo cpan reload CPAN
sudo cpan Net::Shadowsocks

后续:因为树莓派无法安装 python3,遂放弃,转而使用 electron-ssr,但因为作者已经删除了这个项目,所以找了当时备份下来的版本。

electron-ssr-backup(失败,弃用,内核不支持)


现在,让我们重新回到步骤2上,开始修改步骤2。

2.1 使用 虚拟环境 安装 Python 包

我创建了一个虚拟环境,然后在其中安装 Shadowsocks。这种方式不会影响系统的全局 Python 环境。

  1. 创建一个虚拟环境
1
python3 -m venv shadowsocks-venv
  1. 激活虚拟环境
1
source shadowsocks-venv/bin/activate

在虚拟环境中,你会看到命令行提示符变成 (shadowsocks-venv),这意味着你已经进入了虚拟环境。

  1. 安装 Shadowsocks
1
2
3
4
5
6
7
8
pip install shadowsocks
# 安装 shadowsocks-libev(耐心等待)
sudo apt-get install -y shadowsocks-libev
# 更新 CPAN
sudo cpan install CPAN
# 重载 CPAN
sudo cpan reload CPAN
sudo cpan Net::Shadowsocks

结果这些都不行。


3 真正的解决方法?(建议看完~不然你会后悔)

在经历了6小时的折磨:

  • twitch挂掉宝→
  • 寻思能不能自动挂→
  • 找到自动挂/mnt/Twitch.Drops.Miner-aarch64.AppImage又寻思能不能扔到服务器上关电脑也能挂→
  • 因为没可视化界面服务器想到了树莓派→
  • 用了张新 sd 卡给树莓派刷了个带可视化界面的 linux 系统→
  • 把掉宝程序弄上树莓派,自动掉宝要翻墙→
  • 所有 linux 翻墙软件都不符合树莓派的内核→
  • 研究半天决定用 linux 虚拟环境的 python3 进行 ss 的安装→
  • ss 不支持 py3.10 后版本→
  • 前面版本 py 树莓派会报错 [微笑]→
  • 另寻途径决定用软路由翻墙再开放网络给树莓派连接达到直接翻墙→
  • 以前手贱关了软路由无线结果无线接口直接没了→
  • 找了半天,刷机要 u 盘启动,卖家已经跑路,我刷他的母牛→
  • 最后想到电脑用 clash 共享端口通过同一局域网达到翻墙效果→
  • 翻墙成功后发现在挂掉宝在获取 cookie 时要弹 chrome,结果树莓派性能垃圾到弹 chrome 直接爆内存(我艹啊)→
  • 最后还是原方案用电脑挂

之后,我终于找到了最终的解决方案,那就是 clash verge rev。

首先,我再确定了一遍我这个树莓派 zero2w 的内核:

1
uname -m

输出的是:

1
aarch64

这就确定了我的 树莓派 Zero 2 W 正在运行 64 位操作系统aarch64 = ARM64)。

然后我选择的是 Clash Verge Rev v2.3.1,因为只有这个版本的 ARM64 能够下载并且是最新的,至于下载的是 GUI 版本会更占内存我已经没办法再留意了,因为我真的心态快崩了…

因为树莓派无法翻墙,所以我是本机下载完后用 xftp 8 传输到树莓派的。

然后 cd 到目录下:

1
sudo apt install ./Clash.Verge_2.3.1_arm64.deb

这条命令会自动处理依赖关系,并安装软件。

完成后在 VNC 里直接点击打开:

image-20250829175837407

配置成功后点击 system proxy 按钮即可成功翻墙(不容易)

期间,因为考虑到 zero2w 内存比较小,所以调整了一下 swap 分区由 512MB 调整为 1G:

1
sudo nano /etc/dphys-swapfile

树莓派默认的 Swap 参数为 100M,将 CONF_SWAPSIZE=100 改为:

1
CONF_SWAPSIZE=1024

Ctrl + O 修改,然后 Ctrl + X 退出。

接着重启 swapfile 服务来让他生效:

1
2
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

也可以直接使用 systemctl 命令来重启 dphys-swapfile 服务(其实最后我都是直接死机然后断电重启的= =):

1
sudo systemctl restart dphys-swapfile

接着用 free 命令来查看 swap 交换文件大小是否改变生效:

1
free -m

此时看到的内存及 swap 信息如下:

1
2
3
               total        used        free      shared  buff/cache   available
Mem: 416 210 99 1 159 205
Swap: 1023 215 808

但还是卡到生活无法自拔,遂还是放弃(别打我,但也还是能作为vnc桌面端的vpn)。

ps. 如果设置了开机自启 clash verge,记得使用 ls ~/.config/autostart/ 查看桌面环境、图形界面的开机自启程序,然后删掉:

1
rm ~/.config/autostart/'Clash Verge.desktop'

4 真正的解决方法(这是真的!没有欺骗了!)

突然发现了这个项目: https://github.com/wnlen/clash-for-linux

使用的是 Clash 内核 + WebUI(yacd),没有 Electron GUI,占用内存少,更适合树莓派 zero2w 这种辣鸡设备(

⚙️ 使用步骤(针对树莓派 Zero 2 W)

  1. 下载项目
1
2
git clone https://github.com/wnlen/clash-for-linux.git #这里我选择的是下载完后用xftp 8传到里面直接使用
cd clash-for-linux
  1. 配置环境变量
1
sudo nano .env
  • 修改 CLASH_URL 为你的 Clash 订阅地址
  • CLASH_SECRET 可留空,脚本会自动生成
  1. 启动服务
1
sudo bash start.sh

输出示例:

1
2
Clash Dashboard 访问地址:http://<ip>:9090/ui
Secret:xxxxxxxxxxxxx
  1. 加载环境变量 / 开启系统代理
1
2
3
source /etc/profile.d/clash.sh
proxy_on # 开启系统代理
proxy_off # 关闭系统代理
  1. 登陆网页 http://<树莓派ip>:9090/ui
  • 在 API Base URL 一栏中输入: http://<ip>:9090
  • 在 Secret(optional) 一栏中输入启动成功后输出的 Secret
  • 点击 Add 并选择刚刚输入的管理界面地址,之后便可在浏览器上进行一些配置

image-20250830021847115

  1. 重启 / 停止服务(可选)
1
2
3
4
# 重启
sudo bash restart.sh
# 停止
sudo bash shutdown.sh

很简单,也很快,以至于我有点不敢相信

image-20250830015313487

然而,不出意外的话意外出现了,我配置好的订阅链接他显示已经加载成功却一条都没有(开始头疼了),于是我开始排查。

最后发现是我订阅链接出问题了导致无法使用,于是我重新创建了 .env,替换了原来的链接,重新 sudo bash start.sh,结果终于可以了。

image-20250830022709272

最后使用 wget www.google.com 命令进行测试,至于为什么不使用 ping 命令,那是因为 ping 走网络层 icmp 协议,普通模式下不会给你代理这个报文。

image-20250830022836806

这样便是成功,至此,我们终于成功让这个小歇佬 zero2w 成功翻墙了(撒花庆祝~)。


后续优化

  1. 因为我的自动掉宝需要登录浏览器获取账号token,但是zero2w这小赤佬内存少到根本跑不动chrome或者firefox,而之前的swap增加临时分区不知道为什么到2G就无法继续增加。

    image-20250830044324703

    就算打开了也卡死……

    所以我找到这位大佬的csdn blog-利用zram-swap使树莓派ZERO 2W性能提升,打算通过zram-swap来改善内存性能问题。

    由于我们已经翻墙成功了,所以不需要像他里面写的本地移植,按照zram-swap官方文档方案安装即可

    1
    2
    git clone https://github.com/foundObjects/zram-swap.git
    cd zram-swap && sudo ./install.sh

    安装脚本会在安装完成后自动启动 zram-swap.service,并在启动过程中启用 systemd 服务。默认分配会创建一个 lz4 格式的 zram 设备,当内存完全填满时,该设备应该会占用大约一半的物理内存。

    1
    2
    3
    4
    5
    6
    7
    sudo cat /proc/swaps

    ##查看是否安装成功
    ##如果正常的话就会出现
    Filename Type Size Used Priority
    /var/swap file 2097148 171408 -2
    /dev/zram0 partition 533548 0 15

    把spaw分区改大一点,我改成6G。

    1
    2
    3
    4
    5
    sudo nano /etc/default/zram-swap
    #找得这条并取消注释,改成6G
    _zram_fixedsize="6G"
    #保存后重新启动zram-swap
    sudo systemctl restart zram-swap.service

    使用swapon --show或者sudo cat /proc/swaps命令查看是否修改成功。

    1
    2
    3
    4
    wlf@raspberrypi:~/zram-swap $ swapon --show
    NAME TYPE SIZE USED PRIO
    /var/swap file 2G 221.6M -2
    /dev/zram0 partition 6G 0B 15

    现在,像博客里所说的,启动chrome应该快很多了吧。。。。。。个屁,辣鸡zero2w给我吃屁去吧!

    至此,完整的心路历程出来了

    • twitch挂掉宝→

    • 寻思能不能自动挂→

    • 找到自动挂/mnt/Twitch.Drops.Miner-aarch64.AppImage又寻思能不能扔到服务器上关电脑也能挂→

    • 因为没可视化界面服务器想到了树莓派→

    • 用了张新 sd 卡给树莓派刷了个带可视化界面的 linux 系统→

    • 把掉宝程序弄上树莓派,自动掉宝要翻墙→

    • 所有 linux 翻墙软件都不符合树莓派的内核→

    • 研究半天决定用 linux 虚拟环境的 python3 进行 ss 的安装→

    • ss 不支持 py3.10 后版本→

    • 前面版本 py 树莓派会报错 [微笑]→

    • 另寻途径决定用软路由翻墙再开放网络给树莓派连接达到直接翻墙→

    • 以前手贱关了软路由无线结果无线接口直接没了→

    • 找了半天,刷机要 u 盘启动,卖家已经跑路,我刷他的母牛→

    • 最后想到电脑用 clash 共享端口通过同一局域网达到翻墙效果→

    • 翻墙成功后发现在挂掉宝在获取 cookie 时要弹 chrome,结果树莓派性能垃圾到弹 chrome 直接爆内存(我艹啊)→

    • 最后还是原方案用电脑挂→

    • 又不服气,找到了clash verge,开始尝试→

    • clash verge规则不匹配原clash,开始手动修改规则并且使用自搭的短链接文本发布后导入→

    • 发现树莓派zero2w的内存和性能太垃圾,无法跑动clash verge这种gui桌面端应用→

    • 找到了内核级应用clash-for-linux,终于成功跑动并且成功翻墙→

    • 结果尝试掉宝软件时,发现内存太少浏览器弹不出→

    • 开始优化系统和内存调配,使用zarm-swap进行调配→

    • 各种优化后发现,该打不开的chrome还是打不开,该死机的还是死机,终于是心灰意冷选择放弃,折腾了这么多,唯一的收获就是这篇blog……

    完结。END。愿天堂没有树莓派zero系列。阿门