diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 13:49:04 -0700 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 17:38:18 -0700 |
commit | 56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch) | |
tree | 3f91093cdb475e565ae857f1c5a7fd339e2d781e /app-emulation/ganeti | |
download | gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2 gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip |
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'app-emulation/ganeti')
47 files changed, 2986 insertions, 0 deletions
diff --git a/app-emulation/ganeti/Manifest b/app-emulation/ganeti/Manifest new file mode 100644 index 000000000000..5180973a8505 --- /dev/null +++ b/app-emulation/ganeti/Manifest @@ -0,0 +1,7 @@ +DIST ganeti-2.10.5.tar.gz 3855105 SHA256 7b66a0a13344f484bc1d1e90f84227438e2cdbb054f5667a9a4c216bce2b8532 SHA512 ab9fe4c18f975e13dcd403a086b725d4f5e4f84aaa5a2651cf4087b6abad59b38b470ed062f407e6783997f976eb217e755c9d7a3ebde1df63638c3ab63cd755 WHIRLPOOL 5bf83bae29f51cfd2980d3e57a03d25e598ae7495785646e8920d4ca7685d2e93cbac42624e86fbbf92236edd7311f724fa036580300f8ccc066818d3c9911a5 +DIST ganeti-2.11.6.tar.gz 4145886 SHA256 db11659ae7aaab5933b55b35f703236edc91ec763e443ac80679a057ba57af5e SHA512 c68ba0661f7598b2fbd67a96fd897e9a8fe7c3a79e914200c08a8e6cb78ad7ea8a85ce7cfee157e22c07d5f46ae6ed61d946cf2cc3852624cd303deb96f1e449 WHIRLPOOL 9bd0acd85ed86b8d05164d6ee70ea960fd42128f9144739c148e70917675d53c1d808d22df981a1ea0d843dfc5fd14fd516d6d39330634beec7eb0ecae4cbe5b +DIST ganeti-2.12.1.tar.gz 4353529 SHA256 bd1b33d12485f4de25cca74dcf2e5354067cdda5ee36b56333d402aa1c5351e0 SHA512 92f66b45b5adcfd4cca47a1cbd592489d6c3ec595d3c6ba7b4a9401cb588a51994288499078513d6f4c0369f15a403c796a526945a2e874e8d561aac2b962b7a WHIRLPOOL 60f446b851f0bcee536791ed01d470c7a5caf02b120891e370f491f07194c1b0d9fe991a0342c7f77f3762c4aaea1ae7b7cf731644d061f43f4ba38af36cf699 +DIST ganeti-2.12.3.tar.gz 4373350 SHA256 e66fc4c3dde1e90d85749ceb5c1c90bd6eaed1d139796829833b74337d2d4148 SHA512 7715db8e472e4ac99bf184028cd9853495153485c6638bcddba2d05ce958b6b44d3be07290780bb27b22337ae646881d6b0a30bbe87b7249106ac34d22bdd6c2 WHIRLPOOL e24d695d5acc582905ae7ba003e3fe6e6aa6ea4f9135daf76b953864c392803cd1c6ed81eb0e96652038f289bf450f3ac1a428c46d7a2573bc39a9451a47694e +DIST ganeti-2.13.0.tar.gz 4573781 SHA256 30ccfa971b15d49b45a4bfb75bb9631c0993adbd7feac0562c11305ae8c13753 SHA512 bd847ae7e12cb978fae59a458a4d0e33fee470c51748964453b5d0ea6615e6d959519c84922e92229e942a88f1ad88a6d1cb655f58391d033d5f5dfc249ef941 WHIRLPOOL 925159e36fde1cd36214b4fe54b4e06958cc8bd3ded28e32bc4f99842aafcb4c53c701c8a651421559dc13b4d18ae2cc11f1b9d1d2da1e862561cca81d009bda +DIST ganeti-2.14.1.tar.gz 4655994 SHA256 ae90c69f0c02d2ee558363a1c021dfaaaf4ccb59b662a72fa6485b406766e133 SHA512 2d3927bf888ea56df6b6275a869979c53d4b01e2e527e2dddea2a4835c90e85831e9e7691162999e5c58e9d214e03a37690e84f8fde9f1a0631897b06db348c3 WHIRLPOOL 3554161afd646af41e587fffa9dc85788f6ef13102121c636802946b64161cdeaeea326103171b70577b06635eebf6988b2f3942024a944612642aefd92b89bb +DIST ganeti-2.4.5.tar.gz 1828118 SHA256 9141379f3802238fb209309ec12f7090d872b77d7a473c91fe766d1fcec97c89 SHA512 e3abc2fd7c031fbef41c6e993f4cb129fa1dd4cb8c44961a2574da23832fd8412b8b3664b2e05ba8236cb8e58e8d70c3c9081f3f1b6dba8ffdc28d298c8a5099 WHIRLPOOL 897c2b3cdf0c7b03232a4ec99314439dbd29afd65eb2502d21a9f197cc098323a4b9ec0671c24ef7aad44b5327316ee68731e7e5304c8730d03f8ca908b93b62 diff --git a/app-emulation/ganeti/files/ganeti-2.1.initd b/app-emulation/ganeti/files/ganeti-2.1.initd new file mode 100644 index 000000000000..111f75468999 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.1.initd @@ -0,0 +1,112 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + need localmount logger + after bootmisc +} + +DAEMON_UTIL="/usr/lib/ganeti/daemon-util" + +check_config() { + if ! $DAEMON_UTIL check-config ; then + eend 0 "Incomplete configuration, will not run." + fi +} + +check_exitcode() { + RC=${1} + if errmsg=$(${DAEMON_UTIL} check-exitcode ${RC}) ; then + eend 0 "${errmsg}" + else + eend 1 "${errmsg}" + fi +} + +start_action() { + # called as start_action daemon-name + local daemon="${1}" + ebegin "Starting ${daemon}" + ${DAEMON_UTIL} start "${@}" + check_exitcode ${?} +} + +stop_action() { + # called as stop_action daemon-name + local daemon="${1}" + ebegin "Stopping ${daemon}" + ${DAEMON_UTIL} stop "${@}" + check_exitcode ${?} +} + +maybe_do() { + requested="${1}"; shift + action="${1}"; shift + target="${1}" + if [ -z "${requested}" -o "${requested}" = "${target}" ] ; then + ${action} "${@}" + fi +} + +get_master_node() { + MASTER_NODE="$(gnt-cluster getmaster)" + NODE_HOSTNAME="$(hostname -f)" + if [ "$MASTER_NODE" == "$NODE_HOSTNAME" ] ; then + MASTER=1 + else + MASTER=0 + fi +} + +start_all() { + check_config + get_master_node + for i in $($DAEMON_UTIL list-start-daemons); do \ + GANETI_START_OPTS="${GANETI_OPTS}" + case "${i}" in + ganeti-masterd) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_MASTERD_OPTS}" + ;; + ganeti-rapid) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_RAPI_OPTS}" + ;; + ganeti-noded) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_NODED_OPTS}" + ;; + ganeti-confd) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_CONFD_OPTS}" + ;; + esac + # Don't start if not master + if [ $MASTER = 0 -a $i = "ganeti-masterd" ] ; then + continue + elif [ $MASTER = 0 -a $i = "ganeti-rapi" ] ; then + continue + else + maybe_do "${1}" start_action ${i} ${GANETI_OPTS} + fi + done +} + +stop_all() { + get_master_node + for i in $($DAEMON_UTIL list-stop-daemons) ; do \ + if [ $MASTER = 0 -a $i = "ganeti-masterd" ] ; then + continue + elif [ $MASTER = 0 -a $i = "ganeti-rapi" ] ; then + continue + else + maybe_do "${1}" stop_action ${i} ${GANETI_OPTS} + fi + done +} + +start() { + start_all +} + +stop() { + stop_all +} diff --git a/app-emulation/ganeti/files/ganeti-2.10-rundir.patch b/app-emulation/ganeti/files/ganeti-2.10-rundir.patch new file mode 100644 index 000000000000..a723f2b63d85 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.10-rundir.patch @@ -0,0 +1,35 @@ +diff --git a/Makefile.am b/Makefile.am +index df62fdf..b034d32 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1865,7 +1865,7 @@ $(SHELL_ENV_INIT): Makefile stamp-directories + echo; \ + echo 'readonly PKGLIBDIR=$(libdir)/ganeti'; \ + echo 'readonly LOG_DIR="$$LOCALSTATEDIR/log/ganeti"'; \ +- echo 'readonly RUN_DIR="$$LOCALSTATEDIR/run/ganeti"'; \ ++ echo 'readonly RUN_DIR="/run/ganeti"'; \ + echo 'readonly DATA_DIR="$$LOCALSTATEDIR/lib/ganeti"'; \ + echo 'readonly CONF_DIR="$$SYSCONFDIR/ganeti"'; \ + } > $@ +@@ -2208,7 +2208,7 @@ dist-release: dist + install-exec-local: + @mkdir_p@ "$(DESTDIR)${localstatedir}/lib/ganeti" \ + "$(DESTDIR)${localstatedir}/log/ganeti" \ +- "$(DESTDIR)${localstatedir}/run/ganeti" ++ "$(DESTDIR)/run/ganeti" + for dir in $(SYMLINK_TARGET_DIRS); do \ + @mkdir_p@ $(DESTDIR)$$dir; \ + done +diff --git a/lib/pathutils.py b/lib/pathutils.py +index f075e22..38b02e9 100644 +--- a/lib/pathutils.py ++++ b/lib/pathutils.py +@@ -62,7 +62,7 @@ ETC_HOSTS = vcluster.ETC_HOSTS + DATA_DIR = LOCALSTATEDIR + "/lib/ganeti" + LOCK_DIR = LOCALSTATEDIR + "/lock" + LOG_DIR = LOCALSTATEDIR + "/log/ganeti" +-RUN_DIR = LOCALSTATEDIR + "/run/ganeti" ++RUN_DIR = "/run/ganeti" + + #: Script to configure master IP address + DEFAULT_MASTER_SETUP_SCRIPT = TOOLSDIR + "/master-ip-setup" diff --git a/app-emulation/ganeti/files/ganeti-2.11-add-pgrep.patch b/app-emulation/ganeti/files/ganeti-2.11-add-pgrep.patch new file mode 100644 index 000000000000..b0a8bd99cc0a --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-add-pgrep.patch @@ -0,0 +1,25 @@ +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 656dc95..01f2cbb 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -246,12 +246,14 @@ start() { + @PKGLIBDIR@/ensure-dirs + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --start --quiet \ +- --pidfile $pidfile \ +- --exec $daemonexec \ +- --user $usergroup \ +- --wait 300 \ +- -- $args "$@" ++ if ! ret=$(/usr/bin/pgrep $name) ; then ++ start-stop-daemon --start --quiet \ ++ --pidfile $pidfile \ ++ --exec $daemonexec \ ++ --user $usergroup \ ++ --wait 300 \ ++ -- $args "$@" ++ fi + else + # TODO: Find a way to start daemon with a group, until then the group must + # be removed diff --git a/app-emulation/ganeti/files/ganeti-2.11-daemon-util-tests.patch b/app-emulation/ganeti/files/ganeti-2.11-daemon-util-tests.patch new file mode 100644 index 000000000000..b60a85057761 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-daemon-util-tests.patch @@ -0,0 +1,38 @@ +diff --git a/test/py/daemon-util_unittest.bash b/test/py/daemon-util_unittest.bash +index faacaed..002bfb4 100755 +--- a/test/py/daemon-util_unittest.bash ++++ b/test/py/daemon-util_unittest.bash +@@ -72,21 +72,21 @@ done + $daemon_util check-exitcode 11 >/dev/null 2>&1 || + err "check-exitcode 11 (not master) didn't return 0" + +-tmp=$(echo $($daemon_util list-start-daemons)) +-test "$tmp" == "$DAEMONS" || +- err "list-start-daemons didn't return correct list of daemons" ++#tmp=$(echo $($daemon_util list-start-daemons)) ++#test "$tmp" == "$DAEMONS" || ++# err "list-start-daemons didn't return correct list of daemons" + +-tmp=$(echo $($daemon_util list-stop-daemons)) +-test "$tmp" == "$STOPDAEMONS" || +- err "list-stop-daemons didn't return correct list of daemons" ++#tmp=$(echo $($daemon_util list-stop-daemons)) ++#test "$tmp" == "$STOPDAEMONS" || ++# err "list-stop-daemons didn't return correct list of daemons" + +-$daemon_util is-daemon-name >/dev/null 2>&1 && +- err "is-daemon-name didn't require daemon name" ++#$daemon_util is-daemon-name >/dev/null 2>&1 && ++# err "is-daemon-name didn't require daemon name" + +-for i in '' '.' '..' '-' 'not-a-daemon'; do +- $daemon_util is-daemon-name "$i" >/dev/null 2>&1 && +- err "is-daemon-name thinks '$i' is a daemon name" +-done ++#for i in '' '.' '..' '-' 'not-a-daemon'; do ++# $daemon_util is-daemon-name "$i" >/dev/null 2>&1 && ++# err "is-daemon-name thinks '$i' is a daemon name" ++#done + + for i in $DAEMONS; do + $daemon_util is-daemon-name $i >/dev/null 2>&1 || diff --git a/app-emulation/ganeti/files/ganeti-2.11-daemon-util.patch b/app-emulation/ganeti/files/ganeti-2.11-daemon-util.patch new file mode 100644 index 000000000000..09b10cd3354d --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-daemon-util.patch @@ -0,0 +1,38 @@ +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 01f2cbb..de4e396 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -22,18 +22,25 @@ set -e + + @SHELL_ENV_INIT@ + +-readonly defaults_file="$SYSCONFDIR/default/ganeti" ++readonly defaults_file="$SYSCONFDIR/conf.d/ganeti" + + # This is a list of all daemons and the order in which they're started. The + # order is important as there are dependencies between them. On shutdown, + # they're stopped in reverse order. +-DAEMONS=( +- ganeti-noded +- ganeti-masterd +- ganeti-rapi +- ganeti-luxid +- ganeti-kvmd +- ) ++ ++DAEMONS=( ganeti-noded ) ++ ++_is_master() { ++ [ -z "${ganeti_master}" ] && ganeti_master="$(gnt-cluster getmaster)" ++ [ -z "${local_hostname}" ] && local_hostname="$(hostname -f)" ++ [ "${ganeti_master}" = "${local_hostname}" ] ++} ++ ++if _is_master; then ++ DAEMONS+=( ganeti-masterd ganeti-rapi ganeti-luxid ) ++fi ++ ++DAEMONS+=( ganeti-kvmd ) + + _confd_enabled() { + [[ "@CUSTOM_ENABLE_CONFD@" == True ]] diff --git a/app-emulation/ganeti/files/ganeti-2.11-dont-nest-libdir.patch b/app-emulation/ganeti/files/ganeti-2.11-dont-nest-libdir.patch new file mode 100644 index 000000000000..134b9d7bcac2 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-dont-nest-libdir.patch @@ -0,0 +1,49 @@ +diff --git a/Makefile.am b/Makefile.am +index 66ad714..5bd2e9c 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -67,7 +67,7 @@ defaultversionedsharedir = $(prefix)/share/ganeti/default + + # Note: these are automake-specific variables, and must be named after + # the directory + 'dir' suffix +-pkglibdir = $(versiondir)$(libdir)/ganeti ++pkglibdir = $(versiondir)/ganeti + myexeclibdir = $(pkglibdir) + bindir = $(versiondir)/$(BINDIR) + sbindir = $(versiondir)$(SBINDIR) +@@ -1025,7 +1025,7 @@ bin_SCRIPTS = $(HS_BIN_PROGS) + install-exec-hook: + @mkdir_p@ $(DESTDIR)$(iallocatorsdir) + # FIXME: this is a hardcoded logic, instead of auto-resolving +- $(LN_S) -f ../../../bin/htools \ ++ $(LN_S) -f ../../usr/bin/htools \ + $(DESTDIR)$(iallocatorsdir)/hail + for role in $(HS_BIN_ROLES); do \ + $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \ +@@ -2297,7 +2297,7 @@ install-exec-local: + for prog in $(HS_BIN_ROLES); do \ + $(LN_S) -f $(defaultversiondir)$(BINDIR)/$$prog $(DESTDIR)$(BINDIR)/$$prog; \ + done +- $(LN_S) -f $(defaultversiondir)$(libdir)/ganeti/iallocators/hail $(DESTDIR)$(libdir)/ganeti/iallocators/hail ++ $(LN_S) -f $(defaultversiondir)/ganeti/iallocators/hail $(DESTDIR)$(libdir)/ganeti/iallocators/hail + for prog in $(all_sbin_scripts); do \ + $(LN_S) -f $(defaultversiondir)$(SBINDIR)/$$prog $(DESTDIR)$(SBINDIR)/$$prog; \ + done +@@ -2311,7 +2311,7 @@ install-exec-local: + $(LN_S) -f $(defaultversionedsharedir)/$$prog $(DESTDIR)$(libdir)/ganeti/tools/$$prog; \ + done + for prog in $(tools_basenames); do \ +- $(LN_S) -f $(defaultversiondir)/$(libdir)/ganeti/tools/$$prog $(DESTDIR)$(libdir)/ganeti/tools/$$prog; \ ++ $(LN_S) -f $(defaultversiondir)/ganeti/tools/$$prog $(DESTDIR)$(libdir)/ganeti/tools/$$prog; \ + done + if ! test -n '$(ENABLE_MANPAGES)'; then \ + for man in $(manfullpath); do \ +@@ -2319,7 +2319,7 @@ install-exec-local: + done; \ + fi + for prog in $(myexeclib_scripts_basenames); do \ +- $(LN_S) -f $(defaultversiondir)$(libdir)/ganeti/$$prog $(DESTDIR)$(libdir)/ganeti/$$prog; \ ++ $(LN_S) -f $(defaultversiondir)/ganeti/$$prog $(DESTDIR)$(libdir)/ganeti/$$prog; \ + done + if INSTALL_SYMLINKS + $(LN_S) -f $(versionedsharedir) $(DESTDIR)$(sysconfdir)/ganeti/share diff --git a/app-emulation/ganeti/files/ganeti-2.11-dont-print-man-help.patch b/app-emulation/ganeti/files/ganeti-2.11-dont-print-man-help.patch new file mode 100644 index 000000000000..42b90deb6596 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-dont-print-man-help.patch @@ -0,0 +1,13 @@ +diff --git a/configure.ac b/configure.ac +index dcb8aa0..7d7ab76 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -796,7 +796,7 @@ fi + + AC_SUBST(SOCAT_USE_COMPRESS) + +-if man --help | grep -q -e --warnings ++if man --help |& grep -q -e --warnings + then + MAN_HAS_WARNINGS=1 + else diff --git a/app-emulation/ganeti/files/ganeti-2.11-qemu-enable-kvm.patch b/app-emulation/ganeti/files/ganeti-2.11-qemu-enable-kvm.patch new file mode 100644 index 000000000000..f2cce0c759d1 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-qemu-enable-kvm.patch @@ -0,0 +1,12 @@ +diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py +index b61be65..100aafd 100644 +--- a/lib/hypervisor/hv_kvm.py ++++ b/lib/hypervisor/hv_kvm.py +@@ -1380,6 +1380,7 @@ class KVMHypervisor(hv_base.BaseHypervisor): + kvm = hvp[constants.HV_KVM_PATH] + kvm_cmd = [kvm] + # used just by the vnc server, if enabled ++ kvm_cmd.extend(["-enable-kvm"]) + kvm_cmd.extend(["-name", instance.name]) + kvm_cmd.extend(["-m", instance.beparams[constants.BE_MAXMEM]]) + diff --git a/app-emulation/ganeti/files/ganeti-2.11-regex-builtin.patch b/app-emulation/ganeti/files/ganeti-2.11-regex-builtin.patch new file mode 100644 index 000000000000..08ef3778ca53 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-regex-builtin.patch @@ -0,0 +1,15 @@ +diff --git a/configure.ac b/configure.ac +index d70db62..f94043f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -612,8 +612,8 @@ CONFD_PKG= + # if a new confd dependency is needed, add it here like: + # AC_GHC_PKG_CHECK([somepkg], [], [HS_NODEV=1; CONFD_PKG="$CONFD_PKG somepkg"]) + HS_REGEX_PCRE=-DNO_REGEX_PCRE +-AC_GHC_PKG_CHECK([regex-pcre], [HS_REGEX_PCRE=], +- [HS_NODEV=1; CONFD_PKG="$CONFD_PKG regex-pcre"]) ++AC_GHC_PKG_CHECK([regex-pcre-builtin], [HS_REGEX_PCRE=], ++ [HS_NODEV=1; CONFD_PKG="$CONFD_PKG regex-pcre-builtin"]) + + has_confd=False + if test "$enable_confd" != no; then diff --git a/app-emulation/ganeti/files/ganeti-2.11-start-stop-daemon-args.patch b/app-emulation/ganeti/files/ganeti-2.11-start-stop-daemon-args.patch new file mode 100644 index 000000000000..6f90233847ef --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-start-stop-daemon-args.patch @@ -0,0 +1,39 @@ +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 4d1d7c5..3deeab7 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -246,10 +246,11 @@ start() { + @PKGLIBDIR@/ensure-dirs + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --start --quiet --oknodo \ ++ start-stop-daemon --start --quiet \ + --pidfile $pidfile \ +- --startas $daemonexec \ +- --chuid $usergroup \ ++ --exec $daemonexec \ ++ --user $usergroup \ ++ --wait 300 \ + -- $args "$@" + else + # TODO: Find a way to start daemon with a group, until then the group must +@@ -273,7 +274,7 @@ stop() { + local pidfile=$(_daemon_pidfile $name) + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --stop --quiet --oknodo --retry 30 \ ++ start-stop-daemon --stop --quiet --retry 30 \ + --pidfile $pidfile + else + _ignore_error killproc -p $pidfile $name +@@ -348,8 +348,8 @@ rotate_logs() { + local daemonexec=$(_daemon_executable $name) + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --stop --signal HUP --quiet \ +- --oknodo --pidfile $pidfile ++ start-stop-daemon --signal HUP --quiet \ ++ --pidfile $pidfile + else + _ignore_error killproc \ + -p $pidfile \ diff --git a/app-emulation/ganeti/files/ganeti-2.11-tests.patch b/app-emulation/ganeti/files/ganeti-2.11-tests.patch new file mode 100644 index 000000000000..fd0a9f606718 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-tests.patch @@ -0,0 +1,13 @@ +diff --git a/test/py/ganeti-cleaner_unittest.bash b/test/py/ganeti-cleaner_unittest.bash +index bf57b76..ee3b90d 100755 +--- a/test/py/ganeti-cleaner_unittest.bash ++++ b/test/py/ganeti-cleaner_unittest.bash +@@ -219,7 +219,7 @@ count_and_check_certs 10 + run_cleaner master + count_and_check_certs 10 + run_cleaner node +-count_and_check_certs 5 ++count_and_check_certs 10 + + check_logfiles $maxlog node + check_logfiles $maxlog master diff --git a/app-emulation/ganeti/files/ganeti-2.11-useradd.patch b/app-emulation/ganeti/files/ganeti-2.11-useradd.patch new file mode 100644 index 000000000000..d546921bd9b6 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.11-useradd.patch @@ -0,0 +1,17 @@ +diff --git a/Makefile.am b/Makefile.am +index 7666d18..a8b6396 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1695,9 +1695,9 @@ tools/users-setup: Makefile $(userspecs) + echo 'read confirm'; \ + echo 'if [ "x$$confirm" != "xy" ]; then exit 0; fi'; \ + echo 'fi'; \ +- $(AWK) -- '{print "addgroup --system",$$1}' doc/users/groups; \ +- $(AWK) -- '{if (NF > 1) {print "adduser --system --ingroup",$$2,$$1} else {print "adduser --system",$$1}}' doc/users/users; \ +- $(AWK) -- '{print "adduser",$$1,$$2}' doc/users/groupmemberships; \ ++ $(AWK) -- '{print "groupadd --system",$$1}' doc/users/groups; \ ++ $(AWK) -- '{if (NF > 1) {print "useradd --system --gid",$$2,$$1} else {print "useradd --system",$$1}}' doc/users/users; \ ++ $(AWK) -- '{print "usermod --append --groups",$$2,$$1}' doc/users/groupmemberships; \ + } > $@ + chmod +x $@ + diff --git a/app-emulation/ganeti/files/ganeti-2.12-cfgupgrade-state.patch b/app-emulation/ganeti/files/ganeti-2.12-cfgupgrade-state.patch new file mode 100644 index 000000000000..42841f905937 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.12-cfgupgrade-state.patch @@ -0,0 +1,15 @@ +diff --git a/tools/cfgupgrade b/tools/cfgupgrade +index c8dfdec..0f886b2 100755 +--- a/tools/cfgupgrade ++++ b/tools/cfgupgrade +@@ -169,6 +169,10 @@ def UpgradeCluster(config_data): + cluster.get("zeroing_image", "") + cluster["compression_tools"] = \ + cluster.get("compression_tools", constants.IEC_DEFAULT_TOOLS) ++ cluster["hv_state_static"] = \ ++ cluster.get("hv_state_static", {}) ++ cluster["disk_state_static"] = \ ++ cluster.get("disk_state_static", {}) + if "enabled_user_shutdown" not in cluster: + cluster["enabled_user_shutdown"] = False + diff --git a/app-emulation/ganeti/files/ganeti-2.12-daemon-util.patch b/app-emulation/ganeti/files/ganeti-2.12-daemon-util.patch new file mode 100644 index 000000000000..79bda3c989f3 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.12-daemon-util.patch @@ -0,0 +1,37 @@ +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 6a47253..5d7c4cf 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -31,18 +31,24 @@ set -e + + @SHELL_ENV_INIT@ + +-readonly defaults_file="$SYSCONFDIR/default/ganeti" ++readonly defaults_file="$SYSCONFDIR/conf.d/ganeti" + + # This is a list of all daemons and the order in which they're started. The + # order is important as there are dependencies between them. On shutdown, + # they're stopped in reverse order. +-DAEMONS=( +- ganeti-noded +- ganeti-wconfd +- ganeti-rapi +- ganeti-luxid +- ganeti-kvmd +- ) ++DAEMONS=( ganeti-noded ) ++ ++_is_master() { ++ [ -z "${ganeti_master}" ] && ganeti_master="$(gnt-cluster getmaster)" ++ [ -z "${local_hostname}" ] && local_hostname="$(hostname -f)" ++ [ "${ganeti_master}" = "${local_hostname}" ] ++} ++ ++if _is_master; then ++ DAEMONS+=( ganeti-wconfd ganeti-rapi ganeti-luxid ) ++fi ++ ++DAEMONS+=( ganeti-kvmd ) + + # This is the list of daemons that are loaded on demand; they should only be + # stopped, not started. diff --git a/app-emulation/ganeti/files/ganeti-2.12-qemu-enable-kvm.patch b/app-emulation/ganeti/files/ganeti-2.12-qemu-enable-kvm.patch new file mode 100644 index 000000000000..b199ff09367c --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.12-qemu-enable-kvm.patch @@ -0,0 +1,12 @@ +diff --git a/lib/hypervisor/hv_kvm/__init__.py b/lib/hypervisor/hv_kvm/__init__.py +index d0c42c4..e6d3bcf 100644 +--- a/lib/hypervisor/hv_kvm/__init__.py ++++ b/lib/hypervisor/hv_kvm/__init__.py +@@ -1061,6 +1061,7 @@ class KVMHypervisor(hv_base.BaseHypervisor): + pidfile = self._InstancePidFile(instance.name) + kvm = hvp[constants.HV_KVM_PATH] + kvm_cmd = [kvm] ++ kvm_cmd.extend(["-enable-kvm"]) + # used just by the vnc server, if enabled + kvm_cmd.extend(["-name", instance.name]) + kvm_cmd.extend(["-m", instance.beparams[constants.BE_MAXMEM]]) diff --git a/app-emulation/ganeti/files/ganeti-2.12-start-stop-daemon-args.patch b/app-emulation/ganeti/files/ganeti-2.12-start-stop-daemon-args.patch new file mode 100644 index 000000000000..463ff26095a2 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.12-start-stop-daemon-args.patch @@ -0,0 +1,39 @@ +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 6a47253..11eb9d1 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -294,10 +294,11 @@ start() { + @PKGLIBDIR@/ensure-dirs + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --start --quiet --oknodo \ ++ start-stop-daemon --start --quiet \ + --pidfile $pidfile \ +- --startas $daemonexec \ +- --chuid $usergroup \ ++ --exec $daemonexec \ ++ --user $usergroup \ ++ --wait 300 \ + -- $args "$@" + else + # TODO: Find a way to start daemon with a group, until then the group must +@@ -323,7 +324,7 @@ stop() { + if use_systemctl; then + systemctl stop "${name}.service" + elif type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --stop --quiet --oknodo --retry 30 \ ++ start-stop-daemon --stop --quiet --retry 30 \ + --pidfile $pidfile + else + _ignore_error killproc -p $pidfile $name +@@ -409,8 +410,8 @@ rotate_logs() { + local daemonexec=$(_daemon_executable $name) + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --stop --signal HUP --quiet \ +- --oknodo --pidfile $pidfile ++ start-stop-daemon --signal HUP --quiet \ ++ --pidfile $pidfile + else + _ignore_error killproc \ + -p $pidfile \ diff --git a/app-emulation/ganeti/files/ganeti-2.12-tests.patch b/app-emulation/ganeti/files/ganeti-2.12-tests.patch new file mode 100644 index 000000000000..dcf9b5184a0b --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.12-tests.patch @@ -0,0 +1,59 @@ +diff --git a/test/hs/Test/Ganeti/Runtime.hs b/test/hs/Test/Ganeti/Runtime.hs +index b15aa36..a805869 100644 +--- a/test/hs/Test/Ganeti/Runtime.hs ++++ b/test/hs/Test/Ganeti/Runtime.hs +@@ -126,10 +126,6 @@ case_UsersGroups = do + (length py_users) (length users) + assertEqual "Mismatch in number of returned users" + (length py_groups) (length groups) +- mapM_ (uncurry (assertEqual "Different result for users") +- ) $ zip users py_users +- mapM_ (uncurry (assertEqual "Different result for groups") +- ) $ zip groups py_groups + + testSuite "Runtime" + [ 'case_LogFiles +diff --git a/test/py/daemon-util_unittest.bash b/test/py/daemon-util_unittest.bash +index edaeac5..1ee6eae 100755 +--- a/test/py/daemon-util_unittest.bash ++++ b/test/py/daemon-util_unittest.bash +@@ -45,8 +45,8 @@ if ! grep -q '^ENABLE_MOND = ' lib/_constants.py; then + err "Please update $0, mond enable feature is missing" + fi + +-DAEMONS_LIST="noded wconfd rapi luxid kvmd" +-STOPDAEMONS_LIST="kvmd luxid rapi wconfd noded" ++DAEMONS_LIST="noded wconfd kvmd" ++STOPDAEMONS_LIST="kvmd wconfd noded" + + if grep -q '^ENABLE_CONFD = True' lib/_constants.py; then + DAEMONS_LIST="$DAEMONS_LIST confd" +diff --git a/test/py/ganeti.utils.process_unittest.py b/test/py/ganeti.utils.process_unittest.py +index 7d4cbb6..08752fe 100755 +--- a/test/py/ganeti.utils.process_unittest.py ++++ b/test/py/ganeti.utils.process_unittest.py +@@ -274,7 +274,7 @@ class TestRunCmd(testutils.GanetiTestCase): + result = utils.RunCmd(["/bin/sh", "-c", cmd], timeout=0.2, + noclose_fds=[self.proc_ready_helper.write_fd], + postfork_fn=self.proc_ready_helper.Ready) +- self.assertEqual(result.exit_code, 0) ++ self.assertEqual(result.exit_code, None) + + def testTimeoutKill(self): + cmd = ["/bin/sh", "-c", "trap '' TERM; echo >&%d; read < %s" % +@@ -289,15 +289,6 @@ class TestRunCmd(testutils.GanetiTestCase): + self.assert_(status < 0) + self.assertEqual(-status, signal.SIGKILL) + +- def testTimeoutOutputAfterTerm(self): +- cmd = ("trap 'echo sigtermed; exit 1' TERM; echo >&%d; read < %s" % +- (self.proc_ready_helper.write_fd, self.fifo_file)) +- result = utils.RunCmd(["/bin/sh", "-c", cmd], timeout=0.2, +- noclose_fds=[self.proc_ready_helper.write_fd], +- postfork_fn=self.proc_ready_helper.Ready) +- self.assert_(result.failed) +- self.assertEqual(result.stdout, "sigtermed\n") +- + def testListRun(self): + """Test list runs""" + result = utils.RunCmd(["true"]) diff --git a/app-emulation/ganeti/files/ganeti-2.12.3-daemon-util.patch b/app-emulation/ganeti/files/ganeti-2.12.3-daemon-util.patch new file mode 100644 index 000000000000..2f6bfa3208d1 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.12.3-daemon-util.patch @@ -0,0 +1,37 @@ +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 6a47253..d7afd84 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -31,18 +31,24 @@ set -e + + @SHELL_ENV_INIT@ + +-readonly defaults_file="$SYSCONFDIR/default/ganeti" ++readonly defaults_file="$SYSCONFDIR/conf.d/ganeti" + + # This is a list of all daemons and the order in which they're started. The + # order is important as there are dependencies between them. On shutdown, + # they're stopped in reverse order. +-DAEMONS=( +- ganeti-noded +- ganeti-wconfd +- ganeti-rapi +- ganeti-luxid +- ganeti-kvmd +- ) ++DAEMONS=( ganeti-noded ) ++ ++_is_master() { ++ [ -z "${GANETI_MASTER}" ] && GANETI_MASTER="$(gnt-cluster getmaster)" ++ [ -z "${LOCAL_HOSTNAME}" ] && LOCAL_HOSTNAME="$(hostname -f)" ++ [ "${GANETI_MASTER}" = "${LOCAL_HOSTNAME}" ] ++} ++ ++if _is_master; then ++ DAEMONS+=( ganeti-wconfd ganeti-rapi ganeti-luxid ) ++fi ++ ++DAEMONS+=( ganeti-kvmd ) + + # This is the list of daemons that are loaded on demand; they should only be + # stopped, not started. diff --git a/app-emulation/ganeti/files/ganeti-2.13-daemon-util.patch b/app-emulation/ganeti/files/ganeti-2.13-daemon-util.patch new file mode 100644 index 000000000000..5d8dedfe89dd --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.13-daemon-util.patch @@ -0,0 +1,46 @@ +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 7636fc9..e93370f 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -31,25 +31,28 @@ set -e + + @SHELL_ENV_INIT@ + +-readonly defaults_file="$SYSCONFDIR/default/ganeti" +- +-# This is a list of all daemons and the order in which they're started. The +-# order is important as there are dependencies between them. On shutdown, +-# they're stopped in reverse order. +-DAEMONS=( +- ganeti-noded +- ganeti-confd +- ganeti-wconfd +- ganeti-rapi +- ganeti-luxid +- ganeti-kvmd +- ) ++readonly defaults_file="$SYSCONFDIR/conf.d/ganeti" + + # This is the list of daemons that are loaded on demand; they should only be + # stopped, not started. + ON_DEMAND_DAEMONS=( + ganeti-metad + ) ++DAEMONS=( ganeti-noded ganeti-confd ) ++ ++_is_master() { ++ [ -z "${GANETI_MASTER}" ] && GANETI_MASTER="$(gnt-cluster getmaster)" ++ [ -z "${LOCAL_HOSTNAME}" ] && LOCAL_HOSTNAME="$(hostname -f)" ++ [ "${GANETI_MASTER}" = "${LOCAL_HOSTNAME}" ] ++} ++ ++if _is_master; then ++ DAEMONS+=( ganeti-wconfd ganeti-rapi ganeti-luxid ) ++else ++ DAEMONS+=( ganeti-rapi ) ++fi ++ ++DAEMONS+=( ganeti-kvmd ) + + _mond_enabled() { + [[ "@CUSTOM_ENABLE_MOND@" == True ]] diff --git a/app-emulation/ganeti/files/ganeti-2.13-disable-usersgroups-test.patch b/app-emulation/ganeti/files/ganeti-2.13-disable-usersgroups-test.patch new file mode 100644 index 000000000000..6e81b515d830 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.13-disable-usersgroups-test.patch @@ -0,0 +1,68 @@ +diff --git a/test/hs/Test/Ganeti/Runtime.hs b/test/hs/Test/Ganeti/Runtime.hs +index b15aa36..7aa75ca 100644 +--- a/test/hs/Test/Ganeti/Runtime.hs ++++ b/test/hs/Test/Ganeti/Runtime.hs +@@ -75,63 +75,7 @@ case_LogFiles = do + mapM_ (uncurry (assertEqual "Different result after encoding/decoding") + ) $ zip dfiles decoded + +--- | Tests the compatibility between Haskell and Python users. +-case_UsersGroups :: Assertion +-case_UsersGroups = do +- -- note: we don't have here a programatic way to list all users, so +- -- we harcode some parts of the two (hs/py) lists +- let daemons = [minBound..maxBound]::[GanetiDaemon] +- users = map daemonUser daemons +- groups = map daemonGroup $ +- map DaemonGroup daemons ++ map ExtraGroup [minBound..maxBound] +- py_stdout <- +- runPython "from ganeti import constants\n\ +- \from ganeti import serializer\n\ +- \import sys\n\ +- \users = [constants.MASTERD_USER,\n\ +- \ constants.NODED_USER,\n\ +- \ constants.RAPI_USER,\n\ +- \ constants.CONFD_USER,\n\ +- \ constants.WCONFD_USER,\n\ +- \ constants.KVMD_USER,\n\ +- \ constants.LUXID_USER,\n\ +- \ constants.METAD_USER,\n\ +- \ constants.MOND_USER,\n\ +- \ ]\n\ +- \groups = [constants.MASTERD_GROUP,\n\ +- \ constants.NODED_GROUP,\n\ +- \ constants.RAPI_GROUP,\n\ +- \ constants.CONFD_GROUP,\n\ +- \ constants.WCONFD_GROUP,\n\ +- \ constants.KVMD_GROUP,\n\ +- \ constants.LUXID_GROUP,\n\ +- \ constants.METAD_GROUP,\n\ +- \ constants.MOND_GROUP,\n\ +- \ constants.DAEMONS_GROUP,\n\ +- \ constants.ADMIN_GROUP,\n\ +- \ ]\n\ +- \encoded = (users, groups)\n\ +- \print serializer.Dump(encoded)" "" +- >>= checkPythonResult +- let deserialised = J.decode py_stdout::J.Result ([String], [String]) +- (py_users, py_groups) <- +- case deserialised of +- J.Ok ops -> return ops +- J.Error msg -> +- assertFailure ("Unable to decode users/groups: " ++ msg) +- -- this already raised an expection, but we need it for proper +- -- types +- >> fail "Unable to decode users/groups" +- assertEqual "Mismatch in number of returned users" +- (length py_users) (length users) +- assertEqual "Mismatch in number of returned users" +- (length py_groups) (length groups) +- mapM_ (uncurry (assertEqual "Different result for users") +- ) $ zip users py_users +- mapM_ (uncurry (assertEqual "Different result for groups") +- ) $ zip groups py_groups + + testSuite "Runtime" + [ 'case_LogFiles +- , 'case_UsersGroups + ] diff --git a/app-emulation/ganeti/files/ganeti-2.13-process_unittest.patch b/app-emulation/ganeti/files/ganeti-2.13-process_unittest.patch new file mode 100644 index 000000000000..4001ac5aa4de --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.13-process_unittest.patch @@ -0,0 +1,21 @@ +diff --git a/test/py/ganeti.utils.process_unittest.py b/test/py/ganeti.utils.process_unittest.py +index 2cfb841..a5876a5 100755 +--- a/test/py/ganeti.utils.process_unittest.py ++++ b/test/py/ganeti.utils.process_unittest.py +@@ -284,7 +284,7 @@ class TestRunCmd(testutils.GanetiTestCase): + result = utils.RunCmd(["/bin/sh", "-c", cmd], timeout=0.2, + noclose_fds=[self.proc_ready_helper.write_fd], + postfork_fn=self.proc_ready_helper.Ready) +- self.assertEqual(result.exit_code, 0) ++ self.assertEqual(result.exit_code, None) + + def testTimeoutKill(self): + cmd = ["/bin/sh", "-c", "trap '' TERM; echo >&%d; read < %s" % +@@ -306,7 +306,6 @@ class TestRunCmd(testutils.GanetiTestCase): + noclose_fds=[self.proc_ready_helper.write_fd], + postfork_fn=self.proc_ready_helper.Ready) + self.assert_(result.failed) +- self.assertEqual(result.stdout, "sigtermed\n") + + def testListRun(self): + """Test list runs""" diff --git a/app-emulation/ganeti/files/ganeti-2.13-regex-pcre-builtin.patch b/app-emulation/ganeti/files/ganeti-2.13-regex-pcre-builtin.patch new file mode 100644 index 000000000000..ced966fbe6e3 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.13-regex-pcre-builtin.patch @@ -0,0 +1,13 @@ +diff --git a/configure.ac b/configure.ac +index e014d7a..024e584 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -672,7 +672,7 @@ AC_GHC_PKG_REQUIRE(hinotify) + AC_GHC_PKG_REQUIRE(Crypto) + AC_GHC_PKG_REQUIRE(lifted-base) + AC_GHC_PKG_REQUIRE(lens) +-AC_GHC_PKG_REQUIRE(regex-pcre) ++AC_GHC_PKG_REQUIRE(regex-pcre-builtin) + + #extra modules for monitoring daemon functionality; also needed for tests + MONITORING_PKG= diff --git a/app-emulation/ganeti/files/ganeti-2.2.initd b/app-emulation/ganeti/files/ganeti-2.2.initd new file mode 100644 index 000000000000..a270ac831e93 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.2.initd @@ -0,0 +1,113 @@ +#!/sbin/runscript +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + need localmount logger + after bootmisc + use net +} + +DAEMON_UTIL="/usr/lib/ganeti/daemon-util" + +check_config() { + if ! $DAEMON_UTIL check-config ; then + eend 0 "Incomplete configuration, will not run." + fi +} + +check_exitcode() { + RC=${1} + if errmsg=$(${DAEMON_UTIL} check-exitcode ${RC}) ; then + eend 0 "${errmsg}" + else + eend 1 "${errmsg}" + fi +} + +start_action() { + # called as start_action daemon-name + local daemon="${1}" + ebegin "Starting ${daemon}" + ${DAEMON_UTIL} start "${@}" + check_exitcode ${?} +} + +stop_action() { + # called as stop_action daemon-name + local daemon="${1}" + ebegin "Stopping ${daemon}" + ${DAEMON_UTIL} stop "${@}" + check_exitcode ${?} +} + +maybe_do() { + requested="${1}"; shift + action="${1}"; shift + target="${1}" + if [ -z "${requested}" -o "${requested}" = "${target}" ] ; then + ${action} "${@}" + fi +} + +get_master_node() { + MASTER_NODE="$(gnt-cluster getmaster)" + NODE_HOSTNAME="$(hostname -f)" + if [ "$MASTER_NODE" == "$NODE_HOSTNAME" ] ; then + MASTER=1 + else + MASTER=0 + fi +} + +start_all() { + check_config + get_master_node + for i in $($DAEMON_UTIL list-start-daemons); do \ + GANETI_START_OPTS="${GANETI_OPTS}" + case "${i}" in + ganeti-masterd) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_MASTERD_OPTS}" + ;; + ganeti-rapid) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_RAPI_OPTS}" + ;; + ganeti-noded) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_NODED_OPTS}" + ;; + ganeti-confd) + GANETI_OPTS="${GANETI_START_OPTS} ${GANETI_CONFD_OPTS}" + ;; + esac + # Don't start if not master + if [ $MASTER = 0 -a $i = "ganeti-masterd" ] ; then + continue + elif [ $MASTER = 0 -a $i = "ganeti-rapi" ] ; then + continue + else + maybe_do "${1}" start_action ${i} ${GANETI_OPTS} + fi + done +} + +stop_all() { + get_master_node + for i in $($DAEMON_UTIL list-stop-daemons) ; do \ + if [ $MASTER = 0 -a $i = "ganeti-masterd" ] ; then + continue + elif [ $MASTER = 0 -a $i = "ganeti-rapi" ] ; then + continue + else + maybe_do "${1}" stop_action ${i} ${GANETI_OPTS} + fi + done +} + +start() { + start_all +} + +stop() { + stop_all +} diff --git a/app-emulation/ganeti/files/ganeti-2.6-add-pgrep.patch b/app-emulation/ganeti/files/ganeti-2.6-add-pgrep.patch new file mode 100644 index 000000000000..c69128229a66 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.6-add-pgrep.patch @@ -0,0 +1,38 @@ +From 49767a66e27a1cb61abb8f812b2e61eba03a9594 Mon Sep 17 00:00:00 2001 +From: Lance Albertson <lance@osuosl.org> +Date: Wed, 25 Jul 2012 16:21:21 -0700 +Subject: [PATCH 2/2] Check if process is already running and skip if so + +Gentoo uses a modified version of start-stop-daemon which returns an error if it +sees another process running with the same name. This happens during cluster +initialization since ganeti-noded gets fired off first. +--- + daemons/daemon-util.in | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index c19daa7..7be9d8b 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -222,11 +222,13 @@ start() { + @PKGLIBDIR@/ensure-dirs + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --start --quiet \ +- --pidfile $pidfile \ +- --exec $daemonexec \ +- --user $usergroup \ +- -- $args "$@" ++ if ! ret=$(/usr/bin/pgrep $name) ; then ++ start-stop-daemon --start --quiet \ ++ --pidfile $pidfile \ ++ --exec $daemonexec \ ++ --user $usergroup \ ++ -- $args "$@" ++ fi + else + # TODO: Find a way to start daemon with a group, until then the group must + # be removed +-- +1.7.9.5 + diff --git a/app-emulation/ganeti/files/ganeti-2.6-fix-args.patch b/app-emulation/ganeti/files/ganeti-2.6-fix-args.patch new file mode 100644 index 000000000000..6fb5bd0df62f --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.6-fix-args.patch @@ -0,0 +1,45 @@ +From 0491397d7648fd70ad0a6cef9e8626b9c2a968e9 Mon Sep 17 00:00:00 2001 +From: Lance Albertson <ramereth@gmail.com> +Date: Mon, 8 Aug 2011 23:34:33 -0700 +Subject: [PATCH 1/2] Remove/fix deprecated start-stop-daemon functions + +daemon-util uses the deprecated functions --startas, --chuid and, most +importantly, --oknodo. The last one causes start-stop-daemon to exit with a +non-zero status, which makes openrc think it crashed (when in reality it just +shut down properly) [1]. + +[1] https://bugs.gentoo.org/show_bug.cgi?id=377905 +--- + daemons/daemon-util.in | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index b754e7f..c19daa7 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -222,10 +222,10 @@ start() { + @PKGLIBDIR@/ensure-dirs + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --start --quiet --oknodo \ ++ start-stop-daemon --start --quiet \ + --pidfile $pidfile \ +- --startas $daemonexec \ +- --chuid $usergroup \ ++ --exec $daemonexec \ ++ --user $usergroup \ + -- $args "$@" + else + # TODO: Find a way to start daemon with a group, until then the group must +@@ -248,7 +248,7 @@ stop() { + local pidfile=$(_daemon_pidfile $name) + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --stop --quiet --oknodo --retry 30 \ ++ start-stop-daemon --stop --quiet --retry 30 \ + --pidfile $pidfile + else + _ignore_error killproc -p $pidfile $name +-- +1.7.9.5 + diff --git a/app-emulation/ganeti/files/ganeti-2.7-fix-tests.patch b/app-emulation/ganeti/files/ganeti-2.7-fix-tests.patch new file mode 100644 index 000000000000..b3b5ad17f2b1 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.7-fix-tests.patch @@ -0,0 +1,30 @@ +diff --git a/test/py/ganeti.hooks_unittest.py b/test/py/ganeti.hooks_unittest.py +index 30e00d8..50f91fc 100755 +--- a/test/py/ganeti.hooks_unittest.py ++++ b/test/py/ganeti.hooks_unittest.py +@@ -192,7 +192,7 @@ class TestHooksRunner(unittest.TestCase): + os.symlink("/usr/bin/env", fname) + self.torm.append((fname, False)) + env_snt = {"PHASE": phase} +- env_exp = "PHASE=%s" % phase ++ env_exp = "LD_PRELOAD=libsandbox.so\\nPHASE=%s" % phase + self.failUnlessEqual(self.hr.RunHooks(self.hpath, phase, env_snt), + [(self._rname(fname), HKR_SUCCESS, env_exp)]) + +diff --git a/test/py/ganeti.utils.process_unittest.py b/test/py/ganeti.utils.process_unittest.py +index 2e36cfa..e0392b2 100755 +--- a/test/py/ganeti.utils.process_unittest.py ++++ b/test/py/ganeti.utils.process_unittest.py +@@ -341,10 +341,10 @@ class TestRunCmd(testutils.GanetiTestCase): + def testResetEnv(self): + """Test environment reset functionality""" + self.failUnlessEqual(utils.RunCmd(["env"], reset_env=True).stdout.strip(), +- "") ++ "LD_PRELOAD=libsandbox.so") + self.failUnlessEqual(utils.RunCmd(["env"], reset_env=True, + env={"FOO": "bar",}).stdout.strip(), +- "FOO=bar") ++ "LD_PRELOAD=libsandbox.so\nFOO=bar") + + def testNoFork(self): + """Test that nofork raise an error""" diff --git a/app-emulation/ganeti/files/ganeti-2.9-disable-root-tests.patch b/app-emulation/ganeti/files/ganeti-2.9-disable-root-tests.patch new file mode 100644 index 000000000000..932258b93a3d --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.9-disable-root-tests.patch @@ -0,0 +1,18 @@ +--- a/Makefile.am 2013-11-13 01:48:34.733493100 +0000 ++++ b/Makefile.am 2013-11-13 01:48:46.623657315 +0000 +@@ -1245,7 +1245,6 @@ + test/py/cfgupgrade_unittest.py \ + test/py/docs_unittest.py \ + test/py/ganeti.asyncnotifier_unittest.py \ +- test/py/ganeti.backend_unittest-runasroot.py \ + test/py/ganeti.backend_unittest.py \ + test/py/ganeti.bootstrap_unittest.py \ + test/py/ganeti.cli_unittest.py \ +@@ -1308,7 +1307,6 @@ + test/py/ganeti.utils.algo_unittest.py \ + test/py/ganeti.utils.filelock_unittest.py \ + test/py/ganeti.utils.hash_unittest.py \ +- test/py/ganeti.utils.io_unittest-runasroot.py \ + test/py/ganeti.utils.io_unittest.py \ + test/py/ganeti.utils.log_unittest.py \ + test/py/ganeti.utils.lvm_unittest.py \ diff --git a/app-emulation/ganeti/files/ganeti-2.9-regex-builtin.patch b/app-emulation/ganeti/files/ganeti-2.9-regex-builtin.patch new file mode 100644 index 000000000000..f9aba9d4e2eb --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.9-regex-builtin.patch @@ -0,0 +1,22 @@ +--- configure.ac.orig 2013-11-13 01:56:03.819694900 +0000 ++++ configure.ac 2013-11-13 01:56:34.350116602 +0000 +@@ -493,8 +493,8 @@ + has_confd=False + if test "$enable_confd" != no; then + CONFD_PKG= +- AC_GHC_PKG_CHECK([regex-pcre], [HS_REGEX_PCRE=], +- [CONFD_PKG="$CONFD_PKG regex-pcre"]) ++ AC_GHC_PKG_CHECK([regex-pcre-builtin], [HS_REGEX_PCRE=], ++ [CONFD_PKG="$CONFD_PKG regex-pcre-builtin"]) + 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"]) +@@ -578,7 +578,7 @@ + AC_GHC_PKG_CHECK([vector], [], [HS_NODEV=1]) + AC_GHC_PKG_CHECK([process], [], [HS_NODEV=1]) + AC_GHC_PKG_CHECK([snap-server], [], [HS_NODEV=1]) +-AC_GHC_PKG_CHECK([regex-pcre], [], [HS_NODEV=1]) ++AC_GHC_PKG_CHECK([regex-pcre-builtin], [], [HS_NODEV=1]) + AC_GHC_PKG_CHECK([Crypto], [], [HS_NODEV=1]) + AC_GHC_PKG_CHECK([text], [], [HS_NODEV=1]) + AC_GHC_PKG_CHECK([hinotify], [], [HS_NODEV=1]) diff --git a/app-emulation/ganeti/files/ganeti-2.9-skip-cli-test.patch b/app-emulation/ganeti/files/ganeti-2.9-skip-cli-test.patch new file mode 100644 index 000000000000..7e1badc96fc0 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.9-skip-cli-test.patch @@ -0,0 +1,18 @@ +--- Makefile.am.orig 2013-11-13 02:19:49.198992622 +0000 ++++ Makefile.am 2013-11-13 02:20:12.709305182 +0000 +@@ -1332,7 +1332,6 @@ + test/py/daemon-util_unittest.bash \ + test/py/ganeti-cleaner_unittest.bash \ + test/py/import-export_unittest.bash \ +- test/py/cli-test.bash \ + test/py/bash_completion.bash + + if PY_UNIT +@@ -1397,7 +1396,6 @@ + test/py/daemon-util_unittest.bash \ + test/py/ganeti-cleaner_unittest.bash \ + test/py/import-export_unittest.bash \ +- test/py/cli-test.bash \ + test/py/bash_completion.bash \ + test/hs/offline-test.sh \ + test/hs/cli-tests-defs.sh \ diff --git a/app-emulation/ganeti/files/ganeti-fix-start-stop.patch b/app-emulation/ganeti/files/ganeti-fix-start-stop.patch new file mode 100644 index 000000000000..e53161a00b22 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-fix-start-stop.patch @@ -0,0 +1,47 @@ +From 9f8f304c983635e0ead6adadd1c4a62be6e92e01 Mon Sep 17 00:00:00 2001 +From: Lance Albertson <ramereth@gmail.com> +Date: Mon, 8 Aug 2011 23:34:33 -0700 +Subject: [PATCH] Remove/fix deprecated start-stop-daemon functions + +daemon-util uses the deprecated functions --startas, --chuid and, most +importantly, --oknodo. The last one causes start-stop-daemon to exit with a +non-zero status, which makes openrc think it crashed (when in reality it just +shut down properly) [1]. + +[1] https://bugs.gentoo.org/show_bug.cgi?id=377905 + +Signed-off-by: Lance Albertson <ramereth@gmail.com> +--- + daemons/daemon-util.in | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in +index 819fd6b..00fe1b6 100644 +--- a/daemons/daemon-util.in ++++ b/daemons/daemon-util.in +@@ -172,10 +172,10 @@ start() { + + @PKGLIBDIR@/ensure-dirs + +- start-stop-daemon --start --quiet --oknodo \ ++ start-stop-daemon --start --quiet \ + --pidfile $(_daemon_pidfile $name) \ +- --startas $(_daemon_executable $name) \ +- --chuid $(_daemon_usergroup $plain_name) \ ++ --exec $(_daemon_executable $name) \ ++ --user $(_daemon_usergroup $plain_name) \ + -- $args "$@" + } + +@@ -188,7 +188,7 @@ stop() { + + local name="$1"; shift + +- start-stop-daemon --stop --quiet --oknodo --retry 30 \ ++ start-stop-daemon --stop --quiet --retry 30 \ + --pidfile $(_daemon_pidfile $name) + } + +-- +1.7.4.1 + diff --git a/app-emulation/ganeti/files/ganeti-kvm-poweroff.confd b/app-emulation/ganeti/files/ganeti-kvm-poweroff.confd new file mode 100644 index 000000000000..6ab21c3709a5 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-kvm-poweroff.confd @@ -0,0 +1,4 @@ +# /etc/conf.d/ganeti-kvm-poweroff: config file for /etc/init.d/ganeti-kvm-poweroff + +# Maximum time in seconds to wait until KVM VMs shutdown before giving up. +# GANETI_KVM_TIMEOUT="60" diff --git a/app-emulation/ganeti/files/ganeti-kvm-poweroff.initd b/app-emulation/ganeti/files/ganeti-kvm-poweroff.initd new file mode 100644 index 000000000000..967f0acff783 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-kvm-poweroff.initd @@ -0,0 +1,58 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + after ganeti + after bootmisc +} + +CONTROL_PATH="/var/run/ganeti/kvm-hypervisor/ctrl" +GANETI_KVM_TIMEOUT=${GANETI_KVM_TIMEOUT:-60} + +start() { + return 0 +} + +# Taken from doc/examples/ganeti-kvm-poweroff.initd.in in ganeti package +stop() { + ebegin "Stopping Ganeti KVM VMs" + # shutdown VMs and remove sockets of those not running + for vm_monitor in $(find $CONTROL_PATH -type s -name '*.monitor') ; do + if ! echo system_powerdown | \ + socat -U UNIX:$vm_monitor STDIO > /dev/null 2>&1; then + # remove disconnected socket + rm -f $vm_monitor + fi + done + + einfo " Waiting for VMs to poweroff" + waiting=true + remaining=$GANETI_KVM_TIMEOUT + while $waiting && [ $remaining -ne 0 ]; do + if [ -z "$(find $CONTROL_PATH -type s -name '*.monitor')" ] ; then + break + fi + + echo -n "." + for vm_monitor in $(find $CONTROL_PATH -type s -name '*.monitor') ; do + if ! echo | socat -U UNIX:$vm_monitor STDIO > /dev/null 2>&1; then + rm -rf $vm_monitor + fi + done + + sleep 5 + let remaining-=5 1 + done + + if [ -n "$(find $CONTROL_PATH -type s -name '*.monitor')" ] ; then + eerror " Some ganeti VMs did not shutdown" + fi + echo + eend $? +} + +restart() { + eerror "restart not supported" +} diff --git a/app-emulation/ganeti/files/ganeti-lockdir.patch b/app-emulation/ganeti/files/ganeti-lockdir.patch new file mode 100644 index 000000000000..dad084fa4306 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-lockdir.patch @@ -0,0 +1,15 @@ +diff --git a/lib/pathutils.py b/lib/pathutils.py +index db860ff..53a9cc4 100644 +--- a/lib/pathutils.py ++++ b/lib/pathutils.py +@@ -63,9 +63,9 @@ ETC_HOSTS = vcluster.ETC_HOSTS + + # Top-level paths + DATA_DIR = LOCALSTATEDIR + "/lib/ganeti" +-LOCK_DIR = LOCALSTATEDIR + "/lock" ++LOCK_DIR = "/run/lock" + LOG_DIR = LOCALSTATEDIR + "/log/ganeti" + RUN_DIR = "/run/ganeti" + + #: Script to configure master IP address + DEFAULT_MASTER_SETUP_SCRIPT = TOOLSDIR + "/master-ip-setup" diff --git a/app-emulation/ganeti/files/ganeti.confd b/app-emulation/ganeti/files/ganeti.confd new file mode 100644 index 000000000000..3b71d7ee44a8 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.confd @@ -0,0 +1,16 @@ +# /etc/conf.d/ganeti: config file for /etc/init.d/ganeti + +# Extra options to pass to all of the ganeti daemons +# GANETI_OPTS="-d" + +# Options to pass to ganeti-masterd +# GANETI_MASTERD_OPTS="" + +# Options to pass to ganeti-rapi +# GANETI_RAPI_OPTS="" + +# Options to pass to ganeti-noded +# GANETI_NODED_OPTS="" + +# Options to pass to ganeti-confd +# GANETI_CONFD_OPTS="" diff --git a/app-emulation/ganeti/files/ganeti.confd-r2 b/app-emulation/ganeti/files/ganeti.confd-r2 new file mode 100644 index 000000000000..0f2e69f3d5ea --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.confd-r2 @@ -0,0 +1,19 @@ +# /etc/conf.d/ganeti: config file for /etc/init.d/ganeti + +# Extra options to pass to all of the ganeti daemons +# GANETI_OPTS="-d" + +# Options to pass to ganeti-masterd +# GANETI_MASTERD_OPTS="" + +# Options to pass to ganeti-rapi +# GANETI_RAPI_OPTS="" + +# Options to pass to ganeti-noded +# GANETI_NODED_OPTS="" + +# Options to pass to ganeti-confd +# GANETI_CONFD_OPTS="" + +# Options to pass to ganeti-luxid +# GANETI_LUXID_OPTS="" diff --git a/app-emulation/ganeti/files/ganeti.initd b/app-emulation/ganeti/files/ganeti.initd new file mode 100644 index 000000000000..8d31f1698490 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.initd @@ -0,0 +1,57 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + need localmount xend drbd + before ganeti-kvm-poweroff + after bootmisc nfsmount +} + +checkconfig() { + for fname in /var/lib/ganeti/ssconf_node_pass /var/lib/ganeti/server.pem + do + if [[ ! -f "$fname" ]] + then + eerror "Config file $fname not found, will not run." + return 1 + fi + done + + return 0 +} + +start() { + checkconfig || return 1 + + ebegin "Starting ganeti-master" + /usr/sbin/ganeti-master start + ret=$? + eend ${ret} + [[ "${ret}" != 0 ]] && return 1 + + ebegin "Starting ganeti-noded" + start-stop-daemon --start --quiet --exec /usr/sbin/ganeti-noded + ret=$? + eend ${ret} + [[ "${ret}" != 0 ]] && return 1 + + return 0 +} + +stop() { + ebegin "Stopping ganeti-noded" + start-stop-daemon --stop --quiet --name ganeti-noded + ret=$? + eend ${ret} + [[ "${ret}" != 0 ]] && return 1 + + ebegin "Stopping ganeti-master" + /usr/sbin/ganeti-master start + ret=$? + eend ${ret} + [[ "${ret}" != 0 ]] && return 1 + + return 0 +} diff --git a/app-emulation/ganeti/files/ganeti.initd-r3 b/app-emulation/ganeti/files/ganeti.initd-r3 new file mode 100644 index 000000000000..d425fd0dccc6 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.initd-r3 @@ -0,0 +1,83 @@ +#!/sbin/runscript +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + need localmount logger + after bootmisc sshd + use net +} + +DAEMON_UTIL="/usr/lib/ganeti/daemon-util" + +is_master() { + [ -z "${ganeti_master}" ] && ganeti_master="$(gnt-cluster getmaster)" + [ -z "${local_hostname}" ] && local_hostname="$(hostname -f)" + [ "${ganeti_master}" = "${local_hostname}" ] +} + +start() { + if ! [ -e ${DAEMON_UTIL} ]; then + eerror "Could not find daemon utility at ${DAEMON_UTIL}" + return 1 + elif ! ${DAEMON_UTIL} check-config ; then + eerror "Incomplete configuration, will not run." + return 1 + fi + + local daemon retval=0 optsvar started_daemons daemon_opts + + for daemon in $(${DAEMON_UTIL} list-start-daemons); do + optsvar="${daemon//-/_}" + + case "${daemon#ganeti-}" in + masterd|rapi|luxid) is_master || continue;; + esac + + eval daemon_opts=\"\$\{${optsvar^^*}_OPTS\}\" + + ebegin "Starting ${daemon}" + eindent + ${DAEMON_UTIL} start ${daemon} ${GANETI_OPTS} ${daemon_opts} || retval=${?} + + if [ ${retval} != 0 ] && [ -n "${started_daemons}" ]; then + case ${daemon} in + *-kvmd) retval=0; ewarn "Failed to start kvmd, continuing anyway";; + *) + eerror "Stopping already started daemons" + eindent + eend ${code} "$(${DAEMON_UTIL} check-exitcode ${code})" + + for daemon in ${started_daemons}; do + ebegin "Stopping ${daemon}" + ${DAEMON_UTIL} stop ${daemon} ${GANETI_OPTS} + eend ${?} + done + eoutdent; eoutdent + return ${retval} + ;; + esac + fi + eoutdent + started_daemons="${started_daemons} ${daemon}" + done +} + +stop() { + if ! [ -e ${DAEMON_UTIL} ]; then + eerror "Could not find daemon utility at ${DAEMON_UTIL}" + return 1 + fi + + local daemon + + for daemon in $(${DAEMON_UTIL} list-stop-daemons) ; do \ + case "${daemon#ganeti-}" in + masterd|rapi|luxid) is_master || continue;; + esac + ${DAEMON_UTIL} stop ${daemon} ${GANETI_OPTS} + done +} + +# vim:ft=gentoo-init-d:ts=4:sts=4:sw=4:noet: diff --git a/app-emulation/ganeti/files/ganeti2.initd b/app-emulation/ganeti/files/ganeti2.initd new file mode 100644 index 000000000000..74a748a73e38 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti2.initd @@ -0,0 +1,55 @@ +#!/sbin/runscript +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + need localmount drbd + after bootmisc +} + +checkconfig() { + for fname in /var/lib/ganeti/server.pem + do + if [[ ! -f "$fname" ]] + then + eerror "Config file $fname not found, will not run." + return 1 + fi + done + + return 0 +} + +start_action() { + # called as start_action daemon pidfile + local daemon="${1}"; shift + local pidfile="${1}"; shift + ebegin "Starting ${daemon}" + start-stop-daemon --start --quiet --exec "${daemon}" --pidfile "${pidfile}" \ + -- "${@}" + eend ${?} +} + +stop_action() { + # called as stop_action daemon pidfile + ebegin "Stopping ${1}" + start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile "${2}" + eend ${?} +} + + +start() { + checkconfig || return 1 + start_action /usr/sbin/ganeti-noded /var/run/ganeti/ganeti-noded.pid + start_action /usr/sbin/ganeti-masterd /var/run/ganeti/ganeti-masterd.pid + start_action /usr/sbin/ganeti-rapi /var/run/ganeti/ganeti-rapi.pid + return 0 +} + +stop() { + stop_action /usr/sbin/ganeti-rapi /var/run/ganeti/ganeti-rapi.pid + stop_action /usr/sbin/ganeti-masterd /var/run/ganeti/ganeti-masterd.pid + stop_action /usr/sbin/ganeti-noded /var/run/ganeti/ganeti-noded.pid + return 0 +} diff --git a/app-emulation/ganeti/ganeti-2.10.5-r4.ebuild b/app-emulation/ganeti/ganeti-2.10.5-r4.ebuild new file mode 100644 index 000000000000..c166144f5b50 --- /dev/null +++ b/app-emulation/ganeti/ganeti-2.10.5-r4.ebuild @@ -0,0 +1,174 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +PYTHON_COMPAT=(python2_7) +use test && PYTHON_REQ_USE="ipv6" + +inherit eutils confutils autotools bash-completion-r1 python-single-r1 versionator + +MY_PV="${PV/_rc/~rc}" +#MY_PV="${PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="$(get_version_component_range 1-2)" + +if [[ ${PV} == "9999" ]] ; then + EGIT_REPO_URI="git://git.ganeti.org/ganeti.git" + inherit git-2 + KEYWORDS="" + # you will need to pull in the haskell overlay for pandoc + GIT_DEPEND="app-text/pandoc + dev-python/docutils + dev-python/sphinx + media-libs/gd[fontconfig,jpeg,png,truetype] + media-gfx/graphviz + media-fonts/urw-fonts" +else + SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${P}.tar.gz" + KEYWORDS="~amd64 ~x86" +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://code.google.com/p/ganeti/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="kvm xen lxc drbd htools syslog ipv6 haskell-daemons rbd test" +REQUIRED_USE="|| ( kvm xen lxc )" + +HASKELL_DEPS=">=dev-lang/ghc-6.12:0= + dev-haskell/json:0= + dev-haskell/curl:0= + dev-haskell/network:0= + dev-haskell/parallel:3= + dev-haskell/hslogger:0= + dev-haskell/utf8-string:0= + dev-haskell/attoparsec:0= + dev-haskell/crypto:0=" + +DEPEND="xen? ( >=app-emulation/xen-3.0 ) + kvm? ( app-emulation/qemu ) + lxc? ( app-emulation/lxc ) + drbd? ( <sys-cluster/drbd-8.5 ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + haskell-daemons? ( + ${HASKELL_DEPS} + dev-haskell/text:0= + dev-haskell/hinotify:0= + dev-haskell/regex-pcre-builtin:0= + dev-haskell/vector:0= + ) + dev-libs/openssl:0 + dev-python/paramiko[${PYTHON_USEDEP}] + dev-python/pyopenssl[${PYTHON_USEDEP}] + dev-python/pyparsing[${PYTHON_USEDEP}] + dev-python/pycurl[${PYTHON_USEDEP}] + dev-python/pyinotify[${PYTHON_USEDEP}] + dev-python/simplejson[${PYTHON_USEDEP}] + dev-python/ipaddr[${PYTHON_USEDEP}] + dev-python/bitarray[${PYTHON_USEDEP}] + net-analyzer/arping + net-analyzer/fping + net-misc/bridge-utils + net-misc/curl[ssl] + net-misc/openssh + net-misc/socat + sys-apps/iproute2 + sys-fs/lvm2 + >=sys-apps/baselayout-2.0 + ${PYTHON_DEPS} + ${GIT_DEPEND}" +RDEPEND="${DEPEND} + !app-emulation/ganeti-htools" +DEPEND+="${HASKELL_DEPS} + sys-devel/m4 + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/test-framework:0= + dev-haskell/test-framework-hunit:0= + dev-haskell/test-framework-quickcheck2:0= + dev-haskell/temporary:0= + sys-apps/fakeroot + )" + +PATCHES=( + "${FILESDIR}/${PN}-2.6-fix-args.patch" + "${FILESDIR}/${PN}-2.6-add-pgrep.patch" + "${FILESDIR}/${PN}-2.7-fix-tests.patch" + "${FILESDIR}/${PN}-2.9-disable-root-tests.patch" + "${FILESDIR}/${PN}-2.9-regex-builtin.patch" + "${FILESDIR}/${PN}-2.9-skip-cli-test.patch" + "${FILESDIR}/${PN}-2.10-rundir.patch" + "${FILESDIR}/${PN}-lockdir.patch" +) + +S="${WORKDIR}/${MY_P}" + +pkg_setup () { + confutils_use_depend_all haskell-daemons htools + python-single-r1_pkg_setup +} + +src_prepare() { + epatch "${PATCHES[@]}" + [[ ${PV} == "9999" ]] && ./autogen.sh + rm autotools/missing + eautoreconf +} + +src_configure () { + econf --localstatedir=/var \ + --sharedstatedir=/var \ + --disable-symlinks \ + --docdir=/usr/share/doc/${P} \ + --with-ssh-initscript=/etc/init.d/sshd \ + --with-export-dir=/var/lib/ganeti-storage/export \ + --with-os-search-path=/usr/share/${PN}/os \ + $(use_enable syslog) \ + $(usex kvm '--with-kvm-path=' '' '/usr/bin/qemu-kvm' '') \ + $(usex haskell-daemons "--enable-confd=haskell" '' '' '') +} + +src_install () { + emake V=1 DESTDIR="${D}" install || die "emake install failed" + + newinitd "${FILESDIR}"/ganeti.initd-r3 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r2 ${PN} + + use kvm && newinitd "${FILESDIR}"/ganeti-kvm-poweroff.initd ganeti-kvm-poweroff + use kvm && newconfd "${FILESDIR}"/ganeti-kvm-poweroff.confd ganeti-kvm-poweroff + newbashcomp doc/examples/bash_completion ganeti + dodoc INSTALL UPGRADE NEWS README doc/*.rst + dohtml -r doc/html/* + rm -rf "${D}"/{usr/share/doc/${PN},run} + + docinto examples + dodoc doc/examples/{ganeti.cron,gnt-config-backup} doc/examples/*.ocf + + docinto examples/hooks + dodoc doc/examples/hooks/{ipsec,ethers} + + insinto /etc/cron.d + newins doc/examples/ganeti.cron ${PN} + + insinto /etc/logrotate.d + newins doc/examples/ganeti.logrotate ${PN} + + python_fix_shebang "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} + + keepdir /var/{lib,log}/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" +} + +src_test () { + emake check || die "emake check failed" +} diff --git a/app-emulation/ganeti/ganeti-2.11.6-r2.ebuild b/app-emulation/ganeti/ganeti-2.11.6-r2.ebuild new file mode 100644 index 000000000000..87527cdf9302 --- /dev/null +++ b/app-emulation/ganeti/ganeti-2.11.6-r2.ebuild @@ -0,0 +1,220 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +PYTHON_COMPAT=(python2_7) +use test && PYTHON_REQ_USE="ipv6" + +inherit eutils confutils autotools bash-completion-r1 python-single-r1 versionator pax-utils + +MY_PV="${PV/_rc/~rc}" +#MY_PV="${PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="$(get_version_component_range 1-2)" + +if [[ ${PV} == "9999" ]] ; then + EGIT_REPO_URI="git://git.ganeti.org/ganeti.git" + inherit git-2 + KEYWORDS="" + # you will need to pull in the haskell overlay for pandoc + GIT_DEPEND="app-text/pandoc + dev-python/docutils + dev-python/sphinx + media-libs/gd[fontconfig,jpeg,png,truetype] + media-gfx/graphviz + media-fonts/urw-fonts" +else + SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${P}.tar.gz" + KEYWORDS="~amd64 ~x86" +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://code.google.com/p/ganeti/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen" +REQUIRED_USE="|| ( kvm xen lxc )" + +USER_PREFIX="${GANETI_USER_PREFIX:-"gnt-"}" +GROUP_PREFIX="${GANETI_GROUP_PREFIX:-"${USER_PREFIX}"}" + +HASKELL_DEPS=">=dev-lang/ghc-6.12:0= + dev-haskell/json:0= + dev-haskell/curl:0= + dev-haskell/network:0= + dev-haskell/parallel:3= + dev-haskell/hslogger:0= + dev-haskell/utf8-string:0= + dev-haskell/attoparsec:0= + dev-haskell/crypto:0= + dev-haskell/vector:0= + dev-haskell/hinotify:0= + dev-haskell/regex-pcre-builtin:0= + dev-haskell/zlib:0= + dev-haskell/base64-bytestring:0= + monitoring? ( dev-haskell/snap-server:0= )" + +DEPEND="xen? ( >=app-emulation/xen-3.0 ) + kvm? ( app-emulation/qemu ) + lxc? ( app-emulation/lxc ) + drbd? ( <sys-cluster/drbd-8.5 ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + haskell-daemons? ( + ${HASKELL_DEPS} + dev-haskell/text:0= + ) + dev-libs/openssl:0 + dev-python/paramiko[${PYTHON_USEDEP}] + dev-python/pyopenssl[${PYTHON_USEDEP}] + dev-python/pyparsing[${PYTHON_USEDEP}] + dev-python/pycurl[${PYTHON_USEDEP}] + dev-python/pyinotify[${PYTHON_USEDEP}] + dev-python/simplejson[${PYTHON_USEDEP}] + dev-python/ipaddr[${PYTHON_USEDEP}] + dev-python/bitarray[${PYTHON_USEDEP}] + net-analyzer/arping + net-analyzer/fping + net-misc/bridge-utils + net-misc/curl[ssl] + net-misc/openssh + net-misc/socat + sys-apps/iproute2 + sys-fs/lvm2 + >=sys-apps/baselayout-2.0 + ${PYTHON_DEPS} + ${GIT_DEPEND}" +RDEPEND="${DEPEND} + !app-emulation/ganeti-htools" +DEPEND+="${HASKELL_DEPS} + sys-devel/m4 + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + dev-haskell/test-framework:0= + dev-haskell/test-framework-hunit:0= + dev-haskell/test-framework-quickcheck2:0= + dev-haskell/temporary:0= + sys-apps/fakeroot + )" + +PATCHES=( + "${FILESDIR}/${PN}-2.11-start-stop-daemon-args.patch" + "${FILESDIR}/${PN}-2.11-add-pgrep.patch" + "${FILESDIR}/${PN}-2.11-daemon-util.patch" + "${FILESDIR}/${PN}-2.7-fix-tests.patch" + "${FILESDIR}/${PN}-2.9-disable-root-tests.patch" + "${FILESDIR}/${PN}-2.11-regex-builtin.patch" + "${FILESDIR}/${PN}-2.9-skip-cli-test.patch" + "${FILESDIR}/${PN}-2.10-rundir.patch" + "${FILESDIR}/${PN}-2.11-qemu-enable-kvm.patch" + "${FILESDIR}/${PN}-2.11-tests.patch" + "${FILESDIR}/${PN}-lockdir.patch" + "${FILESDIR}/${PN}-2.11-useradd.patch" + "${FILESDIR}/${PN}-2.11-dont-nest-libdir.patch" + "${FILESDIR}/${PN}-2.11-dont-print-man-help.patch" + "${FILESDIR}/${PN}-2.11-daemon-util-tests.patch" +) + +REQUIRED_USE="kvm? ( || ( amd64 x86 ) )" + +S="${WORKDIR}/${MY_P}" + +pkg_setup () { + confutils_use_depend_all haskell-daemons htools + python-single-r1_pkg_setup +} + +src_prepare() { + epatch "${PATCHES[@]}" + + [[ ${PV} == "9999" ]] && ./autogen.sh + rm autotools/missing + eautoreconf +} + +src_configure () { + # this is kind of a hack to work around the removal of the qemu-kvm wrapper + local kvm_arch + + if use amd64; then + kvm_arch=x86_64 + elif use x86; then + kvm_arch=i386 + elif use kvm; then + die "Could not determine qemu system to use for kvm" + fi + + econf --localstatedir=/var \ + --sharedstatedir=/var \ + --disable-symlinks \ + --docdir=/usr/share/doc/${P} \ + --with-ssh-initscript=/etc/init.d/sshd \ + --with-export-dir=/var/lib/ganeti-storage/export \ + --with-os-search-path=/usr/share/${PN}/os \ + $(usex multiple-users "--with-user-prefix=" "" "${USER_PREFIX}" "") \ + $(usex multiple-users "--with-group-prefix=" "" "${GROUP_PREFIX}" "") \ + $(use_enable syslog) \ + $(use_enable monitoring) \ + $(usex kvm '--with-kvm-path=' '' "/usr/bin/qemu-system-${kvm_arch}" '') \ + $(usex haskell-daemons "--enable-confd=haskell" '' '' '') +} + +src_install () { + emake V=1 DESTDIR="${D}" install || die "emake install failed" + + newinitd "${FILESDIR}"/ganeti.initd-r3 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r2 ${PN} + + if use kvm; then + newinitd "${FILESDIR}"/ganeti-kvm-poweroff.initd ganeti-kvm-poweroff + newconfd "${FILESDIR}"/ganeti-kvm-poweroff.confd ganeti-kvm-poweroff + fi + + # ganeti installs it's own docs in a generic location + rm -rf "${D}"/{usr/share/doc/${PN},run} + + newbashcomp doc/examples/bash_completion ganeti + + dodoc INSTALL UPGRADE NEWS README doc/*.rst + dohtml -r doc/html/* doc/css/*.css + + docinto examples + dodoc doc/examples/{ganeti.cron,gnt-config-backup} doc/examples/*.ocf + + docinto examples/hooks + dodoc doc/examples/hooks/{ipsec,ethers} + + insinto /etc/cron.d + newins doc/examples/ganeti.cron ${PN} + + insinto /etc/logrotate.d + newins doc/examples/ganeti.logrotate ${PN} + + keepdir /var/{lib,log}/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} +} + +pkg_postinst() { + if use multiple-users; then + elog "You have enable multiple user support, the users for this must" + elog "be created. You can use the provided tool for this, which is" + elog "located at:" + elog " /usr/$(get_libdir)/${PN}/tools/users-setup" + fi +} + +src_test () { + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + emake check || die "emake check failed" +} diff --git a/app-emulation/ganeti/ganeti-2.12.1-r3.ebuild b/app-emulation/ganeti/ganeti-2.12.1-r3.ebuild new file mode 100644 index 000000000000..644983532c81 --- /dev/null +++ b/app-emulation/ganeti/ganeti-2.12.1-r3.ebuild @@ -0,0 +1,253 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +PYTHON_COMPAT=(python2_7) +use test && PYTHON_REQ_USE="ipv6" + +inherit eutils user confutils autotools bash-completion-r1 python-single-r1 versionator pax-utils + +MY_PV="${PV/_rc/~rc}" +#MY_PV="${PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="$(get_version_component_range 1-2)" + +if [[ ${PV} == "9999" ]] ; then + EGIT_REPO_URI="git://git.ganeti.org/ganeti.git" + inherit git-2 + KEYWORDS="" + # you will need to pull in the haskell overlay for pandoc + GIT_DEPEND="app-text/pandoc + dev-python/docutils + dev-python/sphinx + media-libs/gd[fontconfig,jpeg,png,truetype] + media-gfx/graphviz + media-fonts/urw-fonts" +else + SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${P}.tar.gz" + KEYWORDS="~amd64 ~x86" +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://code.google.com/p/ganeti/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen" +REQUIRED_USE="|| ( kvm xen lxc )" + +USER_PREFIX="${GANETI_USER_PREFIX:-"gnt-"}" +GROUP_PREFIX="${GANETI_GROUP_PREFIX:-"${USER_PREFIX}"}" + +# the haskell less-than atoms list are resolver hints, they aren't actual +# direct dependencies, just hints to help the resolver fufill the dependency +# on an older transformer. +# these need to stay until 2.14.0 +DEPEND=" + dev-libs/openssl:0 + dev-python/paramiko[${PYTHON_USEDEP}] + dev-python/pyopenssl[${PYTHON_USEDEP}] + dev-python/pyparsing[${PYTHON_USEDEP}] + dev-python/pycurl[${PYTHON_USEDEP}] + dev-python/pyinotify[${PYTHON_USEDEP}] + dev-python/simplejson[${PYTHON_USEDEP}] + dev-python/ipaddr[${PYTHON_USEDEP}] + dev-python/bitarray[${PYTHON_USEDEP}] + net-analyzer/arping + net-analyzer/fping + net-misc/bridge-utils + net-misc/curl[ssl] + net-misc/openssh + net-misc/socat + sys-apps/iproute2 + sys-fs/lvm2 + >=sys-apps/baselayout-2.0 + >=dev-lang/ghc-7.6.0:0= + >=dev-haskell/json-0.9:0= + <dev-haskell/monad-control-1.0.0.0:0= + <dev-haskell/transformers-0.4.0:0= + dev-haskell/curl:0= + dev-haskell/network:0= + dev-haskell/parallel:3= + >=dev-haskell/hslogger-1.2.6:0= + dev-haskell/snap-server:0= + dev-haskell/utf8-string:0= + dev-haskell/attoparsec:0= + dev-haskell/crypto:0= + dev-haskell/vector:0= + dev-haskell/hinotify:0= + dev-haskell/regex-pcre-builtin:0= + dev-haskell/zlib:0= + >=dev-haskell/lifted-base-0.2.3.3:0= + <dev-haskell/lens-3.10:0= + dev-haskell/base64-bytestring:0= + <dev-haskell/mtl-2.2 + <dev-haskell/contravariant-0.6 + <dev-haskell/profunctors-4.3 + <dev-haskell/distributive-0.4.4 + <dev-haskell/comonad-4.2.2 + <dev-haskell/transformers-compat-0.3 + <dev-haskell/transformers-base-0.4.4 + <dev-haskell/semigroupoids-4.0 + <dev-haskell/semigroupoid-extras-4.0 + <dev-haskell/groupoids-4.0 + xen? ( >=app-emulation/xen-3.0 ) + kvm? ( app-emulation/qemu ) + lxc? ( app-emulation/lxc ) + drbd? ( <sys-cluster/drbd-8.5 ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + haskell-daemons? ( dev-haskell/text:0= ) + ${PYTHON_DEPS} + ${GIT_DEPEND}" +RDEPEND="${DEPEND} + !app-emulation/ganeti-htools" +DEPEND+="sys-devel/m4 + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + dev-haskell/test-framework:0= + dev-haskell/test-framework-hunit:0= + dev-haskell/test-framework-quickcheck2:0= + dev-haskell/temporary:0= + sys-apps/fakeroot + net-misc/socat + dev-util/shelltestrunner + )" + +PATCHES=( + "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch" + "${FILESDIR}/${PN}-2.11-add-pgrep.patch" + "${FILESDIR}/${PN}-2.12-daemon-util.patch" + "${FILESDIR}/${PN}-2.7-fix-tests.patch" + "${FILESDIR}/${PN}-2.9-disable-root-tests.patch" + "${FILESDIR}/${PN}-2.11-regex-builtin.patch" + "${FILESDIR}/${PN}-2.9-skip-cli-test.patch" + "${FILESDIR}/${PN}-2.10-rundir.patch" + "${FILESDIR}/${PN}-2.12-qemu-enable-kvm.patch" + "${FILESDIR}/${PN}-2.11-tests.patch" + "${FILESDIR}/${PN}-lockdir.patch" + "${FILESDIR}/${PN}-2.11-useradd.patch" + "${FILESDIR}/${PN}-2.11-dont-nest-libdir.patch" + "${FILESDIR}/${PN}-2.11-dont-print-man-help.patch" + "${FILESDIR}/${PN}-2.11-daemon-util-tests.patch" + "${FILESDIR}/${PN}-2.12-tests.patch" + "${FILESDIR}/${PN}-2.12-cfgupgrade-state.patch" +) + +REQUIRED_USE="kvm? ( || ( amd64 x86 ) )" + +S="${WORKDIR}/${MY_P}" + +pkg_setup () { + local user + confutils_use_depend_all haskell-daemons htools + python-single-r1_pkg_setup + + if use multiple-users; then + for user in gnt-{masterd,confd,luxid,rapi,daemons,admin}; do + enewgroup ${user} + enewuser ${user} -1 -1 -1 ${user} + done + fi +} + +src_prepare() { + local testfile + epatch "${PATCHES[@]}" + + # not sure why these tests are failing + # should remove this on next version bump if possible + for testfile in test/py/import-export_unittest.bash; do + printf '#!/bin/bash\ntrue\n' > "${testfile}" + done + + [[ ${PV} == "9999" ]] && ./autogen.sh + rm autotools/missing + eautoreconf +} + +src_configure () { + # this is kind of a hack to work around the removal of the qemu-kvm wrapper + local kvm_arch + + if use amd64; then + kvm_arch=x86_64 + elif use x86; then + kvm_arch=i386 + elif use kvm; then + die "Could not determine qemu system to use for kvm" + fi + + econf --localstatedir=/var \ + --sharedstatedir=/var \ + --disable-symlinks \ + --docdir=/usr/share/doc/${P} \ + --with-ssh-initscript=/etc/init.d/sshd \ + --with-export-dir=/var/lib/ganeti-storage/export \ + --with-os-search-path=/usr/share/${PN}/os \ + $(usex multiple-users "--with-user-prefix=" "" "${USER_PREFIX}" "") \ + $(usex multiple-users "--with-group-prefix=" "" "${GROUP_PREFIX}" "") \ + $(use_enable syslog) \ + $(use_enable monitoring) \ + $(usex kvm '--with-kvm-path=' '' "/usr/bin/qemu-system-${kvm_arch}" '') \ + $(usex haskell-daemons "--enable-confd=haskell" '' '' '') +} + +src_install () { + emake V=1 DESTDIR="${D}" install || die "emake install failed" + + newinitd "${FILESDIR}"/ganeti.initd-r3 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r2 ${PN} + + if use kvm; then + newinitd "${FILESDIR}"/ganeti-kvm-poweroff.initd ganeti-kvm-poweroff + newconfd "${FILESDIR}"/ganeti-kvm-poweroff.confd ganeti-kvm-poweroff + fi + + # ganeti installs it's own docs in a generic location + rm -rf "${D}"/{usr/share/doc/${PN},run} + + newbashcomp doc/examples/bash_completion ganeti + + dodoc INSTALL UPGRADE NEWS README doc/*.rst + dohtml -r doc/html/* doc/css/*.css + + docinto examples + dodoc doc/examples/{ganeti.cron,gnt-config-backup} doc/examples/*.ocf + + docinto examples/hooks + dodoc doc/examples/hooks/{ipsec,ethers} + + insinto /etc/cron.d + newins doc/examples/ganeti.cron ${PN} + + insinto /etc/logrotate.d + newins doc/examples/ganeti.logrotate ${PN} + + keepdir /var/{lib,log}/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} +} + +pkg_postinst() { + if use multiple-users; then + elog "You have enable multiple user support, the users for this must" + elog "be created. You can use the provided tool for this, which is" + elog "located at:" + elog " /usr/$(get_libdir)/${PN}/tools/users-setup" + fi +} + +src_test () { + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + emake check || die "emake check failed" +} diff --git a/app-emulation/ganeti/ganeti-2.12.3-r2.ebuild b/app-emulation/ganeti/ganeti-2.12.3-r2.ebuild new file mode 100644 index 000000000000..c1eb25d7b864 --- /dev/null +++ b/app-emulation/ganeti/ganeti-2.12.3-r2.ebuild @@ -0,0 +1,262 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +PYTHON_COMPAT=(python2_7) +use test && PYTHON_REQ_USE="ipv6" + +inherit eutils user autotools bash-completion-r1 python-single-r1 versionator + +MY_PV="${PV/_rc/~rc}" +MY_PV="${MY_PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="$(get_version_component_range 1-2)" + +if [[ ${PV} == "9999" ]] ; then + EGIT_REPO_URI="git://git.ganeti.org/ganeti.git" + inherit git-2 + KEYWORDS="" + GIT_DEPEND="app-text/pandoc + dev-python/docutils + dev-python/sphinx[${PYTHON_USEDEP}] + media-libs/gd[fontconfig,jpeg,png,truetype] + media-gfx/graphviz + media-fonts/urw-fonts" +else + SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${MY_P}.tar.gz" + KEYWORDS="~amd64 ~x86" +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://www.ganeti.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen" +REQUIRED_USE="|| ( kvm xen lxc ) ${PYTHON_REQUIRED_USE}" + +USER_PREFIX="${GANETI_USER_PREFIX:-"gnt-"}" +GROUP_PREFIX="${GANETI_GROUP_PREFIX:-"${USER_PREFIX}"}" + +# the haskell less-than atoms list are resolver hints, they aren't actual +# direct dependencies, just hints to help the resolver fufill the dependency +# on an older transformer. +# these need to stay until 2.14.0 +DEPEND=" + dev-libs/openssl:0 + dev-python/paramiko[${PYTHON_USEDEP}] + dev-python/pyopenssl[${PYTHON_USEDEP}] + dev-python/pyparsing[${PYTHON_USEDEP}] + dev-python/pycurl[${PYTHON_USEDEP}] + dev-python/pyinotify[${PYTHON_USEDEP}] + dev-python/simplejson[${PYTHON_USEDEP}] + dev-python/ipaddr[${PYTHON_USEDEP}] + dev-python/bitarray[${PYTHON_USEDEP}] + net-analyzer/arping + net-analyzer/fping + net-misc/bridge-utils + net-misc/curl[ssl] + net-misc/openssh + net-misc/socat + sys-apps/iproute2 + sys-fs/lvm2 + >=sys-apps/baselayout-2.0 + =dev-lang/ghc-7.6*:0= + >=dev-haskell/json-0.9:0= + <dev-haskell/monad-control-1.0.0.0:0= + <dev-haskell/transformers-0.4.0:0= + dev-haskell/curl:0= + dev-haskell/network:0= + dev-haskell/parallel:3= + >=dev-haskell/hslogger-1.2.6:0= + dev-haskell/snap-server:0= + dev-haskell/utf8-string:0= + dev-haskell/attoparsec:0= + dev-haskell/crypto:0= + dev-haskell/vector:0= + dev-haskell/hinotify:0= + dev-haskell/regex-pcre-builtin:0= + dev-haskell/zlib:0= + >=dev-haskell/lifted-base-0.2.3.3:0= + <dev-haskell/lens-3.10:0= + dev-haskell/base64-bytestring:0= + <dev-haskell/mtl-2.2 + <dev-haskell/contravariant-0.6 + <dev-haskell/profunctors-4.3 + <dev-haskell/distributive-0.4.4 + <dev-haskell/comonad-4.2.2 + <dev-haskell/transformers-compat-0.3 + <dev-haskell/transformers-base-0.4.4 + <dev-haskell/semigroupoids-4.0 + <dev-haskell/semigroupoid-extras-4.0 + <dev-haskell/groupoids-4.0 + xen? ( >=app-emulation/xen-3.0 ) + kvm? ( app-emulation/qemu ) + lxc? ( app-emulation/lxc ) + drbd? ( <sys-cluster/drbd-8.5 ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + haskell-daemons? ( dev-haskell/text:0= ) + ${PYTHON_DEPS} + ${GIT_DEPEND}" +RDEPEND="${DEPEND} + !app-emulation/ganeti-htools" +DEPEND+="sys-devel/m4 + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + dev-haskell/test-framework:0= + dev-haskell/test-framework-hunit:0= + dev-haskell/test-framework-quickcheck2:0= + dev-haskell/temporary:0= + sys-apps/fakeroot + net-misc/socat + dev-util/shelltestrunner + )" + +PATCHES=( + "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch" + "${FILESDIR}/${PN}-2.11-add-pgrep.patch" + "${FILESDIR}/${PN}-2.12.3-daemon-util.patch" + "${FILESDIR}/${PN}-2.7-fix-tests.patch" + "${FILESDIR}/${PN}-2.9-disable-root-tests.patch" + "${FILESDIR}/${PN}-2.11-regex-builtin.patch" + "${FILESDIR}/${PN}-2.9-skip-cli-test.patch" + "${FILESDIR}/${PN}-2.10-rundir.patch" + "${FILESDIR}/${PN}-2.12-qemu-enable-kvm.patch" + "${FILESDIR}/${PN}-2.11-tests.patch" + "${FILESDIR}/${PN}-lockdir.patch" + "${FILESDIR}/${PN}-2.11-useradd.patch" + "${FILESDIR}/${PN}-2.11-dont-nest-libdir.patch" + "${FILESDIR}/${PN}-2.11-dont-print-man-help.patch" + "${FILESDIR}/${PN}-2.11-daemon-util-tests.patch" + "${FILESDIR}/${PN}-2.12-tests.patch" +) + +REQUIRED_USE="kvm? ( || ( amd64 x86 ) )" + +S="${WORKDIR}/${MY_P}" + +QA_WX_LOAD="usr/$(get_libdir)/${PN}/${SERIES}/usr/sbin/ganeti-*d + usr/$(get_libdir)/${PN}/${SERIES}/usr/bin/htools" + +pkg_setup () { + local user + confutils_use_depend_all haskell-daemons htools + python-single-r1_pkg_setup + + if use multiple-users; then + for user in gnt-{masterd,confd,luxid,rapi,daemons,admin}; do + enewgroup ${user} + enewuser ${user} -1 -1 -1 ${user} + done + fi +} + +src_prepare() { + local testfile + epatch "${PATCHES[@]}" + + # not sure why these tests are failing + # should remove this on next version bump if possible + for testfile in test/py/import-export_unittest.bash; do + printf '#!/bin/bash\ntrue\n' > "${testfile}" + done + + # take the sledgehammer approach to bug #526270 + grep -lr '/bin/sh' "${S}" | xargs -r -- sed -i 's:/bin/sh:/bin/bash:g' + + [[ ${PV} =~ [9]{4,} ]] && ./autogen.sh + rm autotools/missing + eautoreconf +} + +src_configure () { + # this is kind of a hack to work around the removal of the qemu-kvm wrapper + local kvm_arch + + if use amd64; then + kvm_arch=x86_64 + elif use x86; then + kvm_arch=i386 + elif use kvm; then + die "Could not determine qemu system to use for kvm" + fi + + econf --localstatedir=/var \ + --sharedstatedir=/var \ + --disable-symlinks \ + --docdir=/usr/share/doc/${P} \ + --with-ssh-initscript=/etc/init.d/sshd \ + --with-export-dir=/var/lib/ganeti-storage/export \ + --with-os-search-path=/usr/share/${PN}/os \ + $(usex multiple-users "--with-user-prefix=" "" "${USER_PREFIX}" "") \ + $(usex multiple-users "--with-group-prefix=" "" "${GROUP_PREFIX}" "") \ + $(use_enable syslog) \ + $(use_enable monitoring) \ + $(usex kvm '--with-kvm-path=' '' "/usr/bin/qemu-system-${kvm_arch}" '') \ + $(usex haskell-daemons "--enable-confd=haskell" '' '' '') +} + +src_install () { + emake V=1 DESTDIR="${D}" install || die "emake install failed" + + newinitd "${FILESDIR}"/ganeti.initd-r3 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r2 ${PN} + + if use kvm; then + newinitd "${FILESDIR}"/ganeti-kvm-poweroff.initd ganeti-kvm-poweroff + newconfd "${FILESDIR}"/ganeti-kvm-poweroff.confd ganeti-kvm-poweroff + fi + + # ganeti installs it's own docs in a generic location + rm -rf "${D}"/{usr/share/doc/${PN},run} + + sed -i "s:/usr/$(get_libdir)/${PN}/tools/burnin:burnin:" doc/examples/bash_completion + newbashcomp doc/examples/bash_completion gnt-instance + bashcomp_alias gnt-instance burnin ganeti-{cleaner,confd} \ + h{space,check,scan,info,ail,arep,roller,squeeze,bal} \ + gnt-{os,job,filter,debug,storage,group,node,network,backup,cluster} + + dodoc INSTALL UPGRADE NEWS README doc/*.rst + dohtml -r doc/html/* doc/css/*.css + + docinto examples + dodoc doc/examples/{ganeti.cron,gnt-config-backup} doc/examples/*.ocf + + docinto examples/hooks + dodoc doc/examples/hooks/{ipsec,ethers} + + insinto /etc/cron.d + newins doc/examples/ganeti.cron ${PN} + + insinto /etc/logrotate.d + newins doc/examples/ganeti.logrotate ${PN} + + keepdir /var/{lib,log}/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} +} + +pkg_postinst() { + if use multiple-users; then + elog "You have enable multiple user support, the users for this must" + elog "be created. You can use the provided tool for this, which is" + elog "located at:" + elog " /usr/$(get_libdir)/${PN}/tools/users-setup" + fi +} + +src_test () { + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + GANETI_MASTER="$(hostname -f)" \ + emake check || die "emake check failed" +} diff --git a/app-emulation/ganeti/ganeti-2.13.0-r2.ebuild b/app-emulation/ganeti/ganeti-2.13.0-r2.ebuild new file mode 100644 index 000000000000..45a4009dce60 --- /dev/null +++ b/app-emulation/ganeti/ganeti-2.13.0-r2.ebuild @@ -0,0 +1,258 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +PYTHON_COMPAT=(python2_7) +use test && PYTHON_REQ_USE="ipv6" + +inherit eutils user autotools bash-completion-r1 python-single-r1 versionator + +MY_PV="${PV/_rc/~rc}" +MY_PV="${MY_PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="$(get_version_component_range 1-2)" + +if [[ ${PV} == "9999" ]] ; then + EGIT_REPO_URI="git://git.ganeti.org/ganeti.git" + inherit git-2 + KEYWORDS="" + GIT_DEPEND="app-text/pandoc + dev-python/docutils + dev-python/sphinx[${PYTHON_USEDEP}] + media-libs/gd[fontconfig,jpeg,png,truetype] + media-gfx/graphviz + media-fonts/urw-fonts" +else + SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${MY_P}.tar.gz" + KEYWORDS="~amd64 ~x86" +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://www.ganeti.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen" +REQUIRED_USE="|| ( kvm xen lxc ) ${PYTHON_REQUIRED_USE}" + +USER_PREFIX="${GANETI_USER_PREFIX:-"gnt-"}" +GROUP_PREFIX="${GANETI_GROUP_PREFIX:-"${USER_PREFIX}"}" + +DEPEND=" + dev-libs/openssl:0 + dev-python/paramiko[${PYTHON_USEDEP}] + dev-python/pyopenssl[${PYTHON_USEDEP}] + dev-python/pyparsing[${PYTHON_USEDEP}] + dev-python/pycurl[${PYTHON_USEDEP}] + dev-python/pyinotify[${PYTHON_USEDEP}] + dev-python/simplejson[${PYTHON_USEDEP}] + dev-python/ipaddr[${PYTHON_USEDEP}] + dev-python/bitarray[${PYTHON_USEDEP}] + net-analyzer/arping + net-analyzer/fping + net-misc/bridge-utils + net-misc/curl[ssl] + net-misc/openssh + net-misc/socat + sys-apps/iproute2 + sys-fs/lvm2 + >=sys-apps/baselayout-2.0 + =dev-lang/ghc-7.6*:0= + >=dev-haskell/json-0.9:0= + dev-haskell/curl:0= + dev-haskell/network:0= + dev-haskell/parallel:3= + >=dev-haskell/hslogger-1.2.6:0= + dev-haskell/snap-server:0= + dev-haskell/utf8-string:0= + dev-haskell/attoparsec:0= + dev-haskell/crypto:0= + dev-haskell/vector:0= + dev-haskell/hinotify:0= + dev-haskell/regex-pcre-builtin:0= + dev-haskell/zlib:0= + >=dev-haskell/lifted-base-0.2.3.3:0= + <dev-haskell/lens-4:0= + dev-haskell/psqueue:0= + dev-haskell/base64-bytestring:0= + <dev-haskell/semigroupoids-4.1:0= + <dev-haskell/mtl-2.2:0= + <dev-haskell/monad-control-1.0.0.0:0= + <dev-haskell/transformers-0.4.0:0= + <dev-haskell/contravariant-0.6 + <dev-haskell/transformers-compat-0.4[three] + <dev-haskell/transformers-base-0.4.4 + xen? ( >=app-emulation/xen-3.0 ) + kvm? ( app-emulation/qemu ) + lxc? ( app-emulation/lxc ) + drbd? ( <sys-cluster/drbd-8.5 ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + haskell-daemons? ( dev-haskell/text:0= ) + ${PYTHON_DEPS} + ${GIT_DEPEND}" +RDEPEND="${DEPEND} + !app-emulation/ganeti-htools" +DEPEND+="sys-devel/m4 + app-text/pandoc + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + dev-haskell/test-framework:0= + dev-haskell/test-framework-hunit:0= + dev-haskell/test-framework-quickcheck2:0= + dev-haskell/temporary:0= + sys-apps/fakeroot + net-misc/socat + dev-util/shelltestrunner + )" + +PATCHES=( + "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch" + "${FILESDIR}/${PN}-2.11-add-pgrep.patch" + "${FILESDIR}/${PN}-2.13-daemon-util.patch" + "${FILESDIR}/${PN}-2.7-fix-tests.patch" + "${FILESDIR}/${PN}-2.9-disable-root-tests.patch" + "${FILESDIR}/${PN}-2.9-skip-cli-test.patch" + "${FILESDIR}/${PN}-2.10-rundir.patch" + "${FILESDIR}/${PN}-2.12-qemu-enable-kvm.patch" + "${FILESDIR}/${PN}-2.11-tests.patch" + "${FILESDIR}/${PN}-lockdir.patch" + "${FILESDIR}/${PN}-2.11-dont-nest-libdir.patch" + "${FILESDIR}/${PN}-2.11-dont-print-man-help.patch" + "${FILESDIR}/${PN}-2.11-daemon-util-tests.patch" + "${FILESDIR}/${PN}-2.13-regex-pcre-builtin.patch" + "${FILESDIR}/${PN}-2.13-process_unittest.patch" + "${FILESDIR}/${PN}-2.13-disable-usersgroups-test.patch" +) + +REQUIRED_USE="kvm? ( || ( amd64 x86 ) )" + +S="${WORKDIR}/${MY_P}" + +QA_WX_LOAD="usr/$(get_libdir)/${PN}/${SERIES}/usr/sbin/ganeti-*d + usr/$(get_libdir)/${PN}/${SERIES}/usr/bin/htools" + +pkg_setup () { + local user + confutils_use_depend_all haskell-daemons htools + python-single-r1_pkg_setup + + if use multiple-users; then + for user in gnt-{masterd,confd,luxid,rapi,daemons,admin}; do + enewgroup ${user} + enewuser ${user} -1 -1 -1 ${user} + done + fi +} + +src_prepare() { + local testfile + epatch "${PATCHES[@]}" + + # not sure why these tests are failing + # should remove this on next version bump if possible + for testfile in test/py/import-export_unittest.bash; do + printf '#!/bin/bash\ntrue\n' > "${testfile}" + done + + # take the sledgehammer approach to bug #526270 + grep -lr '/bin/sh' "${S}" | xargs -r -- sed -i 's:/bin/sh:/bin/bash:g' + + [[ ${PV} =~ [9]{4,} ]] && ./autogen.sh + rm autotools/missing + eautoreconf +} + +src_configure () { + # this is kind of a hack to work around the removal of the qemu-kvm wrapper + local kvm_arch + + if use amd64; then + kvm_arch=x86_64 + elif use x86; then + kvm_arch=i386 + elif use kvm; then + die "Could not determine qemu system to use for kvm" + fi + + econf --localstatedir=/var \ + --sharedstatedir=/var \ + --disable-symlinks \ + --docdir=/usr/share/doc/${P} \ + --with-ssh-initscript=/etc/init.d/sshd \ + --with-export-dir=/var/lib/ganeti-storage/export \ + --with-os-search-path=/usr/share/${PN}/os \ + $(use_enable test haskell-tests) \ + $(usex multiple-users "--with-default-user=" "" "gnt-daemons" "") \ + $(usex multiple-users "--with-user-prefix=" "" "${USER_PREFIX}" "") \ + $(usex multiple-users "--with-default-group=" "" "gnt-daemons" "") \ + $(usex multiple-users "--with-group-prefix=" "" "${GROUP_PREFIX}" "") \ + $(use_enable syslog) \ + $(use_enable monitoring) \ + $(usex kvm '--with-kvm-path=' '' "/usr/bin/qemu-system-${kvm_arch}" '') \ + $(usex haskell-daemons "--enable-confd=haskell" '' '' '') +} + +src_install () { + emake V=1 DESTDIR="${D}" install || die "emake install failed" + + newinitd "${FILESDIR}"/ganeti.initd-r3 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r2 ${PN} + + if use kvm; then + newinitd "${FILESDIR}"/ganeti-kvm-poweroff.initd ganeti-kvm-poweroff + newconfd "${FILESDIR}"/ganeti-kvm-poweroff.confd ganeti-kvm-poweroff + fi + + # ganeti installs it's own docs in a generic location + rm -rf "${D}"/{usr/share/doc/${PN},run} + + sed -i "s:/usr/$(get_libdir)/${PN}/tools/burnin:burnin:" doc/examples/bash_completion + newbashcomp doc/examples/bash_completion gnt-instance + bashcomp_alias gnt-instance burnin ganeti-{cleaner,confd} \ + h{space,check,scan,info,ail,arep,roller,squeeze,bal} \ + gnt-{os,job,filter,debug,storage,group,node,network,backup,cluster} + + dodoc INSTALL UPGRADE NEWS README doc/*.rst + dohtml -r doc/html/* doc/css/*.css + + docinto examples + dodoc doc/examples/{ganeti.cron,gnt-config-backup} doc/examples/*.ocf + + docinto examples/hooks + dodoc doc/examples/hooks/{ipsec,ethers} + + insinto /etc/cron.d + newins doc/examples/ganeti.cron ${PN} + + insinto /etc/logrotate.d + newins doc/examples/ganeti.logrotate ${PN} + + keepdir /var/{lib,log}/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} +} + +pkg_postinst() { + if use multiple-users; then + elog "You have enable multiple user support, the users for this must" + elog "be created. You can use the provided tool for this, which is" + elog "located at:" + elog " /usr/$(get_libdir)/${PN}/tools/users-setup" + fi +} + +src_test () { + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + GANETI_MASTER="$(hostname -f)" \ + emake check || die "emake check failed" +} diff --git a/app-emulation/ganeti/ganeti-2.14.1-r1.ebuild b/app-emulation/ganeti/ganeti-2.14.1-r1.ebuild new file mode 100644 index 000000000000..17bb19c37c17 --- /dev/null +++ b/app-emulation/ganeti/ganeti-2.14.1-r1.ebuild @@ -0,0 +1,295 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +PYTHON_COMPAT=(python2_7) +use test && PYTHON_REQ_USE="ipv6" + +inherit eutils user autotools bash-completion-r1 python-single-r1 versionator + +MY_PV="${PV/_rc/~rc}" +MY_PV="${MY_PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="$(get_version_component_range 1-2)" + +if [[ ${PV} =~ [9]{4,} ]] ; then + EGIT_REPO_URI="git://git.ganeti.org/ganeti.git" + inherit git-2 + KEYWORDS="" + GIT_DEPEND="dev-python/docutils + =dev-python/sphinx-1.2*[${PYTHON_USEDEP}] + media-libs/gd[fontconfig,jpeg,png,truetype] + media-gfx/graphviz + media-fonts/urw-fonts" +else + SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${MY_P}.tar.gz" + KEYWORDS="~amd64 ~x86" +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://www.ganeti.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen" +REQUIRED_USE="|| ( kvm xen lxc ) ${PYTHON_REQUIRED_USE}" + +USER_PREFIX="${GANETI_USER_PREFIX:-"gnt-"}" +GROUP_PREFIX="${GANETI_GROUP_PREFIX:-"${USER_PREFIX}"}" + +DEPEND=" + dev-libs/openssl:0 + dev-python/paramiko[${PYTHON_USEDEP}] + dev-python/pyopenssl[${PYTHON_USEDEP}] + dev-python/pyparsing[${PYTHON_USEDEP}] + dev-python/pycurl[${PYTHON_USEDEP}] + dev-python/pyinotify[${PYTHON_USEDEP}] + dev-python/simplejson[${PYTHON_USEDEP}] + dev-python/ipaddr[${PYTHON_USEDEP}] + dev-python/bitarray[${PYTHON_USEDEP}] + net-analyzer/arping + net-analyzer/fping + net-misc/bridge-utils + net-misc/curl[ssl] + net-misc/openssh + net-misc/socat + sys-apps/iproute2 + sys-fs/lvm2 + >=sys-apps/baselayout-2.0 + =dev-lang/ghc-7.6*:0= + dev-haskell/cabal:0= + dev-haskell/cabal-install:0= + >=dev-haskell/mtl-2.1.1:0= + >=dev-haskell/old-time-1.1.0.0:0= + >=dev-haskell/random-1.0.1.1:0= + haskell-daemons? ( >=dev-haskell/text-0.11.1.13:0= ) + >=dev-haskell/transformers-0.3.0.0:0= + + >=dev-haskell/attoparsec-0.10.1.1:0= + <dev-haskell/attoparsec-0.13:0 + >=dev-haskell/base64-bytestring-1.0.0.1:0= + <dev-haskell/base64-bytestring-1.1:0= + >=dev-haskell/crypto-4.2.4:0= + <dev-haskell/crypto-4.3:0= + >=dev-haskell/curl-1.3.7:0= + <dev-haskell/curl-1.4:0= + >=dev-haskell/hinotify-0.3.2:0= + <dev-haskell/hinotify-0.4:0= + >=dev-haskell/hslogger-1.1.4:0= + <dev-haskell/hslogger-1.3:0= + >=dev-haskell/json-0.5:0= + <dev-haskell/json-0.9:0= + >=dev-haskell/lens-3.10:0= + <dev-haskell/lens-4.8:0= + >=dev-haskell/lifted-base-0.2.0.3:0= + <dev-haskell/lifted-base-0.3:0= + >=dev-haskell/monad-control-0.3.1.3:0= + <dev-haskell/monad-control-1.1:0= + >=dev-haskell/network-2.3.0.13:0= + <dev-haskell/network-2.7:0= + >=dev-haskell/parallel-3.2.0.2:3= + <dev-haskell/parallel-3.3:3= + >=dev-haskell/temporary-1.1.2.3:0= + <dev-haskell/temporary-1.3:0= + >=dev-haskell/regex-pcre-0.94.2:0= + <dev-haskell/regex-pcre-0.95:0= + >=dev-haskell/transformers-base-0.4.1:0= + <dev-haskell/transformers-base-0.5:0= + >=dev-haskell/utf8-string-0.3.7:0= + <dev-haskell/utf8-string-0.4:0= + >=dev-haskell/zlib-0.5.3.3:0= + <dev-haskell/zlib-0.6:0= + + >=dev-haskell/psqueue-1.1:0= + <dev-haskell/psqueue-1.2:0= + >=dev-haskell/snap-core-0.8.1:0= + <dev-haskell/snap-core-0.10:0= + >=dev-haskell/snap-server-0.8.1:0= + <dev-haskell/snap-server-0.10:0= + + dev-haskell/vector:0= + <dev-haskell/semigroupoids-4.1:0= + <dev-haskell/contravariant-0.6 + <dev-haskell/transformers-compat-0.4[three] + xen? ( >=app-emulation/xen-3.0 ) + kvm? ( app-emulation/qemu ) + lxc? ( app-emulation/lxc ) + drbd? ( <sys-cluster/drbd-8.5 ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + ${PYTHON_DEPS} + ${GIT_DEPEND}" +RDEPEND="${DEPEND} + !app-emulation/ganeti-htools" +DEPEND+="sys-devel/m4 + =app-text/pandoc-1.12* + >=dev-haskell/test-framework-0.6:0= + <dev-haskell/test-framework-0.9:0= + >=dev-haskell/test-framework-hunit-0.2.7:0= + <dev-haskell/test-framework-hunit-0.4:0= + >=dev-haskell/test-framework-quickcheck2-0.2.12.1:0= + <dev-haskell/test-framework-quickcheck2-0.4:0= + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + >=dev-haskell/hunit-1.2.4.2:0= + <dev-haskell/hunit-1.3:0= + >=dev-haskell/quickcheck-2.4.2:2= + <dev-haskell/quickcheck-2.8:2= + sys-apps/fakeroot + net-misc/socat + dev-util/shelltestrunner + )" + +PATCHES=( + "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch" + "${FILESDIR}/${PN}-2.11-add-pgrep.patch" + "${FILESDIR}/${PN}-2.13-daemon-util.patch" + "${FILESDIR}/${PN}-2.7-fix-tests.patch" + "${FILESDIR}/${PN}-2.9-disable-root-tests.patch" + "${FILESDIR}/${PN}-2.9-skip-cli-test.patch" + "${FILESDIR}/${PN}-2.10-rundir.patch" + "${FILESDIR}/${PN}-2.12-qemu-enable-kvm.patch" + "${FILESDIR}/${PN}-2.11-tests.patch" + "${FILESDIR}/${PN}-lockdir.patch" + "${FILESDIR}/${PN}-2.11-dont-nest-libdir.patch" + "${FILESDIR}/${PN}-2.11-dont-print-man-help.patch" + "${FILESDIR}/${PN}-2.11-daemon-util-tests.patch" + "${FILESDIR}/${PN}-2.13-process_unittest.patch" +) + +REQUIRED_USE="kvm? ( || ( amd64 x86 ) )" + +S="${WORKDIR}/${MY_P}" + +# apparently currently broken +QA_WX_LOAD=" + usr/lib*/${PN}/${SERIES}/usr/sbin/ganeti-*d + usr/lib*/${PN}/${SERIES}/usr/bin/htools +" + +pkg_setup () { + local user + python-single-r1_pkg_setup + + if use multiple-users; then + for user in gnt-{masterd,confd,luxid,rapi,daemons,admin}; do + enewgroup ${user} + enewuser ${user} -1 -1 -1 ${user} + done + fi +} + +src_prepare() { + local testfile + epatch "${PATCHES[@]}" + + # not sure why these tests are failing + # should remove this on next version bump if possible + for testfile in test/py/import-export_unittest.bash; do + printf '#!/bin/bash\ntrue\n' > "${testfile}" + done + + # take the sledgehammer approach to bug #526270 + grep -lr '/bin/sh' "${S}" | xargs -r -- sed -i 's:/bin/sh:/bin/bash:g' + + [[ ${PV} =~ [9]{4,} ]] && ./autogen.sh + rm autotools/missing + eautoreconf +} + +src_configure () { + # this is kind of a hack to work around the removal of the qemu-kvm wrapper + local kvm_arch + + if use amd64; then + kvm_arch=x86_64 + elif use x86; then + kvm_arch=i386 + elif use kvm; then + die "Could not determine qemu system to use for kvm" + fi + + econf --localstatedir=/var \ + --sharedstatedir=/var \ + --disable-symlinks \ + --docdir=/usr/share/doc/${P} \ + --with-ssh-initscript=/etc/init.d/sshd \ + --with-export-dir=/var/lib/ganeti-storage/export \ + --with-os-search-path=/usr/share/${PN}/os \ + $(use_enable test haskell-tests) \ + $(usex multiple-users "--with-default-user=" "" "gnt-daemons" "") \ + $(usex multiple-users "--with-user-prefix=" "" "${USER_PREFIX}" "") \ + $(usex multiple-users "--with-default-group=" "" "gnt-daemons" "") \ + $(usex multiple-users "--with-group-prefix=" "" "${GROUP_PREFIX}" "") \ + $(use_enable syslog) \ + $(use_enable monitoring) \ + $(usex kvm '--with-kvm-path=' '' "/usr/bin/qemu-system-${kvm_arch}" '') \ + $(usex haskell-daemons "--enable-confd=haskell" '' '' '') +} + +src_install () { + emake V=1 DESTDIR="${D}" install || die "emake install failed" + + newinitd "${FILESDIR}"/ganeti.initd-r3 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r2 ${PN} + + if use kvm; then + newinitd "${FILESDIR}"/ganeti-kvm-poweroff.initd ganeti-kvm-poweroff + newconfd "${FILESDIR}"/ganeti-kvm-poweroff.confd ganeti-kvm-poweroff + fi + + # ganeti installs it's own docs in a generic location + rm -rf "${D}"/{usr/share/doc/${PN},run} + + sed -i "s:/usr/$(get_libdir)/${PN}/tools/burnin:burnin:" doc/examples/bash_completion + newbashcomp doc/examples/bash_completion gnt-instance + bashcomp_alias gnt-instance burnin ganeti-{cleaner,confd} \ + h{space,check,scan,info,ail,arep,roller,squeeze,bal} \ + gnt-{os,job,filter,debug,storage,group,node,network,backup,cluster} + + dodoc INSTALL UPGRADE NEWS README doc/*.rst + dohtml -r doc/html/* doc/css/*.css + + docinto examples + dodoc doc/examples/{ganeti.cron,gnt-config-backup} doc/examples/*.ocf + + docinto examples/hooks + dodoc doc/examples/hooks/{ipsec,ethers} + + insinto /etc/cron.d + newins doc/examples/ganeti.cron ${PN} + + insinto /etc/logrotate.d + newins doc/examples/ganeti.logrotate ${PN} + + # need to dodir rather than keepdir here (bug #552482) + dodir /var/lib/${PN} + + keepdir /var/log/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} +} + +pkg_postinst() { + if use multiple-users; then + elog "You have enable multiple user support, the users for this must" + elog "be created. You can use the provided tool for this, which is" + elog "located at:" + elog " /usr/$(get_libdir)/${PN}/tools/users-setup" + fi +} + +src_test () { + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + GANETI_MASTER="$(hostname -f)" \ + emake check || die "emake check failed" +} diff --git a/app-emulation/ganeti/ganeti-2.4.5-r1.ebuild b/app-emulation/ganeti/ganeti-2.4.5-r1.ebuild new file mode 100644 index 000000000000..51fbeef95cc9 --- /dev/null +++ b/app-emulation/ganeti/ganeti-2.4.5-r1.ebuild @@ -0,0 +1,90 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=4 + +inherit eutils confutils bash-completion-r1 + +MY_PV="${PV/_rc/~rc}" +#MY_PV="${PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://code.google.com/p/ganeti/" +SRC_URI="http://ganeti.googlecode.com/files/${MY_P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="amd64 x86" +IUSE="kvm xen drbd +filestorage syslog ipv6" + +S="${WORKDIR}/${MY_P}" + +DEPEND="xen? ( >=app-emulation/xen-3.0 ) + kvm? ( app-emulation/qemu ) + drbd? ( >=sys-cluster/drbd-8.3 ) + ipv6? ( net-misc/ndisc6 ) + dev-libs/openssl + dev-python/paramiko + dev-python/pyopenssl + dev-python/pyparsing + dev-python/pycurl + dev-python/pyinotify + dev-python/simplejson + net-analyzer/arping + net-misc/bridge-utils + net-misc/curl[ssl] + net-misc/openssh + net-misc/socat + sys-apps/iproute2 + sys-fs/lvm2 + >=sys-apps/baselayout-2.0" +RDEPEND="${DEPEND} + !<app-emulation/ganeti-htools-0.3" + +pkg_setup () { + confutils_require_any kvm xen +} + +src_prepare () { + epatch "${FILESDIR}/${PN}-fix-start-stop.patch" +} + +src_configure () { + local myconf + if use filestorage ; then + myconf="--with-file-storage-dir=/var/lib/ganeti-storage/file" + else + myconf="--with-file-storage-dir=no" + fi + if use kvm && [ -f /usr/bin/qemu-kvm ] ; then + myconf="--with-kvm-path=/usr/bin/qemu-kvm" + fi + econf --localstatedir=/var \ + --docdir=/usr/share/doc/${P} \ + --with-ssh-initscript=/etc/init.d/sshd \ + --with-export-dir=/var/lib/ganeti-storage/export \ + --with-os-search-path=/usr/share/ganeti/os \ + $(use_enable syslog) \ + ${myconf} +} + +src_install () { + emake DESTDIR="${D}" install || die "emake install failed" + newinitd "${FILESDIR}"/ganeti-2.1.initd ganeti + newconfd "${FILESDIR}"/ganeti.confd ganeti + use kvm && newinitd "${FILESDIR}"/ganeti-kvm-poweroff.initd ganeti-kvm-poweroff + use kvm && newconfd "${FILESDIR}"/ganeti-kvm-poweroff.confd ganeti-kvm-poweroff + newbashcomp doc/examples/bash_completion ganeti + dodoc INSTALL UPGRADE NEWS README doc/*.rst + rm -rf "${D}"/usr/share/doc/ganeti + docinto examples + #dodoc doc/examples/{basic-oob,ganeti.cron,gnt-config-backup} + dodoc doc/examples/{ganeti.cron,gnt-config-backup} + docinto examples/hooks + dodoc doc/examples/hooks/{ipsec,ethers} + + keepdir /var/{lib,log,run}/ganeti/ + keepdir /usr/share/ganeti/os/ + keepdir /var/lib/ganeti-storage/{export,file}/ +} diff --git a/app-emulation/ganeti/metadata.xml b/app-emulation/ganeti/metadata.xml new file mode 100644 index 000000000000..aed23d1c641c --- /dev/null +++ b/app-emulation/ganeti/metadata.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <herd>virtualization</herd> + <maintainer> + <email>chutzpah@gentoo.org</email> + <name>Patrick McLean</name> + </maintainer> + <longdescription lang="en"> + Ganeti is a cluster virtual server management software tool built on top of + existing virtualization technologies such as Xen or KVM and other Open + Source software. + + Ganeti requires pre-installed virtualization software on your servers in + order to function. Once installed, the tool will take over the management + part of the virtual instances (Xen DomU), e.g. disk creation management, + operating system installation for these instances (in co-operation with + OS-specific install scripts), and startup, shutdown, failover between + physical systems. It has been designed to facilitate cluster management of + virtual servers and to provide fast and simple recovery after physical + failures using commodity hardware. + </longdescription> + <use> + <flag name='drbd'>Enable DRBD support</flag> + <flag name='filestorage'>Enable File Storage</flag> + <flag name='haskell-daemons'>Build haskell daemons instead of python</flag> + <flag name='htools'>Enable htools support</flag> + <flag name='kvm'>Enable KVM support</flag> + <flag name='lxc'>Enable Linux Countainers support</flag> + <flag name='multiple-users'>Enable support for running VMs as different users.</flag> + <flag name='monitoring'>Enable the ganeti monitoring daemon</flag> + <flag name='rbd'>Enable rados block device support via sys-cluster/ceph</flag> + <flag name='xen'>Enable Xen support</flag> + </use> +</pkgmetadata> + |