跳到主要内容

Raspberry Pi 手记

· 阅读需 12 分钟

近期搞来一块新电脑(?)不能免俗,选择了 Raspberry Pi 3B。树莓派的牛皮纸袋包装真的很可爱,乍一看真的很像从超市买了一袋子树莓回来。

初始化

安装系统

准备一张 MicroSD 卡,系统镜像直接下载 Raspbian。有个 Noobs 是一个 easy installer,没什么用处。下载镜像后烧写到 MicroSD 卡里,推荐使用 Etcher,全平台的一个简洁好用的镜像烧写工具。

“无头”启动

一般来说,树莓派是需要接上 USB 键鼠、HDMI 连接显示器、插上网线启动的。这些东西我一个都没有,于是使用所谓 headless setup 的方法,直接使树莓派连接上 WiFi 热点并开启 ssh。首先打开 MicroSD 卡的 boot 分区,touch ssh 放入一个空白的 ssh 文件,告诉系统打开 ssh。然后在同样位置创建一个 wpa_supplicant.conf 文件,内容为:

country=US # 这里换成你所在的国家
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="你的 WiFi SSID"
psk="你的 WiFi 密码"
}

这样树莓派启动后会自动读取配置连接 WiFi 热点,即可以用 ssh 愉快地玩耍了。上电。

设置

在自己路由器管理页面记住树莓派的 IP,用 ssh pi@树莓派的 IP 连接,默认密码为 raspberry。初次启动,使用 sudo passwd 更改下密码,然后 sudo raspi-config 命令进入树莓派的设置工具。

我在这里进行的变更有:

  • Boot options -> Desktop / CLI -> Console
  • Interfacing options -> VNC -> Enable
  • Advanced options -> Expand filesystem

开启第二步后,不熟悉命令行的话也可以通过 VNC 连接远程桌面使用树莓派了。需要在终端内启动 vncserver :1,然后就可以从 VNC 客户端里通过 树莓派的 IP:1 连接了。不使用的话可以 vncserver -kill :1 关闭。

一切就绪,安装好 vim、oh-my-zsh、git 之类工具,树莓派基本就可用了。

搭建下载机

搞树莓派的核心需求是搭建一个能够远程控制的下载机,同时我在家里的时候可以直接访问树莓派连接的硬盘,甚至直接通过兼容流媒体协议的 app 播放。

挂载硬盘

这里我的硬盘因为要兼容 macOS 和 Windows,所以格式化为了 exFAT 格式,需要安装对应读写的驱动:

sudo apt-get install exfat-fuse

之后挂载移动硬盘到 /mnt/hdd:

sudo mount -o uid=pi,gid=pi /dev/sda1 /mnt/hdd

不用后弹出:

sudo umount /mnt/hdd

注意:由于电压原因,树莓派直接连接移动硬盘可能不稳定。我的方法是将移动硬盘连接到有 USB 接口的显示器,再把显示器 USB 线连接到树莓派上。如果有带有供电的 USB HUB 理论上应该也可以。

安装 aria2

大名鼎鼎的 aria2 就无需多言了。直接安装:

sudo apt-get install aria2

接下来需要给 aria2 创建两个文件:一个配置文件,一个用来保存下载会话。找到一个合适的路径,touch aria2.session 创建空白会话文件。然后 vim aria2.conf,编辑配置文件:

dir = /path/to/your/downloads # 下载存储路径
enable-rpc = true # 开启 RPC,以下几个选项均和远程控制有关
rpc-allow-origin-all = true
rpc-listen-all = true
continue = true # 断点续传
input-file = /path/to/aria2.session # 会话文件路径,下同
save-session = /path/to/aria2.session
max-concurrent-downloads = 5 # 最大同时下载数

加载配置文件,并以 daemon 模式启动 aria2:

sudo aria2c --conf-path=/path/to/aria2.conf -D

或使用 pm2:

pm2 start aria2c -- --conf-path=/path/to/aria2.conf

远程控制

远程控制就是在本地开一个服务器,提供一个访问 aria2 的 Web UI,然后通过路由器的 port forwarding 暴露到公网上,即可以远程访问 Web UI 管理下载任务了。首先开一个自己习惯的服务器,我使用的是 nginx,安装好后编辑配置文件自己指定 nginx 的根目录,启动 nginx:

sudo apt-get install nginx
sudo vim /etc/nginx/sites-enabled/default
sudo service nginx start

接下来选择一个适用于 aria2 的 Web UI,我使用的是 webui-aria2。进入自己设置的服务器根目录,git clone https://github.com/ziahamza/webui-aria2.git,改个名字 mv webui-aria2 aria2,即可以通过 树莓派的 IP/aria2 访问 aria2 的 Web UI 了。最后在自己路由器上打开 port forwarding,注意给树莓派保留 IP 而不要任凭路由器 DHCP,分配一个端口给树莓派的 80 端口。然后根据 aria2 的教程设置密钥访问,即可以远程安全的管理自己的下载任务了。

