我正在寻求创建一个(内部,出于法律原因)预置的 debian(延伸)安装程序,它将自动从所有可用的 HD 创建根 zpool,而不是通过(无论是否自动)通常的分区设置。
我见过的关于 ZFS 根的大多数建议(也许,更权威的指南)需要安装 debian,然后手动启动到 LiveCD,在该 LiveCD 上安装 ZFS,设置 ZFS,然后chroot
进入新的 ZFS 根目录以重新安装所有内容。这看起来很容易出错而且很乏味。虽然,我明白,为了法律原因debian 安装程序可能永远不会将 ZFS 作为内置选项包含在内。
在我的研究中,我遇到了一些邮件列表线程,其中有几个人向维护者询问了类似的问题,但他们总是转入法律解释,并且问题从未得到解答(如果我能再次找到它们,我会分享,但阅读它们是很大程度上是浪费时间!)。
看看稳定的示例预置文件,我们看到以下有趣的行:
### Apt setup
# You can choose to install non-free and contrib software.
#d-i apt-setup/non-free boolean true
#d-i apt-setup/contrib boolean true
再往下一点:
# Individual additional packages to install
#d-i pkgsel/include string openssh-server build-essential
这看起来很有希望,因为您确实可以要求安装 ZFS:
d-i apt-setup/contrib boolean true
d-i pkgsel/include string zfs-dkms zfsutils-linux zfs-initramfs
但是,由于 apt 设置和软件包安装是在分区步骤之后完成的,因此这可能为时已晚。
我确实找到了本指南这解释了另一种将非自由软件包添加到安装过程中的方法(tl;dr 下载 deb,dpkg-deb -x
将其放入 initrd,然后重新制作 iso)。 (我认为)这具有在分区步骤之前可用的优点。似乎可以做类似的事情来安装 ZFS(尽管,您首先需要在将其填充到 initrd 之前对其进行编译)。这里棘手的一点是我们需要一个钩子来用创建 ZFS 池的脚本替换分区步骤。@FerencWágner 的评论从一个SE Unix 线程关于更改partman 中的一些 LVM 内容似乎很有希望,但没有具体说明如何实现这一点的详细信息(并且接受的答案表明partman不能做这样的自定义事情)。
考虑到这一点:
d-i apt-setup/contrib
创建根fs时/d-i pkgsel/include
确实来不及使用ZFS吗?- 如果上述内容正确,那么将包包含在 initrd 中是否是在分区步骤中使 ZFS 可用的正确方法?
- 无论 (1) 是否正确,如何用自定义 ZFS 根池创建替换partman 步骤?
答案1
既然你想要ZFS root,ZFS支持必须添加到Debian-Installer,pkgsel/include
不会帮助你。正确的方法已在debian 启动作者:弗兰斯·波普:
您必须创建一个自定义 udeb,该 udeb 包含在partman之前的菜单中(即菜单项编号在3500到4000之间),执行partman的所有基本功能并提供与partman相同的伪包。
partman的基本功能是:
- 创建 /target 目录
- 创建分区
- 创建 /target/etc/fstab
- 将分区挂载到 /target 中
有关创建自定义 udeb 的基本信息,请参阅Debian 安装程序内部结构。
(我用当前链接替换了旧链接。)
对于实验,我建议预先播种anna/choose_modules
,network-console
当partman出现时登录到shell,通过下载必要的文件/脚本wget
并在安装程序环境中测试它们,手动完成partman的工作(您仍然可以使用partman来设置/root
挂载点) 。之后,您可以构建 udebs 或只是简单地放置额外的文件进入initrd或进入 initrd 覆盖层(也由 ext/sys/iso/pxelinux 加载的附加 initrd 映像)。
适当的partman整合将是一项了不起的成就,但我无法真正指导你实现这一点。这旧文档可能仍然非常相关,您可以使用现有模块,例如帕特曼-btrfs寻求灵感。但你最好问一下debian 启动首先要避免重复劳动或走上错误的道路。