树莓派无显示屏安装配置
之前还没有 HDMI 显示屏没有路由器,但是需要把一个树莓派设置起来,于是就有了这篇文章。
注:无显示屏也被称作 headless(无头?),搜索时可尝试这样搜。
需要的工具¶
一个支持 USB Tethering 的手机。
网线连接的网络(因为树莓派的无线网卡用来开热点了,不能连 WiFi)。
步骤¶
准备 TF 卡¶
按照一般的树莓派安装系统流程配置好 TF 卡。 在 TF 卡的第一个分区(Windows 下也只能访问到第一个分区)里创建一个名为 ssh
的文件。
准备手机 SSH 客户端¶
ConnectBot 看起来会出错。 总之用了 JuiceSSH。
开机连接¶
把树莓派开起来,用手机通过 USB 连接连上树莓派,开启 USB Tethering。 如果手机能够访问 /proc/net/arp
这个文件的话,就看看这个文件的内容找到树莓派的 IP 地址。 (如果不行的话,那就只能找个扫描 IP 地址的工具软件了,印象中 F-Droid 上是有的。)
通过先前下载的手机端 SSH 客户端登陆到树莓派。
设置树莓派热点¶
$ sudo apt update $ sudo apt install git screen hostapd $ git clone https://github.com/garywill/linux-router.git $ cd linux-router $ screen # 下面的设置只是我个人的偏好,请自行查阅 GNU Screen 的相关内容 $ echo "screen -RR" >> ~/.bashrc
开启热点:
电脑连 SSH¶
电脑连上热点,手机的 Tethering 暂时还别断。 此时如果你用的是需要各种网页来登陆的网络(如校园网),那么你需要自己寻找一个登陆脚本,这里不细说。
现在基本的网络已经好了:
树莓派提供一个热点以方便接入(在不知道有线网络 IP 地址的情况下)。
树莓派连接有线网络,如果校园网提供公网地址(IPv6 也行)就更加方便了。
看看有没有公网地址 IPv6¶
找到树莓派 IPv6 地址后,电脑可以断开热点,连接校园网测试连接。
持久化配置¶
校园网登陆¶
持续连接¶
过一段时间登陆一下,避免一些校园网的超时踢出机制。
不用 sudo
也行,但是会需要 sudo loginctl enable-linger <用户名>
设置一下 linger。
开机自动连接¶
需要用到 systemd
配置。这里不多介绍:
# /etc/systemd/system/some_net.service [Unit] Description=Login After=network.target nss-lookup.target [Service] Type=oneshot WorkingDirectory=工作目录 ExecStart=执行的登陆命令 [Install] WantedBy=multi-user.target
然后就是熟悉的 systemd
命令了:
自动开启热点¶
常见设置¶
SSH 配置¶
不多说,见 link://slug/linux-maintenance 。
国内镜像¶
删除 swap 文件¶
风扇等外设¶
呼吸灯¶
用于确认存活状态。
$ sudo apt install python3-gpiozero $ mkdir scripts $ nano scripts/breathing.py $ chmod a+x scripts/breathing.py $ sudo nano /etc/systemd/system/breathing.service $ sudo systemctl daemon-reload $ sudo systemctl enable breathing.service $ sudo systemctl start breathing.service
#!/bin/python3 from gpiozero import OutputDevice from time import sleep import signal import sys # 编号见 https://pinout.xyz/ 的 GPIO N led = OutputDevice(4) def cleanup(sig = None, stack = None): led.close() print("Exiting") sys.exit(0) signal.signal(signal.SIGTERM, cleanup) try: while True: led.off() sleep(2) led.on() sleep(2) except KeyboardInterrupt: cleanup()
风扇¶
先略过。
防火墙¶
不多说,见 link://slug/linux-maintenance 。
定时关机¶
毕竟很多学校都会定时断电,所以需要在断电之前让树莓派自动关机。 使用 cron:
限制日志大小¶
在 /etc/systemd/journald.conf
里设置 SystemMaxUse=128M
,然后重启 systemd-journald.service
。
/tmp
¶
神奇的是似乎树莓派没有默认挂载 /tmp
,需要手动设置:
编辑 /etc/fstab
加入 tmpfs /tmp tmpfs defaults,noatime 0 0
。
mitigations=off
¶
暂时没有用。其实也有安全风险。
Watchdog 开启¶
Watchdog,也译作看门狗,总之就是在系统无响应的时候自动重启的一个功能。 时间可以自己选择,但不要超过 15 秒(硬件最多支持到 15 还是 16 秒左右)。
编辑 /etc/systemd/system.conf
,把 RuntimeWatchdogSec
一行改为 RuntimeWatchdogSec=15
。 RebootWatchdogSec
也需要改。 设置完后 sudo systemctl daemon-reload
即可。
自动上传 IP 到 Neocities¶
注册一个 Neocities 账号,打开网页 https://用户名:密码@neocities.org/api/key
获取一个 API Key:
API Key 就是输出里的类似 da77c3530c30593663bf7b797323e48c
的一串东西:
脚本:
#!/bin/sh while true; do if ping baidu.com -c 1 -W 3; then break fi sleep 1 done ip=$(ip -6 addr list dev eth0 | grep inet6 | awk -F" +|/" '{print $3}' \ | grep -v '^fe80') echo "$ip @ $(date)" > /tmp/ip curl -H "Authorization: Bearer 这里填上你的APIKey" \ -F "ip.html=@/tmp/ip" "https://neocities.org/api/upload"
然后和前面一样,弄个 SystemD 自启以及 Crontab 就可以了。
Caddy¶
# apt install -y debian-keyring debian-archive-keyring apt-transport-https # curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg # curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list # apt update # apt install caddy libnss3-tools # nano /etc/caddy/Caddyfile # systemctl restart caddy.service
Cloudflare Algo Tunnel¶
下面的命令大概有点问题,暂时懒得回忆之前具体执行了什么命令了。
# mkdir -p --mode=0755 /usr/share/keyrings # curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null # # Add this repo to your apt repositories # echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bullseye main' | tee /etc/apt/sources.list.d/cloudflared.list # # Install cloudflared # apt-get update && apt-get install cloudflared $ cloudflared tunnel login $ cloudflared tunnel create 名称 $ nano /home/pi/.cloudflared/config.yaml $ cloudflared tunnel route dns 对应的UUID 对应的域名 $ cloudflared tunnel run 名称 # cloudflared --config .cloudflared/config.yaml service install # cloudflared --config /etc/cloudflared/config.yml service install
评论