1. Fixup the setup.py to not include custom startup scripts, let the packaging solutions handle these
2. Get the cloud-init specfile working for the init.d case (with the right postun and post and install sections) a. It works!!!
This commit is contained in:
parent
2d96020385
commit
545fd9c3b9
104
packages/brpm
104
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,104 +135,31 @@ 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/*',
|
||||
]
|
||||
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
|
||||
|
||||
# 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)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
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)"),
|
||||
|
@ -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}}
|
||||
{{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}}
|
||||
%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
|
||||
|
||||
# Other files
|
||||
{{for r in files}}
|
||||
{{r}}
|
||||
{{endfor}}
|
||||
|
||||
# Python sitelib
|
||||
# Python code is here...
|
||||
%{python_sitelib}/*
|
||||
|
||||
%changelog
|
||||
|
8
setup.py
8
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(),
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user