* libvirt with modified QEMU and OVMF
@ 2018-09-01 23:16 Lars Böckel
2018-09-02 5:18 ` Gábor Boskovits
2018-09-08 11:22 ` Ludovic Courtès
0 siblings, 2 replies; 9+ messages in thread
From: Lars Böckel @ 2018-09-01 23:16 UTC (permalink / raw)
To: guix-devel
Hello Guix,
i wanted to recommend some changes to libvirt which would improve the
usability of libvirt.
1) 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.
2) Using a modified QEMU with libvirt. A modified QEMU could help
sometimes. A way to specify which QEMU package to use would be helpful
to resolve issues with newer qemu versions or patches which are not
upstream. While in NixOS you could add patches like this
nixpkgs.config.packageOverrides = pkgs: rec {
qemu = pkgs.qemu.overrideAttrs (attrs:{
patches = (lib.filter (x: ! (lib.hasSuffix
"fix-hda-recording.patch" (builtins.toString x))) attrs.patches) ++ [
/path/to/qemu.patch ];
}
);
};
to the QEMU package, i don't think this is possible in GuixSD.
Thank you for your work. Please let me know what you think.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: libvirt with modified QEMU and OVMF
2018-09-01 23:16 libvirt with modified QEMU and OVMF Lars Böckel
@ 2018-09-02 5:18 ` Gábor Boskovits
2018-09-02 8:16 ` Ricardo Wurmus
2018-09-08 11:22 ` Ludovic Courtès
1 sibling, 1 reply; 9+ messages in thread
From: Gábor Boskovits @ 2018-09-02 5:18 UTC (permalink / raw)
To: Lars Böckel; +Cc: Guix-devel
[-- Attachment #1: Type: text/plain, Size: 2040 bytes --]
P
Lars Böckel <listdump@larf.space> ezt írta (időpont: 2018. szept. 2., V
3:47):
> Hello Guix,
>
> i wanted to recommend some changes to libvirt which would improve the
> usability of libvirt.
>
> 1) 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"
> '';
>
I was thinking about getting this done for a while. It would be very
useful. Actually there should be a private writable copy of the ovmf
variable area for each vm, and a shared read only for the rest of ovmf.
>
> 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.
>
> 2) Using a modified QEMU with libvirt. A modified QEMU could help
> sometimes. A way to specify which QEMU package to use would be helpful
> to resolve issues with newer qemu versions or patches which are not
> upstream. While in NixOS you could add patches like this
>
> nixpkgs.config.packageOverrides = pkgs: rec {
> qemu = pkgs.qemu.overrideAttrs (attrs:{
> patches = (lib.filter (x: ! (lib.hasSuffix
> "fix-hda-recording.patch" (builtins.toString x))) attrs.patches) ++ [
> /path/to/qemu.patch ];
> }
> );
> };
> j
> to the QEMU package, i don't think this is possible in GuixSD.
>
> Thank you for your work. Please let me know what you think.
>
The libvirt service accepts a libvirt configuration, where you can specify
the libvirt package in use. I guess it would be easy to provide a similar
mechanism to give the qemu package. If qemu is an input of libvirt then
providing a custom libvirt having the custom qemu would be good enough. I'm
on mobile now, so I can't check.
[-- Attachment #2: Type: text/html, Size: 2652 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: libvirt with modified QEMU and OVMF
2018-09-02 5:18 ` Gábor Boskovits
@ 2018-09-02 8:16 ` Ricardo Wurmus
0 siblings, 0 replies; 9+ messages in thread
From: Ricardo Wurmus @ 2018-09-02 8:16 UTC (permalink / raw)
To: Gábor Boskovits; +Cc: Guix-devel
Gábor Boskovits <boskovits@gmail.com> writes:
> The libvirt service accepts a libvirt configuration, where you can specify
> the libvirt package in use. I guess it would be easy to provide a similar
> mechanism to give the qemu package. If qemu is an input of libvirt then
> providing a custom libvirt having the custom qemu would be good enough. I'm
> on mobile now, so I can't check.
Qemu is indeed an input to libvirt.
--
Ricardo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: libvirt with modified QEMU and OVMF
2018-09-01 23:16 libvirt with modified QEMU and OVMF Lars Böckel
2018-09-02 5:18 ` Gábor Boskovits
@ 2018-09-08 11:22 ` Ludovic Courtès
[not found] ` <b86074ab-f530-670a-550b-0b0b21b5cbe2@larf.space>
1 sibling, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2018-09-08 11:22 UTC (permalink / raw)
To: Lars Böckel; +Cc: guix-devel
Hi Lars,
Lars Böckel <listdump@larf.space> skribis:
> 2) Using a modified QEMU with libvirt. A modified QEMU could help
> sometimes. A way to specify which QEMU package to use would be helpful
> to resolve issues with newer qemu versions or patches which are not
> upstream. While in NixOS you could add patches like this
>
> nixpkgs.config.packageOverrides = pkgs: rec {
> qemu = pkgs.qemu.overrideAttrs (attrs:{
> patches = (lib.filter (x: ! (lib.hasSuffix
> "fix-hda-recording.patch" (builtins.toString x))) attrs.patches) ++ [
> /path/to/qemu.patch ];
> }
> );
> };
>
> to the QEMU package, i don't think this is possible in GuixSD.
As Gábor suggested, you would do it along these lines:
(define qemu-patched
(package
(inherit qemu)
…))
(define custom-libvirt
(package
(inherit libvirt)
(inputs `(("qemu" ,qemu-patched)
,@(alist-delete "qemu" (package-inputs libvirt))))))
(operating-system
;; …
(services (cons (service libvirt-service-type
(libvirt-configuration
(libvirt custom-libvirt)))
%base-services)))
It’s not equivalent to the above Nix snippet because it only affects the
libvirt service, but it addresses this particular need.
HTH,
Ludo’.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: libvirt with modified QEMU and OVMF
@ 2018-11-17 22:48 Lars Böckel
0 siblings, 0 replies; 9+ messages in thread
From: Lars Böckel @ 2018-11-17 22:48 UTC (permalink / raw)
To: guix-devel
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’.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-11-17 22:48 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-01 23:16 libvirt with modified QEMU and OVMF Lars Böckel
2018-09-02 5:18 ` Gábor Boskovits
2018-09-02 8:16 ` Ricardo Wurmus
2018-09-08 11:22 ` Ludovic Courtès
[not found] ` <b86074ab-f530-670a-550b-0b0b21b5cbe2@larf.space>
2018-09-08 21:05 ` Ludovic Courtès
2018-09-08 21:56 ` Lars Böckel
2018-09-13 21:03 ` Ricardo Wurmus
2018-11-17 22:34 ` Lars Böckel
-- strict thread matches above, loose matches on Subject: below --
2018-11-17 22:48 Lars Böckel
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).