树莓派安装 Shadowsocks-go mu 记录
TL; DR:
Raspbian 源的 Golang 版本太低,无法正确编译。需要到官网下载新版本 Golang 进行交叉编译。
迁移了服务器到自己家的树莓派,所以原来的 SS-Panel 也一并迁移了。在安装过程中遇到了一些坑,就此记录下来。
题外话,显然自己家的服务器是不会公开的,只是搭建起来提供给认识的人合理使用。所以之前如果你在用本站提供的 SS,抱歉,无法继续提供服务。
ARM what?
你可能听过,树莓派 1 有一块基于 ARM v6 的 CPU,树莓派 2 是 ARM v7(or armhf
in Debian),而最新的树莓派 3 则是 64 位的 ARM v8( or arm64
)。因此,要选择合适的 target。
需要注意的是,树莓派 3 虽然使用了 arm64
的 CPU,但是最新的 Raspbian 使用的内核却依然是 32 位。对于这种情况,官方的回答是:
We chose it just because it's a good 32-bit chip. It just happens to run in 64-bit mode.
换言之,如果你用的是树莓派 2/3,需要编译 armv7
或以下版本的二进制文件。如果是树莓派 1,则必须编译针对 armv6
的版本。
谷歌给的二进制 Golang
工具链是 armv6
的,但是由于向下兼容,所以可以在所有的树莓派上跑起来。
Get Working
下载最新 Golang
并解包:
wget https://storage.googleapis.com/golang/go1.8.1.linux-armv6l.tar.gz
tar xvf go1.8.1.linux-armv6l.tar.gz
移动文件夹
sudo mv go /usr/local
在 ~/.bashrc
里加入这行:
export GOROOT=/usr/local/go
创建软连接方便使用:
sudo ln -s /usr/local/go/bin/go /usr/bin/
设置 GOPATH
:
mkdir go-workspace
export GOPATH="/home/pi/go-workspace/"
编译 ss-go mu
(针对 armv7
,其实默认 armv6
也可以用,但是有洁癖):
GOARM=7 GOARCH=arm go get github.com/orvice/shadowsocks-go/mu
然后就和正常 Linux 一模一样了,编译出来的二进制在 /home/pi/go-workpace/bin/
里。
systemd
为了方便起见,我还写了一个 ss.service
配合 systemd
使用。
[Unit]
Description=ss
After=network.target
[Service]
Type=simple
# Edit WorkingDirectory, User and Group as needed
WorkingDirectory=/home/pi/ss-go-mu
User=root
Group=root
ExecStart=/home/pi/ss-go-mu/mu -config_path=/home/pi/ss-go-mu/config.conf -log_path=/home/pi/ss-go-mu/ss.log
Restart=always
SyslogIdentifier=Shadowsocks
[Install]
WantedBy=multi-user.target
放在 /etc/systemd/system/ss.service
里,以后用 systemctl start ss
就可以开启,用 systemctl enable ss
就可以开机自动启动,非常之方便。