]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemu: Build nvram directory at driver startup
authorCole Robinson <crobinso@redhat.com>
Fri, 24 Apr 2015 00:01:05 +0000 (20:01 -0400)
committerCole Robinson <crobinso@redhat.com>
Fri, 24 Apr 2015 14:30:42 +0000 (10:30 -0400)
Similar to what was done for the channel socket in the previous commit.

libvirt.spec.in
src/Makefile.am
src/qemu/qemu_conf.c
src/qemu/qemu_conf.h
src/qemu/qemu_driver.c
src/qemu/qemu_process.c

index 2f19c7f9918bdd36afdf0990bea1ddc3186276a0..20af502c570a870766d2193a98cf2244052c81ab 100644 (file)
@@ -1985,7 +1985,6 @@ exit 0
 %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
 %ghost %dir %attr(0700, root, root) %{_localstatedir}/run/libvirt/qemu/
 %dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/
-%dir %attr(0711, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/nvram/
 %dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/cache/libvirt/qemu/
 %{_datadir}/augeas/lenses/libvirtd_qemu.aug
 %{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
@@ -2089,7 +2088,6 @@ exit 0
 %config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.qemu
 %ghost %dir %attr(0700, root, root) %{_localstatedir}/run/libvirt/qemu/
 %dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/
-%dir %attr(0711, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/nvram/
 %dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/cache/libvirt/qemu/
 %{_datadir}/augeas/lenses/libvirtd_qemu.aug
 %{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
index dd41b45e41fa1533a00b55c74caca6ac1ba79590..33ee7233e14cfb93339de36e7910f9abf2538182 100644 (file)
@@ -2705,7 +2705,6 @@ if WITH_SANLOCK
 endif WITH_SANLOCK
 if WITH_QEMU
        $(MKDIR_P) "$(DESTDIR)$(localstatedir)/lib/libvirt/qemu"
-       $(MKDIR_P) "$(DESTDIR)$(localstatedir)/lib/libvirt/qemu/nvram"
        $(MKDIR_P) "$(DESTDIR)$(localstatedir)/run/libvirt/qemu"
        $(MKDIR_P) "$(DESTDIR)$(localstatedir)/cache/libvirt/qemu"
        $(MKDIR_P) "$(DESTDIR)$(localstatedir)/log/libvirt/qemu"
index 4b5fa392f8304ac3c4ca8abf3942fb5193046cb4..16ae6abe91bddb6a8555765709e0acd07ea88ac4 100644 (file)
@@ -208,6 +208,8 @@ virQEMUDriverConfigPtr virQEMUDriverConfigNew(bool privileged)
         if (virAsprintf(&cfg->channelTargetDir,
                         "%s/channel/target", cfg->libDir) < 0)
             goto error;
+        if (virAsprintf(&cfg->nvramDir, "%s/nvram", cfg->libDir) < 0)
+            goto error;
     } else {
         char *rundir;
         char *cachedir;
@@ -250,6 +252,9 @@ virQEMUDriverConfigPtr virQEMUDriverConfigNew(bool privileged)
         if (virAsprintf(&cfg->channelTargetDir,
                         "%s/qemu/channel/target", cfg->configBaseDir) < 0)
             goto error;
+        if (virAsprintf(&cfg->nvramDir,
+                        "%s/qemu/nvram", cfg->configBaseDir) < 0)
+            goto error;
     }
 
     if (virAsprintf(&cfg->configDir, "%s/qemu", cfg->configBaseDir) < 0)
@@ -349,6 +354,7 @@ static void virQEMUDriverConfigDispose(void *obj)
     VIR_FREE(cfg->saveDir);
     VIR_FREE(cfg->snapshotDir);
     VIR_FREE(cfg->channelTargetDir);
+    VIR_FREE(cfg->nvramDir);
 
     VIR_FREE(cfg->vncTLSx509certdir);
     VIR_FREE(cfg->vncListen);
index 6e9f8153a9272a2bbeed4b23cbdfdf510528afae..2ba4ce74720d7fbe1d0c2650b37d2cbce105f0c2 100644 (file)
@@ -105,6 +105,7 @@ struct _virQEMUDriverConfig {
     char *saveDir;
     char *snapshotDir;
     char *channelTargetDir;
+    char *nvramDir;
 
     bool vncAutoUnixSocket;
     bool vncTLS;
index e59aec4ada749000251bf4fda22858159c42e274..2fc2f32fe95185f1860abb7cf2b8b0197ff7dd8b 100644 (file)
@@ -709,6 +709,11 @@ qemuStateInitialize(bool privileged,
                   virStrerror(errno, ebuf, sizeof(ebuf)));
         goto error;
     }
+    if (virFileMakePath(cfg->nvramDir) < 0) {
+        VIR_ERROR(_("Failed to create nvram dir '%s': %s"),
+                  cfg->nvramDir, virStrerror(errno, ebuf, sizeof(ebuf)));
+        goto error;
+    }
 
     qemu_driver->qemuImgBinary = virFindFileInPath("kvm-img");
     if (!qemu_driver->qemuImgBinary)
@@ -825,6 +830,13 @@ qemuStateInitialize(bool privileged,
                                  (int) cfg->group);
             goto error;
         }
+        if (chown(cfg->nvramDir, cfg->user, cfg->group) < 0) {
+            virReportSystemError(errno,
+                                 _("unable to set ownership of '%s' to %d:%d"),
+                                 cfg->nvramDir, (int) cfg->user,
+                                 (int) cfg->group);
+            goto error;
+        }
 
         run_uid = cfg->user;
         run_gid = cfg->group;
index 6707170056a3b534dcb6db89c73db2c069163399..fb83d51a5b8d0baff28f697e3a8127b3a8036c89 100644 (file)
@@ -4144,8 +4144,8 @@ qemuPrepareNVRAM(virQEMUDriverConfigPtr cfg,
     /* Autogenerate nvram path if needed.*/
     if (!loader->nvram) {
         if (virAsprintf(&loader->nvram,
-                        "%s/lib/libvirt/qemu/nvram/%s_VARS.fd",
-                        LOCALSTATEDIR, vm->def->name) < 0)
+                        "%s/%s_VARS.fd",
+                        cfg->nvramDir, vm->def->name) < 0)
             goto cleanup;
 
         generated = true;