diff --git a/Alinux2-major-version.patch b/Alinux2-major-version.patch new file mode 100644 index 0000000000000000000000000000000000000000..0aaa4750196b969c89276e29d72a2e6553797edc --- /dev/null +++ b/Alinux2-major-version.patch @@ -0,0 +1,13 @@ +--- cloud-init-19.1.17/cloudinit/distros/__init__.py 2022-06-07 14:44:58.177785719 +0800 ++++ cloud-init-19.1.17-edit/cloudinit/distros/__init__.py 2022-06-15 10:40:51.529972303 +0800 +@@ -845,7 +845,7 @@ + return '' + + def fix_release(release): +- if not isinstance(release, (str)): ++ if not isinstance(release.encode(), (str)): + return ('', '') + if '.' not in release: + release += '.' + + diff --git a/Enable-ipv6-network-by-default.patch b/Enable-ipv6-network-by-default.patch new file mode 100644 index 0000000000000000000000000000000000000000..432a1d788eb54404c6fdaa210bda0d5d0a860baa --- /dev/null +++ b/Enable-ipv6-network-by-default.patch @@ -0,0 +1,11 @@ +--- cloud-init-19.1.14/config/cloud.cfg.tmpl 2021-12-14 11:10:30.000000000 +0800 ++++ cloud-init-19.1.14-edit/config/cloud.cfg.tmpl 2022-05-23 20:57:09.060790268 +0800 +@@ -22,7 +22,7 @@ + + manage_etc_hosts: localhost + +-{% if variant in ["sles","opensuse","aliyun"]%} ++{% if variant in ["sles","opensuse"]%} + network: + config: disabled + {% endif%} diff --git a/Startup-sequence.patch b/Startup-sequence.patch new file mode 100755 index 0000000000000000000000000000000000000000..cc5de5cca1c47abbf99d6a27e44b34080c5e41cf --- /dev/null +++ b/Startup-sequence.patch @@ -0,0 +1,11 @@ +--- cloud-init-19.1.17/systemd/cloud-init.service.tmpl 2022-04-11 14:34:19.000000000 +0800 ++++ cloud-init-19.1.17-edit/systemd/cloud-init.service.tmpl 2022-06-01 10:58:16.192530151 +0800 +@@ -10,7 +10,7 @@ + {% if variant in ["ubuntu", "unknown", "debian"] %} + After=networking.service + {% endif %} +-{% if variant in ["centos", "fedora", "redhat"] %} ++{% if variant in ["centos", "fedora", "redhat", "anolis", "aliyun"] %} + After=network.service + {% endif %} + {% if variant in ["sles"] %} diff --git a/cloud-init-19.1.17.tgz b/cloud-init-19.1.17.tgz new file mode 100644 index 0000000000000000000000000000000000000000..efb9e6ca12bca791051bde7b988ec14bfd759f5b Binary files /dev/null and b/cloud-init-19.1.17.tgz differ diff --git a/cloud-init.spec b/cloud-init.spec new file mode 100644 index 0000000000000000000000000000000000000000..8c914dff0e779e51485ff513a168d4d746de110f --- /dev/null +++ b/cloud-init.spec @@ -0,0 +1,282 @@ +%define anolis_release .0.1 +%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} + +%define use_systemd 1 +%define __python /usr/bin/python2 + +%if %{use_systemd} +%define init_system systemd +%else +%define init_system sysvinit +%endif + +# See: http://www.zarb.org/~jasonc/macros.php +# Or: http://fedoraproject.org/wiki/Packaging:ScriptletSnippets +# Or: http://www.rpm.org/max-rpm/ch-rpm-inside.html + +Name: cloud-init +Version: 19.1.17 +Release: 1%{anolis_release}%{?dist} +Summary: Cloud instance init scripts + +Group: System Environment/Base +License: Dual-licesed GPLv3 or Apache 2.0 +URL: http://launchpad.net/cloud-init + +Source0: cloud-init-19.1.17.tgz + +Patch0: Startup-sequence.patch +Patch1: Enable-ipv6-network-by-default.patch +Patch2: Alinux2-major-version.patch + +BuildArch: noarch +BuildRoot: %{_tmppath} + +%if "%{?el6}" == "1" +BuildRequires: python-argparse +%endif +%if %{use_systemd} +Requires: systemd +BuildRequires: systemd +Requires: systemd-units +BuildRequires: systemd-units +%else +Requires: initscripts >= 8.36 +Requires(postun): initscripts +Requires(post): chkconfig +Requires(preun): chkconfig +%endif + +# These are runtime dependencies, but declared as BuildRequires so that +# - tests can be run here. +# - parts of cloud-init such (setup.py) use these dependencies. +BuildRequires: python-requests +BuildRequires: python-configobj +# BuildRequires: python-jsonschema +BuildRequires: python-six +BuildRequires: python-jinja2 +BuildRequires: PyYAML +BuildRequires: python-oauthlib +BuildRequires: python-jsonpatch +BuildRequires: e2fsprogs +BuildRequires: iproute +BuildRequires: net-tools +BuildRequires: procps +BuildRequires: rsyslog +BuildRequires: shadow-utils +BuildRequires: sudo +BuildRequires: python-devel +BuildRequires: python-setuptools + +# System util packages needed +%ifarch %{?ix86} x86_64 ia64 +Requires: dmidecode +%endif + +# python2.6 needs argparse +%if "%{?el6}" == "1" +Requires: python-argparse +%endif + + +# Install 'dynamic' runtime reqs from *requirements.txt and pkg-deps.json +Requires: python-requests +Requires: python-configobj +# Requires: python-jsonschema +Requires: python-six +Requires: python-jinja2 +Requires: PyYAML +Requires: python-oauthlib +Requires: python-jsonpatch +Requires: e2fsprogs +Requires: iproute +Requires: net-tools +Requires: procps +Requires: rsyslog +Requires: shadow-utils +Requires: sudo +Requires: python-devel +Requires: python-setuptools + +# Custom patches + +%if "%{init_system}" == "systemd" +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +%else +Requires(post): chkconfig +Requires(postun): initscripts +Requires(preun): chkconfig +Requires(preun): initscripts +%endif + +%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 +%setup -q -n cloud-init-19.1.17 +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 + +# Custom patches activation + +%build +%{__python} setup.py build + +%install + +%{__python} setup.py install -O1 \ + --skip-build --root $RPM_BUILD_ROOT \ + --init-system=%{init_system} + +# Note that /etc/rsyslog.d didn't exist by default until F15. +# el6 request: https://bugzilla.redhat.com/show_bug.cgi?id=740420 +mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d +cp -p tools/21-cloudinit.conf \ + $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d/21-cloudinit.conf + +# Remove the tests +rm -rf $RPM_BUILD_ROOT%{python_sitelib}/tests + +# Required dirs... +mkdir -p $RPM_BUILD_ROOT/%{_sharedstatedir}/cloud +mkdir -p $RPM_BUILD_ROOT/%{_libexecdir}/%{name} + +# patch in the full version to version.py +version_pys=$(cd "$RPM_BUILD_ROOT" && find . -name version.py -type f) +[ -n "$version_pys" ] || + { echo "failed to find 'version.py' to patch with version." 1>&2; exit 1; } +( cd "$RPM_BUILD_ROOT" && + sed -i "s,@@PACKAGED_VERSION@@,%{version}-%{release}," $version_pys ) + +%clean +rm -rf $RPM_BUILD_ROOT + +%post + +%if "%{init_system}" == "systemd" +if [ $1 -eq 1 ] +then + /bin/systemctl enable cloud-config.service >/dev/null 2>&1 || : + /bin/systemctl enable cloud-final.service >/dev/null 2>&1 || : + /bin/systemctl enable cloud-init.service >/dev/null 2>&1 || : + /bin/systemctl enable cloud-init-local.service >/dev/null 2>&1 || : +fi +grep -Eiq 'qboot|quick boot' /etc/image-id && sed -i "/Before=sshd.service/d" /usr/lib/systemd/system/cloud-init.service +grep -Eiq 'qboot|quick boot' /etc/image-id && sed -i "/Before=sshd-keygen.service/d" /usr/lib/systemd/system/cloud-init.service +grep -Eiq 'qboot|quick boot' /etc/image-id && sed -i "s/Before=network-online.target/After=network-online.target/g" /usr/lib/systemd/system/cloud-init.service +grep -Eiq 'qboot|quick boot' /etc/image-id && sed -i "/Wants=network-pre.target/d" /usr/lib/systemd/system/cloud-init-local.service +grep -Eiq 'qboot|quick boot' /etc/image-id && sed -i "/Before=NetworkManager.service/d" /usr/lib/systemd/system/cloud-init-local.service +grep -Eiq 'qboot|quick boot' /etc/image-id && sed -i "s/Before=network-pre.target/Requires=network-online.target/g" /usr/lib/systemd/system/cloud-init-local.service +grep -Eiq 'qboot|quick boot' /etc/image-id && sed -i "s/After=systemd-remount-fs.service/After=systemd-remount-fs.service network-online.target/g" /usr/lib/systemd/system/cloud-init-local.service +%else +/sbin/chkconfig --add %{_initrddir}/cloud-init-local +/sbin/chkconfig --add %{_initrddir}/cloud-init +/sbin/chkconfig --add %{_initrddir}/cloud-config +/sbin/chkconfig --add %{_initrddir}/cloud-final +%endif +ln -sf /sys/firmware/qemu_fw_cfg/by_name/etc/cloud-init/vendor-data/raw /etc/cloud/cloud.cfg.d/aliyun_cloud.cfg +%preun + +%if "%{init_system}" == "systemd" +if [ $1 -eq 0 ] +then + /bin/systemctl --no-reload disable cloud-config.service >/dev/null 2>&1 || : + /bin/systemctl --no-reload disable cloud-final.service >/dev/null 2>&1 || : + /bin/systemctl --no-reload disable cloud-init.service >/dev/null 2>&1 || : + /bin/systemctl --no-reload disable cloud-init-local.service >/dev/null 2>&1 || : +fi +%else +if [ $1 -eq 0 ] +then + /sbin/service cloud-init stop >/dev/null 2>&1 || : + /sbin/chkconfig --del cloud-init || : + /sbin/service cloud-init-local stop >/dev/null 2>&1 || : + /sbin/chkconfig --del cloud-init-local || : + /sbin/service cloud-config stop >/dev/null 2>&1 || : + /sbin/chkconfig --del cloud-config || : + /sbin/service cloud-final stop >/dev/null 2>&1 || : + /sbin/chkconfig --del cloud-final || : +fi +%endif + +%postun + +%if "%{init_system}" == "systemd" +/bin/systemctl daemon-reload >/dev/null 2>&1 || : +%endif + +%files + +/lib/udev/rules.d/66-azure-ephemeral.rules + +%if "%{init_system}" == "systemd" +/usr/lib/systemd/system-generators/cloud-init-generator +%{_unitdir}/cloud-* +%else +%attr(0755, root, root) %{_initddir}/cloud-config +%attr(0755, root, root) %{_initddir}/cloud-final +%attr(0755, root, root) %{_initddir}/cloud-init-local +%attr(0755, root, root) %{_initddir}/cloud-init +%endif + +%{_sysconfdir}/NetworkManager/dispatcher.d/hook-network-manager +%{_sysconfdir}/dhcp/dhclient-exit-hooks.d/hook-dhclient + +# Program binaries +%{_bindir}/cloud-init* +%{_bindir}/cloud-id* + +# Docs +%doc LICENSE ChangeLog TODO.rst requirements.txt +%doc %{_defaultdocdir}/cloud-init/* + +# Configs +%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg +%dir %{_sysconfdir}/cloud/cloud.cfg.d +%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/*.cfg +%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/README +%dir %{_sysconfdir}/cloud/templates +%config(noreplace) %{_sysconfdir}/cloud/templates/* +%config(noreplace) %{_sysconfdir}/rsyslog.d/21-cloudinit.conf + +# Bash completion script +%{_datadir}/bash-completion/completions/cloud-init + +%{_libexecdir}/%{name} +%dir %{_sharedstatedir}/cloud + +# Python code is here... +%{python_sitelib}/* + +%changelog +* Wed Jun 1 2022 Chang Gao - 19.1.17-1.1 +- Update to 19.1.17 +- Cancel disable network config +- Reconfig service startup sequence + +* Thu Dec 16 2021 Mingyue Zhao - 19.1.14-1.1 +- Supports non-root logins + +* Fri Dec 12 2021 Mingyue Zhao - 19.1.13-1.2 +- Fixed the Qboot image startup link timeout problem + +* Wed Dec 08 2021 Mingyue Zhao - 19.1.13-1.1 +- Optimized the Qboot image + +* Mon Dec 06 2021 Mingyue Zhao - 19.1.12-1.1 +- Optimized the Qboot image startup time + +* Sat Oct 16 2021 Weitao Zhou - 19.1.8-1.4 +- Bug fix: for Qboot Image, drop unexpected sshd service deps in cloud-init service + +* Thu Jul 08 2021 jingni.wjj - 19.1.8-1.3 +- Add support for Alibaba Cloud Linux 3 Qboot Image +- Add support for Anolis OS 8 + +* Mon May 17 2021 Weisson Han - 19.1.8-1.2 +- Initial version for Alibaba Cloud Linux 3 on ECS