From 503a230778058600a8a185df840be844df99aaed Mon Sep 17 00:00:00 2001 From: Neil Hanlon Date: Thu, 16 Feb 2023 14:32:19 -0500 Subject: [PATCH] Initial package --- .copr/Makefile | 14 +++ .gitignore | 2 + cloud-init-22.3-nm-default.patch | 94 ++++++++++++++++ cloud-init-tmpfiles.conf | 2 + cloud-init.spec | 185 +++++++++++++++++++++++++++++++ sources | 1 + 6 files changed, 298 insertions(+) create mode 100644 .copr/Makefile create mode 100644 .gitignore create mode 100644 cloud-init-22.3-nm-default.patch create mode 100644 cloud-init-tmpfiles.conf create mode 100644 cloud-init.spec create mode 100644 sources diff --git a/.copr/Makefile b/.copr/Makefile new file mode 100644 index 0000000..019eea2 --- /dev/null +++ b/.copr/Makefile @@ -0,0 +1,14 @@ +rpmbuild_src = $(shell rpmbuild --eval '%{_sourcedir}') +.PHONY: prepare srpm rpm + +prepare: + dnf -y install rpmdevtools rpm-build + cp *.patch $(rpmbuild_src) || true + spectool -g -R $(spec) + + +srpm: prepare + rpmbuild -bs --define "_srcrpmdir $(outdir)" $(spec) + +rpm: prepare + rpmbuild -bb --define "_rpmdir $(outdir)" $(spec) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f01921 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.tar.gz +rpmbuild diff --git a/cloud-init-22.3-nm-default.patch b/cloud-init-22.3-nm-default.patch new file mode 100644 index 0000000..fdca268 --- /dev/null +++ b/cloud-init-22.3-nm-default.patch @@ -0,0 +1,94 @@ +From 7703aa98b89c8daba207c28a0422268ead10019a Mon Sep 17 00:00:00 2001 +From: Emanuele Giuseppe Esposito +Date: Thu, 19 May 2022 15:05:01 +0200 +Subject: [PATCH] Use Network-Manager and Netplan as default renderers for RHEL + and Fedora (#1465) + +This is adapted from Neal Gompa's PR: +https://github.com/canonical/cloud-init/pull/1435 + +The only difference is that we are not modifying renderers.py (thus +modifying the priority of all distros), but just tweaking cloud.cfg to +apply this change to Fedora and RHEL. Other distros can optionally +add themselves afterwards. + + net: Prefer Netplan and NetworkManager renderers by default + + NetworkManager is used by default on a variety of Linux distributions, + and exists as a cross-distribution network management service. + + Additionally, add information about the NetworkManager renderer to + the cloud-init documentation. + + Because Netplan can be explicitly used to manage NetworkManager, + it needs to be preferred before NetworkManager. + + This change is a follow-up to #1224, which added the native + NetworkManager renderer. + This patch has been deployed on Fedora's cloud-init package throughout + the development of Fedora Linux 36 to verify that it works. + + This should also make it tremendously easier for Linux distributions + to use cloud-init because now a standard configuration is supported + by default. + + Signed-off-by: Neal Gompa + +Signed-off-by: Emanuele Giuseppe Esposito +--- + config/cloud.cfg.tmpl | 3 +++ + doc/rtd/topics/network-config.rst | 12 +++++++++++- + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/config/cloud.cfg.tmpl b/config/cloud.cfg.tmpl +index 6951a0e3..707a050c 100644 +--- a/config/cloud.cfg.tmpl ++++ b/config/cloud.cfg.tmpl +@@ -349,4 +349,7 @@ system_info: + {% elif variant in ["dragonfly"] %} + network: + renderers: ['freebsd'] ++{% elif variant in ["rhel", "fedora"] %} ++ network: ++ renderers: ['netplan', 'network-manager', 'networkd', 'sysconfig', 'eni'] + {% endif %} +diff --git a/doc/rtd/topics/network-config.rst b/doc/rtd/topics/network-config.rst +index c461a3fe..f503caab 100644 +--- a/doc/rtd/topics/network-config.rst ++++ b/doc/rtd/topics/network-config.rst +@@ -188,6 +188,15 @@ generated configuration into an internal network configuration state. From + this state `Cloud-init`_ delegates rendering of the configuration to Distro + supported formats. The following ``renderers`` are supported in cloud-init: + ++- **NetworkManager** ++ ++`NetworkManager `_ is the standard Linux network ++configuration tool suite. It supports a wide range of networking setups. ++Configuration is typically stored in ``/etc/NetworkManager``. ++ ++It is the default for a number of Linux distributions, notably Fedora; ++CentOS/RHEL; and derivatives. ++ + - **ENI** + + /etc/network/interfaces or ``ENI`` is supported by the ``ifupdown`` package +@@ -215,6 +224,7 @@ is as follows: + - ENI + - Sysconfig + - Netplan ++- NetworkManager + + When applying the policy, `Cloud-init`_ checks if the current instance has the + correct binaries and paths to support the renderer. The first renderer that +@@ -223,7 +233,7 @@ supplying an updated configuration in cloud-config. :: + + system_info: + network: +- renderers: ['netplan', 'eni', 'sysconfig', 'freebsd', 'netbsd', 'openbsd'] ++ renderers: ['netplan', 'network-manager', 'eni', 'sysconfig', 'freebsd', 'netbsd', 'openbsd'] + + + Network Configuration Tools +-- +2.36.1 + diff --git a/cloud-init-tmpfiles.conf b/cloud-init-tmpfiles.conf new file mode 100644 index 0000000..ea73e30 --- /dev/null +++ b/cloud-init-tmpfiles.conf @@ -0,0 +1,2 @@ +d /run/cloud-init 0700 root root - - + diff --git a/cloud-init.spec b/cloud-init.spec new file mode 100644 index 0000000..e8ec1da --- /dev/null +++ b/cloud-init.spec @@ -0,0 +1,185 @@ +Name: cloud-init +Version: 22.2.2 +Release: 0%{?dist} +Summary: Cloud instance init scripts +License: ASL 2.0 or GPLv3 +URL: http://launchpad.net/cloud-init + +Source0: https://launchpad.net/cloud-init/trunk/%{version}/+download/%{name}-%{version}.tar.gz +Source1: cloud-init-tmpfiles.conf + +# Default to NetworkManager for configuration renderer +# https://bugzilla.redhat.com/show_bug.cgi?id=2014701 +# From: https://github.com/canonical/cloud-init/commit/7703aa98b89c8daba207c28a0422268ead10019a +Patch1: cloud-init-22.3-nm-default.patch + +BuildArch: noarch + +BuildRequires: pkgconfig(systemd) +BuildRequires: systemd-rpm-macros +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: systemd + +# For tests +BuildRequires: python3-pytest +BuildRequires: python3-pytest-mock +BuildRequires: iproute +BuildRequires: passwd +BuildRequires: python3-configobj +# https://bugzilla.redhat.com/show_bug.cgi?id=1695953 +BuildRequires: python3-distro +# https://bugzilla.redhat.com/show_bug.cgi?id=1417029 +BuildRequires: python3-httpretty >= 0.8.14-2 +BuildRequires: python3-jinja2 +BuildRequires: python3-jsonpatch +BuildRequires: python3-jsonschema +BuildRequires: python3-tox +BuildRequires: python3-oauthlib +BuildRequires: python3-prettytable +BuildRequires: python3-pyserial +BuildRequires: python3-PyYAML +BuildRequires: python3-requests +BuildRequires: python3-responses +BuildRequires: python3-six +BuildRequires: python3-netifaces +# dnf is needed to make cc_ntp unit tests work +# https://bugs.launchpad.net/cloud-init/+bug/1721573 +BuildRequires: /usr/bin/dnf + +Requires: dhcp-client +Requires: hostname +Requires: e2fsprogs +Requires: iproute +Requires: python3-libselinux +Requires: net-tools +Requires: policycoreutils-python3 +Requires: procps +Requires: python3-configobj +# https://bugzilla.redhat.com/show_bug.cgi?id=1695953 +Requires: python3-distro +Requires: python3-jinja2 +Requires: python3-jsonpatch +Requires: python3-jsonschema +Requires: python3-oauthlib +Requires: python3-prettytable +Requires: python3-pyserial +Requires: python3-PyYAML +Requires: python3-requests +Requires: python3-six +Requires: shadow-utils +Requires: util-linux +Requires: xfsprogs +# https://bugzilla.redhat.com/show_bug.cgi?id=1974262 +Requires: gdisk +Requires: openssl + +%{?systemd_requires} + + +%description +Cloud-init is a set of init scripts for cloud instances. Cloud instances +need special scripts to run during initialization to retrieve and install +ssh keys and to let the user run various scripts. + + +%prep +%autosetup -p1 + +# Change shebangs +sed -i -e 's|#!/usr/bin/env python|#!/usr/bin/env python3|' \ + -e 's|#!/usr/bin/python|#!/usr/bin/python3|' tools/* cloudinit/ssh_util.py + +# Removing shebang manually because of rpmlint, will update upstream later +sed -i -e 's|#!/usr/bin/python||' cloudinit/cmd/main.py + +# Use unittest from the standard library. unittest2 is old and being +# retired in Fedora. See https://bugzilla.redhat.com/show_bug.cgi?id=1794222 +find tests/ -type f | xargs sed -i s/unittest2/unittest/ +find tests/ -type f | xargs sed -i s/assertItemsEqual/assertCountEqual/ + +%build +%py3_build + + +%install +%py3_install -- --init-system=systemd + +# Generate cloud-config file +python3 tools/render-cloudcfg --variant %{?rhel:rhel}%{!?rhel:fedora} > $RPM_BUILD_ROOT/%{_sysconfdir}/cloud/cloud.cfg + +mkdir -p $RPM_BUILD_ROOT/var/lib/cloud + +# /run/cloud-init needs a tmpfiles.d entry +mkdir -p $RPM_BUILD_ROOT/run/cloud-init +mkdir -p $RPM_BUILD_ROOT/%{_tmpfilesdir} +cp -p %{SOURCE1} $RPM_BUILD_ROOT/%{_tmpfilesdir}/%{name}.conf + +mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d +cp -p tools/21-cloudinit.conf $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d/21-cloudinit.conf + +# installing man pages +mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1/ +for man in cloud-id.1 cloud-init.1 cloud-init-per.1; do + install -c -m 0644 doc/man/${man} ${RPM_BUILD_ROOT}%{_mandir}/man1/${man} + chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man1/* +done + +# Put files in /etc/systemd/system in the right place +cp -a %{buildroot}/etc/systemd %{buildroot}/usr/lib +rm -rf %{buildroot}/etc/systemd + +%check +python3 -m pytest tests/unittests + +%post +%systemd_post cloud-config.service cloud-config.target cloud-final.service cloud-init.service cloud-init.target cloud-init-local.service + + +%preun +%systemd_preun cloud-config.service cloud-config.target cloud-final.service cloud-init.service cloud-init.target cloud-init-local.service + + +%postun +%systemd_postun cloud-config.service cloud-config.target cloud-final.service cloud-init.service cloud-init.target cloud-init-local.service + + +%files +%license LICENSE LICENSE-Apache2.0 LICENSE-GPLv3 +%doc ChangeLog +%doc doc/* +%{_mandir}/man1/* +%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg +%dir %{_sysconfdir}/cloud/cloud.cfg.d +%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/*.cfg +%doc %{_sysconfdir}/cloud/cloud.cfg.d/README +%dir %{_sysconfdir}/cloud/templates +%config(noreplace) %{_sysconfdir}/cloud/templates/* +%dir %{_sysconfdir}/rsyslog.d +%config(noreplace) %{_sysconfdir}/rsyslog.d/21-cloudinit.conf +%{_sysconfdir}/NetworkManager/dispatcher.d/hook-network-manager +%{_sysconfdir}/dhcp/dhclient-exit-hooks.d/hook-dhclient +/lib/udev/rules.d/66-azure-ephemeral.rules +%{_unitdir}/cloud-config.service +%{_unitdir}/cloud-final.service +%{_unitdir}/cloud-init.service +%{_unitdir}/cloud-init-local.service +%{_unitdir}/cloud-config.target +%{_unitdir}/cloud-init.target +/usr/lib/systemd/system-generators/cloud-init-generator +%{_unitdir}/cloud-init-hotplugd.service +%{_unitdir}/cloud-init-hotplugd.socket +%{_unitdir}/sshd-keygen@.service.d/disable-sshd-keygen-if-cloud-init-active.conf +%{_tmpfilesdir}/%{name}.conf +%{python3_sitelib}/* +%{_libexecdir}/%{name} +%{_bindir}/cloud-init* +%{_bindir}/cloud-id +%dir /run/cloud-init +%dir /var/lib/cloud +%{_datadir}/bash-completion/completions/cloud-init + + +%changelog +* Thu Feb 16 2023 Neil Hanlon - 22.2.2-0 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild diff --git a/sources b/sources new file mode 100644 index 0000000..2542d03 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA256 (cloud-init-22.2.2.tar.gz) = cdf04d1e1ab75cdbefeba19bf53e85201c2dd7666d68e2cd6e44b11920fadac6