⚠ 免责声明
本文作者 并非 从业计算机开发、运维。
本文配置仅供参考,请依据你的环境实际情况替换。
数据无价,请在风险操作前备份、确认。
配置不规范与未臻完善之处请交流指教,It works! ™
动机
华硕的路由器管理太难用了。配置页面的选项有些根本看不懂想要表达什么。SSH 连接后用 CLI 编辑配置文件还不能保存,实在是用得人窝火。
想来想去还是要釜底抽薪,用一台正常的 x86 机器做服务器。因为要放在客厅,所以普通服务器的工业设计都不满足需求,无法正常地融入居家环境。调研后想在德国亚马逊海淘一台 HPE ProLiant MicroServer Gen10 Plus,正打算问杰哥 Gen10 Plus 如何的时候,他说有一台上一代的 Gen10,于是借来玩一玩。杰哥还送了一块通电万时的 256 GB SSD 系统盘,谢谢杰哥。
虽然是上一代产品,但是对于我而言,Gen10 的性能还是过剩。我不需要照片自动同步管理或者公网访问之类的成品 NAS 功能,评估需求后如下:
- 仅内网使用
- 支持 Docker 虚拟化
- 能用 web 配置页面完成的维护绝不在 CLI 里手敲
- 最简单的权限和端口管理
需要的服务
操作系统与虚拟化
本来想装个 Gnome,但是考虑到 Linux 层面基本还是用 ssh 手敲,操作系统还是选择安装了 Ubuntu 22.02 LTS Server。虚拟化管理直接在 Google 上搜「docker web ui」,找到社区免费的 portainer.io。
需要搬迁到 Gen10 上的应用
- Clash 与其 Web 后台界面
- Linux 透明代理
- Homebridge
- Samba、时间机器
- ……想起来再说
硬件配置
Gen10 有 DisplayPort 口,之前 Mid 2014 留下来的线刚好给服务器用。
硬盘列阵支持四枚 4TB 3.5 英寸 SATA 硬盘,计划一块直通 4TB HDD 用以高时效要求的 macOS 时间机器与移动设备备份、一块直通 1TB SSD 用以多媒体热数据存放、再放一块 16TB 的硬盘放其他冷数据。本来看了半天 RAID,但也想不出有什么 RAID 的使用场景(之前 PC 的好几块硬盘也没怎么坏),于是作罢。
主板上还有两条支持 PCIe 16x 长度的开放式 PCIe x1、x8 接口。可以插 USB-C 规格,USB 3.1 20 Gbps 速率扩展卡或者 Nvidia T400 之类的解码显卡。风扇是一个奇怪的 6 pins 接口,不兼容 PC 常见的 12 cm 4 pins 接口。原配的台达无刷风扇有点吵,想换成之前 PC 留下的好风扇还要买一根华强北转接线。
前盖防尘网卡口极其牢固,四边皆有卡口卡紧,不喷一点 WD-40 根本拆不下来。
软件配置与踩坑
宿主操作系统、Docker 与 portioner.io
做好 USB 系统盘之后装系统,发现几个坑:
有时候 Gen10 的前 USB 面板无法被开机引导发现,插后面的 USB 3.0 解决。
安装向导会推荐你在向导内安装 Docker,不要选择,装好系统后通过 apt install
安装。Docker 需要 sudo
才能 docker run
的问题是用户组没建好。
通过官方文档装好 portioner.io 之后无法通过服务器内网地址访问网页配置界面:防火墙默认 Deny 所有端口,而且 sudo ufw disable
关闭防火墙之后不知为何还是全局生效,需要强制启用后开启指定端口(我也不知道是什么原理)。
sudo ufw enable
sudo ufw allow [ports]
sudo ufw reload
sudo ufw status
重启后检查端口是否正确开启。重装系统后 ssh 到服务器报证书错误,重新 ssh-keygen -R [服务器 IP]
解决。
Clash 与 Yacd
修改 Clash 配置文件,求简单停用了独立配置的 https、socks 接口:
port: 7890
mixed-port: 7891
redir-port: 7892
tproxy-port: 7893
allow-lan: true
mode: rule
log-level: info
external-controller: 0.0.0.0:9090
secret: ""
建立 Clash 容器,我就是所有东西都放家里 ~/
的懒人:
docker run --name clash \
--network = "host" \
-v ~/docker/clash/config.yaml:\
/root/.config/clash/config.yaml \
-v ~/docker/clash/ui:\
/ui \
-d dreamacro/clash
docker run --name clash-ui \
-p 9080:80 \
-d haishanh/yacd
在浏览器内打开服务器地址的 :9080
端口访问 Web UI,在设备的网络设置上将代理服务器指向 Clash 的地址、端口,顺利访问国际互联网。
透明代理与 iptables
为了让无法配置代理、懒得配置代理或不允许使用代理的设备能访问国际互联网,如 Chromecast 进行 YouTube 投屏、家庭成员的移动设备、游戏机。
之前学了好几次 iptables 都浅尝辄止最后半途而废,这次配透明代理也好好理解了一下,虽然不知道为什么 Clash 的 tproxy 一直没办法成功解析,在日志里也没有任何连接的迹象。暂时先用 tcp 处理基本的上网需求。
Gen10 透明代理配置
docker stop clash
停止容器后,sudo service iptables stop
暂停 iptables 服务。Ubuntu 的默认名称解析服务 systemd-resolved 占用了 :53
端口,通过编辑配置文件 /etc/systemd/resolved.conf
声明 DNSStubListener = no
后重启服务停止对上述端口的占用。
Clash DNS 配置
Clash 不推荐继续使用重定向模式进行代理,后期实测也发现使用重定向模式 tcp 可以正常解析,但 Twitter 时间线和 YouTube 视频播放无法正常加载。以下是假 IP 模式的配置:
dns:
enable: true
ipv6: false
listen: 0.0.0.0:7053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
# 可以在 fake-ip-filter 中添加需要使用真实 IP 应答的地址
fake-ip-filter:
- *.battle.net
- spotify
nameserver:
- 119.29.29.29
- 8.8.8.8
fallback:
- https://doh.pub/dns-query
- https://dns.google/dns-query
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4
添加 iptables 规则与保存规则
新建 sh 脚本 append.sh
,chmod -x append.sh
赋权,sudo sh append.sh
添加规则至 iptables:
# 新建名为 CLASH 的表
iptables -t nat -N CLASH
# 排除私有地址与保留地址
iptables -t nat -A CLASH -d 0.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 10.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 127.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 169.254.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 172.16.0.0/12 -j RETURN
iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 224.0.0.0/4 -j RETURN
iptables -t nat -A CLASH -d 240.0.0.0/4 -j RETURN
iptables -t nat -A CLASH -d localhost -j RETURN
# 重定向 tcp 流量到 Clash 重定向端口、预防 DNS 污染
iptables -t nat -A CLASH -p tcp -j REDIRECT --to-port 7892
iptables -t nat -I PREROUTING -p tcp -d 8.8.8.8 -j REDIRECT --to-port 7892
iptables -t nat -I PREROUTING -p tcp -d 8.8.4.4 -j REDIRECT --to-port 7892
iptables -t nat -A PREROUTING -p tcp -j CLASH
# 对 fake-ip 模式进行重定向
iptables -t nat -A OUTPUT -p tcp -d 198.18.0.0/16 -j REDIRECT --to-port 7892
# 重定向 DNS 端口至 Clash DNS 监听端口
iptables -t nat -N CLASH_DNS
iptables -t nat -F CLASH_DNS
iptables -t nat -A CLASH_DNS -p udp -j REDIRECT --to-port 7053
iptables -t nat -I OUTPUT -p udp --dport 53 -j CLASH_DNS
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to 7053
完成后通过 sudo dpkg-reconfigure iptables-persistent
持久保存规则。此时使用 icmp 的 ping 和 nslookup 无法使用(会前往假 IP 的地址,以我的浅薄知识还以为「翻车」了),但抓取了几个 Docker 包和执行 sudo apt update
却表现出网络的解析与访问正常。
子路由流量通过 Gen10 网关转发
自己的电脑和手机还是喜欢用代理应用访问国际互联网(比较好控制),于是拿出闲置的华硕 RT-AC68U 进行作为子路由进行代理下发。
DHCP 冲突
将子路由流量转发至主路由获取公网连接。然而在子路由和主路由同时处于一个广播域中(192.168.50.0/24
)时,控制网关和 DNS 配置下发的 DHCP 服务产生了冲突。
「192.168.1.0/24
下有两个 DHCP 服务器,A 负责 192.168.50.1–199
,B 负责 200–254
,怎么还是会撞车的?」杰哥说:「一个广播域不应该有两个 DHCP,只能拆成两个广播域咯,两个 /24
最简单。」
为了解决冲突,需求为:
[互联网 ]
⇅
[主路由 ]
[DHCP, 192.168.50.0/24]
[192.168.50.1 ] ←
⇅ [Gen10 192.168.50.10]
[子路由 ] →
[DCHP, 192.168.51.0/24]
[192.168.51.100 ]
- 主路由直接访问外网
- 广播域相互独立
- DHCP 相互独立
- 子路由下发网关和 DNS 配置至 Gen10 透明代理
- 主、子路由双向互通
路由设置
主路由 | 子路由 | |
---|---|---|
WAN 模式 | PPPoE | 静态 IP |
WAN IP | – | 192.168.50.100 |
WAN 网关 | – | 192.168.50.13 |
WAN DNS | – | 192.168.50.13 |
静态路由目标 | 192.168.51.0 | – |
静态路由子网掩码 | 255.255.255.0 | – |
静态路由网关 | 192.168.50.100 | – |
静态路由网口、优先级 | LAN, 0 | – |
192.168.50.100
标「-」为缺省项
重启两台路由后发现主路由在已设置静态网口后依旧无法打开子路由管理页面,在子路由的 iptables 规则中允许 80 端口后问题解决。其实我很不解为什么华硕路由的管理页面为什么不提供一个 iptables 的图形化编辑界面,新建 vi ~/iptables_i.sh
并 chmod -x ~/iptables_i.sh
赋权。
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.50.0/24 -j ACCEPT
因子路由才从 Asuswrt-Merlin 刷回官方固件,无法执行 /jffs/scripts/
下的脚本,故 iptables 规则重启后失效。懒得折腾了。重启后记得手敲 sh ~/iptables_i.sh
。
至此测试主、子路由是否互通,使用任意设备接入子路由验证是否可以配置网关和 DNS。成功访问国际互联网,最终完成对 Clash 应用(除 udp 外)的部署。
Homebridge
相对于 iptables 反复调试与重启的苦劳,建立 Homebridge 的 Docker 容器可谓一种消遣:
docker run --name homebridge \
--network = "host" \
-v ~/docker/homebridge:\
/homebridge \
oznu/homebridge:ubuntu
成功拉取与运行建立容器后,查看容器的运行日志找到服务端口与 web 配置页面端口,确保防火墙允许上述端口后通过配置页面添加米家电器。Homebridge 配置模块中米家电器需要的各种鉴权与 token 可以通过 Python 脚本 Xiaomi Cloud Tokens Extractor 获取。
在 iOS 设备中的「家庭」应用程序,右上角添加控件选择扫描日志中的数字代码或 web 配置页面的二维码完成配对。Siri 也可正确调用、开关米家家电(我添加了小米空气净化器2、米家空气循环扇、小米空调伴侣2,均工作顺畅)。
merdok/homebridge-miot
通过 homebridge-miot 插件,Homebridge 可以启用小米云服务(MiCloud,即米家 App)。通过公网下发配置,可以提高操控稳定性,并且能够将米家的蓝牙设备(如温湿度传感器)接入到 HomeKit 中。
获取设备
在 homebridge-miot 的 Web UI 中,进入 Discover all devices via MiCloud(通过小米云服务发现设备)菜单。通过登录小米云服务,可以发现当前已添加到米家 App 的设备。勾选 “Show all devices?”(显示所有设备),不选 Automatically add to Homebridge(自动添加到 Homebridge),这样可以将获取的设备列表中的所有信息记录下来备用。表格中包含以下信息:
- Name(名称)
- Model(型号)
- Token
- Device Id(设备号)
- Local Ip(Wi-Fi 设备的 IP 地址)
- Country(注册地区)
生成配置
在填入上文获取的型号时,通过 “Generate device class”(生成设备类)选项,可以任意填写 “Device name”,勾选 “Requires MiCloud?”(需要小米云服务),以生成设备类文件。生成的配置文件将保存在之前建立映射到 Homebridge 的 Docker 容器配置文件夹中。
根据上文 Homebridge 的 Docker 配置,我的文件保存在 ~/docker/homebridge/miotSpecClassGenerator/devices
目录中。也有可能保存在 ~/.homebridge/.xiaomiMiot
(默认配置)中。
添加设备
直接通过配置文件添加配置以「米家蓝牙温湿度传感器 2」为例:
{
"name": "卧室温湿度计",
"ip": "[ip]",
"token": "[token]",
"deviceId": "[deviceId]",
"model": "miaomiaoce.sensor_ht.t2",
"prefsDir": "~/docker/homebridge/miotSpecClassGenerator/devices",
"pollingInterval": 10,
"deepDebugLog": false,
"micloud": {
"username": "[username]",
"password": "[password]",
"country": "cn",
"forceMiCloud": true
},
"buzzerControl": false,
"ledControl": false,
"childLockControl": false,
"modeControl": false,
"suppressAutoServiceCreation": [
"temperature",
"relativeHumidity",
"illumination"
]
}
要点是正确填入以下信息:ip
蓝牙网关的 IP、token
、deviceId
设备号(唯一)、model
型号、prefsDir
配置目录、micloud
小米云服务账户密码。此外,根据需要,选择下方所需的额外控制功能(如果未正确选择,Home App 将显示许多无用的控件,影响操作)。保存配置后重新启动,并检查家庭 App 是否成功添加设备。
理论上可以通过 homebridge-miot 将所有设备接入 HomeKit。经过实验,包括养生壶、烤箱之类的厨房电器。
Samba 与时间机器
手头暂时只有一块十年前的希捷 BarraCuda 7200 转 1TB 硬盘,本来想组 RAID 1 做照片备份,看了下现在 NAS 硬盘的价格,暂时搁置。
硬盘直通配置
开机自检不通过
之前这块硬盘是苹果的 APFS,打算进系统再重新格式化。结果发现无法开机,Bios 右下角界面代码 92
。刚好 HPE 社区有解决方法:不开启 SMART 系统自检不通过。
Gen10 关机,移除硬盘。开机后按 F2 进入 UEFI Shell,输入 RAID 进入 RAID 管理页后插入硬盘,选择插入的硬盘打开 SMART。进入系统后 sudo fdisk -l
找到需要格式化的硬盘。
fdisk 初始化硬盘
执行 sudo fdisk /dev/
根据操作提示进行全盘重置。之前插在 macOS 上的硬盘在执行 fdisk 时提示存在 HFS+ 的签名,通过 [盘符]
sudo wipefs --all --force --backup /dev/[盘符]
移除。(备份的签名保存在 /
下)。
如果需要全盘重置,在 fdisk 交互式命令中输入 d
删除后续打印的分区。使用 n
新建分区,并按照交互式命令的提示操作(一般跟随默认值即可)。当再次出现 Command (m for help):
交互式界面时,输入 p
打印修改后磁盘参数仔细比对确认(数据无价,多确认一次总是好)。此时,如果检查有误,输入 q
退出 fdisk,重新开始。
确认无误,输入 w
写入修改。输入 sudo partprobe
与操作系统同步修改信息。
GUN Parted 初始化超大硬盘
在「6·18」促销时又添购了一块西部数据 HG550(16TB)氦气企业硬盘。
fdisk 因其建立 MBR(主引导记录,Master Boot Record)的特性,无法处理超过 2TB 的硬盘,必须使用 GUN Parted 建立 GPT(全局唯一标识分区表,GUID Partition Table)进行初始化。
执行 /dev/
根据操作提示进行全盘重置。在 GUN Parted 交互式命令中输入 [盘符]
mklabel gpt
将磁盘设定为 GPT 格式,再输入 mkpart primary 0% 100%
建立使用全部可用空间的分区。在交互式界面中,始终可以使用 print
指令打印当前磁盘状态。
与 fdisk 不同的是,GUN Parted 所做操作皆为即时修改,输入 quit
退出交互式命令后,再输入 sudo partprobe
与操作系统同步修改信息。
格式化与挂载分区
sudo fdisk -l
找到物理盘下新分区的目录(我对应的物理盘 /dev/sdb
下出现了 /dev/sdb1
)。随后执行 sudo mkfs -t ext4 /dev/sdb1
将分区格式化为 ext4 文件系统格式。
sudo mount /dev/sdb1 /mnt/sdb1
将分区载入系统。
执行 sudo blkid | grep "[硬盘格式]"
找到分区的 UUID,sudo nano /etc/fstab
设置开机自动挂载。以便阅读,每空格后插入接续符并换行,实际配置文件为一行:
UUID=[与磁盘匹配的UUID] /mnt/sdb1 ext4 defaults 0 2
UUID=[与磁盘匹配的UUID] \
/mnt/sdb1 \
ext4 \
defaults \
0 \
2 \ # 如有更改,需要重新确保 0–n 顺序不中断
sudo mount -a
重新挂载,如果没有报错则完成所有操作。
权限
此时前往 /mnt/sdb1
会发现只有 root 才能进行更改。因为只是保存在内网的、无关痛痒的文件,sudo chown otakugard /mnt/sdb1
将分区所有者设置为用户 otakugard
,其后 sudo chmod 755 /mnt/sdb1
赋权。
Samba 配置
sudo apt install samba
安装(直接装在本机了)。操作系统已经设置好了 Samba 的系统链接,apt 安装时系统链接报错可以无视。在 Samba 3 中默认链接的命令为 smbd。sudo nano /etc/samba/smb.conf
编辑配置文件。具体配置参数族繁不及备载,官方文档比我说得清楚。以下是我的配置:
[global]
server string = otakugard-server-samba
server role = standalone server
hosts allow = 192.168. 127.
log file = /var/log/samba/%m.log
map to guest = Bad User
unix extensions = no
allow insecure wide links = yes
follow symlinks = yes
wide links = yes
[Workflow - 1T Direct - SSD Slot #2]
comment = Ubuntu File Server Share
path = /mnt/sdc1
browsable = yes
writable = yes
vaild users = otakugard
多个 Samba 网盘空间共存与图形界面友好的命名方式:
#[你喜欢的字符串,ie. Movie]
#path = /mnt/sdb1/Movie
#……等等以此类推,可建立多个方括号下的 Samba 子空间
最后不要遗漏 sudo systemctl enable --now smbd nmdb
与 sudo systemctl restart smbd nmdb
开启与重启服务、确认防火墙端口已打开:Samba 默认使用 :139
与 :445
端口。现在,可以在支持 Samba 的文件管理器内访问 smb://[服务器 IP]
,测试正常的文件管理功能。请使用之前为 Samba 设置的独立登录密码验证。
时间机器启用与嗅探
时间机器与 Samba 配置文件
时间机器无需安装其他软件,直接在 /etc/samba/smb.conf
中声明即可:
[Time Machine Disk - 1T - HDD Slot #1]
path = /mnt/sdb1/timemachine
browsable = yes
writable = yes
valid users = otakugard
vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:time machine = yes
安装与启用 Avahi
Avahi 可以自动广播服务器上运行的网络服务。sudo apt install avahi-deamon
安装包后,systemctl enable --now avahi-daemon
、systemctl restart avahi-daemon
启用即可。此时访问 macOS 的时间机器配置页,可以嗅探到上述部署完成的配置。
Adobe Lightroom Classic 目录网络同步(Syncthing)
安装 Syncthing
Adobe Lightroom Classic 无法打开位于网络目录上的目录。直觉反应是通过版本管理工具进行同步。找了一圈 macOS 没有什么正常的 SVN 客户端(相比 Windows 的 TortoiseSVN 提供系统右键菜单的同步操作),在叉烧推荐下装了 Syncthing。
还是装在本机。在 apt 中添加源后 sudo apt-get install syncthing
安装。sudo ufw allow syncthing
与 sudo ufw allow syncthing-gui
允许应用通信与配置页面所需端口。nano ~/.config/syncthing/config.xml
找到以下字段开放内网访问配置页面:
<address>127.0.0.1:8384</address>
# 修改为
<address>:8384</address>
systemctl 中绑定的脚本是 syncthing@[你的用户名].service
,不要打错了。同样,sudo systemctl enable --now syncthing@otakugard.service
、sudo systemctl restart syncthing@otakugard.service
启动服务。
通过 http://[服务器 IP]:8384
打开 Syncthing 配置页面,点击首页的 Add Folder 按钮添加需要同步的文件夹,开始同步文件树。在官方下载页面中按照匹配的操作系统下载客户端应用,macOS 可以通过 brew install --cask syncthing
获取。
此时存在两个配置页面:位于 [服务器 IP]:8384
的服务器配置和位于 localhost:8384
的客户端配置
Syncthing 本地服务器配置
点击服务器配置页的 Add Remote Device 按钮,Syncthing 会自动嗅探网内存在的客户端。添加成功后在上文添加的文件夹设置弹窗的 Edit – Sharing 子卡片中勾选客户端,服务器的配置便完成了。
Syncthing 客户端配置
打开安装完毕的客户端应用即可通过 localhost:8384
进入客户端配置。可见服务器发来的邀请提示。将文件夹路径导向你想存放的本地文件夹即可。至此完成 Syncthing 的全部配置,且本机做出的修改会自动上传服务器。
YouTube 离线下载(yt-dlp)
yt-dlp 是一个通过命令行下载网络视频(特别是 YouTube 视频)的服务。
将一些常看的「作业用 BGM」类视频下载到本地,并通过 PS4 连接电视播放,节省服务器流量。sudo apt install yt-dlp
下载后,在 ~/.config
下建立 yt-dlp/
文件夹,并创建 config
文件(更多设置可参考文档,为了下载最高品质的 H264 视频,我的配置如下):
--paths /mnt/sdc1/Media/Video/yt-dlp
--format bestvideo[ext=mp4]+bestaudio[ext=m4a]/best
现在可以通过 yt-dlp [视频 URL]
依照上文保存的配置文件下载符合规格的视频了。
PlayStation 媒体服务器(MiniDLNA)
PS4 Pro 的「媒体播放器」应用只能读取媒体服务器广播的文件,无法通过 Samba 打开网络文件夹播放。
安装 MiniDLNA
找到了 MiniDLNA,一个简单的 DLNA/UPnP 媒体服务器。
安装非常简单。sudo apt install minidlna
安装服务后 sudo ufw allow 8200
打开其使用的默认端口 :8200
。
配置 MiniDLNA
sudo nano /etc/minidlna.conf
编辑配置文件,详细的配置文件可以查看配置文档,对 PS4 Pro 的媒体播放器而言,只需要指定媒体文件夹即可:
media_dir = /mnt/sdc1/Media
sudo systemctl enable --now minidlna
启用即完成媒体服务器的配置,现在打开 PS4 Pro 的「媒体播放器」应用,稍等十几秒界面即会刷新出服务器上的媒体资源。如果配置进行了变更,除了在服务器重启 MiniDLNA 外,也请重启 PS4 应用后台(PS 键快捷菜单——关闭应用程序——重新打开媒体播放器)。
PS4 Pro(乃至 PS5)都不支持 HEVC 解码,最近想看的盗版资源都要二转成 x264 了。
服务器与居家空间
桌面与数通区域的和谐
设备太多的问题
Gen10 虽然是比较理想的工业设计类型,但相较于其他供家庭摆放在客厅的数码设备来说,一个不时传出风扇与硬盘噪声,也不算小的黑盒子仍然显得突兀。
算下来现在的数通设备有:
- HPE ProLiant MicroServer Gen10(电源、RJ45、DisplayPort、USB)
- 华硕 RT-AC68U(电源、RJ45)
- 华硕 RT-AX88U(电源、RJ45、USB)
- 小米多模智能网关(USB)
- TP-Link TL-SG1005D 交换机(电源、RJ45)
- 电信杂牌 GPON 光猫(电源、RJ45)
整理与收纳
之前在宜家买的 DOKUMENT 信盘拆掉一层、移除横梁、固定滑轨后虽然还是没有解决理线的问题,但起码错落有致也比我想象的稳固(毕竟移除了顶端横梁),但看不到就代表不存在。另外在信盘背面额外夹了一只 USB 小风扇用来散热(插在了 Gen10 的 USB 口上),服务器一开能保证一些基本的空气流通。
电脑桌面区域和数通区域的电源也做了解耦,任何一个插线板出现问题都不会彼此影响。那些乱七八糟的 12V 圆头电源则统统放到了电源收纳盒里。眼不见为净。
买了标签机给设备和线缆贴上了属性、内网 IP 或常用端口,也不怕拔错调错设备。
意外收获:回归客厅的电视
上文 Clash 配置好后 PS4 Pro 开机就能访问国际互联网(之前用手柄将网络导向 Mac 上 Surge 的 TUN 模式还是挺麻烦的)。也许是没什么人从电视上获取资讯了,不少电视台(如 ABC(美国)、NBC、ABC(澳洲)、ANN、公视、TVB 等等)都把足本新闻内容放到 YouTube 上供人点播,甚至还有直播。
之前朋友买了个能收视海外节目的盗播电视盒子,不过目前我看 YouTube 上的资讯就足够了。刚好 PS4 Pro 能放 4K HDR 内容,看一些其他的网络视频也很不错。总而言之——电视终于回归客厅,家里那台古董级 1080i 电视因为上述原因也找到了更换的动机。
技术文章的输入输出
看懂技术文档
一个很 Nooby 的问题:我看不懂技术文档的各种修饰符。
若干年后终于学会了用 man [命令名称]
,在 man
里通过 /[关键字]
索引需要的条目,搞懂了文档里各种方括号尖括号省略号等等修饰符的意思。之前与其说是看不懂,还不如说是看得头皮发麻懒得查懒得学。
代码与表格的排版
WordPress 主题的表格和代码 CSS 改起来还是挺让人头大的。主要是之前一直没有加 white-space: pre;
与 overflow: auto;
[1] [2] 导致代码区块会换行,很让人讨厌。不知道为什么这个参数不在 WordPress 默认主题的 CSS 里呈现。着色器又要增加加载时间,五彩斑斓的代码块又影响主题的和谐,我相信各位读者所使用的文本编辑器做的比我好,所以请复制粘贴。
技术名词、命令与行文
排版上,命令到底要不要做成行内代码?或者他只是介绍功能?毕竟在一段文字中,使用 <code>
样式已与长文有着显著差别。如果只是介绍应用或命令本身(例如上文提到的 iptables、Samba),保持常规样式看起来更好。但如果是执行一段命令(比如 sudo systemctl ……
),内连代码提供的强调样式(无论是等宽字体还是背景颜色带来的强提醒)则显得必要。
有时候直接表达的白话、同时减少英文名词与缩写堆砌,尽可能一目了然地把话写清楚,比某些技术文档更易懂。「Time Machine」和「时间机器」,我反而更倾向于「时间机器」这类官方译名。
总结
五月中旬拿到机器,这篇文章边做边写,动笔后半个月才面世。
既是介绍 Gen10 的各种功能,也是为自己留一份笔记,文章显得不专业且细碎,还请见谅。
除了感谢杰哥容忍我的 nooby 与骚扰外,相较于编程开发,也大多是在黑箱里摸索配置文件的配置,并没有真的「开发」出什么功能。对于并非专业运维、开发者的我来说,缺少图形界面的 Linux 有时候看起来是黑箱,但多请教多查询好像没有什么真的理解不了的功能。群晖这类成品 NAS 提供了丰富的用户界面和应用,也多是从 Samba 这类的 FOSS 二次开发而来。ASUSWRT 那些难用得要死、功能又不满足需求的图形界面(有时候真想一行命令就解决问题),实在是不值那些价钱。
当然,在这个在家办公成为主流,家庭网络要求越来越高的时代与自己给自己当产品经理排需求、配置与实现的苦劳中,进一步感受了疫后世界真实用户的需求与 FOSS 自由与 UX 这个不可兼得的、难解的问题,而且对服务设计、XaaS 这类产品设计上的概念,有了一些新的体会。
以后会继续往服务器添新功能,之后的文章再说吧。
本文更新日志
- (多次补充,日期略)更新 miniDLNA、yt-dlp
- (2022.6.19)更新 GUN Parted 重置超大(> 2TB)硬盘的步骤
- (2023.6.12)更新 merdok/homebridge-miot 的自定义部署步骤
核核的文笔真好,读起来很舒服。
如果还有折腾之力的话,也许可以考虑先装一层虚拟机然后再搞各种服务(哪怕有且只有一台虚拟机),毕竟这服务器本体重启实在是太慢了…
谢谢鼓励~
已经懒得折腾了,重启速度感觉还凑合?
诶我发现你的评论回复好像没有邮件提醒。是不是 WordPress 的邮件没配对?
研究了一下,可能要过一段时间才会上线了 XD