79 lines
2.5 KiB
Nix
79 lines
2.5 KiB
Nix
|
|
{pkgs, ...}: {
|
||
|
|
boot = {
|
||
|
|
initrd.kernelModules = ["vfio_pci" "vfio" "vfio_iommu_type1"];
|
||
|
|
extraModprobeConfig = ''
|
||
|
|
options vfio-pci ids=1022:43f6
|
||
|
|
'';
|
||
|
|
kernelParams = [
|
||
|
|
"amd_iommu=on"
|
||
|
|
"iommu=pt"
|
||
|
|
];
|
||
|
|
};
|
||
|
|
users.users.lomig.extraGroups = ["disk"];
|
||
|
|
security.pam.loginLimits = [
|
||
|
|
{
|
||
|
|
domain = "lomig";
|
||
|
|
type = "soft";
|
||
|
|
item = "memlock";
|
||
|
|
value = "infinity";
|
||
|
|
}
|
||
|
|
{
|
||
|
|
domain = "lomig";
|
||
|
|
type = "hard";
|
||
|
|
item = "memlock";
|
||
|
|
value = "infinity";
|
||
|
|
}
|
||
|
|
];
|
||
|
|
boot.kernel.sysctl."vm.nr_hugepages" = 1024;
|
||
|
|
fileSystems."/dev/hugepages" = {
|
||
|
|
device = "hugetlbfs";
|
||
|
|
fsType = "hugetlbfs";
|
||
|
|
};
|
||
|
|
|
||
|
|
# services.udev.extraRules = ''
|
||
|
|
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500b0179482", GROUP="disk", MODE="0660"
|
||
|
|
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500cc529430", GROUP="disk", MODE="0660"
|
||
|
|
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500cc53994a", GROUP="disk", MODE="0660"
|
||
|
|
# SUBSYSTEM=="block", ENV{ID_SERIAL}=="wwn-0x50000c500cc5551d4", GROUP="disk", MODE="0660"
|
||
|
|
# SUBSYSTEM=="vfio", GROUP="kvm", MODE="0660"
|
||
|
|
# '';
|
||
|
|
|
||
|
|
systemd.services.truenas-vm = {
|
||
|
|
wantedBy = ["multi-user.target"];
|
||
|
|
after = ["network-online.target"];
|
||
|
|
wants = ["network-online.target"];
|
||
|
|
serviceConfig = {
|
||
|
|
RuntimeDirectory = "truenas";
|
||
|
|
ExecStartPre = "/run/current-system/sw/bin/rm -f /run/truenas/qmp.sock";
|
||
|
|
ExecStart = ''
|
||
|
|
/run/current-system/sw/bin/qemu-system-x86_64 -enable-kvm -m 4096 -smp 2 \
|
||
|
|
-drive file=/home/lomig/vm/truenas.qcow2,if=none,format=qcow2,id=os \
|
||
|
|
-device vfio-pci,host=0e:00.0 \
|
||
|
|
-netdev bridge,br=br0,id=n1,helper=/run/wrappers/bin/qemu-bridge-helper \
|
||
|
|
-device virtio-net-pci,netdev=n1,mac=52:54:00:00:01:02 \
|
||
|
|
-device virtio-blk-pci,drive=os,bootindex=0 \
|
||
|
|
-qmp unix:/run/truenas.qmp,server,nowait -display none
|
||
|
|
'';
|
||
|
|
ExecStop = ''
|
||
|
|
echo '{"execute":"system_powerdown"}' | socat - UNIX-CONNECT:/run/truenas.qmp || true ; sleep 5
|
||
|
|
'';
|
||
|
|
Restart = "on-failure";
|
||
|
|
RestartSec = 3;
|
||
|
|
StartLimitIntervalSec = 60;
|
||
|
|
StartLimitBurst = 5;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
systemd.services.resume-truenas-vm = {
|
||
|
|
description = "Restart Truenas VM after resume";
|
||
|
|
wantedBy = ["sleep.target"];
|
||
|
|
after = ["sleep.target"];
|
||
|
|
serviceConfig = {
|
||
|
|
Type = "oneshot";
|
||
|
|
ExecStart = "${pkgs.systemd}/bin/systemctl try-restart truenas-vm.service";
|
||
|
|
};
|
||
|
|
};
|
||
|
|
}
|
||
|
|
# vim: set ts=2 sw=2 sts=2 et :
|
||
|
|
|