咸鱼300收了个锐角云,开始折腾这个电子垃圾。

安装 Proxmox

PVE 当然是人见人爱的好东西,但是 PVE 的 Installer 有个问题,他不支持在锐角云内置的EMMC上安装。解决方案一是先安装Debian,然后按官方的教程从 Debian 升级到 PVE。

但是我今天就是要用 PVE 的 Installer 呢?因为 PVE 支持的一些特性,比如 ZFS 在安装 Debian 的时候是很难实现的。可否通过修改 Installer 来安装呢?可以的。

首先下载 PVE 的 ISO,刻录到 U 盘或者用 Ventoy, 插上锐角云,开机按 F7,选择 U 盘启动(这玩意还默认UEFI)。在 GRUB 界面,选择 Install Proxmox (Debug Mode)

然后在启动过程第一次被打断的时候,按 Ctrl + D 继续,在第二次被打断的时候,输入 vi /usr/bin/proxinstall, 将

    } elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
        return "${dev}$partnum";
    } elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
        return "${dev}p$partnum";
    } else {
        die "unable to get device for partition $partnum on device $dev\n";
    }

改为

    } elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
        return "${dev}$partnum";
    } elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
        return "${dev}p$partnum";
    } elsif ($dev =~ m|^/dev/mmcblk\d+$|) {
        return "${dev}p$partnum";
    } else {
        die "unable to get device for partition $partnum on device $dev\n";
    }

即可识别到内置的 EMMC 并安装。

开启 VT-D

使用 ZFS 的 PVE 无法使用这一方法

因为使用 ZFS 的 PVE 使用的是 systemd-boot,而不是 GRUB,而且我试了一下,很难修改过来。

VT-D 是 Intel 提供的一种虚拟化技术,主要用来提供 IOMMU 虚拟化,PCI 直通等功能。

锐角云的 BIOS 界面默认并不提供这个功能的开关,但是它可以通过修改 UEFI 变量的方式来实现,具体可见 Cyberpunk2177/AcuteAngle,但是这里的方法有缺陷,因为锐角云没有 BIOS 电池,所以断电后变量会丢失,需要重新修改。安装 BIOS 电池是一种方法,但是我实在不想动手,有没有更简单的方法? 有。

  1. 首先下载这个 setup_var.mod, 然后将他丢入 /boot/grub/x86_64-efi/
  2. 修改 /etc/grub.d/00_header
echo -e 'echo "insmod setup_var"\necho "setup_var_3 0x49 0x01"' >> /etc/grub.d/00_header
  1. 修改 /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
  1. 生成新的 GRUB 配置
update-grub
  1. 重启两次,检查是否成功
root@pve:~# dmesg |grep DMAR
[    0.013559] ACPI: DMAR 0x0000000079AB7820 0000A8 (v01 INTEL  EDK2     00000003 BRXT 0100000D)
[    0.013695] ACPI: Reserving DMAR table memory at [mem 0x79ab7820-0x79ab78c7]
[    0.058291] DMAR: IOMMU enabled
[    0.204229] DMAR: Host address width 39
[    0.204233] DMAR: DRHD base: 0x000000fed64000 flags: 0x0
[    0.204251] DMAR: dmar0: reg_base_addr fed64000 ver 1:0 cap 1c0000c40660462 ecap 7e3ff0505e
[    0.204259] DMAR: DRHD base: 0x000000fed65000 flags: 0x1
[    0.204273] DMAR: dmar1: reg_base_addr fed65000 ver 1:0 cap d2008c40660462 ecap f050da
[    0.204281] DMAR: RMRR base: 0x00000079a32000 end: 0x00000079a51fff
[    0.204286] DMAR: RMRR base: 0x0000007b800000 end: 0x0000007fffffff
[    0.204293] DMAR-IR: IOAPIC id 1 under DRHD base  0xfed65000 IOMMU 1
[    0.204297] DMAR-IR: HPET id 0 under DRHD base 0xfed65000
[    0.204302] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.206605] DMAR-IR: Enabled IRQ remapping in x2apic mode
[    2.988101] DMAR: No ATSR found
[    2.988107] DMAR: dmar0: Using Queued invalidation
[    2.988119] DMAR: dmar1: Using Queued invalidation
[    2.994505] DMAR: Intel(R) Virtualization Technology for Directed I/O

这样就是成功了,如果只有一行

