mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
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.
This commit is contained in:
parent
fcdfa31f3c
commit
286088567d
30
configure.ac
30
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.
|
||||
|
@ -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
|
||||
|
@ -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)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user