summaryrefslogtreecommitdiff
path: root/app-emulation/ganeti
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
committerV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
commit8376ef56580626e9c0f796d5b85b53a0a1c7d5f5 (patch)
tree7681bbd4e8b05407772df40a4bf04cbbc8afc3fa /app-emulation/ganeti
parent30a9caf154332f12ca60756e1b75d2f0e3e1822d (diff)
gentoo resync : 14.07.2018
Diffstat (limited to 'app-emulation/ganeti')
-rw-r--r--app-emulation/ganeti/Manifest39
-rw-r--r--app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.15.patch122
-rw-r--r--app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch122
-rw-r--r--app-emulation/ganeti/files/fix_ftbfs_with_sphinx_1.447
-rw-r--r--app-emulation/ganeti/files/ganeti-2.10-rundir.patch35
-rw-r--r--app-emulation/ganeti/files/ganeti-2.11-add-pgrep.patch25
-rw-r--r--app-emulation/ganeti/files/ganeti-2.11-daemon-util-tests.patch38
-rw-r--r--app-emulation/ganeti/files/ganeti-2.11-dont-nest-libdir.patch49
-rw-r--r--app-emulation/ganeti/files/ganeti-2.11-dont-print-man-help.patch13
-rw-r--r--app-emulation/ganeti/files/ganeti-2.11-tests.patch13
-rw-r--r--app-emulation/ganeti/files/ganeti-2.12-qemu-enable-kvm.patch12
-rw-r--r--app-emulation/ganeti/files/ganeti-2.12-start-stop-daemon-args.patch39
-rw-r--r--app-emulation/ganeti/files/ganeti-2.13-process_unittest.patch21
-rw-r--r--app-emulation/ganeti/files/ganeti-2.15-daemon-util.patch53
-rw-r--r--app-emulation/ganeti/files/ganeti-2.15-dont-invert-return-values-for-man-warnings.patch10
-rw-r--r--app-emulation/ganeti/files/ganeti-2.15-kvmd-run-as-daemon-user.patch33
-rw-r--r--app-emulation/ganeti/files/ganeti-2.15-noded-must-run-as-root.patch50
-rw-r--r--app-emulation/ganeti/files/ganeti-2.15-python-mock.patch26
-rw-r--r--app-emulation/ganeti/files/ganeti-2.15-respect-HFLAGS.patch12
-rw-r--r--app-emulation/ganeti/files/ganeti-2.15.2-remove-sandbox-failing-tests.patch58
-rw-r--r--app-emulation/ganeti/files/ganeti-2.16-kvmd-run-as-daemon-user.patch30
-rw-r--r--app-emulation/ganeti/files/ganeti-2.16-noded-must-run-as-root.patch26
-rw-r--r--app-emulation/ganeti/files/ganeti-2.17-relax-deps.patch21
-rw-r--r--app-emulation/ganeti/files/ganeti-2.9-disable-root-tests.patch18
-rw-r--r--app-emulation/ganeti/files/ganeti-2.9-skip-cli-test.patch18
-rw-r--r--app-emulation/ganeti/files/ganeti-kvm-poweroff.confd4
-rw-r--r--app-emulation/ganeti/files/ganeti-kvm-poweroff.initd57
-rw-r--r--app-emulation/ganeti/files/ganeti-lockdir.patch15
-rw-r--r--app-emulation/ganeti/files/ganeti.confd-r219
-rw-r--r--app-emulation/ganeti/files/ganeti.initd-r396
-rw-r--r--app-emulation/ganeti/ganeti-2.15.2-r5.ebuild336
-rw-r--r--app-emulation/ganeti/ganeti-2.15.2-r6.ebuild345
-rw-r--r--app-emulation/ganeti/ganeti-2.16.0_rc1.ebuild351
-rw-r--r--app-emulation/ganeti/ganeti-2.17.0_beta1.ebuild351
-rw-r--r--app-emulation/ganeti/metadata.xml39
35 files changed, 2543 insertions, 0 deletions
diff --git a/app-emulation/ganeti/Manifest b/app-emulation/ganeti/Manifest
new file mode 100644
index 000000000000..bf0740cb0e2f
--- /dev/null
+++ b/app-emulation/ganeti/Manifest
@@ -0,0 +1,39 @@
+AUX 0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.15.patch 5273 BLAKE2B 30961f0223ab31b58823c2b4adb5704435592b7c3264c6f0e204a1cbfa787a54d97d59dc30287bc678a57d4a9d12eb8495d3a72f8c2e754f0bcb3cd4045017be SHA512 a028d2075eb5b004dcd8666fcded285ddaccb17a511cf10e7c8f2d882b597f1d20c5b23cb4922d595bebc420669b52bbe273f44d0b1d6a57ee263e934ad3806e
+AUX 0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch 5277 BLAKE2B cb4c45ad078cc9f16ccc1ac9cc4ad7e0707c1014ed0e8c90e027bb2bcf34154df58f0c1143299637e0df957b1203f47d1453a46611d9e9bf89da1242cc58ab50 SHA512 ed87ad5cf1322fde341a2e88b619a4a124548693f02e3f599d9369b46a0a388b4108b9b2a45772bc52bd451cd7a200292ab6680c0ff363ede0a19070694b78d6
+AUX fix_ftbfs_with_sphinx_1.4 2019 BLAKE2B d8406a9ada3b9235def6c71894a6db80d3f3ecbeb5d4d5835755c046cff62988aead25c704469ad0d835c816a0c372e1e8d48cbc29b0f6bc16c8b59fa9f33ee4 SHA512 3f4ea77cfa94f0edca23910d1d395c0d704e2b1f1a0bd98b96609ff16d295ea34e179224cad51cb9eb34c1b470fa387fe9a33f9d08a08916d88ce25ba93d551f
+AUX ganeti-2.10-rundir.patch 1305 BLAKE2B 14ef1e0396251ffd4b01371c3f4fdedbe3dc500da9aa4485b052e2d2ee0f23092ccd6fe21d2945d2f2d64490e90a985bb5e6f8707a5035dd3ef4e91bc0ec92fd SHA512 67a475c8e4ed9fd7d28bcf514fff5dd3ea6a458f57e02138b9fe6b1288732dfb3fc4e2fe1586dc5f78c1cda5733b5163f723709f37c4ded1a99d8b0b2773f61d
+AUX ganeti-2.11-add-pgrep.patch 760 BLAKE2B 6f54b84235ab53cc4a9cdef70d007209b8dd75ecb2f8a736aa11aa706cfd215f23970af307de42408316d5a10b64563b56fa25a78a2b44e6f9674301ae9f1ee2 SHA512 2916e9207104a33027b5024e262863d8f6413558e866b0822c801d9dbfa9d0350553b51e855dbaea372257ee7b3158823c45dbe5594b786d6d9327977a12f57c
+AUX ganeti-2.11-daemon-util-tests.patch 1523 BLAKE2B 7a48e6e0aca0420d5ed810be590ce23e55318448b65ff078a2f42b1450cabb2af851d4100781ebd047b49fd369c6a406fd1ee87a469590889b020de08c582e9c SHA512 dea73489265e0499e770cefbae05d3f4af55a07394a1dc2ac31035382ba0d6772da7b1bc2c8484949852caa1969371cae8d3f804fbfcb6cca7b42f0f3a0ce003
+AUX ganeti-2.11-dont-nest-libdir.patch 2213 BLAKE2B bf554e1699c4e7bb716283d1a2c0802ee1ad7c4212828997f704f2d39cc464b0c90fd74087c8a81ff782303922ef149d4f4f32d3fd1f94a13bb65b1d5f960474 SHA512 990c806890b006521d6a75d74c1fd160363d3863455f4bae6d5584a11835996a5a73f473247eb00162c239bd6f5aace71d6c3389d812af037dd3a9d5e7ef5969
+AUX ganeti-2.11-dont-print-man-help.patch 279 BLAKE2B af285128875627c346ac87dd23a1e3191d27caa5cb4b9745944489c597a931a2d88ab48fe1372a9d627e6c4a08ff5137350a17cf53ee6e38307b8b753d284f91 SHA512 982dd27d030e5adf7aae77a7e59605c2ee56d56ca0c1ae0abcccae4606c6092dc170c8f63c64cd300e952040dc5bdfa5d6100e2038fe27415f28d5be9ca754b9
+AUX ganeti-2.11-tests.patch 427 BLAKE2B 8419d43f92d5a2ac3a153c42fff39c335716fc05223a5cb164908e5fae29c95b1320b53d9e98622152c378878d88f2ad40fc7f93642d6bd74536aa233f414597 SHA512 34d72b16a302ae89c58ca02e01adb90b586a50dde8e847964919f11ef353e8cd17bb737ea4180072cd7800a348f88ad47bc6871831d008559c69975257f1e815
+AUX ganeti-2.12-qemu-enable-kvm.patch 569 BLAKE2B be0e80b3cbadee22a4f1d19161d19e4ffa4e90efedcb289247f7b10166d5ae851a392723687e401adcc07bcc970899d35033e9fc7da9a28e9f29c62ef9c31aac SHA512 10aa94b625a9bfb64610fec282444f811e28200b0ea3e284c41def7990b901f4337be7e3cb9f355c6f021637f3ffb799cf8f28090a731410ec17ce0ae3f8200b
+AUX ganeti-2.12-start-stop-daemon-args.patch 1310 BLAKE2B 086e10664e461dbab1476a956027787c10161f19b65784ee8bacb1c2a8e128cd8604597441027d3bb34ed4bc925ddef1f2742c2ec2a3178157fb7f9ba1482894 SHA512 dad3fdbecc1efcb01cd22ba277122f07c7193eb11ad5e45d5e6c82ccace5cf13f1d666241412a484ffbf5581d652329b8fd267ab0fdca4ae79966f3c40cd579e
+AUX ganeti-2.13-process_unittest.patch 1027 BLAKE2B ad736721ab1d2d465b1071144cc741589b716acededd79d724e8b9f3f12bd2c747e132884dbecbbfaf897501fd75850870ec09edd93d8a137381a578f99b6797 SHA512 305b7fc43e8b0e9ce3d830be68d6f309b4b7cea54505b1bc615f83255a52d75cc6010ceafc1a44b5e4ce359936f8294bdfeb8fe7f616a81f15a1174851f69f34
+AUX ganeti-2.15-daemon-util.patch 1449 BLAKE2B e2c17a6c57025b91bf48f130f7ba0bfbbad7396188aa5da79ebcca97d8664a1b0605b4624b7aeaa60f21816a371396162b4b35a019a7733969d3a9478d0ab309 SHA512 026d7e5c0b3278f005ceea0d338ea023dd1f07ce109bcf2953defb14394cf83234ec08730eed454d4eac3880adb6b1d68f28b2f04f755c961ca6b67a4a66ad5a
+AUX ganeti-2.15-dont-invert-return-values-for-man-warnings.patch 413 BLAKE2B 6b37e766fc014c4b19812e729c07fa991c6a259e6d848fafc1e67b3491985d7ffb64523c411918d0ad088f2f6618e199c300f79fdc9950e4e600ba04fe9caa7e SHA512 639e76c841542459a105a6406b58f89a90a96e5a2b16eaf116f548a39e511c4fd4d4dc495fdc466e821a2ee2c1026d67922d9478255ff907bb1a9219dace973a
+AUX ganeti-2.15-kvmd-run-as-daemon-user.patch 1267 BLAKE2B ec993c7eefca32eea45151de9ccc03e4a3b19c7e9279be8c142243c7ee544132e8d4c4edf4e269b492b9c27e254655e636c10863bdcbf092d5481e9c7e80293a SHA512 f4b8e76698f92ab0e90e8c809fed575a07edae8f8af62e492cdde34cdd60c0f0a0b0ad74e63ab968f38ac7fb24b5f786a14184bfad2e0519805de09a095764fd
+AUX ganeti-2.15-noded-must-run-as-root.patch 1652 BLAKE2B ed019d793ede24eef2edf3e525bd1c859edfd71cb814b75b84565547e63df64bd21999f4c9a181209b98539b5c6c3aaad92a93b8ad10ace103480795a95758db SHA512 6c055cd56088762e143fdcc1903943f2bcd565b46d9669b8905128b9885db27819f65d0c80dfd2ff05776bb8e38f23fc055597343e5a7eeb41821653e08a0f3a
+AUX ganeti-2.15-python-mock.patch 869 BLAKE2B 0be8ccb3c193cb363a71175022f2c31554acd0383f1cf1ec2494aaf92c077a4d557ac1d9cb0e38b0368ae4a141e57552ff0260748698bbd763a055ee19e55c00 SHA512 7b375daba2ff0ebe866ff0640d4a96d3fc1257d581404781bb7b103f6d1c79ce35aa8fd4abc40d664763f5ea51881abe441630ec6337aaad0c1db7b8c683034b
+AUX ganeti-2.15-respect-HFLAGS.patch 332 BLAKE2B 360b7473870d9e803aa958f58ddad8e5de1e5c33f6d669014ebd71fc9e3b96608987ea3e7357e26782a3b9fcd62fb7b84b9024e8c68c1db0067fc92c8dc45c6a SHA512 f9d223a072ca7c842ca688b9d7ab6ab2d514647c9346d01fed4f8c5e1111e1531a0a16cfa2f6b1600a8e72cba06abc7d81f0789f1c68c48991c260b8d6a88f94
+AUX ganeti-2.15.2-remove-sandbox-failing-tests.patch 2641 BLAKE2B ecf41445e52160a754fb9a433fad59141ae0058ed5a86d9cd0981b7ee952015528b85467b77226d70f4cd1847dbc813efbd8198e6424b1405835ea256e983448 SHA512 51e8f10a8a20100dbe290023d3cfd9d585052f441d79daeb18188940977f19401ffe46924df88118b662a26b2423ca119968e8de9c8664cde531b9d7ea23af93
+AUX ganeti-2.16-kvmd-run-as-daemon-user.patch 1257 BLAKE2B 43766f2cf5fd18ca23ed4072258a3973c343dd92fbfcba51e62b3a7533b720092042a8bbc2f371cfab515085c54d349eecbd13f044cd18e3ee99c3869e848333 SHA512 c913ea0ba2af8d73342f105990234b4cfe4060a41cee1530d3dfe828a3e048d5c7cb473de22094330ab3efe9d2ade64bc15d98585a56d1d0f10e0b13b95485a5
+AUX ganeti-2.16-noded-must-run-as-root.patch 917 BLAKE2B 102d39e0483e71caef350ea2d56d709a23ac3092dba6e0dfc8972abb0b08080e7ffcb2001f42cd6e9c5277b8f225ab9e7c87b800f85e8eeee3a5159efc110d74 SHA512 69c51f88d3f5628fa17852425d8dc18e98a1a1d6b51ef7219c88efa29b01909bffec2df43dc40801bf7332d3252834b3034a8db56a2d9f283b62e2295c156746
+AUX ganeti-2.17-relax-deps.patch 1166 BLAKE2B 8ee0435fdf7bbf2c71123092f693f32ffbd37ddb229d54b4d2506acba8df23f8030f0bb8d84272b8936c3cf4619492e38e8ad9d782603ce53dbc33bd3f422983 SHA512 4f9d447c5a3edec57b6fa1acf5bf124536f401ef0b38f667218d6ba7bdf87c43d599614efcb5e8c67a2a7b9239b940683350898a3e33137e2ee9a6905e912caf
+AUX ganeti-2.9-disable-root-tests.patch 727 BLAKE2B 93f7afca3e7faffc167cfdea33c588730ca476fa335dfe136795f88872ff96c7410f40f359d32dd73585150f55c27809b1debe85de61a9a29d36bb4c7d836cf6 SHA512 b355624ee9f8d123df92511a1c4d7a72828224c166ada79dd7825bde88130ee027abaf2e6454d93457ae633e69dbebfba2c1c58798f0a11937107273df668250
+AUX ganeti-2.9-skip-cli-test.patch 583 BLAKE2B 7fc4026a2489182da1cc03c051ad56ac95be3f3fb524ffc9c16244d9fef4d7d02db5ea3775fd7ba50255fb4e472493da711635b1976f4da7ec1a9b2c1f76d740 SHA512 0808cafb6cae01e4f251e8d0b8aaeee024830c58c982ad6cc3322dbf2559ec9575f565fad94204dcf2b9e93d57759a2e1221fafa505addbde68b70a507dae07f
+AUX ganeti-kvm-poweroff.confd 186 BLAKE2B 3f82aea50562d181f2f84616a6d1c5f7bf59a718b1c6354fb4d2a9cdf2df325a9b2d77e9796887b82d7a74a95cebac2f2dc77ddb69243a4aa644a426f0bf55a4 SHA512 46f627446b24f811ce64e162e9ad24b117a4232eda17ea469c299f109467c42bce7b0608c0685de34fdc19e30ebaee14b3035867eb5f51d959c1e76802da190e
+AUX ganeti-kvm-poweroff.initd 1502 BLAKE2B baeef3110b3e16e7aba443b4e1cb0b15869492c5f4e779199ac4c12ef0ceabfd4fa1fa2d84b2d8e009bf3e22dbec06e7350c1ee0185fc53e02baebf73eb6d571 SHA512 ae2e9f9342bbbe7ae3f1ce5f1a2b44943e6cee7371de12bef36522acc180430af8f9eef37a0f3fdd2fdfd8ec959ca1691571e654cc4c9017e7b3fd2fa777f4f6
+AUX ganeti-lockdir.patch 468 BLAKE2B b3684c79376ab468b4162de9104291c89f73cf69fed9fb452ee9a0073de69c49458d115694b9bcc53d308751a3c4a6a84bda07b93a2431f357df238061f514b4 SHA512 1581e4e60dcd2f615a7c6366550dd367b1aba8e422e70db17cb02fb1ed109827d4e8ef9898f417680c4377235cf8dd4770fab21895ca26f3f490ea54f1c0e3f6
+AUX ganeti.confd-r2 422 BLAKE2B 384e4e479fcf3fe57c45c18cf16bfca84f03eda2e7a60e5512dbb5122a33c300469c3315cd41b621e86e850ed3bcb49822de93b35f40a156f7e7e38aef228619 SHA512 4ac93d7c252c3b4dbba4146e991fdb49f4cf832cc96c48425748d279c459c5e4a8a8e1bdbc719027a7bd751896b469b996ed324bc180c9c674030eeb0b7a0d9a
+AUX ganeti.initd-r3 2602 BLAKE2B 4a8ebd292cfd922aed63c7db739cbcc51924c85b3074afd5adab32376a1ce5ba5f4954ea2d299aaff5af009fc0fa6344c04de7f7cb1a45b5ff5f804cfd207017 SHA512 e4dd9cfe5ee41b70ecb45786991e22e3d1dac92c1ee14a9020fc4c62b94ae6f0a2a79c20e685e880b5d83c959cc759a3500f3f78b5f57c1ae3c6261b57c16928
+DIST ganeti-2.15.2.tar.gz 4723007 BLAKE2B d49d2ed9df515514a99d42303799e5ffc751eb8e6b397f86174cb3d48ec846fd3d146737240eea9ec0ce6fd9d07e04a27831a45a4354d3d49597b9f5cff33d7b SHA512 e0707aa535857779622e0eb18cccb89bc34fe4acf373628c30524e3f7e572c4b3d628946ad219149c14615d6471c4d72dbd0c6e3e1855a9f3644b4605544df85
+DIST ganeti-2.16.0~rc1.tar.gz 4794934 BLAKE2B 867d7d48e98d4490db8279b83b44006e0afc1a421592d523db2d04b4b04636090686773ef890c89df41f0311cbf3c4d5a2c314c39c4429f50b07a7a6d1a9616f SHA512 a4bed40e48ecd8ee1f3f8137faf28aea38ffb8955f48bbd233be17660035679fa27d0ef6f8fe20507d34ca9e1dd594e564c9c53412364b6cc05dc8ed2f5602be
+DIST ganeti-2.17.0~beta1.tar.gz 4880091 BLAKE2B bd094ac421b8b49abcd7643641aa4c2d62aa2f8a4ab55289711cef8c47cc32634bf06b99adbf9383de3945766112a1838d2191dfb51013dc4fba81676e264e64 SHA512 d836444ea5696c9689ee0fae56192720ef79b2a4a8962c031abacc7ef02ebbb9e9cdadd15aa5d315c2d3da6cbe5043b6c22b9ed94fd13883b5dfa23e08a2867e
+DIST ganeti_2.15.2-4.debian.tar.xz 42440 BLAKE2B 5c329baa90bd801a3e4b550da0a4c8bb59f3d17801ff0d66a35ae0383f34a5c1cc7f3d6d67a5e07157085290019b22c6b5349224ed43b5ec40fbdc37ded77e88 SHA512 e405f54996236fe5166c89190c529256899458594d30e4daee85a9381400e618bc8cc578c43a166ed6d868ed3c5118e4bddc5103b596db89a504de3ba3a1f403
+DIST ganeti_2.16.0~rc1-1.debian.tar.xz 41892 BLAKE2B 3220b9a071259cee3a86771b6f4d312c23392f428e1e0452f17f48140b6df5193447dd0fa1b5185d6866cfe48c8eb3dd6d22f01f930499471eab7044ca9b7268 SHA512 4501bc058b65adee6285c3d0dcf76ee8bfc4759af6bb11b0414503c6990c7d09942f3cc8e08d270e76bcf13211cc113f44304393dadd2bb8588d9b15230538af
+EBUILD ganeti-2.15.2-r5.ebuild 9797 BLAKE2B 01b892f3363735639abb0a56af713db430ed625ec4a44d395528528435295d49d6b248b773d87ef9cabd60d83eca84e062b6e26c495386fb165d6f621beaadb8 SHA512 a62058c0a7dcb218eab8881690c3a1cc560d4f244ee6d40344b06e2864f60ade56f15f52b1510cc62b08f23ce81bf004575fcb774eb67100c92df35d74f88711
+EBUILD ganeti-2.15.2-r6.ebuild 10249 BLAKE2B 90db253679828a1b31d9936524f268c7f2997f021573e6244096a3e589f561f9a2aa11dd790c8d82e7f8b224f36c6dfc59f1f3771bc6f1f8ed1daad45fe907da SHA512 cca4bf742ce5bf279eb0e44aabcc718d34945237ce14afb1d5651dcda9065e824c4e46844fb5f9d36ea47204339ad43e367045662d05721ccdc0f15f92cff337
+EBUILD ganeti-2.16.0_rc1.ebuild 10495 BLAKE2B 5f8f4bfeb74adc10623e57fc649e72f9decd672d31a12f0405939a5ba83a92202acb5d19d46a27736e186da737be9daef58f3955374e9e23da8f34400b6da6e7 SHA512 0608feee816184e5c5403e923ef3f062c717d5c38889aaf5dad349192fe0ad9d16da2005c34f38b038aa68cda33dd9826829ae47cd89bee38f6b102d89df871e
+EBUILD ganeti-2.17.0_beta1.ebuild 10522 BLAKE2B a3534952889687a0c61cbb6575742c5117b03c911d2abdfd6784a50abb2fea8237e368213686919637ad014b66147cc430e61fe4179007f2a3c21b631c46673c SHA512 3ad4e6c3994bd3d7d3c325f344099a6f073ca830c94fac2ede314ef5a067a334ba3fe21b97456ddcefdc20815f1906f29b2153a75e72e8ef21739558a04aeb66
+MISC metadata.xml 1961 BLAKE2B 1c7cc03a3dd655f75b8f9249c3b0b70a738af06a9a0529afb7c73abf6344b112e5daf610f6f6780acf0c3b14e916590c20c6f8837bb333e7da0cad6df7ba8520 SHA512 547dcaaf4392b13c5629e5555d17ba2d4e504b6ce0e043fdf440fce3d857477009aeab0af52cb92cc494ecb3e6e1a7e026fabbe6e24b9323fe47c2fc15175896
diff --git a/app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.15.patch b/app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.15.patch
new file mode 100644
index 000000000000..460636fa6340
--- /dev/null
+++ b/app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.15.patch
@@ -0,0 +1,122 @@
+From c3697936405ed8c95b674a7d412886e364306f5f Mon Sep 17 00:00:00 2001
+Message-Id: <c3697936405ed8c95b674a7d412886e364306f5f.1483650125.git.robbat2@gentoo.org>
+From: "Robin H. Johnson" <robbat2@gentoo.org>
+Date: Thu, 29 Sep 2016 08:57:28 -0700
+Subject: [PATCH-2.15] kvm: use_guest_agent: QEMU Guest Agent support
+
+Implement the QEMU Guest Agent sockets, so that code/scripts on the
+hypervisors can communicate with guest operating systems easily.
+
+Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
+---
+ lib/hypervisor/hv_kvm/__init__.py | 23 +++++++++++++++++++++++
+ man/gnt-instance.rst | 7 +++++++
+ src/Ganeti/Constants.hs | 5 +++++
+ 3 files changed, 35 insertions(+)
+
+diff --git a/lib/hypervisor/hv_kvm/__init__.py b/lib/hypervisor/hv_kvm/__init__.py
+index cd29baa38..89bc18b85 100644
+--- a/lib/hypervisor/hv_kvm/__init__.py
++++ b/lib/hypervisor/hv_kvm/__init__.py
+@@ -351,6 +351,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ constants.HV_MIGRATION_BANDWIDTH: hv_base.REQ_NONNEGATIVE_INT_CHECK,
+ constants.HV_MIGRATION_DOWNTIME: hv_base.REQ_NONNEGATIVE_INT_CHECK,
+ constants.HV_MIGRATION_MODE: hv_base.MIGRATION_MODE_CHECK,
++ constants.HV_USE_GUEST_AGENT: hv_base.NO_CHECK,
+ constants.HV_USE_LOCALTIME: hv_base.NO_CHECK,
+ constants.HV_DISK_CACHE:
+ hv_base.ParamInSet(True, constants.HT_VALID_CACHE_TYPES),
+@@ -581,6 +582,13 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ """
+ return utils.PathJoin(cls._CTRL_DIR, "%s.qmp" % instance_name)
+
++ @classmethod
++ def _InstanceQemuGuestAgentMonitor(cls, instance_name):
++ """Returns the instance serial QEMU Guest Agent socket name
++
++ """
++ return utils.PathJoin(cls._CTRL_DIR, "%s.qga" % instance_name)
++
+ @classmethod
+ def _InstanceKvmdMonitor(cls, instance_name):
+ """Returns the instance kvm daemon socket name
+@@ -667,6 +675,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ utils.RemoveFile(cls._InstanceMonitor(instance_name))
+ utils.RemoveFile(cls._InstanceSerial(instance_name))
+ utils.RemoveFile(cls._InstanceQmpMonitor(instance_name))
++ utils.RemoveFile(cls._InstanceQemuGuestAgentMonitor(instance_name))
+ utils.RemoveFile(cls._InstanceKVMRuntime(instance_name))
+ utils.RemoveFile(cls._InstanceKeymapFile(instance_name))
+ uid_file = cls._InstanceUidFile(instance_name)
+@@ -1376,6 +1385,20 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ if self._UUID_RE.search(kvmhelp):
+ kvm_cmd.extend(["-uuid", instance.uuid])
+
++ # Add guest agent socket
++ if hvp[constants.HV_USE_GUEST_AGENT]:
++ qga_addr = utils.GetFreeSlot(pci_reservations, reserve=True)
++ qga_pci_info = "bus=%s,addr=%s" % ('pci.0', hex(qga_addr))
++ qga_path = self._InstanceQemuGuestAgentMonitor(instance.name)
++ logging.info("KVM: Guest Agent available at %s", qga_path)
++ # The 'qga0' identified can change, but the 'org.qemu.guest_agent.0' string is
++ # the default expected by the Guest Agent.
++ kvm_cmd.extend([
++ "-chardev", "socket,path=%s,server,nowait,id=qga0" % qga_path,
++ "-device", "virtio-serial,id=qga0,%s" % qga_pci_info,
++ "-device", "virtserialport,chardev=qga0,name=org.qemu.guest_agent.0",
++ ])
++
+ if hvp[constants.HV_KVM_EXTRA]:
+ kvm_cmd.extend(hvp[constants.HV_KVM_EXTRA].split(" "))
+
+diff --git a/man/gnt-instance.rst b/man/gnt-instance.rst
+index a29fd7972..433b1f3b1 100644
+--- a/man/gnt-instance.rst
++++ b/man/gnt-instance.rst
+@@ -526,6 +526,13 @@ viridian
+ viridian (Hyper-V) for this instance. The default is false,
+ disabling viridian support.
+
++use\_guest\_agent
++ Valid for the KVM hypervisor.
++
++ A boolean option that specifies if the hypervisor should enable
++ the QEMU Guest Agent protocol for this instance. By default, the
++ Guest Agent is disabled.
++
+ use\_localtime
+ Valid for the Xen HVM and KVM hypervisors.
+
+diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
+index 09783d4bf..cf5421946 100644
+--- a/src/Ganeti/Constants.hs
++++ b/src/Ganeti/Constants.hs
+@@ -1806,6 +1806,9 @@ hvUsbMouse = "usb_mouse"
+ hvUseBootloader :: String
+ hvUseBootloader = "use_bootloader"
+
++hvUseGuestAgent :: String
++hvUseGuestAgent = "use_guest_agent"
++
+ hvUseLocaltime :: String
+ hvUseLocaltime = "use_localtime"
+
+@@ -1938,6 +1941,7 @@ hvsParameterTypes = Map.fromList
+ , (hvUsbDevices, VTypeString)
+ , (hvUsbMouse, VTypeString)
+ , (hvUseBootloader, VTypeBool)
++ , (hvUseGuestAgent, VTypeBool)
+ , (hvUseLocaltime, VTypeBool)
+ , (hvVga, VTypeString)
+ , (hvVhostNet, VTypeBool)
+@@ -3996,6 +4000,7 @@ hvcDefaults =
+ , (hvMigrationBandwidth, PyValueEx (32 :: Int))
+ , (hvMigrationDowntime, PyValueEx (30 :: Int))
+ , (hvMigrationMode, PyValueEx htMigrationLive)
++ , (hvUseGuestAgent, PyValueEx False)
+ , (hvUseLocaltime, PyValueEx False)
+ , (hvDiskCache, PyValueEx htCacheDefault)
+ , (hvSecurityModel, PyValueEx htSmNone)
+--
+2.11.0.rc2
+
diff --git a/app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch b/app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch
new file mode 100644
index 000000000000..6bca593a08d6
--- /dev/null
+++ b/app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch
@@ -0,0 +1,122 @@
+From 16a08ecb268062a2634dbfc081b4729cb749b7b4 Mon Sep 17 00:00:00 2001
+Message-Id: <16a08ecb268062a2634dbfc081b4729cb749b7b4.1483650125.git.robbat2@gentoo.org>
+From: "Robin H. Johnson" <robbat2@gentoo.org>
+Date: Thu, 29 Sep 2016 08:57:28 -0700
+Subject: [PATCH-2.16] kvm: use_guest_agent: QEMU Guest Agent support
+
+Implement the QEMU Guest Agent sockets, so that code/scripts on the
+hypervisors can communicate with guest operating systems easily.
+
+Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
+---
+ lib/hypervisor/hv_kvm/__init__.py | 23 +++++++++++++++++++++++
+ man/gnt-instance.rst | 7 +++++++
+ src/Ganeti/Constants.hs | 5 +++++
+ 3 files changed, 35 insertions(+)
+
+diff --git a/lib/hypervisor/hv_kvm/__init__.py b/lib/hypervisor/hv_kvm/__init__.py
+index ac02ff56c..b865d6f3a 100644
+--- a/lib/hypervisor/hv_kvm/__init__.py
++++ b/lib/hypervisor/hv_kvm/__init__.py
+@@ -497,6 +497,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ constants.HV_MIGRATION_BANDWIDTH: hv_base.REQ_NONNEGATIVE_INT_CHECK,
+ constants.HV_MIGRATION_DOWNTIME: hv_base.REQ_NONNEGATIVE_INT_CHECK,
+ constants.HV_MIGRATION_MODE: hv_base.MIGRATION_MODE_CHECK,
++ constants.HV_USE_GUEST_AGENT: hv_base.NO_CHECK,
+ constants.HV_USE_LOCALTIME: hv_base.NO_CHECK,
+ constants.HV_DISK_CACHE:
+ hv_base.ParamInSet(True, constants.HT_VALID_CACHE_TYPES),
+@@ -750,6 +751,13 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ """
+ return utils.PathJoin(cls._CTRL_DIR, "%s.qmp" % instance_name)
+
++ @classmethod
++ def _InstanceQemuGuestAgentMonitor(cls, instance_name):
++ """Returns the instance serial QEMU Guest Agent socket name
++
++ """
++ return utils.PathJoin(cls._CTRL_DIR, "%s.qga" % instance_name)
++
+ @classmethod
+ def _InstanceKvmdMonitor(cls, instance_name):
+ """Returns the instance kvm daemon socket name
+@@ -836,6 +844,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ utils.RemoveFile(cls._InstanceMonitor(instance_name))
+ utils.RemoveFile(cls._InstanceSerial(instance_name))
+ utils.RemoveFile(cls._InstanceQmpMonitor(instance_name))
++ utils.RemoveFile(cls._InstanceQemuGuestAgentMonitor(instance_name))
+ utils.RemoveFile(cls._InstanceKVMRuntime(instance_name))
+ utils.RemoveFile(cls._InstanceKeymapFile(instance_name))
+ uid_file = cls._InstanceUidFile(instance_name)
+@@ -1544,6 +1553,20 @@ class KVMHypervisor(hv_base.BaseHypervisor):
+ if self._UUID_RE.search(kvmhelp):
+ kvm_cmd.extend(["-uuid", instance.uuid])
+
++ # Add guest agent socket
++ if hvp[constants.HV_USE_GUEST_AGENT]:
++ qga_addr = utils.GetFreeSlot(bus_slots[_PCI_BUS], reserve=True)
++ qga_pci_info = "bus=%s,addr=%s" % (_PCI_BUS, hex(qga_addr))
++ qga_path = self._InstanceQemuGuestAgentMonitor(instance.name)
++ logging.info("KVM: Guest Agent available at %s", qga_path)
++ # The 'qga0' identified can change, but the 'org.qemu.guest_agent.0' string is
++ # the default expected by the Guest Agent.
++ kvm_cmd.extend([
++ "-chardev", "socket,path=%s,server,nowait,id=qga0" % qga_path,
++ "-device", "virtio-serial,id=qga0,%s" % qga_pci_info,
++ "-device", "virtserialport,chardev=qga0,name=org.qemu.guest_agent.0",
++ ])
++
+ if hvp[constants.HV_KVM_EXTRA]:
+ kvm_cmd.extend(hvp[constants.HV_KVM_EXTRA].split(" "))
+
+diff --git a/man/gnt-instance.rst b/man/gnt-instance.rst
+index 283392cc8..493ae929d 100644
+--- a/man/gnt-instance.rst
++++ b/man/gnt-instance.rst
+@@ -545,6 +545,13 @@ viridian
+ viridian (Hyper-V) for this instance. The default is false,
+ disabling viridian support.
+
++use\_guest\_agent
++ Valid for the KVM hypervisor.
++
++ A boolean option that specifies if the hypervisor should enable
++ the QEMU Guest Agent protocol for this instance. By default, the
++ Guest Agent is disabled.
++
+ use\_localtime
+ Valid for the Xen HVM and KVM hypervisors.
+
+diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
+index 420ccb6cd..4aa5edf63 100644
+--- a/src/Ganeti/Constants.hs
++++ b/src/Ganeti/Constants.hs
+@@ -1814,6 +1814,9 @@ hvUsbMouse = "usb_mouse"
+ hvUseBootloader :: String
+ hvUseBootloader = "use_bootloader"
+
++hvUseGuestAgent :: String
++hvUseGuestAgent = "use_guest_agent"
++
+ hvUseLocaltime :: String
+ hvUseLocaltime = "use_localtime"
+
+@@ -1948,6 +1951,7 @@ hvsParameterTypes = Map.fromList
+ , (hvUsbDevices, VTypeString)
+ , (hvUsbMouse, VTypeString)
+ , (hvUseBootloader, VTypeBool)
++ , (hvUseGuestAgent, VTypeBool)
+ , (hvUseLocaltime, VTypeBool)
+ , (hvVga, VTypeString)
+ , (hvVhostNet, VTypeBool)
+@@ -4099,6 +4103,7 @@ hvcDefaults =
+ , (hvMigrationBandwidth, PyValueEx (32 :: Int))
+ , (hvMigrationDowntime, PyValueEx (30 :: Int))
+ , (hvMigrationMode, PyValueEx htMigrationLive)
++ , (hvUseGuestAgent, PyValueEx False)
+ , (hvUseLocaltime, PyValueEx False)
+ , (hvDiskCache, PyValueEx htCacheDefault)
+ , (hvSecurityModel, PyValueEx htSmNone)
+--
+2.11.0.rc2
+
diff --git a/app-emulation/ganeti/files/fix_ftbfs_with_sphinx_1.4 b/app-emulation/ganeti/files/fix_ftbfs_with_sphinx_1.4
new file mode 100644
index 000000000000..0050203bf223
--- /dev/null
+++ b/app-emulation/ganeti/files/fix_ftbfs_with_sphinx_1.4
@@ -0,0 +1,47 @@
+Copied from 2.15.2 Debian Patches, as it was missed in the 2.16.0~rc1 debian patches.
+
+Author: Apollon Oikonomopoulos <apoikos@debian.org>
+Description: Fix FTBFS with sphinx 1.4
+ Suppress app.add_role warnings, as upstream knowingly overrides sphinx's
+ built-in manpage role. Without this, a warning is emitted which then turns to
+ an error when sphinx is run with the `-W' switch.
+ .
+ Also replace unicode ellipses in doc/design-query2.rst with three ascii dots,
+ as sphinx emits another warning for not being able to properly highlight these
+ lines as Python code.
+Last-Update: 2016-07-09
+Forwarded: no
+--- a/doc/conf.py
++++ b/doc/conf.py
+@@ -229,3 +229,8 @@
+
+ # If false, no module index is generated.
+ latex_use_modindex = False
++
++# We override the manpage role and sphinx issues a warning, which is treated as
++# error. Suppress role_add warnings to avoid FTBFS.
++
++suppress_warnings = ["app.add_role"]
+--- a/doc/design-query2.rst
++++ b/doc/design-query2.rst
+@@ -129,16 +129,16 @@
+ specific names, the filter must be specified as follows, with the
+ inner part repeated for each name::
+
+- ["|", ["=", "name", "node1"], ["=", "name", "node2"], …]
++ ["|", ["=", "name", "node1"], ["=", "name", "node2"], ...]
+
+- Filters consist of S-expressions (``["operator", <operants…>]``) and
++ Filters consist of S-expressions (``["operator", <operants...>]``) and
+ extensions will be made in the future to allow for more operators and
+ fields. Such extensions might include a Python-style "in" operator,
+ but for simplicity only "=" is supported in this implementation.
+
+ To reiterate: Filters for this implementation must consist of exactly
+- one OR expression (``["|", …]``) and one or more name equality filters
+- (``["=", "name", "…"]``).
++ one OR expression (``["|", ...]``) and one or more name equality filters
++ (``["=", "name", "..."]``).
+
+ Support for synchronous queries, currently available in the interface
+ but disabled in the master daemon, will be dropped. Direct calls to
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-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-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.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.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.15-daemon-util.patch b/app-emulation/ganeti/files/ganeti-2.15-daemon-util.patch
new file mode 100644
index 000000000000..25233c37a455
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.15-daemon-util.patch
@@ -0,0 +1,53 @@
+diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in
+index 7636fc9..9c681ab 100644
+--- a/daemons/daemon-util.in
++++ b/daemons/daemon-util.in
+@@ -31,25 +31,26 @@ 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 )
++fi
++
++DAEMONS+=( ganeti-kvmd )
+
+ _mond_enabled() {
+ [[ "@CUSTOM_ENABLE_MOND@" == True ]]
+@@ -246,7 +247,7 @@ check() {
+ return 1
+ fi
+ elif type -p start-stop-daemon >/dev/null; then
+- start-stop-daemon --stop --signal 0 --quiet \
++ start-stop-daemon --signal 0 --quiet \
+ --pidfile $pidfile
+ else
+ _ignore_error status \
diff --git a/app-emulation/ganeti/files/ganeti-2.15-dont-invert-return-values-for-man-warnings.patch b/app-emulation/ganeti/files/ganeti-2.15-dont-invert-return-values-for-man-warnings.patch
new file mode 100644
index 000000000000..37a687530873
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.15-dont-invert-return-values-for-man-warnings.patch
@@ -0,0 +1,10 @@
+--- a/autotools/check-man-warnings 2015-12-03 19:50:34.000000000 +0000
++++ b/autotools/check-man-warnings 2016-05-22 11:19:31.678635696 +0000
+@@ -35,6 +35,6 @@
+ loc="en_US.UTF-8"
+ fi
+
+-! LANG="$loc" LC_ALL="$loc" MANWIDTH=80 \
++LANG="$loc" LC_ALL="$loc" MANWIDTH=80 \
+ man --warnings --encoding=utf8 --local-file "$1" 2>&1 >/dev/null | \
+ grep -v -e "cannot adjust line" -e "can't break line" | \
diff --git a/app-emulation/ganeti/files/ganeti-2.15-kvmd-run-as-daemon-user.patch b/app-emulation/ganeti/files/ganeti-2.15-kvmd-run-as-daemon-user.patch
new file mode 100644
index 000000000000..ce347ceaad84
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.15-kvmd-run-as-daemon-user.patch
@@ -0,0 +1,33 @@
+diff --git a/Makefile.am b/Makefile.am
+index 8910b08..1bbe5fd 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -2452,12 +2452,14 @@ $(REPLACE_VARS_SED): $(SHELL_ENV_INIT) Makefile stamp-directories
+ echo 's#@''PKGLIBDIR@#$(libdir)/ganeti#g'; \
+ echo 's#@''GNTMASTERUSER@#$(MASTERD_USER)#g'; \
+ echo 's#@''GNTRAPIUSER@#$(RAPI_USER)#g'; \
++ echo 's#@''GNTKVMDUSER@#$(KVMD_USER)#g'; \
+ echo 's#@''GNTCONFDUSER@#$(CONFD_USER)#g'; \
+ echo 's#@''GNTWCONFDUSER@#$(WCONFD_USER)#g'; \
+ echo 's#@''GNTLUXIDUSER@#$(LUXID_USER)#g'; \
+ echo 's#@''GNTNODEDUSER@#$(NODED_USER)#g'; \
+ echo 's#@''GNTMONDUSER@#$(MOND_USER)#g'; \
+ echo 's#@''GNTRAPIGROUP@#$(RAPI_GROUP)#g'; \
++ echo 's#@''GNTKVMDGROUP@#$(KVMD_GROUP)#g'; \
+ echo 's#@''GNTADMINGROUP@#$(ADMIN_GROUP)#g'; \
+ echo 's#@''GNTCONFDGROUP@#$(CONFD_GROUP)#g'; \
+ echo 's#@''GNTNODEDGROUP@#$(NODED_GROUP)#g'; \
+diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in
+index 7636fc9..91ea20b 100644
+--- a/daemons/daemon-util.in
++++ b/daemons/daemon-util.in
+@@ -102,6 +102,9 @@ _daemon_usergroup() {
+ rapi)
+ echo "@GNTRAPIUSER@:@GNTRAPIGROUP@"
+ ;;
++ kvmd)
++ echo "@GNTKVMDUSER@:@GNTKVMDGROUP@"
++ ;;
+ noded)
+ echo "@GNTNODEDUSER@:@GNTNODEDGROUP@"
+ ;;
diff --git a/app-emulation/ganeti/files/ganeti-2.15-noded-must-run-as-root.patch b/app-emulation/ganeti/files/ganeti-2.15-noded-must-run-as-root.patch
new file mode 100644
index 000000000000..22413e3e2ea5
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.15-noded-must-run-as-root.patch
@@ -0,0 +1,50 @@
+diff --git a/configure.ac b/configure.ac
+index 9b5d06f..d099bd2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -343,8 +343,8 @@ AC_ARG_WITH([user-prefix],
+ user_wconfd="${withval}masterd";
+ user_kvmd="$user_default";
+ user_luxid="${withval}masterd";
+- user_noded="$user_default";
+- user_mond="$user_default"],
++ user_noded="root";
++ user_mond="root"],
+ [user_masterd="$user_default";
+ user_metad="$user_default";
+ user_rapi="$user_default";
+@@ -352,8 +352,8 @@ AC_ARG_WITH([user-prefix],
+ user_wconfd="$user_default";
+ user_kvmd="$user_default";
+ user_luxid="$user_default";
+- user_noded="$user_default";
+- user_mond="$user_default"])
++ user_noded="root";
++ user_mond="root"])
+ AC_SUBST(MASTERD_USER, $user_masterd)
+ AC_SUBST(METAD_USER, $user_metad)
+ AC_SUBST(RAPI_USER, $user_rapi)
+@@ -379,9 +379,9 @@ AC_ARG_WITH([group-prefix],
+ group_luxid="${withval}luxid";
+ group_masterd="${withval}masterd";
+ group_metad="$group_default";
+- group_noded="$group_default";
++ group_noded="root";
+ group_daemons="${withval}daemons";
+- group_mond="$group_default"],
++ group_mond="root"],
+ [group_rapi="$group_default";
+ group_admin="$group_default";
+ group_confd="$group_default";
+@@ -390,9 +390,9 @@ AC_ARG_WITH([group-prefix],
+ group_luxid="$group_default";
+ group_masterd="$group_default";
+ group_metad="$group_default";
+- group_noded="$group_default";
++ group_noded="root";
+ group_daemons="$group_default";
+- group_mond="$group_default"])
++ group_mond="root"])
+ AC_SUBST(RAPI_GROUP, $group_rapi)
+ AC_SUBST(ADMIN_GROUP, $group_admin)
+ AC_SUBST(CONFD_GROUP, $group_confd)
diff --git a/app-emulation/ganeti/files/ganeti-2.15-python-mock.patch b/app-emulation/ganeti/files/ganeti-2.15-python-mock.patch
new file mode 100644
index 000000000000..e51525b89cd7
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.15-python-mock.patch
@@ -0,0 +1,26 @@
+diff --git a/test/py/cmdlib/test_unittest.py b/test/py/cmdlib/test_unittest.py
+index f93f99d..2d0d083 100644
+--- a/test/py/cmdlib/test_unittest.py
++++ b/test/py/cmdlib/test_unittest.py
+@@ -85,7 +85,7 @@ class TestLUTestDelay(CmdlibTestCase):
+
+ self.ExecOpCode(op)
+
+- self.rpc.call_test_delay.assert_called_once()
++ assert self.rpc.call_test_delay.called
+
+ def testFailingRpc(self):
+ op = opcodes.OpTestDelay(duration=DELAY_DURATION,
+diff --git a/test/py/testutils/__init__.py b/test/py/testutils/__init__.py
+index 27ca425..04ea0ee 100644
+--- a/test/py/testutils/__init__.py
++++ b/test/py/testutils/__init__.py
+@@ -242,7 +242,7 @@ def patch_object(*args, **kwargs):
+ This function unifies the different variations.
+
+ """
+- import mock
++ from mock import mock
+ try:
+ # pylint: disable=W0212
+ return mock._patch_object(*args, **kwargs)
diff --git a/app-emulation/ganeti/files/ganeti-2.15-respect-HFLAGS.patch b/app-emulation/ganeti/files/ganeti-2.15-respect-HFLAGS.patch
new file mode 100644
index 000000000000..ffab1838bf1c
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.15-respect-HFLAGS.patch
@@ -0,0 +1,12 @@
+diff --git a/Makefile.am b/Makefile.am
+index a04b95ae3..e26508ad9 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -803,6 +803,7 @@ HFLAGS = \
+ -fwarn-tabs \
+ -optP-include -optP$(HASKELL_PACKAGE_VERSIONS_FILE) \
+ -hide-all-packages \
++ $(HCFLAGS) \
+ `cat $(HASKELL_PACKAGE_IDS_FILE)` \
+ $(GHC_BYVERSION_FLAGS)
+ if DEVELOPER_MODE
diff --git a/app-emulation/ganeti/files/ganeti-2.15.2-remove-sandbox-failing-tests.patch b/app-emulation/ganeti/files/ganeti-2.15.2-remove-sandbox-failing-tests.patch
new file mode 100644
index 000000000000..bc79bbbcad29
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.15.2-remove-sandbox-failing-tests.patch
@@ -0,0 +1,58 @@
+diff --git a/test/py/ganeti.hooks_unittest.py b/test/py/ganeti.hooks_unittest.py
+index 19d41bb..3382c7f 100755
+--- a/test/py/ganeti.hooks_unittest.py
++++ b/test/py/ganeti.hooks_unittest.py
+@@ -193,17 +193,17 @@ class TestHooksRunner(unittest.TestCase):
+ expect.sort()
+ self.failUnlessEqual(self.hr.RunHooks(self.hpath, phase, {}), expect)
+
+- def testEnv(self):
+- """Test environment execution"""
+- for phase in (constants.HOOKS_PHASE_PRE, constants.HOOKS_PHASE_POST):
+- fbase = "success"
+- fname = "%s/%s" % (self.ph_dirs[phase], fbase)
+- os.symlink("/usr/bin/env", fname)
+- self.torm.append((fname, False))
+- env_snt = {"PHASE": phase}
+- env_exp = "PHASE=%s" % phase
+- self.failUnlessEqual(self.hr.RunHooks(self.hpath, phase, env_snt),
+- [(self._rname(fname), HKR_SUCCESS, env_exp)])
++ #def testEnv(self):
++ # """Test environment execution"""
++ # for phase in (constants.HOOKS_PHASE_PRE, constants.HOOKS_PHASE_POST):
++ # fbase = "success"
++ # fname = "%s/%s" % (self.ph_dirs[phase], fbase)
++ # os.symlink("/usr/bin/env", fname)
++ # self.torm.append((fname, False))
++ # env_snt = {"PHASE": phase}
++ # env_exp = "PHASE=%s" % phase
++ # self.failUnlessEqual(self.hr.RunHooks(self.hpath, phase, env_snt),
++ # [(self._rname(fname), HKR_SUCCESS, env_exp)])
+
+
+ def FakeHooksRpcSuccess(node_list, hpath, phase, env):
+diff --git a/test/py/ganeti.utils.process_unittest.py b/test/py/ganeti.utils.process_unittest.py
+index 82fc81e..4a59aa4 100755
+--- a/test/py/ganeti.utils.process_unittest.py
++++ b/test/py/ganeti.utils.process_unittest.py
+@@ -358,13 +358,13 @@ class TestRunCmd(testutils.GanetiTestCase):
+ cwd = os.getcwd()
+ self.failUnlessEqual(utils.RunCmd(["pwd"], cwd=cwd).stdout.strip(), cwd)
+
+- def testResetEnv(self):
+- """Test environment reset functionality"""
+- self.failUnlessEqual(utils.RunCmd(["env"], reset_env=True).stdout.strip(),
+- "")
+- self.failUnlessEqual(utils.RunCmd(["env"], reset_env=True,
+- env={"FOO": "bar",}).stdout.strip(),
+- "FOO=bar")
++ #def testResetEnv(self):
++ # """Test environment reset functionality"""
++ # self.failUnlessEqual(utils.RunCmd(["env"], reset_env=True).stdout.strip(),
++ # "")
++ # self.failUnlessEqual(utils.RunCmd(["env"], reset_env=True,
++ # env={"FOO": "bar",}).stdout.strip(),
++ # "FOO=bar")
+
+ def testNoFork(self):
+ """Test that nofork raise an error"""
diff --git a/app-emulation/ganeti/files/ganeti-2.16-kvmd-run-as-daemon-user.patch b/app-emulation/ganeti/files/ganeti-2.16-kvmd-run-as-daemon-user.patch
new file mode 100644
index 000000000000..d74a6ca59b50
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.16-kvmd-run-as-daemon-user.patch
@@ -0,0 +1,30 @@
+--- ganeti-2.16.0~rc1.orig/Makefile.am 2017-01-05 10:09:56.568213273 -0800
++++ ganeti-2.16.0~rc1/Makefile.am 2017-01-05 10:10:51.260260697 -0800
+@@ -2477,6 +2477,7 @@
+ echo 's#@''PKGLIBDIR@#$(libdir)/ganeti#g'; \
+ echo 's#@''GNTMASTERUSER@#$(MASTERD_USER)#g'; \
+ echo 's#@''GNTRAPIUSER@#$(RAPI_USER)#g'; \
++ echo 's#@''GNTKVMDUSER@#$(KVMD_USER)#g'; \
+ echo 's#@''GNTCONFDUSER@#$(CONFD_USER)#g'; \
+ echo 's#@''GNTWCONFDUSER@#$(WCONFD_USER)#g'; \
+ echo 's#@''GNTLUXIDUSER@#$(LUXID_USER)#g'; \
+@@ -2484,6 +2485,7 @@
+ echo 's#@''GNTMONDUSER@#$(MOND_USER)#g'; \
+ echo 's#@''GNTMETADUSER@#$(METAD_USER)#g'; \
+ echo 's#@''GNTRAPIGROUP@#$(RAPI_GROUP)#g'; \
++ echo 's#@''GNTKVMDGROUP@#$(KVMD_GROUP)#g'; \
+ echo 's#@''GNTADMINGROUP@#$(ADMIN_GROUP)#g'; \
+ echo 's#@''GNTCONFDGROUP@#$(CONFD_GROUP)#g'; \
+ echo 's#@''GNTNODEDGROUP@#$(NODED_GROUP)#g'; \
+--- ganeti-2.16.0~rc1.orig/daemons/daemon-util.in 2017-01-05 10:09:56.450211013 -0800
++++ ganeti-2.16.0~rc1/daemons/daemon-util.in 2017-01-05 10:11:17.804769059 -0800
+@@ -103,6 +103,9 @@
+ rapi)
+ echo "@GNTRAPIUSER@:@GNTRAPIGROUP@"
+ ;;
++ kvmd)
++ echo "@GNTKVMDUSER@:@GNTKVMDGROUP@"
++ ;;
+ noded)
+ echo "@GNTNODEDUSER@:@GNTNODEDGROUP@"
+ ;;
diff --git a/app-emulation/ganeti/files/ganeti-2.16-noded-must-run-as-root.patch b/app-emulation/ganeti/files/ganeti-2.16-noded-must-run-as-root.patch
new file mode 100644
index 000000000000..d6c440b51ee6
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.16-noded-must-run-as-root.patch
@@ -0,0 +1,26 @@
+--- ganeti-2.16.0~rc1.orig/configure.ac 2017-01-05 10:09:56.480211588 -0800
++++ ganeti-2.16.0~rc1/configure.ac 2017-01-05 10:15:34.462684390 -0800
+@@ -380,9 +380,9 @@
+ group_luxid="${withval}luxid";
+ group_masterd="${withval}masterd";
+ group_metad="${withval}metad";
+- group_noded="$group_default";
++ group_noded="root";
+ group_daemons="${withval}daemons";
+- group_mond="$group_default"],
++ group_mond="root"],
+ [group_rapi="$group_default";
+ group_admin="$group_default";
+ group_confd="$group_default";
+@@ -391,9 +391,9 @@
+ group_luxid="$group_default";
+ group_masterd="$group_default";
+ group_metad="$group_default";
+- group_noded="$group_default";
++ group_noded="root";
+ group_daemons="$group_default";
+- group_mond="$group_default"])
++ group_mond="root"])
+ AC_SUBST(RAPI_GROUP, $group_rapi)
+ AC_SUBST(ADMIN_GROUP, $group_admin)
+ AC_SUBST(CONFD_GROUP, $group_confd)
diff --git a/app-emulation/ganeti/files/ganeti-2.17-relax-deps.patch b/app-emulation/ganeti/files/ganeti-2.17-relax-deps.patch
new file mode 100644
index 000000000000..ef4be0869560
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.17-relax-deps.patch
@@ -0,0 +1,21 @@
+--- ganeti-2.17.0~beta1/cabal/ganeti.template.cabal 2017-01-05 10:29:49.936067812 -0800
++++ ganeti-2.17.0~beta1/cabal/ganeti.template.cabal 2017-01-05 10:33:03.248770000 -0800
+@@ -54,15 +54,15 @@
+ , transformers >= 0.3.0.0
+ , unix >= 2.5.1.0
+
+- , attoparsec >= 0.10.1.1 && < 0.13
++ , attoparsec >= 0.10.1.1 && < 0.14
+ , base64-bytestring >= 1.0.0.1 && < 1.1
+ , case-insensitive >= 0.4.0.1 && < 1.3
+ , Crypto >= 4.2.4 && < 4.3
+ , curl >= 1.3.7 && < 1.4
+ , hinotify >= 0.3.2 && < 0.4
+ , hslogger >= 1.1.4 && < 1.3
+- , json >= 0.5 && < 1.0
+- , lens >= 3.10 && < 4.13
++ , json >= 0.5
++ , lens >= 3.10
+ , lifted-base >= 0.2.0.3 && < 0.3
+ , monad-control >= 0.3.1.3 && < 1.1
+ , MonadCatchIO-transformers >= 0.3.0.0 && < 0.4
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-skip-cli-test.patch b/app-emulation/ganeti/files/ganeti-2.9-skip-cli-test.patch
new file mode 100644
index 000000000000..c0977cae8b17
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-2.9-skip-cli-test.patch
@@ -0,0 +1,18 @@
+--- a/Makefile.am.orig 2013-11-13 02:19:49.198992622 +0000
++++ b/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-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..44fc861d1601
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti-kvm-poweroff.initd
@@ -0,0 +1,57 @@
+#!/sbin/openrc-run
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+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
+
+ printf "."
+ 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
+ remaining=$((remaining - 5))
+ 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-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-r3 b/app-emulation/ganeti/files/ganeti.initd-r3
new file mode 100644
index 000000000000..6869f48313db
--- /dev/null
+++ b/app-emulation/ganeti/files/ganeti.initd-r3
@@ -0,0 +1,96 @@
+#!/sbin/openrc-run
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+extra_commands="forcestart is_master"
+
+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}" ]
+}
+
+# This exists specifically for restarting a 2-node cluster where quorum might
+# not be available.
+forcestart() {
+ ewarn "Forcing non-quorum Ganeti master start"
+ GANETI_WCONFD_OPTS="${GANETI_WCONFD_OPTS} --no-voting --yes-do-it"
+ GANETI_LUXID_OPTS="${GANETI_LUXID_OPTS} --no-voting --yes-do-it"
+ GANETI_MASTERD_OPTS="${GANETI_LUXID_OPTS} --no-voting --yes-do-it"
+ export GANETI_WCONFD_OPTS GANETI_LUXID_OPTS GANETI_MASTERD_OPTS
+ start
+}
+
+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="$(printf "${daemon}_OPTS" | tr - _ | LC_ALL=C tr '[:lower:]' '[:upper:]')"
+
+ case "${daemon#ganeti-}" in
+ masterd|rapi|luxid) is_master || continue;;
+ esac
+
+ eval daemon_opts=\"\$\{${optsvar}\}\"
+
+ ebegin "Starting ${daemon}"
+ eindent
+ veinfo ${DAEMON_UTIL} start ${daemon} ${GANETI_OPTS} ${daemon_opts}
+ ${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/ganeti-2.15.2-r5.ebuild b/app-emulation/ganeti/ganeti-2.15.2-r5.ebuild
new file mode 100644
index 000000000000..002bd0085cab
--- /dev/null
+++ b/app-emulation/ganeti/ganeti-2.15.2-r5.ebuild
@@ -0,0 +1,336 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=(python2_7)
+PYTHON_REQ_USE="ipv6(+)?"
+
+inherit 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)"
+
+DEBIAN_PATCH=4
+SRC_URI="
+ http://downloads.ganeti.org/releases/${SERIES}/${MY_P}.tar.gz
+ mirror://ubuntu/pool/universe/${PN:0:1}/${PN}/${PN}_${PV}-${DEBIAN_PATCH}.debian.tar.xz
+"
+KEYWORDS="amd64 x86"
+PATCHES=(
+ "${WORKDIR}"/debian/patches/do-not-backup-export-dir.patch
+ "${WORKDIR}"/debian/patches/Makefile.am-use-C.UTF-8
+ "${WORKDIR}"/debian/patches/relax-deps
+ "${WORKDIR}"/debian/patches/zlib-0.6-compatibility
+ "${WORKDIR}"/debian/patches/fix_FTBFS_with_sphinx-1.3.5
+ "${WORKDIR}"/debian/patches/fix_ftbfs_with_sphinx_1.4
+)
+
+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 restricted-commands"
+
+REQUIRED_USE="|| ( kvm xen lxc )
+ test? ( ipv6 )
+ kvm? ( || ( amd64 x86 ) )
+ ${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/simplejson[${PYTHON_USEDEP}]
+ dev-python/pyparsing[${PYTHON_USEDEP}]
+ dev-python/pyinotify[${PYTHON_USEDEP}]
+ dev-python/pycurl[${PYTHON_USEDEP}]
+ dev-python/ipaddr[${PYTHON_USEDEP}]
+ dev-python/bitarray[${PYTHON_USEDEP}]
+ dev-python/docutils[${PYTHON_USEDEP}]
+ dev-python/fdsend[${PYTHON_USEDEP}]
+ || (
+ net-misc/iputils[arping]
+ 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: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.14: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/lens-3.10: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/zlib-0.5.3.3:0=
+ <dev-haskell/zlib-0.7: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/case-insensitive-0.4.0.1
+
+ dev-haskell/vector:0=
+ xen? ( >=app-emulation/xen-3.0 )
+ kvm? (
+ dev-python/psutil
+ app-emulation/qemu
+ )
+ lxc? ( app-emulation/lxc )
+ drbd? (
+ || (
+ <sys-cluster/drbd-8.5
+ sys-cluster/drbd-utils
+ )
+ )
+ rbd? ( sys-cluster/ceph )
+ ipv6? ( net-misc/ndisc6 )
+ ${PYTHON_DEPS}"
+RDEPEND="${DEPEND}
+ !app-emulation/ganeti-htools"
+DEPEND+="
+ sys-devel/m4
+ app-text/pandoc
+ <=dev-python/sphinx-1.3.5[${PYTHON_USEDEP}]
+ media-fonts/urw-fonts
+ media-gfx/graphviz
+ >=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.3:2=
+ sys-apps/fakeroot
+ >=net-misc/socat-1.7
+ dev-util/shelltestrunner
+ )"
+
+PATCHES+=(
+ "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch"
+ "${FILESDIR}/${PN}-2.11-add-pgrep.patch"
+ "${FILESDIR}/${PN}-2.15-daemon-util.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"
+ "${FILESDIR}/${PN}-2.15-python-mock.patch"
+ "${FILESDIR}/${PN}-2.15.2-remove-sandbox-failing-tests.patch"
+ "${FILESDIR}/${PN}-2.15-noded-must-run-as-root.patch"
+ "${FILESDIR}/${PN}-2.15-kvmd-run-as-daemon-user.patch"
+ "${FILESDIR}/${PN}-2.15-dont-invert-return-values-for-man-warnings.patch"
+)
+
+S="${WORKDIR}/${MY_P}"
+
+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
+ if has_version '>=dev-lang/ghc-7.10'; then
+ # Breaks the build on 7.8
+ PATCHES+=(
+ "${WORKDIR}"/debian/patches/ghc-7.10-compatibility.patch
+ )
+ fi
+ eapply "${PATCHES[@]}"
+ # Upstream commits:
+ # 4c3c2ca2a97a69c0287a3d23e064bc17978105eb
+ # 24618882737fd7c189adf99f4acc767d48f572c3
+ sed -i \
+ -e '/QuickCheck/s,< 2.8,< 2.8.3,g' \
+ cabal/ganeti.template.cabal
+ # Neuter -Werror
+ sed -i \
+ -e '/^if DEVELOPER_MODE/,/^endif/s/-Werror//' \
+ Makefile.am
+
+ # 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'
+
+ eapply_user
+
+ [[ ${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 \
+ --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 restricted-commands) \
+ $(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" '' '' '') \
+ --with-haskell-flags="-optl -Wl,-z,relro -optl -Wl,--as-needed" \
+ --enable-socat-escape \
+ --enable-socat-compress
+}
+
+src_install () {
+ emake V=1 DESTDIR="${D}" install
+
+ 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}
+
+ use monitoring && bashcomp_alias gnt-instance mon-collector
+
+ dodoc INSTALL UPGRADE NEWS README doc/*.rst
+
+ docinto html
+ dodoc -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.15.2-r6.ebuild b/app-emulation/ganeti/ganeti-2.15.2-r6.ebuild
new file mode 100644
index 000000000000..39a61a1f54f7
--- /dev/null
+++ b/app-emulation/ganeti/ganeti-2.15.2-r6.ebuild
@@ -0,0 +1,345 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=(python2_7)
+PYTHON_REQ_USE="ipv6(+)?"
+
+inherit 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)"
+
+DEBIAN_PATCH=4
+SRC_URI="
+ http://downloads.ganeti.org/releases/${SERIES}/${MY_P}.tar.gz
+ mirror://ubuntu/pool/universe/${PN:0:1}/${PN}/${PN}_${PV}-${DEBIAN_PATCH}.debian.tar.xz
+"
+KEYWORDS="~amd64 ~x86"
+PATCHES=(
+ "${WORKDIR}"/debian/patches/do-not-backup-export-dir.patch
+ "${WORKDIR}"/debian/patches/Makefile.am-use-C.UTF-8
+ "${WORKDIR}"/debian/patches/relax-deps
+ "${WORKDIR}"/debian/patches/zlib-0.6-compatibility
+ "${WORKDIR}"/debian/patches/fix_FTBFS_with_sphinx-1.3.5
+ "${WORKDIR}"/debian/patches/fix_ftbfs_with_sphinx_1.4
+)
+
+DESCRIPTION="Ganeti is a virtual server management software tool"
+HOMEPAGE="http://www.ganeti.org/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="drbd experimental haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen restricted-commands"
+
+REQUIRED_USE="|| ( kvm xen lxc )
+ test? ( ipv6 )
+ kvm? ( || ( amd64 x86 ) )
+ ${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/simplejson[${PYTHON_USEDEP}]
+ dev-python/pyparsing[${PYTHON_USEDEP}]
+ dev-python/pyinotify[${PYTHON_USEDEP}]
+ dev-python/pycurl[${PYTHON_USEDEP}]
+ dev-python/ipaddr[${PYTHON_USEDEP}]
+ dev-python/bitarray[${PYTHON_USEDEP}]
+ dev-python/docutils[${PYTHON_USEDEP}]
+ dev-python/fdsend[${PYTHON_USEDEP}]
+ || (
+ net-misc/iputils[arping]
+ 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: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.14: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/lens-3.10: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/zlib-0.5.3.3:0=
+ <dev-haskell/zlib-0.7: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/case-insensitive-0.4.0.1
+
+ dev-haskell/vector:0=
+ xen? ( >=app-emulation/xen-3.0 )
+ kvm? (
+ dev-python/psutil
+ app-emulation/qemu
+ )
+ lxc? ( app-emulation/lxc )
+ drbd? (
+ || (
+ <sys-cluster/drbd-8.5
+ sys-cluster/drbd-utils
+ )
+ )
+ rbd? ( sys-cluster/ceph )
+ ipv6? ( net-misc/ndisc6 )
+ ${PYTHON_DEPS}"
+RDEPEND="${DEPEND}
+ !app-emulation/ganeti-htools"
+DEPEND+="
+ sys-devel/m4
+ app-text/pandoc
+ dev-python/sphinx[${PYTHON_USEDEP}]
+ media-fonts/urw-fonts
+ media-gfx/graphviz
+ >=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.3:2=
+ sys-apps/fakeroot
+ >=net-misc/socat-1.7
+ dev-util/shelltestrunner
+ )"
+
+PATCHES+=(
+ "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch"
+ "${FILESDIR}/${PN}-2.11-add-pgrep.patch"
+ "${FILESDIR}/${PN}-2.15-daemon-util.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"
+ "${FILESDIR}/${PN}-2.15-python-mock.patch"
+ "${FILESDIR}/${PN}-2.15.2-remove-sandbox-failing-tests.patch"
+ "${FILESDIR}/${PN}-2.15-noded-must-run-as-root.patch"
+ "${FILESDIR}/${PN}-2.15-kvmd-run-as-daemon-user.patch"
+ "${FILESDIR}/${PN}-2.15-dont-invert-return-values-for-man-warnings.patch"
+ "${FILESDIR}/${PN}-2.15-respect-HFLAGS.patch"
+)
+
+S="${WORKDIR}/${MY_P}"
+
+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
+ if has_version '>=dev-lang/ghc-7.10'; then
+ # Breaks the build on 7.8
+ PATCHES+=(
+ "${WORKDIR}"/debian/patches/ghc-7.10-compatibility.patch
+ )
+ fi
+ if use experimental; then
+ ewarn "Experimental patches have been applied! RPC between daemons with different patches applied may cause breakage!"
+ PATCHES+=(
+ # QEMU Agent accepted upstream for 2.16, not yet in a tagged release
+ # backport available for 2.15, but refused upstream due to RPC breakage.
+ "${FILESDIR}"/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.15.patch
+ )
+ fi
+ eapply "${PATCHES[@]}"
+ # Upstream commits:
+ # 4c3c2ca2a97a69c0287a3d23e064bc17978105eb
+ # 24618882737fd7c189adf99f4acc767d48f572c3
+ sed -i \
+ -e '/QuickCheck/s,< 2.8,< 2.8.3,g' \
+ cabal/ganeti.template.cabal
+ # Neuter -Werror
+ sed -i \
+ -e '/^if DEVELOPER_MODE/,/^endif/s/-Werror//' \
+ Makefile.am
+
+ # 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'
+
+ eapply_user
+
+ [[ ${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 \
+ --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 restricted-commands) \
+ $(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" '' '' '') \
+ --with-haskell-flags="-optl -Wl,-z,relro -optl -Wl,--as-needed" \
+ --enable-socat-escape \
+ --enable-socat-compress
+}
+
+src_install () {
+ emake V=1 DESTDIR="${D}" install
+
+ 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}
+
+ use monitoring && bashcomp_alias gnt-instance mon-collector
+
+ dodoc INSTALL UPGRADE NEWS README doc/*.rst
+
+ docinto html
+ dodoc -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.16.0_rc1.ebuild b/app-emulation/ganeti/ganeti-2.16.0_rc1.ebuild
new file mode 100644
index 000000000000..1ae893ae5ef9
--- /dev/null
+++ b/app-emulation/ganeti/ganeti-2.16.0_rc1.ebuild
@@ -0,0 +1,351 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=(python2_7)
+PYTHON_REQ_USE="ipv6(+)?"
+
+inherit 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=""
+ PATCHES=()
+else
+ DEBIAN_PV=${MY_PV}
+ DEBIAN_PATCH=1
+ SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${MY_P}.tar.gz"
+ [[ -n "${DEBIAN_PATCH}" ]] && SRC_URI="${SRC_URI}
+ mirror://debian/pool/main/${PN:0:1}/${PN}/${PN}_${DEBIAN_PV}-${DEBIAN_PATCH}.debian.tar.xz
+ "
+ KEYWORDS="~amd64 ~x86"
+ PATCHES=(
+ "${WORKDIR}"/debian/patches/do-not-backup-export-dir.patch
+ "${WORKDIR}"/debian/patches/Makefile.am-use-C.UTF-8
+ "${WORKDIR}"/debian/patches/relax-deps
+ "${WORKDIR}"/debian/patches/zlib-0.6-compatibility
+ "${WORKDIR}"/debian/patches/fix_FTBFS_with_sphinx-1.3.5
+ #"${WORKDIR}"/debian/patches/fix_ftbfs_with_sphinx_1.4 # ported manually
+ )
+fi
+
+DESCRIPTION="Ganeti is a virtual server management software tool"
+HOMEPAGE="http://www.ganeti.org/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="drbd experimental haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen restricted-commands"
+
+REQUIRED_USE="|| ( kvm xen lxc )
+ test? ( ipv6 )
+ kvm? ( || ( amd64 x86 ) )
+ ${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/simplejson[${PYTHON_USEDEP}]
+ dev-python/pyparsing[${PYTHON_USEDEP}]
+ dev-python/pyinotify[${PYTHON_USEDEP}]
+ dev-python/pycurl[${PYTHON_USEDEP}]
+ dev-python/ipaddr[${PYTHON_USEDEP}]
+ dev-python/bitarray[${PYTHON_USEDEP}]
+ dev-python/docutils[${PYTHON_USEDEP}]
+ dev-python/fdsend[${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: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.14: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/lens-3.10: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/zlib-0.5.3.3:0=
+ <dev-haskell/zlib-0.7: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/case-insensitive-0.4.0.1
+
+ dev-haskell/vector:0=
+ xen? ( >=app-emulation/xen-3.0 )
+ kvm? (
+ dev-python/psutil
+ app-emulation/qemu
+ )
+ lxc? ( app-emulation/lxc )
+ drbd? (
+ || (
+ <sys-cluster/drbd-8.5
+ sys-cluster/drbd-utils
+ )
+ )
+ rbd? ( sys-cluster/ceph )
+ ipv6? ( net-misc/ndisc6 )
+ ${PYTHON_DEPS}"
+RDEPEND="${DEPEND}
+ !app-emulation/ganeti-htools"
+DEPEND+="
+ sys-devel/m4
+ app-text/pandoc
+ dev-python/sphinx[${PYTHON_USEDEP}]
+ media-fonts/urw-fonts
+ media-gfx/graphviz
+ >=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.3:2=
+ sys-apps/fakeroot
+ >=net-misc/socat-1.7
+ dev-util/shelltestrunner
+ )"
+
+PATCHES+=(
+ "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch"
+ "${FILESDIR}/${PN}-2.11-add-pgrep.patch"
+ "${FILESDIR}/${PN}-2.15-daemon-util.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"
+ "${FILESDIR}/${PN}-2.15-python-mock.patch"
+ "${FILESDIR}/${PN}-2.15.2-remove-sandbox-failing-tests.patch"
+ "${FILESDIR}/${PN}-2.16-noded-must-run-as-root.patch"
+ "${FILESDIR}/${PN}-2.16-kvmd-run-as-daemon-user.patch"
+ "${FILESDIR}/${PN}-2.15-dont-invert-return-values-for-man-warnings.patch"
+ "${FILESDIR}/fix_ftbfs_with_sphinx_1.4"
+ "${FILESDIR}/${PN}-2.15-respect-HFLAGS.patch"
+)
+
+S="${WORKDIR}/${MY_P}"
+
+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
+ if has_version '>=dev-lang/ghc-7.10'; then
+ # Breaks the build on 7.8
+ PATCHES+=(
+ "${WORKDIR}"/debian/patches/ghc-7.10-compatibility.patch
+ )
+ fi
+ if use experimental; then
+ ewarn "Experimental patches have been applied! RPC between daemons with different patches applied may cause breakage!"
+ PATCHES+=(
+ # QEMU Agent accepted upstream for 2.16, not yet in a tagged release
+ # backport available for 2.15, but refused upstream due to RPC breakage.
+ "${FILESDIR}"/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch
+ )
+ fi
+ eapply "${PATCHES[@]}"
+ # Upstream commits:
+ # 4c3c2ca2a97a69c0287a3d23e064bc17978105eb
+ # 24618882737fd7c189adf99f4acc767d48f572c3
+ sed -i \
+ -e '/QuickCheck/s,< 2.8,< 2.8.3,g' \
+ cabal/ganeti.template.cabal
+ # Neuter -Werror
+ sed -i \
+ -e '/^if DEVELOPER_MODE/,/^endif/s/-Werror//' \
+ Makefile.am
+
+ # 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'
+
+ eapply_user
+
+ [[ ${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 \
+ --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 restricted-commands) \
+ $(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" '' '' '') \
+ --with-haskell-flags="-optl -Wl,-z,relro -optl -Wl,--as-needed" \
+ --enable-socat-escape \
+ --enable-socat-compress
+}
+
+src_install () {
+ emake V=1 DESTDIR="${D}" install
+
+ 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}
+
+ use monitoring && bashcomp_alias gnt-instance mon-collector
+
+ dodoc INSTALL UPGRADE NEWS README doc/*.rst
+
+ docinto html
+ dodoc -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.17.0_beta1.ebuild b/app-emulation/ganeti/ganeti-2.17.0_beta1.ebuild
new file mode 100644
index 000000000000..61994d1d5374
--- /dev/null
+++ b/app-emulation/ganeti/ganeti-2.17.0_beta1.ebuild
@@ -0,0 +1,351 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=(python2_7)
+PYTHON_REQ_USE="ipv6(+)?"
+
+inherit 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=""
+ PATCHES=()
+else
+ DEBIAN_PV='2.16.0~rc1'
+ DEBIAN_PATCH=1
+ SRC_URI="http://downloads.ganeti.org/releases/${SERIES}/${MY_P}.tar.gz"
+ [[ -n "${DEBIAN_PATCH}" ]] && SRC_URI="${SRC_URI}
+ mirror://debian/pool/main/${PN:0:1}/${PN}/${PN}_${DEBIAN_PV}-${DEBIAN_PATCH}.debian.tar.xz
+ "
+ KEYWORDS="~amd64 ~x86"
+ PATCHES=(
+ "${WORKDIR}"/debian/patches/do-not-backup-export-dir.patch
+ "${WORKDIR}"/debian/patches/Makefile.am-use-C.UTF-8
+ #"${WORKDIR}"/debian/patches/relax-deps # Ported manually
+ "${WORKDIR}"/debian/patches/zlib-0.6-compatibility
+ "${WORKDIR}"/debian/patches/fix_FTBFS_with_sphinx-1.3.5
+ #"${WORKDIR}"/debian/patches/fix_ftbfs_with_sphinx_1.4 # ported manually
+ )
+fi
+
+DESCRIPTION="Ganeti is a virtual server management software tool"
+HOMEPAGE="http://www.ganeti.org/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="drbd experimental haskell-daemons htools ipv6 kvm lxc monitoring multiple-users rbd syslog test xen restricted-commands"
+
+REQUIRED_USE="|| ( kvm xen lxc )
+ test? ( ipv6 )
+ kvm? ( || ( amd64 x86 ) )
+ ${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/simplejson[${PYTHON_USEDEP}]
+ dev-python/pyparsing[${PYTHON_USEDEP}]
+ dev-python/pyinotify[${PYTHON_USEDEP}]
+ dev-python/pycurl[${PYTHON_USEDEP}]
+ dev-python/ipaddr[${PYTHON_USEDEP}]
+ dev-python/bitarray[${PYTHON_USEDEP}]
+ dev-python/docutils[${PYTHON_USEDEP}]
+ dev-python/fdsend[${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: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.14: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/lens-3.10: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/zlib-0.5.3.3:0=
+ <dev-haskell/zlib-0.7: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/case-insensitive-0.4.0.1
+
+ dev-haskell/vector:0=
+ xen? ( >=app-emulation/xen-3.0 )
+ kvm? (
+ dev-python/psutil
+ app-emulation/qemu
+ )
+ lxc? ( app-emulation/lxc )
+ drbd? (
+ || (
+ <sys-cluster/drbd-8.5
+ sys-cluster/drbd-utils
+ )
+ )
+ rbd? ( sys-cluster/ceph )
+ ipv6? ( net-misc/ndisc6 )
+ ${PYTHON_DEPS}"
+RDEPEND="${DEPEND}
+ !app-emulation/ganeti-htools"
+DEPEND+="
+ sys-devel/m4
+ app-text/pandoc
+ <=dev-python/sphinx-1.3.5[${PYTHON_USEDEP}]
+ media-fonts/urw-fonts
+ media-gfx/graphviz
+ >=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.3:2=
+ sys-apps/fakeroot
+ >=net-misc/socat-1.7
+ dev-util/shelltestrunner
+ )"
+
+PATCHES+=(
+ "${FILESDIR}/${PN}-2.12-start-stop-daemon-args.patch"
+ "${FILESDIR}/${PN}-2.11-add-pgrep.patch"
+ "${FILESDIR}/${PN}-2.15-daemon-util.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"
+ "${FILESDIR}/${PN}-2.15-python-mock.patch"
+ "${FILESDIR}/${PN}-2.15.2-remove-sandbox-failing-tests.patch"
+ "${FILESDIR}/${PN}-2.16-noded-must-run-as-root.patch"
+ "${FILESDIR}/${PN}-2.16-kvmd-run-as-daemon-user.patch"
+ "${FILESDIR}/${PN}-2.15-dont-invert-return-values-for-man-warnings.patch"
+ "${FILESDIR}/fix_ftbfs_with_sphinx_1.4"
+ "${FILESDIR}/${PN}-2.17-relax-deps.patch"
+)
+
+S="${WORKDIR}/${MY_P}"
+
+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
+ if has_version '>=dev-lang/ghc-7.10'; then
+ # Breaks the build on 7.8
+ PATCHES+=(
+ "${WORKDIR}"/debian/patches/ghc-7.10-compatibility.patch
+ )
+ fi
+ if use experimental; then
+ ewarn "Experimental patches have been applied! RPC between daemons with different patches applied may cause breakage!"
+ PATCHES+=(
+ # QEMU Agent accepted upstream for 2.16, not yet in a tagged release
+ # backport available for 2.15, but refused upstream due to RPC breakage.
+ "${FILESDIR}"/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch
+ )
+ fi
+ eapply "${PATCHES[@]}"
+ # Upstream commits:
+ # 4c3c2ca2a97a69c0287a3d23e064bc17978105eb
+ # 24618882737fd7c189adf99f4acc767d48f572c3
+ sed -i \
+ -e '/QuickCheck/s,< 2.8,< 2.8.3,g' \
+ cabal/ganeti.template.cabal
+ # Neuter -Werror
+ sed -i \
+ -e '/^if DEVELOPER_MODE/,/^endif/s/-Werror//' \
+ Makefile.am
+
+ # 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'
+
+ eapply_user
+
+ [[ ${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 \
+ --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 restricted-commands) \
+ $(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" '' '' '') \
+ --with-haskell-flags="-optl -Wl,-z,relro -optl -Wl,--as-needed" \
+ --enable-socat-escape \
+ --enable-socat-compress
+}
+
+src_install () {
+ emake V=1 DESTDIR="${D}" install
+
+ 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}
+
+ use monitoring && bashcomp_alias gnt-instance mon-collector
+
+ dodoc INSTALL UPGRADE NEWS README doc/*.rst
+
+ docinto html
+ dodoc -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/metadata.xml b/app-emulation/ganeti/metadata.xml
new file mode 100644
index 000000000000..d591fbcc6e46
--- /dev/null
+++ b/app-emulation/ganeti/metadata.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chutzpah@gentoo.org</email>
+ <name>Patrick McLean</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</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="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="restricted-commands">Enable restricted commands in the node daemon</flag>
+ <flag name="rbd">Enable rados block device support via sys-cluster/ceph</flag>
+ <flag name="xen">Enable Xen support</flag>
+ <flag name="experimental">Enable experimental patches. Warning! This will break RPC within major versions if the patches applied differ!</flag>
+ </use>
+</pkgmetadata>