当前阶段:
VM 验证成功
此文章仅适用于支持 UEFI 启动的计算机
概述
目标
使用 Debian, 打造一个高度可自定义,完全可控的 路由、NAS、计算 一体机。为了极致的压榨设备性能,方案将杜绝 PVE、ESXi 等虚拟化方案,采用原汁原味的 Linux 生态,必要时采用容器化进行隔离。
起源
- 没有钱,不足以支撑我买多台设备,所以来玩 All in One
- 成品路由的功能太少,还不好自定义
- OpenWRT 的拨号在部分环境下会失败(eg: 校园网)
架构
系统架构
- 宿主机使用 Debian Testing 系统
- Arch Linux 更新过于频繁
- Debian sid 和 Arch Linux 滚的频率差不多
- Debian Stable 的软件太老,存在配置兼容问题
- 与网关核心功能相关的服务直接运行在 Debian 上
- 其他服务运行在 podman 或 k3s 上
- 由于 podman/k3s 会修改防火墙设置,使用 LXC 进行隔离
- 为了极致压榨设备性能,此方案将杜绝一切虚拟化,将采用容器化方案
网络架构
- 通过 eth0 接口,使用 PPPoE/DHCP 协议获取IP
- 使用 nftables 实现 NAT
- 创建 br-lan 网桥供 LAN 侧使用
- eth1/2/3 绑定至 br-lan
- LXC 容器也通过 br-lan 上网
存储方面
- 系统/数据隔离
- 系统采用 xfs
- 数据采用 zfs,开启压缩与数据去重
安装系统
进入 Arch Linux LiveCD
- 从下列链接中任选一个,下载
archlinux-xxxx.xx.xx-x86_64.iso,烧录至U盘 - 将U盘插入目标计算机,启动U盘内的 LiveCD
- 注意:需要关闭主板的安全启动
安装前的准备工作
远程安装
- Arch Linux 的 LiveCD 默认开启 sshd 服务,可远程 ssh 登录后进行安装 (方便复制粘贴指令)
- 使用
passwd设置 root 用户密码 - 使用
ip addr查看本机 IP 地址 - 在其他计算机通过
ssh root@<IP>登录
设置镜像及安装 debootstrap
设置镜像
1echo 'Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch' | \ 2tee /etc/pacman.d/mirrorlist安装 debootstrap
1sudo pacman -Sy debootstrap
对磁盘分区
- 分区表要求: GPT
- 引导分区要求:
- 格式: vfat
- 大小: 128MB+
- 系统分区要求:
- 格式: ext4 或 xfs 或 btrfs
- 大小: 4GB+
若磁盘无数据可按照下列操作方式进行分区:
- 假设磁盘为
/dev/sda(可用fdisk -l查看)
- 使用 fdisk 打开磁盘:
fdisk /dev/sda- 创建新 GUID 分区表:
g- 创建引导分区:
n->1->留空->+256M- 更改分区类型:
t->1- 创建系统分区:
n->2->留空->留空- 保存并退出:
w格式化:
mkfs.vfat /dev/sda1mkfs.xfs /dev/sda2
挂载分区
- 将磁盘路径写入环境变量,节省输入量
1export ESP="/dev/sda1"
2export ROOTFS="/dev/sda2"
- 挂载
1mount $ROOTFS /mnt
2mkdir -p /mnt/boot/efi
3mount $ESP /mnt/boot/efi
使用 debootstrap 安装系统
1# debootstrap --arch <ARCH> <BRANCH> <ROOTFS> <REPO_URL>
2# ARCH: i386 amd64 arm64 armel armhf mipsel mips64el pcc64el s390x
3# BRANCH: experimental sid testing stable buster bullseye bookworm
4
5debootstrap --arch amd64 testing /mnt https://mirrors.bfsu.edu.cn/debian
生成 fstab
1genfstab -U /mnt >> /mnt/etc/fstab
配置系统
chroot 进入系统
1arch-chroot /mnt
设置 Debian 镜像源
1export MIRROR_URL="http://mirrors.bfsu.edu.cn"
2export BRANCH="testing"
3export COMPONENT="main contrib non-free non-free-firmware"
4
5echo "deb ${MIRROR_URL}/debian/ ${BRANCH} ${COMPONENT}
6deb ${MIRROR_URL}/debian/ ${BRANCH}-updates ${COMPONENT}
7deb ${MIRROR_URL}/debian-security/ ${BRANCH}-security ${COMPONENT}" | \
8tee /etc/apt/sources.list && apt update && apt install ca-certificates
9
10export MIRROR_URL="https://mirrors.bfsu.edu.cn"
11
12echo "deb ${MIRROR_URL}/debian/ ${BRANCH} ${COMPONENT}
13deb ${MIRROR_URL}/debian/ ${BRANCH}-updates ${COMPONENT}
14deb ${MIRROR_URL}/debian-security/ ${BRANCH}-security ${COMPONENT}" | \
15tee /etc/apt/sources.list && apt update
安装必要软件包
1apt install -y efibootmgr sudo locales xfsprogs
设置主机名
1export HOST_NAME="router"
2
3echo "${HOST_NAME}" | tee /etc/hostname
4echo "127.0.0.1 localhost
5::1 localhost
6127.0.0.1 ${HOST_NAME}" | tee /etc/hosts
设置时区和语言
1ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2
3sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
4sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/g' /etc/locale.gen
5
6/usr/sbin/locale-gen
7echo 'LANG="zh_CN.UTF-8"' | tee /etc/locale.conf
添加用户
1export NEW_USER="admin"
2
3/usr/sbin/useradd -m -U -G sudo ${NEW_USER}
4passwd ${NEW_USER}
安装内核及引导
- 安装内核
1apt install -y linux-image-generic
- 创建 post-update 脚本 (看不懂没关系 复制、粘贴、 执行 就行了)
1mkdir -p /boot/efi/EFI/Debian/
2
3echo '#!/bin/sh
4cp /vmlinuz /boot/efi/EFI/Debian/' | \
5tee /etc/kernel/postinst.d/zz-update-efistub | \
6tee /etc/kernel/postrm.d/zz-update-efistub
7
8chmod +x /etc/kernel/postinst.d/zz-update-efistub
9chmod +x /etc/kernel/postrm.d/zz-update-efistub
10/etc/kernel/postinst.d/zz-update-efistub
11
12mkdir -p /etc/initramfs/post-update.d
13echo '#!/bin/sh
14cp /initrd.img /boot/efi/EFI/Debian/' | \
15tee /etc/initramfs/post-update.d/zz-update-efistub
16
17chmod +x /etc/initramfs/post-update.d/zz-update-efistub
18/etc/initramfs/post-update.d/zz-update-efistub
- 添加 EFIStub 启动项
1export UUID=$(/usr/sbin/blkid -s UUID -o value $ROOTFS)
2efibootmgr -c -g -L "Debian" -l '\EFI\Debian\vmlinuz' \
3 -u "root=UUID=$UUID rw loglevel=3 rootfstype=xfs add_efi_memmap initrd=\\EFI\\Debian\\initrd.img"
[选] 开启 DHCP 客户端和 SSH 服务
- 启用 DHCP 获取 IP
- 通用配置,临时使用,后续配置网络时会删除
- 编辑
/etc/systemd/network/01-dhcp.network - 填写以下内容
1[Match] 2Name = e* 3 4[Network] 5DHCP = yes- 一键脚本
1echo "[Match] 2Name = e* 3 4[Network] 5DHCP = yes" | tee /etc/systemd/network/01-dhcp.network - 设置开机自启
1systemctl enable systemd-networkd
- 启用 SSH 服务器
- 对于 Debian,安装默认自启
1apt install -y openssh-server
- 对于 Debian,安装默认自启
退出并重启
1exit
2reboot
![Featured image of post Debian 网关 [Episode 01]: 安装系统](/post/5c44d276/cover_hue7d633b2d7f5b1b6e95a4af2800a9c85_31928_800x0_resize_box_3.png)