From 286088567d3905feea62f81f1bf0ebcb5d6466b4 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 14 Feb 2012 11:09:42 +0100 Subject: [PATCH] storage: Allow runtime detection of scrub 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 | 30 ++++-------------------------- libvirt.spec.in | 3 +++ src/storage/storage_driver.c | 4 ---- 3 files changed, 7 insertions(+), 30 deletions(-) diff --git a/configure.ac b/configure.ac index 12e8ce6735..4493b94ac8 100644 --- a/configure.ac +++ b/configure.ac @@ -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. diff --git a/libvirt.spec.in b/libvirt.spec.in index 5c3146ffc2..8ab91e790f 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -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 diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 9170a17888..df0e29138a 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -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)) {