From fceabcd48faf4c890719a14ac4ed93b6b7993364 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sat, 23 Jul 2022 20:51:24 +0100 Subject: gentoo auto-resync : 23:07:2022 - 20:51:24 --- app-emulation/ganeti/Manifest | 54 +++ ...st_agent-QEMU-Guest-Agent-sup.stable-2.15.patch | 122 ++++++ ...st_agent-QEMU-Guest-Agent-sup.stable-2.16.patch | 122 ++++++ .../ganeti/files/fix_ftbfs_with_sphinx_1.4 | 47 +++ .../ganeti/files/ganeti-2.10-rundir.patch | 35 ++ .../ganeti/files/ganeti-2.11-add-pgrep.patch | 25 ++ .../files/ganeti-2.11-daemon-util-tests.patch | 38 ++ .../files/ganeti-2.11-dont-nest-libdir.patch | 49 +++ .../files/ganeti-2.11-dont-print-man-help.patch | 13 + app-emulation/ganeti/files/ganeti-2.11-tests.patch | 13 + .../ganeti/files/ganeti-2.12-qemu-enable-kvm.patch | 12 + .../files/ganeti-2.12-start-stop-daemon-args.patch | 39 ++ .../files/ganeti-2.13-process_unittest.patch | 21 ++ .../ganeti/files/ganeti-2.15-daemon-util.patch | 53 +++ .../ganeti/files/ganeti-2.15-disable-docs.patch | 44 +++ ...ont-invert-return-values-for-man-warnings.patch | 10 + .../ganeti-2.15-kvmd-run-as-daemon-user.patch | 33 ++ .../files/ganeti-2.15-noded-must-run-as-root.patch | 50 +++ .../ganeti/files/ganeti-2.15-python-mock.patch | 26 ++ .../ganeti/files/ganeti-2.15-respect-HFLAGS.patch | 12 + .../files/ganeti-2.15-use-balloon-device.patch | 13 + .../ganeti/files/ganeti-2.15.2-bdev_py.patch | 16 + .../files/ganeti-2.15.2-check-man-warnings.patch | 13 + .../files/ganeti-2.15.2-ftbfs-sphinx-warning.patch | 41 ++ .../ganeti/files/ganeti-2.15.2-pyopenssl.patch | 33 ++ ...aneti-2.15.2-remove-sandbox-failing-tests.patch | 58 +++ .../ganeti-2.16-kvmd-run-as-daemon-user.patch | 30 ++ .../files/ganeti-2.16-noded-must-run-as-root.patch | 26 ++ .../ganeti/files/ganeti-2.17-relax-deps.patch | 21 ++ .../files/ganeti-2.9-disable-root-tests.patch | 18 + .../ganeti/files/ganeti-2.9-skip-cli-test.patch | 18 + .../ganeti/files/ganeti-3.0.1-buildfix.patch | 79 ++++ .../ganeti/files/ganeti-3.0.1-docfixes.patch | 10 + .../files/ganeti-3.0.1-gentoo-infra-hacks.patch | 195 ++++++++++ .../ganeti/files/ganeti-3.0.1-sphinx.patch | 9 + .../files/ganeti-3.0.1-template_haskell.patch | 24 ++ .../ganeti/files/ganeti-3.0.2-docfixes.patch | 11 + .../ganeti-3.0.2-gentoo-daemon-util-part2.patch | 64 ++++ .../ganeti/files/ganeti-3.0.2-less-sleep.patch | 20 + .../ganeti/files/ganeti-kvm-poweroff.confd | 4 + .../ganeti/files/ganeti-kvm-poweroff.initd | 57 +++ app-emulation/ganeti/files/ganeti-lockdir.patch | 15 + app-emulation/ganeti/files/ganeti-tmpfilesd | 41 ++ app-emulation/ganeti/files/ganeti.confd-r2 | 19 + app-emulation/ganeti/files/ganeti.confd-r5 | 30 ++ app-emulation/ganeti/files/ganeti.initd-r3 | 96 +++++ app-emulation/ganeti/files/ganeti.initd-r4 | 96 +++++ app-emulation/ganeti/files/ganeti.initd-r5 | 103 +++++ app-emulation/ganeti/files/ganeti.initd-r6 | 108 ++++++ app-emulation/ganeti/ganeti-3.0.2-r2.ebuild | 413 +++++++++++++++++++++ app-emulation/ganeti/ganeti-3.0.9999.ebuild | 413 +++++++++++++++++++++ app-emulation/ganeti/ganeti-3.1.9999.ebuild | 413 +++++++++++++++++++++ app-emulation/ganeti/metadata.xml | 32 ++ 53 files changed, 3357 insertions(+) create mode 100644 app-emulation/ganeti/Manifest create mode 100644 app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.15.patch create mode 100644 app-emulation/ganeti/files/0001-kvm-use_guest_agent-QEMU-Guest-Agent-sup.stable-2.16.patch create mode 100644 app-emulation/ganeti/files/fix_ftbfs_with_sphinx_1.4 create mode 100644 app-emulation/ganeti/files/ganeti-2.10-rundir.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.11-add-pgrep.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.11-daemon-util-tests.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.11-dont-nest-libdir.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.11-dont-print-man-help.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.11-tests.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.12-qemu-enable-kvm.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.12-start-stop-daemon-args.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.13-process_unittest.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-daemon-util.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-disable-docs.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-dont-invert-return-values-for-man-warnings.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-kvmd-run-as-daemon-user.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-noded-must-run-as-root.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-python-mock.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-respect-HFLAGS.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15-use-balloon-device.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15.2-bdev_py.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15.2-check-man-warnings.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15.2-ftbfs-sphinx-warning.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15.2-pyopenssl.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.15.2-remove-sandbox-failing-tests.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.16-kvmd-run-as-daemon-user.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.16-noded-must-run-as-root.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.17-relax-deps.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.9-disable-root-tests.patch create mode 100644 app-emulation/ganeti/files/ganeti-2.9-skip-cli-test.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.1-buildfix.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.1-docfixes.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.1-gentoo-infra-hacks.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.1-sphinx.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.1-template_haskell.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.2-docfixes.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.2-gentoo-daemon-util-part2.patch create mode 100644 app-emulation/ganeti/files/ganeti-3.0.2-less-sleep.patch create mode 100644 app-emulation/ganeti/files/ganeti-kvm-poweroff.confd create mode 100644 app-emulation/ganeti/files/ganeti-kvm-poweroff.initd create mode 100644 app-emulation/ganeti/files/ganeti-lockdir.patch create mode 100644 app-emulation/ganeti/files/ganeti-tmpfilesd create mode 100644 app-emulation/ganeti/files/ganeti.confd-r2 create mode 100644 app-emulation/ganeti/files/ganeti.confd-r5 create mode 100644 app-emulation/ganeti/files/ganeti.initd-r3 create mode 100644 app-emulation/ganeti/files/ganeti.initd-r4 create mode 100644 app-emulation/ganeti/files/ganeti.initd-r5 create mode 100644 app-emulation/ganeti/files/ganeti.initd-r6 create mode 100644 app-emulation/ganeti/ganeti-3.0.2-r2.ebuild create mode 100644 app-emulation/ganeti/ganeti-3.0.9999.ebuild create mode 100644 app-emulation/ganeti/ganeti-3.1.9999.ebuild create mode 100644 app-emulation/ganeti/metadata.xml (limited to 'app-emulation/ganeti') diff --git a/app-emulation/ganeti/Manifest b/app-emulation/ganeti/Manifest new file mode 100644 index 000000000000..166a821f6e5e --- /dev/null +++ b/app-emulation/ganeti/Manifest @@ -0,0 +1,54 @@ +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-disable-docs.patch 1872 BLAKE2B 59df4281aaef54bdfed07cf031f12e958a176a94232652c0c5109518afbf689d0639e1dcf9fc983a0550b2146727f20f495cb70a906776cb46874eeda75e915f SHA512 dfbca93cc367789da33b78a9e780d976abb29dbf4138e9a30556cb4e3985d88023ea572f4f718c32c8b40f0ad5237b5dcabd663c336fdab0e39dd9f1fbc000ec +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-use-balloon-device.patch 711 BLAKE2B 23eb3434a0a24905fb3fdc49e129bdb6d044f2ee0b72bc9ec1994e355fa4df662b04194c20829f9afbdd93635bfd34c8c0a3a6bd32d64052a875dfd38bfb48f6 SHA512 e3f90d71dc595de554ead6ec21a79404b6a1098f3157fb3c6bcb95e8f27044c78451531e5e38ffc04b19e26ccd89ff14672d35b6a5e61c180e43fe95425d0794 +AUX ganeti-2.15.2-bdev_py.patch 601 BLAKE2B 95ee87cf14344a5fdb224e8972ac64431beed8b7d90d08e615d4012d11d23c6df55a8c6bde1d217e86b926bd5d2a939ccabb81a0ed9080b8e9e2b110d4b783fa SHA512 b8c4ab1d67c8b1a0ef4b9581776b5f70178f501d476c3b1a3891a7d4633fd0146b2ac3f95e2a19584e7cc3422c67ef1169a65a57498ccd5d5c18b5196060201f +AUX ganeti-2.15.2-check-man-warnings.patch 612 BLAKE2B c2044184c048466bd8a1b7a92ccfb940728f7cbe26a218b386681b6711cf07c60df7f3bd610184dedebfca63050287aeab7acf2e3630bfff990d2bfc5692a596 SHA512 9f43e20f2fd14a066920cba8f99392710b0eb074cec60c5d940fb30256b772f2ca21d301cec2d6feaacebfe71e16b4df4f8c959c520cdd9d16e9dc6020dbe31c +AUX ganeti-2.15.2-ftbfs-sphinx-warning.patch 2029 BLAKE2B 129bd181ae44599ac362efc79caf0617b2037995d063236eed88e0f0925ae2362205652d41fb12d6a774069e5cd2c0bb292c58bf69f8a546d57d61daed3f0e95 SHA512 510c60e8bbc3f4e27bf17c109611d32a0c3baf21e7c167dd228e7a185524d7955b534687207e74b7c3785af314e6382dd8718f8bab2be58ac2a343e82cb15c52 +AUX ganeti-2.15.2-pyopenssl.patch 948 BLAKE2B 72a7df325e5bdc1b1de56c7bacb0b0443c2e13552616d72b47a9ce1d6559a04c4ff65dee966a5424b6584fd99670061cab291b07f111aac2615138ed4166e4a7 SHA512 d7a843f12a723750228ac5b06331277a2bf263e461f5b74c0c37e7e91ac4021b036ad61aa19e3896310020db848bbffea234d6752f16afaa2a56bcecc18d642d +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-3.0.1-buildfix.patch 3325 BLAKE2B b5e383eade649a7f8685d80aafc744e32485be4311f58a3eff35fb237b9afa29ee0f6884ad0146e815a98b1203441d65df7f652d2da97cf39df5271b4fa246da SHA512 f44e94649e6d564936a04077a4709bc7877828de4ace3aa1294d358746144310cbf87ab1b5ba9f2b8636a09a651fca4b37a27e5c84db4fd9e19df6fbc99f6095 +AUX ganeti-3.0.1-docfixes.patch 357 BLAKE2B f3888cf0412903608e5b2176c5b9bed748de4076566d8f513ada2b4e462c2d80fc9c134f93259039ae98f362f4c413bf6fa66dec593b557e7bb7c3a4a73ef442 SHA512 9e6f09bc91d16f32e298f1fdef4af717db27d84ffade3fb52ea57305288cef8b47006715794096d57326db531b52705dc561dacf51c871cd8fe587d9a2505c78 +AUX ganeti-3.0.1-gentoo-infra-hacks.patch 5560 BLAKE2B e0504deed5392df1ef3cff9391ee0ac10f500f1a218b79f2c2824f4f630b9ff91f5b835b36c87fa80274eeacdd84dd1ce3d8020d064b2829ca153e331c96b205 SHA512 856a23da99ce0bc4d96c246df60ceecb95f2dcdeba6bff148cbdd156e6169bf6e0a0e2998130fa8136d60087372a4f79999bcbfa726ee4fdb2f11b405f16eda6 +AUX ganeti-3.0.1-sphinx.patch 430 BLAKE2B 29396bcb2b41f781197b568569f183fc4bf8c81bdb963638cc38a8c64a833c3be803106123ecd1422a6bfe4a134b9f6a9162246905c6453a5834fb892e3eeafa SHA512 d54e19f75e434e32dca9271d126cde9af88328dadece5f5a8de99113d6a4db103d0ab36ed5d03116910557732da1ead46df3ab5d3e41e7d4ad3bad7b3d9c2a56 +AUX ganeti-3.0.1-template_haskell.patch 888 BLAKE2B 9aed69a4b88444d379b0820466f24e57fabd86aab9ce6e0ba8a04551e0f39a924ecf0a296dbf8fbd0dceeb5bbe8c5e9a7253360e9e774ea8b21697e166ad1dc6 SHA512 7e2e70e06ed890e4cdbaf736ddac7cb3729245c76df533baabc3338d135b062daa14930b3f149f6113afd7b162958a2242c5af63a4589d8f10af675c275ccb4e +AUX ganeti-3.0.2-docfixes.patch 436 BLAKE2B 1a2ac72f3b7e4e3c8315c332e525a84f7c2904f24b1557fee58fa69d7c7f0fe35fd00a9b4a05bc5f1d3c2587f9b49cfe53a6df0d9b183329f8bfd8a4c0b8833f SHA512 6382d5f7a635576188b76521c2fea8fa4caea1f0528706e832bac0b04ddb5ae8f19a1a75a7ade47169d96440f7626cdc3c0f95aa4116a409c17171e12acbde9a +AUX ganeti-3.0.2-gentoo-daemon-util-part2.patch 1707 BLAKE2B c11c3c7c0689a8264cf5530f87ded07392ba4c912fe8c8687d1bc83376cc8d5fccdb0d08b0d40372c7edc59fb66685574d27accd9c4e43b2bc0f9a63a7105f7e SHA512 03eff4787d2d6a3f80a2a8768b0c2cb3976b943cbde04b1027768225a57195613f8fd7dadb6476da2f2e6d4c53e0cd30a5faa38873031244ba7e92b531ee1e81 +AUX ganeti-3.0.2-less-sleep.patch 666 BLAKE2B e3164eb2deb6ac696b0b96760bd6413b39931c9ae0de15f2a6738d1914a805c9595cc833bbe5e7984ba07528162886cd861fcbb65ca1aedf627dab1019ac5e63 SHA512 bac77b75f84d8ceaced1ed70d88727da4bf63a8da5f1e718fa6ceb22c2e4879eb60e4c745fd8b5738049454759e066db2e15714e94f419b791945bc5a4883feb +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-tmpfilesd 1533 BLAKE2B af6988eb9e5c6565c3c3d9c5938e145977840fdef767ff357b6a3100e405c342d921a5b3d5f43c7c4e3e6b719c4f3c40e9160a3643d39faa071b05ec34f3e4f5 SHA512 ebd9d485e2c9c6c59943bff84b325de407356b5fb1e15129eaccfce1c2db92a590959703aa225731778a12c3ae4698b29ad7d4c47438ef1530fdd82bfa72eabc +AUX ganeti.confd-r2 422 BLAKE2B 384e4e479fcf3fe57c45c18cf16bfca84f03eda2e7a60e5512dbb5122a33c300469c3315cd41b621e86e850ed3bcb49822de93b35f40a156f7e7e38aef228619 SHA512 4ac93d7c252c3b4dbba4146e991fdb49f4cf832cc96c48425748d279c459c5e4a8a8e1bdbc719027a7bd751896b469b996ed324bc180c9c674030eeb0b7a0d9a +AUX ganeti.confd-r5 931 BLAKE2B 3a4dc3f4a085d39405293aaba8adfca2e15f536ed06e4202dacc8900767fc8349d8c17d364a87bb8b35d5509a98f13595181bca10c3bfb10514381c10c40a02f SHA512 d675050bfedd1ef05bdf7c21c802f6f76e878247c3ca369527f8a8151486a9cd216dcd6297681877d10dac44eb7d5883dddf65bf634c6440c401c4e867caf2c2 +AUX ganeti.initd-r3 2599 BLAKE2B 4f6d4d8f72022fe56590491818fb884fd58d7fef59e021cb06433a15f346f7716b52f4a6fe109176a9d8bd21c7819a85f7ddf1aa9ce25f161602c54df2f30239 SHA512 d52b1d0e726fd24427aa6b6b764d62597220fa9b353d2281e3cbac0d9b6df500fd9d586715e0c8bd81462755276c68aa405434a6fe1bba605fc456e152387e14 +AUX ganeti.initd-r4 2604 BLAKE2B 5a7eb8946c5240e72358d7c99c430dad7217de03518678dd87ea0f4e9db4a360a6e05f088443106d6c48a353e930a7f276b3b0b5d8ac3624d22b06410145a20e SHA512 d929f0a7b2d6db2e4129a3bc1e78c4753a4dd621549c3343af663b90c15fd779b9d2c998758b3990f17aaf760430b32e3ca34fa6969b7fd536e02662b0084265 +AUX ganeti.initd-r5 2928 BLAKE2B cf349138136c3deca97c4150ffca70f6b46bac62440fcbc92cef8f5a269bec85010b1b83886ac5e1088816a99465e91be8fef21723c67cf7ffd4c0d2e443e91e SHA512 0dec6a3278a119dc193b75c4f0b1bba83f059cd6fb092e04e7d3b541ae418a4ff4ba66219fdd3a210a02ea3b1e4fbca47eea2ece1913c1369c48b9342503d651 +AUX ganeti.initd-r6 3099 BLAKE2B ea64f5465969f99ffc619db4a84c69cf2b884f229218917797109291e7ddc7540f044d425e5a468a7fa630169d6d719b5c49fa988be925efb26bf86716bac934 SHA512 8a7948ecee13dbb2f0b8fd6172dae20480806f64504cf8afcd7631bc6fa9d9366b15353c2f025e514d7dfd3fcb1424e3206a93f52af0f608805e1b59716ee129 +DIST ganeti-3.0.2.tar.gz 4941978 BLAKE2B d2d11554e202895e93531254ffe68f1ac69943870c9bb91cccbda17bf1f43dba27dcb869aff9f35aca23b4b3f7100597f71ebe3a46e464ec5b24d2f34606935d SHA512 8724888251ba952eb2861f9322adf7d022bbe92fcee0c92c033d07397907737e7f54a5a8751c24beb6343392e7b6ddba4b61981ef5879e47d821ffeae34fa1c1 +DIST ganeti_3.0.2-1.debian.tar.xz 45700 BLAKE2B 5b2c2285102f46b8e4bceaf040880fe38f999c4abe483b415065fc9408eb713643b69c16d2a468d9e159dcf6fd9388732db03db53955fa603e902a13faa2979e SHA512 49e4698998b87a3c204558b60be59d2b9810783d9c8d94b64eeb72302b3ed62c41decb4d24b54cf9c45f13ad3549362e4b837addc7de4a0e5efc646fb6f6c52f +EBUILD ganeti-3.0.2-r2.ebuild 12590 BLAKE2B 777f7fd543dce4288e015c07a803986307161797329953842e3564c0a00c2c6230e9d7d5d12dd491c7b4897623ae88a9b201042d972c866ed72c346b1abd7cb0 SHA512 5f648ca5f51b232094b04d0fa27b2e44d0d54229a46949d2725be1776fdd5f3c1177f3776ce07105285ad981828cd3030fc7b09d5d15458c7b4a810c04167b61 +EBUILD ganeti-3.0.9999.ebuild 12590 BLAKE2B 777f7fd543dce4288e015c07a803986307161797329953842e3564c0a00c2c6230e9d7d5d12dd491c7b4897623ae88a9b201042d972c866ed72c346b1abd7cb0 SHA512 5f648ca5f51b232094b04d0fa27b2e44d0d54229a46949d2725be1776fdd5f3c1177f3776ce07105285ad981828cd3030fc7b09d5d15458c7b4a810c04167b61 +EBUILD ganeti-3.1.9999.ebuild 12601 BLAKE2B d0c83022927bdb01c2c6e52444e868c520c26c611df93f99360b10d56c0a0bdba5db698ef769badc5318dc602ede72ef4e8b48bcace58585a264e52e67691354 SHA512 ef2a5e3e90de039ac0ca6220575567440d133e6bd68ab8aaee6ce95a5eca6f93b9cad6bc49e35162088518109efd783fb8a939917e4ce3064163c9ac59095229 +MISC metadata.xml 1622 BLAKE2B 44ca2d6fd90ac51da1f56003d0f9e11ea0f2b63a014ec0c8326b75e0a84493cc10759e9a02e28f0081f55c2ebeb459d2da1ec3291aca94a6d5e770fb4f58edfb SHA512 d740509085dccff06943e4dc0aff586ca1fec6237c21f2d4c6561758fd8301c5fe00daa6f5c6ef9ba6d148d8a19b48ac15f1538484efaf761582a154c4916ff9 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: +From: "Robin H. Johnson" +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 +--- + 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" +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 +--- + 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 +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", ]``) and ++ Filters consist of S-expressions (``["operator", ]``) 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-disable-docs.patch b/app-emulation/ganeti/files/ganeti-2.15-disable-docs.patch new file mode 100644 index 000000000000..adc2813d6a30 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.15-disable-docs.patch @@ -0,0 +1,44 @@ +--- a/Makefile.am 2020-08-04 18:21:12.395282115 +0000 ++++ b/Makefile.am 2020-08-04 18:21:48.636729501 +0000 +@@ -1160,41 +1160,6 @@ + # has to exist in order for the sphinx module to be loaded + # successfully, but we certainly don't want the docs to be rebuilt if + # it changes +-doc/html/index.html doc/man-html/index.html: $(docinput) doc/conf.py \ +- configure.ac $(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \ +- lib/build/shell_example_lexer.py lib/ht.py \ +- doc/css/style.css lib/rapi/connector.py lib/rapi/rlib2.py \ +- autotools/sphinx-wrapper | $(built_python_sources) +- @test -n "$(SPHINX)" || \ +- { echo 'sphinx-build' not found during configure; exit 1; } +-if !MANPAGES_IN_DOC +- if test -n '$(ENABLE_MANPAGES)'; then \ +- echo 'Man pages in documentation were disabled at configure time' >&2; \ +- exit 1; \ +- fi +-endif +-## Sphinx provides little control over what content should be included. Some +-## mechanisms exist, but they all have drawbacks or actual issues. Since we +-## build two different versions of the documentation--once without man pages and +-## once, if enabled, with them--some control is necessary. xmpp-wrapper provides +-## us with this, but requires running in a temporary directory. It moves the +-## correct files into place depending on environment variables. +- dir=$(dir $@) && \ +- @mkdir_p@ $$dir && \ +- PYTHONPATH=. ENABLE_MANPAGES=$(ENABLE_MANPAGES) COPY_DOC=1 \ +- HTML_THEME=$(SPHINX_HTML_THEME) \ +- $(RUN_IN_TEMPDIR) autotools/sphinx-wrapper $(SPHINX) -q -W -b html \ +- -d . \ +- -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \ +- -D release="$(PACKAGE_VERSION)" \ +- -D graphviz_dot="$(DOT)" \ +- doc $(CURDIR)/$$dir && \ +- rm -f $$dir/.buildinfo $$dir/objects.inv +- touch $@ +- +-doc/html: doc/html/index.html +- +-doc/man-html: doc/man-html/index.html + + doc/install-quick.rst: INSTALL + doc/news.rst: NEWS 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-use-balloon-device.patch b/app-emulation/ganeti/files/ganeti-2.15-use-balloon-device.patch new file mode 100644 index 000000000000..ae57a213fc00 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.15-use-balloon-device.patch @@ -0,0 +1,13 @@ +diff --git a/lib/hypervisor/hv_kvm/__init__.py b/lib/hypervisor/hv_kvm/__init__.py +index 174621fcc..1f598e7ef 100644 +--- a/lib/hypervisor/hv_kvm/__init__.py ++++ b/lib/hypervisor/hv_kvm/__init__.py +@@ -1094,7 +1094,7 @@ class KVMHypervisor(hv_base.BaseHypervisor): + # Add id to ballon and place to the first available slot (3 or 4) + addr = utils.GetFreeSlot(pci_reservations, reserve=True) + pci_info = ",bus=pci.0,addr=%s" % hex(addr) +- kvm_cmd.extend(["-balloon", "virtio,id=balloon%s" % pci_info]) ++ kvm_cmd.extend(["-device", "virtio-balloon,id=balloon%s" % pci_info]) + kvm_cmd.extend(["-daemonize"]) + if not instance.hvparams[constants.HV_ACPI]: + kvm_cmd.extend(["-no-acpi"]) diff --git a/app-emulation/ganeti/files/ganeti-2.15.2-bdev_py.patch b/app-emulation/ganeti/files/ganeti-2.15.2-bdev_py.patch new file mode 100644 index 000000000000..a1fea1665804 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.15.2-bdev_py.patch @@ -0,0 +1,16 @@ +--- a/lib/storage/bdev.py 2018-09-06 19:20:03.970318746 +0000 ++++ b/lib/storage/bdev.py 2018-09-06 19:18:59.799346241 +0000 +@@ -413,6 +413,16 @@ + if not self.minor and not self.Attach(): + # the LV does not exist + return ++ ++ import glob ++ ++ for partdev in glob.glob("/dev/mapper/%s-%sp*" % (self._vg_name, self._lv_name.replace("-", "--"))): ++ result = utils.RunCmd(["dmsetup", "remove", partdev]) ++ ++ if result.failed: ++ base.ThrowError("Can't dmsetup remove %s: %s-%s", ++ partdev, result.fail_reason, result.output) ++ diff --git a/app-emulation/ganeti/files/ganeti-2.15.2-check-man-warnings.patch b/app-emulation/ganeti/files/ganeti-2.15.2-check-man-warnings.patch new file mode 100644 index 000000000000..913033dde4b4 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.15.2-check-man-warnings.patch @@ -0,0 +1,13 @@ +# https://bugs.gentoo.org/719846 +# Redirecting both stdout and stderr to /dev/null leaves nothing for grep to search +# Given that there aren't any warnings in the manpages, no need to filter, either +--- a/autotools/check-man-warnings 2020-04-30 23:10:08.140721582 +0000 ++++ b/autotools/check-man-warnings 2020-04-30 23:21:06.708945592 +0000 +@@ -37,6 +37,4 @@ + fi + + 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" | \ +- grep . ++ man --warnings --encoding=utf8 --local-file "$1" >/dev/null diff --git a/app-emulation/ganeti/files/ganeti-2.15.2-ftbfs-sphinx-warning.patch b/app-emulation/ganeti/files/ganeti-2.15.2-ftbfs-sphinx-warning.patch new file mode 100644 index 000000000000..3da34eed165f --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.15.2-ftbfs-sphinx-warning.patch @@ -0,0 +1,41 @@ +# https://bugs.gentoo.org/719846 +# Probably related to https://github.com/sphinx-doc/sphinx/issues/4225 +# +# Warning, treated as error: +# /var/tmp/portage/app-emulation/ganeti-2.15.2-r9/temp/gntbuild.tiR1shJ6/doc/design-impexp2.rst:512:Could not lex literal_block as "python". Highlighting skipped. + +--- a/doc/design-impexp2.rst 2020-04-30 23:40:50.121698365 +0000 ++++ b/doc/design-impexp2.rst 2020-04-30 23:41:05.692129339 +0000 +@@ -507,32 +507,6 @@ + respective system (measured for the CGI/FastCGI program using ``time + -v``). + +-:: +- +- ---------------------------------------------------------------------- +- Block size 4 KB 64 KB 128 KB 1 MB 4 MB +- ====================================================================== +- Plain CGI script reading 83 174 180 122 120 +- from ``/dev/zero`` +- 0.6/3.9 0.1/2.4 0.1/2.2 0.0/1.9 0.0/2.1 +- ---------------------------------------------------------------------- +- FastCGI with ``fcgiwrap``, 86 167 170 177 174 +- ``dd`` reading from +- ``/dev/zero`` 1.1/5 0.5/2.9 0.5/2.7 0.7/3.1 0.7/2.8 +- ---------------------------------------------------------------------- +- FastCGI with ``fcgiwrap``, 68 146 150 170 170 +- Python script copying from +- ``/dev/zero`` to stdout +- 1.3/5.1 0.8/3.7 0.7/3.3 0.9/2.9 0.8/3 +- ---------------------------------------------------------------------- +- FastCGI, Python script using 31 48 47 5 1 +- ``flup`` library (version +- 1.0.2) reading from +- ``/dev/zero`` +- 23.5/9.8 14.3/8.5 16.1/8 - - +- ---------------------------------------------------------------------- +- +- + It should be mentioned that the ``flup`` library is not implemented in + the most efficient way, but even with some changes it doesn't get much + faster. It is fine for small amounts of data, but not for huge diff --git a/app-emulation/ganeti/files/ganeti-2.15.2-pyopenssl.patch b/app-emulation/ganeti/files/ganeti-2.15.2-pyopenssl.patch new file mode 100644 index 000000000000..882c4f19acbe --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-2.15.2-pyopenssl.patch @@ -0,0 +1,33 @@ +--- a/lib/http/__init__.py ++++ b/lib/http/__init__.py +@@ -88,6 +88,12 @@ + # send/receive quantum + SOCK_BUF_SIZE = 32768 + ++# OpenSSL.SSL.ConnectionType was deprecated in pyopenssl-19.1.0: ++try: ++ ssl_conn_type = OpenSSL.SSL.Connection ++except AttributeError: ++ ssl_conn_type = OpenSSL.SSL.ConnectionType ++ + + class HttpError(Exception): + """Internal exception for HTTP errors. +@@ -377,7 +383,7 @@ + + # Handshake is only supported by SSL sockets + if (op == SOCKOP_HANDSHAKE and +- not isinstance(sock, OpenSSL.SSL.ConnectionType)): ++ not isinstance(sock, ssl_conn_type)): + return + + # No override by default +@@ -414,7 +420,7 @@ + return sock.recv(arg1) + + elif op == SOCKOP_SHUTDOWN: +- if isinstance(sock, OpenSSL.SSL.ConnectionType): ++ if isinstance(sock, ssl_conn_type): + # PyOpenSSL's shutdown() doesn't take arguments + return sock.shutdown() + else: 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-3.0.1-buildfix.patch b/app-emulation/ganeti/files/ganeti-3.0.1-buildfix.patch new file mode 100644 index 000000000000..3c3bf2c7af90 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.1-buildfix.patch @@ -0,0 +1,79 @@ +--- ganeti-3.0.1.orig/autotools/check-python-code 2021-02-03 09:24:44.000000000 -0800 ++++ ganeti-3.0.1/autotools/check-python-code 2021-08-17 22:09:01.279286516 -0700 +@@ -32,9 +32,10 @@ + # Ensure the checks always use the same locale + export LC_ALL=C + +-readonly maxlinelen=$(for ((i=0; i<81; ++i)); do echo -n .; done) ++readonly maxlinelen_num=120 ++readonly maxlinelen=$(for ((i=0; i<$maxlinelen_num; ++i)); do echo -n .; done) + +-if [[ "${#maxlinelen}" != 81 ]]; then ++if [[ "${#maxlinelen}" != $maxlinelen_num ]]; then + echo "Internal error: Check for line length is incorrect" >&2 + exit 1 + fi +@@ -68,7 +69,7 @@ + + if grep -n -H "^$maxlinelen" "$script"; then + let ++problems +- echo "Longest line in $script is longer than 80 characters" >&2 ++ echo "Longest line in $script is longer than $maxlinelen_num characters" >&2 + fi + + if grep -n -H -E -i \ +--- ganeti-3.0.1.orig/test/py/ganeti.cli_unittest.py 2021-02-03 09:24:44.000000000 -0800 ++++ ganeti-3.0.1/test/py/ganeti.cli_unittest.py 2021-08-17 22:40:45.098873762 -0700 +@@ -1140,7 +1140,7 @@ + if len(keyparts) > 1: + self._RenameDictItem(minmax, key, keyparts[0]) + self.assertTrue(constants.IPOLICY_DTS in parsed) +- parsed[constants.IPOLICY_DTS] = yaml.load("[%s]" % ++ parsed[constants.IPOLICY_DTS] = yaml.full_load("[%s]" % + parsed[constants.IPOLICY_DTS]) + + @staticmethod +@@ -1148,7 +1148,7 @@ + formatted = cli.FormatPolicyInfo(custom, effective, iscluster) + buf = StringIO() + cli._SerializeGenericInfo(buf, formatted, 0) +- return yaml.load(buf.getvalue()) ++ return yaml.full_load(buf.getvalue()) + + def _PrintAndCheckParsed(self, policy): + parsed = self._PrintAndParsePolicy(policy, NotImplemented, True) +--- ganeti-3.0.1.orig/qa/qa_utils.py 2021-02-03 09:24:44.000000000 -0800 ++++ ganeti-3.0.1/qa/qa_utils.py 2021-08-17 22:40:45.099873801 -0700 +@@ -450,7 +450,7 @@ + master = qa_config.GetMasterNode() + cmdline = utils.ShellQuoteArgs(infocmd) + info_out = GetCommandOutput(master.primary, cmdline) +- return yaml.load(info_out) ++ return yaml.full_load(info_out) + + + def UploadFile(node, src): +diff -Nuar ganeti-3.0.1.orig/test/py/ganeti.hooks_unittest.py ganeti-3.0.1/test/py/ganeti.hooks_unittest.py +--- ganeti-3.0.1.orig/test/py/ganeti.hooks_unittest.py 2021-08-17 22:49:00.459354704 -0700 ++++ ganeti-3.0.1/test/py/ganeti.hooks_unittest.py 2021-08-17 23:16:29.276890680 -0700 +@@ -66,6 +66,8 @@ + class TestHooksRunner(unittest.TestCase): + """Testing case for HooksRunner""" + def setUp(self): ++ # See all differences in env ++ self.maxDiff = None + self.torm = [] + self.tmpdir = tempfile.mkdtemp() + self.torm.append((self.tmpdir, True)) +diff -Nuar ganeti-3.0.1.orig/test/py/ganeti.utils.process_unittest.py ganeti-3.0.1/test/py/ganeti.utils.process_unittest.py +--- ganeti-3.0.1.orig/test/py/ganeti.utils.process_unittest.py 2021-08-17 22:49:00.458354624 -0700 ++++ ganeti-3.0.1/test/py/ganeti.utils.process_unittest.py 2021-08-17 23:19:04.413002771 -0700 +@@ -208,6 +208,8 @@ + + def setUp(self): + testutils.GanetiTestCase.setUp(self) ++ # See all differences in env ++ self.maxDiff = None + self.magic = time.ctime() + " ganeti test" + self.fname = self._CreateTempFile() + self.fifo_tmpdir = tempfile.mkdtemp() diff --git a/app-emulation/ganeti/files/ganeti-3.0.1-docfixes.patch b/app-emulation/ganeti/files/ganeti-3.0.1-docfixes.patch new file mode 100644 index 000000000000..efca5af7d39a --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.1-docfixes.patch @@ -0,0 +1,10 @@ +--- ganeti-3.0.1.orig/doc/index.rst 2021-02-03 09:24:44.000000000 -0800 ++++ ganeti-3.0.1/doc/index.rst 2021-08-14 22:04:20.028241843 -0700 +@@ -121,7 +121,6 @@ + design-kvmd.rst + design-location.rst + design-linuxha.rst +- design-location.rst + design-lu-generated-jobs.rst + design-monitoring-agent.rst + design-move-instance-improvements.rst diff --git a/app-emulation/ganeti/files/ganeti-3.0.1-gentoo-infra-hacks.patch b/app-emulation/ganeti/files/ganeti-3.0.1-gentoo-infra-hacks.patch new file mode 100644 index 000000000000..649083314839 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.1-gentoo-infra-hacks.patch @@ -0,0 +1,195 @@ +This is Robin's hacky set of patches for Ganeti + +Issue A: +* OpenRC start-stop-daemon no longer supports --oknodo option, which Ganeti + uses for idempotent stop/start daemons. +* OpenRC treats "--stop --signal 0" as a stop, rather than just doing SIG0. +* Resolve the above by adding using --signal 0 on it's own, and forcing the + stop/start functions to check before doing things. + +Issue B: http/client, rapi/client +* curl is stricter than it used to be! +* Explicitly pass Ganeti's CA cert to Curl when the client is making calls, so + that it can be trusted. +* Ensure that ONLY the Ganeti CA is used, and not other system certs. + +Bonus: +* Extra stuff to make it easier to debug + +Open Bugs: +* When using ganeti-vcluster, some tools don't apply the vcluster prefix to the socket path. + E.g. they try to open /run/ganeti/socket/ganeti-query instead of /var/lib/ganeti-vcluster/node1/run/ganeti/socket/ganeti-query + +--- a/lib/bootstrap.py 2021-08-18 22:14:52.728930451 -0700 ++++ b/lib/bootstrap.py 2021-08-18 15:29:54.125248452 -0700 +@@ -63,7 +63,7 @@ + _INITCONF_ECID = "initconfig-ecid" + + #: After how many seconds daemon must be responsive +-_DAEMON_READY_TIMEOUT = 10.0 ++_DAEMON_READY_TIMEOUT = 10.0 # Useful to raise during debug + + + def GenerateHmacKey(file_name): +--- a/lib/utils/log.py 2021-08-18 22:14:52.750932142 -0700 ++++ b/lib/utils/log.py 2021-08-18 15:51:27.044122859 -0700 +@@ -186,9 +186,13 @@ + logging.info("Received request to reopen log files") + + +-def SetupLogging(logfile, program, debug=0, stderr_logging=False, +- multithreaded=False, syslog=constants.SYSLOG_USAGE, +- console_logging=False, root_logger=None): ++def SetupLogging(logfile, program, debug=0, stderr_logging=False, ++ multithreaded=False, syslog=constants.SYSLOG_USAGE, ++ console_logging=False, root_logger=None): ++#Useful to use during debug ++#def SetupLogging(logfile, program, debug=10, stderr_logging=True, ++# multithreaded=False, syslog=constants.SYSLOG_YES, ++# console_logging=True, root_logger=None): + """Configures the logging module. + + @type logfile: str +--- a/lib/rapi/client.py 2021-08-18 22:14:52.667925763 -0700 ++++ b/lib/rapi/client.py 2021-08-18 16:56:32.569894199 -0700 +@@ -361,6 +361,9 @@ + if cafile or capath or use_curl_cabundle: + # Require certificates to be checked + curl.setopt(pycurl.SSL_VERIFYPEER, True) ++ if not use_curl_cabundle: ++ curl.setopt(pycurl.CAINFO, str('')) ++ curl.setopt(pycurl.CAPATH, str('')) + if cafile: + curl.setopt(pycurl.CAINFO, str(cafile)) + if capath: +--- a/lib/http/client.py 2021-08-18 22:14:52.470910624 -0700 ++++ b/lib/http/client.py 2021-08-18 17:02:50.196376211 -0700 +@@ -42,6 +42,7 @@ + from ganeti import compat + from ganeti import netutils + from ganeti import locking ++from ganeti import pathutils + + + class HttpClientRequest(object): +@@ -141,7 +142,9 @@ + @param req: HTTP request + + """ ++ noded_cert = pathutils.NODED_CERT_FILE + logging.debug("Starting request %r", req) ++ #logging.debug("request2 %s", req.url) + + url = req.url + method = req.method +@@ -152,8 +155,13 @@ + resp_buffer = BytesIO() + + # Configure client for request +- curl.setopt(pycurl.VERBOSE, False) ++ curl.setopt(pycurl.VERBOSE, False) ++ #curl.setopt(pycurl.VERBOSE, True) + curl.setopt(pycurl.NOSIGNAL, True) ++ #curl.setopt(pycurl.SSL_VERIFYPEER, False) ++ #curl.setopt(pycurl.SSL_VERIFYHOST, 0) ++ curl.setopt(pycurl.CAINFO, noded_cert) ++ curl.setopt(pycurl.CAPATH, noded_cert) + curl.setopt(pycurl.USERAGENT, http.HTTP_GANETI_VERSION) + curl.setopt(pycurl.PROXY, "") + curl.setopt(pycurl.CUSTOMREQUEST, method) + +--- a/daemons/daemon-util.in 2021-08-18 22:14:52.442908473 -0700 ++++ b/daemons/daemon-util.in 2021-08-18 20:00:53.111847248 -0700 +@@ -260,6 +260,8 @@ + echo 'Missing daemon name.' >&2 + return 1 + fi ++ #echo "DEBUG: $0: check $1" 1>&2 ++ #set -x + + local name="$1"; shift + local pidfile=$(_daemon_pidfile $name) +@@ -273,21 +275,24 @@ + return 1 + fi + elif type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --stop --signal 0 --quiet \ ++ start-stop-daemon --test --signal 0 --quiet \ + --pidfile $pidfile --name "$name" ++ return $? + else + _ignore_error status \ + -p $pidfile \ + $daemonexec ++ return $? + fi + } + + # Starts a daemon +-start() { ++_start() { + if [[ "$#" -lt 1 ]]; then + echo 'Missing daemon name.' >&2 + return 1 + fi ++ #echo "DEBUG: $0: _start $1" 1>&2 + + local name="$1"; shift + # Convert daemon name to uppercase after removing "ganeti-" prefix +@@ -342,11 +347,12 @@ + } + + # Stops a daemon +-stop() { ++_stop() { + if [[ "$#" -lt 1 ]]; then + echo 'Missing daemon name.' >&2 + return 1 + fi ++ #echo "DEBUG: $0: stop $1" 1>&2 + + local name="$1"; shift + local pidfile=$(_daemon_pidfile $name) +@@ -371,10 +377,32 @@ + return 1 + fi + +- start $name ++ _start $name ++ fi ++} ++ ++# Stop a daemon only if running ++check_and_stop() { ++ local name="$1" ++ ++ if check $name; then ++ if use_systemctl; then ++ echo "${name} supervised by systemd but not running, will not restart." ++ return 1 ++ fi ++ ++ _stop $name + fi + } + ++stop() { ++ check_and_stop "$@" ++} ++ ++start() { ++ check_and_start "$@" ++} ++ + # Starts the master role + start_master() { + if use_systemctl; then +@@ -423,7 +451,7 @@ + systemctl stop ganeti.target + else + for i in $(list_stop_daemons); do +- stop $i ++ stop $i + done + fi + } diff --git a/app-emulation/ganeti/files/ganeti-3.0.1-sphinx.patch b/app-emulation/ganeti/files/ganeti-3.0.1-sphinx.patch new file mode 100644 index 000000000000..5b2fb4e3dc98 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.1-sphinx.patch @@ -0,0 +1,9 @@ +diff -Nuar ganeti-3.0.1.orig/lib/build/shell_example_lexer.py ganeti-3.0.1/lib/build/shell_example_lexer.py +--- ganeti-3.0.1.orig/lib/build/shell_example_lexer.py 2021-02-03 09:24:44.000000000 -0800 ++++ ganeti-3.0.1/lib/build/shell_example_lexer.py 2021-08-17 21:30:34.049432703 -0700 +@@ -79,4 +79,4 @@ + + + def setup(app): +- app.add_lexer("shell-example", ShellExampleLexer()) ++ app.add_lexer("shell-example", ShellExampleLexer) diff --git a/app-emulation/ganeti/files/ganeti-3.0.1-template_haskell.patch b/app-emulation/ganeti/files/ganeti-3.0.1-template_haskell.patch new file mode 100644 index 000000000000..7ac02d020796 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.1-template_haskell.patch @@ -0,0 +1,24 @@ +API change in version 2.16 (shipped with ghc-8.10) which changed the type for +the TupE constructor from [Exp] to [Maybe Exp]. + +Thanks-To: solpeth in #gentoo-haskell +Signed-off-by: Robin H. Johnson + +--- ganeti-3.0.1/src/Ganeti/THH/Types.hs 2021-02-03 09:24:44.000000000 -0800 ++++ ganeti-3.0.1.modified//src/Ganeti/THH/Types.hs 2021-08-14 21:37:38.027556528 -0700 +@@ -122,5 +122,13 @@ + curryN n = do + f <- newName "f" + ps <- replicateM n (newName "x") +- return $ LamE (VarP f : map VarP ps) +- (AppE (VarE f) (TupE $ map VarE ps)) ++ -- return $ LamE (VarP f : map VarP ps) ++ -- (AppE (VarE f) (TupE $ map VarE ps)) ++ let args = map VarP (f:ps) ++ ntup = TupE ++#if MIN_VERSION_template_haskell(2,16,0) ++ $ map Just (map VarE ps) ++#else ++ (map VarE ps) ++#endif ++ return $ LamE args (AppE (VarE f) ntup) diff --git a/app-emulation/ganeti/files/ganeti-3.0.2-docfixes.patch b/app-emulation/ganeti/files/ganeti-3.0.2-docfixes.patch new file mode 100644 index 000000000000..8c50d38a5c4e --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.2-docfixes.patch @@ -0,0 +1,11 @@ +diff -Nuar ganeti-3.0.2.orig/doc/index.rst ganeti-3.0.2/doc/index.rst +--- ganeti-3.0.2.orig/doc/index.rst 2022-06-21 22:50:29.119540902 -0700 ++++ ganeti-3.0.2/doc/index.rst 2022-06-21 22:55:40.645219873 -0700 +@@ -120,6 +120,7 @@ + design-internal-shutdown.rst + design-kvmd.rst + design-linuxha.rst ++ design-location.rst + design-lu-generated-jobs.rst + design-monitoring-agent.rst + design-move-instance-improvements.rst diff --git a/app-emulation/ganeti/files/ganeti-3.0.2-gentoo-daemon-util-part2.patch b/app-emulation/ganeti/files/ganeti-3.0.2-gentoo-daemon-util-part2.patch new file mode 100644 index 000000000000..48a93d403b4a --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.2-gentoo-daemon-util-part2.patch @@ -0,0 +1,64 @@ +--- a/daemons/daemon-util.in 2021-08-18 22:14:52.442908473 -0700 ++++ b/daemons/daemon-util.in 2022-07-04 13:17:29.914663427 -0700 +@@ -28,6 +28,7 @@ + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + set -e ++#set -x + + # Allow overriding for tests + readonly LOCALSTATEDIR=${LOCALSTATEDIR:-${GANETI_ROOTDIR:-}/var} +@@ -330,11 +331,14 @@ + fi + + if type -p start-stop-daemon >/dev/null; then +- start-stop-daemon --start --quiet --oknodo \ ++ start-stop-daemon --start \ ++ --wait 200 \ + --pidfile $pidfile \ +- --startas $daemonexec \ +- --chuid $usergroup \ ++ --exec $daemonexec \ ++ --user $usergroup \ + -- $args "$@" ++ rc=$? ++ return $? + else + # TODO: Find a way to start daemon with a group, until then the group must + # be removed +@@ -360,7 +364,7 @@ + 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 --name "$name" + else + _ignore_error killproc -p $pidfile $name +@@ -369,7 +373,7 @@ + + # Starts a daemon if it's not yet running + check_and_start() { +- local name="$1" ++ local name="$1" ; shift + + if ! check $name; then + if use_systemctl; then +@@ -377,7 +381,7 @@ + return 1 + fi + +- _start $name ++ _start $name "$@" + fi + } + +@@ -469,7 +473,7 @@ + + if type -p start-stop-daemon >/dev/null; then + start-stop-daemon --stop --signal HUP --quiet \ +- --oknodo --pidfile $pidfile --name "$name" ++ --pidfile $pidfile --name "$name" + else + _ignore_error killproc \ + -p $pidfile \ diff --git a/app-emulation/ganeti/files/ganeti-3.0.2-less-sleep.patch b/app-emulation/ganeti/files/ganeti-3.0.2-less-sleep.patch new file mode 100644 index 000000000000..d13347160d0d --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-3.0.2-less-sleep.patch @@ -0,0 +1,20 @@ +diff -Nuar ganeti-3.0.2.orig/lib/cmdlib/instance_storage.py ganeti-3.0.2/lib/cmdlib/instance_storage.py +--- ganeti-3.0.2.orig/lib/cmdlib/instance_storage.py 2022-02-28 12:37:07.000000000 -0800 ++++ ganeti-3.0.2/lib/cmdlib/instance_storage.py 2022-06-25 15:35:20.742784824 -0700 +@@ -58,6 +58,7 @@ + import ganeti.masterd.instance + + ++_SLEEP_MIN_TIME = 10 + _DISK_TEMPLATE_NAME_PREFIX = { + constants.DT_PLAIN: "", + constants.DT_RBD: ".rbd", +@@ -1501,7 +1502,7 @@ + if done or oneshot: + break + +- time.sleep(min(60, max_time)) ++ time.sleep(min(_SLEEP_MIN_TIME, max_time)) + + if done: + lu.LogInfo("Instance %s's disks are in sync", instance.name) 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-tmpfilesd b/app-emulation/ganeti/files/ganeti-tmpfilesd new file mode 100644 index 000000000000..681bb6c366e8 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti-tmpfilesd @@ -0,0 +1,41 @@ +# needs to be readable by ganeti +f /etc/ganeti/file-storage-paths 0640 root root - + +# stateful ganeti stuff +d /var/lib/ganeti 0755 root root - +d /var/lib/ganeti/queue 0750 root root - +d /var/lib/ganeti/queue/archive 0750 root root - +d /var/lib/ganeti/rapi 0750 root root - + +# places to store data +d /srv/ganeti/file-storage - - - - +d /srv/ganeti/shared-file-storage - - - - +d /srv/ganeti/export - - - - +d /srv/ganeti/os - - - +d /srv/ganeti/extstorage - - - - + +# Needed to run ganeti +d /run/ganeti/ 0775 root root +d /run/ganeti/bdev-cache 0755 root root +d /run/ganeti/chroot-hypervisor 0775 root root +d /run/ganeti/crypto 0700 root root +d /run/ganeti/fake-hypervisor 0775 root root +d /run/ganeti/gluster 0750 root root - +d /run/ganeti/import-export 0755 root root +d /run/ganeti/instance-disks 0755 root root +d /run/ganeti/instance-reason 0755 root root +d /run/ganeti/kvm-hypervisor 0775 root root +d /run/ganeti/kvm-hypervisor/chroot 0775 root root +d /run/ganeti/kvm-hypervisor/chroot-quarantine 0775 root root +d /run/ganeti/kvm-hypervisor/conf 0775 root root +d /run/ganeti/kvm-hypervisor/ctrl 0775 root root +d /run/ganeti/kvm-hypervisor/keymap 0775 root root +d /run/ganeti/kvm-hypervisor/nic 0775 root root +d /run/ganeti/kvm-hypervisor/pid 0775 root root +d /run/ganeti/kvm-hypervisor/uid 0775 root root +d /run/ganeti/livelocks 0750 root root +d /run/ganeti/luxidmessages 0750 root root +d /run/ganeti/lxc 0755 root root +d /run/ganeti/lxc/instance 0750 root root +d /run/ganeti/socket 0770 root root +d /run/ganeti/uid-pool 0750 root root 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.confd-r5 b/app-emulation/ganeti/files/ganeti.confd-r5 new file mode 100644 index 000000000000..c283bb166232 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.confd-r5 @@ -0,0 +1,30 @@ +# /etc/conf.d/ganeti: config file for /etc/init.d/ganeti + +# Extra options to pass to all of the ganeti daemons +# GANETI_OPTS="-d" + +# daemon-util may pass arguments via the _ARGS variant! + +# Options to pass to ganeti-noded +GANETI_NODED_OPTS="${GANETI_NODED_OPTS:-${NODED_ARGS:-}}" + +# Options to pass to ganeti-masterd +GANETI_MASTERD_OPTS="${GANETI_MASTERD_OPTS:-${MASTERD_ARGS:-}}" + +# Options to pass to ganeti-rapi +GANETI_RAPI_OPTS="${GANETI_RAPI_OPTS:-${RAPI_ARGS:-}}" + +# Options to pass to ganeti-confd +GANETI_CONFD_OPTS="${GANETI_CONFD_OPTS:-${CONFD_ARGS:-}}" + +# Options to pass to ganeti-mond +GANETI_MOND_OPTS="${GANETI_MOND_OPTS:-${MOND_ARGS:-}}" + +# Options to pass to ganeti-wconfd +GANETI_WCONFD_OPTS="${GANETI_WCONFD_OPTS:-${WCONFD_ARGS:-}}" + +# Options to pass to ganeti-luxid +GANETI_LUXID_OPTS="${GANETI_LUXID_OPTS:-${LUXID_ARGS:-}}" + +# Options to pass to ganeti-kvmd +GANETI_KVMD_OPTS="${GANETI_KVMD_OPTS:-${KVMD_ARGS:-}}" diff --git a/app-emulation/ganeti/files/ganeti.initd-r3 b/app-emulation/ganeti/files/ganeti.initd-r3 new file mode 100644 index 000000000000..18b3116a517f --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.initd-r3 @@ -0,0 +1,96 @@ +#!/sbin/openrc-run +# Copyright 1999-2019 Gentoo Authors +# 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/files/ganeti.initd-r4 b/app-emulation/ganeti/files/ganeti.initd-r4 new file mode 100644 index 000000000000..6393de8e2803 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.initd-r4 @@ -0,0 +1,96 @@ +#!/sbin/openrc-run +# Copyright 1999-2019 Gentoo Authors +# 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/%LIBDIR%/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/files/ganeti.initd-r5 b/app-emulation/ganeti/files/ganeti.initd-r5 new file mode 100644 index 000000000000..72dd0cdd6ac1 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.initd-r5 @@ -0,0 +1,103 @@ +#!/sbin/openrc-run +# Copyright 1999-2019 Gentoo Authors +# 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" +readonly LOCALSTATEDIR=${LOCALSTATEDIR:-${GANETI_ROOTDIR:-}/var} +readonly SYSCONFDIR=${SYSCONFDIR:-${GANETI_ROOTDIR:-}/etc} +readonly PKGLIBDIR=/usr/lib64/ganeti +readonly LOG_DIR="$LOCALSTATEDIR/log/ganeti" +readonly RUN_DIR="/run/ganeti" +readonly DATA_DIR="$LOCALSTATEDIR/lib/ganeti" +readonly CONF_DIR="$SYSCONFDIR/ganeti" + +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|wconfd) is_master || continue;; + esac + ${DAEMON_UTIL} stop ${daemon} ${GANETI_OPTS} + done +} + +# vim:ft=gentoo-init-d:ts=4:sts=4:sw=4:noet: diff --git a/app-emulation/ganeti/files/ganeti.initd-r6 b/app-emulation/ganeti/files/ganeti.initd-r6 new file mode 100644 index 000000000000..eb5843ef0084 --- /dev/null +++ b/app-emulation/ganeti/files/ganeti.initd-r6 @@ -0,0 +1,108 @@ +#!/sbin/openrc-run +# Copyright 1999-2019 Gentoo Authors +# 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" +readonly LOCALSTATEDIR=${LOCALSTATEDIR:-${GANETI_ROOTDIR:-}/var} +readonly SYSCONFDIR=${SYSCONFDIR:-${GANETI_ROOTDIR:-}/etc} +readonly PKGLIBDIR=/usr/lib64/ganeti +readonly LOG_DIR="$LOCALSTATEDIR/log/ganeti" +readonly RUN_DIR="/run/ganeti" +readonly DATA_DIR="$LOCALSTATEDIR/lib/ganeti" +readonly CONF_DIR="$SYSCONFDIR/ganeti" + +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 + + daemons_to_start=$(${DAEMON_UTIL} list-start-daemons) + veinfo "Daemons to start: "${daemons_to_start} + + for daemon in $daemons_to_start ; do + optsvar="$(printf "${daemon}_OPTS" | tr - _ | LC_ALL=C tr '[:lower:]' '[:upper:]')" + + case "${daemon#ganeti-}" in + masterd|rapi|luxid|wconfd) 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 + daemons_to_stop=$(${DAEMON_UTIL} list-stop-daemons) + veinfo "Daemons to stop: "${daemons_to_stop} + + for daemon in $daemons_to_stop ; do + case "${daemon#ganeti-}" in + masterd|rapi|luxid|wconfd) 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-3.0.2-r2.ebuild b/app-emulation/ganeti/ganeti-3.0.2-r2.ebuild new file mode 100644 index 000000000000..ea66aef7fbf0 --- /dev/null +++ b/app-emulation/ganeti/ganeti-3.0.2-r2.ebuild @@ -0,0 +1,413 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +# As of 3.0.2, Upstream does NOT yet support newer than python3.8 +PYTHON_COMPAT=(python3_{7..8}) +PYTHON_REQ_USE="ipv6(+)?" + +inherit autotools bash-completion-r1 python-single-r1 tmpfiles + +MY_PV="${PV/_rc/~rc}" +MY_PV="${MY_PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="3.0" + +if [[ ${PV} =~ [9]{4,} ]] ; then + EGIT_REPO_URI="https://github.com/ganeti/ganeti" + EGIT_BRANCH="stable-$SERIES" + inherit git-r3 + PATCHES=() +else + DEBIAN_PV="${PV}" + #http://deb.debian.org/debian/pool/main/g/ganeti/ganeti_3.0.1-2.debian.tar.xz + DEBIAN_PATCH=1 + SRC_URI="https://github.com/ganeti/ganeti/releases/download/v${PV}/${P}.tar.gz" + [[ -n "${DEBIAN_PATCH}" ]] && 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/0001-verify-warn-about-weak-certs.patch + "${WORKDIR}"/debian/patches/0002-remove-hardcoded-libc-linux-constants.patch + ) +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://www.ganeti.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd experimental ipv6 kvm lxc monitoring rbd syslog test xen restricted-commands" +RESTRICT="!test? ( test )" + +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 + $(python_gen_cond_dep ' + 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-8.0:0= + =dev-haskell/cabal-3: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= + >=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/base64-bytestring-1.0.0.1:0= + =dev-haskell/cryptonite-0.23:0= + >=dev-haskell/curl-1.3.7:0= + =dev-haskell/hinotify-0.3.2:0= + =dev-haskell/hslogger-1.1.4:0= + =dev-haskell/json-0.5:0= + =dev-haskell/lens-3.10:0= + =dev-haskell/lifted-base-0.2.0.3:0= + =dev-haskell/monad-control-0.3.1.3:0= + =dev-haskell/parallel-3.2.0.2:3= + =dev-haskell/regex-pcre-0.94.2:0= + =dev-haskell/temporary-1.1.2.3:0= + =dev-haskell/transformers-base-0.4.1:0= + =dev-haskell/utf8-string-0.3.7:0= + >=dev-haskell/zlib-0.5.3.3:0= + =dev-haskell/network-2.9:0= + =dev-haskell/network-bsd-2.8:0= + =dev-haskell/psqueue-1.1:0= + =dev-haskell/snap-core-1.0.0:0= + >=dev-haskell/snap-server-1.0.0:0= + >=dev-haskell/case-insensitive-0.4.0.1:0= + =app-emulation/xen-3.0 ) + kvm? ( + dev-python/psutil + app-emulation/qemu + ) + lxc? ( app-containers/lxc ) + drbd? ( sys-cluster/drbd-utils ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + ${PYTHON_DEPS}" +RDEPEND="${DEPEND}" +DEPEND+=" + sys-devel/m4 + app-text/pandoc + $(python_gen_cond_dep ' + dev-python/sphinx[${PYTHON_USEDEP}] + ') + media-fonts/urw-fonts + media-gfx/graphviz + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + >=dev-haskell/hunit-1.2.4.2:0= + =dev-haskell/quickcheck-2.8:2= + =dev-haskell/test-framework-0.6:0= + =dev-haskell/test-framework-hunit-0.2.7:0= + =dev-haskell/test-framework-quickcheck2-0.2.12.1:0= + =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" + ##"${FILESDIR}"/${PN}-3.0.1-template_haskell.patch + ##"${FILESDIR}"/${PN}-3.0.1-docfixes.patch + ##"${FILESDIR}"/${PN}-3.0.1-sphinx.patch + "${FILESDIR}"/${PN}-3.0.1-buildfix.patch + "${FILESDIR}"/${PN}-3.0.1-gentoo-infra-hacks.patch + "${FILESDIR}"/ganeti-3.0.2-less-sleep.patch + "${FILESDIR}"/${PN}-3.0.2-gentoo-daemon-util-part2.patch +) + +S="${WORKDIR}/${MY_P}" + +QA_WX_LOAD=" + usr/lib*/${PN}/${SERIES}/usr/sbin/ganeti-*d + usr/lib*/${PN}/${SERIES}/ganeti/mon-collector + usr/lib*/${PN}/${SERIES}/usr/bin/htools +" + +pkg_setup() { + local user + python-single-r1_pkg_setup + + # Unknown if this functionality was ever used. Maybe re-introduce if issues + # reported. + #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 +} + +# These flags get applied in src_prepare and src_configure +GNT_HASKELL_FLAGS="-optl -Wl,-z,relro -optl -Wl,--as-needed -Wno-unused-imports -Wno-deprecations -Wno-monomorphism-restriction" + +src_prepare() { + local testfile + if has_version '>=dev-lang/ghc-8.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+=( + ) + fi + + # Some debian patches have trailing whitespace, which trips upstream testing + if test -d "${WORKDIR}"/debian/patches ; then + sed -r -i -e 's,[[:space:]]+$,,g' "${WORKDIR}"/debian/patches/* || die "sed failed" + 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 + # Disable warnings to make it easier to see failure + sed -i -e "/^GHC_BYVERSION_FLAGS = @GHC_BYVERSION_FLAGS@/s/$/ ${GNT_HASKELL_FLAGS}/g" "${S}"/Makefile.in +} + +src_compile() { + export TMPDIR="${T}/tmp" + mkdir -p "${TMPDIR}" + default +} + +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_opt=( + --localstatedir=/var + --sharedstatedir=/var + --disable-symlinks + --with-sshd-restart-command='/etc/init.d/sshd restart' + #--with-export-dir=/var/lib/ganeti-storage/export # Old gentoo + --with-export-dir=/srv/ganeti/export # Upstream recommended + + #--with-extstorage-search-path=/var/lib/ganeti-storage/ # Old Gentoo + --with-extstorage-search-path=/srv/ganeti/extstorage,/var/lib/ganeti-storage/ext # Upstream + Gentoo + + --with-os-search-path=/srv/ganeti/os,/usr/share/${PN}/os # Upstream + Gentoo + + --disable-manpages-in-doc + --enable-metadata + $(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}" '') + --with-haskell-flags="${GNT_HASKELL_FLAGS}" + --enable-socat-escape + --enable-socat-compress + --disable-maintainer-mode + # Upstream ships some weird defaults for filenames + --with-xen-kernel=/boot/kernel + --with-kvm-kernel=/boot/kernel + --with-xen-initrd=/boot/initramfs + --with-kvm-initrd=/boot/initramfs + + # Force this split haskell module + ENABLE_NETWORK_BSD=1 + ) + econf "${econf_opt[@]}" +} + +src_compile() { + emake ENABLE_MANPAGES="" MAN_HAS_WARNINGS="" +} + +src_install() { + emake V=1 DESTDIR="${D}" ENABLE_MANPAGES="" MAN_HAS_WARNINGS="" install + + newinitd "${FILESDIR}"/ganeti.initd-r6 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r5 ${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/* + + 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} + + newtmpfiles "${FILESDIR}"/ganeti-tmpfilesd ${PN}.conf + + keepdir /var/log/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + # These are the older Gentoo paths + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + # This is handled by tmpfiles. You cannot use keepdir here as Ganeti refuses to have other files in it! + rmdir "${D}"/var/lib/ganeti || true + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} + + # Be opinionated, this is the paths that upstream suggests and uses as defaults in configure. + # ganeti-tmpfilesd will ensure they are created + touch "${D}"/etc/ganeti/file-storage-paths + echo /srv/ganeti/file-storage >>"${D}"/etc/ganeti/file-storage-paths + echo /srv/ganeti/shared-file-storage >>"${D}"/etc/ganeti/file-storage-paths +} + +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() { + # locale is used in some of the doc checks + export LC_ALL=C + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + LC_ALL=C \ + GANETI_MASTER="$(hostname -f)" \ + emake check +} diff --git a/app-emulation/ganeti/ganeti-3.0.9999.ebuild b/app-emulation/ganeti/ganeti-3.0.9999.ebuild new file mode 100644 index 000000000000..ea66aef7fbf0 --- /dev/null +++ b/app-emulation/ganeti/ganeti-3.0.9999.ebuild @@ -0,0 +1,413 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +# As of 3.0.2, Upstream does NOT yet support newer than python3.8 +PYTHON_COMPAT=(python3_{7..8}) +PYTHON_REQ_USE="ipv6(+)?" + +inherit autotools bash-completion-r1 python-single-r1 tmpfiles + +MY_PV="${PV/_rc/~rc}" +MY_PV="${MY_PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="3.0" + +if [[ ${PV} =~ [9]{4,} ]] ; then + EGIT_REPO_URI="https://github.com/ganeti/ganeti" + EGIT_BRANCH="stable-$SERIES" + inherit git-r3 + PATCHES=() +else + DEBIAN_PV="${PV}" + #http://deb.debian.org/debian/pool/main/g/ganeti/ganeti_3.0.1-2.debian.tar.xz + DEBIAN_PATCH=1 + SRC_URI="https://github.com/ganeti/ganeti/releases/download/v${PV}/${P}.tar.gz" + [[ -n "${DEBIAN_PATCH}" ]] && 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/0001-verify-warn-about-weak-certs.patch + "${WORKDIR}"/debian/patches/0002-remove-hardcoded-libc-linux-constants.patch + ) +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://www.ganeti.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd experimental ipv6 kvm lxc monitoring rbd syslog test xen restricted-commands" +RESTRICT="!test? ( test )" + +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 + $(python_gen_cond_dep ' + 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-8.0:0= + =dev-haskell/cabal-3: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= + >=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/base64-bytestring-1.0.0.1:0= + =dev-haskell/cryptonite-0.23:0= + >=dev-haskell/curl-1.3.7:0= + =dev-haskell/hinotify-0.3.2:0= + =dev-haskell/hslogger-1.1.4:0= + =dev-haskell/json-0.5:0= + =dev-haskell/lens-3.10:0= + =dev-haskell/lifted-base-0.2.0.3:0= + =dev-haskell/monad-control-0.3.1.3:0= + =dev-haskell/parallel-3.2.0.2:3= + =dev-haskell/regex-pcre-0.94.2:0= + =dev-haskell/temporary-1.1.2.3:0= + =dev-haskell/transformers-base-0.4.1:0= + =dev-haskell/utf8-string-0.3.7:0= + >=dev-haskell/zlib-0.5.3.3:0= + =dev-haskell/network-2.9:0= + =dev-haskell/network-bsd-2.8:0= + =dev-haskell/psqueue-1.1:0= + =dev-haskell/snap-core-1.0.0:0= + >=dev-haskell/snap-server-1.0.0:0= + >=dev-haskell/case-insensitive-0.4.0.1:0= + =app-emulation/xen-3.0 ) + kvm? ( + dev-python/psutil + app-emulation/qemu + ) + lxc? ( app-containers/lxc ) + drbd? ( sys-cluster/drbd-utils ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + ${PYTHON_DEPS}" +RDEPEND="${DEPEND}" +DEPEND+=" + sys-devel/m4 + app-text/pandoc + $(python_gen_cond_dep ' + dev-python/sphinx[${PYTHON_USEDEP}] + ') + media-fonts/urw-fonts + media-gfx/graphviz + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + >=dev-haskell/hunit-1.2.4.2:0= + =dev-haskell/quickcheck-2.8:2= + =dev-haskell/test-framework-0.6:0= + =dev-haskell/test-framework-hunit-0.2.7:0= + =dev-haskell/test-framework-quickcheck2-0.2.12.1:0= + =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" + ##"${FILESDIR}"/${PN}-3.0.1-template_haskell.patch + ##"${FILESDIR}"/${PN}-3.0.1-docfixes.patch + ##"${FILESDIR}"/${PN}-3.0.1-sphinx.patch + "${FILESDIR}"/${PN}-3.0.1-buildfix.patch + "${FILESDIR}"/${PN}-3.0.1-gentoo-infra-hacks.patch + "${FILESDIR}"/ganeti-3.0.2-less-sleep.patch + "${FILESDIR}"/${PN}-3.0.2-gentoo-daemon-util-part2.patch +) + +S="${WORKDIR}/${MY_P}" + +QA_WX_LOAD=" + usr/lib*/${PN}/${SERIES}/usr/sbin/ganeti-*d + usr/lib*/${PN}/${SERIES}/ganeti/mon-collector + usr/lib*/${PN}/${SERIES}/usr/bin/htools +" + +pkg_setup() { + local user + python-single-r1_pkg_setup + + # Unknown if this functionality was ever used. Maybe re-introduce if issues + # reported. + #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 +} + +# These flags get applied in src_prepare and src_configure +GNT_HASKELL_FLAGS="-optl -Wl,-z,relro -optl -Wl,--as-needed -Wno-unused-imports -Wno-deprecations -Wno-monomorphism-restriction" + +src_prepare() { + local testfile + if has_version '>=dev-lang/ghc-8.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+=( + ) + fi + + # Some debian patches have trailing whitespace, which trips upstream testing + if test -d "${WORKDIR}"/debian/patches ; then + sed -r -i -e 's,[[:space:]]+$,,g' "${WORKDIR}"/debian/patches/* || die "sed failed" + 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 + # Disable warnings to make it easier to see failure + sed -i -e "/^GHC_BYVERSION_FLAGS = @GHC_BYVERSION_FLAGS@/s/$/ ${GNT_HASKELL_FLAGS}/g" "${S}"/Makefile.in +} + +src_compile() { + export TMPDIR="${T}/tmp" + mkdir -p "${TMPDIR}" + default +} + +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_opt=( + --localstatedir=/var + --sharedstatedir=/var + --disable-symlinks + --with-sshd-restart-command='/etc/init.d/sshd restart' + #--with-export-dir=/var/lib/ganeti-storage/export # Old gentoo + --with-export-dir=/srv/ganeti/export # Upstream recommended + + #--with-extstorage-search-path=/var/lib/ganeti-storage/ # Old Gentoo + --with-extstorage-search-path=/srv/ganeti/extstorage,/var/lib/ganeti-storage/ext # Upstream + Gentoo + + --with-os-search-path=/srv/ganeti/os,/usr/share/${PN}/os # Upstream + Gentoo + + --disable-manpages-in-doc + --enable-metadata + $(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}" '') + --with-haskell-flags="${GNT_HASKELL_FLAGS}" + --enable-socat-escape + --enable-socat-compress + --disable-maintainer-mode + # Upstream ships some weird defaults for filenames + --with-xen-kernel=/boot/kernel + --with-kvm-kernel=/boot/kernel + --with-xen-initrd=/boot/initramfs + --with-kvm-initrd=/boot/initramfs + + # Force this split haskell module + ENABLE_NETWORK_BSD=1 + ) + econf "${econf_opt[@]}" +} + +src_compile() { + emake ENABLE_MANPAGES="" MAN_HAS_WARNINGS="" +} + +src_install() { + emake V=1 DESTDIR="${D}" ENABLE_MANPAGES="" MAN_HAS_WARNINGS="" install + + newinitd "${FILESDIR}"/ganeti.initd-r6 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r5 ${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/* + + 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} + + newtmpfiles "${FILESDIR}"/ganeti-tmpfilesd ${PN}.conf + + keepdir /var/log/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + # These are the older Gentoo paths + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + # This is handled by tmpfiles. You cannot use keepdir here as Ganeti refuses to have other files in it! + rmdir "${D}"/var/lib/ganeti || true + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} + + # Be opinionated, this is the paths that upstream suggests and uses as defaults in configure. + # ganeti-tmpfilesd will ensure they are created + touch "${D}"/etc/ganeti/file-storage-paths + echo /srv/ganeti/file-storage >>"${D}"/etc/ganeti/file-storage-paths + echo /srv/ganeti/shared-file-storage >>"${D}"/etc/ganeti/file-storage-paths +} + +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() { + # locale is used in some of the doc checks + export LC_ALL=C + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + LC_ALL=C \ + GANETI_MASTER="$(hostname -f)" \ + emake check +} diff --git a/app-emulation/ganeti/ganeti-3.1.9999.ebuild b/app-emulation/ganeti/ganeti-3.1.9999.ebuild new file mode 100644 index 000000000000..10ff7a522300 --- /dev/null +++ b/app-emulation/ganeti/ganeti-3.1.9999.ebuild @@ -0,0 +1,413 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +# As of 3.0.2, Upstream does NOT yet support newer than python3.8 +PYTHON_COMPAT=(python3_{7..8}) +PYTHON_REQ_USE="ipv6(+)?" + +inherit autotools bash-completion-r1 python-single-r1 tmpfiles + +MY_PV="${PV/_rc/~rc}" +MY_PV="${MY_PV/_beta/~beta}" +MY_P="${PN}-${MY_PV}" +SERIES="3.1" + +if [[ ${PV} =~ [9]{4,} ]] ; then + EGIT_REPO_URI="https://github.com/ganeti/ganeti" + EGIT_BRANCH="master" # not branched yet + inherit git-r3 + PATCHES=() +else + DEBIAN_PV="${PV}" + #http://deb.debian.org/debian/pool/main/g/ganeti/ganeti_3.0.1-2.debian.tar.xz + DEBIAN_PATCH=1 + SRC_URI="https://github.com/ganeti/ganeti/releases/download/v${PV}/${P}.tar.gz" + [[ -n "${DEBIAN_PATCH}" ]] && 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/0001-verify-warn-about-weak-certs.patch + "${WORKDIR}"/debian/patches/0002-remove-hardcoded-libc-linux-constants.patch + ) +fi + +DESCRIPTION="Ganeti is a virtual server management software tool" +HOMEPAGE="http://www.ganeti.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="drbd experimental ipv6 kvm lxc monitoring rbd syslog test xen restricted-commands" +RESTRICT="!test? ( test )" + +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 + $(python_gen_cond_dep ' + 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-8.0:0= + =dev-haskell/cabal-3: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= + >=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/base64-bytestring-1.0.0.1:0= + =dev-haskell/cryptonite-0.23:0= + >=dev-haskell/curl-1.3.7:0= + =dev-haskell/hinotify-0.3.2:0= + =dev-haskell/hslogger-1.1.4:0= + =dev-haskell/json-0.5:0= + =dev-haskell/lens-3.10:0= + =dev-haskell/lifted-base-0.2.0.3:0= + =dev-haskell/monad-control-0.3.1.3:0= + =dev-haskell/parallel-3.2.0.2:3= + =dev-haskell/regex-pcre-0.94.2:0= + =dev-haskell/temporary-1.1.2.3:0= + =dev-haskell/transformers-base-0.4.1:0= + =dev-haskell/utf8-string-0.3.7:0= + >=dev-haskell/zlib-0.5.3.3:0= + =dev-haskell/network-2.9:0= + =dev-haskell/network-bsd-2.8:0= + =dev-haskell/psqueue-1.1:0= + =dev-haskell/snap-core-1.0.0:0= + >=dev-haskell/snap-server-1.0.0:0= + >=dev-haskell/case-insensitive-0.4.0.1:0= + =app-emulation/xen-3.0 ) + kvm? ( + dev-python/psutil + app-emulation/qemu + ) + lxc? ( app-containers/lxc ) + drbd? ( sys-cluster/drbd-utils ) + rbd? ( sys-cluster/ceph ) + ipv6? ( net-misc/ndisc6 ) + ${PYTHON_DEPS}" +RDEPEND="${DEPEND}" +DEPEND+=" + sys-devel/m4 + app-text/pandoc + $(python_gen_cond_dep ' + dev-python/sphinx[${PYTHON_USEDEP}] + ') + media-fonts/urw-fonts + media-gfx/graphviz + test? ( + dev-python/mock + dev-python/pyyaml + dev-haskell/haddock:0= + >=dev-haskell/hunit-1.2.4.2:0= + =dev-haskell/quickcheck-2.8:2= + =dev-haskell/test-framework-0.6:0= + =dev-haskell/test-framework-hunit-0.2.7:0= + =dev-haskell/test-framework-quickcheck2-0.2.12.1:0= + =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" + ##"${FILESDIR}"/${PN}-3.0.1-template_haskell.patch + ##"${FILESDIR}"/${PN}-3.0.1-docfixes.patch + ##"${FILESDIR}"/${PN}-3.0.1-sphinx.patch + "${FILESDIR}"/${PN}-3.0.1-buildfix.patch + "${FILESDIR}"/${PN}-3.0.1-gentoo-infra-hacks.patch + "${FILESDIR}"/ganeti-3.0.2-less-sleep.patch + "${FILESDIR}"/${PN}-3.0.2-gentoo-daemon-util-part2.patch +) + +S="${WORKDIR}/${MY_P}" + +QA_WX_LOAD=" + usr/lib*/${PN}/${SERIES}/usr/sbin/ganeti-*d + usr/lib*/${PN}/${SERIES}/ganeti/mon-collector + usr/lib*/${PN}/${SERIES}/usr/bin/htools +" + +pkg_setup() { + local user + python-single-r1_pkg_setup + + # Unknown if this functionality was ever used. Maybe re-introduce if issues + # reported. + #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 +} + +# These flags get applied in src_prepare and src_configure +GNT_HASKELL_FLAGS="-optl -Wl,-z,relro -optl -Wl,--as-needed -Wno-unused-imports -Wno-deprecations -Wno-monomorphism-restriction" + +src_prepare() { + local testfile + if has_version '>=dev-lang/ghc-8.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+=( + ) + fi + + # Some debian patches have trailing whitespace, which trips upstream testing + if test -d "${WORKDIR}"/debian/patches ; then + sed -r -i -e 's,[[:space:]]+$,,g' "${WORKDIR}"/debian/patches/* || die "sed failed" + 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 + # Disable warnings to make it easier to see failure + sed -i -e "/^GHC_BYVERSION_FLAGS = @GHC_BYVERSION_FLAGS@/s/$/ ${GNT_HASKELL_FLAGS}/g" "${S}"/Makefile.in +} + +src_compile() { + export TMPDIR="${T}/tmp" + mkdir -p "${TMPDIR}" + default +} + +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_opt=( + --localstatedir=/var + --sharedstatedir=/var + --disable-symlinks + --with-sshd-restart-command='/etc/init.d/sshd restart' + #--with-export-dir=/var/lib/ganeti-storage/export # Old gentoo + --with-export-dir=/srv/ganeti/export # Upstream recommended + + #--with-extstorage-search-path=/var/lib/ganeti-storage/ # Old Gentoo + --with-extstorage-search-path=/srv/ganeti/extstorage,/var/lib/ganeti-storage/ext # Upstream + Gentoo + + --with-os-search-path=/srv/ganeti/os,/usr/share/${PN}/os # Upstream + Gentoo + + --disable-manpages-in-doc + --enable-metadata + $(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}" '') + --with-haskell-flags="${GNT_HASKELL_FLAGS}" + --enable-socat-escape + --enable-socat-compress + --disable-maintainer-mode + # Upstream ships some weird defaults for filenames + --with-xen-kernel=/boot/kernel + --with-kvm-kernel=/boot/kernel + --with-xen-initrd=/boot/initramfs + --with-kvm-initrd=/boot/initramfs + + # Force this split haskell module + ENABLE_NETWORK_BSD=1 + ) + econf "${econf_opt[@]}" +} + +src_compile() { + emake ENABLE_MANPAGES="" MAN_HAS_WARNINGS="" +} + +src_install() { + emake V=1 DESTDIR="${D}" ENABLE_MANPAGES="" MAN_HAS_WARNINGS="" install + + newinitd "${FILESDIR}"/ganeti.initd-r6 ${PN} + newconfd "${FILESDIR}"/ganeti.confd-r5 ${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/* + + 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} + + newtmpfiles "${FILESDIR}"/ganeti-tmpfilesd ${PN}.conf + + keepdir /var/log/${PN}/ + keepdir /usr/share/${PN}/${SERIES}/os/ + # These are the older Gentoo paths + keepdir /var/lib/ganeti-storage/{export,file,shared}/ + + # This is handled by tmpfiles. You cannot use keepdir here as Ganeti refuses to have other files in it! + rmdir "${D}"/var/lib/ganeti || true + + dosym ${SERIES} "/usr/share/${PN}/default" + dosym ${SERIES} "/usr/$(get_libdir)/${PN}/default" + + python_fix_shebang "${ED}" "${D}"/usr/"$(get_libdir)"/${PN}/${SERIES} + + # Be opinionated, this is the paths that upstream suggests and uses as defaults in configure. + # ganeti-tmpfilesd will ensure they are created + touch "${D}"/etc/ganeti/file-storage-paths + echo /srv/ganeti/file-storage >>"${D}"/etc/ganeti/file-storage-paths + echo /srv/ganeti/shared-file-storage >>"${D}"/etc/ganeti/file-storage-paths +} + +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() { + # locale is used in some of the doc checks + export LC_ALL=C + PATH="${S}/scripts:${S}/src:${PATH}" \ + TMPDIR="/tmp" \ + LC_ALL=C \ + GANETI_MASTER="$(hostname -f)" \ + emake check +} diff --git a/app-emulation/ganeti/metadata.xml b/app-emulation/ganeti/metadata.xml new file mode 100644 index 000000000000..d37ba927d87a --- /dev/null +++ b/app-emulation/ganeti/metadata.xml @@ -0,0 +1,32 @@ + + + + + infra@gentoo.org + Gentoo Infrastructure Team + + + 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. + + + Enable DRBD support + Enable KVM support + Enable Linux Containers support + Enable the ganeti monitoring daemon + Enable restricted commands in the node daemon + Enable rados block device support via sys-cluster/ceph + Enable Xen support + Enable experimental patches. Warning! This will break RPC within major versions if the patches applied differ! + + -- cgit v1.2.3