[    0.058291] DMAR: IOMMU enabled

说明没有成功,可以再重启一次试试。

每次断电重启之后需要再重启一次才能生效

安装 DSM 7

DSM 7的引导已经出了,怎么能不体验一下呢?

  1. 先下载这个 redpill-tool-chain,不想注册账号的话,请用 蓝奏云
  2. 安装 dockerjq
  3. 解压上面那个压缩包,进到目录里,执行
bash redpill_tool_chain.sh build apollolake-7.0-41890
bash redpill_tool_chain.sh run apollolake-7.0-41890
make build_all
  1. 构建完成之后,可以看到 images/ 下多了 redpill-DS3615xs_7.0-41222_b1630169731.img, 这就是启动镜像。而 cache 目录下有 ds3615xs_41222.pat, 这个不要删,后面还有用。
  2. 我们还要对启动镜像做一点修改,因为默认启动项是 USB,我们要把他改成 SATA。
sudo kpartx -a -v redpill-DS3615xs_7.0-41222_b1630169731.img
TEMP=$(mktemp -d)
sudo mount /dev/mapper/loop0p1 $TEMP
cd $TEMP
sudo vim boot/grub/grub.cfg

把两个 menuentry 调换一下位置,让 SATA 这个在前面

menuentry 'RedPill DS3615xs v7.0-41222 Beta (SATA, Verbose)' {
        set root=(hd0,msdos1)
        echo Loading Linux...
        linux /zImage mac1=001132929610 netif_num=1 earlycon=uart8250,io,0x3f8,115200n8 syno_hdd_powerup_seq=0 vid=46f4 synoboot_satadom=1 syno_hdd_detect=0 pid=0001 console=ttyS0,115200n8 elevator=elevator sn=1240PDN001375 root=/dev/md0 earlyprintk loglevel=15 log_buf_len=32M syno_port_thaw=1 HddHotplug=0 withefi syno_hw_version=DS3615xs vender_format_version=2
        echo Loading initramfs...
        initrd /rd.gz
        echo Starting kernel with SATA boot
}

menuentry 'RedPill DS3615xs v7.0-41222 Beta (USB, Verbose)' {
        set root=(hd0,msdos1)
        echo Loading Linux...
        linux /zImage mac1=001132929610 netif_num=1 earlycon=uart8250,io,0x3f8,115200n8 syno_hdd_powerup_seq=0 vid=46f4 syno_hdd_detect=0 pid=0001 console=ttyS0,115200n8 elevator=elevator sn=1240PDN001375 root=/dev/md0 earlyprintk loglevel=15 log_buf_len=32M syno_port_thaw=1 HddHotplug=0 withefi syno_hw_version=DS3615xs vender_format_version=2
        echo Loading initramfs...
        initrd /rd.gz
        echo Starting kernel with USB boot
}

然后就 sudo umount $TEMP, sudo kpartx -d -v redpill-DS3615xs_7.0-41222_b1630169731.img

将这个镜像上传到 PVE 备用。

  1. PVE 创建虚拟机,不用 CDROM, 创建硬盘 1G 大小即可,但需要为 raw 格式(LVM 用户无所谓),网络选择 Virtio

2021-08-29T13:42:02.png

2021-08-29T13:42:16.png

2021-08-29T13:43:20.png

  1. 先不要开机,在 Hardware 页面里面添加一个硬盘,这是真正的数据盘,按照你需要的大小创建。在 Option 里面,将 SATA0 设置为默认启动项。

2021-08-29T13:50:06.png

2021-08-29T13:50:31.png

  1. 如果你 PVE 用的是 Directory 模式的 storage,那么 cd /var/lib/vz/images/{虚拟机编号} 并将 vm-{虚拟机编号}-disk-0.raw 替换为之前构建的启动盘文件。如果你用的是 LVM,dd if=redpill-DS3615xs_7.0-41222_b1630169731.img of=/dev/mapper/pve-vm--{虚拟机编号}--disk--0
  2. 局域网内需要有 DHCP 服务器,如果你 proxmox 使用的是 NAT 模式的网络,请自行配置 dnsmasq
  3. 开机,等待一会,然后打开 find.synology.com 可以找到DSM。
  4. 安装 DSM, 上传文件时选择之前留下的 ds3615xs_41222.pat

未完待续

就先扯到这里,还可能折腾一下上电自启和硬盘转接,等到东西买到手了再说。