Skip to content

VServer

系统状态

系统的实时状态可以在 Vlab 的 GrafanaiBug 的 Grafana 上查看。

首先通过 SSH 登录机器,如果能够正常登录,那么就可以开启 VNC server 和 SSH 转发了。

登录地址
直连地址

IPv4(1):202.38.75.1 22(SSH 标准端口)

IPv6:2001:da8:d800:75::224 22(SSH 标准端口)

Vlab 转发地址和端口

202.38.75.252 224

建议优先使用直连地址,校外优先尝试 IPv6,避免经过 Vlab 机房(有奇怪的防火墙设备降低网络质量)。

运行在主机上的服务只能通过直连地址访问,Vlab 转发只能用于 SSH 登录。

  1. 需要登录网络通才能从校外访问

VNC 登录

首先在登录的 SSH 会话中运行 vncserver-ibug,这个我写的脚本会开启 VNC server 并让它监听一个 Unix socket。这样做的好处是,只有正确的用户才能连接到 VNC server,而不是所有人都能连接,也不需要纠结 TCP 防火墙了。

脚本内容

November 24, 2023

/usr/local/bin/vncserver-ibug
#!/bin/sh

exec /usr/bin/vncserver \
  -rfbport -1 \
  -rfbunixpath "$HOME/.vnc/sock" \
  -SecurityTypes None \
  "$@"

其中 vncserver 命令由 tigervnc-standalone-server 软件包提供。

开启 SSH 转发

这里给出 OpenSSH 的命令行和配置文件,其他软件的配置请自行查阅文档。

使用命令行:ssh user@host -L 5900:/home/user/.vnc/sock,注意替换 user 和 host。

使用配置文件:

~/.ssh/config
Host vserver
  HostName 202.38.75.1
  #Port 22 # 标准端口无需指定
  User user
  LocalForward 5900 /home/user/.vnc/sock
~/.ssh/config
Host vserver
  HostName 2001:da8:d800:75::224
  #Port 22 # 标准端口无需指定
  User user
  LocalForward 5900 /home/user/.vnc/sock
~/.ssh/config
Host vserver
  HostName 202.38.75.252
  Port 224
  User user
  LocalForward 5900 /home/user/.vnc/sock

然后 ssh vserver 即可。

开启压缩

如果从校外连接,可以开启压缩以减少带宽占用并提升体验。ssh 命令行参数为 -C,配置文件内的选项为 Compression yes

使用 VNC 连接

下载 TigerVNC 客户端:官方 SourceForge 或者从 Vlab 下载

打开 VNC Viewer,输入 localhost:5900,点击 Connect 即可登录。

过时信息,留作存档

VNC 连接默认给了一套空的桌面配置,比如 Dock 是不显示的,建议开启各类 GNOME Shell Extensions 来提高体验。

点击左上角 Activities,打开 Extensions Manager,然后在其中打开所有的开关,如图所示:

image

关闭自动锁屏

进入设置 → Power,将自动熄屏的时长设为最后一个选项 Never。

故障排除

VNC server 无法启动

先尝试删除 ~/.Xauthority~/.vnc/sock 两个文件。

如何重启 VNC server

首先查看 ~/.vnc 下的文件,例如 VServer:8.pid,对每个 .pid 结尾的文件取冒号和它后面的数字,并运行:

vncserver -kill :8

然后再运行 vncserver-ibug 启动即可。

锁屏无法解锁

先在锁屏界面向下划,确保你能看到时间和日期,而不是你的用户名和一个输入密码的框。(这个框不知道怎么回事,无法输入)

然后在你的 SSH 命令里运行 loginctl unlock-sessions,并输入密码(如果问你要了的话),旁边的锁屏界面应该立刻就解锁了。

系统设置修改记录

Sysctl 参数

  • January 9, 2024 kernel.panic = 30
  • May 7, 2024 net.ipv4.tcp_congestion_control = bbr

解决 Dock 和菜单栏等问题

December 4, 2023

VNC 默认开了一个最简的 GNOME shell,而不是 Ubuntu 的调整过的桌面环境。网上搜了一圈只有这唯一一个回答答到点子上了,所以解决方法是加一行:

/etc/tigervnc/vncserver-config-defaults
$session = "ubuntu";

然后重启现有的 VNC server,新开的 server 就能使用完整版的 Ubuntu 桌面环境了。

实际修改

为了避免软件包更新配置文件覆盖了我们自己的修改,我实际的操作是先把软件包提供的文件给 divert 掉,再在原地创建新的文件。

dpkg-divert --rename --divert /etc/tigervnc/vncserver-config-defaults.dpkg-divert --add /etc/tigervnc/vncserver-config-defaults
/etc/tigervnc/vncserver-config-defaults
$session = "ubuntu";
1;

自动开机

January 7, 2024

请 taoky 帮忙修改了 BIOS 设置,开启了各种状态下的自动开机设置:

  • 「高级 → 电源管理设置 → AC 电源掉电再来电的设置」设为「开启」
  • 「高级 → 唤醒事件设置 → 即时(RTC)闹铃唤醒」设为「开启」,时间设为(凌晨)4:00:00
    • 并且在系统内运行 timedatectl set-local-rtc 1 --adjust-system-clock 将 BIOS 时间改成本地时间(默认为 UTC 时间)
  • 「高级 → 唤醒事件设置 → PCIE / Networking 设备唤醒」设为「开启」(也就是 Wake on LAN,见下)

Wake on LAN

参考 Ubuntu Wiki 检查网卡的 WoL 设置,发现网卡默认的参数是 Wake-on: d(禁用),需要在每次开机后启用。再参考 Netplan 的设置写了一个脚本,在网卡上线后自动启用 WoL:

