[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: libvirt with modified QEMU and OVMF
From: |
Lars Böckel |
Subject: |
Re: libvirt with modified QEMU and OVMF |
Date: |
Sat, 17 Nov 2018 23:48:47 +0100 |
So to follow this up now. I tried these:
(simple-service 'qemu-conf etc-service-type
`(("libvirt/qemu.conf"
,(mixed-text-file "qemu.conf"
"nvram
= /run/current-system/profile/share/firmware/ovmf_x64.bin \n
user='1000'"))))
(extra-special-file "/etc/libvirt/qemu.conf"
(plain-file
"etc/libvirt/qemu.conf"
"nvram
= /run/current-system/profile/share/firmware/ovmf_x64.bin \n
user='1000'"))
also i tried to edit the libvirt package by doing this:
(replace 'install
;; Since the sysconfdir and localstatedir should be /etc
and /var ;; at runtime, we must prevent writing to them at installation
;; time.
(lambda _
(invoke "make" "install"
"sysconfdir=/tmp/etc"
"localstatedir=/tmp/var")))
(add-after 'install 'ovmf-stuff
(lambda* (#:key outputs #:allow-other-keys)
(let* ((output (assoc-ref outputs "out"))
(etclibvirt (string-append output "/etc/libvirt")))
(mkdir-p etclibvirt)
(with-output-to-file
(string-append etclibvirt "/qemu.conf")
(lambda _
(format #t
"nvram
= /run/current-system/profile/share/firmware/ovmf_x64.bin user='1000'"
output))))))
(add-after 'ovmf-stuff 'wrap-libvirtd
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(wrap-program (string-append out "/sbin/libvirtd")
`("PATH" = (,(string-append (assoc-ref inputs
"iproute") "/sbin")
,(string-append (assoc-ref inputs "qemu")
"/bin"))))
i really hope that after my mail client butchered it it is still
readable. to summarize: an etc-service-type will not work because it
links to /etc/libvirt which alredy exist and an extra-special-file will
not work because "invalid character `/' in name
`etc/libvirt/qemu.conf'". The file created in the package does not
exist in /etc but in /run/current-system/profile/etc where libvirt
probably does not read. At least it does not work as expected.
> Thanks for sharing your idea about it. I cannot pull right now but i
> think ...nvram = " ovmf "/F... would not work since you would have to
> call the complete path of the package. Though something like "nvram =
> /run/current-system/profile/share/firmware/ovmf_x64.bin" COULD work.
> I don't know how it would react to the massive wall of symlinks. That
> is probably the reason why NixOS calls it with ${pkgs.OVMF}. The
> produced file in NixOS (/var/lib/libvirt/qemu.conf) points
> to /nix/store/.... For usability something you can just put in
> libvirt-service-type with #t would be good for usability. As well as
> the user variable. Configurations like these are probably more common
> than changing tls-ports and would simplify the migration of people
> running different systems since they could more easily configure VMs
> with UEFI support.
>
> When my internet is running again i will pull and try this config.
> But since its saturday that might take some time... You can easily
> check for UEFI support in libvirt with either virt-install --boot
> uefi or in virt-manager when you create a vm and edit it beforehand
> you have a dropdown menu for BIOS/UEFI. If someone could test it out
> and report back that would be great!
>
>
> >> i would like to push the issue with OVMF in libvirt again:
> >>
> >> I would like to have OVMF(UEFI) capability with QEMU. In NixOS you
> >> can achieve this with
> >>
> >> virtualisation.libvirtd.enable = true;
> >> virtualisation.libvirtd.qemuOvmf = true;
> >> virtualisation.libvirtd.qemuVerbatimConfig = ''
> >> nvram =
> >> [ "${pkgs.OVMF}/FV/OVMF.fd:${pkgs.OVMF}/FV/OVMF_VARS.fd" ] user =
> >> "1000" '';
> >>
> >> the "user" part is not necessary but is required for system VMs in
> >> combination with qemu's pulseaudio driver. qemuVerbatimConfig is
> >> the config that is at /etc/libvirt/qemu.conf in traditional
> >> GNU/Linux distributions.
> > I don’t know about OVMF but IIUC, what you need here is to create
> > /etc/libvirt/qemu.conf. To do that, you can something along these
> > lines:
> >
> > (simple-service 'qemu-conf etc-service-type
> > `(("libvirt/qemu.conf"
> > ,(mixed-text-file "qemu.conf"
> > "nvarm = "
> > ovmf "/FV/OVMF.fd:…'))))
> >
> > Would that work?
> >
> > (Actually the “libvirt/” bit is only possible since commit
> > 5dec93bb8ba89605bce2f9a5ee9c4dbadeee3b58, a few minutes ago…)
> >
> > We could provide a proper abstraction on top of that if needed, but
> > I’m not familiar with libvirt. If you have ideas on how to improve
> > this, that’d be great!
> >
> > Thanks,
> > Ludo’.