]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: Allow runtime detection of scrub
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 14 Feb 2012 10:09:42 +0000 (11:09 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 16 Feb 2012 08:09:43 +0000 (09:09 +0100)
Currently, if scrub (used for wiping algorithms) is not present
at compile time, we don't support any other wiping algorithms than
zeroing, even if it was installed later. Switch to runtime detection
instead.

configure.ac
libvirt.spec.in
src/storage/storage_driver.c

index 12e8ce673560bcd6beccc85c7042443314fbd09f..4493b94ac87773831eadd5780df2e9b46b0f0544 100644 (file)
@@ -215,6 +215,8 @@ AC_PATH_PROG([MODPROBE], [modprobe], [],
        [/sbin:/usr/sbin:/usr/local/sbin:$PATH])
 AC_PATH_PROG([OVSVSCTL], [ovs-vsctl], [ovs-vsctl],
        [/sbin:/usr/sbin:/usr/local/sbin:$PATH])
+AC_PATH_PROG([SCRUB], [scrub], [],
+       [/sbin:/usr/sbin:/usr/local/sbin:$PATH])
 
 AC_DEFINE_UNQUOTED([DNSMASQ],["$DNSMASQ"],
         [Location or name of the dnsmasq program])
@@ -237,6 +239,8 @@ if test -n "$MODPROBE"; then
   AC_DEFINE_UNQUOTED([MODPROBE],["$MODPROBE"],
         [Location or name of the modprobe program])
 fi
+AC_DEFINE_UNQUOTED([SCRUB],["$SCRUB"],
+        [Location or name of the scrub program (for wiping algorithms)])
 
 dnl Specific dir for HTML output ?
 AC_ARG_WITH([html-dir], [AC_HELP_STRING([--with-html-dir=path],
@@ -2505,32 +2509,6 @@ AM_CONDITIONAL([HAVE_LIBNL], [test "$have_libnl" = "yes"])
 AC_SUBST([LIBNL_CFLAGS])
 AC_SUBST([LIBNL_LIBS])
 
-dnl scrub program for different volume wiping algorithms
-
-AC_ARG_WITH([scrub],
-            AC_HELP_STRING([--with-scrub], [enable different volume wiping algorithms
-                            @<:@default=check@:>@]),
-            [with_macvtap=${withval}],
-            [with_scrub=check])
-
-if test "$with_scrub" != "no"; then
-  AC_PATH_PROG([SCRUB], [scrub])
-  if test -z "$SCRUB" ; then
-    if test "$with_scrub" = "check"; then
-      with_scrub=no
-    else
-      AC_MSG_ERROR([You must install the 'scrub' binary to enable
-                    different volume wiping algorithms])
-    fi
-  else
-    with_scrub=yes
-  fi
-  if test "$with_scrub" = "yes"; then
-    AC_DEFINE_UNQUOTED([SCRUB], ["$SCRUB"],
-                       [Location of the scrub program])
-  fi
-fi
-
 # Only COPYING.LIB is under version control, yet COPYING
 # is included as part of the distribution tarball.
 # Copy one to the other, but only if this is a srcdir-build.
index 5c3146ffc2587e319d564a6279f3c05dca5e576d..8ab91e790f098b8cba138bb35422c8beca67d8b9 100644 (file)
@@ -513,6 +513,9 @@ BuildRequires: nfs-utils
 # Fedora build root suckage
 BuildRequires: gawk
 
+# For storage wiping with different algorithms
+BuildRequires: scrub
+
 %description
 Libvirt is a C toolkit to interact with the virtualization capabilities
 of recent versions of Linux (and other OSes). The main package includes
index 9170a178885bb86815c4b29adc8d34fde909adaf..df0e29138a689c9959b74ac73d8d832f9b8f4f6d 100644 (file)
@@ -1918,7 +1918,6 @@ storageVolumeWipeInternal(virStorageVolDefPtr def,
     if (algorithm != VIR_STORAGE_VOL_WIPE_ALG_ZERO) {
         const char *alg_char ATTRIBUTE_UNUSED = NULL;
         switch (algorithm) {
-#ifdef SCRUB
         case VIR_STORAGE_VOL_WIPE_ALG_NNSA:
             alg_char = "nnsa";
             break;
@@ -1943,13 +1942,11 @@ storageVolumeWipeInternal(virStorageVolDefPtr def,
         case VIR_STORAGE_VOL_WIPE_ALG_RANDOM:
             alg_char = "random";
             break;
-#endif
         default:
             virStorageReportError(VIR_ERR_INVALID_ARG,
                                   _("unsupported algorithm %d"),
                                   algorithm);
         }
-#ifdef SCRUB
         cmd = virCommandNew(SCRUB);
         virCommandAddArgList(cmd, "-f", "-p", alg_char,
                              def->target.path, NULL);
@@ -1958,7 +1955,6 @@ storageVolumeWipeInternal(virStorageVolDefPtr def,
             goto out;
 
         ret = 0;
-#endif
         goto out;
     } else {
         if (S_ISREG(st.st_mode) && st.st_blocks < (st.st_size / DEV_BSIZE)) {