# Configure script for Ganeti
m4_define([gnt_version_major], [2])
-m4_define([gnt_version_minor], [5])
+m4_define([gnt_version_minor], [6])
m4_define([gnt_version_revision], [0])
-m4_define([gnt_version_suffix], [~rc4])
+m4_define([gnt_version_suffix], [])
m4_define([gnt_version_full],
m4_format([%d.%d.%d%s],
gnt_version_major, gnt_version_minor,
# --with-xen-kernel=...
AC_ARG_WITH([xen-kernel],
[AS_HELP_STRING([--with-xen-kernel=PATH],
- [DomU kernel image for Xen hypervisor (default is /boot/vmlinuz-2.6-xenU)]
+ [DomU kernel image for Xen hypervisor (default is /boot/vmlinuz-3-xenU)]
)],
[xen_kernel="$withval"],
- [xen_kernel="/boot/vmlinuz-2.6-xenU"])
+ [xen_kernel="/boot/vmlinuz-3-xenU"])
AC_SUBST(XEN_KERNEL, $xen_kernel)
# --with-xen-initrd=...
AC_ARG_WITH([xen-initrd],
[AS_HELP_STRING([--with-xen-initrd=PATH],
- [DomU initrd image for Xen hypervisor (default is /boot/initrd-2.6-xenU)]
+ [DomU initrd image for Xen hypervisor (default is /boot/initrd-3-xenU)]
)],
[xen_initrd="$withval"],
- [xen_initrd="/boot/initrd-2.6-xenU"])
+ [xen_initrd="/boot/initrd-3-xenU"])
AC_SUBST(XEN_INITRD, $xen_initrd)
+# --with-xen-cmd=...
+AC_ARG_WITH([xen-cmd],
+ [AS_HELP_STRING([--with-xen-cmd=CMD],
+ [Sets the xen cli interface command (default is xm)]
+ )],
+ [xen_cmd="$withval"],
+ [xen_cmd="xm"])
+AC_SUBST(XEN_CMD, $xen_cmd)
+
+if ! test "$XEN_CMD" = xl -o "$XEN_CMD" = xm; then
+ AC_MSG_ERROR([Unsupported xen command specified])
+fi
+
+# --with-kvm-kernel=...
+AC_ARG_WITH([kvm-kernel],
+ [AS_HELP_STRING([--with-kvm-kernel=PATH],
+ [Guest kernel image for KVM hypervisor (default is /boot/vmlinuz-3-kvmU)]
+ )],
+ [kvm_kernel="$withval"],
+ [kvm_kernel="/boot/vmlinuz-3-kvmU"])
+AC_SUBST(KVM_KERNEL, $kvm_kernel)
+
# --with-file-storage-dir=...
AC_ARG_WITH([file-storage-dir],
[AS_HELP_STRING([--with-file-storage-dir=PATH],
[lvm_stripecount="1"])
AC_SUBST(LVM_STRIPECOUNT, $lvm_stripecount)
+# --with-ssh-login-user=...
+AC_ARG_WITH([ssh-login-user],
+ [AS_HELP_STRING([--with-ssh-login-user=USERNAME],
+ [user to use for SSH logins within the cluster (default is root)]
+ )],
+ [ssh_login_user="$withval"],
+ [ssh_login_user=root])
+AC_SUBST(SSH_LOGIN_USER, $ssh_login_user)
+
+# --with-ssh-console-user=...
+AC_ARG_WITH([ssh-console-user],
+ [AS_HELP_STRING([--with-ssh-console-user=USERNAME],
+ [user to use for SSH logins to access instance consoles (default is root)]
+ )],
+ [ssh_console_user="$withval"],
+ [ssh_console_user=root])
+AC_SUBST(SSH_CONSOLE_USER, $ssh_console_user)
+
+# --with-default-user=...
+AC_ARG_WITH([default-user],
+ [AS_HELP_STRING([--with-default-user=USERNAME],
+ [default user for daemons]
+ [ (default is to run all daemons as root)]
+ )],
+ [user_default="$withval"],
+ [user_default=root])
+
+# --with-default-group=...
+AC_ARG_WITH([default-group],
+ [AS_HELP_STRING([--with-default-group=GROUPNAME],
+ [default group for daemons]
+ [ (default is to run all daemons under group root)]
+ )],
+ [group_default="$withval"],
+ [group_default=root])
+
# --with-user-prefix=...
AC_ARG_WITH([user-prefix],
[AS_HELP_STRING([--with-user-prefix=PREFIX],
[prefix for daemon users]
- [ (default is to run all daemons as root)]
+ [ (default is to run all daemons as root; use --with-default-user]
+ [ to change the default)]
)],
[user_masterd="${withval}masterd";
user_rapi="${withval}rapi";
user_confd="${withval}confd";
- user_noded="root"],
- [user_masterd="root";
- user_rapi="root";
- user_confd="root";
- user_noded="root"])
+ user_noded="$user_default"],
+ [user_masterd="$user_default";
+ user_rapi="$user_default";
+ user_confd="$user_default";
+ user_noded="$user_default"])
AC_SUBST(MASTERD_USER, $user_masterd)
AC_SUBST(RAPI_USER, $user_rapi)
AC_SUBST(CONFD_USER, $user_confd)
AC_ARG_WITH([group-prefix],
[AS_HELP_STRING([--with-group-prefix=PREFIX],
[prefix for daemon POSIX groups]
- [ (default is to run all daemons under group root)]
+ [ (default is to run all daemons under group root; use]
+ [ --with-default-group to change the default)]
)],
[group_rapi="${withval}rapi";
group_admin="${withval}admin";
group_confd="${withval}confd";
group_masterd="${withval}masterd";
- group_noded="root";
+ group_noded="$group_default";
group_daemons="${withval}daemons";],
- [group_rapi="root";
- group_admin="root";
- group_confd="root";
- group_masterd="root";
- group_noded="root";
- group_daemons="root"])
+ [group_rapi="$group_default";
+ group_admin="$group_default";
+ group_confd="$group_default";
+ group_masterd="$group_default";
+ group_noded="$group_default";
+ group_daemons="$group_default"])
AC_SUBST(RAPI_GROUP, $group_rapi)
AC_SUBST(ADMIN_GROUP, $group_admin)
AC_SUBST(CONFD_GROUP, $group_confd)
DRBD_BARRIERS=n
DRBD_NO_META_FLUSH=False
else
- DRBD_BARRIERS=bfd
+ DRBD_BARRIERS=bf
DRBD_NO_META_FLUSH=True
fi
]],
fi
AC_SUBST(SYSLOG_USAGE, $SYSLOG)
-# --enable-htools
-HTOOLS=
-AC_ARG_ENABLE([htools],
- [AS_HELP_STRING([--enable-htools],
- [enable use of htools (needs GHC and libraries, default: check)])],
- [],
- [enable_htools=check])
-
-# --enable-htools-rapi
-HTOOLS_RAPI=
-AC_ARG_ENABLE([htools-rapi],
- [AS_HELP_STRING([--enable-htools-rapi],
- [enable use of RAPI in htools (needs curl, default: no)])],
- [],
- [enable_htools_rapi=no])
-
-# --enable-htools
-ENABLE_CONFD=
-AC_ARG_ENABLE([confd],
- [AS_HELP_STRING([--enable-confd],
- [enable the ganeti-confd daemon (default: yes)])],
- [[case "$enableval" in
- no)
- enable_confd=False
- ;;
- yes)
- enable_confd=True
- ;;
- *)
- echo "Invalid value for enable-confd '$enableval'"
- exit 1
- ;;
- esac
- ]],
- [enable_confd=True])
-AC_SUBST(ENABLE_CONFD, $enable_confd)
-
# --with-disk-separator=...
AC_ARG_WITH([disk-separator],
[AS_HELP_STRING([--with-disk-separator=STRING],
then
AC_MSG_WARN([pep8 not found, checking code will not be complete])
fi
+AM_CONDITIONAL([HAS_PEP8], [test "$PEP8"])
# Check for socat
AC_ARG_VAR(SOCAT, [socat path])
AC_MSG_ERROR([socat not found])
fi
-if test "$enable_htools" != "no"; then
-
# Check for qemu-img
AC_ARG_VAR(QEMUIMG_PATH, [qemu-img path])
AC_PATH_PROG(QEMUIMG_PATH, [qemu-img], [])
AC_MSG_WARN([qemu-img not found, using ovfconverter will not be possible])
fi
+# --enable-htools-rapi
+HTOOLS_RAPI=
+AC_ARG_ENABLE([htools-rapi],
+ [AS_HELP_STRING([--enable-htools-rapi],
+ [enable use of curl in the Haskell code (default: check)])],
+ [],
+ [enable_htools_rapi=check])
+
+# --enable-confd
+ENABLE_CONFD=
+AC_ARG_ENABLE([confd],
+ [AS_HELP_STRING([--enable-confd],
+ [enable the ganeti-confd daemon (default: check)])],
+ [],
+ [enable_confd=check])
+
# Check for ghc
AC_ARG_VAR(GHC, [ghc path])
AC_PATH_PROG(GHC, [ghc], [])
if test -z "$GHC"; then
- if test "$enable_htools" != "check"; then
- AC_MSG_FAILURE([ghc not found, htools compilation will not possible])
- fi
+ AC_MSG_FAILURE([ghc not found, compilation will not possible])
fi
# Check for ghc-pkg
-HTOOLS_MODULES=
AC_ARG_VAR(GHC_PKG, [ghc-pkg path])
AC_PATH_PROG(GHC_PKG, [ghc-pkg], [])
if test -z "$GHC_PKG"; then
- if test "$enable_htools" != "check"; then
- AC_MSG_FAILURE([ghc-pkg not found, htools compilation will not be possible])
- fi
-else
- # check for modules
- AC_MSG_NOTICE([checking for required haskell modules])
- HTOOLS_NOCURL=-DNO_CURL
- if test "$enable_htools_rapi" != "no"; then
- AC_MSG_CHECKING([curl])
- GHC_PKG_CURL=$($GHC_PKG latest curl)
- if test -z "$GHC_PKG_CURL"; then
- if test "$enable_htools_rapi" = "check"; then
- AC_MSG_WARN(m4_normalize([The curl library not found, htools will be
- compiled without RAPI support]))
- else
- AC_MSG_FAILURE(m4_normalize([The curl library was not found, but it has
- been requested]))
- fi
+ AC_MSG_FAILURE([ghc-pkg not found, compilation will not be possible])
+fi
+
+# check for modules, first custom/special checks
+AC_MSG_NOTICE([checking for required haskell modules])
+HTOOLS_NOCURL=-DNO_CURL
+if test "$enable_htools_rapi" != "no"; then
+ AC_GHC_PKG_CHECK([curl], [HTOOLS_NOCURL=], [])
+ if test -n "$HTOOLS_NOCURL"; then
+ if test "$enable_htools_rapi" = "check"; then
+ AC_MSG_WARN(m4_normalize([The curl library was not found, Haskell
+ code will be compiled without RAPI support]))
else
- HTOOLS_NOCURL=
- fi
- AC_MSG_RESULT($GHC_PKG_CURL)
- fi
- AC_SUBST(GHC_PKG_CURL)
- AC_SUBST(HTOOLS_NOCURL)
- AC_MSG_CHECKING([parallel])
- GHC_PKG_PARALLEL=$($GHC_PKG --simple-output list 'parallel-3.*')
- if test -n "$GHC_PKG_PARALLEL"
- then
- HTOOLS_PARALLEL3=-DPARALLEL3
- else
- GHC_PKG_PARALLEL=$($GHC_PKG --simple-output list 'parallel-2.*')
- fi
- if test -z "$GHC_PKG_PARALLEL"
- then
- GHC_PKG_PARALLEL=$($GHC_PKG --simple-output list 'parallel-1.*')
- fi
- AC_SUBST(GHC_PKG_PARALLEL)
- AC_SUBST(HTOOLS_PARALLEL3)
- AC_MSG_RESULT($GHC_PKG_PARALLEL)
- AC_MSG_CHECKING([json])
- GHC_PKG_JSON=$($GHC_PKG latest json)
- AC_MSG_RESULT($GHC_PKG_JSON)
- AC_MSG_CHECKING([network])
- GHC_PKG_NETWORK=$($GHC_PKG latest network)
- AC_MSG_RESULT($GHC_PKG_NETWORK)
- AC_MSG_CHECKING([QuickCheck 2.x])
- GHC_PKG_QUICKCHECK=$($GHC_PKG --simple-output list 'QuickCheck-2.*')
- AC_MSG_RESULT($GHC_PKG_QUICKCHECK)
- if test -z "$GHC_PKG_PARALLEL" || test -z "$GHC_PKG_JSON" || \
- test -z "$GHC_PKG_NETWORK"; then
- if test "$enable_htools" != "check"; then
- AC_MSG_FAILURE(m4_normalize([Required Haskell modules not found, htools
- compilation disabled]))
+ AC_MSG_FAILURE(m4_normalize([The curl library was not found, but it has
+ been requested]))
fi
else
- # we leave the other modules to be auto-selected
- HTOOLS_MODULES="-package $GHC_PKG_PARALLEL"
- fi
- if test -z "$GHC_PKG_QUICKCHECK"; then
- AC_MSG_WARN(m4_normalize([The QuickCheck 2.x module was not found,
- you won't be able to run Haskell unittests]))
+ AC_MSG_NOTICE([Enabling curl/RAPI/RPC usage in Haskell code])
fi
fi
-AC_SUBST(HTOOLS_MODULES)
-AC_SUBST(GHC_PKG_QUICKCHECK)
-
-if test "$enable_htools" != "no"; then
- if test -z "$GHC" || test -z "$HTOOLS_MODULES"; then
- AC_MSG_WARN(m4_normalize([Haskell compiler/required libraries not found,
- htools compilation disabled]))
+AC_SUBST(HTOOLS_NOCURL)
+
+HTOOLS_PARALLEL3=
+AC_GHC_PKG_CHECK([parallel-3.*], [HTOOLS_PARALLEL3=-DPARALLEL3],
+ [AC_GHC_PKG_REQUIRE(parallel)], t)
+AC_SUBST(HTOOLS_PARALLEL3)
+
+# and now standard modules
+AC_GHC_PKG_REQUIRE(json)
+AC_GHC_PKG_REQUIRE(network)
+AC_GHC_PKG_REQUIRE(mtl)
+AC_GHC_PKG_REQUIRE(bytestring)
+AC_GHC_PKG_REQUIRE(utf8-string)
+
+# extra modules for confd functionality
+HTOOLS_REGEX_PCRE=-DNO_REGEX_PCRE
+has_confd=False
+if test "$enable_confd" != "no"; then
+ CONFD_PKG=
+ AC_GHC_PKG_CHECK([regex-pcre], [HTOOLS_REGEX_PCRE=],
+ [CONFD_PKG="$CONFD_PKG regex-pcre"])
+ AC_GHC_PKG_CHECK([hslogger], [], [CONFD_PKG="$CONFD_PKG hslogger"])
+ AC_GHC_PKG_CHECK([Crypto], [], [CONFD_PKG="$CONFD_PKG Crypto"])
+ AC_GHC_PKG_CHECK([text], [], [CONFD_PKG="$CONFD_PKG text"])
+ AC_GHC_PKG_CHECK([hinotify], [], [CONFD_PKG="$CONFD_PKG hinotify"])
+ if test -z "$CONFD_PKG"; then
+ has_confd=True
else
- HTOOLS=yes
+ if test "$enable_confd" = "check"; then
+ AC_MSG_WARN(m4_normalize([The required extra libraries for confd were
+ not found ($CONFD_PKG), confd disabled]))
+ else
+ AC_MSG_FAILURE(m4_normalize([The confd functionality was requested, but
+ required libraries were not found:
+ $CONFD_PKG]))
+ fi
fi
fi
+AC_SUBST(HTOOLS_REGEX_PCRE)
+if test "$has_confd" = "True"; then
+ AC_MSG_NOTICE([Enabling confd usage])
+fi
+AC_SUBST(ENABLE_CONFD, $has_confd)
+AM_CONDITIONAL([ENABLE_CONFD], [test x$has_confd = xTrue])
+
+# development modules
+HTOOLS_NODEV=
+AC_GHC_PKG_CHECK([QuickCheck-2.*], [], [HTOOLS_NODEV=1], t)
+AC_GHC_PKG_CHECK([test-framework-0.6*], [], [HTOOLS_NODEV=1], t)
+AC_GHC_PKG_CHECK([test-framework-hunit], [], [HTOOLS_NODEV=1])
+AC_GHC_PKG_CHECK([test-framework-quickcheck2], [], [HTOOLS_NODEV=1])
+if test -n "$HTOOLS_NODEV"; then
+ AC_MSG_WARN(m4_normalize([Required development modules were not found,
+ you won't be able to run Haskell unittests]))
+else
+ AC_MSG_NOTICE([Haskell development modules found, unittests enabled])
+fi
+AC_SUBST(HTOOLS_NODEV)
+
+HTOOLS=yes
AC_SUBST(HTOOLS)
+# --enable-split-query
+ENABLE_SPLIT_QUERY=
+AC_ARG_ENABLE([split-query],
+ [AS_HELP_STRING([--enable-split-query],
+ [enable use of custom query daemon via confd])],
+ [[case "$enableval" in
+ no)
+ enable_split_query=False
+ ;;
+ yes)
+ enable_split_query=True
+ ;;
+ *)
+ echo "Invalid value for enable-confd '$enableval'"
+ exit 1
+ ;;
+ esac
+ ]],
+ [[case "x${has_confd}x${HTOOLS_NOCURL}x" in
+ xTruexx)
+ enable_split_query=True
+ ;;
+ *)
+ enable_split_query=False
+ ;;
+ esac]])
+AC_SUBST(ENABLE_SPLIT_QUERY, $enable_split_query)
+
+if test x$enable_split_query = xTrue -a x$has_confd != xTrue; then
+ AC_MSG_ERROR([Split queries require the confd daemon])
+fi
+
+if test x$enable_split_query = xTrue -a x$HTOOLS_NOCURL != x; then
+ AC_MSG_ERROR([Split queries require the htools-rapi feature (curl library)])
+fi
+
+if test x$enable_split_query = xTrue; then
+ AC_MSG_NOTICE([Split query functionality enabled])
+fi
+
# Check for HsColour
HTOOLS_APIDOC=no
AC_ARG_VAR(HSCOLOUR, [HsColour path])
fi
AC_SUBST(HTOOLS_APIDOC)
-fi # end if enable_htools, define automake conditions
+# Check for hlint
+HLINT=no
+AC_ARG_VAR(HLINT, [hlint path])
+AC_PATH_PROG(HLINT, [hlint], [])
+if test -z "$HLINT"; then
+ AC_MSG_WARN([hlint not found, checking code will not be possible])
+fi
+
+if test "$HTOOLS" != "yes" && test "$ENABLE_CONFD" = "True"; then
+ AC_MSG_ERROR(m4_normalize([cannot enable ganeti-confd if
+ htools support is not enabled]))
+fi
AM_CONDITIONAL([WANT_HTOOLS], [test x$HTOOLS = xyes])
AM_CONDITIONAL([WANT_HTOOLSTESTS], [test "x$GHC_PKG_QUICKCHECK" != x])
AM_CONDITIONAL([WANT_HTOOLSAPIDOC], [test x$HTOOLS_APIDOC = xyes])
+AM_CONDITIONAL([HAS_HLINT], [test "$HLINT"])
+
+# Check for fakeroot
+AC_ARG_VAR(FAKEROOT_PATH, [fakeroot path])
+AC_PATH_PROG(FAKEROOT_PATH, [fakeroot], [])
+if test -z "$FAKEROOT_PATH"; then
+ AC_MSG_WARN(m4_normalize([fakeroot not found, tests that must run as root
+ will not be executed]))
+fi
+AM_CONDITIONAL([HAS_FAKEROOT], [test "x$FAKEROOT_PATH" != x])
SOCAT_USE_ESCAPE=
AC_ARG_ENABLE([socat-escape],