树莓派上的科学上网
树莓派上不论是raspbian的安装/更新,还是conda/pip的安装/更新,都因为科学原因不太稳定,因此可以先准备科学安装/更新环境。
1 系统安装及配置
1.1 Headless下的WiFi及ssh配置
因为要将树莓派当做网关用,所以用命令行就可以了,下载lite镜像。
按树莓派官方说明在SD卡上写入镜像,然后进行Headless配置:
配置WIFI,需要在SD卡根目录下新建一个名为wpa_supplicant.conf
的文件:
1 | touch /Volumes/boot/wpa_supplicant.conf |
写入WIFI配置:
1 | country=US |
开启SSH,只需在SD卡根目录下新建一个名为ssh的空文件即可:
1 | touch /Volumes/boot/ssh |
配置完成后正常启动树莓派即可自动连接WIFI,SSH可以正常登录。
注:如果不知道设备IP,可以使用ping raspberry.local
查找。
如果这个IP上曾经还有过其他树莓派前辈,那么要先删除本机上的ssh信任主机,比如我的树莓派一直用固定IP配在108上:
1 | ssh-keygen -R 192.168.1.108 |
第一次用pi
登录后默认密码为raspberry
,应使用sudo raspi-config
通过树莓派管理工具修改密码、主机名等信息,或是直接使用passwd
修改密码。
1.2 换国内镜像源
解决升级慢或Cannot initiate the connection to mirrors.opencas.cn
问题:
1 | sudo vi /etc/apt/sources.list |
修改sources.list
,注释第一行,在最后添加国内镜像站:
1 | deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main non-free contrib |
同样的:
1 | sudo vi /etc/apt/sources.list.d/raspi.list |
修改raspi.list
,注释第一行,在最后添加:
1 | deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main ui |
也可以使用其他镜像站,比如:
1 | # 中国科学技术大学 |
固件升级,谨慎操作,可能会踩到奇怪的编译坑:
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 | sudo apt-get clean |
解决树莓派的locale
警告:
1 | sudo dpkg-reconfigure locales |
选择生成en_GB.UTF-8
、en_US.UTF-8
、zh_CN.UTF-8
。
为空项设置值:
1 | sudo update-locale LANGUAGE="en_GB.UTF-8" |
2 搭建科学工具
2.1 安装SS
安装shadowsocks命令行客户端:
1 | pip install shadowsocks |
2.2 配置防火墙
安装UFW以方便调整防火墙策略,其实是我不会用iptables
:
1 | sudo apt-get install ufw |
更新防火墙策略:
1 | sudo ufw allow proto tcp to 0.0.0.0/0 port 22 comment "sshd listen port" |
2.3 socks5代理
在/etc/shadowsocks-libev/xxx.json
下配置科学上网服务器:
1 | { |
检查默认端口占用,通常SS安装完成后会自动使用默认配置(/etc/shadowsocks-libev/config.json
)启动ss-server进程,因此8388
端口通常会被占用。
而我们在树莓派上使用SS仅仅是为了加速,因此不需要启动ss-server:
1 | sudo netstat -nap | grep 8388 |
停止默认ss服务端:
1 | # 检查ss默认系统服务 |
启动ss客户端:
1 | # 后台 |
测试ss客户端的socks5是否正常:
1 | curl -I --socks5 localhost:1080 google.com |
停止ss客户端:
1 | sudo kill -TERM 5914 && rm nohup.out |
编写快捷脚本:
启动脚本ss-s
:
1 | sudo touch /usr/local/bin/ss-s |
1 |
|
停止ss-t
:
1 | sudo touch /usr/local/bin/ss-t |
1 |
|
2.4 proxychains-ng
ProxyChains是一个使用方便的代理工具,它只会代理指定的程序,下载:
1 | git clone https://github.com/rofl0r/proxychains-ng |
安装:
1 | cd proxychains-ng/ |
配置/etc/proxychains.conf
,将最后一行修改为shadowsocks的端口:
1 | socks5 127.0.0.1 1080 |
测试wget
,返回网页源码:
1 | proxychains4 wget -qO- https://www.google.com |
2.5 http代理
有些程序并不像curl
那样能够直接支持socks5代理,有时,按照情况需要配置http代理。
安装privoxy
,开启全局http代理,其默认代理地址为http://127.0.0.1:8118
:
1 | sudo apt-get install privoxy |
测试http代理:
1 | wget -qO- -e use_proxy=yes -e http_proxy=127.0.0.1:8118 http://google.com |
conda
可能存在科学安装问题,因此可以临时设置代理环境变量:
1 | export HTTP_PROXY="http://127.0.0.1:8118" && conda install -y scikit-image |
或是配置.condarc
的代理:
1 | proxy_servers: |
3 云科学(要钱)
3.1 在AWS上部署Streisand
在aws中新建用户administrator
,放入新建组Administrators
,附加超级管理员权限AdministratorAccess
。
新建访问秘钥并下载,记住key id与key后删除秘钥。
aws启动Ubuntu 16.04实例,在安装pip时出现E: Unable to locate package python-pip
:
1 | sudo apt-get install software-properties-common |
软件包升级:sudo apt-get update && time sudo apt-get upgrade && time sudo apt-get dist-upgrade
查看系统地区设置locale
,添加中文支持sudo locale-gen zh_CN.UTF-8
设置空项的值:
1 | sudo update-locale LANGUAGE="en_US.UTF-8" |
在树莓派上安装Streisand的准备工作:
生成秘钥对:
1 | ssh-keygen |
安装git和vim:
1 | sudo apt-get install git |
安装python编译依赖:
1 | sudo apt install python-paramiko python-pip python-pycurl python-dev build-essential |
安装ansible相关依赖:
1 | sudo pip install ansible markupsafe |
安装aws相关依赖:
1 | sudo pip install boto boto3 |
下载Streisand源码并安装:
1 | git clone https://github.com/StreisandEffect/streisand.git && cd streisand |
按要求填写aws的相关信息,等很久…部署完成…
拷贝generated-docs到一个能看HTML网页的机器上(我的树莓派是raspbian lite版本):
1 | scp -r pi@<raspberrypi-ip>:streisand ~/Downloads |
按照网页提示、按需求(iOS、Linux、Android等)一步一步操作。
在树莓派上,按streisand生成的generated-docs中的提示信息,填写shadowsocks的配置文件/etc/shadowsocks-libev/aws.json
:
1 | { |
3.2 本机编译科学工具
由于树莓派上直接安装的shadowsocks不支持chacha20-ietf-poly1305
加密算法,因此,需要从源码编译shadowsocks:
1 | # Installation of basic build dependencies |
现在使用ss-local --help
会发现加密算法支持chacha20-ietf-poly1305
。
使用
1 | # 启动aws |
关于要钱:最便宜的EC2即可,一个月不到8刀吧……