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):
|
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 = ds.strftime("%a %b %d %Y")
|
||||||
d += " - %s" % (who)
|
d += " - %s" % (who)
|
||||||
if comment:
|
if comment:
|
||||||
@ -134,104 +135,31 @@ def generate_spec_contents(args, tmpl_fn):
|
|||||||
changelog_lines.append(line)
|
changelog_lines.append(line)
|
||||||
subs['changelog'] = "\n".join(changelog_lines)
|
subs['changelog'] = "\n".join(changelog_lines)
|
||||||
|
|
||||||
# See: http://www.zarb.org/~jasonc/macros.php
|
if args.boot == 'initd':
|
||||||
# Pickup any special files
|
subs['init_d'] = True
|
||||||
docs = [
|
subs['init_d_local'] = False
|
||||||
'TODO',
|
elif args.boot == 'initd-local':
|
||||||
'LICENSE',
|
subs['init_d'] = True
|
||||||
'ChangeLog',
|
subs['init_d_local'] = True
|
||||||
'Requires',
|
else:
|
||||||
'%{_defaultdocdir}/cloud-init/*',
|
subs['init_d'] = False
|
||||||
]
|
subs['init_d_local'] = False
|
||||||
subs['docs'] = docs
|
|
||||||
configs = [
|
if args.boot == 'systemd':
|
||||||
'cloud/cloud.cfg',
|
subs['systemd'] = True
|
||||||
'cloud/cloud.cfg.d/*.cfg',
|
else:
|
||||||
'cloud/cloud.cfg.d/README',
|
subs['systemd'] = False
|
||||||
'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)
|
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():
|
def main():
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("-b", "--boot", dest="boot",
|
parser.add_argument("-b", "--boot", dest="boot",
|
||||||
help="select boot type (default: %(default)s)",
|
help="select boot type (default: %(default)s)",
|
||||||
metavar="TYPE", default='initd',
|
metavar="TYPE", default='initd',
|
||||||
choices=('upstart', 'initd', 'systemd',
|
choices=('initd', 'systemd', 'initd-local'))
|
||||||
'upstart-local', 'initd-local'))
|
|
||||||
parser.add_argument("-v", "--verbose", dest="verbose",
|
parser.add_argument("-v", "--verbose", dest="verbose",
|
||||||
help=("run verbosely"
|
help=("run verbosely"
|
||||||
" (default: %(default)s)"),
|
" (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()")}
|
%{!?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
|
Name: cloud-init
|
||||||
Version: {{version}}
|
Version: {{version}}
|
||||||
Release: {{release}}%{?dist}
|
Release: {{release}}%{?dist}
|
||||||
@ -10,27 +14,45 @@ License: GPLv3
|
|||||||
URL: http://launchpad.net/cloud-init
|
URL: http://launchpad.net/cloud-init
|
||||||
|
|
||||||
Source0: {{archive_name}}
|
Source0: {{archive_name}}
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
BuildRoot: %{_tmppath}
|
BuildRoot: %{_tmppath}
|
||||||
|
|
||||||
|
BuildRequires: python-devel
|
||||||
|
BuildRequires: python-setuptools
|
||||||
|
|
||||||
{{for r in bd_requires}}
|
# System util packages needed
|
||||||
BuildRequires: {{r}}
|
Requires: shadow-utils
|
||||||
{{endfor}}
|
Requires: rsyslog
|
||||||
|
Requires: iproute
|
||||||
|
Requires: e2fsprogs
|
||||||
|
Requires: net-tools
|
||||||
|
Requires: procps
|
||||||
|
Requires: shadow-utils
|
||||||
|
|
||||||
# Install requirements
|
# Install pypi 'dynamic' requirements
|
||||||
{{for r in requires}}
|
{{for r in requires}}
|
||||||
Requires: {{r}}
|
Requires: {{r}}
|
||||||
{{endfor}}
|
{{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
|
%description
|
||||||
Cloud-init is a set of init scripts for cloud instances. Cloud instances
|
Cloud-init is a set of init scripts for cloud instances. Cloud instances
|
||||||
need special scripts to run during initialization to retrieve and install
|
need special scripts to run during initialization to retrieve and install
|
||||||
ssh keys and to let the user run various scripts.
|
ssh keys and to let the user run various scripts.
|
||||||
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{version}-{{revno}}
|
%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
|
rm -rf $RPM_BUILD_ROOT
|
||||||
%{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
|
%{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
|
||||||
|
|
||||||
# Remove anything after it was installed??
|
# Note that /etc/rsyslog.d didn't exist by default until F15.
|
||||||
{{for r in post_remove}}
|
# el6 request: https://bugzilla.redhat.com/show_bug.cgi?id=740420
|
||||||
rm -rfv $RPM_BUILD_ROOT/{{r}}
|
mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d
|
||||||
{{endfor}}
|
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
|
%clean
|
||||||
rm -rf $RPM_BUILD_ROOT
|
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
|
%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
|
# Docs
|
||||||
{{for r in docs}}
|
%doc TODO LICENSE ChangeLog Requires
|
||||||
%doc {{r}}
|
%doc %{_defaultdocdir}/cloud-init/*
|
||||||
{{endfor}}
|
|
||||||
|
|
||||||
# Configs
|
# Configs
|
||||||
{{for r in configs}}
|
%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg
|
||||||
%config(noreplace) %{_sysconfdir}/{{r}}
|
%dir %{_sysconfdir}/cloud/cloud.cfg.d
|
||||||
{{endfor}}
|
%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
|
# Python code is here...
|
||||||
{{for r in files}}
|
|
||||||
{{r}}
|
|
||||||
{{endfor}}
|
|
||||||
|
|
||||||
# Python sitelib
|
|
||||||
%{python_sitelib}/*
|
%{python_sitelib}/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
8
setup.py
8
setup.py
@ -76,20 +76,12 @@ setuptools.setup(name='cloud-init',
|
|||||||
data_files=[('/etc/cloud', glob('config/*.cfg')),
|
data_files=[('/etc/cloud', glob('config/*.cfg')),
|
||||||
('/etc/cloud/cloud.cfg.d', glob('config/cloud.cfg.d/*')),
|
('/etc/cloud/cloud.cfg.d', glob('config/cloud.cfg.d/*')),
|
||||||
('/etc/cloud/templates', glob('templates/*')),
|
('/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/share/cloud-init', []),
|
||||||
('/usr/lib/cloud-init',
|
('/usr/lib/cloud-init',
|
||||||
['tools/uncloud-init', 'tools/write-ssh-key-fingerprints']),
|
['tools/uncloud-init', 'tools/write-ssh-key-fingerprints']),
|
||||||
('/usr/share/doc/cloud-init', filter(is_f, glob('doc/*'))),
|
('/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', filter(is_f, glob('doc/examples/*'))),
|
||||||
('/usr/share/doc/cloud-init/examples/seed', filter(is_f, glob('doc/examples/seed/*'))),
|
('/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(),
|
install_requires=read_requires(),
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user