disko for btrfs on luks2title
前几天给两台电脑交换硬盘 发现笔记本的m2硬盘螺丝拧不下来,最后柠花了上街找人拧的。
然后给这只HP的硬盘迁移系统,放在USB硬盘盒里喂 subvol 结果喂一半它噶了,等了半个小时还是无法识盘,直接京东售后了,给我换了块新的嘿嘿
正好记一下已经用了不下三次的安装步骤。
写你们nixos的东西可太方便了。
https://github.com/oluceps/nixos-config/blob/trival/hosts/kaambl/hardware.nix
关键配置
disko.devices = {
disk = {
nvme = {
type = "disk";
device = "/dev/disk/by-id/XXXXXXXXXXXXXXXXXXX";
content = {
type = "gpt";
partitions = {
esp = {
label = "ESP";
size = "2G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/efi";
};
};
cryptroot = {
label = "CRYPTROOT";
end = "-32G";
content = {
type = "luks";
name = "cryptroot";
settings = {
allowDiscards = true;
bypassWorkqueues = true;
crypttabExtraOpts = [
"same-cpu-crypt"
"submit-from-crypt-cpus"
"fido2-device=auto"
];
};
content = {
type = "btrfs";
extraArgs = [
"--label nixos"
"-f"
"--csum xxhash64"
"--features"
"block-group-tree"
];
subvolumes = {
"/persist" = {
mountpoint = "/persist";
mountOptions = [
"compress-force=lzo"
"noatime"
"discard=async"
"space_cache=v2"
];
};
"/nix" = {
mountpoint = "/nix";
mountOptions = [
"compress-force=lzo"
"noatime"
"discard=async"
"space_cache=v2"
"nodev"
"nosuid"
];
};
"/var" = {
mountpoint = "/var";
mountOptions = [
"compress-force=lzo"
"noatime"
"discard=async"
"space_cache=v2"
];
};
"/persist/tmp" = {
mountpoint = "/tmp";
mountOptions = [
"relatime"
"nodev"
"nosuid"
"discard=async"
"space_cache=v2"
];
};
};
};
};
};
encryptedSwap = {
size = "100%";
content = {
type = "swap";
randomEncryption = true;
};
};
};
};
};
};
nodev = {
"/" = {
fsType = "tmpfs";
mountOptions = [
"relatime"
"nosuid"
"nodev"
"size=2G"
"mode=755"
];
};
};
};
fileSystems."/persist".neededForBoot = true;
使用tpm2或者yubikey的fido解锁,需要打开 boot.initrd.systemd
.
想不到还有什么需要强调的。关于持久化文件的配置,请查看, 如果使用tpm2:
security.tpm2.enable = true;
security.tpm2.pkcs11.enable = true;
security.tpm2.tctiEnvironment.enable = true;
安装
-
进入livecd
-
克隆配置仓库
-
运行
nix run github:nix-community/disko -- -m disko --flake .#<NAME>
, 这将处理好分区、创建LUKS分区、加密映射、格式化等操作,最后自动挂载到 /mnt 目录下,按照定义的布局。 -
使用 nixos-install 命令进行安装
安装完成后重启进入系统。
tpm2认证
建议使用 CPU builtin TPM 的用户采用此操作,因为部分主板的外置TPM与CPU之间的信道不受加密。但如果是属于zen3架构及以下的CPU, 开不开都无所谓了因为受 faulTPM 影响。
以下console操作需要替换device字符。
添加认证:
systemd-cryptenroll /dev/nvme0n1p1 --tpm2-device=auto --tpm2-pcrs=0+7
关于 tpm2-pcrs
参数,见 PCRs 定义
以上0+7
出于「确保安全启动和固件状态不变的情况下自动解密」的考虑。
fido2认证
这里采用 Yubikey 作为fido2认证设备。插入具有Fido2功能的 Yubikey, 执行:
systemd-cryptenroll /dev/nvme0n1p1 --fido2-device=auto
关于PIN和presense的设定查看 systemd-cryptenroll -h
Full disk encryption 和安全启动更配哦!