mkosi
stands for Make Operating System Image, and is a tool for generating an OS tree or image that can be booted.
前置工作:xuao1/mkosi: mkosi (github.com)
目前存在的问题有:
-
启动后打不开终端:尝试安装 xterm 解决
- 安装后,因为 xfec4 启动出了问题,所以又额外安装了 xinit 和 xserver-xorg,可以成功启动终端,但是不知道解决问题的是哪一个
-
qemu 启动后 apt 出现错误.
注:该错误在 systemd-nspawn 启动时没有,目前判断是缺少必要的网络包
使用现有 xubuntu22.04 镜像,手动安装。
VirtualBox 和 VMware 两个软件均支持自动导出 ova 文件
删除 snap
硬盘压缩:需要先做 0 填充,再进行硬盘压缩。VMware Workstation 支持直接压缩,VirtualBox 需要在其安装路径下使用 VBoxManage 进行压缩。
最终采用
Docker 部署,生成基于 Ubuntu22.04 的镜像,使用脚本安装配置包含 Xfce4 在内的各种安装包。
简单来说,先生成一个 qcow2 格式的镜像文件,分别将其转化为 vmdk 和 vdi 硬盘文件,前者在 Vmware 中使用,后者在 VirtualBox 中。最后分别做一些基本配置,导出为两个平台分别可用的 OVA 文件。
对于本项目的使用:
我们致力于全部流程均为自动化实现,理论上只需要执行 README 中 Build 下的三条指令即可。但在那之前,你需要首先安装 ovftool,并将其放在 /usr/local.
注意到,本项目是自动化生成 XUbuntu22.04,所以如果之后希望复用本项目生成其他版本的 XUbuntu,你需要更改脚本中的部分内容,包括但不限于 “22.04” 字样。
接下来是关于开发流程的记录。
这一部分内容主要由 taoky 和 RTXUX 完成,全部内容均在 101strap_img 文件中。
该脚本创建和配置了 XUbuntu 22.04。主要功能概括如下:
- 检查工作空间是否存在,用户是否为 root,设备是否为块设备。
- 创建一个 5GB 的 qcow2 格式的磁盘镜像,并将其挂载到 NBD 设备。
- 使用 parted 工具创建一个 GPT 分区表,并创建一个 256MB 的 EFI 分区和一个用于 Linux 系统的 ext4 分区。
- 对 EFI 分区和 root 分区进行格式化。
- 挂载 EFI 分区和 rootfs 分区。
- 使用 debootstrap 安装 Ubuntu 22.04 的基本系统。
- 挂载 proc、sys 和 dev 文件系统。
- 修改 apt 源为中国科技大学镜像站点。
- 安装基本的桌面应用程序、语言包和输入法。
- 更新软件包。
- 调整 XFCE 桌面环境的默认设置。
- 配置用户、主机名和时区。
- 生成语言环境。
- 添加新用户并设置密码。
- 设置 fstab 文件以挂载根文件系统和 EFI 分区。
- 配置网络管理器来管理网络。
- 安装内核、GRUB 引导加载器和其他必要的工具。
- 配置 GRUB 引导加载器。
- 清理不必要的软件包和缓存。
- 对文件系统进行优化。
通过该脚本,可获得 root.qcow2
这一部分内容主要由 xuao1 完成。全部内容均在 101strap_disk.
该脚本主要用于将一个 QEMU QCOW2 格式的虚拟磁盘镜像文件(root.qcow2)转换为 VMware 和 VirtualBox 所支持的格式,并分别配置虚拟机,最后分别导出为 OVA 文件。
主要功能概括如下:
- 将 root.qcow2 转换成 vmdk 和 vdi 文件,前者用于 VMware,后者用于 VirtualBox。
- 为 VMware 创建一个.vmx 文件,定义虚拟机的各种配置信息,如内存、CPU、硬盘等。
- 使用 ovftool 将 VMware 的虚拟机配置文件导出为 OVA 格式。
- 为 VirtualBox 创建一个虚拟机,将前面转换好的 VDI 磁盘镜像关联到虚拟机,指定操作系统类型。
- 配置 VirtualBox 虚拟机的其他设置,如内存、CPU、启动顺序、固件类型、USB 设置等。
- 使用 VBoxManage 将 VirtualBox 虚拟机导出为 OVA 格式,便于分发和部署。
关于 VirtualBox 全部配置信息,列在下面:
可以按照以下顺序来生成(默认已经创建好了 root.vdi):
-
安装 VBoxManage
-
使用 VBoxManage 创建一个新的虚拟机,指定操作系统版本,并将 VDI 文件添加为虚拟硬盘
VBoxManage createvm --name "My_VM" --ostype "Ubuntu_64" --register VBoxManage storagectl "My_VM" --name "SATA Controller" --add sata --controller IntelAHCI VBoxManage storageattach "My_VM" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium /path/to/your/vmdk_file.vdi
-
配置虚拟机:
-
设置内存
VBoxManage modifyvm "My_VM" --memory 1024
-
设置 CPU 数量
VBoxManage modifyvm "My_VM" --cpus 2
注意:VirtualBox 运行单个 CPU 的虚拟机时可能会导致 kernel panic: "Attempted to kill the idle task"。参见 https://www.virtualbox.org/ticket/10686。
-
更改虚拟机启动时的引导顺序(Boot Order)
VBoxManage modifyvm "My_VM" --boot1 disk --boot2 none --boot3 none --boot4 none
-
启用硬件时钟 UTC 时间模式
VBoxManage modifyvm "My_VM" --rtcuseutc on
-
启用 EFI:
VBoxManage modifyvm "My_VM" --firmware efi
-
配置虚拟机的 HID(Human Interface Device):
VBoxManage modifyvm "My_VM" --mouse usbtablet
-
改显存为 32MB:
VBoxManage modifyvm "My_VM" --vram 32
-
启动网卡 1,启用网络连接,连接方式:NAT
VBoxManage modifyvm "My_VM" --nic1 nat
-
启用 USB 控制器,USB 2.0
VBoxManage modifyvm "My_VM" --usb on VBoxManage modifyvm "My_VM" --usbehci on
-
关闭 PAE(Physical Address Extension):
VBoxManage modifyvm "My_VM" --pae off
-
启用长模式(Long Mode)
VBoxManage modifyvm "My_VM" --longmode on
-
启用 X2APIC 支持:
VBoxManage modifyvm "My_VM" --x2apic on
-
启用硬件虚拟化大页面(Hardware Virtualization Large Pages)支持:
VBoxManage modifyvm "My_VM" --largepages on
-
-
将虚拟机导出为 OVA 文件:
VBoxManage export "My_VM" --output /path/to/output_file.ova