diff --git a/3945.patch b/3945.patch new file mode 100644 index 0000000..e75c349 --- /dev/null +++ b/3945.patch @@ -0,0 +1,32 @@ +From 1d83bd29c253ba898ac35683258fec285d5a6529 Mon Sep 17 00:00:00 2001 +From: Orion Poplawski +Date: Sat, 4 Oct 2025 19:49:26 -0600 +Subject: [PATCH] Use systemctl is-active --quiet to check status of services + (fixes #3942) + +--- + changelog.d/3942.fixed | 1 + + cobbler/actions/check.py | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + create mode 100644 changelog.d/3942.fixed + +diff --git a/changelog.d/3942.fixed b/changelog.d/3942.fixed +new file mode 100644 +index 0000000000..444bdb800a +--- /dev/null ++++ b/changelog.d/3942.fixed +@@ -0,0 +1 @@ ++check: Use systemctl is-active --quiet to check the status of services +diff --git a/cobbler/actions/check.py b/cobbler/actions/check.py +index b79706aff1..5f6a3fa3bc 100644 +--- a/cobbler/actions/check.py ++++ b/cobbler/actions/check.py +@@ -142,7 +142,7 @@ def check_service(self, status, which, notes=""): + status.append("service %s is not running%s" % (which, notes)) + return + elif utils.is_systemd(): +- return_code = utils.subprocess_call("systemctl status %s > /dev/null 2>/dev/null" % which, ++ return_code = utils.subprocess_call("systemctl is-active --quiet %s > /dev/null 2>/dev/null" % which, + shell=True) + if return_code != 0: + status.append("service %s is not running%s" % (which, notes)) diff --git a/changelog b/changelog new file mode 100644 index 0000000..291772a --- /dev/null +++ b/changelog @@ -0,0 +1,354 @@ +* Thu Jan 16 2025 Fedora Release Engineering - 3.3.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Sun Jan 05 2025 Orion Poplawski - 3.3.7-2 +- Backport upstream patch for Python 3.13 support (rhbz#2335620) + +* Sun Nov 17 2024 Orion Poplawski - 3.3.7-1 +- Update to 3.3.7 (CVE-2024-47533) + +* Fri Sep 27 2024 Carl George - 3.3.6-2 +- Fix cheetah dependency rhbz#2314630 + +* Wed Jul 31 2024 Orion Poplawski - 3.3.6-1 +- Update to 3.3.6 + +* Thu Jul 25 2024 Miroslav Suchý - 3.3.5-3 +- convert license to SPDX + +* Wed Jul 17 2024 Fedora Release Engineering - 3.3.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jul 12 2024 Orion Poplawski - 3.3.5-1 +- Update to 3.3.5 + +* Fri Jun 07 2024 Python Maint - 3.3.4-5 +- Rebuilt for Python 3.13 + +* Fri Jun 07 2024 Python Maint - 3.3.4-4 +- Rebuilt for Python 3.13 + +* Sat Apr 27 2024 Orion Poplawski - 3.3.4-3 +- Fix service name in selinux post install script + +* Fri Apr 26 2024 Orion Poplawski - 3.3.4-2 +- Test for existence of web.ss before chowning it (bz#2276860) + +* Mon Feb 26 2024 Orion Poplawski - 3.3.4-1 +- Update to 3.3.4 +- Add local SELinux policy and allow cobbler to check service statuses, + run mkfs.fat, and check for reposync and yumdownloader (bz#2251220) +- Change owndership of web.ss to root (bz#2247653) + +* Wed Jan 24 2024 Fedora Release Engineering - 3.3.3-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 3.3.3-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 3.3.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Mon Jul 17 2023 Orion Poplawski - 3.3.3-6 +- Add patch to fix build with Sphinx 7 + +* Wed Jun 14 2023 Python Maint - 3.3.3-5 +- Rebuilt for Python 3.12 + +* Thu Jan 19 2023 Fedora Release Engineering - 3.3.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jul 20 2022 Fedora Release Engineering - 3.3.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 23 2022 Python Maint - 3.3.3-2 +- Rebuilt for Python 3.11 + +* Tue Jun 14 2022 Orion Poplawski - 3.3.3-1 +- Update to 3.3.3 + +* Wed May 04 2022 Orion Poplawski - 3.3.2-2 +- Drop setting cache_enabled no longer present in 3.3 + +* Sat Mar 12 2022 Orion Poplawski - 3.3.2-1 +- Update to 3.3.2 + +* Tue Mar 01 2022 Orion Poplawski - 3.3.1-1 +- Update to 3.3.1, removes web interface + +* Tue Mar 01 2022 Orion Poplawski - 3.2.2-9 +- Apply fixes for CVE-2021-45082/3 +- Remove BR on python3-coverage + +* Mon Jan 24 2022 Orion Poplawski - 3.2.2-8 +- Fix posttrans script + +* Wed Jan 19 2022 Fedora Release Engineering - 3.2.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Dec 23 2021 Orion Poplawski - 3.2.2-6 +- Fix path to settings.yaml in scriptlet + +* Thu Dec 09 2021 Orion Poplawski - 3.2.2-5 +- Remove defunct get-loaders command + +* Mon Nov 22 2021 Orion Poplawski - 3.2.2-4 +- Add new keys to settings.yaml on migration or if missing +- Save original settings to settings.rpmorig + +* Fri Oct 08 2021 Orion Poplawski - 3.2.2-3 +- Fix dependencies (bz#2010567) + +* Thu Sep 23 2021 Orion Poplawski - 3.2.2-2 +- Migrate settings to settings.yaml +- Migrate pre-cobbler 3 data if needed +- Fix autoinstall_templates -> templates + +* Thu Sep 23 2021 Orion Poplawski - 3.2.2-1 +- Update to 3.2.2 +- bz#2006840: CVE-2021-40323: Arbitrary file disclosure/Template Injection +- bz#2006897: CVE-2021-40324: Arbitrary file write via upload_log_data XMLRPC function +- bz#2006904: CVE-2021-40325: Authorization bypass allows modifying settings + +* Wed Sep 22 2021 Orion Poplawski - 3.2.1-1 +- Update to 3.2.1 + +* Wed Jul 21 2021 Fedora Release Engineering - 3.2.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 3.2.0-5 +- Rebuilt for Python 3.10 + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 3.2.0-4 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Tue Jan 26 2021 Fedora Release Engineering - 3.2.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sun Oct 25 2020 Orion Poplawski - 3.2.0-2 +- Give root RW permission to /var/lib/cobbler/web.ss +- Fix SELinux cobbler logging issue + +* Sat Oct 24 2020 Orion Poplawski - 3.2.0-1 +- Update to 3.2.0 + +* Thu Sep 17 2020 Orion Poplawski - 3.1.2-4 +- Add requires on python-distro and file + +* Mon Jul 27 2020 Fedora Release Engineering - 3.1.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jul 08 2020 Orion Poplawski - 3.1.2-2 +- Fix apache configuration + +* Fri May 29 2020 Orion Poplawski - 3.1.2-1 +- Update to 3.1.2 + +* Tue May 26 2020 Miro Hrončok - 3.1.1-4 +- Rebuilt for Python 3.9 + +* Fri Feb 21 2020 Orion Poplawski - 3.1.1-3 +- Add requires for python3-dns + +* Tue Jan 28 2020 Fedora Release Engineering - 3.1.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Sun Jan 12 2020 Orion Poplawski - 3.1.1-1 +- Update to 3.1.1 + +* Tue Oct 22 2019 Orion Poplawski - 3.0.1-4 +- Drop koan completely, including obsoletes. It is a separate package now. + +* Thu Oct 10 2019 Orion Poplawski - 3.0.1-3 +- Require /sbin/service + +* Tue Oct 8 2019 Orion Poplawski - 3.0.1-2 +- Fix requires (requests instead of urlgrabber) +- Fix BR for EL8 + +* Mon Sep 09 2019 Nicolas Chauvet - 3.0.1-1 +- Update to 3.0.1 + +* Fri Aug 30 2019 Nicolas Chauvet - 3.0.0-1 +- Update to 3.0.0 + +* Mon Aug 26 2019 Nicolas Chauvet - 2.8.5-0.1 +- Update to 2.8.5 - pre-release + +* Wed Jul 24 2019 Fedora Release Engineering - 2.8.4-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jan 31 2019 Fedora Release Engineering - 2.8.4-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Nov 26 2018 Orion Poplawski - 2.8.4-5 +- Fix empty man pages (BZ 1653415) + +* Mon Nov 26 2018 Orion Poplawski - 2.8.4-4 +- Revert bind_manage_ipmi feature that is broken on 2.8 + +* Sun Nov 25 2018 Orion Poplawski - 2.8.4-3 +- Use pathfix.py to fix python shebangs + +* Sun Nov 25 2018 Orion Poplawski - 2.8.4-2 +- Make koan require python2-ethtool (BZ 1638933) + +* Sat Nov 24 2018 Orion Poplawski - 2.8.4-1 +- Update to 2.8.4 (Fixes BZ 1613292, 1643860, 1614433, CVE-2018-1000226, CVE-2018-10931) + +* Thu Jul 12 2018 Fedora Release Engineering - 2.8.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed May 30 2018 Orion Poplawski - 2.8.3-3 +- koan requires urlgrabber + +* Mon May 28 2018 Nicolas Chauvet - 2.8.3-2 +- Restore mergeability with epel7 + +* Mon May 28 2018 Nicolas Chauvet - 2.8.3-1 +- Update to 2.8.3 - security bugfix + +* Wed Feb 21 2018 Orion Poplawski - 2.8.2-6 +- Really fix django requires for Fedora 28+ + +* Tue Feb 20 2018 Orion Poplawski - 2.8.2-5 +- Fix django requires for Fedora 28+ + +* Fri Feb 09 2018 Igor Gnatenko - 2.8.2-4 +- Escape macros in %%changelog + +* Wed Feb 07 2018 Fedora Release Engineering - 2.8.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Feb 06 2018 Iryna Shcherbina - 2.8.2-2 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Mon Sep 18 2017 Orion Poplawski - 2.8.2-1 +- Update to 2.8.2 + +* Wed Aug 02 2017 Fedora Release Engineering - 2.8.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.8.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jun 21 2017 Orion Poplawski - 2.8.1-3 +- Suppress logrotate output + +* Mon Jun 12 2017 Orion Poplawski - 2.8.1-2 +- Fix module loading + +* Wed May 24 2017 Orion Poplawski - 2.8.1-1 +- Update to 2.8.1 + +* Fri Feb 17 2017 Orion Poplawski - 2.8.0-6 +- Add patch to fix handling of multiple bridge interfaces + +* Fri Feb 10 2017 Fedora Release Engineering - 2.8.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Jan 27 2017 Orion Poplawski - 2.8.0-4 +- Fix named patch + +* Tue Jan 24 2017 Orion Poplawski - 2.8.0-3 +- Restart named-chroot service if used + +* Fri Jan 20 2017 Orion Poplawski - 2.8.0-2 +- Fix logrotate script for systemd (bug #1414617) + +* Thu Dec 1 2016 Orion Poplawski - 2.8.0-1 +- Update to 2.8.0 +- Restructure spec file + +* Thu Sep 1 2016 Orion Poplawski - 2.6.11-11.gitf78af86 +- Add patches to fix TEMPLATE_DIRS and use OrderedDict + +* Thu Aug 11 2016 Orion Poplawski - 2.6.11-10.gitf78af86 +- Force IPv4 connections to cobblerd from web proxy + +* Thu Jul 21 2016 Orion Poplawski - 2.6.11-9.gitf78af86 +- Suppress "virt-install --os-variant list" error messages + +* Thu Jul 21 2016 Orion Poplawski - 2.6.11-8.git5680bf8 +- Fix handling unknown os variants with osinfo-query + +* Tue Jul 19 2016 Fedora Release Engineering - 2.6.11-7.git95749a6 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed Jul 13 2016 Orion Poplawski - 2.6.11-6.git95749a6 +- Fix typo in koan/app.py + +* Wed Jul 13 2016 Orion Poplawski - 2.6.11-5.git13b035f +- Update to current git snapshot (bug #1276896) + +* Wed Feb 03 2016 Fedora Release Engineering - 2.6.11-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Feb 1 2016 Orion Poplawski - 2.6.11-3 +- Require dnf-plugins-core + +* Sun Jan 24 2016 Orion Poplawski - 2.6.11-2 +- Require dnf-core-plugins instead of yum-utils for repoquery on Fedora 23+ + +* Sun Jan 24 2016 Orion Poplawski - 2.6.11-1 +- Update to 2.6.11 +- Make cobbler arch specific to allow for arch specific requires + +* Thu Oct 1 2015 Orion Poplawski - 2.6.10-1 +- Update to 2.6.10 + +* Mon Jun 22 2015 Orion Poplawski - 2.6.9-1 +- Update to 2.6.9 + +* Wed Jun 17 2015 Fedora Release Engineering - 2.6.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 12 2015 Orion Poplawski - 2.6.8-2 +- Support django 1.8 in Fedora 22+ + +* Fri May 8 2015 Orion Poplawski - 2.6.8-1 +- Update to 2.6.8 +- Backport upstream patch to fix centos version detection (bug #1201879) + +* Tue Apr 28 2015 Orion Poplawski - 2.6.7-3 +- Add patch to fix virt-install support for F21+/EL7 (bug #1188424) + +* Mon Apr 27 2015 Orion Poplawski - 2.6.7-2 +- Create and own directories in tftp_dir + +* Wed Dec 31 2014 Orion Poplawski - 2.6.7-1 +- Update to 2.6.7 + +* Sun Oct 19 2014 Orion Poplawski - 2.6.6-1 +- Update to 2.6.6 + +* Fri Aug 15 2014 Orion Poplawski - 2.6.5-1 +- Update to 2.6.5 + +* Wed Aug 13 2014 Orion Poplawski - 2.6.4-2 +- Require Django >= 1.4 + +* Mon Aug 11 2014 Orion Poplawski - 2.6.4-1 +- Update to 2.6.4 + +* Fri Jul 18 2014 Orion Poplawski - 2.6.3-1 +- Update to 2.6.3 + +* Wed Jul 16 2014 Orion Poplawski - 2.6.2-1 +- Update to 2.6.2 +- Spec cleanup + +* Sat Jun 07 2014 Fedora Release Engineering - 2.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Fri May 23 2014 Orion Poplawski - 2.6.1-1 +- Update to 2.6.1 +- Drop koan patch applied upstream + +* Tue Apr 22 2014 Orion Poplawski - 2.6.0-2 +- Only require syslinux on x86 + +* Mon Apr 21 2014 Orion Poplawski - 2.6.0-1 +- Update to 2.6.0 diff --git a/cobbler-nocov.patch b/cobbler-nocov.patch new file mode 100644 index 0000000..c50edfd --- /dev/null +++ b/cobbler-nocov.patch @@ -0,0 +1,41 @@ +diff --git a/setup.py b/setup.py +index 59f7601..023d84b 100644 +--- a/setup.py ++++ b/setup.py +@@ -341,17 +341,9 @@ class test_command(Command): + + def run(self): + import pytest +- from coverage import Coverage +- +- cov = Coverage() +- cov.erase() +- cov.start() + + result = pytest.main() + +- cov.stop() +- cov.save() +- cov.html_report(directory="covhtml") + sys.exit(int(bool(len(result.failures) > 0 or len(result.errors) > 0))) + + +@@ -479,7 +471,6 @@ if __name__ == "__main__": + }, + license="GPLv2+", + setup_requires=[ +- "coverage", + "distro", + "setuptools", + "sphinx", +@@ -501,10 +492,7 @@ if __name__ == "__main__": + "lint": ["pyflakes", "pycodestyle", "pylint", "black", "mypy"], + "test": [ + "pytest>6", +- "pytest-cov", +- "codecov", + "pytest-mock", +- "pytest-benchmark", + ], + "docs": ["sphinx", "sphinx-rtd-theme", "sphinxcontrib-apidoc"], + # We require the current version to properly detect duplicate issues diff --git a/cobbler-python3.13.patch b/cobbler-python3.13.patch new file mode 100644 index 0000000..78847a4 --- /dev/null +++ b/cobbler-python3.13.patch @@ -0,0 +1,972 @@ +diff --git a/changelog.d/3842.fixed b/changelog.d/3842.fixed +new file mode 100644 +index 00000000..6c6d6313 +--- /dev/null ++++ b/changelog.d/3842.fixed +@@ -0,0 +1 @@ ++Fix compatibility with Python 3.13 +diff --git a/cobbler/actions/reposync.py b/cobbler/actions/reposync.py +index c0163350..ec5745fb 100644 +--- a/cobbler/actions/reposync.py ++++ b/cobbler/actions/reposync.py +@@ -23,9 +23,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + import logging + import os + import os.path +-import pipes +-import stat ++import shlex + import shutil ++import stat + from typing import Optional, Union + + from cobbler import utils +@@ -272,9 +272,9 @@ class RepoSync: + blended = utils.blender(self.api, False, repo) + flags = blended.get("createrepo_flags", "(ERROR: FLAGS)") + try: +- cmd = "createrepo %s %s %s" % (" ".join(mdoptions), flags, pipes.quote(dirname)) +- utils.subprocess_call(cmd) +- except: ++ cmd = ["createrepo"] + mdoptions + flags + [shlex.quote(dirname)] ++ utils.subprocess_call(cmd, shell=False) ++ except Exception: + utils.log_exc() + self.logger.error("createrepo failed.") + del fnames[:] # we're in the right place +@@ -302,8 +302,19 @@ class RepoSync: + dest_path = os.path.join(self.settings.webdir, "repo_mirror", repo.name) + + # FIXME: wrapper for subprocess that logs to logger +- cmd = ["wget", "-N", "-np", "-r", "-l", "inf", "-nd", "-P", pipes.quote(dest_path), pipes.quote(repo.mirror)] +- rc = utils.subprocess_call(cmd) ++ cmd = [ ++ "wget", ++ "-N", ++ "-np", ++ "-r", ++ "-l", ++ "inf", ++ "-nd", ++ "-P", ++ shlex.quote(dest_path), ++ shlex.quote(repo.mirror), ++ ] ++ return_value = utils.subprocess_call(cmd, shell=False) + + if rc != 0: + raise CX("cobbler reposync failed") +@@ -347,9 +358,14 @@ class RepoSync: + if flags == '': + flags = self.settings.reposync_rsync_flags + +- cmd = "rsync %s --delete-after %s --delete --exclude-from=/etc/cobbler/rsync.exclude %s %s" \ +- % (flags, spacer, pipes.quote(repo.mirror), pipes.quote(dest_path)) +- rc = utils.subprocess_call(cmd) ++ cmd = ["rsync"] + flags + ["--delete-after"] ++ cmd += spacer + [ ++ "--delete", ++ "--exclude-from=/etc/cobbler/rsync.exclude", ++ shlex.quote(repo.mirror), ++ shlex.quote(dest_path), ++ ] ++ return_code = utils.subprocess_call(cmd, shell=False) + + if rc != 0: + raise CX("cobbler reposync failed") +@@ -386,10 +402,11 @@ class RepoSync: + if not HAS_LIBREPO: + raise CX("no librepo found, please install python3-librepo") + +- if os.path.exists("/usr/bin/dnf"): +- cmd = "/usr/bin/dnf reposync" +- elif os.path.exists("/usr/bin/reposync"): +- cmd = "/usr/bin/reposync" ++ if os.path.exists("/usr/bin/reposync"): ++ cmd = ["/usr/bin/reposync"] ++ # DNF5 does not have a reposync subcommand ++ elif os.path.exists("/usr/bin/dnf"): ++ cmd = ["/usr/bin/dnf", "reposync"] + else: + # Warn about not having yum-utils. We don't want to require it in the package because Fedora 22+ has moved + # to dnf. +@@ -451,6 +468,11 @@ class RepoSync: + # Counter-intuitive, but we want the newish kernels too + arch = "i686" + ++ cmd = self.reposync_cmd() ++ cmd += self.rflags + [ ++ f"--repo={shlex.quote(rest)}", ++ f"--download-path={shlex.quote(repos_path)}", ++ ] + if arch != "none": + cmd = "%s -a %s" % (cmd, arch) + +@@ -544,9 +566,11 @@ class RepoSync: + + if not has_rpm_list: + # If we have not requested only certain RPMs, use reposync +- cmd = "%s %s --config=%s --repoid=%s -p %s" \ +- % (cmd, self.rflags, temp_file, pipes.quote(repo.name), +- pipes.quote(repos_path)) ++ cmd += self.rflags + [ ++ f"--config={temp_file}", ++ f"--repoid={shlex.quote(repo.name)}", ++ f"--download-path={shlex.quote(repos_path)}", ++ ] + if arch != "none": + cmd = "%s -a %s" % (cmd, arch) + +@@ -557,14 +581,14 @@ class RepoSync: + + use_source = "" + if arch == "src": +- use_source = "--source" +- +- # Older yumdownloader sometimes explodes on --resolvedeps if this happens to you, upgrade yum & yum-utils +- extra_flags = self.settings.yumdownloader_flags +- cmd = "/usr/bin/dnf download" +- cmd = "%s %s %s --disablerepo=* --enablerepo=%s -c %s --destdir=%s %s" \ +- % (cmd, extra_flags, use_source, pipes.quote(repo.name), temp_file, pipes.quote(dest_path), +- " ".join(repo.rpm_list)) ++ cmd.append("--source") ++ cmd += [ ++ "--disablerepo=*", ++ f"--enablerepo={shlex.quote(repo.name)}", ++ f"-c={temp_file}", ++ f"--destdir={shlex.quote(dest_path)}", ++ ] ++ cmd += repo.rpm_list + + # Now regardless of whether we're doing yumdownloader or reposync or whether the repo was http://, ftp://, or + # rhn://, execute all queued commands here. Any failure at any point stops the operation. +@@ -669,17 +693,21 @@ class RepoSync: + dists = ",".join(repo.apt_dists) + components = ",".join(repo.apt_components) + +- mirror_data = "--method=%s --host=%s --root=%s --dist=%s --section=%s" \ +- % (pipes.quote(method), pipes.quote(host), pipes.quote(mirror), pipes.quote(dists), +- pipes.quote(components)) ++ mirror_data = [ ++ f"--method={shlex.quote(method)}", ++ f"--host={shlex.quote(host)}", ++ f"--root={shlex.quote(mirror)}", ++ f"--dist={shlex.quote(dists)}", ++ f"--section={shlex.quote(components)}", ++ ] + + rflags = "--nocleanup" + for x in repo.yumopts: + if repo.yumopts[x]: + rflags += " %s=%s" % (x, repo.yumopts[x]) + else: +- rflags += " %s" % x +- cmd = "%s %s %s %s" % (mirror_program, rflags, mirror_data, pipes.quote(dest_path)) ++ rflags.append(repo_yumoption) ++ cmd = [mirror_program] + rflags + mirror_data + [shlex.quote(dest_path)] + if repo.arch == RepoArchs.SRC: + cmd = "%s --source" % cmd + else: +diff --git a/tests/actions/reposync_test.py b/tests/actions/reposync_test.py +index 0bee772c..ee8d1549 100644 +--- a/tests/actions/reposync_test.py ++++ b/tests/actions/reposync_test.py +@@ -1,251 +1,592 @@ ++""" ++Tests that validate the functionality of the module that is responsible for repository synchronization. ++""" ++ + import os +-import glob ++from pathlib import Path ++from typing import TYPE_CHECKING, Any, Dict, List, Union + + import pytest + +-from cobbler import enums ++from cobbler import cexceptions, enums ++from cobbler.actions import reposync + from cobbler.api import CobblerAPI +-from cobbler.actions.reposync import RepoSync + from cobbler.items.repo import Repo +-from cobbler import cexceptions +-from tests.conftest import does_not_raise + ++from tests.conftest import does_not_raise + +-@pytest.fixture(scope="class") +-def api(): +- return CobblerAPI() ++if TYPE_CHECKING: ++ from pytest_mock import MockerFixture + + +-@pytest.fixture(scope="class") +-def reposync(api): +- test_reposync = RepoSync(api, tries=2, nofail=False) ++@pytest.fixture(name="reposync_object", scope="function") ++def fixture_reposync_object( ++ mocker: "MockerFixture", cobbler_api: CobblerAPI ++) -> reposync.RepoSync: ++ settings_mock = mocker.MagicMock() ++ settings_mock.webdir = "/srv/www/cobbler" ++ settings_mock.server = "localhost" ++ settings_mock.http_port = 80 ++ settings_mock.proxy_url_ext = "" ++ settings_mock.yumdownloader_flags = "--testflag" ++ settings_mock.reposync_rsync_flags = "--testflag" ++ settings_mock.reposync_flags = "--testflag" ++ mocker.patch.object(cobbler_api, "settings", return_value=settings_mock) ++ test_reposync = reposync.RepoSync(cobbler_api, tries=2, nofail=False) + return test_reposync + + +-@pytest.fixture +-def repo(api): ++@pytest.fixture(name="repo") ++def fixture_repo(cobbler_api: CobblerAPI) -> Repo: + """ + Creates a Repository "testrepo0" with a keep_updated=True and mirror_locally=True". + """ +- test_repo = Repo(api) ++ test_repo = Repo(cobbler_api) + test_repo.name = "testrepo0" + test_repo.mirror_locally = True + test_repo.keep_updated = True +- api.add_repo(test_repo) + return test_repo + + + @pytest.fixture +-def remove_repo(api): ++def remove_repo(cobbler_api: CobblerAPI): + """ + Removes the Repository "testrepo0" which can be created with repo. + """ + yield +- test_repo = api.find_repo("testrepo0") +- if test_repo is not None: +- api.remove_repo(test_repo.name) ++ test_repo = cobbler_api.find_repo("testrepo0") ++ if test_repo is not None and not isinstance(test_repo, list): ++ cobbler_api.remove_repo(test_repo.name) + + +-class TestRepoSync: +- @pytest.mark.usefixtures("remove_repo") +- @pytest.mark.parametrize( +- "input_mirror_type,input_mirror,expected_exception", +- [ +- ( +- enums.MirrorType.BASEURL, +- "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os", +- does_not_raise() +- ), +- ( +- enums.MirrorType.MIRRORLIST, +- "https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64", +- does_not_raise() +- ), +- ( +- enums.MirrorType.METALINK, +- "https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64", +- does_not_raise() +- ), +- ( +- enums.MirrorType.BASEURL, +- "http://www.example.com/path/to/some/repo", +- pytest.raises(cexceptions.CX) +- ), ++@pytest.fixture(scope="function", autouse=True) ++def reset_librepo(): ++ has_librepo = reposync.HAS_LIBREPO ++ yield ++ reposync.HAS_LIBREPO = has_librepo ++ ++ ++def test_repo_walker(mocker: "MockerFixture", tmp_path: Path): ++ # Arrange ++ def test_fun(arg: Any, top: Any, names: Any): ++ pass ++ ++ subdir1 = tmp_path / "sub1" ++ subdir2 = tmp_path / "sub2" ++ subdir1.mkdir() ++ subdir2.mkdir() ++ spy = mocker.Mock(wraps=test_fun) ++ ++ # Act ++ reposync.repo_walker(tmp_path, spy, None) # type: ignore ++ ++ # Assert ++ assert spy.mock_calls == [ ++ # settings.yaml is here because of our autouse fixture that we use to restore the settings ++ mocker.call(None, tmp_path, ["settings.yaml", "sub1", "sub2"]), ++ mocker.call(None, str(subdir1), []), ++ mocker.call(None, str(subdir2), []), ++ ] ++ ++ ++@pytest.mark.parametrize( ++ "input_has_librepo,input_path_exists_side_effect,expected_exception,expected_result", ++ [ ++ (True, [False, True], does_not_raise(), ["/usr/bin/dnf", "reposync"]), ++ (True, [True, False], does_not_raise(), ["/usr/bin/reposync"]), ++ (True, [False, False], pytest.raises(cexceptions.CX), ""), ++ (False, [False, True], pytest.raises(cexceptions.CX), ""), ++ ], ++) ++def test_reposync_cmd( ++ mocker: "MockerFixture", ++ reposync_object: reposync.RepoSync, ++ input_has_librepo: bool, ++ input_path_exists_side_effect: List[bool], ++ expected_exception: Any, ++ expected_result: Union[List[str], str], ++): ++ # Arrange ++ mocker.patch("os.path.exists", side_effect=input_path_exists_side_effect) ++ reposync.HAS_LIBREPO = input_has_librepo ++ ++ # Act ++ with expected_exception: ++ result = reposync_object.reposync_cmd() ++ ++ # Assert ++ assert result == expected_result ++ ++ ++def test_run(mocker: "MockerFixture", reposync_object: reposync.RepoSync, repo: Repo): ++ # Arrange ++ env_vars: Dict[str, Any] = {} ++ mocker.patch("os.makedirs") ++ mocker.patch("os.path.isdir", return_value=True) ++ mocker.patch( ++ "os.path.join", ++ side_effect=[ ++ "/srv/www/cobbler/repo_mirror", ++ "/srv/www/cobbler/repo_mirror/%s" % repo.name, + ], + ) +- def test_reposync_yum( +- self, +- input_mirror_type, +- input_mirror, +- expected_exception, +- api, +- repo, +- reposync +- ): +- # Arrange +- test_repo = repo +- test_repo.breed = enums.RepoBreeds.YUM +- test_repo.mirror = input_mirror +- test_repo.mirror_type = input_mirror_type +- test_repo.rpm_list = "fedora-gpg-keys" +- test_settings = api.settings() +- repo_path = os.path.join(test_settings.webdir, "repo_mirror", test_repo.name) +- +- # Act & Assert +- with expected_exception: +- reposync.run(test_repo.name) +- result = os.path.exists(repo_path) +- if test_repo.rpm_list and test_repo.rpm_list != []: +- for rpm in test_repo.rpm_list: +- assert glob.glob(os.path.join(repo_path, "**", rpm) + "*.rpm", recursive=True) != [] +- assert result +- # Test that re-downloading the metadata in .origin/repodata will not result in an error +- reposync.run(test_repo.name) +- +- @pytest.mark.usefixtures("remove_repo") +- @pytest.mark.parametrize( +- "input_mirror_type,input_mirror,input_arch,input_rpm_list,expected_exception", ++ mocker.patch("os.environ", return_value=env_vars) ++ mocker.patch.object(reposync_object, "repos", return_value=[repo]) ++ mocker.patch.object(reposync_object, "sync") ++ mocker.patch.object(reposync_object, "update_permissions") ++ reposync_object.repos = [repo] # type: ignore ++ ++ # Act ++ reposync_object.run() ++ ++ # Assert ++ # This has to be 0 since all env vars need to be removed after reposync has run. ++ assert len(env_vars) == 0 ++ ++ ++def test_gen_urlgrab_ssl_opts(reposync_object: reposync.RepoSync): ++ # Arrange ++ input_dict: Dict[str, Any] = {} ++ ++ # Act ++ result = reposync_object.gen_urlgrab_ssl_opts(input_dict) ++ ++ # Assert ++ assert isinstance(result, tuple) ++ assert len(result) == 2 ++ # The data of the first element is kind of flexible let's skip asserting it for now ++ assert isinstance(result[1], bool) ++ ++ ++@pytest.mark.usefixtures("remove_repo") ++@pytest.mark.parametrize( ++ "input_mirror_type,input_mirror,expected_exception", ++ [ ++ ( ++ enums.MirrorType.BASEURL, ++ "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os", ++ does_not_raise(), ++ ), ++ ( ++ enums.MirrorType.MIRRORLIST, ++ "https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64", ++ does_not_raise(), ++ ), ++ ( ++ enums.MirrorType.METALINK, ++ "https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64", ++ does_not_raise(), ++ ), ++ ], ++) ++def test_reposync_yum( ++ mocker: "MockerFixture", ++ input_mirror_type: enums.MirrorType, ++ input_mirror: str, ++ expected_exception: Any, ++ cobbler_api: CobblerAPI, ++ repo: Repo, ++ reposync_object: reposync.RepoSync, ++): ++ # Arrange ++ test_repo = repo ++ test_repo.breed = enums.RepoBreeds.YUM ++ test_repo.mirror = input_mirror ++ test_repo.mirror_type = input_mirror_type ++ test_repo.rpm_list = "fedora-gpg-keys" ++ test_settings = cobbler_api.settings() ++ repo_path = os.path.join(test_settings.webdir, "repo_mirror", test_repo.name) ++ mocked_subprocess = mocker.patch( ++ "cobbler.utils.subprocess_call", autospec=True, return_value=0 ++ ) ++ mocker.patch.object( ++ reposync_object, "create_local_file", return_value="/create/local/file" ++ ) ++ mocker.patch.object( ++ reposync_object, "reposync_cmd", return_value=["/my/fake/dnf", "reposync"] ++ ) ++ mocker.patch.object(reposync_object, "rflags", return_value="--fake-r-flakg") ++ mocker.patch.object( ++ reposync_object, ++ "gen_urlgrab_ssl_opts", ++ return_value=(("TODO", "TODO", "TODO"), False), ++ ) ++ mocker.patch("os.path.exists", return_value=True) ++ mocker.patch("shutil.rmtree") ++ mocker.patch("os.makedirs") ++ mocked_repo_walker = mocker.patch("cobbler.actions.reposync.repo_walker") ++ handle_mock = mocker.MagicMock() ++ result_mock = mocker.MagicMock() ++ mocker.patch("librepo.Handle", return_value=handle_mock) ++ mocker.patch("librepo.Result", return_value=result_mock) ++ ++ # Act & Assert ++ with expected_exception: ++ reposync_object.yum_sync(repo) ++ ++ mocked_subprocess.assert_called_with( ++ [ ++ "/usr/bin/dnf", ++ "download", ++ "--testflag", ++ "--disablerepo=*", ++ f"--enablerepo={repo.name}", ++ "-c=/create/local/file", ++ f"--destdir={repo_path}", ++ "fedora-gpg-keys", ++ ], ++ shell=False, ++ ) ++ handle_mock.perform.assert_called_with(result_mock) ++ assert mocked_repo_walker.call_count == 1 ++ ++ ++@pytest.mark.usefixtures("remove_repo") ++@pytest.mark.parametrize( ++ "input_mirror_type,input_mirror,input_arch,input_rpm_list,expected_exception", ++ [ ++ ( ++ enums.MirrorType.BASEURL, ++ "http://ftp.debian.org/debian", ++ enums.RepoArchs.X86_64, ++ "", ++ does_not_raise(), ++ ), ++ ( ++ enums.MirrorType.MIRRORLIST, ++ "http://ftp.debian.org/debian", ++ enums.RepoArchs.X86_64, ++ "", ++ pytest.raises(cexceptions.CX), ++ ), ++ ( ++ enums.MirrorType.METALINK, ++ "http://ftp.debian.org/debian", ++ enums.RepoArchs.X86_64, ++ "", ++ pytest.raises(cexceptions.CX), ++ ), ++ ( ++ enums.MirrorType.BASEURL, ++ "http://ftp.debian.org/debian", ++ enums.RepoArchs.NONE, ++ "", ++ pytest.raises(cexceptions.CX), ++ ), ++ ( ++ enums.MirrorType.BASEURL, ++ "http://ftp.debian.org/debian", ++ enums.RepoArchs.X86_64, ++ "dpkg", ++ pytest.raises(cexceptions.CX), ++ ), ++ ], ++) ++def test_reposync_apt( ++ mocker: "MockerFixture", ++ input_mirror_type: enums.MirrorType, ++ input_mirror: str, ++ input_arch: enums.RepoArchs, ++ input_rpm_list: str, ++ expected_exception: Any, ++ cobbler_api: CobblerAPI, ++ repo: Repo, ++ reposync_object: reposync.RepoSync, ++): ++ # Arrange ++ test_repo = repo ++ test_repo.breed = enums.RepoBreeds.APT ++ test_repo.arch = input_arch ++ test_repo.apt_components = "main" ++ test_repo.apt_dists = "stable" ++ test_repo.mirror = input_mirror ++ test_repo.mirror_type = input_mirror_type ++ test_repo.rpm_list = input_rpm_list ++ test_settings = cobbler_api.settings() ++ repo_path = os.path.join(test_settings.webdir, "repo_mirror", test_repo.name) ++ mocked_subprocess = mocker.patch( ++ "cobbler.utils.subprocess_call", autospec=True, return_value=0 ++ ) ++ mocker.patch("os.path.exists", return_value=True) ++ ++ # Act ++ with expected_exception: ++ reposync_object.apt_sync(repo) ++ ++ # Assert ++ mocked_subprocess.assert_called_with( ++ [ ++ "/usr/bin/debmirror", ++ "--nocleanup", ++ "--method=http", ++ "--host=ftp.debian.org", ++ "--root=/debian", ++ "--dist=stable", ++ "--section=main", ++ repo_path, ++ "--nosource", ++ "-a=amd64", ++ ], ++ shell=False, ++ ) ++ ++ ++@pytest.mark.usefixtures("remove_repo") ++@pytest.mark.parametrize( ++ "input_mirror_type,input_mirror,expected_exception", ++ [ ++ ( ++ enums.MirrorType.BASEURL, ++ "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/2", ++ does_not_raise(), ++ ), ++ ( ++ enums.MirrorType.MIRRORLIST, ++ "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/2", ++ pytest.raises(cexceptions.CX), ++ ), ++ ( ++ enums.MirrorType.METALINK, ++ "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/2", ++ pytest.raises(cexceptions.CX), ++ ), ++ ], ++) ++def test_reposync_wget( ++ mocker: "MockerFixture", ++ input_mirror_type: enums.MirrorType, ++ input_mirror: str, ++ expected_exception: Any, ++ cobbler_api: CobblerAPI, ++ repo: Repo, ++ reposync_object: reposync.RepoSync, ++): ++ # Arrange ++ test_repo = repo ++ test_repo.breed = enums.RepoBreeds.WGET ++ test_repo.mirror = input_mirror ++ test_repo.mirror_type = input_mirror_type ++ repo_path = os.path.join( ++ reposync_object.settings.webdir, "repo_mirror", test_repo.name ++ ) ++ mocked_subprocess = mocker.patch( ++ "cobbler.utils.subprocess_call", autospec=True, return_value=0 ++ ) ++ mocker.patch("cobbler.actions.reposync.repo_walker") ++ mocker.patch.object(reposync_object, "create_local_file") ++ ++ # Act ++ with expected_exception: ++ reposync_object.wget_sync(test_repo) ++ ++ # Assert ++ mocked_subprocess.assert_called_with( ++ [ ++ "wget", ++ "-N", ++ "-np", ++ "-r", ++ "-l", ++ "inf", ++ "-nd", ++ "-P", ++ repo_path, ++ input_mirror, ++ ], ++ shell=False, ++ ) ++ ++ ++def test_reposync_rhn( ++ mocker: "MockerFixture", reposync_object: reposync.RepoSync, repo: Repo ++): ++ # Arrange ++ repo.mirror = "rhn://%s" % repo.name ++ mocked_subprocess = mocker.patch( ++ "cobbler.utils.subprocess_call", autospec=True, return_value=0 ++ ) ++ mocker.patch("os.path.isdir", return_value=True) ++ mocker.patch("os.makedirs") ++ mocker.patch("cobbler.actions.reposync.repo_walker") ++ mocker.patch.object(reposync_object, "create_local_file") ++ mocker.patch.object( ++ reposync_object, "reposync_cmd", return_value=["/my/fake/reposync"] ++ ) ++ ++ # Act ++ reposync_object.rhn_sync(repo) ++ ++ # Assert ++ # TODO: Check this more and document how its actually working ++ mocked_subprocess.assert_called_with( + [ +- ( +- enums.MirrorType.BASEURL, +- "http://ftp.debian.org/debian", +- enums.RepoArchs.X86_64, +- "", +- does_not_raise() +- ), +- ( +- enums.MirrorType.MIRRORLIST, +- "http://ftp.debian.org/debian", +- enums.RepoArchs.X86_64, +- "", +- pytest.raises(cexceptions.CX) +- ), +- ( +- enums.MirrorType.METALINK, +- "http://ftp.debian.org/debian", +- enums.RepoArchs.X86_64, +- "", +- pytest.raises(cexceptions.CX) +- ), +- ( +- enums.MirrorType.BASEURL, +- "http://www.example.com/path/to/some/repo", +- enums.RepoArchs.X86_64, +- "", +- pytest.raises(cexceptions.CX) +- ), +- ( +- enums.MirrorType.BASEURL, +- "http://ftp.debian.org/debian", +- enums.RepoArchs.NONE, +- "", +- pytest.raises(cexceptions.CX) +- ), +- ( +- enums.MirrorType.BASEURL, +- "http://ftp.debian.org/debian", +- enums.RepoArchs.X86_64, +- "dpkg", +- pytest.raises(cexceptions.CX) +- ), ++ "/my/fake/reposync", ++ "--testflag", ++ "--repo=testrepo0", ++ "--download-path=/srv/www/cobbler/repo_mirror", + ], ++ shell=False, + ) +- def test_reposync_apt( +- self, +- input_mirror_type, +- input_mirror, +- input_arch, +- input_rpm_list, +- expected_exception, +- api, +- repo, +- reposync +- ): +- # Arrange +- test_repo = repo +- test_repo.breed = enums.RepoBreeds.APT +- test_repo.arch = input_arch +- test_repo.apt_components = "main" +- test_repo.apt_dists = "stable" +- test_repo.mirror = input_mirror +- test_repo.mirror_type = input_mirror_type +- test_repo.rpm_list = input_rpm_list +- test_repo.yumopts = "--exclude=.* --include=dpkg.* --no-check-gpg --rsync-extra=none" +- test_settings = api.settings() +- repo_path = os.path.join(test_settings.webdir, "repo_mirror", test_repo.name) +- +- # Act & Assert +- with expected_exception: +- reposync.run(test_repo.name) +- result = os.path.exists(repo_path) +- for rpm in ["dpkg"]: +- assert glob.glob(os.path.join(repo_path, "**", "dpkg") + "*", recursive=True) != [] +- assert result +- +- @pytest.mark.skip("To flaky and thus not reliable. Needs to be mocked to be of use.") +- @pytest.mark.usefixtures("remove_repo") +- @pytest.mark.parametrize( +- "input_mirror_type,input_mirror,expected_exception", ++ ++ ++def test_reposync_rsync( ++ mocker: "MockerFixture", reposync_object: reposync.RepoSync, repo: Repo ++): ++ # Arrange ++ mocked_subprocess = mocker.patch("cobbler.utils.subprocess_call", return_value=0) ++ mocker.patch("cobbler.actions.reposync.repo_walker") ++ mocker.patch.object(reposync_object, "create_local_file") ++ repo_path = os.path.join(reposync_object.settings.webdir, "repo_mirror", repo.name) ++ ++ # Act ++ reposync_object.rsync_sync(repo) ++ ++ # Assert ++ mocked_subprocess.assert_called_with( + [ +- ( +- enums.MirrorType.BASEURL, +- "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/2", +- does_not_raise() +- ), +- ( +- enums.MirrorType.MIRRORLIST, +- "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/2", +- pytest.raises(cexceptions.CX) +- ), +- ( +- enums.MirrorType.METALINK, +- "http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/2", +- pytest.raises(cexceptions.CX) +- ), +- ( +- enums.MirrorType.BASEURL, +- "http://www.example.com/path/to/some/repo", +- pytest.raises(cexceptions.CX) +- ), ++ "rsync", ++ "--testflag", ++ "--delete-after", ++ "-e ssh", ++ "--delete", ++ "--exclude-from=/etc/cobbler/rsync.exclude", ++ "/", ++ repo_path, + ], ++ shell=False, + ) +- def test_reposync_wget( +- self, +- input_mirror_type, +- input_mirror, +- expected_exception, +- api, +- repo, +- reposync +- ): +- # Arrange +- test_repo = repo +- test_repo.breed = enums.RepoBreeds.WGET +- test_repo.mirror = input_mirror +- test_repo.mirror_type = input_mirror_type +- test_settings = api.settings() +- repo_path = os.path.join(test_settings.webdir, "repo_mirror", test_repo.name) +- +- # Act & Assert +- with expected_exception: +- reposync.run(test_repo.name) +- result = os.path.exists(repo_path) +- for rpm in ["rpm"]: +- assert glob.glob(os.path.join(repo_path, "**", "2") + "*", recursive=True) != [] +- assert result +- +- +-@pytest.mark.skip("TODO") +-def test_reposync_rhn(): ++ ++ ++def test_createrepo_walker( ++ mocker: "MockerFixture", reposync_object: reposync.RepoSync, repo: Repo ++): + # Arrange ++ input_repo = repo ++ input_repo.breed = enums.RepoBreeds.RSYNC ++ input_dirname = "" ++ input_fnames = [] ++ expected_call = ["createrepo", "--testflags", f"'{input_dirname}'"] ++ mocked_subprocess = mocker.patch( ++ "cobbler.utils.subprocess_call", autospec=True, return_value=0 ++ ) ++ mocker.patch( ++ "cobbler.utils.blender", ++ autospec=True, ++ return_value={"createrepo_flags": "--testflags"}, ++ ) ++ mocker.patch("cobbler.utils.remove_yum_olddata") ++ mocker.patch("cobbler.utils.subprocess_get", return_value="5") ++ mocker.patch("cobbler.utils.get_family", return_value="TODO") ++ mocker.patch("os.path.exists", return_value=True) ++ mocker.patch("os.path.isfile", return_value=True) ++ mocker.patch.object(reposync_object, "librepo_getinfo", return_value={}) ++ + # Act ++ reposync_object.createrepo_walker(input_repo, input_dirname, input_fnames) ++ + # Assert +- assert False ++ # TODO: Improve coverage over different cases in method ++ mocked_subprocess.assert_called_with(expected_call, shell=False) + + +-@pytest.mark.skip("TODO") +-def test_reposync_rsync(): ++@pytest.mark.parametrize( ++ "input_repotype,expected_exception", ++ [ ++ (enums.RepoBreeds.YUM, does_not_raise()), ++ (enums.RepoBreeds.RHN, does_not_raise()), ++ (enums.RepoBreeds.APT, does_not_raise()), ++ (enums.RepoBreeds.RSYNC, does_not_raise()), ++ (enums.RepoBreeds.WGET, does_not_raise()), ++ (enums.RepoBreeds.NONE, pytest.raises(cexceptions.CX)), ++ ], ++) ++def test_sync( ++ mocker: "MockerFixture", ++ cobbler_api: CobblerAPI, ++ reposync_object: reposync.RepoSync, ++ input_repotype: enums.RepoBreeds, ++ expected_exception: Any, ++): + # Arrange ++ test_repo = Repo(cobbler_api) ++ test_repo.breed = input_repotype ++ rhn_sync_mock = mocker.patch.object(reposync_object, "rhn_sync") ++ yum_sync_mock = mocker.patch.object(reposync_object, "yum_sync") ++ apt_sync_mock = mocker.patch.object(reposync_object, "apt_sync") ++ rsync_sync_mock = mocker.patch.object(reposync_object, "rsync_sync") ++ wget_sync_mock = mocker.patch.object(reposync_object, "wget_sync") ++ + # Act ++ with expected_exception: ++ reposync_object.sync(test_repo) ++ ++ # Assert ++ call_count = sum( ++ ( ++ rhn_sync_mock.call_count, ++ yum_sync_mock.call_count, ++ apt_sync_mock.call_count, ++ rsync_sync_mock.call_count, ++ wget_sync_mock.call_count, ++ ) ++ ) ++ assert call_count == 1 ++ ++ ++def test_librepo_getinfo( ++ mocker: "MockerFixture", reposync_object: reposync.RepoSync, tmp_path: Path ++): ++ # Arrange ++ handle_mock = mocker.MagicMock() ++ result_mock = mocker.MagicMock() ++ mocker.patch("librepo.Handle", return_value=handle_mock) ++ mocker.patch("librepo.Result", return_value=result_mock) ++ ++ # Act ++ reposync_object.librepo_getinfo(str(tmp_path)) ++ ++ # Assert ++ handle_mock.perform.assert_called_with(result_mock) ++ result_mock.getinfo.assert_called() ++ ++ ++def test_create_local_file( ++ mocker: "MockerFixture", reposync_object: reposync.RepoSync, repo: Repo ++): ++ # Arrange ++ mocker.patch("cobbler.utils.filesystem_helpers.mkdir", autospec=True) ++ mock_open = mocker.patch("builtins.open", mocker.mock_open()) ++ input_dest_path = "" ++ input_repo = repo ++ input_output = True ++ ++ # Act ++ reposync_object.create_local_file(input_dest_path, input_repo, output=input_output) ++ ++ # Assert ++ # TODO: Extend checks ++ assert mock_open.call_count == 1 ++ assert mock_open.mock_calls[0] == mocker.call("config.repo", "w", encoding="UTF-8") ++ mock_open_handle = mock_open() ++ assert mock_open_handle.write.mock_calls[0] == mocker.call("[testrepo0]\n") ++ assert mock_open_handle.write.mock_calls[1] == mocker.call("name=testrepo0\n") ++ ++ ++def test_update_permissions( ++ mocker: "MockerFixture", reposync_object: reposync.RepoSync ++): ++ # Arrange ++ mocked_subprocess = mocker.patch( ++ "cobbler.utils.subprocess_call", autospec=True, return_value=0 ++ ) ++ path_to_update = "/my/fake/path" ++ expected_calls = [ ++ mocker.call(["chown", "-R", "root:www", path_to_update], shell=False), ++ mocker.call(["chmod", "-R", "755", path_to_update], shell=False), ++ ] ++ ++ # Act ++ reposync_object.update_permissions(path_to_update) ++ + # Assert +- assert False ++ assert mocked_subprocess.mock_calls == expected_calls diff --git a/cobbler-reposync.patch b/cobbler-reposync.patch new file mode 100644 index 0000000..4a2fff1 --- /dev/null +++ b/cobbler-reposync.patch @@ -0,0 +1,18 @@ +diff -up cobbler-3.3.7/cobbler/cli.py.reposync cobbler-3.3.7/cobbler/cli.py +--- cobbler-3.3.7/cobbler/cli.py.reposync 2024-11-17 14:02:02.000000000 -0700 ++++ cobbler-3.3.7/cobbler/cli.py 2025-10-04 19:21:03.379260526 -0600 +@@ -1184,7 +1184,13 @@ class CobblerCLI: + task_id = self.start_task("import", options) + elif action_name == "reposync": + self.parser.add_option("--only", dest="only", help="update only this repository name") +- self.parser.add_option("--tries", dest="tries", help="try each repo this many times", default=1) ++ self.parser.add_option( ++ "--tries", ++ dest="tries", ++ help="try each repo this many times", ++ default=1, ++ type="int", ++ ) + self.parser.add_option("--no-fail", dest="nofail", help="don't stop reposyncing if a failure occurs", + action="store_true") + (options, args) = self.parser.parse_args(self.args) diff --git a/cobbler.fc b/cobbler.fc new file mode 100644 index 0000000..568bf88 --- /dev/null +++ b/cobbler.fc @@ -0,0 +1,28 @@ +/etc/cobbler(/.*)? gen_context(system_u:object_r:cobbler_etc_t,s0) + +/etc/rc\.d/init\.d/cobblerd -- gen_context(system_u:object_r:cobblerd_initrc_exec_t,s0) + +/usr/bin/cobblerd -- gen_context(system_u:object_r:cobblerd_exec_t,s0) + +/usr/lib/systemd/system/cobblerd.* -- gen_context(system_u:object_r:cobblerd_unit_file_t,s0) + +/var/cache/cobbler(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/cobbler(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) + +/var/lib/tftpboot/aarch64(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/boot(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/etc(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/grub(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/images(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/images2(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/memdisk -- gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/menu\.c32 -- gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/ppc(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/pxelinux\.0 -- gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/pxelinux\.cfg(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/s390x(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) +/var/lib/tftpboot/yaboot -- gen_context(system_u:object_r:cobbler_var_lib_t,s0) + +/var/log/cobbler(/.*)? gen_context(system_u:object_r:cobbler_var_log_t,s0) + +/var/www/cobbler(/.*)? gen_context(system_u:object_r:cobbler_var_lib_t,s0) diff --git a/cobbler.if b/cobbler.if new file mode 100644 index 0000000..4054eab --- /dev/null +++ b/cobbler.if @@ -0,0 +1,251 @@ +## Cobbler installation server. + +######################################## +## +## Execute a domain transition to run cobblerd. +## +## +## +## Domain allowed to transition. +## +## +# +interface(`cobblerd_domtrans',` + gen_require(` + type cobblerd_t, cobblerd_exec_t; + ') + + corecmd_search_bin($1) + domtrans_pattern($1, cobblerd_exec_t, cobblerd_t) +') + +######################################## +## +## Execute cobblerd server in the cobblerd domain. +## +## +## +## Domain allowed to transition. +## +## +# +interface(`cobblerd_systemctl',` + gen_require(` + type named_unit_file_t; + type named_t; + ') + + systemd_exec_systemctl($1) + init_reload_services($1) + allow $1 named_unit_file_t:file read_file_perms; + allow $1 named_unit_file_t:service manage_service_perms; + + ps_process_pattern($1, named_t) +') + +######################################## +## +## Execute cobblerd init scripts in +## the init script domain. +## +## +## +## Domain allowed to transition. +## +## +# +interface(`cobblerd_initrc_domtrans',` + gen_require(` + type cobblerd_initrc_exec_t; + ') + + init_labeled_script_domtrans($1, cobblerd_initrc_exec_t) +') + + + +######################################## +## +## Read cobbler configuration dirs. +## +## +## +## Domain allowed access. +## +## +# +interface(`cobbler_list_config',` + gen_require(` + type cobbler_etc_t; + ') + + list_dirs_pattern($1, cobbler_etc_t, cobbler_etc_t) + files_search_etc($1) +') + + +######################################## +## +## Read cobbler configuration files. +## +## +## +## Domain allowed access. +## +## +# +interface(`cobbler_read_config',` + gen_require(` + type cobbler_etc_t; + ') + + read_files_pattern($1, cobbler_etc_t, cobbler_etc_t) + files_search_etc($1) +') + +######################################## +## +## Do not audit attempts to read and write +## cobbler log files. +## +## +## +## Domain to not audit. +## +## +# +interface(`cobbler_dontaudit_rw_log',` + gen_require(` + type cobbler_var_log_t; + ') + + dontaudit $1 cobbler_var_log_t:file rw_file_perms; +') + +######################################## +## +## Search cobbler lib directories. +## +## +## +## Domain allowed access. +## +## +# +interface(`cobbler_search_lib',` + gen_require(` + type cobbler_var_lib_t; + ') + + files_search_var_lib($1) + search_dirs_pattern($1, cobbler_var_lib_t, cobbler_var_lib_t) +') + +######################################## +## +## Read cobbler lib files. +## +## +## +## Domain allowed access. +## +## +# +interface(`cobbler_read_lib_files',` + gen_require(` + type cobbler_var_lib_t; + ') + + files_search_var_lib($1) + read_files_pattern($1, cobbler_var_lib_t, cobbler_var_lib_t) + read_lnk_files_pattern($1, cobbler_var_lib_t, cobbler_var_lib_t) +') + +######################################## +## +## Create, read, write, and delete +## cobbler lib files. +## +## +## +## Domain allowed access. +## +## +# +interface(`cobbler_manage_lib_files',` + gen_require(` + type cobbler_var_lib_t; + ') + + files_search_var_lib($1) + manage_files_pattern($1, cobbler_var_lib_t, cobbler_var_lib_t) + manage_lnk_files_pattern($1, cobbler_var_lib_t, cobbler_var_lib_t) + manage_dirs_pattern($1, cobbler_var_lib_t, cobbler_var_lib_t) +') + +######################################## +## +## All of the rules required to +## administrate an cobbler environment. +## +## +## +## Domain allowed access. +## +## +## +## +## Role allowed access. +## +## +## +# +interface(`cobblerd_admin',` + refpolicywarn(`$0($*) has been deprecated, use cobbler_admin() instead.') + cobbler_admin($1, $2) +') + +######################################## +## +## All of the rules required to +## administrate an cobbler environment. +## +## +## +## Domain allowed access. +## +## +## +## +## Role allowed access. +## +## +## +# +interface(`cobbler_admin',` + gen_require(` + type cobblerd_t, cobbler_var_lib_t, cobbler_var_log_t; + type cobbler_etc_t, cobblerd_initrc_exec_t; + type cobbler_tmp_t; + ') + + allow $1 cobblerd_t:process { ptrace signal_perms }; + ps_process_pattern($1, cobblerd_t) + + cobblerd_initrc_domtrans($1) + domain_system_change_exemption($1) + role_transition $2 cobblerd_initrc_exec_t system_r; + allow $2 system_r; + + files_search_etc($1) + admin_pattern($1, cobbler_etc_t) + + files_search_tmp($1) + admin_pattern($1, cobbler_tmp_t) + + files_search_var_lib($1) + admin_pattern($1, cobbler_var_lib_t) + + logging_search_logs($1) + admin_pattern($1, cobbler_var_log_t) +') diff --git a/cobbler.spec b/cobbler.spec index df1242e..69d7d40 100644 --- a/cobbler.spec +++ b/cobbler.spec @@ -1,1946 +1,342 @@ -%global debug_package %{nil} +%global tftpboot_dir %{_sharedstatedir}/tftpboot/ -%global tftp_dir /var/lib/tftpboot/ +%global commit 700eb5bdfb28baba4de5e4083bec9e132a763bcb +%global shortcommit %(c=%{commit}; echo ${c:0:7}) +%global selinuxtype targeted -%global commit0 f78af86a963b099d1e22586b24aedff9062da9c1 -%global shortcommit0 %(c=%{commit0}; echo ${c:0:7}) +# Tests require an installed system with root access +%bcond check 0 Name: cobbler -Version: 2.8.5 -Release: 0.1%{?dist} +Version: 3.3.7 +Release: %autorelease Summary: Boot server configurator -URL: http://cobbler.github.io/ -License: GPLv2+ -Source0: https://github.com/cobbler/cobbler/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz +URL: https://cobbler.github.io/ +# Automatically converted from old format: GPLv2+ - review is highly recommended. +License: GPL-2.0-or-later +Source0: https://github.com/cobbler/cobbler/archive/v%{version}/%{name}-%{version}.tar.gz +Source1: migrate-settings.sh +Source2: %{name}.te +Source3: %{name}.if +Source4: %{name}.fc -BuildRequires: git -BuildRequires: /usr/bin/pathfix.py -BuildRequires: python2-devel -BuildRequires: python2-pyyaml -BuildRequires: python2-setuptools -%if 0%{?fedora} >= 28 || 0%{?rhel} > 7 -BuildRequires: python2-cheetah +# Do not run coverage tests +Patch0: cobbler-nocov.patch +# Python 3.13 support (backport of https://github.com/cobbler/cobbler/pull/3842) +# https://bugzilla.redhat.com/show_bug.cgi?id=2335620 +Patch1: cobbler-python3.13.patch +# Upstream fix for reposync --tries +# https://bugzilla.redhat.com/show_bug.cgi?id=2401605 +# Backport of https://github.com/cobbler/cobbler/pull/3378 +Patch2: cobbler-reposync.patch +# Use systemctl is-active to prevent some SELinux denials checking service status +# https://bugzilla.redhat.com/show_bug.cgi?id=2353898 +Patch3: https://github.com/cobbler/cobbler/pull/3945.patch +BuildArch: noarch + +BuildRequires: make +BuildRequires: python%{python3_pkgversion}-devel +# Cheetah switched names from Cheetah3 to CT3 in its metadata in version 3.3.0. +# https://github.com/CheetahTemplate3/cheetah3/commit/673259b2d139b4ea970b1c2da12607b7ac39cbec +%if 0%{?fedora} >= 42 || 0%{?rhel} >= 10 +BuildRequires: %{py3_dist ct3} %else -BuildRequires: python-cheetah +BuildRequires: %{py3_dist cheetah3} %endif +BuildRequires: %{py3_dist distro} +BuildRequires: %{py3_dist netaddr} +BuildRequires: %{py3_dist pyyaml} +BuildRequires: %{py3_dist requests} +BuildRequires: %{py3_dist schema} +BuildRequires: %{py3_dist setuptools} +# For docs +BuildRequires: %{py3_dist sphinx} +%if %{with check} +# For tests +BuildRequires: %{py3_dist crypt-r} +BuildRequires: %{py3_dist dnspython} +BuildRequires: %{py3_dist file-magic} +BuildRequires: %{py3_dist pytest-benchmark} +%endif + +# This ensures that the *-selinux package and all it’s dependencies are not pulled +# into containers and other systems that do not use SELinux +Requires: (%{name}-selinux if selinux-policy-%{selinuxtype}) Requires: httpd Requires: tftp-server -Requires: createrepo +Requires: dosfstools +Requires: createrepo_c Requires: rsync -Requires: python2-simplejson -Requires: python2-pyyaml -%if 0%{?fedora} >= 28 || 0%{?rhel} > 7 -Requires: python2-mod_wsgi -Requires: python2-cheetah -Requires: python2-netaddr -Requires: python2-urlgrabber -%else -Requires: mod_wsgi -Requires: python-cheetah -Requires: python-netaddr -Requires: python-urlgrabber -%endif -# syslinux is only available on x86 -%ifarch %{ix86} x86_64 -Requires: syslinux -%endif +Requires: xorriso Requires: genisoimage -%if 0%{?fedora} +# Not everyone wants bash-completion...? +Recommends: bash-completion Requires: dnf-plugins-core -%else -Requires: yum-utils -%endif -%if 0%{?fedora} || 0%{?rhel} >= 7 +# syslinux is only available on x86 +Requires: (syslinux if (filesystem(x86-64) or filesystem(x86-32))) +# grub2 efi stuff is only available on x86 +Recommends: grub2-efi-ia32 +Recommends: grub2-efi-x64 +Recommends: logrotate +Recommends: %{py3_dist librepo} +Obsoletes: cobbler-web < 3.3 + BuildRequires: systemd Requires(post): systemd Requires(preun): systemd Requires(postun): systemd -%else -Requires(post): /sbin/chkconfig -Requires(preun): /sbin/chkconfig -Requires(preun): /sbin/service -%endif %description -Cobbler is a network install server. Cobbler supports PXE, ISO -virtualized installs, and re-installing existing Linux machines. -The last two modes use a helper tool, 'koan', that integrates with -cobbler. There is also a web interface 'cobbler-web'. Cobbler's -advanced features include importing distributions from DVDs and rsync -mirrors, kickstart templating, integrated yum mirroring, and built-in -DHCP/DNS Management. Cobbler has a XMLRPC API for integration with -other applications. +Cobbler is a network install server. Cobbler supports PXE, ISO +virtualized installs, and re-installing existing Linux machines. The +last two modes use a helper tool, 'koan', that integrates with cobbler. +Cobbler's advanced features include importing distributions from DVDs +and rsync mirrors, kickstart templating, integrated yum mirroring, and +built-in DHCP/DNS Management. Cobbler has a XML-RPC API for integration +with other applications. -%package -n cobbler-web -Summary: Web interface for Cobbler +%package selinux +Summary: SELinux policies for %{name} +Requires: selinux-policy-%{selinuxtype} +Requires(post): selinux-policy-%{selinuxtype} +BuildRequires: selinux-policy-devel BuildArch: noarch -Requires: cobbler -%if 0%{?fedora} >= 28 -Requires: python2-django1.11 -%endif -%if 0%{?el7} -Requires: python2-django -%endif -%if 0%{?fedora} >= 28 || 0%{?rhel} > 7 -Requires: python2-mod_wsgi -%else -Requires: Django > 1.6 -Requires: mod_wsgi -%endif -Requires: mod_ssl -Requires(post): openssl - -%description -n cobbler-web -Web interface for Cobbler that allows visiting -http://server/cobbler_web to configure the install server. +%{?selinux_requires} -%package -n koan -Summary: Helper tool that performs cobbler orders on remote machines -BuildArch: noarch -Requires: python2-simplejson -%if 0%{?fedora} >= 28 || 0%{?rhel} > 7 -Requires: python2-ethtool -Requires: python2-urlgrabber -%else -Requires: python-ethtool -Requires: python-urlgrabber -%endif -Requires: virt-install +%description selinux +SELinux policies for %{name}. -%description -n koan -Koan stands for kickstart-over-a-network and allows for both -network installation of new virtualized guests and reinstallation -of an existing system. For use with a boot-server configured with Cobbler + +%package tests +Summary: Unit tests for cobbler +Requires: cobbler = %{version}-%{release} + +%description tests +Unit test files from the Cobbler project. + + +%package tests-containers +Summary: Dockerfiles and scripts to setup testing containers +Requires: cobbler = %{version}-%{release} + +%description tests-containers +Dockerfiles and scripts to setup testing containers. %prep %autosetup -p1 -pathfix.py -pni "%{__python2} %{py2_shbang_opts}" . +mkdir -p selinux +cp -p %{SOURCE2} %{SOURCE3} %{SOURCE4} selinux/ -%build -%py2_build - -%install -%py2_install - -# cobbler -rm $RPM_BUILD_ROOT%{_sysconfdir}/cobbler/cobbler.conf - -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d -mv $RPM_BUILD_ROOT%{_sysconfdir}/cobbler/cobblerd_rotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/cobblerd - -# Create data directories in tftp_dir -mkdir -p $RPM_BUILD_ROOT%{tftp_dir}/{boot,etc,grub,images{,2},ppc,pxelinux.cfg,s390x} - -%if 0%{?rhel} == 6 -# sysvinit -mkdir -p %{_sysconfdir}/init.d -mv $RPM_BUILD_ROOT%{_sysconfdir}/cobbler/cobblerd $RPM_BUILD_ROOT%{_sysconfdir}/init.d/cobblerd -rm $RPM_BUILD_ROOT%{_sysconfdir}/cobbler/cobblerd.service -%else -# systemd -rm $RPM_BUILD_ROOT%{_sysconfdir}/cobbler/cobblerd -rm $RPM_BUILD_ROOT%{_sysconfdir}/init.d/cobblerd -mkdir -p $RPM_BUILD_ROOT%{_unitdir} -mv $RPM_BUILD_ROOT%{_sysconfdir}/cobbler/cobblerd.service $RPM_BUILD_ROOT%{_unitdir} +# Cheetah switched names from Cheetah3 to CT3 in its metadata in version 3.3.0. +# https://github.com/CheetahTemplate3/cheetah3/commit/673259b2d139b4ea970b1c2da12607b7ac39cbec +%if 0%{?fedora} >= 42 || 0%{?rhel} >= 10 +sed -e 's/Cheetah3/CT3/' -i setup.py %endif -# cobbler-web -rm $RPM_BUILD_ROOT%{_sysconfdir}/cobbler/cobbler_web.conf -# koan -mkdir -p $RPM_BUILD_ROOT/var/spool/koan +%build +. ./distro_build_configs.sh +%py3_build +make man + +# SELinux +make -f %{_datadir}/selinux/devel/Makefile %{name}.pp +bzip2 -9 %{name}.pp + + +%install +. ./distro_build_configs.sh +# bypass install errors ( don't chown in install step) +%py3_install ||: + +# cobbler +rm %{buildroot}%{_sysconfdir}/cobbler/cobbler.conf + +mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d +mv %{buildroot}%{_sysconfdir}/cobbler/cobblerd_rotate %{buildroot}%{_sysconfdir}/logrotate.d/cobblerd + +# Create data directories in tftpboot_dir +mkdir -p %{buildroot}%{tftpboot_dir}/{boot,etc,grub/system{,_link},images{,2},ppc,pxelinux.cfg,s390x} + +# systemd - move to proper location +mkdir -p %{buildroot}%{_unitdir} +mv %{buildroot}%{_sysconfdir}/cobbler/cobblerd.service %{buildroot}%{_unitdir} + +# ghosted files +touch %{buildroot}%{_sharedstatedir}/cobbler/web.ss + +# migrate-settings.sh +install -p -m0755 %SOURCE1 %{buildroot}%{_datadir}/cobbler/bin/migrate-settings.sh + +# SELinux +install -D -m 0644 %{name}.pp.bz2 %{buildroot}%{_datadir}/selinux/packages/%{selinuxtype}/%{name}.pp.bz2 +install -D -p -m 0644 selinux/%{name}.if %{buildroot}%{_datadir}/selinux/devel/include/distributed/%{name}.if + + +%if %{with check} +%check +%pytest -v +%endif %pre -if (( $1 >= 2 )); then +if [ $1 -ge 2 ]; then # package upgrade: backup configuration - DATE=$(date "+%Y%m%d-%H%M%S") - if [[ ! -d /var/lib/cobbler/backup/upgrade-${DATE} ]]; then - mkdir -p /var/lib/cobbler/backup/upgrade-${DATE} + DATE=$(date "+%%Y%%m%%d-%%H%%M%%S") + if [ ! -d "%{_sharedstatedir}/cobbler/backup/upgrade-${DATE}" ]; then + mkdir -p "%{_sharedstatedir}/cobbler/backup/upgrade-${DATE}" fi - for i in "config" "snippets" "kickstarts" "triggers" "scripts"; do - if [[ -d /var/lib/cobbler/${i} ]]; then - cp -r /var/lib/cobbler/${i} /var/lib/cobbler/backup/upgrade-${DATE} + for i in "config" "snippets" "templates" "triggers" "scripts"; do + if [ -d "%{_sharedstatedir}/cobbler/${i}" ]; then + cp -r "%{_sharedstatedir}/cobbler/${i}" "%{_sharedstatedir}/cobbler/backup/upgrade-${DATE}" fi done - if [[ -d /etc/cobbler ]]; then - cp -r /etc/cobbler /var/lib/cobbler/backup/upgrade-${DATE} + if [ -d %{_sysconfdir}/cobbler ]; then + cp -r %{_sysconfdir}/cobbler "%{_sharedstatedir}/cobbler/backup/upgrade-${DATE}" fi fi - -%if 0%{?rhel} == 6 -%post -# package install -if (( $1 == 1 )); then - /sbin/chkconfig --add cobblerd > /dev/null 2>&1 - /etc/init.d/cobblerd start > /dev/null 2>&1 - /etc/init.d/httpd restart > /dev/null 2>&1 -fi -%preun -# before last package is removed -if (( $1 == 0 )); then - /sbin/chkconfig --del cobblerd > /dev/null 2>&1 - /etc/init.d/cobblerd stop > /dev/null 2>&1 -fi -%postun -# after last package is removed -if (( $1 == 0 )); then - /etc/init.d/httpd condrestart > /dev/null 2>&1 -fi -%endif - - -%if 0%{?fedora} || 0%{?rhel} >= 7 %post %systemd_post cobblerd.service +# Fixup permission for world readable settings files +chmod 640 %{_sysconfdir}/cobbler/settings.yaml +chmod 600 %{_sysconfdir}/cobbler/mongodb.conf +chmod 600 %{_sysconfdir}/cobbler/modules.conf +chmod 640 %{_sysconfdir}/cobbler/users.conf +chmod 640 %{_sysconfdir}/cobbler/users.digest +chmod 750 %{_sysconfdir}/cobbler/settings.d +chmod 640 %{_sysconfdir}/cobbler/settings.d/* +chgrp apache %{_sysconfdir}/cobbler/settings.yaml +chgrp apache %{_sysconfdir}/cobbler/users.conf +chgrp apache %{_sysconfdir}/cobbler/users.digest +chgrp apache %{_sysconfdir}/cobbler/settings.d +chgrp apache %{_sysconfdir}/cobbler/settings.d/* +# Change from apache +if [ -f %{_sharedstatedir}/cobbler/web.ss ]; then + chown root %{_sharedstatedir}/cobbler/web.ss +fi + +%posttrans +# Migrate pre-3.2.1 settings to settings.yaml +if [ -f %{_sysconfdir}/cobbler/settings.rpmsave ]; then + echo warning: migrating old settings to settings.yaml + mv %{_sysconfdir}/cobbler/settings.yaml{,.rpmnew} + cp -a %{_sysconfdir}/cobbler/settings.{rpmsave,rpmorig} + mv %{_sysconfdir}/cobbler/settings.{rpmsave,yaml} + %{_datadir}/cobbler/bin/migrate-settings.sh +fi +# Add some missing options if needed +grep -q '^reposync_rsync_flags:' %{_sysconfdir}/cobbler/settings.yaml || echo -e '#ADDED:\nreposync_rsync_flags: "-rltDv --copy-unsafe-links"' >> %{_sysconfdir}/cobbler/settings.yaml %preun %systemd_preun cobblerd.service %postun %systemd_postun_with_restart cobblerd.service -%endif -%post -n cobbler-web -# Change the SECRET_KEY option in the Django settings.py file -# required for security reasons, should be unique on all systems -RAND_SECRET=$(openssl rand -base64 40 | sed 's/\//\\\//g') -sed -i -e "s/SECRET_KEY = ''/SECRET_KEY = \'$RAND_SECRET\'/" /usr/share/cobbler/web/settings.py + +%pre selinux +%selinux_relabel_pre -s %{selinuxtype} + +%post selinux +%selinux_modules_install -s %{selinuxtype} %{_datadir}/selinux/packages/%{selinuxtype}/%{name}.pp.bz2 +%selinux_relabel_post -s %{selinuxtype} + +if [ "$1" -le "1" ]; then # First install + # the daemon needs to be restarted for the custom label to be applied + %systemd_postun_with_restart cobblerd.service +fi + +%postun selinux +if [ $1 -eq 0 ]; then + %selinux_modules_uninstall -s %{selinuxtype} %{name} + %selinux_relabel_post -s %{selinuxtype} +fi %files %license COPYING -%doc AUTHORS README.md docs/README.openvz docs/README.mysql -%config(noreplace) %{_sysconfdir}/cobbler +%doc AUTHORS.in README.md +%doc docs/developer-guide.rst docs/quickstart-guide.rst docs/installation-guide.rst +%dir %{_sysconfdir}/cobbler +%config(noreplace) %{_sysconfdir}/cobbler/auth.conf +%config(noreplace) %{_sysconfdir}/cobbler/boot_loader_conf/ +%config(noreplace) %{_sysconfdir}/cobbler/cheetah_macros +%config(noreplace) %{_sysconfdir}/cobbler/dhcp.template +%config(noreplace) %{_sysconfdir}/cobbler/dhcp6.template +%config(noreplace) %{_sysconfdir}/cobbler/dnsmasq.template +%config(noreplace) %{_sysconfdir}/cobbler/genders.template +%config(noreplace) %{_sysconfdir}/cobbler/import_rsync_whitelist +%config(noreplace) %{_sysconfdir}/cobbler/iso/ +%config(noreplace) %{_sysconfdir}/cobbler/logging_config.conf +%attr(600, root, root) %config(noreplace) %{_sysconfdir}/cobbler/modules.conf +%attr(600, root, root) %config(noreplace) %{_sysconfdir}/cobbler/mongodb.conf +%config(noreplace) %{_sysconfdir}/cobbler/named.template +%config(noreplace) %{_sysconfdir}/cobbler/ndjbdns.template +%config(noreplace) %{_sysconfdir}/cobbler/reporting/ +%config(noreplace) %{_sysconfdir}/cobbler/rsync.exclude +%config(noreplace) %{_sysconfdir}/cobbler/rsync.template +%config(noreplace) %{_sysconfdir}/cobbler/secondary.template +%attr(640, root, apache) %config(noreplace) %{_sysconfdir}/cobbler/settings.yaml +%attr(750, root, apache) %dir %{_sysconfdir}/cobbler/settings.d +%attr(640, root, apache) %config(noreplace) %{_sysconfdir}/cobbler/settings.d/bind_manage_ipmi.settings +%attr(640, root, apache) %config(noreplace) %{_sysconfdir}/cobbler/settings.d/manage_genders.settings +%attr(640, root, apache) %config(noreplace) %{_sysconfdir}/cobbler/settings.d/nsupdate.settings +%attr(640, root, apache) %config(noreplace) %{_sysconfdir}/cobbler/settings.d/windows.settings +%attr(640, root, apache) %config(noreplace) %{_sysconfdir}/cobbler/users.conf +%attr(640, root, apache) %config(noreplace) %{_sysconfdir}/cobbler/users.digest +%config(noreplace) %{_sysconfdir}/cobbler/version +%config(noreplace) %{_sysconfdir}/cobbler/windows/ +%config(noreplace) %{_sysconfdir}/cobbler/zone.template +%config(noreplace) %{_sysconfdir}/cobbler/zone_templates/ %config(noreplace) %{_sysconfdir}/logrotate.d/cobblerd %config(noreplace) /etc/httpd/conf.d/cobbler.conf %{_bindir}/cobbler +%{_bindir}/cobbler-settings %{_bindir}/cobbler-ext-nodes %{_bindir}/cobblerd -%{_sbindir}/tftpd.py +%{_datadir}/bash-completion/ +%dir %{_datadir}/cobbler +%{_datadir}/cobbler/bin %{_mandir}/man1/cobbler.1* -%{python2_sitelib}/cobbler/ -%{python2_sitelib}/cobbler*.egg-info -%if 0%{?fedora} || 0%{?rhel} >= 7 +%{_mandir}/man5/cobbler.conf.5* +%{_mandir}/man8/cobblerd.8* +%{python3_sitelib}/cobbler/ +%{python3_sitelib}/cobbler*.egg-info %{_unitdir}/cobblerd.service -%else -/etc/init.d/cobblerd -%endif -%{tftp_dir}/* +%{tftpboot_dir}/* /var/www/cobbler -%config(noreplace) /var/lib/cobbler -%exclude /var/lib/cobbler/webui_sessions +%dir %{_sharedstatedir}/cobbler +%ghost %attr(0755,root,root) %{_sharedstatedir}/cobbler/backup/ +%config(noreplace) %{_sharedstatedir}/cobbler/collections/ +%config(noreplace) %{_sharedstatedir}/cobbler/distro_signatures.json +%config(noreplace) %{_sharedstatedir}/cobbler/grub_config/ +%config(noreplace) %{_sharedstatedir}/cobbler/loaders/ +%config(noreplace) %{_sharedstatedir}/cobbler/scripts/ +%config(noreplace) %{_sharedstatedir}/cobbler/snippets/ +%config(noreplace) %{_sharedstatedir}/cobbler/templates/ +%config(noreplace) %{_sharedstatedir}/cobbler/triggers/ +%ghost %attr(0644,root,root) %{_sharedstatedir}/cobbler/lock +# Currently used for cli auth +%ghost %attr(0644,root,root) %{_sharedstatedir}/cobbler/web.ss /var/log/cobbler -%files -n cobbler-web -%license COPYING -%doc AUTHORS README.md -%config(noreplace) /etc/httpd/conf.d/cobbler_web.conf -%attr(-,apache,apache) /usr/share/cobbler/web -%dir %attr(700,apache,root) /var/lib/cobbler/webui_sessions -%attr(-,apache,apache) /var/www/cobbler_webui_content/ +%files selinux +%{_datadir}/selinux/packages/%{selinuxtype}/%{name}.pp.* +%{_datadir}/selinux/devel/include/distributed/%{name}.if +%ghost %verify(not md5 size mode mtime) %{_sharedstatedir}/selinux/%{selinuxtype}/active/modules/200/%{name} -%files -n koan -%license COPYING -%doc AUTHORS README.md -%{_bindir}/cobbler-register -%{_bindir}/koan -%{_bindir}/ovz-install -%{_mandir}/man1/koan.1* -%{_mandir}/man1/cobbler-register.1* -%{python2_sitelib}/koan/ -%exclude %{python2_sitelib}/koan/sub_process.py* -%exclude %{python2_sitelib}/koan/opt_parse.py* -%exclude %{python2_sitelib}/koan/text_wrap.py* -/var/lib/koan -/var/log/koan -/var/spool/koan +%files tests +%{_datadir}/cobbler/tests/ + +%files tests-containers +%{_datadir}/cobbler/docker/ %changelog -* Mon Aug 26 2019 Nicolas Chauvet - 2.8.5-0.1 -- Update to 2.8.5 - pre-release - -* Wed Jul 24 2019 Fedora Release Engineering - 2.8.4-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Thu Jan 31 2019 Fedora Release Engineering - 2.8.4-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Mon Nov 26 2018 Orion Poplawski - 2.8.4-5 -- Fix empty man pages (BZ 1653415) - -* Mon Nov 26 2018 Orion Poplawski - 2.8.4-4 -- Revert bind_manage_ipmi feature that is broken on 2.8 - -* Sun Nov 25 2018 Orion Poplawski - 2.8.4-3 -- Use pathfix.py to fix python shebangs - -* Sun Nov 25 2018 Orion Poplawski - 2.8.4-2 -- Make koan require python2-ethtool (BZ 1638933) - -* Sat Nov 24 2018 Orion Poplawski - 2.8.4-1 -- Update to 2.8.4 (Fixes BZ 1613292, 1643860, 1614433, CVE-2018-1000226, CVE-2018-10931) - -* Thu Jul 12 2018 Fedora Release Engineering - 2.8.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed May 30 2018 Orion Poplawski - 2.8.3-3 -- koan requires urlgrabber - -* Mon May 28 2018 Nicolas Chauvet - 2.8.3-2 -- Restore mergeability with epel7 - -* Mon May 28 2018 Nicolas Chauvet - 2.8.3-1 -- Update to 2.8.3 - security bugfix - -* Wed Feb 21 2018 Orion Poplawski - 2.8.2-6 -- Really fix django requires for Fedora 28+ - -* Tue Feb 20 2018 Orion Poplawski - 2.8.2-5 -- Fix django requires for Fedora 28+ - -* Fri Feb 09 2018 Igor Gnatenko - 2.8.2-4 -- Escape macros in %%changelog - -* Wed Feb 07 2018 Fedora Release Engineering - 2.8.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Tue Feb 06 2018 Iryna Shcherbina - 2.8.2-2 -- Update Python 2 dependency declarations to new packaging standards - (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) - -* Mon Sep 18 2017 Orion Poplawski - 2.8.2-1 -- Update to 2.8.2 - -* Wed Aug 02 2017 Fedora Release Engineering - 2.8.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 2.8.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed Jun 21 2017 Orion Poplawski - 2.8.1-3 -- Suppress logrotate output - -* Mon Jun 12 2017 Orion Poplawski - 2.8.1-2 -- Fix module loading - -* Wed May 24 2017 Orion Poplawski - 2.8.1-1 -- Update to 2.8.1 - -* Fri Feb 17 2017 Orion Poplawski - 2.8.0-6 -- Add patch to fix handling of multiple bridge interfaces - -* Fri Feb 10 2017 Fedora Release Engineering - 2.8.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Fri Jan 27 2017 Orion Poplawski - 2.8.0-4 -- Fix named patch - -* Tue Jan 24 2017 Orion Poplawski - 2.8.0-3 -- Restart named-chroot service if used - -* Fri Jan 20 2017 Orion Poplawski - 2.8.0-2 -- Fix logrotate script for systemd (bug #1414617) - -* Thu Dec 1 2016 Orion Poplawski - 2.8.0-1 -- Update to 2.8.0 -- Restructure spec file - -* Thu Sep 1 2016 Orion Poplawski - 2.6.11-11.gitf78af86 -- Add patches to fix TEMPLATE_DIRS and use OrderedDict - -* Thu Aug 11 2016 Orion Poplawski - 2.6.11-10.gitf78af86 -- Force IPv4 connections to cobblerd from web proxy - -* Thu Jul 21 2016 Orion Poplawski - 2.6.11-9.gitf78af86 -- Suppress "virt-install --os-variant list" error messages - -* Thu Jul 21 2016 Orion Poplawski - 2.6.11-8.git5680bf8 -- Fix handling unknown os variants with osinfo-query - -* Tue Jul 19 2016 Fedora Release Engineering - 2.6.11-7.git95749a6 -- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages - -* Wed Jul 13 2016 Orion Poplawski - 2.6.11-6.git95749a6 -- Fix typo in koan/app.py - -* Wed Jul 13 2016 Orion Poplawski - 2.6.11-5.git13b035f -- Update to current git snapshot (bug #1276896) - -* Wed Feb 03 2016 Fedora Release Engineering - 2.6.11-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Mon Feb 1 2016 Orion Poplawski - 2.6.11-3 -- Require dnf-plugins-core - -* Sun Jan 24 2016 Orion Poplawski - 2.6.11-2 -- Require dnf-core-plugins instead of yum-utils for repoquery on Fedora 23+ - -* Sun Jan 24 2016 Orion Poplawski - 2.6.11-1 -- Update to 2.6.11 -- Make cobbler arch specific to allow for arch specific requires - -* Thu Oct 1 2015 Orion Poplawski - 2.6.10-1 -- Update to 2.6.10 - -* Mon Jun 22 2015 Orion Poplawski - 2.6.9-1 -- Update to 2.6.9 - -* Wed Jun 17 2015 Fedora Release Engineering - 2.6.8-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue May 12 2015 Orion Poplawski - 2.6.8-2 -- Support django 1.8 in Fedora 22+ - -* Fri May 8 2015 Orion Poplawski - 2.6.8-1 -- Update to 2.6.8 -- Backport upstream patch to fix centos version detection (bug #1201879) - -* Tue Apr 28 2015 Orion Poplawski - 2.6.7-3 -- Add patch to fix virt-install support for F21+/EL7 (bug #1188424) - -* Mon Apr 27 2015 Orion Poplawski - 2.6.7-2 -- Create and own directories in tftp_dir - -* Wed Dec 31 2014 Orion Poplawski - 2.6.7-1 -- Update to 2.6.7 - -* Sun Oct 19 2014 Orion Poplawski - 2.6.6-1 -- Update to 2.6.6 - -* Fri Aug 15 2014 Orion Poplawski - 2.6.5-1 -- Update to 2.6.5 - -* Wed Aug 13 2014 Orion Poplawski - 2.6.4-2 -- Require Django >= 1.4 - -* Mon Aug 11 2014 Orion Poplawski - 2.6.4-1 -- Update to 2.6.4 - -* Fri Jul 18 2014 Orion Poplawski - 2.6.3-1 -- Update to 2.6.3 - -* Wed Jul 16 2014 Orion Poplawski - 2.6.2-1 -- Update to 2.6.2 -- Spec cleanup - -* Sat Jun 07 2014 Fedora Release Engineering - 2.6.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Fri May 23 2014 Orion Poplawski - 2.6.1-1 -- Update to 2.6.1 -- Drop koan patch applied upstream - -* Tue Apr 22 2014 Orion Poplawski - 2.6.0-2 -- Only require syslinux on x86 - -* Mon Apr 21 2014 Orion Poplawski - 2.6.0-1 -- Update to 2.6.0 - -* Mon Apr 21 2014 Orion Poplawski - 2.4.3-1 -- Update to 2.4.3 -- Add patch to fix bug #1047350 -- Add requires python-simplejson and virt-install for EL5 (bug #852422) -- Use updated systemd macros (bug #850061) -- Require python-ctypes on EL5 (bug #838884) - -* Sat Aug 03 2013 Fedora Release Engineering - 2.4.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Thu Jun 20 2013 James Cammarata 2.4.0-1 -- Release 2.4.0-1 (jimi@sngx.net) -* Fri May 24 2013 James Cammarata 2.4.0-beta6 -- New BETA release - 2.4.0 beta6 -* Mon Apr 22 2013 James Cammarata 2.4.0-beta5 -- A few bugfixes and rebuilding the RPM because of a goof - (jimi@sngx.net) - -* Wed Apr 03 2013 James Cammarata 2.4.0-beta4 -- 2.4.0-beta4 release -* Wed Dec 12 2012 James Cammarata 2.4.0-beta3 -- New release 2.4.0-beta3 -* Thu Oct 11 2012 James Cammarata 2.4.0-beta2 -- Modified spec version/release to be 2.4.0-beta2 (jimi@sngx.net) -- fixing up a bad commit merge (jimi@sngx.net) - -* Thu Oct 11 2012 James Cammarata 2.4.0-beta1 -- Beta Release 1 of 2.4.0 -- BUGFIX - Issue #329 - Systems no longer allow an add with an image for a - parent (jimi@sngx.net) -- BUGFIX - Issue #327 - revert 5afcff7 and fix in a more sane way - (jimi@sngx.net) -- Removed some duplicates created by reapplying a patch (jimi@sngx.net) -- BUGFIX - Issue #267 - old python-virtinst does not support --boot - (jimi@sngx.net) -- Revise install_post_puppet.py to use newer puppet syntax - (stephen@esstec.co.uk) -- Get rid of deprecated Puppet syntax so that cobbler works with Puppet 3.0 - (stephen@esstec.co.uk) -- Added ubuntu to dist check for named.conf location - (daniel.givens@rackspace.com) -- Expanded automatic determination of tftpboot path, isc dhcp and bind service - names and config files based on distro. (daniel@givenstx.com) -- Make the service name for DHCP and DNS restarts configurable for better - portable between distros. (daniel.givens@rackspace.com) -- Serial based on formatted date and revision number (alevy@mobitv.com) -- Correct undefined variable name (jbd@jbdenis.net) -- fix merge Issue #252 BUGFIX and #262 (daikame@gmail.com) -- Add check for valid driver_type before executing qemu-img (jimi@sngx.net) -- fix mistake remove import. (daikame@gmail.com) -- move exec method to utils.py, and catch unexpected exception. - (daikame@gmail.com) -- not check driver type on create method. (daikame@gmail.com) -- BUGFIX - Issue #305 - Incorrect Kickstart file when gPXE enabled - (jimi@sngx.net) -- BUGFIX - Issue #304 - Cobbler does not store values correctly for ksmeta - Objects were getting flattened improperly, so it was losing escapes/quoting - for values with spaces (jimi@sngx.net) -- add vmdk and raw file create support. (daikame@gmail.com) -- BUGFIX - Issue #267 - old python-virtinst does not support --boot - (jimi@sngx.net) -- Modified spec version/release to be 2.4.0-beta-1 (jimi@sngx.net) -- Initial commit for mysql backend support (jimi@sngx.net) -- BUGFIX - Issue #277 - move webroot to /srv/www for debian/ubuntu - (jimi@sngx.net) -- FEATURE - adding 'zonetype' variable for DNS zone rendering (jimi@sngx.net) -- BUGFIX - Issue #278 - cobbler import fails for ubuntu images due to rsync - args (jimi@sngx.net) -- BUGFIX - Issue #285 - update cobbler man page for incorrect options - (jimi@sngx.net) -- BUGFIX - Issue #241 - adding distro with blank name via XMLRPC should not - work (jimi@sngx.net) -- BUGFIX - Issue #272 - allow anamon to log entries when building systems based - on profiles (no corresponding system record) (jimi@sngx.net) -- BUGFIX - Issue #252 - fuzzy match on lvs name returns a false match - preventing LV creation (jimi@sngx.net) -- BUGFIX - Issue #287 - patch to allow templar to work without a config, which - was breaking the tftpd.py script (jimi@sngx.net) -- add qcow2 driver type (daikame@gmail.com) -- fix koan qemu-machine-type param test. (daikame@gmail.com) -- Only cosmetic cleanup - removed commands that were commented out, added - spaces for more clear code (flaks@bnl.gov) -- Modified sample.seed to make use kickstart_start and kickstart_done snippets - for debian. As a result the following cobbler features work for debian: - - prevent net boot looping - cobbler status reflects debian installations - - preseed file is downloaded a nd saved on the installed system as - /var/log/cobbler.seed Also made download_config_files_deb snippet, make use - of late_command New post_run_deb snippet allows to execute post installation - script. (flaks@bnl.gov) -- Some changes for testing (jimi@sngx.net) -- Minor fix for urlparse on older pythons (>2.5) (jimi@sngx.net) -- FEATURE - Issue #253 - Use PEERDNS=no for DHCP interfaces when name servers - are specified (jimi@sngx.net) -- install-tree for debian/ubuntu modified to take tree= from meta data. http, - ftp and nfs remote tree locations supported (flaks@bnl.gov) -- add support of custom logical volume name (daikame@gmail.com) -- Partial revert of 87acfc8b, and a minor change to bring the koan extra-args - inline with the PXE args (jimi@sngx.net) -- New default preseed, and a few minor changes to make ubuntu auto install work - better (jimi@sngx.net) -- Add support for qemu machine type to emulate (option --qemu-machine-type). - (isaoshimizu@gmail.com) -- Modern x86 kernels have 2048 char limit and this is needed to support - configurations with kickstart+NIC kernel params. Otherwise koan refuses to - accept the param list. (oliver@cpan.org) -- Allow koan's -S option to work for SuSE breed. Also remove -S for breed=None, - as I assume "Red Hat" is not a sane assumption for all Distros without a - breed. (oliver@cpan.org) -- Only add a udev net rule for an interface if the MAC is set. This fixes - behaviour whereby a dummy udev rule at eth0 forces the first NIC to get eth1 - post-install. (oliver@cpan.org) -- Make the domainname setting be the full eth0 DNS Name, minus the first dotted - part (and not the FQDN). (oliver@cpan.org) -- BUGFIX - Issue #252 - fuzzy match on lvs name returns a false match - preventing LV creation (jimi@sngx.net) -- Added back in the filesystem loader. (oliver@cpan.org) -- BUGFIX - Issue #247 - Reposync does not work from the web interface - (jimi@sngx.net) -- BUGFIX - Issue #246 - CentOS 5.x install fence_tools to /sbin/ - (jimi@sngx.net) -- Fix post_report trigger typo (jimi@sngx.net) -- Some fixes for koan running with an old virt-install (jimi@sngx.net) -- Define pxe_menu_items variable when creating PXE files for systems - (jthiltges2@unl.edu) -- Refactor PXE and GRUB menu item creation into a separate function - (jthiltges2@unl.edu) -- django 1.4 and later have deprecated the old TEMPLATE_LOADERS and replaced - them with a new app_directories.Loader (oliver@cpan.org) -- Add support for UEFI boot to the subnet, but not for defined systems yet. - (erinn.looneytriggs@gmail.com) -- Fix redhat import whitelist for Fedora 17 (jimi@sngx.net) -- Fix unittest on the case of haven't virt-install libs. (daikame@gmail.com) -- os_version for debian should be similar to ubunty for virt-install to work - changed tree in app.py so that I can use debian mirror different from cobbler - server (flaks@bnl.gov) -- fedora 17 changed the output of ifconfig command. This will make IFNAME set - in snippets again (flaks@bnl.gov) -- remove edit for now (flaks@bnl.gov) -- Fixed snippets for bonded_bridge_slave and a few other fixes for koan/web GUI - (jimi@sngx.net) -- Initial support for bonded_bridge_slave type. TODO: modifying snippets to - actually make it work... (jimi@sngx.net) -- The webui_sessions directory belongs only to cobbler-web - (chutzimir@gmail.com) -- RPM: put cobbler*.conf files only in /etc/httpd/conf.d - (cristian.ciupitu@yahoo.com) -- better fix for pull request #228 (jorgen.maas@gmail.com) -- make rpms failed because the misc/ directory containing the augeas lense - could not be found. this simple diff fixes that. (jorgen.maas@gmail.com) -- Ubuntu actually requires auto=true in kopts See - http://serverfault.com/a/144290/39018 (ekirpichov@gmail.com) -- Whitespace cleanup for the new openvz stuff (jimi@sngx.net) -- Remove dead code (useless imports) (cristian.ciupitu@yahoo.com) -- BUGFIX extra-args option problems (daikame@gmail.com) -- FIX koan virt-install tests. (daikame@gmail.com) -- added debian support to prevent net boot looping (flaks@bnl.gov) -- README.openvz: - added (nvrhood@gmail.com) -- scripts/ovz-install: - added support for "services" kickstart option - - corrected repos and installation source processing (nvrhood@gmail.com) -- cobbler.spec, setup.py: - added scripts/ovz-install (nvrhood@gmail.com) -- koan/openvzcreate.py, scripts/ovz-install: - changes in copyright notice - (nvrhood@gmail.com) -- koan/app.py: - bug in koan: size of freespace on VG expressed as float with - comma, but need fload with point (nvrhood@gmail.com) -- koan/app.py: - added type "openvz" (nvrhood@gmail.com) -- cobbler/collection.py: - openvz containers doesn't need to boot from PXE, so - we prevent PXE-menu creation for such profiles. (nvrhood@gmail.com) -- cobbler/item_profile.py, cobbler/utils.py: - added "openvz" virtualization - type (nvrhood@gmail.com) -- cobbler/item_system.py: - added openvz for virt_type (nvrhood@gmail.com) -- [BUGFIX] template errors can hit an exception path that references an - undefined variable (jimi@sngx.net) -- If the call to int() fails, inum has no value, thus the reference to inum in - the except clause causes an UnboundLocalError when it tries to reference - inum. (joshua@azariah.com) -- Add new ubuntu (alpha) version to codes.py (jorgen.maas@gmail.com) -- Not all remove current ifcfg- post_install_network_config (me@n0ts.org) -- Update systemctl script to resolve some issues (jimi@sngx.net) -- More spec fixes (jimi@sngx.net) -- Removing replicate_use_default_rsync_options setting and setting - replicate_rsync_options to existing rsync default. Issue #58 - (john@julienfamily.com) -- Commit for RFE: Expose rsync options during replication. Issue #58 - (john@julienfamily.com) -- Yet more HTML/CSS fixes, cleaning up some overly large inputs caused by other - CSS changes (jimi@sngx.net) -- More HTML/CSS improvements for new weblayout (jimi@sngx.net) -- CSS improvements for the tabbed layout (jimi@sngx.net) -- Fix for settings edit using the new tab format (jimi@sngx.net) -- Added a cancel button to replace the reset button (jimi@sngx.net) -- Fix saving of multiselect fields (jimi@sngx.net) -- Modification to generic_edit template to use tabs for categories plus some - miscellaneous cleanup (jimi@sngx.net) -- Adding an example line for redhat imports to the whitelist file - (jimi@sngx.net) -- Another minor fix for suse imports - fixing up name when using --available-as - (already done in other import modules) - allowing multiple arch imports (also - already done in other imports) (jimi@sngx.net) -- Some fixups for suse using --available-as (jimi@sngx.net) -- Fix for import when using --available-as - currently rsyncs full remote tree, - changing that to only import files in a white list - some modifications to - import modules to clean some things up and make available-as work better - - fix in utils.py for path_tail, which was not working right and appending the - full path (jimi@sngx.net) -- Run the same sed command on the default distributed config file to ensure - consistent indentation (jimi@sngx.net) -- Add setting to enable/disable dynamic settings changes Adding - cobblersettings.aug to distributed files, since we need a copy that doesn't - insert tabs Added a "cobbler check" that checks if dynamic settings is - enabled and prints a sed command to cleanup the settings file spacing/indents - (jimi@sngx.net) -- Change cli command "settings" to "setting" to match other commands (which are - not plurarlized) (jimi@sngx.net) -- Removing commented-out try/except block in config.py, didn't mean to commit - this (jimi@sngx.net) -- Fixed/improved CLI reporting for settings (jimi@sngx.net) -- Added support for validating setting type when saving Also fixed up the - augeas stuff to save lists and hashes correctly (jimi@sngx.net) -- Fix for incorrect redirect when login times out when looking at a setting - edit (jimi@sngx.net) -- Dynamic settings edit support for the web GUI (jimi@sngx.net) -- Added ability to write settings file via augeas (jimi@sngx.net) -- Initial support for modifying settings live Changed settings do not survive a - reboot and revert to what's in /etc/cobbler/settings TODO: * report --name - show a single setting * validate settings based on type (string, list, bool, - etc.) * web support for editing * persisting settings after change - (jimi@sngx.net) -- Branch for 2.4.0, updated spec and setup.py (jimi@sngx.net) - -* Sun Jun 17 2012 James Cammarata 2.2.3-2 -- [BUGFIX] re-enable writing of DHCP entries for non-pxeboot-enabled systems - unless they're static (jimi@sngx.net) -* Tue Jun 05 2012 James Cammarata 2.2.3-1 -- [BUGFIX] add dns to kernel commandline when using static interface - (frido@enu.zolder.org) -- [BUGFIX] issue #196 - repo environment variables bleed into other repos - during sync process This patch has reposync cleanup/restore any environment - variables that were changed during the process (jimi@sngx.net) -- BUGFIX quick dirty fix to work around an issue where cobbler would not log in ldap - usernames which contain uppercase characters. at line 60 instead of "if user - in data", "if user.lower() in data" is used. It would appear the parser puts - the usernames in data[] in lowercase, and the comparison fails because "user" - does hold capitalizations. (matthiasvandegaer@hotmail.com) -- [BUGFIX] simplify SELinux check reporting - * Remove calls to semanage, policy prevents apps from running that directly - (and speeds up check immensely) - * Point users at a wiki page which will contain details on ensuring cobbler - works with SELinux properly (jimi@sngx.net) -- [BUGFIX] issue #117 - incorrect permissions on files in /var/lib/cobbler - (j-nomura@ce.jp.nec.com) -- [BUGFIX] issue #183 - update objects mgmt classes field when a mgmt class is - renamed (jimi@sngx.net) -- [BUGFIX] adding some untracked directories and the new augeas lense to the - setup.py and cobbler.spec files (jimi@sngx.net) -- [FEATURE] Added ability to disable grubby --copy-default behavior for distros that may - have problems with it (jimi@sngx.net) -- [SECURITY] Major changes to power commands: - * Fence options are now based on /usr/sbin/fence_* - so basically anything the - fence agents package provides. - * Templates will now be sourced from /etc/cobbler/power/fence_.template. - These templates are optional, and are only required if you want to do extra - options for a given command. - All options for the fence agent command are sent - over STDIN. - * Support for ipmitool is gone, use fence_ipmilan instead (which uses ipmitool - under the hood anyway). This may apply to other power types if they were provided - by a fence_ command. - * Modified labels for the power options to be more descriptive. (jimi@sngx.net) -- [BUGFIX] issue #136 - don't allow invalid characters in names when copying - objects (jimi@sngx.net) -- [BUGFIX] issue #168 - change input_string_or_list to use shlex for split This - function was using a regular string split, which did not allow quoted or - escaped strings to be preserved. (jimi@sngx.net) -- [BUGFIX] Correct method to process the template file. This Fixes the previous issue - and process the template. (charlesrg@gmail.com) -- [BUGFIX] issue #170 - koan now checks length of drivers list before indexing - (daniel@defreez.com) -- [BUGFIX] Issue #153 - distro delete doesn't remove link from - /var/www/cobbler/links Link was being created incorrectly during the import - (jimi@sngx.net) -- [FEATURE] snippets: save/restore boot-device on ppc64 on fedora17 (nacc@us.ibm.com) -- [BUGFIX] Fixed typo in pre_anamon (brandor5@gmail.com) -- [BUGFIX] Added use of $http_port to server URL in pre_anamon and post_anamon - (brandor5@gmail.com) -- [BUGFIX] Fixed dnsmasq issue regarding missing dhcp-host entries (cobbler@basjes.nl) -- [BUGFIX] in buildiso for RedHat based systems. The interface->ip resolution was - broken when ksdevice=bootif (default) (jorgen.maas@gmail.com) -- [BUGFIX] rename failed for distros that did not live under ks_mirror - (jimi@sngx.net) -- [BUGFIX] Partial revert of commit 3c81dd3081 - incorrectly removed the 'extends' - template directive, breaking rendering in django (jimi@sngx.net) -- [BUGFIX] Reverting commit 1d6c53a97, which was breaking spacewalk Changed the web - interface stuff to use the existing extended_version() remote call - (jimi@sngx.net) -- [BUGFIX] Minor fix for serializer_pretty_json change, setting indent to 0 was still - causing more formatted JSON to be output (jimi@sngx.net) -- [SECURITY] Adding PrivateTmp=yes to the cobblerd.service file for systemd - (jimi@sngx.net) -- [FEATURE] add a config option to enable pretty JSON output (disabled by default) - (aronparsons@gmail.com) -- [BUGFIX] issue #107 - creating xendomains link for autoboot fails Changing an - exception to a printed warning, there's no need to completely bomb out on the - process for this (jimi@sngx.net) -- [BUGFIX] issue #28 - Cobbler drops errors on the floor during a replicate - Added additional logging to add_ functions to report an error if the add_item - call returns False (jimi@sngx.net) -- [BUGFIX] add requirement for python-simplejson to koan's package - (jimi@sngx.net) -- [BUGFIX] action_sync: fix sync_dhcp remote calls (nacc@us.ibm.com) -- [BUGFIX] Add support for KVM paravirt (justin@thespies.org) -- [BUGFIX] Makefile updates for debian/ubuntu systems (jimi@sngx.net) -- [BUGFIX] fix infinite netboot cycle with ppc64 systems (nacc@us.ibm.com) -- [BUGFIX] Don't allow Templar classes to be created without a valid config - There are a LOT of places in the templar.py code that use self.settings - without checking to make sure a valid config was passed in. This could cause - random stack dumps when templating, so it's better to force a config to be - passed in. Thankfully, there were only two pieces of code that actually did - this, one of which was the tftpd management module which was fixed elsewhere. - (jimi@sngx.net) -- [BUGFIX] instance of Templar() was being created without a config passed in - This caused a stack dump when the manage_in_tftpd module tried to access the - config settings (jimi@sngx.net) -- [BUGFIX] Fix for issue #17 - Make cobbler import be more squeaky when it doesn't - import anything (jimi@sngx.net) -- [FEATURE] autoyast_sample: save and restore boot device order (nacc@us.ibm.com) -- [BUGFIX] Fix for issue #105 - buildiso fails Added a new option for buildiso: - --mkisofs-opts, which allows specifying extra options to mkisofs TODO: add - input box to web interface for this option (jimi@sngx.net) -- [BUGFIX] incorrect lower-casing of kickstart paths - regression from issue - #43 (jimi@sngx.net) -- [FEATURE] Automatically detect and support bind chroot (orion@cora.nwra.com) -- [FEATURE] Add yumopts to kickstart repos (orion@cora.nwra.com) -- [BUGFIX] Fix issue with cobbler system reboot (nacc@us.ibm.com) -- [BUGFIX] fix stack trace in write_pxe_file if distro==None (smoser@brickies.net) -- [BUGFIX] Changed findkeys function to be consisten with keep_ssh_host_keys snippet - (flaks@bnl.gov) -- [BUGFIX] Fix for issue #15 - cobbler image command does not recognize - --image-type=memdisk (jimi@sngx.net) -- [BUGFIX] Issue #13 - reposync with --tries > 1 always repeats, even on - success The success flag was being set when the reposync ran, but didn't - break out of the retry loop - easy fix (jimi@sngx.net) -- [BUGFIX] Fix for issue #42 - kickstart not found error when path has leading - space (jimi@sngx.net) -- [BUGFIX] Fix for issue #26 - Web Interface: Profile Edit - * Added jquery UI stuff - * Added javascript to generic_edit template to make all selects in the - class "edit" resizeable - (jimi@sngx.net) -- [BUGFIX] Fix for issue #53 - cobbler system add without --profile exits 0, - but does nothing (jimi@sngx.net) -- [BUGFIX] Issue #73 - Broken symlinks on distro rename from web_gui - (jimi@sngx.net) -- regular OS version maintenance (jorgen.maas@gmail.com) -- [BUGFIX] let koan not overwrite existing initrd+kernel (ug@suse.de) -- [FEATURE] koan: - * Port imagecreate to virt-install (crobinso@redhat.com) - * Port qcreate to virt-install (crobinso@redhat.com) - * Port xen creation to virt-install (crobinso@redhat.com) -- [FEATURE] new snippet allows for certificate-based RHN registration - (jim.nachlin@gawker.com) -- [FEATURE] Have autoyast by default behave more like RHEL, regarding networking etc. - (chorn@fluxcoil.net) -- [BUGFIX] sles patches (chorn@fluxcoil.net) -- [BUGFIX] Simple fix for issue where memtest entries were not getting created after - installing memtest86+ and doing a cobbler sync (rharriso@redhat.com) -- [BUGFIX] REMOTE_ADDR was not being set in the arguments in calls to CobblerSvc - instance causing ip address not to show up in install.log. - (jweber@cofront.net) -- [BUGFIX] add missing import of shutil (aparsons@redhat.com) -- [BUGFIX] add a sample kickstart file for ESXi (aparsons@redhat.com) -- [BUGFIX] the ESXi installer allows two nameservers to be defined (aparsons@redhat.com) -- [BUGFIX] close file descriptors on backgrounded processes to avoid hanging %%pre - (aparsons@redhat.com) -- [BUGFIX] rsync copies the repositories with --delete hence deleting everyhting local - that isn't on the source server. The createrepo then creates (following the - default settings) a cache directory ... which is deleted by the next rsync - run. Putting the cache directory in the rsync exclude list avoids this - deletion and speeds up running reposync dramatically. (niels@basjes.nl) -- [BUGFIX] Properly blame SELinux for httpd_can_network_connect type errors on initial - setup. (michael.dehaan@gmail.com) -- fix install=... kernel parameter when importing a SUSE distro (ug@suse.de) -- [BUGFIX] Force Django to use the system's TIME_ZONE by default. - (jorgen.maas@gmail.com) -- [FEATURE] Separated check for permissions from file existence check. - (aaron.peschel@gmail.com) -- [BUGFIX] If the xendomain symlink already exists, a clearer error will be produced. - (aaron.peschel@gmail.com) -- [FEATURE] Adding support for ESXi5, and fixing a few minor things (like not having a - default kickstart for esxi4) Todos: * The esxi*-ks.cfg files are empty, and - need proper kickstart templates * Import bug testing and general kickstart - testing (jimi@sngx.net) -- [FEATURE] Adding basic support for gPXE (jimi@sngx.net) -- [FEATURE] Add arm as a valid architecture. (chuck.short@canonical.com) -- [SECURITY] Changes PYTHON_EGG_CACHE to a safer path owned just by the webserver. - (chuck.short@canonical.com) -- [BUGFIX] koan: do not include ks_meta args when obtaining tree When obtaining the tree - for Ubuntu machines, ensure that ks_meta args are not passed as part of the - tree if they exist. (chuck.short@canonical.com) -- [FEATURE] koan: Use grub2 for --replace-self instead of grubby The koan option - '--replace-self' uses grubby, which relies on grub1, to replace a local - installation by installing the new kernel/initrd into grub menu entries. - Ubuntu/Debian no longer uses it grub1. This patch adds the ability to use - grub2 to add the kernel/initrd downloaded to a menuentry. On reboot, it will - boot from the install kernel reinstalling the system. Fixes (LP: #766229) - (chuck.short@canonical.com) -- [BUGFIX] Fix reposync missing env variable for debmirror Fixes missing HOME env - variable for debmirror by hardcoding the environment variable to - /var/lib/cobbler (chuck.short@canonical.com) -- [BUGFIX] Fix creation of repo mirror when importing iso. Fixes the creation of a - disabled repo mirror when importing ISO's such as the mini.iso that does not - contain any mirror/packages. Additionally, really enables 'apt' as possible - repository. (chuck.short@canonical.com) -- [BUGFIX] adding default_template_type to settings.py, caused some issues with - templar when the setting was not specified in the /etc/cobbler/settings - (jimi@sngx.net) -- [BUGFIX] fix for following issue: can't save networking options of a system - in cobbler web interface. (#8) (jimi@sngx.net) -- [BUGFIX] Add a new setting to force CLI commands to use the localhost for xmlrpc - (chjohnst@gmail.com) -- [BUGFIX] Don't blow up on broken links under /var/www/cobbler/links - (jeffschroeder@computer.org) -- [SECURITY] Making https the default for the cobbler web GUI. Also modifying the cobbler- - web RPM build to require mod_ssl and mod_wsgi (missing wsgi was an oversight, - just correcting it now) (jimi@sngx.net) -- [FEATURE] Adding authn_pam. This also creates a new setting - authn_pam_service, which - allows the user to configure which PAM service they want to use for cobblerd. - The default is the 'login' service (jimi@sngx.net) -- [SECURITY] Change in cobbler.spec to modify permissions on webui sessions directory to - prevent non-privileged user acccess to the session keys (jimi@sngx.net) -- [SECURITY] Enabling CSRF protection for the web interface (jimi@sngx.net) -- [SECURITY] Convert all yaml loads to safe_loads for security/safety reasons. - https://bugs.launchpad.net/ubuntu/+source/cobbler/+bug/858883 (jimi@sngx.net) -- [FEATURE] Added the setting 'default_template_type' to the settings file, and created - logic to use that in Templar().render(). Also added an option to the same - function to pass the template type in as an argument. (jimi@sngx.net) -- [FEATURE] Initial commit for adding support for other template languages, namely jinja2 - in this case (jimi@sngx.net) - -* Tue Nov 15 2011 Scott Henson 2.2.2-1 -- Changelog update (shenson@redhat.com) -- Fixed indentation on closing tr tag (gregswift@gmail.com) -- Added leader column to the non-generic tables so that all tables have the - same layout. It leaves room for a checkbox and multiple selects i nthese - other tables as well. (gregswift@gmail.com) -- Added action class to the event log link to bring it inline with other table - functions (gregswift@gmail.com) -- buildiso bugfix: overriding dns nameservers via the dns kopt now works. - reported by Simon Woolsgrove (jorgen.maas@gmail.com) -- Fix for pxegen, where an image without a distro could cause a stack dump on - cobbler sync (jimi@sngx.net) -- Added initial support for specifying the on-disk format of virtual disks, - currently supported for QEMU only when using koan (jimi@sngx.net) -- Add fedora16, rawhide, opensuse 11.2, 11.3, 11.4 and 12.1 to codes.py This - should also fix ticket #611 (jorgen.maas@gmail.com) -- Use VALID_OS_VERSIONS from codes.py in the redhat importer. - (jorgen.maas@gmail.com) -- Cleanup: use utils.subprocess_call in services.py (jorgen.maas@gmail.com) -- Cleanup: use utils.subprocess_call in remote.py. (jorgen.maas@gmail.com) -- Cleanup: use utils.subprocess_call in scm_track.py. Also document that 'hg' - is a valid option in the settings file. (jorgen.maas@gmail.com) -- Dont import the sub_process module when it's not needed. - (jorgen.maas@gmail.com) -- Fixes to import_tree() to actually copy files to a safe place when - --available-as is specified. Also some cleanup to the debian/ubuntu import - module for when --available-as is specified. (jimi@sngx.net) -- Modification to import processes so that rsync:// works as a path. These - changes should also correct the incorrect linking issue where the link - created in webdir/links/ pointed at a directory in ks_mirror without the arch - specified, resulting in a broken link if --arch was specified on the command - line Also removed the .old import modules for debian/ubuntu, which were - replaced with the unified manage_import_debian_ubuntu.py (jimi@sngx.net) -- cleanup: use codes.VALID_OS_VERSIONS in the freebsd importer - (jorgen.maas@gmail.com) -- cleanup: use codes.VALID_OS_VERSIONS in the debian/ubuntu importer - (jorgen.maas@gmail.com) -- Bugfix: add the /var/www/cobbler/pub directory to setup.py. Calling buildiso - from cobbler-web now works as expected. (jorgen.maas@gmail.com) -- BUGFIX: patch koan (xencreate) to correct the same issue that was broken for - vmware regarding qemu_net_type (jimi@sngx.net) -- BUGFIX: fixed issue with saving objects in the webgui failing when it was the - first of that object type saved. (jimi@sngx.net) -- Minor fix to the remote version to use the nicer extended version available - (jimi@sngx.net) -- Fix a bug in buildiso when duplicate kopt keys are used. Reported and tested - by Simon Woolsgrove (jorgen.maas@gmail.com) -- Fix for koan, where vmwcreate.py was not updated to accept the network type, - causing failures. (jimi@sngx.net) -- Added a %%post section for the cobbler-web package, which replaces the - SECRET_KEY field in the Django settings.py with a random string - (jimi@sngx.net) -- BUGFIX: added sign_puppet_certs_automatically to settings.py. The fact that - this was missing was causing failures in the the pre/post puppet install - modules. (jimi@sngx.net) -- set the auto-boot option for a virtual machine (ug@suse.de) -- Correction for koan using the incorrect default port for connecting to - cobblerd (jimi@sngx.net) -- config/settings: add "manage_tftpd: 1" (default setting) - (cristian.ciupitu@yahoo.com) - -* Wed Oct 05 2011 Scott Henson 2.2.1-1 -- Import changes for systemd from the fedora spec file (shenson@redhat.com) - -* Wed Oct 05 2011 Scott Henson 2.2.0-1 -- Remove the version (shenson@redhat.com) -- New upstream 2.2.0 release (shenson@redhat.com) -- Add networking snippet for SuSE systems. (jorgen.maas@gmail.com) -- Add a /etc/hosts snippet for SuSE systems. (jorgen.maas@gmail.com) -- Add a proxy snippet for SuSE systems. (jorgen.maas@gmail.com) -- Buildiso: make use of the proxy field (SuSE, Debian/Ubuntu). - (jorgen.maas@gmail.com) -- Rename buildiso.header to buildiso.template for consistency. Also restore the - local LABEL in the template. (jorgen.maas@gmail.com) -- Bugfix: uppercase macaddresses used in buildiso netdevice= keyword cause the - autoyast installer to not setup the network and thus fail. - (jorgen.maas@gmail.com) -- Buildiso: minor cleanup diff. (jorgen.maas@gmail.com) -- Buildiso: behaviour changed after feedback from the community. - (jorgen.maas@gmail.com) -- Build standalone ISO from the webinterface. (jorgen.maas@gmail.com) -- Fix standalone ISO building for SuSE, Debian and Ubuntu. - (jorgen.maas@gmail.com) -- add proxy field to field_info.py (jorgen.maas@gmail.com) -- Remove FreeBSD from the unix breed as it has it's own now. Also, add freebsd7 - as it is supported until feb 2013. Minor version numbers don't make sense, - also removed. (jorgen.maas@gmail.com) -- Add a proxy field to profile and system objects. This is useful for - environments where systems are not allowed to make direct connections to the - cobbler/repo servers. (jorgen.maas@gmail.com) -- Introduce a "status" field to system objects. Useful in environments where - DTAP is required, the possible values for this field are: development, - testing, acceptance, production (jorgen.maas@gmail.com) -- Buildiso: only process profiles for selected systems. (jorgen.maas@gmail.com) -- Buildiso: add batch action to build an iso for selected profiles. - (jorgen.maas@gmail.com) -- Buildiso: use management interface feature. (jorgen.maas@gmail.com) -- Buildiso: get rid of some code duplication (ISO header). - (jorgen.maas@gmail.com) -- Buildiso: add interface to macaddr resolution. (jorgen.maas@gmail.com) -- Buildiso: add Debian and Ubuntu support. (jorgen.maas@gmail.com) -- Buildiso: select systems from the webinterface. (jorgen.maas@gmail.com) -- Fix an exception when buildiso is called from the webinterface. - (jorgen.maas@gmail.com) -- fix power_virsh template to check dom status before executing command. - (bpeck@redhat.com) -- if hostname is not resolvable do not fail and use that hostname - (msuchy@redhat.com) -- Removed action_import module and references to it in code to prevent future - confusion. (jimi@sngx.net) -- Fixing redirects after a failed token validation. You should now be - redirected back to the page you were viewing after having to log back in due - to a forced login. (jimi@sngx.net) -- Use port to access cobbler (peter.vreman@acision.com) -- Stripping "g" from vgs output case-insensitive runs faster - (mmello@redhat.com) -- Adding ability to create new sub-directories when saving snippets. Addresses - trac #634 - save new snippet fails on non existing subdir (jimi@sngx.net) -- Fix traceback when executing "cobbler system reboot" with no system name - specified Trac ticket #578 - missing check for name option with system reboot - (jimi@sngx.net) -- bind zone template writing (jcallaway@squarespace.com) -- Removing the duplicate lines from importing re module (mmello@redhat.com) -- Merge remote-tracking branch 'jimi1283/bridge-interface' (shenson@redhat.com) -- Modification to allow DEPRECATED options to be added as options to optparse - so they work as aliases (jimi@sngx.net) -- Re-adding the ability to generate a random mac from the webui. Trac #543 - (Generate random mac missing from 2.x webui) (jimi@sngx.net) -- Merge remote-tracking branch 'jsabo/fbsdreplication' (shenson@redhat.com) -- Tim Verhoeven (Tue. 08:35) (Cobbler attachment) - Subject: [PATCH] Add support to koan to select type of network device to - emulate To: cobbler development list - Date: Tue, 2 Aug 2011 14:35:21 +0200 (shenson@redhat.com) -- Hello, (shenson@redhat.com) -- scm_track: Add --all to git add options to handle deletions (tmz@pobox.com) -- Moved HEADER heredoc from action_buildiso.py to - /etc/cobbler/iso/buildiso.header (gbailey@terremark.com) -- Enable replication for FreeBSD (jsabo@verisign.com) -- Merge branch 'master' into bridge-interface (jimi@sngx.net) -- Remove json settings from local_get_cobbler_xmlrpc_url() (jsabo@verisign.com) -- 1) Moving --subnet field to --netmask 2) Created DEPRECATED_FIELDS structure - in field_info.py to deal with moves like this * also applies to the - bonding->interface_type move for bridged interface support (jimi@sngx.net) -- Merge remote-tracking branch 'jimi1283/bridge-interface' (shenson@redhat.com) -- Fixing up some serializer module stuff: * detecting module load errors when - trying to deserialize collections * added a what() function to all the - serializer modules for ID purposes * error detection for mongo stuff, - including pymongo import problems as well as connection issues - (jimi@sngx.net) -- Cleanup of bonding stuff in all files, including webui and koan. Additional - cleanup in the network config scripts, and re-added the modprobe.conf - renaming code to the post install network config. (jimi@sngx.net) -- Initial rework to allow bridge/bridge slave interfaces Added static route - configuration to pre_install_network_config Major cleanup/reworking of - post_install_network_config script (jimi@sngx.net) -- Fix for bad commit of some json settings test (jimi@sngx.net) -- Merge remote-tracking branch 'jsabo/fbsdimport' (shenson@redhat.com) -- Adding initial support for FreeBSD media importing (jsabo@verisign.com) -- Setting TIME_ZONE to None in web/settings.py causes a 500 error on a RHEL5 - system with python 2.4 and django 1.1. Commenting out the config line has the - same effect as setting it to None, and prevents the 500. (jimi@sngx.net) -- Fixes for importing RHEL6: * path_tail() was previously moved to utils, a - couple places in the import modules still used self.path_tail instead - of utils.path_tail, causing a stack dump * Fixed an issue in - utils.path_tail(), which was using self. still from when it was a member - of the import class * When mirror name was set on import and using - --available-as, it was appending a lot of junk instead of just using the - specified mirror name (jimi@sngx.net) -- Merge branch 'master' of git://git.fedorahosted.org/cobbler (jimi@sngx.net) -- Fix a quick error (shenson@redhat.com) -- Set the tftpboot dir for rhel6 hosts (jsabo@verisign.com) -- Fixed a typo (jorgen.maas@gmail.com) -- Added an extra field in the system/interface item. The field is called - "management" and should be used to identify the management interface, this - could be useful information for multihomed systems. (jorgen.maas@gmail.com) -- In the event log view the data/time field got wrapped which is very annoying. - Fast fix for now, i'm pretty sure there are better ways to do this. - (jorgen.maas@gmail.com) -- Event log soring on date reverted, let's sort on id instead. Reverse over - events in the template. Convert gmtime in the template to localtime. - (jorgen.maas@gmail.com) -- Sort the event log by date/time (jorgen.maas@gmail.com) -- Remove some unsupported OS versions from codes.py (jorgen.maas@gmail.com) -- Some changes in the generate_netboot_iso function/code: - Users had to supply - all system names on the commandline which they wanted to include in the ISO - boot menu. This patch changes that behaviour; all systems are included by - default now. You can still provide an override with the --systems parameter, - thus making this feature more consistent with what one might expect from - reading the help. - While at it I tried to make the code more readable and - removed some unneeded iterations. - Prevent some unneeded kernel/initrd - copies. - You can now override ip/netmask/gateway/dns parameters with - corresponding kernel_options. - Fixed a bug for SuSE systems where ksdevice - should be netdevice. - If no ksdevice/netdevice (or equivalent) has been - supplied via kernel_options try to guess the proper interface to use, but - don't just use one if we can't be sure about it (e.g. for multihomed - systems). (jorgen.maas@gmail.com) -- Add SLES 11 to codes.py (jorgen.maas@gmail.com) -- Add support for Fedora15 to codes.py (jorgen.maas@gmail.com) -- Django uses the timezone information from web/settings.py Changing the - hardcoded value to None forces Django to use the systems timezone instead of - this hardcoded value (jorgen.maas@gmail.com) -- Fix cobbler replication for non-RHEL hosts. The slicing used in the - link_distro function didn't work for all distros. (jsabo@verisign.com) -- Fix vmware esx importing. It was setting the links dir to the dir the iso was - mounted on import (jsabo@verisign.com) -- Merge remote-tracking branch 'jsabo/webuifun' (shenson@redhat.com) -- Fix bug with esxi replication. It wasn't rsyncing the distro over if the - parentdir already existed. (jsabo@verisign.com) -- Merge branch 'master' of git://git.fedorahosted.org/cobbler (jimi@sngx.net) -- Initial commit for mongodb backend support and adding support for settings as - json (jimi@sngx.net) -- Web UI patches from Greg Swift applied (jsabo@verisign.com) -- whitespace fix (dkilpatrick@verisign.com) -- Fix to fix to py_tftp change to sync in bootloaders - (dkilpatrick@verisign.com) -- Fixing a bug reported by Jonathan Sabo. (dkilpatrick@verisign.com) -- Merge branch 'master' of git://git.fedorahosted.org/cobbler - (dkilpatrick@verisign.com) -- Revert "Jonathan Sabo (June 09) (Cobbler)" - (shenson@redhat.com) -- Unmount and deactivate all software raid devices after searching for ssh keys - (jonathan.underwood@gmail.com) -- Merge remote-tracking branch 'ugansert/master' (shenson@redhat.com) -- Jonathan Sabo (June 09) (Cobbler) Subject: [PATCH] Fix - issue with importing distro's on new cobbler box To: cobbler development list - Date: Thu, 9 Jun 2011 16:17:20 -0400 - (shenson@redhat.com) -- missing manage_rsync option from config/settings (jsabo@criminal.org) -- Remove left-over debugging log message (dkilpatrick@verisign.com) -- SUSE requires the correct arch to find kernel+initrd on the inst-source - (ug@suse.de) -- added autoyast=... parameter to the ISO building code when breed=suse - (ug@suse.de) -- calculate meta data in the XML file without cheetah variables now - (ug@suse.de) -- render the cheetah template before passing the XML to the python XML parser - (ug@suse.de) -- made the pathes flexible to avoid problem on other distros than fedora/redhat - (ug@suse.de) -- bugfix (ug@suse.de) -- Merge patch from stable (cristian.ciupitu@yahoo.com) -- utils: initialize main_logger only when needed (cristian.ciupitu@yahoo.com) -- During refactor, failed to move templater initialization into - write_boot_files_distro. (dkilpatrick@verisign.com) -- Fixed a couple of simple typos. Made the boot_files support work (added - template support for the key, defined the img_path attribute for that - expansion) (dkilpatrick@verisign.com) -- Fixes to get to the "minimally tested" level. Fixed two syntax errors in - tftpd.py, and fixed refences to api and os.path in manage_in_tftpd.py - (dkilpatrick@verisign.com) -- Rebasing commit, continued. (kilpatds@oppositelock.org) -- Change the vmware stuff to use 'boot_files' as the space to set files that - need to be available to a tftp-booting process (dkilpatrick@verisign.com) -- Added 'boot_files' field for 'files that need to be put into tftpboot' - (dkilpatrick@verisign.com) -- Merge conflict. (kilpatds@oppositelock.org) -- Add in a default for puppet_auto_setup, thanks to Camille Meulien - for finding it. (shenson@redhat.com) -- Add a directory remap feature to fetchable_files processing. /foo/*=/bar/ - Client requests for "/foo/baz" will be turned into requests for /bar/baz. - Target paths are evaluated against the root filesystem, not tftpboot. - Template expansion is done on "bar/baz", so that would typically more - usefully be something like /boot/*=$distro_path/boot - (dkilpatrick@verisign.com) -- Removed trailing whitespace causing git warnings (dkilpatrick@verisign.com) -- Fix a bug where tftpd.py would throw if a client requested '/'. - (dkilpatrick@verisign.com) -- Allow slop in the config, not just the client. modules: don't hardcode - /tftpboot (dkilpatrick@verisign.com) -- Moved footer to actually float at the bottom of the page or visible section, - whichever is further down. Unfortunately leaves a slightly larger margin pad - on there. Will have to see if it can be made cleaner (gregswift@gmail.com) -- Removed right padding on delete checkboxes (gregswift@gmail.com) -- Adjusted all the self closing tags to end eith a " />" instead of not having - a space separating them (gregswift@gmail.com) -- Added "add" button to the filter bit (gregswift@gmail.com) -- Removed "Enabled" label on checkboxes, this can be added via css as part of - the theme if people want it using :after { content: " Enabled" } Padded the - context-tip off the checkboxes so that it lines up with most of the other - context tips instead of being burring in the middle of the form - (gregswift@gmail.com) -- Added bottom margin on text area so that it isn't as tight next to other form - fields (gregswift@gmail.com) -- Added id tags to the forms for ks templates and snippets Set some margins for - those two forms, they were a bit scrunched because they didn't have a - sectionbody fieldset and legend Removed inline formatting of input sizes on - those two pages Set the textareas in those two pages via css - (gregswift@gmail.com) -- Made the tooltips get hiddent except for on hover, with a small image - displayed in their place (gregswift@gmail.com) -- Added a top margin to the submit/reset buttons... looks cleaner having some - space. (gregswift@gmail.com) -- Changed generic edit form to the following: - Made blocks into fieldsets - again, converting the h2 to a legend. I didn't mean to change this the first - time through. - Pulled up a level, removing the wrapping div, making each - fieldset contain an order list, instead of each line being an ordered list, - which was silly of me. - Since it went up a level, un-indented all of the - internal html tags 2 spaces - changed the place holder for the network - widgets to spans so that they displayed cleanly (Don't like the spans either, - but its for the javascript) In the stylesheet just changed the - div.sectionbody to ol.sectionbody (gregswift@gmail.com) -- Fixed closing ul->div on multiselect section. Must have missed it a few - commits ago. (gregswift@gmail.com) -- IE uses input styling such as borders even on checkboxes... was not intended, - so has been cleared for checkboxes (gregswift@gmail.com) -- This is a change to the multiselect buttons view, i didn't mean to commit - the style sheet along with the spelling check fixes, but since I did might as - well do the whole thing and then erevert it later if people dislike it - (gregswift@gmail.com) -- Fixed another postition mispelling (gregswift@gmail.com) -- fixed typo postition should be position (gregswift@gmail.com) -- Returned the multiselect section to being div's, since its actually not a set - of list items, it is a single list item. Re-arranged the multiselect so that - the buttons are centered between the two sections Removed all of the line - breaks form that section Made the select box headings actually labels moved - the order of multiselect after sectionbody definition due to inheritence - (gregswift@gmail.com) -- Restored select boxes to "default" styling since they are not as cleanly css- - able Made visibly selected action from Batch Actions bold, mainly so by - default Batch Action is bold. Moved text-area and multi-select sizing into - stylesheet. re-alphabetized some of the tag styles Made the default login's - text inputs centered, since everything else on that page is - (gregswift@gmail.com) -- Added missing bracket from two commits ago in the stylesheet. - (gregswift@gmail.com) -- Re-added the tool tips for when they exist in the edit forms and set a style - on them. Removed an extraneous line break from textareas in edit form - (gregswift@gmail.com) -- Fixed javascript where I had used teh wrong quotes, thus breaking the network - interface widgets (gregswift@gmail.com) -- Added label and span to cleanup block (gregswift@gmail.com) -- Added version across all of the template loads so that the footer is - populated with it (gregswift@gmail.com) -- all css: - set overall default font size of 1em - added missing tags to the - cleanup css block - fixed button layout -- list line buttons are smaller font - to keep lines smaller -- set action input button's size - set indentation and - bolding of items in batch action - redid the list formatting -- removed zebra - stripes, they share the standard background now -- hover is now the - background color of the old darker zebra stripe -- selected lines now - background of the older light zebra stripe - added webkit border radius - (gregswift@gmail.com) -- generic_lists.tmpl - Removed force space on the checklists generic_lists.tmpl - - Added javascript to allow for selected row highlighting - (gregswift@gmail.com) -- Removed inline formatting from import.tmpl Made the context tips spans - (gregswift@gmail.com) -- Made both filter-adder elements exist in the same li element - (gregswift@gmail.com) -- Added default formatting for ordered lists Added formatting for the new - multiselect unordered list Changed old div definitions for the multiselect to - li Added label formatting for inside sectionbody to line up all the forms. - (gregswift@gmail.com) -- Adjusted multiselect section to be an unordered list instead of a div - (gregswift@gmail.com) -- Moved the close list tag inside the for loop, otherwise we generate lots of - nasty nested lists (gregswift@gmail.com) -- Changed edit templates to use ol instead of ul, because it apparently helps - out those using screen readers, and we should be making things accessible, - yes? (gregswift@gmail.com) -- Re-structured the edit templates to be unordered lists. Standardized the - tooltip/contextual data as context-tip class Redid the delete setup so that - its Delete->Really? Instead of Delete:Yes->Really? Same number of check - boxes. Setup the delete bit so that Delete and Really are labels for the - checkboxes and there isn't extraneous html input tags (gregswift@gmail.com) -- Added top margin on the filter adder (gregswift@gmail.com) -- Adjusted single action item buttons to be in the same list element, as it - makes alignment cleaner, and more sense from a grouping standpoint Set - submenubar default height to 26px Set submenubar's alignment to be as clean - as I've been able to get so far. (gregswift@gmail.com) -- Set background color back to original (gregswift@gmail.com) -- Adjusted all buttons to hover invert from blue to-blackish, the inverse of - the normal links (which go blackish to blue) but left the text color the - same. i'm not sure its as pretty, but dfinately more readable. Plus the - color change scheme is more consistant. Also made table buttons smaller than - other buttons (gregswift@gmail.com) -- Fixed width on paginate select boxes to auto, instead of over 200px - (gregswift@gmail.com) -- Removed margin around hr tag, waste of space, and looks closer to original - now (gregswift@gmail.com) -- Removed extraneous body div by putting user div inside container. - (gregswift@gmail.com) -- Adjuested style sheet to improve standardization of form fields, such as - buttons, text input widths, and fontsizes in buttons vs drop downs. - (gregswift@gmail.com) -- Some menu re-alignment on both menubar and submenubar (gregswift@gmail.com) -- Got the container and the user display into a cleaner size alignment to - display on the screen. less chance of horiz scroll (gregswift@gmail.com) -- Fix to get login form a bit better placed without duplicate work - (gregswift@gmail.com) -- pan.action not needed... .action takes care of it (gregswift@gmail.com) -- Removed padding on login screen (gregswift@gmail.com) -- Redid action and button classes to make them look like buttons.. still needs - work. Resized pointer classes to make things a bit more level on that row - (gregswift@gmail.com) -- New cleanup at the top negates the need for this table entry - (gregswift@gmail.com) -- Removed the body height to 99%%. Was doing this for sticky footer, but - current path says its not needed (gregswift@gmail.com) -- Added some windows and mac default fonts Made the body relative, supposed to - help with the layout Set text color to slightly off black.. was told there is - some odd optical reasoning behind this (gregswift@gmail.com) -- Made class settings for the table rows a touch more specific in the css - (gregswift@gmail.com) -- Added "normalization" to clean up cross browser differences at top of - style.css (gregswift@gmail.com) -- Added button class to all buttons, submit, and resets (gregswift@gmail.com) -- Fixed sectionheader to not be styled as actions... they are h2! - (gregswift@gmail.com) -- Fixed container reference from class to id (gregswift@gmail.com) -- Added missing action class on the "Create new" links in generic_list.tmpl - (gregswift@gmail.com) -- Revert part of 344969648c1ce1e753af because RHEL5's django doesn't support - that (gregswift@gmail.com) -- removed underline on remaing links (gregswift@gmail.com) -- Fixed the way the logo was placed on the page and removed the excess - background setting. (gregswift@gmail.com) -- Some cleanup to the style sheet along - removed fieldset since no more exist - (not sure about this in long run.... we'll see) - cleaned up default style - for ul cause it was causing override issues - got menubar and submenu bar - mostly settled (gregswift@gmail.com) -- Fixed submenu bar ul to be identified by id not class (gregswift@gmail.com) -- Rebuilt primary css stylesheet - not complete yet (gregswift@gmail.com) -- Removed logout from cobbler meft hand menu (gregswift@gmail.com) -- Next step in redoing layout: - added current logged in user and logout button - to a div element at top of page - fixed content div from class to id - added - footer (version entry doesn't work for some reason) - links to cobbler - website (gregswift@gmail.com) -- in generic_list.tmpl - set the edit link to class 'action' - merged the - creation of the edit action 'View kickstart' for system and profile - (gregswift@gmail.com) -- Replaced tool tip as div+em with a span classed as tooltip. tooltip class - just adds italic. (gregswift@gmail.com) -- Fixed table header alignment to left (gregswift@gmail.com) -- Take the logo out of the html, making it a css element, but retain the - location and basic feel of the placement. (gregswift@gmail.com) -- Step one of redoing the action list, pagination and filters. - split - pagination and filters to two tmpl files - pagination can be called on its - own (so it can live in top and bottom theoretically) - filter will eventually - include pagination so its on the bottom - new submenubar includes pagination - - new submenubar does age specific actiosn as links instead of drop downs - cause there is usually 1, rarely 2, never more. (gregswift@gmail.com) -- Removed pagination from left hand column (gregswift@gmail.com) -- Removed an erroneous double quote from master.tmpl (gregswift@gmail.com) -- Went a bit overboard and re-adjusted whitespace in all the templates. Trying - to do the code in deep blocks across templates can be a bit tedious and - difficult to maintain. While the output is not perfect, at least the - templates are more readable. (gregswift@gmail.com) -- Removed remaining vestige of action menu shading feature - (gregswift@gmail.com) -- Removed header shade references completely from the lists and the code from - master.tmpl (gregswift@gmail.com) -- Wrapped setting.tmpl error with the error class (gregswift@gmail.com) -- Changed h3 to h2 inside pages Made task_created's h4 into a h1 and - standarized with the other pages (gregswift@gmail.com) -- Standardized header with a hr tag before the form tags (gregswift@gmail.com) -- Added base width on the multiple select boxes, primarily for when they are - empty (gregswift@gmail.com) -- Removed fieldset wrappers and replaced legends with h1 and h2 depending on - depth (gregswift@gmail.com) -- Adjusted logic for the legent to only change one word, instead of the full - string (gregswift@gmail.com) -- Removed empty cell from table in generic_edit.tmpl (gregswift@gmail.com) -- Revert 8fed301e61f28f8eaf08e430869b5e5df6d02df0 because it was to many - different changes (gregswift@gmail.com) -- Removed empty cell from table in generic_edit.tmpl (gregswift@gmail.com) -- Moved some cobbler admin and help menus to a separate menu in the menubar - (gregswift@gmail.com) -- Added HTML5 autofocus attribute to login.tmpl. Unsupported browsers just - ignores this. (gregswift@gmail.com) -- Re-built login.tmpl: - logo isn't a link anymore back to the same page - logo - is centered with the login form - fieldset has been removed - set a css class - for the body of the login page, unused for now. And the css: - removed the - black border from css - centered the login button as well - (gregswift@gmail.com) -- Made the links and span.actions hover with the same color as used for the - section headings (gregswift@gmail.com) -- Removed as much in-HTML placed formatting as possible and implemented them in - css. The main bit remaining is the ul.li floats in paginate.tmpl - (gregswift@gmail.com) -- Cleaned up single tag closing for several of the checkboxes - (gregswift@gmail.com) -- removed a trailing forward slash that was creating an orphaned close span tag - (gregswift@gmail.com) -- Relabeled cells in thead row from td tags to th (gregswift@gmail.com) -- Added tr wrapper inside thead of tables for markup validation - (gregswift@gmail.com) -- Use :// as separator for virsh URIs (atodorov@otb.bg) -- Create more condensed s390 parm files (thardeck@suse.de) -- Add possibility to interrupt zPXE and to enter CMS (thardeck@suse.de) -- Cleanup the way that we download content - Fixes a bug where we were only - downloading grub-x86_64.efi (shenson@redhat.com) -- Port this config over as well (shenson@redhat.com) -- Only clear logs that exist. (bpeck@redhat.com) -- Pull in new configs from the obsoletes directory. (shenson@redhat.com) -- Removed extraneous close row tag from events.tmpl (gregswift@gmail.com) -- Fixed spelling of receive in enoaccess.tmpl (gregswift@gmail.com) -- Added missing close tags on a few menu unordered list items in master.tmpl - (gregswift@gmail.com) -- Added missing "for" correlation tag for labels in generic_edit.tmpl - (gregswift@gmail.com) -- Removed extraneous close divs from generic_edit.tmpl (gregswift@gmail.com) -- Removing old and unused template files (gregswift@gmail.com) -- Add support for Ubuntu distros. (andreserl@ubuntu.com) -- Koan install tree path for Ubuntu/Debian distros. (andreserl@ubuntu.com) -- Fixing hardlink bin path. (andreserl@ubuntu.com) -- Do not fail when yum python module is not present. (andreserl@ubuntu.com) -- Add Ubuntu/Debian support to koan utils for later use. (andreserl@ubuntu.com) -- typo in autoyast xml parsing (ug@suse.de) -- Minor change to validate a token before checking on a user. (jimi@sngx.net) -- get install tree from install=... parameter for SUSE (ug@suse.de) -- handle autoyast XML files (ug@suse.de) -- fixed support for SUSE in build-iso process. Fixed a typo (ug@suse.de) -- added SUSE breed to import-webui (ug@suse.de) -- Merge remote-tracking branch 'lanky/master' (shenson@redhat.com) -- Merge remote-tracking branch 'jimi1283/master' (shenson@redhat.com) -- added support for suse-distro import (ug@suse.de) -- Fix a sub_process Popen call that did not set close_fds to true. This causes - issues with sync where dhcpd keeps the XMLRPC port open and prevents cobblerd - from restarting (jimi@sngx.net) -- Cleanup of unneccsary widgets in distro/profile. These needed to be removed - as part of the multiselect change. (jimi@sngx.net) -- Yet another change to multiselect editing. Multiselects are now presented as - side-by-side add/delete boxes, where values can be moved back and forth and - only appear in one of the two boxes. (jimi@sngx.net) -- Fix for django traceback when logging into the web interface with a bad - username and/or password (jimi@sngx.net) -- Fix for snippet/kickstart editing via the web interface, where a 'tainted - file path' error was thrown (jimi@sngx.net) -- added the single missed $idata.get() item (stuart@sjsears.com) -- updated post_install_network_config to use $idata.get(key, "") instead of - $idata[key]. This stops rendering issues with the snippet when some keys are - missing (for example after an upgrade from 2.0.X to 2.1.0, where a large - number of new keys appear to have been added.) and prevents us from having to - go through all system records and add default values for them. - (stuart@sjsears.com) -- Take account of puppet_auto_setup in install_post_puppet.py - (jonathan.underwood@gmail.com) -- Take account of puppet_auto_setup in install_pre_puppet.py - (jonathan.underwood@gmail.com) -- Add puppet snippets to sample.ks (jonathan.underwood@gmail.com) -- Add puppet_auto_setup to settings file (jonathan.underwood@gmail.com) -- Add snippets/puppet_register_if_enabled (jonathan.underwood@gmail.com) -- Add snippets/puppet_install_if_enabled (jonathan.underwood@gmail.com) -- Add configuration of puppet pre/post modules to settings file - (jonathan.underwood@gmail.com) -- Add install_post_puppet.py module (jonathan.underwood@gmail.com) -- Add install_pre_puppet.py module (jonathan.underwood@gmail.com) -- Apply a fix for importing red hat distros, thanks jsabo (shenson@redhat.com) -- Changes to action/batch actions at top of generic list pages * move logic - into views, where it belongs * simplify template code * change actions/batch - actions into drop down select lists * added/modified javascript to deal with - above changes (jimi@sngx.net) -- Minor fixes to cobbler.conf, since the AliasMatch was conflicting with the - WSGI script alias (jimi@sngx.net) -- Initial commit for form-based login and authentication (jimi@sngx.net) -- Convert webui to use WSGI instead of mod_python (jimi@sngx.net) -- Save field data in the django user session so the webui doesn't save things - unnecessarily (jimi@sngx.net) -- Make use of --format in git and use the short hash. Thanks Todd Zullinger - (shenson@redhat.com) -- We need git. Thanks to Luc de Louw (shenson@redhat.com) -- Start of the change log supplied by Michael MacDonald - (shenson@redhat.com) -- Fix typo in cobbler man page entry for profile (jonathan.underwood@gmail.com) -- Fix cobbler man page entry for parent profile option - (jonathan.underwood@gmail.com) -- Set SELinux context of host ssh keys correctly after reinstallation - (jonathan.underwood@gmail.com) -- Fixing bug with img_path. It was being used prior to being set if you have - images. (jonathan.sabo@gmail.com) -- Add firstboot install trigger mode (jonathan.sabo@gmail.com) -- Fix old style shell triggers by checking for None prior to adding args to arg - list and fix indentation (jonathan.sabo@gmail.com) -- Bugfix: restore --no-fail functionality to CLI reposync - (icomfort@stanford.edu) -- Add the ability to replicate the new object types (mgmtclass,file,package). - (jonathan.sabo@gmail.com) -- Add VMware ESX and ESXi replication. (jonathan.sabo@gmail.com) -- Add batch delete option for profiles and mgmtclasses - (jonathan.sabo@gmail.com) -- Spelling fail (shenson@redhat.com) -- Remove deploy as a valid direct action (shenson@redhat.com) -- Trac Ticket #509: A fix that does not break everything else. - (https://fedorahosted.org/cobbler/ticket/509) (andrew@eiknet.com) -- Only chown the file if it does not already exist (shenson@redhat.com) -- Modification to cobbler web interface, added a drop-down select box for - management classes and some new javascript to add/remove items from the - multi-select (jimi@sngx.net) -- Check if the cachedir exists before we run find on it. (shenson@redhat.com) -- Fix trac#574 memtest (shenson@redhat.com) -- Add network config snippets for esx and esxi network configuration - $SNIPPET('network_config_esxi') renders to: (jonathan.sabo@gmail.com) -- Trac Ticket #510: Modified 'cobbler buildiso' to use - /var/cache/cobbler/buildiso by default. Added a /etc/cobbler/settings value - of 'buildisodir' to make it setable by the end user. --tempdir will still - overwrite either setting on the command line. (andrew@eiknet.com) -- Add img_path to the metadata[] so that it's rendered out in the esxi pxe - templates. Add os_version checks for esxi in kickstart_done so that it uses - wget or curl depending on what's known to be available. - (jonathan.sabo@gmail.com) -- Added --sync-all option to cobbler replicate which forces all systems, - distros, profiles, repos and images to be synced without specifying each. - (rrr67599@rtpuw027.corpnet2.com) -- Added manage_rsync option which defaults to 0. This will make cobbler not - overwrite a local rsyncd.conf unless enabled. - (rrr67599@rtpuw027.corpnet2.com) -- Added semicolon master template's placement of the arrow in the page heading - (gregswift@gmail.com) -- Quick fix from jsabo (shenson@redhat.com) -- added hover line highlighting to table displays (gregswift@gmail.com) -- Modification to generic_edit template so that the name field is not a text - box when editing. (jimi@sngx.net) -- Minor fixes for mgmt classes webui changes. - Bug when adding a new obj, - since obj is None it was causing a django stack dump - Minor tweaks to - javascript (jimi@sngx.net) -- Fixed error in which the json files for mgmtclasses was not being deleted - when a mgmtclass was removed, meaning they showed back up the next time - cobblerd was restarted (jimi@sngx.net) -- Fixed syntax error in clogger.py that was preventing cobblerd from starting - (jimi@sngx.net) -- Supports an additional initrd from kernel_options. (bpeck@redhat.com) -- Remove a bogus self (shenson@redhat.com) -- Re-enable debmirror. (chuck.short@canonical.com) -- Extending the current Wake-on-Lan support for wider distro compatibility. - Thanks to Dustin Kirkland. (chuck.short@canonical.com) -- Dont hardcode /etc/rc.d/init.d redhatism. (chuck.short@canonical.com) -- Newer (pxe|sys)linux's localboot value produces unreliable results when using - documented options, -1 seems to provide the best supported value - (chuck.short@canonical.com) -- Detect the webroot to be used based on the distro. - (chuck.short@canonical.com) -- If the logfile path doesn't exist, don't attempt to create the log file. - Mainly needed when cobbler is required to run inside the build env - (cobbler4j). Thanks to Dave Walker - (chuck.short@canonical.com) -- Implement system power status API method and CLI command (crosa@redhat.com) -- Update setup files to use proper apache configuration path - (konrad.scherer@windriver.com) -- Debian has www-data user for web server file access instead of apache. - (konrad.scherer@windriver.com) -- Update init script to work under debian. (konrad.scherer@windriver.com) -- Use lsb_release module to detect debian distributions. Debian release is - returned as a string because it could be sid which will never have a version - number. (konrad.scherer@windriver.com) -- Fix check for apache installation (konrad.scherer@windriver.com) -- Handle Cheetah version with more than 3 parts (konrad.scherer@windriver.com) -- Allow dlcontent to use proxy environment variables (shenson@redhat.com) -- Copy memtest to $bootloc/images/. Fixes BZ#663307 (shenson@redhat.com) -- Merge remote branch 'jimi1283/master' (shenson@redhat.com) -- Turn the cheetah version numbers into integers while testing them so we don't - always return true (shenson@redhat.com) -- Kill some whitespace (shenson@redhat.com) -- Fix for bug #587 - Un-escaped '$' in snippet silently fails to render - (jimi@sngx.net) -- Fix for bug #587 - Un-escaped '$' in snippet silently fails to render - (jimi@sngx.net) -- Merge branch 'master' of git://git.fedorahosted.org/cobbler (jimi@sngx.net) -- Don't use link caching in places it isn't needed (shenson@redhat.com) -- Better logging on subprocess calls (shenson@redhat.com) -- Fix for trac #541 - cobbler sync deletes /var/www/cobbler/pub (jimi@sngx.net) -- Merged work in the import-modules branch with the debian/ubuntu modules - created by Chuck Short (jimi@sngx.net) -- Merge branch 'cshort' into import-modules (jimi@sngx.net) -- Finished up debian/ubuntu support for imports Tweaked redhat/vmware import - modules logging output Added rsync function to utils to get it out of each - module - still need to fix the redhat/vmware modules to actually use this - (jimi@sngx.net) -- Initial commit for the Debian import module. * tested against Debian squeeze. - (chuck.short@canonical.com) -- Initial commit for the Ubuntu import module. * tested against Natty which - imported successfully. (chuck.short@canonical.com) -- tftp-hpa users for both Ubuntu Debian use /var/lib/tftpboot. - (chuck.short@canonical.com) -- Disable the checks that are not really valid for Ubuntu or Debian. - (chuck.short@canonical.com) -- Add myself to the authors file. (chuck.short@canonical.com) -- Updates for debian/ubuntu support in import modules (jimi@sngx.net) -- Fix a problem with cheetah >= 2.4.2 where the snippets were causing errors, - particularly on F14 due to its use of cheetah 2.4.3. (shenson@redhat.com) -- Initial commit of the Ubuntu import module (jimi@sngx.net) -- Merge remote branch 'jimi1283/import-modules' (shenson@redhat.com) -- Merge remote branch 'jimi1283/master' (shenson@redhat.com) -- Extended ESX/ESXi support * Fixed release detection for both ESX and ESXi * - Added support to kickstart_finder() so that the fetchable_files list gets - filled out when the distro is ESXi (jimi@sngx.net) -- Fixed distro_adder() in manage_import_vmware so ESXi gets imported properly - (jimi@sngx.net) -- Initial commit for the VMWare import module * tested against esx4 update 1, - which imported successfully (jimi@sngx.net) -- Minor style changes for web css * darken background slightly so the logo - doesn't look washed out * make text input boxes wider (jimi@sngx.net) -- Fix for the generic_edit function for the web page. The choices field for - management classes was not being set for distros/profiles - only systems, - causing a django stack dump (jimi@sngx.net) -- modify keep_ssh_host_keys snippet to use old keys during OS installation - (flaks@bnl.gov) -- Merge remote branch 'jimi1283/master' (shenson@redhat.com) -- Added replicate to list of DIRECT_ACTIONS, so it shows up in the --help - output (jimi@sngx.net) -- Merge branch 'master' into import-modules (jimi@sngx.net) -- Merge branch 'master' of git://git.fedorahosted.org/cobbler (jimi@sngx.net) -- Some fixes to the manage_import_redhat module * stop using mirror_name for - path stuff - using self.path instead * fixed rsync command to use self.path - too, this should really be made a global somewhere else though - (jimi@sngx.net) -- Add synopsis entries to man page to enable whatis command - (kirkland@ubuntu.com) -- Add "ubuntu" as detected distribution. (clint@ubuntu.com) -- Fix for redhat import module. Setting the kickstart file with a default - value was causing some issues later on with the kickstart_finder() function, - which assumes all new profiles don't have a kickstart file yet - (jimi@sngx.net) -- Fix for non x86 arches, bug and fix by David Robinson - (shenson@redhat.com) -- Don't die when we find deltas, just don't use them (shenson@redhat.com) -- Merge remote branch 'khightower/khightower/enhanced-configuration-management' - (shenson@redhat.com) -- By: Bill Peck exclude initrd.addrsize as well. This - affects s390 builds (shenson@redhat.com) -- Fix an issue where an item was getting handed to remove_item instead of the - name of the item. This would cause an exception further down in the stack - when .lower() was called on the object (by the call to get_item). - (shenson@redhat.com) -- Add a check to make sure system is in obj_types before removing it. Also - remove an old FIXME that this previously fixed (shenson@redhat.com) -- Fix regression in 2.0.8 that dumped into pxe cfg files (shenson@redhat.com) -- Initial commit of import module for redhat (jimi@sngx.net) -- Merge branch 'master' of git://git.fedorahosted.org/cobbler (jimi@sngx.net) -- Added new modules for copying a distros's fetchable files to the - /tftpboot/images directory - add_post_distro_tftp_copy_fetchable_files.py - copies on an add/edit - sync_post_tftp_copy_fetchable_files.py copies the - files for ALL distros on a full sync (jimi@sngx.net) -- Removed trailing '---' from each of the PXE templates for ESXi, which causes - PXE issues (jimi@sngx.net) -- Make stripping of "G" from vgs output case-insensitive - (heffer@fedoraproject.org) -- Replace rhpl with ethtool (heffer@fedoraproject.org) -- Add --force-path option to force overwrite of virt-path location - (pryor@bnl.gov) -- item_[profile|system] - update parents after editing (mlevedahl@gmail.com) -- collection.py - rename rather than delete mirror dirs (mlevedahl@gmail.com) -- Wil Cooley (shenson@redhat.com) -- Merge remote branch 'kilpatds/io' (shenson@redhat.com) -- Add additional qemu_driver_type parameter to start_install function - (Konrad.Scherer@windriver.com) -- Add valid debian names for releases (Konrad.Scherer@windriver.com) -- Add debian preseed support to koan (Konrad.Scherer@windriver.com) -- Add support for EFI grub booting. (dgoodwin@rm-rf.ca) -- Turn the 'daemonize I/O' code back on. cobbler sync seems to still work - (dkilpatrick@verisign.com) -- Fix some spacing in the init script (dkilpatrick@verisign.com) -- Added a copy-default attribute to koan, to control the params passed to - grubby (paji@redhat.com) -- Turn on the cache by default Enable a negative cache, with a shorter timeout. - Use the cache for normal lookups, not much ip-after-failed. - (dkilpatrick@verisign.com) -- no passing full error message. Der (dkilpatrick@verisign.com) -- Pull the default block size into the template, since that can need to be - changed. Make tftpd.py understand -B for compatibility. Default to a smaller - mtu, for vmware compatibility. (dkilpatrick@verisign.com) -- in.tftpd needs to be run as root. Whoops (dkilpatrick@verisign.com) -- Handle exceptions in the idle-timer handling. This could cause tftpd.py to - never exit (dkilpatrick@verisign.com) -- Do a better job of handling things when a logger doesn't exist. And don't try - and find out what the FD is for logging purposes when I know that might throw - and I won't catch it. (dkilpatrick@verisign.com) -- Scott Henson pointed out that my earlier changes stopped a sync from also - copying kernel/initrd files into the web directry. Split out the targets - from the copy, and make sure that sync still copies to webdir, and then also - fixed where I wasn't copying those files in the synclite case. - (dkilpatrick@verisign.com) -- Put back code that I removed incorrectly. (sync DHCP, DNS) - (dkilpatrick@verisign.com) -- Support installing FreeBSD without an IP address set in the host record. - (dkilpatrick@verisign.com) -- Fixed some bugs in the special-case handling code, where I was not properly - handling kernel requests, because I'd merged some code that looked alike, but - couldn't actually be merged. (dkilpatrick@verisign.com) -- fixing koan to use cobblers version of os_release which works with RHEL 6 - (jsherril@redhat.com) -- Adding preliminary support for importing ESXi for PXE booting (jimi@sngx.net) -- Fix cobbler check tftp typo. (dgoodwin@rm-rf.ca) -- buildiso now builds iso's that include the http_port setting (in - /etc/cobbler/settings) in the kickstart file url - (maarten.dirkse@filterworks.com) -- Add check detection for missing ksvalidator (dean.wilson@gmail.com) -- Use shlex.split() to properly handle a quoted install URL (e.g. url - --url="http://example.org") (jlaska@redhat.com) -- Update codes.py to accept 'fedora14' as a valid --os-version - (jlaska@redhat.com) -- No more self (shenson@redhat.com) -- Don't die if a single repo fails to sync. (shenson@redhat.com) -- Refactor: depluralize madhatter branch (kelsey.hightower@gmail.com) -- Updating setup.py and spec file. (kelsey.hightower@gmail.com) -- New unit tests: Mgmtclasses (kelsey.hightower@gmail.com) -- Updating cobbler/koan man pages with info on using the new configuration - management capabilities (kelsey.hightower@gmail.com) -- Cobbler web integration for new configuration management capabilities - (kelsey.hightower@gmail.com) -- Koan configuration management enhancements (kelsey.hightower@gmail.com) -- Cobbler configuration management enhancements (kelsey.hightower@gmail.com) -- New cobbler objects: mgmtclasses, packages, and files. - (kelsey.hightower@gmail.com) -- Merge remote branch 'jsabo/kickstart_done' (shenson@redhat.com) -- Move kickstart_done and kickstart_start out of kickgen.py and into their own - snippets. This also adds support for VMware ESX triggers and magic urls by - checking for the "vmware" breed and then using curl when that's all thats - available vs wget. VMware's installer makes wget available during the %%pre - section but only curl is around following install at %%post time. Yay! I've - also updated the sample kickstarts to use $SNIPPET('kickstart_done') and - $SNIPPET('kickstart_start') (jonathan.sabo@gmail.com) -- No more getting confused between otype and obj_type (shenson@redhat.com) -- The clean_link_cache method was calling subprocess_call without a logger - (shenson@redhat.com) -- Scott Henson pointed out that my earlier changes stopped a sync from also - copying kernel/initrd files into the web directry. Split out the targets - from the copy, and make sure that sync still copies to webdir, and then also - fixed where I wasn't copying those files in the synclite case. - (dkilpatrick@verisign.com) -- revert bad templates path (dkilpatrick@verisign.com) -- Put back code that I removed incorrectly. (sync DHCP, DNS) - (dkilpatrick@verisign.com) -- Support installing FreeBSD without an IP address set in the host record. - (dkilpatrick@verisign.com) -- Fixed some bugs in the special-case handling code, where I was not properly - handling kernel requests, because I'd merged some code that looked alike, but - couldn't actually be merged. (dkilpatrick@verisign.com) -- Two more fixes to bugs introduced by pytftpd patch set: * The generated - configs did not have initrd set propertly * Some extra debugging log lines - made it into remote.py (dkilpatrick@verisign.com) -- Fix Trac#530 by properly handling a logger being none. Additionally, make - subprocess_call and subprocess_get use common bits to reduce duplication. - (shenson@redhat.com) -- Fix a cobbler_web authentication leak issue. There are times when the token - that cobbelr_web had did not match the user logged in. This patch ensures - that the token always matches the user that is logged in. - (shenson@redhat.com) -- No more getting confused between otype and obj_type (shenson@redhat.com) -- The clean_link_cache method was calling subprocess_call without a logger - (shenson@redhat.com) -- Merge remote branch 'kilpatds/master' (shenson@redhat.com) -- Scott Henson pointed out that my earlier changes stopped a sync from also - copying kernel/initrd files into the web directry. Split out the targets - from the copy, and make sure that sync still copies to webdir, and then also - fixed where I wasn't copying those files in the synclite case. - (dkilpatrick@verisign.com) -- revert bad templates path (dkilpatrick@verisign.com) -- Put back code that I removed incorrectly. (sync DHCP, DNS) - (dkilpatrick@verisign.com) -- Support installing FreeBSD without an IP address set in the host record. - (dkilpatrick@verisign.com) -- Fixed some bugs in the special-case handling code, where I was not properly - handling kernel requests, because I'd merged some code that looked alike, but - couldn't actually be merged. (dkilpatrick@verisign.com) -- Two more fixes to bugs introduced by pytftpd patch set: * The generated - configs did not have initrd set propertly * Some extra debugging log lines - made it into remote.py (dkilpatrick@verisign.com) -- fast sync. A new way of copying files around using a link cache. It creates - a link cache per device and uses it as an intermediary so that files that are - the same are not copied multiple times. Should greatly speed up sync times. - (shenson@redhat.com) -- A few small fixes and a new feature for the Python tftp server * Support - environments where the MAC address is know, but the IP address is not - (private networks). I do this by waiting for pxelinux.0 to request a file - with the mac address added to the filename, and then look up the host by - MAC. * Fix my MAC lookup logic. I didn't know to look for the ARP type (01-, - at least for ethernet) added by pxelinux.0 * Fix up some log lines to make - more sense * Fix a bug where I didn't get handle an empty fetchable_files - properly, and didn't fall back to checking for profile matches. - (dkilpatrick@verisign.com) -- Two fixed to bad changes in my prior patch set. Sorry about that. * Bad path - in cobbler/action_sync.py. No "templates" * Bad generation of the default - boot menu. The first initrd from a profile was getting into the metadata - cache and hanging around, thus becoming the initrd for all labels. - (dkilpatrick@verisign.com) -- A smart tftp server, and a module to manage it - (dkilpatr@dkilpatr.verisign.com) -- Export the generated pxelinux.cfg file via the materialized system - information RPC method. This enables the python tftpd server below to serve - that file up without any sync being required. - (dkilpatr@dkilpatr.verisign.com) -- Move management of /tftpboot into modules. This is a setup step for a later - python tftpd server that will eliminate the need for much of this work. - (dkilpatr@dkilpatr.verisign.com) -- Fetchable Files attribute: Provides a new attribute similar in spirit to - mgmt_files, but with somewhat reversed meaning. - (dkilpatr@dkilpatr.verisign.com) -- fix log rotation to actually work (bpeck@redhat.com) -- find_kernel and find_initrd already do the right checks for file_is_remote - and return None if things are wrong. (bpeck@redhat.com) -- Trac #588 Add mercurial support for scm tracking (kelsey.hightower@gmail.com) -- Add a breed for scientific linux (shenson@redhat.com) -- "mgmt_parameters" for item_profile has the wrong default setting when - creating a sub_profile. I'm assuming that <> would be correct for a - sub_profile as well. (bpeck@redhat.com) -- The new setup.py placed webui_content in the wrong spot... - (akesling@redhat.com) -- Merge commit 'a81ca9a4c18f17f5f8d645abf03c0e525cd234e1' (jeckersb@redhat.com) -- Added back in old-style version tracking... because api.py needs it. - (akesling@redhat.com) -- Wrap the cobbler-web description (shenson@redhat.com) -- Create the tftpboot directory during install (shenson@redhat.com) -- Add in /var/lib/cobbler/loaders (shenson@redhat.com) -- Create the images directory so that selinux will be happy - (shenson@redhat.com) -- Dont install some things in the webroot and put the services script down - (shenson@redhat.com) -- Fix some issues with clean installs of cobbler post build cleanup - (shenson@redhat.com) -- rhel5 doesn't build egg-info by default. (bpeck@redhat.com) -- Some systems don't reboot properly at the end of install. s390 being one of - them. This post module will call power reboot if postreboot is in ks_meta for - that system. (bpeck@redhat.com) -- Changes to allow s390 to work. s390 has a hard limit on the number of chars - it can recieve. (bpeck@redhat.com) -- show netboot status via koan. This is really handy if you have a system which - fails to pxe boot you can create a service in rc.local which checks the - status of netboot and calls --replace-self for example. (bpeck@redhat.com) -- When adding in distros/profiles from disk don't bomb out if missing kernel or - ramdisk. just don't add it. (bpeck@redhat.com) -- add X log to anamon tracking as well. (bpeck@redhat.com) -- Added new remote method clear_logs. Clearing console and anamon logs in %%pre - is too late if the install never happens. (bpeck@redhat.com) -- fixes /var/www/cobbler/svc/services.py to canonicalize the uri before parsing - it. This fixes a regression with mod_wsgi enabled and trying to provision a - rhel3 machine. (bpeck@redhat.com) -- anaconda umounts /proc on us while were still running. Deal with it. - (bpeck@redhat.com) -- fix escape (bpeck@redhat.com) -- dont lowercase power type (bpeck@redhat.com) -- Bump to 2.1.0 (shenson@redhat.com) -- Properly detect unknown distributions (shenson@redhat.com) -- cobblerd service: Required-Start: network -> $network - (cristian.ciupitu@yahoo.com) -- cobblerd service: add Default-Stop to LSB header (cristian.ciupitu@yahoo.com) -- No more . on the end (shenson@redhat.com) -- Do not delete settings and modules.conf (shenson@redhat.com) -- Remove manpage generation from the make file (shenson@redhat.com) -- Update the author and author email (shenson@redhat.com) -- Proper ownership on some files (shenson@redhat.com) -- More rpm cleanups (shenson@redhat.com) -- Don't have the #! because rpm complains (shenson@redhat.com) -- No more selinux here, we should not be calling chcon, things will end up with - the proper context in a well configured selinux environment - (shenson@redhat.com) -- No more chowning the log file. (shenson@redhat.com) -- A new spec file to go with the new setup.py (shenson@redhat.com) -- Forgot to add aux to MANIFEST.in (akesling@redhat.com) -- Fixed naming scheme for web UI to make it more uniform, what was Puppet - Parameters is now Management Parameters. (akesling@redhat.com) -- Removed unnecessary cruft. (akesling@redhat.com) -- Reconfigured setup.py to now place config files and web ui content in the - right places. The paths are configurable like they were in the previous - setup.py, but everything is much cleaner. (akesling@redhat.com) -- Removed unnecessary templating functionality from configuration generation - (and setup.py) (akesling@redhat.com) -- Added more useful files to setup.py and MANIFEST.in as well as extra - functionality which setup.py should contain. (akesling@redhat.com) -- Massive overhaul of setup.py . Moved things around a little to clean up - building/packaging/distributing. The new setup.py is still incomplete. - (akesling@redhat.com) -- RPM specific changes to setup.cfg. (akesling@redhat.com) -- Currently working through making setup.py functional for generating rpms - dynamically. setup.py is just cobbler-web at the moment... and it appears to - work. The next things to do are test the current RPM and add in - functionality for reducing repetitive setup.py configuration lines. - (akesling@redhat.com) -- Changed list-view edit link from a javascript onclick event to an actual - link... so that you can now just open it in a new tab. (akesling@redhat.com) -- Added tip for random MAC Address functionality to System MAC Address field. - (akesling@redhat.com) -- Added "Puppet Parameters" attribute to Profile and System items. The new - input field is a textarea which takes proper a YAML formatted dictionary. - This data is used for the Puppet External Nodes api call (found in - services.py). (akesling@croissant.usersys.redhat.com) -- Resume apitesting assuming against local Cobbler server. (dgoodwin@rm-rf.ca) -- Replace rogue tab with whitespace. (dgoodwin@rm-rf.ca) -- Open all log files in append mode. Tasks should not be special. This - simplifies the handling of logging for selinux. (shenson@redhat.com) -- Add rendered dir to cobbler.spec. (dgoodwin@rm-rf.ca) -- Re-add mod_python dep only for cobbler-web. (dgoodwin@rm-rf.ca) -- initializing variable that is not always initialized but is always accessed - (jsherril@redhat.com) -- Merge remote branch 'pvreman/master' (shenson@redhat.com) -- add logging of triggers (peter.vreman@acision.com) -- add logging of triggers (peter.vreman@acision.com) -- cobbler-ext-nodes needs also to use http_port (peter.vreman@acision.com) -- Adding VMware ESX specific boot options (jonathan.sabo@gmail.com) -- Merge stable into master (shenson@redhat.com) -- Fix cobbler_web authentication in a way that doesn't break previously working - stuff (shenson@redhat.com) -- Allow qemu disk type to be specified. Contributed by Galia Lisovskaya - (shenson@redhat.com) -- Merge remote branch 'jsabo/esx' (shenson@redhat.com) -- Fix a bug where we were not looking for the syslinux provided menu.c32 before - going after the getloaders one (shenson@redhat.com) -- Fix cobbler_web authentication in a way that doesn't break previously working - stuff (shenson@redhat.com) -- More preparation for the release (shenson@redhat.com) -- Update spec file for release (shenson@redhat.com) -- Update changelog for release (shenson@redhat.com) -- Bugfix: fetch extra metadata from upstream repositories more safely - (icomfort@stanford.edu) -- Bugfix: allow the creation of subprofiles again (icomfort@stanford.edu) -- Don't warn needlessly when repo rpm_list is empty (icomfort@stanford.edu) -- Bugfix: run createrepo on partial yum mirrors (icomfort@stanford.edu) -- Change default mode for new directories from 0777 to 0755 - (icomfort@stanford.edu) -- Fix replication when prune is specified and no systems are specified. This - prevents us from killing systems on a slave that keeps its own systems. To - get the old behavior, just specify a systems list that won't match anything. - (shenson@redhat.com) -- Always authorize the CLI (shenson@redhat.com) -- Bugfix: fetch extra metadata from upstream repositories more safely - (icomfort@stanford.edu) -- Bugfix: allow the creation of subprofiles again (icomfort@stanford.edu) -- Don't warn needlessly when repo rpm_list is empty (icomfort@stanford.edu) -- Bugfix: run createrepo on partial yum mirrors (icomfort@stanford.edu) -- Change default mode for new directories from 0777 to 0755 - (icomfort@stanford.edu) -- Fix replication when prune is specified and no systems are specified. This - prevents us from killing systems on a slave that keeps its own systems. To - get the old behavior, just specify a systems list that won't match anything. - (shenson@redhat.com) -- Always authorize the CLI (shenson@redhat.com) -- Merge branch 'wsgi' (dgoodwin@rm-rf.ca) -- Adding VMware ESX 4 update 1 support (jonathan.sabo@gmail.com) -- remove references to apt support from the man page (jeckersb@redhat.com) -- wsgi: Service cleanup. (dgoodwin@rm-rf.ca) -- wsgi: Revert to old error handling. (dgoodwin@rm-rf.ca) -- wsgi: Switch Cobbler packaging/config from mod_python to mod_wsgi. (dgoodwin - @rm-rf.ca) -- wsgi: Return 404 when hitting svc URLs for missing objects. (dgoodwin@rm- - rf.ca) -- Merge branch 'master' into wsgi (dgoodwin@rm-rf.ca) -- wsgi: First cut of port to mod_wsgi. (dgoodwin@rm-rf.ca) - -* Thu Jun 17 2010 Scott Henson - 2.1.0-1 -- Bump upstream release - -* Tue Apr 27 2010 Scott Henson - 2.0.4-1 -- Bug fix release, see Changelog for details - -* Thu Apr 15 2010 Devan Goodwin 2.0.3.2-1 -- Tagging for new build tools. - -* Mon Mar 1 2010 Scott Henson - 2.0.3.1-3 -- Bump release because I forgot cobbler-web - -* Mon Mar 1 2010 Scott Henson - 2.0.3.1-2 -- Remove requires on mkinitrd as it is not used - -* Mon Feb 15 2010 Scott Henson - 2.0.3.1-1 -- Upstream Brown Paper Bag Release (see CHANGELOG) - -* Thu Feb 11 2010 Scott Henson - 2.0.3-1 -- Upstream changes (see CHANGELOG) - -* Mon Nov 23 2009 John Eckersberg - 2.0.2-1 -- Upstream changes (see CHANGELOG) - -* Tue Sep 15 2009 Michael DeHaan - 2.0.0-1 -- First release with unified spec files +%autochangelog diff --git a/cobbler.te b/cobbler.te new file mode 100644 index 0000000..d233f01 --- /dev/null +++ b/cobbler.te @@ -0,0 +1,249 @@ +policy_module(cobbler, 1.3.0) + +######################################## +# +# Declarations +# + +## +##

+## Determine whether Cobbler can modify +## public files used for public file +## transfer services. +##

+##
+gen_tunable(cobbler_anon_write, false) + +## +##

+## Determine whether Cobbler can connect +## to the network using TCP. +##

+##
+gen_tunable(cobbler_can_network_connect, false) + +## +##

+## Determine whether Cobbler can access +## cifs file systems. +##

+##
+gen_tunable(cobbler_use_cifs, false) + +## +##

+## Determine whether Cobbler can access +## nfs file systems. +##

+##
+gen_tunable(cobbler_use_nfs, false) + +gen_require(` + type debuginfo_exec_t; + type init_exec_t; + class file getattr; +') + +type cobblerd_t; +type cobblerd_exec_t; +init_daemon_domain(cobblerd_t, cobblerd_exec_t) + +type cobblerd_initrc_exec_t; +init_script_file(cobblerd_initrc_exec_t) + +type cobbler_etc_t; +files_config_file(cobbler_etc_t) + +type cobbler_var_log_t; +logging_log_file(cobbler_var_log_t) + +type cobbler_var_lib_t alias cobbler_content_t; +files_type(cobbler_var_lib_t) + +type cobbler_tmp_t; +files_tmp_file(cobbler_tmp_t) + +type cobblerd_unit_file_t; +systemd_unit_file(cobblerd_unit_file_t) + +######################################## +# +# Local policy +# + +allow cobblerd_t self:capability { chown dac_read_search fowner fsetid sys_nice }; +dontaudit cobblerd_t self:capability sys_tty_config; +allow cobblerd_t self:process { getsched setsched signal }; +allow cobblerd_t self:fifo_file rw_fifo_file_perms; +allow cobblerd_t self:tcp_socket { accept listen }; +allow cobblerd_t self:netlink_audit_socket create_socket_perms; + +allow cobblerd_t cobbler_etc_t:dir list_dir_perms; +allow cobblerd_t cobbler_etc_t:file read_file_perms; +allow cobblerd_t cobbler_etc_t:lnk_file read_lnk_file_perms; + +allow cobblerd_t cobbler_tmp_t:file mmap_file_perms; +# Allow cobbler to stat /usr/libexec/dnf-utils (aka reposync/yumdownloader) +allow cobblerd_t debuginfo_exec_t:file getattr; +# Allow cobbler to stat /usr/lib/systemd/systemd +allow cobblerd_t init_exec_t:file getattr; +# Allow cobbler to check status of itself +allow cobblerd_t cobblerd_unit_file_t:service status; + +manage_dirs_pattern(cobblerd_t, cobbler_tmp_t, cobbler_tmp_t) +manage_files_pattern(cobblerd_t, cobbler_tmp_t, cobbler_tmp_t) +files_tmp_filetrans(cobblerd_t, cobbler_tmp_t, { dir file }) + +manage_dirs_pattern(cobblerd_t, cobbler_var_lib_t, cobbler_var_lib_t) +manage_files_pattern(cobblerd_t, cobbler_var_lib_t, cobbler_var_lib_t) +manage_lnk_files_pattern(cobblerd_t, cobbler_var_lib_t, cobbler_var_lib_t) +files_var_lib_filetrans(cobblerd_t, cobbler_var_lib_t, dir) +files_var_filetrans(cobblerd_t, cobbler_var_lib_t, dir, "cobbler") + +append_files_pattern(cobblerd_t, cobbler_var_log_t, cobbler_var_log_t) +create_files_pattern(cobblerd_t, cobbler_var_log_t, cobbler_var_log_t) +read_files_pattern(cobblerd_t, cobbler_var_log_t, cobbler_var_log_t) +setattr_files_pattern(cobblerd_t, cobbler_var_log_t, cobbler_var_log_t) +logging_log_filetrans(cobblerd_t, cobbler_var_log_t, file) + +kernel_read_system_state(cobblerd_t) +kernel_read_network_state(cobblerd_t) + +corecmd_exec_bin(cobblerd_t) +corecmd_exec_shell(cobblerd_t) + +corenet_all_recvfrom_netlabel(cobblerd_t) +corenet_all_recvfrom_unlabeled(cobblerd_t) +corenet_tcp_sendrecv_generic_if(cobblerd_t) +corenet_tcp_sendrecv_generic_node(cobblerd_t) +corenet_tcp_bind_generic_node(cobblerd_t) + +corenet_sendrecv_cobbler_server_packets(cobblerd_t) +corenet_tcp_bind_cobbler_port(cobblerd_t) +corenet_tcp_sendrecv_cobbler_port(cobblerd_t) + +corenet_sendrecv_ftp_client_packets(cobblerd_t) +corenet_tcp_connect_ftp_port(cobblerd_t) +corenet_tcp_sendrecv_ftp_port(cobblerd_t) + +corenet_tcp_sendrecv_http_port(cobblerd_t) +corenet_tcp_connect_http_port(cobblerd_t) +corenet_sendrecv_http_client_packets(cobblerd_t) + +dev_read_sysfs(cobblerd_t) +dev_read_urand(cobblerd_t) + +files_list_boot(cobblerd_t) +files_list_tmp(cobblerd_t) +files_read_boot_files(cobblerd_t) +files_read_etc_runtime_files(cobblerd_t) + +fs_getattr_all_fs(cobblerd_t) +fs_read_iso9660_files(cobblerd_t) + +selinux_get_enforce_mode(cobblerd_t) + +term_use_console(cobblerd_t) + +auth_use_nsswitch(cobblerd_t) + +logging_send_syslog_msg(cobblerd_t) + +miscfiles_read_localization(cobblerd_t) +miscfiles_read_public_files(cobblerd_t) + +sysnet_dns_name_resolve(cobblerd_t) +sysnet_rw_dhcp_config(cobblerd_t) +sysnet_write_config(cobblerd_t) + +tunable_policy(`cobbler_anon_write',` + miscfiles_manage_public_files(cobblerd_t) +') + +tunable_policy(`cobbler_can_network_connect',` + corenet_sendrecv_all_client_packets(cobblerd_t) + corenet_tcp_connect_all_ports(cobblerd_t) + corenet_tcp_sendrecv_all_ports(cobblerd_t) +') + +tunable_policy(`cobbler_use_cifs',` + fs_manage_cifs_dirs(cobblerd_t) + fs_manage_cifs_files(cobblerd_t) + fs_manage_cifs_symlinks(cobblerd_t) +') + +tunable_policy(`cobbler_use_nfs',` + fs_manage_nfs_dirs(cobblerd_t) + fs_manage_nfs_files(cobblerd_t) + fs_manage_nfs_symlinks(cobblerd_t) +') + +optional_policy(` + apache_search_config(cobblerd_t) + apache_domtrans(cobblerd_t) + apache_search_sys_content(cobblerd_t) +') + +optional_policy(` + bind_read_config(cobblerd_t) + bind_write_config(cobblerd_t) + bind_domtrans_ndc(cobblerd_t) + bind_domtrans(cobblerd_t) + bind_initrc_domtrans(cobblerd_t) + bind_manage_zone(cobblerd_t) + bind_systemctl(cobblerd_t) +') + +optional_policy(` + certmaster_exec(cobblerd_t) +') + +optional_policy(` + dhcpd_domtrans(cobblerd_t) + dhcpd_initrc_domtrans(cobblerd_t) + dhcpd_systemctl(cobblerd_t) +') + +optional_policy(` + dnsmasq_domtrans(cobblerd_t) + dnsmasq_initrc_domtrans(cobblerd_t) + dnsmasq_write_config(cobblerd_t) + dnsmasq_systemctl(cobblerd_t) +') + +# To read /boot/efi +optional_policy(` + fs_list_dos(cobblerd_t) + fs_read_dos_files(cobblerd_t) +') + +# To run mkfs.fat when generating ISO +optional_policy(` + fstools_exec(cobblerd_t) +') + +optional_policy(` + libs_exec_ldconfig(cobblerd_t) +') + +optional_policy(` + mysql_stream_connect(cobblerd_t) +') + +optional_policy(` + rpm_exec(cobblerd_t) +') + +optional_policy(` + rsync_exec(cobblerd_t) + rsync_read_config(cobblerd_t) + rsync_manage_config(cobblerd_t) + rsync_etc_filetrans_config(cobblerd_t, file, "rsync.conf") +') + +optional_policy(` + tftp_manage_config(cobblerd_t) + tftp_manage_rw_content(cobblerd_t) + tftp_delete_content_dirs(cobblerd_t) + tftp_filetrans_tftpdir(cobblerd_t, cobbler_var_lib_t, { dir file }) +') diff --git a/cobblerd.service b/cobblerd.service deleted file mode 100644 index 0df27d9..0000000 --- a/cobblerd.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=Cobbler Helper Daemon -After=syslog.target network.target - -[Service] -Type=oneshot -ExecStart=/usr/bin/cobblerd -RemainAfterExit=yes -PrivateTmp=yes - -[Install] -WantedBy=multi-user.target - diff --git a/migrate-settings.sh b/migrate-settings.sh new file mode 100644 index 0000000..6ef3c1a --- /dev/null +++ b/migrate-settings.sh @@ -0,0 +1,4 @@ +#!/bin/bash +sed -i -e 's,^default_kickstart: */var/lib/cobbler/kickstarts,default_autoinstall: /var/lib/cobbler/templates,' \ + -e '/^\(consoles\|func_\|kernel_options_s390x\|power_template_dir\|pxe_template_dir\|redhat_management_type\|snippetsdir\|template_remote_kickstarts\):/s/^/# REMOVED: /' \ + -e '$a#ADDED:' -e '$acache_enabled: true' -e '$areposync_rsync_flags: "-rltDv --copy-unsafe-links"' /etc/cobbler/settings.yaml diff --git a/sources b/sources index 5301563..ba2585a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (cobbler-2.8.5.tar.gz) = 6097618b6ad394f23f496eee14a74a334162b2d420c39059bf54472a44b4a6a645faf9ee50139f7c169503d34524489282b03a2f7318ca8b276745cc518567a7 +SHA512 (cobbler-3.3.7.tar.gz) = df6570dd7c6cbe50464624267df1bbecbb29e60513bba312a6c726502d4670670f3113f24b6b7e465d0b3353c0721e6fe3725dbc4569b4f624ec2b4a29682d1a