/etc/networkd-dispatcher/routable.d/99-wol
#!/bin/sh

case "$IFACE" in
  en*|eth*) ;;
  *) exit 0;;
esac

/usr/sbin/ethtool -s "$IFACE" wol pumbg

重启再关机,从旁边机器上测试 etherwake -i ustcnet d8:43:ae:16:41:62,机器可以正常开机。

屏蔽无线网卡

January 9, 2024

无线网卡是主板板载的 AX211,不能“拔下来”,我们选择在系统内屏蔽它的驱动(内核模块)。

/etc/modprobe.d/ban-wifi.conf
blacklist iwlwifi
install iwlwifi /bin/false

保存然后 modprobe -r iwlwifi 即可。

所有用户共用一个组

April 20, 2024

排查 SSH 登录问题的时候发现 home 目录和 .ssh 目录容易出现权限问题,因此将所有用户的组都改成了 users(Debian 默认为 users 组指定了 GID = 100),并修改了 adduser 的设置使其默认不再创建用户的同名组。

/etc/adduser.conf
USERGROUPS=no
USERS_GID=100

Fail2ban 白名单

April 27, 2024

服务器不在 420 时需要通过 WireGuard 连上 Vlab 网关,然后 Vlab 网关才能做端口转发。在动态 IP 环境下配策略路由比较麻烦,因此在端口转发的时候隐藏了源地址,这会导致 SSH 看到的所有连接都是来自 Vlab 网关,从而触发 Fail2ban。因此我们需要修改 Fail2ban 的配置,将 Vlab 网关加入白名单。

/etc/fail2ban/jail.d/defaults-debian.conf
[sshd]
enabled = true
ignoreip = 127.0.0.0/8 192.168.252.1

420 网络问题

April 1, 2024 下午 15:33 左右学校交换机重启,16:51 后限速约 500M,持续至今。

April 15, 2024 编写了 login-wlt 命令,使用 NYA 的账号登录网络通。

May 1, 2024 跑了一趟 420 线下,把桌上的上游接口直接接在主机上测速,没有变化,遂联系网络中心老师协助排查。

May 6, 2024 网络中心老师联系西区工程师,确认接口被限速 480M,原因是之前跑满了上传,而整层楼只有 1G 上联,导致隔壁办公室老师报修。

May 7, 2024 网络中心更换了这台交换机,换上了拥有 10G 上联的新交换机,网络速度恢复正常。

迁移 rootfs 到 ZFS

May 13, 2024

利用旁边空闲的固态,先建好 ZFS pool 和所需的结构:

zpool create -o ashift=12 pool0 /dev/nvme1n1
zfs set compression=zstd xattr=sa relatime=on pool0

zfs set       canmount=off       mountpoint=/mnt/new pool0
zfs create -o canmount=off    -o mountpoint=none     pool0/ROOT
zfs create -o canmount=noauto -o mountpoint=/mnt/new pool0/ROOT/ubuntu
zpool set bootfs=pool0/ROOT/ubuntu pool0

zfs create pool0/data
zfs create pool0/home
for user in /home/*; do
  zfs create pool0$user
done
zfs create pool0/nix
zfs create pool0/opt
zfs create -o canmount=off pool0/var
zfs create -o canmount=off pool0/var/lib
zfs create pool0/var/docker

zfs set acltype=posix pool0/ROOT/ubuntu pool0/var/lib/docker

倒腾数据:

rsync -avSHAXx --delete / /mnt/new/

重新整一下 EFI 分区(它居然有 2 GB),把内核和 initrd 放上去:

# 忽略所有错误
rsync -ax /boot/ /boot/efi/

umount /boot/efi
vim /etc/fstab
# 把 /boot/efi 改成 /boot
mount /boot

(此处再倒腾一遍数据)

准备更新 grub:

mount -o bind /boot /mnt/new/boot
arch-chroot /mnt/new
update-grub
# 检查 /boot/grub/grub.cfg 确保能看到 root=ZFS=pool0/ROOT/ubuntu

重启,确认 rootfs 已经是 ZFS 了,完工。

后续

May 16, 2024

apt 更新内核的时候报错建立软链接失败,所以重新把 /boot 分区拆成了 /boot (ext4) + /boot/efi (vfat) 两个分区,其中 EFI 分区划了 512M,剩下的给 /boot

升级到 Ubuntu 24.04

插上显示器,发现桌面环境工作正常,打开终端 ip a 只看到 lo, virbr0docker0 三个网卡,主网卡 eth1 不见了。lspci 确认设备没问题,但是 modinfo igc 发现没有这个模块。靠 dpkg -S 查到这个模块是 linux-modules-extra-* 提供的,但是我们之前安装的是 linux-generic-hwe-22.04,系统更新时没有自动替换为 linux-generic-hwe-24.04(或者 linux-generic),所以这个额外的驱动包没装上,就没法把这块 I225-V 的网卡驱动起来。

解决方法就是装上 linux-generic,然后就有 igc.ko 了。但是重启后发现 eth1 还是未配置状态,反而 GNOME 界面的 NetworkManager 有反应(本来网络应该是由 systemd-networkd 管理的)。

排查一圈后发现 Ubuntu 24.04 桌面版又加了个私货,用 NM 管理所有网络,把多出来的配置文件处理掉再 netplan apply 即可:

dpkg-divert --rename --divert /lib/netplan/00-network-manager-all.yaml.dpkg-divert --add /lib/netplan/00-network-manager-all.yaml