树莓派安装 Shadowsocks-go mu 记录

Hacks May 02, 2017

TL; DR:

Raspbian 源的 Golang 版本太低,无法正确编译。需要到官网下载新版本 Golang 进行交叉编译。

迁移了服务器到自己家的树莓派,所以原来的 SS-Panel 也一并迁移了。在安装过程中遇到了一些坑,就此记录下来。

题外话,显然自己家的服务器是不会公开的,只是搭建起来提供给认识的人合理使用。所以之前如果你在用本站提供的 SS,抱歉,无法继续提供服务。

ARM what?

你可能听过,树莓派 1 有一块基于 ARM v6 的 CPU,树莓派 2 是 ARM v7(or armhfin 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 就可以开机自动启动,非常之方便。

aLPHAtOAD

太年轻,太简单,有时候幼稚。