Ubuntu 26.04 基础及进阶配置步骤
categories: 技术 tags: Linux, NASUbuntu 26.04 基础及进阶配置步骤
我在过去的几年一直很讨厌 Ubuntu,一方面是我不喜欢 Ubuntu 曾经的深黄色配色,也不喜欢总体弹出的“内部错误”弹窗;另一方面是 Ubuntu 强推的 Snap 真的很影响用户体验。因此从 Ubuntu20.04 版本开始,我就再也没有用过 Ubuntu。
那么这次发布的 Ubuntu26.04 吸引我的点在哪里?让我产生想要试用一下想法的是——默认使用 sudo-rs 以及 Resources 这个软件,Resources 查看系统状态真的非常美观。
最开始也仅仅是想要体验一下,但安装好并体验一天之后之后,我决定保留它的安装,近期用它来做副 NAS 的操作系统。
但在此之前,我们还是得进行一些优化操作。
卸载 Snap 并禁止软件自动安装 Snap
Snap 是必须卸载的,因为它会引起很多内部错误,以及阻止系统正常关机,需要人为干预物理机器,即便是偶尔一次也很烦人。
首先禁用 Snap 服务,这一步可选,后面卸载过程也会自动帮你禁用这些服务
# 禁用开机自启服务
sudo systemctl disable snapd.service
sudo systemctl disable snapd.socket
sudo systemctl disable snapd.seeded.service
查看一下当前已安装的 Snap 软件
# 查询已安装的Snap软件
snap list
-----------------------------------
名称 版本 修订版本 追踪 发布者 注记
bare 1.0 5 latest/stable canonical✓ base
....
大概有十来个软件。这些软件之间存在依赖关系,需要按顺序卸载。但我懒得去了解这些软件的依赖关系,直接一键暴力卸载,多卸载几次就行了。
for p in $(snap list | awk '{print $1}'); do
sudo snap remove $p
done
把以上代码多运行几次,知道运行后输出 No snaps are installed yet. Try 'snap install hello-world',就可以了,大概需要执行 3 次。
删除 Snap 的 Core 文件
sudo systemctl stop snapd
sudo systemctl disable --now snapd.socket
for m in /snap/core/*; do
sudo umount $m
done
删除 Snap 的管理工具
sudo apt autoremove --purge snapd
删除 Snap 的目录
rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd
sudo rm -rf /var/cache/snapd
然后禁止任何依赖 Snap 的软件被安装
sudo sh -c "cat > /etc/apt/preferences.d/no-snapd.pref" << EOL
Package: snapd
Pin: release a=*
Pin-Priority: -10
EOL
sudo sh -c "cat > /etc/apt/preferences.d/no-firefox.pref" << EOL
Package: firefox
Pin: release a=*
Pin-Priority: -10
EOL
这个操作是利用了 apt 的原理,优先级为负数的软件包一定不会被安装。
验证一下是否移除:
sudo apt update
# 应当是 command not found
snap version
# 应当是 Unit snapd.socket could not be found.
systemctl status snapd.socket
Snap 卸载之后,还可以顺便卸载烦人的 Apport
sudo apt purge apport
桥接网络与 KVM 安装
以下内容来自:Ubuntu 26.04 LTS 代替 PVE!原生桌面轻办公 + 核显 SR-IOV,带你完美部署飞牛 Nas、HAOS 和 OpenWrt、AIO 终极形态
- 删除原有物理连接配置
nmcli connection delete netplan-enp2s0
解释:剥夺系统自带网络管理器(如 netplan)对物理网卡(enp2s0)的默认控制权。防止稍后创建网桥时发生网络接口冲突。
- 创建并配置网桥接口(br0)
nmcli connection add type bridge ifname vmbr0 con-name vmbr0 bridge.mac-address <网卡MAC地址>
解释:在系统中创建一个名为 br0 的虚拟网桥接口。核心关键点是强制绑定网桥的 MAC 地址为物理网卡的 MAC,这样可以欺骗上层路由,防止宿主机获取到新的 IP 地址导致 SSH 断联。
- 将物理网卡绑定为网桥的从属接口(Slave)
nmcli connection add type ethernet ifname enp2s0 master vmbr0 con-name bridge-slave-enp2s0
解释:将原本独立工作的物理网卡(enp2s0)降级为网桥 br0 的从属端口。物理网卡失去独立的 IP 分配能力,仅作为物理链路层(L2),负责在网桥和外部网络之间转发以太网帧。
- 激活配置并重启网络服务
nmcli connection up vmbr0
nmcli connection up bridge-slave-enp2s0
systemctl daemon-reload
systemctl restart NetworkManager
解释:依次拉起新建的网桥接口和从属物理接口,最后重启 NetworkManager 服务重载路由表。至此,宿主机和后续新建的虚拟机,都将统一通过 br0 网桥获取 IP 并访问外网。
有多张网卡的话,配置方法也是一样的,比如第二张网卡有自己的 MAC 地址,Ubuntu 下网卡名称一般是 enp4s0,桥接接口一般命名为 vmbr1,修改命令中对应的配置即可。
配好之后,使用 ip a 查看:
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UP group default qlen 1000
link/ether 00:8e:25:73:05:f4 brd ff:ff:ff:ff:ff:ff
altname enx008e257305f4
3: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 00:e0:4c:c3:01:d6 brd ff:ff:ff:ff:ff:ff
altname enx00e04cc301d6
4: vmbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 00:e0:4c:c3:01:d6 brd ff:ff:ff:ff:ff:ff
5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:8e:25:73:05:f4 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.111/24 brd 10.0.0.255 scope global dynamic noprefixroute vmbr0
......
valid_lft forever preferred_lft forever
新建的 vmbr 接口能够获取到 IP 即可。
随后安装 KVM,sudo apt install virt-manager 安装虚拟机管理器,会附带安装一堆依赖,然后执行以下命令,重启
sudo systemctl enable libvirtd
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
打开虚拟机管理器,能连上即可。
新建虚拟机时,可以添加刚刚创建出的桥接网络,也可以添加默认的 NAT 网络,看自己的需求,也就是需不需要独立 IP 地址。
6: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:56:1d:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
坑人的 AppArmor
AppArmor 是 Ubuntu 自带的程序权限控制软件,有点像 Selinux 但没有 Selinux 那么严格(Selinux 严格到你不得不关了 Selinux,也算是一种黑色幽默吧)
在我的日常使用体验中,我不太感受到 AppArmor 的存在,只在 Transmission 上面遇到了一次需要手动授权数据目录的情况。
这一点非常坑,由于 Transmission 无法读取你的数据目录,导致所有的做种都被标记为丢失,可能导致你需要重新校验所有的种子。如果你有备份种子的状态,那还好说,还原一下就好,如果没有备份,那可就惨咯。
AppArmor 是个功能很强大的软件,没有办法在这一一说明它的功能,这里就简单提一下 Transmission 如何配置目录权限。
❯ pwd
/etc/apparmor.d
❯ ls | grep trans
transmission
AppArmor 的配置目录在 /etc/apparmor.d,打开 transmission 配置文件,找到这两行:
/usr/share/transmission/web/** r,
/usr/share/transmission/public_html/** r,
可以看到这里允许 transmission 访问他自己的前端代码。
在下面添加几行授权下载目录即可:
/vol-mfs/ r,
/vol-mfs/视频/ r,
/vol-mfs/视频/PT/** rwk,
当然,如果你要使用其他的前端,也需要将前端所在的目录位置添加进去。
(如果实在懒的配置,直接禁用 AppArmor 也未尝不可)
目前我装的软件就遇到这一个需要手动配一下的情况。
远程登陆
GNOME 46 推出了基于 RDP 协议的远程登陆功能,非常强,并且对 Wayland 有完整的支持,很适合用来做远程管理。

可以直接使用 Windows 远程桌面、或任何支持 RDP 协议的第三方软件连接使用,用起来非常流畅,文件也可以直接复制到主机上。
缺点和 Windows 一样,只能有一个用户同时登陆。
新版 Nginx 安装
apt 源里面的 Nginx 都比较旧,因此建议添加官方源,安装最新版 Nginx
为了确保软件包的安全性,需要先下载并添加 Nginx 的 GPG 密钥:
curl -fSsL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
执行以下命令验证 GPG 密钥:
gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
添加 Nginx 官方软件源:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
尝试一下
sudo apt update
sudo apt install nginx
如果版本是最新版,就可以了,如果现实还是旧版,就配置一下优先级。
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
# 输出
Package: *
Pin: origin nginx.org
Pin: release o=nginx
Pin-Priority: 900
新版 Docker 安装
每个基于 Debian 的发行版,Docker 版本都挺老的,有时候很影响使用,因此建议安装官方 Docker。
以下内容来自 Docker 官方安装教程
# 添加 Docker 官方 GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库到 Apt 源:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
安装官方 Docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo systemctl status docker