fnOS 是基于 Debian 定制的 NAS 系统,初始配置与原生 Debian Server 区别不大。但 可能是出于后续扩展或定制的考虑, fnOS 移除了部分非核心功能,例如不支持为用户创建 home 目录、不支持静态路由配置等。因此,参考《Debian Server 初始化设置 SOP》的流程,我也整理了一份适用于 fnOS 的初始化配置记录,供后续使用。
SOP,即 Standard Operating Procedure,意为「标准作业程序」。
准备工作
在你成功安装并启动 fnOS、创建第一个存储空间后,即可开始接下来的配置。 但在开始之前,需要做一些基础的准备工作。
首先,开启 fnOS 的 SSH 功能。默认 SSH 端口为 22
,你可以此时将其修改为如 2662
这类 不常见 且 未被系统占用 的端口。
接着,登录 SSH。fnOS 默认禁止用户使用 root
账户登录,因此我们使用安装 fnOS 后创建的第一个用户来登录 SSH。
在终端中使用以下命令登录:
ssh mikusa@192.168.31.123 -p 2662
系统配置
进入终端后,先将当前用户设置为变量,方便后面使用:
USERNAME=mikusa
SUDO免密
使用 visudo
配置当前用户可以无需输入密码执行 sudo
命令:
sudo visudo
滚动到 最后 添加以下内容,mikusa
为你的用户名:
mikusa ALL=(ALL) NOPASSWD: ALL
CTRL+X 保存退出。
注意要将这段配置加在组规则的后面,以免被组规则覆盖。
用户目录
fnOS 没有像 DSM 那样有个创建「家目录」的配置项,也可能是 fnOS 并没有计划引入这个概念。因此,为了顺利配置 ZSH,我们需要手动创建用户的家目录:
sudo mkdir /home/$USERNAME
授予权限:
sudo chown $USERNAME:Users /home/$USERNAME
软件源
fnOS 默认使用的是清华镜像源,非官方源,因此无需替换。但如果不想用清华镜像,也可以替换成科大或是别的镜像源。
科大:
sed -i.bak 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
阿里:
sed -i.bak 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
腾讯:
sed -i.bak 's/deb.debian.org/mirrors.tencent.com/g' /etc/apt/sources.list
静态路由
fnOS 尚不支持在网页端配置静态路由。如果有静态路由的需求,需要手动添加,例如:
sudo ip route add 11.0.0.0/8 via 192.168.31.4
但重启 fnOS 后命令就会失效,因此需要配置成系统服务自启动。
先创建脚本文件:
sudo vim /usr/local/bin/add-static-route.sh
粘贴如下内容并保存,自行更换目标网段,确保目标网段与网关 IP 是你实际环境所需的值:
#!/bin/bash
ip route add 11.0.0.0/8 via 192.168.31.4
添加权限:
sudo chmod +x /usr/local/bin/add-static-route.sh
接着创建服务:
sudo vim /etc/systemd/system/static-route.service
粘贴以下内容并保存:
[Unit]
Description=Add static route
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/add-static-route.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
随后,执行以下命令启用并启动该服务:
sudo systemctl daemon-reexec
sudo systemctl enable static-route.service
sudo systemctl start static-route.service
执行以下命令测试:
ip route | grep 11.0.0.0
如果有类似输出:
11.0.0.0/8 via 192.168.31.4 dev ens18
就说明配置成功,后续重启 fnOS 也可以自动添加静态路由。
QEMU Guest Agent
安装 QEMU Guest Agent 可以增强 fnOS 与宿主机(比如 Proxmox)之间的交互能力。如:IP 地址可以自动识别、运行状态更加精准,还可以使用「关机」而不是「强制关机」关闭虚拟机。
需要在虚拟机 选项 菜单中找到 QEMU Guest Agent 并设置为 启用,然后在 fnOS 终端中执行:
sudo apt update
sudo apt install qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
随后在 Proxmox 中重启虚拟机或直接刷新状态,就可以看到具体效果了。
用户配置
fnOS 的多用户功能我还没搞明白,不如说当前 fnOS 多用户的配置还处于十分早期的阶段,不像 DSM 有一套非常完善的配置流程。因此,本文的用户配置仅针对管理员用户。
SSH
创建 .ssh
文件夹并授权:
mkdir -p ~/.ssh && chmod 700 ~/.ssh && cd ~/.ssh
如果你已有 SSH 公钥,将其添加到 authorized_keys
文件中(替换下方内容为你的公钥):
echo 'ssh-ed25519 XXXXXXXXXXXXXXXXX' > authorized_keys
如果没有,可以使用 ssh-keygen -t ed25519
生成,并拷贝私钥至本地保存。
随后修改权限:
chmod 600 ~/.ssh/authorized_keys
接着修改 SSH 配置,关闭密码 & root 用户登录:
sudo sed -ri "s/^#?\s*PasswordAuthentication\s+.*/PasswordAuthentication no/" /etc/ssh/sshd_config
sudo sed -ri "s/^#?\s*PermitRootLogin\s+.*/PermitRootLogin no/" /etc/ssh/sshd_config
可以使用以下命令测试配置是否生效:
grep -E '^\s*#?\s*PasswordAuthentication\s+(yes|no)' /etc/ssh/sshd_config | \
grep -vq 'PasswordAuthentication no' && echo "❌ PasswordAuthentication 未禁用" || echo "✅ PasswordAuthentication 已禁用"
grep -E '^\s*#?\s*PermitRootLogin\s+(yes|no|prohibit-password|without-password)' /etc/ssh/sshd_config | \
grep -vq 'PermitRootLogin no' && echo "❌ PermitRootLogin 未禁用" || echo "✅ PermitRootLogin 已禁用"
如果输出
✅ PasswordAuthentication 已禁用
✅ PermitRootLogin 已禁用
则代表配置成功。
接着新开一个终端,使用密钥方式测试 SSH 登录是否成功。测试成功后,再执行:
sudo service sshd restart
重载 SSH 配置。
ZSH
安装 zsh 和 autojump:
sudo apt install zsh autojump -y
安装后会提示切换到 zsh,接着使用官方脚本一键安装 ohmyzsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
如果网络不顺,可以使用清华镜像源安装:
git clone https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git
cd ohmyzsh/tools
REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git sh install.sh
再安装一些 zsh 必要插件。这里就没有啥靠谱镜像了,请自备代理或自查镜像源:
git clone https://github.com/zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
将插件添加到配置中。先备份一下原始文件:
cp ~/.zshrc ~/.zshrc.bak
追加插件:
sed -i.bak 's/plugins=(\(.*\))/plugins=(\1 autojump zsh-autosuggestions zsh-syntax-highlighting docker docker-compose)/' ~/.zshrc
重载 ZSH:
source ~/.zshrc
可以尝试使用 powerlevel10k 主题:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
修改 .zshrc
中的主题配置:
sed -i 's/^ZSH_THEME=.*/ZSH_THEME="powerlevel10k\/powerlevel10k"/' ~/.zshrc
重载配置:
source ~/.zshrc
这时会弹出配置流程,全英文的。如果实在不知道咋配置,随便瞎按一通后,下载 C佬 提供的预配置 p10k 替换:
wget -O ~/.p10k.zsh https://gist.githubusercontent.com/Xm798/9afccda2e2b26b913854d36c96438344/raw/9acd0a1316895b6bc5485af043d38025f54926bd/.p10k.zsh
再 source ~/.zshrc
重载 zsh,确认插件与主题已生效。
另外,需要预先安装 Nerd-Fonts 字体,才能获得最佳的图标显示效果。由于我用得不多,使用的是 CodeNewRoman Nerd Font Mono
字体,你可以点击 这里 直接下载压缩包,或从 Nerd Fonts 项目中选择你喜欢的字体。解压后全部安装进系统。
在 Windows 终端中把这个字体加上。
显示效果大概是这样:
DOCKER
如果需要在终端中直接使用 docker
命令,先将当前用户加入 docker 用户组:
usermod -aG docker $USERNAME
才能正常使用 docker
以及 docker compose
相关的命令。
CODE SERVER
如果不方便直接使用终端通过 SSH 连接 Linux 主机,可以尝试安装 code-server,这样就可以通过网页版 VS Code 远程操控主机。在 code-server 的内置终端中连接宿主机 SSH,即可获得几乎等同于本地 VS Code 的使用体验。
先安装 code-server:
services:
code-server:
image: linuxserver/code-server:latest
container_name: code-server
ports:
- 8443:8443
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- PASSWORD=${PASSWORD} #可选
- HASHED_PASSWORD= #可选
# - SUDO_PASSWORD=password #可选
# - SUDO_PASSWORD_HASH= #可选
# - PROXY_DOMAIN=code-server.my.domain #可选
# - DEFAULT_WORKSPACE=/config/workspace #可选
volumes:
- ./config:/config
- ${WORKSPACE_PATH}:/config/workspace #默认工作目录
- /vol1/1000/docker:/docker #其他需要操作的文件夹都可以挂载进来
restart: always
- 端口默认是
8443
,有需要可以修改 - fnOS 第一个用户的
PUID
和PGID
分别是1000
、1001
- 为
PASSWORD
变量设置一个密码,用于 Web 登录,尽量随机并复杂 - 默认的工作目录是容器内的
/config/workspace
,你可以将操作频繁的文件夹映射到这里,例如/home/mikusa
。这样启动 code-server 后,默认启动的便是这个文件夹
你可以在 compose.yml
同目录创建一个 .env
文件,存储这些变量:
PUID=1000
PGID=1001
TZ=Asia/Shanghai
PASSWORD=Your_Password_Here
WORKSPACE_PATH=/home/mikusa
如果有反向代理的需求,可以参考以下配置。
Caddy:
code.server.com {
reverse_proxy http://code-server:8443
}
Nginx:
#省略常规配置
location / {
proxy_pass http://code-server:8443;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持
proxy_http_version 1.1;
proxy_read_timeout 3600s;
}
可以使用 code-server 内置的终端连接宿主机,在本地映射到容器内 /config
的文件夹中,找到 .ssh
文件夹。然后像Windows本地连接远程主机一样,新建一个 config
文件,填入主机配置:
Host fnos
HostName 192.168.31.123
Port 2662
User mikusa
IdentityFile ~/.ssh/fnos
把私钥文件复制到 config
同级目录,修改权限,否则会报错:
chmod 600 ~/.ssh/fnos
远程主机配置过 p10k 主题后,code-server 可能因为缺少字体导致显示不正常,解决方法很简单。在本地安装 nerd font 字体后,在 code-server 设置中,添加字体家族名。例如:
'MesloLGM NF','CodeNewRoman Nerd Font Mono'
注意需要使用英文单引号包裹,使用英文逗号分隔多个字体。
以上。
文档参考
本文作者:mikusa
本文链接:https://www.himiku.com/archives/fnos-sop.html
版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
感觉自己改厂家魔改过的系统,还如不自己装个纯净版本的Debian。
纯净版本的Debian又太纯净了,飞牛凑合用 ΦωΦ
Debian 太纯净,Ubuntu 又太脏,夹杂在中间的发行版又太乱。
所有Linux用户被逼疯后都跑去用Arch。 (ó﹏ò。)
是时候用 macOS 了!何尝不是一种 Linux
macOS不是不仅更脏,而且更受限么233。
但是 M4 的 Macmini 功耗又低,性能又强,还上了国补,非常适合当 NAS 用诶
就是成本有亿点高……
插外置硬盘盒的玩意你就不该叫这玩意NAS。