美帝连国内凄惨的下载速度

文件服务器

文件服务器通过 SMB 协议,安装 samba:

sudo apt-get install samba samba-common-bin

修改配置文件:

sudo vim /etc/samba/smb.conf

添加自己下载目录的配置:

[hdd]
path = /path/to/your/hdd
valid users = pi
browseable = Yes
writeable = Yes
writelist = pi
create mask = 0777
directory mask = 0777

然后重启 samba 服务,并添加当前账户:

sudo service smbd restart
sudo smbpasswd -a pi

这样在局域网里就能够发现树莓派了。用 pi 的账号密码连接,就可以轻松挂载共享的文件夹。

流媒体服务器

流媒体服务器通过 DLNA 协议,首先安装 minidlna:

sudo apt-get install minidlna

之后修改配置文件:

sudo vim /etc/minidlna.conf

修改内容,主要是流媒体服务器读取文件的路径。注意 minidlna 可以根据媒体类型分别设置路径:

# A 代表音频 P 代表图片 V 代表视频
media_dir = A,/path/to/audio
media_dir = P,/path/to/picture
media_dir = V,/path/to/video

启动 minidlna 服务:

sudo service minidlna start

然后打开兼容 DLNA 协议的播放器(如 VLC),就可以直接播放硬盘里的流媒体了。另外,minidlna 还会开放 8200 端口显示媒体数量等一些信息。

Minecraft 服务器

搭建一个 Minecraft 服务器也是树莓派不错的归宿。之前我尝试过使用免费的 Google Cloud 实例,性能非常差一下子就会崩掉。而我家又由于 Xfinity 的网关原因,无法成功转到公网上。因此采用的办法是树莓派运行服务器,通过内网穿透反向代理到 Google Cloud 实例上。

运行

安装 JRE:

sudo apt-get install default-jre

选择合适的 Minecraft 服务器。我选择的是 PaperSpigot,一个高性能的 Spigot fork。注意树莓派由于性能原因不建议使用太高版本,以 PaperSpigot-1.7.10-R0.1-SNAPSHOT-latest.jar 为例,执行:

java -jar -Xmx840M -Xms840M PaperSpigot-1.7.10-R0.1-SNAPSHOT-latest.jar nogui

Minecraft 服务器就在 25565 端口上启动了。插件只需要放入同目录的 /plugins 文件夹,重启服务器即可以自动启动。

内网穿透

内网穿透使用 frp,具体的使用文档可以看这里。下载时注意架构和操作系统,这里我的 Google Cloud 实例是 linux-amd64,树莓派是 linux-arm。

将 linux-amd64 的 frps 和 frps.ini 放到 GCP 实例上,编辑 frps.ini:

# frps.ini
[common]
bind_port = 7000 # 服务器使用 7000 端口和树莓派通信

启动 frps:

./frps -c ./frps.ini

将 linux-arm 的 frpc 和 frpc.ini 放到树莓派上,编辑 frpc.ini:

# frpc.ini
[common]
server_addr = x.x.x.x # 公网 IP 地址
server_port = 7000 # 服务器使用的端口
[minecraft]
type = tcp
local_ip = 127.0.0.1
local_port = 25565 # minecraft 服务器开启的端口
remote_port = 6000 # 远程用来连接的端口

启动 frpc:

./frpc -c ./frpc.ini

最后在任意一台机器上连接 Minecraft 服务器,地址为 服务器公网 IP:6000。在我的两人生存服上树莓派的负载约为 10%,可以较为轻松的应对低版本 Minecraft 服务器的工作。

智能家居

智能家居部分主要是运行了两个服务:

安装 Node.js 及 pm2

我们使用 pm2 作为进程管理工具。首先安装 Node.js LTS,跟着文档

curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo apt-get install -y nodejs

然后安装 pm2:

sudo npm install -g pm2

HomeBridge

安装 HomeBridge 及 homebridge-config-ui-x

sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x

然后根据 config-sample.json 编写自己的配置文件,放到 ~/.homebridge/config.json,之后运行 homebridge 命令启动,并使用 iOS 上的 Home 应用进行初始化。完成后即可通过 pm2 start homebridge 来使用 pm2 管理进程。

AirConnect

对于 AirConnect 我们只需要它的一个组件 aircast。作者提供了编译好的 ARM 架构二进制,直接下载后 scp 到树莓派上,修改权限后使用 pm2 start aircast-arm 即可。

pm2 管理的进程初始化好之后,需要用 pm2 save 保存下配置,之后再次启动可以使用 pm2 resurrect 快速恢复。

总结

树莓派还是挺实用的,一个极低功耗的完整 Linux 设备,外加 MicroSD 卡可以扩展较大的存储(我使用的 256GB),可以在家里便捷地实现文件共享、简单的自动化等操作。期待以后能有性能更强的 Pi 可以更为流畅地负担日常任务。