summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rwxr-xr-xpackages/bddeb28
-rwxr-xr-xpackages/brpm50
-rw-r--r--packages/debian/control.in3
-rw-r--r--packages/suse/cloud-init.spec.in162
4 files changed, 224 insertions, 19 deletions
diff --git a/packages/bddeb b/packages/bddeb
index bda3170d..30559870 100755
--- a/packages/bddeb
+++ b/packages/bddeb
@@ -32,14 +32,17 @@ PKG_MP = {
'boto': 'python-boto',
'cheetah': 'python-cheetah',
'configobj': 'python-configobj',
+ 'jsonpatch': 'python-json-patch',
'oauth': 'python-oauth',
'prettytable': 'python-prettytable',
+ 'pyserial': 'python-serial',
'pyyaml': 'python-yaml',
+ 'requests': 'python-requests',
}
-DEBUILD_ARGS = ["-us", "-S", "-uc"]
+DEBUILD_ARGS = ["-us", "-S", "-uc", "-d"]
-def write_debian_folder(root, version, revno):
+def write_debian_folder(root, version, revno, append_requires=[]):
deb_dir = util.abs_join(root, 'debian')
os.makedirs(deb_dir)
@@ -58,7 +61,7 @@ def write_debian_folder(root, version, revno):
pkgs = [p.lower().strip() for p in stdout.splitlines()]
# Map to known packages
- requires = []
+ requires = append_requires
for p in pkgs:
tgt_pkg = PKG_MP.get(p)
if not tgt_pkg:
@@ -87,6 +90,17 @@ def main():
" (default: %(default)s)"),
default=False,
action='store_true')
+ parser.add_argument("--no-cloud-utils", dest="no_cloud_utils",
+ help=("don't depend on cloud-utils package"
+ " (default: %(default)s)"),
+ default=False,
+ action='store_true')
+
+ parser.add_argument("--init-system", dest="init_system",
+ help=("build deb with INIT_SYSTEM=xxx"
+ " (default: %(default)s"),
+ default=os.environ.get("INIT_SYSTEM", "upstart"))
+
for ent in DEBUILD_ARGS:
parser.add_argument(ent, dest="debuild_args", action='append_const',
@@ -94,6 +108,8 @@ def main():
args = parser.parse_args()
+ os.environ['INIT_SYSTEM'] = args.init_system
+
capture = True
if args.verbose:
capture = False
@@ -128,7 +144,11 @@ def main():
shutil.move(extracted_name, xdir)
print("Creating a debian/ folder in %r" % (xdir))
- write_debian_folder(xdir, version, revno)
+ if not args.no_cloud_utils:
+ append_requires=['cloud-utils']
+ else:
+ append_requires=[]
+ write_debian_folder(xdir, version, revno, append_requires)
# The naming here seems to follow some debian standard
# so it will whine if it is changed...
diff --git a/packages/brpm b/packages/brpm
index eea2a046..8c90a0ab 100755
--- a/packages/brpm
+++ b/packages/brpm
@@ -34,13 +34,30 @@ from cloudinit import util
# this is a translation of the 'requires'
# file pypi package name to a redhat/fedora package name.
PKG_MP = {
- 'argparse': 'python-argparse',
- 'boto': 'python-boto',
- 'cheetah': 'python-cheetah',
- 'configobj': 'python-configobj',
- 'oauth': 'python-oauth',
- 'prettytable': 'python-prettytable',
- 'pyyaml': 'PyYAML',
+ 'redhat': {
+ 'argparse': 'python-argparse',
+ 'boto': 'python-boto',
+ 'cheetah': 'python-cheetah',
+ 'configobj': 'python-configobj',
+ 'jsonpatch': 'python-jsonpatch',
+ 'oauth': 'python-oauth',
+ 'prettytable': 'python-prettytable',
+ 'pyserial': 'pyserial',
+ 'pyyaml': 'PyYAML',
+ 'requests': 'python-requests',
+ },
+ 'suse': {
+ 'argparse': 'python-argparse',
+ 'boto': 'python-boto',
+ 'cheetah': 'python-cheetah',
+ 'configobj': 'python-configobj',
+ 'jsonpatch': 'python-jsonpatch',
+ 'oauth': 'python-oauth',
+ 'prettytable': 'python-prettytable',
+ 'pyserial': 'python-pyserial',
+ 'pyyaml': 'python-yaml',
+ 'requests': 'python-requests',
+ }
}
# Subdirectories of the ~/rpmbuild dir
@@ -119,7 +136,7 @@ def generate_spec_contents(args, tmpl_fn, top_dir, arc_fn):
# Map to known packages
requires = []
for p in pkgs:
- tgt_pkg = PKG_MP.get(p)
+ tgt_pkg = PKG_MP[args.distro].get(p)
if not tgt_pkg:
raise RuntimeError(("Do not know how to translate pypi dependency"
" %r to a known package") % (p))
@@ -141,10 +158,11 @@ def generate_spec_contents(args, tmpl_fn, top_dir, arc_fn):
missing_versions += 1
if missing_versions == 1:
# Must be using a new 'dev'/'trunk' release
- changelog_lines.append(format_change_line(datetime.now(), '??'))
+ changelog_lines.append(format_change_line(datetime.now(),
+ '??'))
else:
- sys.stderr.write(("Changelog version line %s "
- "does not have a corresponding tag!\n") % (line))
+ sys.stderr.write(("Changelog version line %s does not "
+ "have a corresponding tag!\n") % (line))
else:
changelog_lines.append(header)
else:
@@ -170,6 +188,10 @@ def generate_spec_contents(args, tmpl_fn, top_dir, arc_fn):
def main():
parser = argparse.ArgumentParser()
+ parser.add_argument("-d", "--distro", dest="distro",
+ help="select distro (default: %(default)s)",
+ metavar="DISTRO", default='redhat',
+ choices=('redhat', 'suse'))
parser.add_argument("-b", "--boot", dest="boot",
help="select boot type (default: %(default)s)",
metavar="TYPE", default='sysvinit',
@@ -217,7 +239,7 @@ def main():
# Form the spec file to be used
tmpl_fn = util.abs_join(find_root(), 'packages',
- 'redhat', 'cloud-init.spec.in')
+ args.distro, 'cloud-init.spec.in')
contents = generate_spec_contents(args, tmpl_fn, root_dir,
os.path.basename(archive_fn))
spec_fn = util.abs_join(root_dir, 'cloud-init.spec')
@@ -236,13 +258,15 @@ def main():
globs.extend(glob.glob("%s/*.rpm" %
(util.abs_join(root_dir, 'RPMS', 'noarch'))))
globs.extend(glob.glob("%s/*.rpm" %
+ (util.abs_join(root_dir, 'RPMS', 'x86_64'))))
+ globs.extend(glob.glob("%s/*.rpm" %
(util.abs_join(root_dir, 'RPMS'))))
globs.extend(glob.glob("%s/*.rpm" %
(util.abs_join(root_dir, 'SRPMS'))))
for rpm_fn in globs:
tgt_fn = util.abs_join(os.getcwd(), os.path.basename(rpm_fn))
shutil.move(rpm_fn, tgt_fn)
- print("Wrote out redhat package %r" % (tgt_fn))
+ print("Wrote out %s package %r" % (args.distro, tgt_fn))
return 0
diff --git a/packages/debian/control.in b/packages/debian/control.in
index edb5aff5..b9352f5b 100644
--- a/packages/debian/control.in
+++ b/packages/debian/control.in
@@ -18,8 +18,7 @@ Standards-Version: 3.9.3
Package: cloud-init
Architecture: all
-Depends: cloud-utils,
- procps,
+Depends: procps,
python,
#for $r in $requires
${r},
diff --git a/packages/suse/cloud-init.spec.in b/packages/suse/cloud-init.spec.in
new file mode 100644
index 00000000..296505c6
--- /dev/null
+++ b/packages/suse/cloud-init.spec.in
@@ -0,0 +1,162 @@
+## This is a cheetah template
+
+# 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
+
+#for $d in $defines
+%define ${d}
+#end for
+
+Name: cloud-init
+Version: ${version}
+Release: ${release}${subrelease}%{?dist}
+Summary: Cloud instance init scripts
+
+Group: System/Management
+License: GPLv3
+URL: http://launchpad.net/cloud-init
+
+Source0: ${archive_name}
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%if 0%{?suse_version} && 0%{?suse_version} <= 1110
+%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+%else
+BuildArch: noarch
+%endif
+
+BuildRequires: fdupes
+BuildRequires: filesystem
+BuildRequires: python-devel
+BuildRequires: python-setuptools
+BuildRequires: python-cheetah
+
+%if 0%{?suse_version} && 0%{?suse_version} <= 1210
+ %define initsys sysvinit
+%else
+ %define initsys systemd
+%endif
+
+# System util packages needed
+Requires: iproute2
+Requires: e2fsprogs
+Requires: net-tools
+Requires: procps
+
+# Install pypi 'dynamic' requirements
+#for $r in $requires
+Requires: ${r}
+#end for
+
+# Custom patches
+#set $size = 0
+#for $p in $patches
+Patch${size}: $p
+#set $size += 1
+#end for
+
+%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}~${release}
+
+# Custom patches activation
+#set $size = 0
+#for $p in $patches
+%patch${size} -p1
+#set $size += 1
+#end for
+
+%build
+%{__python} setup.py build
+
+%install
+%{__python} setup.py install \
+ --skip-build --root=%{buildroot} --prefix=%{_prefix} \
+ --record-rpm=INSTALLED_FILES --install-lib=%{python_sitelib} \
+ --init-system=%{initsys}
+
+# Remove non-SUSE templates
+rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.debian.*
+rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.redhat.*
+rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.ubuntu.*
+
+# Remove cloud-init tests
+rm -r %{buildroot}/%{python_sitelib}/tests
+
+# Move sysvinit scripts to the correct place and create symbolic links
+%if %{initsys} == sysvinit
+ mkdir -p %{buildroot}/%{_initddir}
+ mv %{buildroot}%{_sysconfdir}/rc.d/init.d/* %{buildroot}%{_initddir}/
+ rmdir %{buildroot}%{_sysconfdir}/rc.d/init.d
+ rmdir %{buildroot}%{_sysconfdir}/rc.d
+
+ mkdir -p %{buildroot}/%{_sbindir}
+ pushd %{buildroot}/%{_initddir}
+ for file in * ; do
+ ln -s %{_initddir}/\${file} %{buildroot}/%{_sbindir}/rc\${file}
+ done
+ popd
+%endif
+
+# Move documentation
+mkdir -p %{buildroot}/%{_defaultdocdir}
+mv %{buildroot}/usr/share/doc/cloud-init %{buildroot}/%{_defaultdocdir}
+for doc in TODO LICENSE ChangeLog Requires ; do
+ cp \${doc} %{buildroot}/%{_defaultdocdir}/cloud-init
+done
+
+# Remove duplicate files
+%if 0%{?suse_version}
+ %fdupes %{buildroot}/%{python_sitelib}
+%endif
+
+mkdir -p %{buildroot}/var/lib/cloud
+
+%postun
+%insserv_cleanup
+
+%files
+
+# Sysvinit scripts
+%if %{initsys} == sysvinit
+ %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
+
+ %{_sbindir}/rccloud-*
+%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
+%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/*
+
+# Python code is here...
+%{python_sitelib}/*
+
+/var/lib/cloud
+
+%changelog
+
+${changelog}