summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpackages/brpm106
-rw-r--r--packages/redhat/cloud-init.spec179
-rwxr-xr-xsetup.py8
3 files changed, 171 insertions, 122 deletions
diff --git a/packages/brpm b/packages/brpm
index bbf30565..3abd9f15 100755
--- a/packages/brpm
+++ b/packages/brpm
@@ -71,6 +71,7 @@ def get_log_header(version):
def format_change_line(ds, who, comment=None):
+ # Rpmbuild seems to be pretty strict about the date format
d = ds.strftime("%a %b %d %Y")
d += " - %s" % (who)
if comment:
@@ -134,94 +135,22 @@ def generate_spec_contents(args, tmpl_fn):
changelog_lines.append(line)
subs['changelog'] = "\n".join(changelog_lines)
- # See: http://www.zarb.org/~jasonc/macros.php
- # Pickup any special files
- docs = [
- 'TODO',
- 'LICENSE',
- 'ChangeLog',
- 'Requires',
- '%{_defaultdocdir}/cloud-init/*',
- ]
- subs['docs'] = docs
- configs = [
- 'cloud/cloud.cfg',
- 'cloud/cloud.cfg.d/*.cfg',
- 'cloud/cloud.cfg.d/README',
- 'cloud/templates/*',
- ]
- subs['configs'] = configs
- other_files = [
- '%{_bindir}/*',
- '/usr/lib/cloud-init/*',
- ]
-
- # Since setup.py installs them all, we need to selectively
- # remove the wrong ones and ensure the right one/s are kept
- # for the boot mode that is desired...
- boot_remove = {
- 'initd': [
- '/etc/init.d/cloud-init-local',
- # Remove the other auto-start folders
- '/etc/systemd/',
- '/etc/init/',
- ],
- 'initd-local': [
- '/etc/init.d/cloud-init',
- # Remove the other auto-start folders
- '/etc/systemd/',
- '/etc/init/',
- ],
- # It seems like systemd can work with
- # all of its files being 'active' (and not have naming
- # or event name conflicts??)
- 'systemd': [
- # Remove the other auto-start folders
- '/etc/init.d/',
- '/etc/init/',
- ],
- 'upstart': [
- '/etc/init/cloud-init-nonet.conf',
- '/etc/init/cloud-init-local.conf',
- # Remove the other auto-start folders
- '/etc/init.d/',
- '/etc/systemd/',
- ],
- 'upstart-local': [
- '/etc/init/cloud-init.conf',
- # Remove the other auto-start folders
- '/etc/init.d/',
- '/etc/systemd/',
- ]
- }
- boot_keep = {
- 'systemd': [
- '/etc/systemd/*',
- ],
- 'upstart': [
- '/etc/init/*',
- ],
- 'upstart-local': [
- '/etc/init/*',
- ],
- 'initd-local': [
- '/etc/init.d/*',
- ],
- 'initd': [
- '/etc/init.d/*',
- ],
- }
- subs['post_remove'] = boot_remove[args.boot]
- other_files.extend(boot_keep[args.boot])
- subs['files'] = other_files
- return templater.render_from_file(tmpl_fn, params=subs)
+ if args.boot == 'initd':
+ subs['init_d'] = True
+ subs['init_d_local'] = False
+ elif args.boot == 'initd-local':
+ subs['init_d'] = True
+ subs['init_d_local'] = True
+ else:
+ subs['init_d'] = False
+ subs['init_d_local'] = False
+
+ if args.boot == 'systemd':
+ subs['systemd'] = True
+ else:
+ subs['systemd'] = False
-
-def archive_code():
- (stdout, _stderr) = tiny_p([sys.executable,
- join(os.getcwd(), 'make-tarball')])
- (revno, version, bname, arc_fn) = stdout.split(None)
- return (revno, version, arc_fn)
+ return templater.render_from_file(tmpl_fn, params=subs)
def main():
@@ -230,8 +159,7 @@ def main():
parser.add_argument("-b", "--boot", dest="boot",
help="select boot type (default: %(default)s)",
metavar="TYPE", default='initd',
- choices=('upstart', 'initd', 'systemd',
- 'upstart-local', 'initd-local'))
+ choices=('initd', 'systemd', 'initd-local'))
parser.add_argument("-v", "--verbose", dest="verbose",
help=("run verbosely"
" (default: %(default)s)"),
diff --git a/packages/redhat/cloud-init.spec b/packages/redhat/cloud-init.spec
index ddb6617d..e9ce087a 100644
--- a/packages/redhat/cloud-init.spec
+++ b/packages/redhat/cloud-init.spec
@@ -1,5 +1,9 @@
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+# See: 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: {{version}}
Release: {{release}}%{?dist}
@@ -10,27 +14,45 @@ License: GPLv3
URL: http://launchpad.net/cloud-init
Source0: {{archive_name}}
-
BuildArch: noarch
-
BuildRoot: %{_tmppath}
+BuildRequires: python-devel
+BuildRequires: python-setuptools
-{{for r in bd_requires}}
-BuildRequires: {{r}}
-{{endfor}}
+# System util packages needed
+Requires: shadow-utils
+Requires: rsyslog
+Requires: iproute
+Requires: e2fsprogs
+Requires: net-tools
+Requires: procps
+Requires: shadow-utils
-# Install requirements
+# Install pypi 'dynamic' requirements
{{for r in requires}}
-Requires: {{r}}
+Requires: {{r}}
{{endfor}}
+{{if init_d}}
+Requires(post): chkconfig
+Requires(postun): initscripts
+Requires(preun): chkconfig
+Requires(preun): initscripts
+{{endif}}
+
+{{if systemd}}
+BuildRequires: systemd-units
+Requires(post): systemd-units
+Requires(postun): systemd-units
+Requires(preun): systemd-units
+{{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 %{name}-%{version}-{{revno}}
@@ -41,32 +63,139 @@ ssh keys and to let the user run various scripts.
rm -rf $RPM_BUILD_ROOT
%{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
-# Remove anything after it was installed??
-{{for r in post_remove}}
-rm -rfv $RPM_BUILD_ROOT/{{r}}
-{{endfor}}
+# 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
+
+{{if init_d}}
+mkdir -p $RPM_BUILD_ROOT/%{_initddir}/
+{{endif}}
+{{if init_d_local}}
+cp -p initd/cloud-init-local $RPM_BUILD_ROOT/%{_initddir}/
+cp -p initd/cloud-config $RPM_BUILD_ROOT/%{_initddir}/
+cp -p initd/cloud-final $RPM_BUILD_ROOT/%{_initddir}/
+{{elif init_d}}
+cp -p initd/cloud-init $RPM_BUILD_ROOT/%{_initddir}/
+cp -p initd/cloud-config $RPM_BUILD_ROOT/%{_initddir}/
+cp -p initd/cloud-final $RPM_BUILD_ROOT/%{_initddir}/
+{{endif}}
+
+{{if systemd}}
+mkdir -p $RPM_BUILD_ROOT/%{_unitdir}
+cp -p systemd/* $RPM_BUILD_ROOT/%{_unitdir}
+{{endif}}
%clean
rm -rf $RPM_BUILD_ROOT
+%post
+
+{{if 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
+{{endif}}
+
+{{if init_d_local}}
+/sbin/chkconfig --add /etc/rc.d/init.d/cloud-init-local
+{{elif init_d}}
+/sbin/chkconfig --add /etc/rc.d/init.d/cloud-init
+{{endif}}
+{{if init_d}}
+/sbin/chkconfig --add /etc/rc.d/init.d/cloud-config
+/sbin/chkconfig --add /etc/rc.d/init.d/cloud-final
+{{endif}}
+
+%preun
+
+{{if init_d_local}}
+if [ $1 -eq 0 ]
+then
+ /sbin/service cloud-init-local stop >/dev/null 2>&1
+ /sbin/chkconfig --del cloud-init-local
+fi
+{{elif init_d}}
+if [ $1 -eq 0 ]
+then
+ /sbin/service cloud-init stop >/dev/null 2>&1
+ /sbin/chkconfig --del cloud-init
+fi
+{{endif}}
+{{if init_d}}
+if [ $1 -eq 0 ]
+then
+ /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}}
+
+{{if 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
+{{endif}}
+
+%postun
+
+{{if systemd}}
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+{{endif}}
+
%files
+{{if init_d}}
+%attr(0755, root, root) %{_initddir}/cloud-config
+%attr(0755, root, root) %{_initddir}/cloud-final
+{{endif}}
+{{if init_d_local}}
+%attr(0755, root, root) %{_initddir}/cloud-init-local
+{{elif init_d}}
+%attr(0755, root, root) %{_initddir}/cloud-init
+{{endif}}
+
+{{if systemd}}
+%{_unitdir}/cloud-config.service
+%{_unitdir}/cloud-config.target
+%{_unitdir}/cloud-init.service
+%{_unitdir}/cloud-init-local.service
+%{_unitdir}/cloud-final.service
+{{endif}}
+
+# Program binaries
+%{_bindir}/cloud-init*
+
+# There doesn't seem to be an agreed upon place for these
+# although it appears the standard says /usr/lib but rpmbuild
+# will try /usr/lib64 ??
+/usr/lib/%{name}/uncloud-init
+/usr/lib/%{name}/write-ssh-key-fingerprints
+
# Docs
-{{for r in docs}}
-%doc {{r}}
-{{endfor}}
+%doc TODO LICENSE ChangeLog Requires
+%doc %{_defaultdocdir}/cloud-init/*
# Configs
-{{for r in configs}}
-%config(noreplace) %{_sysconfdir}/{{r}}
-{{endfor}}
-
-# Other files
-{{for r in files}}
-{{r}}
-{{endfor}}
-
-# Python sitelib
+%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
+
+# Python code is here...
%{python_sitelib}/*
%changelog
diff --git a/setup.py b/setup.py
index 810ebb48..d6253384 100755
--- a/setup.py
+++ b/setup.py
@@ -76,20 +76,12 @@ setuptools.setup(name='cloud-init',
data_files=[('/etc/cloud', glob('config/*.cfg')),
('/etc/cloud/cloud.cfg.d', glob('config/cloud.cfg.d/*')),
('/etc/cloud/templates', glob('templates/*')),
- # Only really need for upstart based systems
- ('/etc/init', glob('upstart/*.conf')),
- # Only really need for systemd based systems
- ('/etc/systemd/system', glob('systemd/*.service')),
- # Only really need for init.d based system
- ('/etc/init.d', glob('initd/*')),
('/usr/share/cloud-init', []),
('/usr/lib/cloud-init',
['tools/uncloud-init', 'tools/write-ssh-key-fingerprints']),
('/usr/share/doc/cloud-init', filter(is_f, glob('doc/*'))),
('/usr/share/doc/cloud-init/examples', filter(is_f, glob('doc/examples/*'))),
('/usr/share/doc/cloud-init/examples/seed', filter(is_f, glob('doc/examples/seed/*'))),
- # ??
- # ('/etc/profile.d', ['tools/Z99-cloud-locale-test.sh']),
],
install_requires=read_requires(),
)