[cloud-init/f16] Initial build (0.6.2-0.1.bzr450)

gholms gholms at fedoraproject.org
Sat Sep 24 23:09:32 UTC 2011


commit 4907847669583e847b2249e5c140b12f008c01bc
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date:   Fri Sep 23 10:44:26 2011 -0700

    Initial build (0.6.2-0.1.bzr450)

 .gitignore                           |    1 +
 cloud-init-0.6.2-botobundle.patch    |  136 ++++++++++++++++++++++++++++++
 cloud-init-0.6.2-fedora.patch        |   41 +++++++++
 cloud-init-0.6.2-localefile.patch    |   37 ++++++++
 cloud-init-0.6.2-puppetcontext.patch |   35 ++++++++
 cloud-init-0.6.2-puppetenable.patch  |   32 +++++++
 cloud-init-0.6.2-sshcontext.patch    |   26 ++++++
 cloud-init-0.6.2-systemd.patch       |   86 +++++++++++++++++++
 cloud-init-0.6.2-tzsysconfig.patch   |   33 +++++++
 cloud-init-README.fedora             |   12 +++
 cloud-init-fedora.cfg                |   37 ++++++++
 cloud-init.spec                      |  154 ++++++++++++++++++++++++++++++++++
 sources                              |    1 +
 13 files changed, 631 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..6be1f76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/cloud-init-0.6.2-bzr450.tar.gz
diff --git a/cloud-init-0.6.2-botobundle.patch b/cloud-init-0.6.2-botobundle.patch
new file mode 100644
index 0000000..089d092
--- /dev/null
+++ b/cloud-init-0.6.2-botobundle.patch
@@ -0,0 +1,136 @@
+Index: cloud-init/cloudinit/DataSourceEc2.py
+===================================================================
+--- cloud-init.orig/cloudinit/DataSourceEc2.py
++++ cloud-init/cloudinit/DataSourceEc2.py
+@@ -24,7 +24,7 @@ import socket
+ import urllib2
+ import time
+ import sys
+-import boto_utils
++import boto.utils
+ import os.path
+ import errno
+ import urlparse
+@@ -48,8 +48,8 @@ class DataSourceEc2(DataSource.DataSourc
+         try:
+             if not self.wait_for_metadata_service():
+                 return False
+-            self.userdata_raw = boto_utils.get_instance_userdata(self.api_ver, None, self.metadata_address)
+-            self.metadata = boto_utils.get_instance_metadata(self.api_ver, self.metadata_address)
++            self.userdata_raw = boto.utils.get_instance_userdata(self.api_ver, None, self.metadata_address)
++            self.metadata = boto.utils.get_instance_metadata(self.api_ver, self.metadata_address)
+             return True
+         except Exception as e:
+             print e
+Index: cloud-init/cloudinit/boto_utils.py
+===================================================================
+--- cloud-init.orig/cloudinit/boto_utils.py
++++ /dev/null
+@@ -1,107 +0,0 @@
+-# The contents of this file are taken from boto 1.9b's boto/utils.py
+-#
+-# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/
+-#
+-# Permission is hereby granted, free of charge, to any person obtaining a
+-# copy of this software and associated documentation files (the
+-# "Software"), to deal in the Software without restriction, including
+-# without limitation the rights to use, copy, modify, merge, publish, dis-
+-# tribute, sublicense, and/or sell copies of the Software, and to permit
+-# persons to whom the Software is furnished to do so, subject to the fol-
+-# lowing conditions:
+-#
+-# The above copyright notice and this permission notice shall be included
+-# in all copies or substantial portions of the Software.
+-#
+-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+-# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+-# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
+-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+-# IN THE SOFTWARE.
+-
+-#
+-# Parts of this code were copied or derived from sample code supplied by AWS.
+-# The following notice applies to that code.
+-#
+-#  This software code is made available "AS IS" without warranties of any
+-#  kind.  You may copy, display, modify and redistribute the software
+-#  code either by itself or as incorporated into your code; provided that
+-#  you do not remove any proprietary notices.  Your use of this software
+-#  code is at your own risk and you waive any claim against Amazon
+-#  Digital Services, Inc. or its affiliates with respect to your use of
+-#  this software code. (c) 2006 Amazon Digital Services, Inc. or its
+-#  affiliates.
+-import urllib2
+-import sys
+-import time
+-
+-def retry_url(url, retry_on_404=True):
+-    for i in range(0, 10):
+-        try:
+-            req = urllib2.Request(url)
+-            resp = urllib2.urlopen(req)
+-            return resp.read()
+-        except urllib2.HTTPError as e:
+-            # in 2.6 you use getcode(), in 2.5 and earlier you use code
+-            if hasattr(e, 'getcode'):
+-                code = e.getcode()
+-            else:
+-                code = e.code
+-            if code == 404 and not retry_on_404:
+-                return ''
+-        except:
+-            pass
+-        #boto.log.exception('Caught exception reading instance data')
+-        sys.stderr.write('Caught exception reading instance data: %s\n' % url)
+-        time.sleep(2**i)
+-    #boto.log.error('Unable to read instance data, giving up')
+-    sys.stderr.write('Caught exception reading instance data, giving up\n')
+-    return ''
+-
+-def get_instance_metadata(version='latest',url='http://169.254.169.254'):
+-    """
+-    Returns the instance metadata as a nested Python dictionary.
+-    Simple values (e.g. local_hostname, hostname, etc.) will be
+-    stored as string values.  Values such as ancestor-ami-ids will
+-    be stored in the dict as a list of string values.  More complex
+-    fields such as public-keys and will be stored as nested dicts.
+-    """
+-    url = '%s/%s/meta-data/' % (url,version)
+-    return _get_instance_metadata(url)
+-
+-def get_instance_userdata(version='latest', sep=None,url='http://169.254.169.254'):
+-    url = '%s/%s/user-data' % (url,version)
+-    user_data = retry_url(url, retry_on_404=False)
+-    if user_data:
+-        if sep:
+-            l = user_data.split(sep)
+-            user_data = {}
+-            for nvpair in l:
+-                t = nvpair.split('=')
+-                user_data[t[0].strip()] = t[1].strip()
+-    return user_data
+-
+-
+-def _get_instance_metadata(url):
+-    d = {}
+-    data = retry_url(url)
+-    if data:
+-        fields = data.split('\n')
+-        for field in fields:
+-            if field.endswith('/'):
+-                d[field[0:-1]] = _get_instance_metadata(url + field)
+-            else:
+-                p = field.find('=')
+-                if p > 0:
+-                    key = field[p+1:]
+-                    resource = field[0:p] + '/openssh-key'
+-                else:
+-                    key = resource = field
+-                val = retry_url(url + resource)
+-                p = val.find('\n')
+-                if p > 0:
+-                    val = val.split('\n')
+-                d[key] = val
+-    return d
diff --git a/cloud-init-0.6.2-fedora.patch b/cloud-init-0.6.2-fedora.patch
new file mode 100644
index 0000000..4d0c31d
--- /dev/null
+++ b/cloud-init-0.6.2-fedora.patch
@@ -0,0 +1,41 @@
+Index: cloud-init/setup.py
+===================================================================
+--- cloud-init.orig/setup.py
++++ cloud-init/setup.py
+@@ -40,9 +40,8 @@ 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/*')),
+-                  ('/etc/init', glob('upstart/*.conf')),
+                   ('/usr/share/cloud-init', []),
+-                  ('/usr/lib/cloud-init', 
++                  ('/usr/libexec/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/*'))),
+Index: cloud-init/cloudinit/CloudConfig/cc_keys_to_console.py
+===================================================================
+--- cloud-init.orig/cloudinit/CloudConfig/cc_keys_to_console.py
++++ cloud-init/cloudinit/CloudConfig/cc_keys_to_console.py
+@@ -21,7 +21,7 @@ import subprocess
+ frequency = per_instance
+ 
+ def handle(name,cfg,cloud,log,args):
+-    write_ssh_prog='/usr/lib/cloud-init/write-ssh-key-fingerprints'
++    write_ssh_prog='/usr/libexec/cloud-init/write-ssh-key-fingerprints'
+     try:
+         confp = open('/dev/console',"wb")
+         subprocess.call(write_ssh_prog,stdout=confp)
+Index: cloud-init/cloudinit/CloudConfig/cc_ssh.py
+===================================================================
+--- cloud-init.orig/cloudinit/CloudConfig/cc_ssh.py
++++ cloud-init/cloudinit/CloudConfig/cc_ssh.py
+@@ -85,7 +85,7 @@ def handle(name,cfg,cloud,log,args):
+     send_ssh_keys_to_console()
+ 
+ def send_ssh_keys_to_console():
+-    subprocess.call(('/usr/lib/cloud-init/write-ssh-key-fingerprints',))
++    subprocess.call(('/usr/libexec/cloud-init/write-ssh-key-fingerprints',))
+ 
+ def apply_credentials(keys, user, disable_root, disable_root_opts=DISABLE_ROOT_OPTS, log=global_log):
+     keys = set(keys)
diff --git a/cloud-init-0.6.2-localefile.patch b/cloud-init-0.6.2-localefile.patch
new file mode 100644
index 0000000..49b55c0
--- /dev/null
+++ b/cloud-init-0.6.2-localefile.patch
@@ -0,0 +1,37 @@
+Index: cloud-init/cloudinit/CloudConfig/cc_locale.py
+===================================================================
+--- cloud-init.orig/cloudinit/CloudConfig/cc_locale.py
++++ cloud-init/cloudinit/CloudConfig/cc_locale.py
+@@ -16,15 +16,17 @@
+ #    You should have received a copy of the GNU General Public License
+ #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ import cloudinit.util as util
++import os.path
+ import subprocess
+ import traceback
+ 
+-def apply_locale(locale):
+-    subprocess.Popen(['locale-gen', locale]).communicate()
+-    subprocess.Popen(['update-locale', locale]).communicate()
++def apply_locale(locale, cfgfile):
++    if os.path.exists('/usr/sbin/locale-gen'):
++        subprocess.Popen(['locale-gen', locale]).communicate()
++    if os.path.exists('/usr/sbin/update-locale'):
++        subprocess.Popen(['update-locale', locale]).communicate()
+ 
+-    util.render_to_file('default-locale', '/etc/default/locale', \
+-        { 'locale' : locale })
++    util.render_to_file('default-locale', cfgfile, { 'locale' : locale })
+ 
+ def handle(name,cfg,cloud,log,args):
+     if len(args) != 0:
+@@ -32,6 +34,9 @@ def handle(name,cfg,cloud,log,args):
+     else:
+         locale = util.get_cfg_option_str(cfg,"locale",cloud.get_locale())
+ 
++    locale_cfgfile = util.get_cfg_option_str(cfg, "locale_configfile",
++                                             "/etc/default/locale")
++
+     if not locale: return
+ 
+     log.debug("setting locale to %s" % locale)
diff --git a/cloud-init-0.6.2-puppetcontext.patch b/cloud-init-0.6.2-puppetcontext.patch
new file mode 100644
index 0000000..8af8bc0
--- /dev/null
+++ b/cloud-init-0.6.2-puppetcontext.patch
@@ -0,0 +1,35 @@
+Index: cloud-init/cloudinit/CloudConfig/cc_puppet.py
+===================================================================
+--- cloud-init.orig/cloudinit/CloudConfig/cc_puppet.py
++++ cloud-init/cloudinit/CloudConfig/cc_puppet.py
+@@ -23,6 +23,12 @@ import StringIO
+ import ConfigParser
+ import cloudinit.CloudConfig as cc
+ 
++try:
++    import selinux
++    HAVE_LIBSELINUX = True
++except ImportError:
++    HAVE_LIBSELINUX = False
++
+ def handle(name,cfg,cloud,log,args):
+     # If there isn't a puppet key in the configuration don't do anything
+     if not cfg.has_key('puppet'): return
+@@ -58,6 +64,8 @@ def handle(name,cfg,cloud,log,args):
+                 ca_fh.close()
+                 os.chown('/var/lib/puppet/ssl/certs/ca.pem',
+                          pwd.getpwnam('puppet').pw_uid, 0)
++                if HAVE_LIBSELINUX and selinux.is_selinux_enabled():
++                    selinux.restorecon('/var/lib/puppet', recursive=True)
+             else:
+                 #puppet_conf_fh.write("\n[%s]\n" % (cfg_name))
+                 # If puppet.conf already has this section we don't want to write it again
+@@ -81,6 +89,8 @@ def handle(name,cfg,cloud,log,args):
+             os.rename('/etc/puppet/puppet.conf','/etc/puppet/puppet.conf.old')
+             with open('/etc/puppet/puppet.conf', 'wb') as configfile:
+                 puppet_config.write(configfile)
++            if HAVE_LIBSELINUX and selinux.is_selinux_enabled():
++                selinux.restorecon('/etc/puppet/puppet.conf')
+     # Set puppet default file to automatically start
+     subprocess.check_call(['sed', '-i',
+                            '-e', 's/^START=.*/START=yes/',
diff --git a/cloud-init-0.6.2-puppetenable.patch b/cloud-init-0.6.2-puppetenable.patch
new file mode 100644
index 0000000..0c39b69
--- /dev/null
+++ b/cloud-init-0.6.2-puppetenable.patch
@@ -0,0 +1,32 @@
+Index: cloud-init/cloudinit/CloudConfig/cc_puppet.py
+===================================================================
+--- cloud-init.orig/cloudinit/CloudConfig/cc_puppet.py
++++ cloud-init/cloudinit/CloudConfig/cc_puppet.py
+@@ -16,6 +16,7 @@
+ #    You should have received a copy of the GNU General Public License
+ #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ import os
++import os.path
+ import pwd
+ import socket
+ import subprocess
+@@ -91,10 +92,15 @@ def handle(name,cfg,cloud,log,args):
+                 puppet_config.write(configfile)
+             if HAVE_LIBSELINUX and selinux.is_selinux_enabled():
+                 selinux.restorecon('/etc/puppet/puppet.conf')
+-    # Set puppet default file to automatically start
+-    subprocess.check_call(['sed', '-i',
+-                           '-e', 's/^START=.*/START=yes/',
+-                           '/etc/default/puppet'])
++    # Set puppet to automatically start
++    if os.path.exists('/etc/default/puppet'):
++        subprocess.check_call(['sed', '-i',
++                               '-e', 's/^START=.*/START=yes/',
++                               '/etc/default/puppet'])
++    elif os.path.exists('/bin/systemctl'):
++        subprocess.check_call(['/bin/systemctl', 'enable', 'puppet.service'])
++    elif os.path.exists('/sbin/chkconfig'):
++        subprocess.check_call(['/sbin/chkconfig', 'puppet', 'on'])
+     # Start puppetd
+     subprocess.check_call(['service', 'puppet', 'start'])
+ 
diff --git a/cloud-init-0.6.2-sshcontext.patch b/cloud-init-0.6.2-sshcontext.patch
new file mode 100644
index 0000000..d6c454e
--- /dev/null
+++ b/cloud-init-0.6.2-sshcontext.patch
@@ -0,0 +1,26 @@
+Index: cloud-init/cloudinit/SshUtil.py
+===================================================================
+--- cloud-init.orig/cloudinit/SshUtil.py
++++ cloud-init/cloudinit/SshUtil.py
+@@ -4,6 +4,12 @@ import os
+ import os.path
+ import cloudinit.util as util
+ 
++try:
++    import selinux
++    HAVE_LIBSELINUX = True
++except ImportError:
++    HAVE_LIBSELINUX = False
++
+ class AuthKeyEntry():
+     # lines are options, keytype, base64-encoded key, comment
+     # man page says the following which I did not understand:
+@@ -147,6 +153,8 @@ def setup_user_keys(keys, user, key_pref
+     util.write_file(authorized_keys, content, 0600)
+ 
+     os.chown(authorized_keys, pwent.pw_uid, pwent.pw_gid)
++    if HAVE_LIBSELINUX and selinux.is_selinux_enabled():
++        selinux.restorecon(ssh_dir, recursive=True)
+ 
+     os.umask(saved_umask)
+ 
diff --git a/cloud-init-0.6.2-systemd.patch b/cloud-init-0.6.2-systemd.patch
new file mode 100644
index 0000000..5417d77
--- /dev/null
+++ b/cloud-init-0.6.2-systemd.patch
@@ -0,0 +1,86 @@
+Index: cloud-init/systemd/cloud-config.service
+===================================================================
+--- /dev/null
++++ cloud-init/systemd/cloud-config.service
+@@ -0,0 +1,13 @@
++[Unit]
++Description=Apply the settings specified in cloud-config
++After=network.target syslog.target cloud-config.target
++Requires=cloud-config.target
++Wants=network.target
++
++[Service]
++Type=oneshot
++ExecStart=/usr/bin/cloud-init-cfg all config
++RemainAfterExit=yes
++
++[Install]
++WantedBy=multi-user.target
+Index: cloud-init/systemd/cloud-config.target
+===================================================================
+--- /dev/null
++++ cloud-init/systemd/cloud-config.target
+@@ -0,0 +1,10 @@
++# cloud-init normally emits a "cloud-config" upstart event to inform third
++# parties that cloud-config is available, which does us no good when we're
++# using systemd.  cloud-config.target serves as this synchronization point
++# instead.  Services that would "start on cloud-config" with upstart can
++# instead use "After=cloud-config.target" and "Wants=cloud-config.target"
++# as appropriate.
++
++[Unit]
++Description=Cloud-config availability
++Requires=cloud-init-local.service cloud-init.service
+Index: cloud-init/systemd/cloud-final.service
+===================================================================
+--- /dev/null
++++ cloud-init/systemd/cloud-final.service
+@@ -0,0 +1,13 @@
++[Unit]
++Description=Execute cloud user/final scripts
++After=network.target syslog.target cloud-config.service rc-local.service
++Requires=cloud-config.target
++Wants=network.target
++
++[Service]
++Type=oneshot
++ExecStart=/usr/bin/cloud-init-cfg all final
++RemainAfterExit=yes
++
++[Install]
++WantedBy=multi-user.target
+Index: cloud-init/systemd/cloud-init-local.service
+===================================================================
+--- /dev/null
++++ cloud-init/systemd/cloud-init-local.service
+@@ -0,0 +1,12 @@
++[Unit]
++Description=Initial cloud-init job (pre-networking)
++Wants=local-fs.target
++After=local-fs.target
++
++[Service]
++Type=oneshot
++ExecStart=/usr/bin/cloud-init start-local
++RemainAfterExit=yes
++
++[Install]
++WantedBy=multi-user.target
+Index: cloud-init/systemd/cloud-init.service
+===================================================================
+--- /dev/null
++++ cloud-init/systemd/cloud-init.service
+@@ -0,0 +1,13 @@
++[Unit]
++Description=Initial cloud-init job (metadata service crawler)
++After=local-fs.target network.target cloud-init-local.service
++Requires=network.target
++Wants=local-fs.target
++
++[Service]
++Type=oneshot
++ExecStart=/usr/bin/cloud-init start
++RemainAfterExit=yes
++
++[Install]
++WantedBy=multi-user.target
diff --git a/cloud-init-0.6.2-tzsysconfig.patch b/cloud-init-0.6.2-tzsysconfig.patch
new file mode 100644
index 0000000..9d145c4
--- /dev/null
+++ b/cloud-init-0.6.2-tzsysconfig.patch
@@ -0,0 +1,33 @@
+Index: cloud-init/cloudinit/CloudConfig/cc_timezone.py
+===================================================================
+--- cloud-init.orig/cloudinit/CloudConfig/cc_timezone.py
++++ cloud-init/cloudinit/CloudConfig/cc_timezone.py
+@@ -38,13 +38,21 @@ def handle(name,cfg,cloud,log,args):
+         log.debug("Invalid timezone %s" % tz_file)
+         raise Exception("Invalid timezone %s" % tz_file)
+ 
+-    try:
+-        fp=open("/etc/timezone","wb")
+-        fp.write("%s\n" % timezone)
+-        fp.close()
+-    except:
+-        log.debug("failed to write to /etc/timezone")
+-        raise
++    if os.path.exists("/etc/timezone"):
++        try:
++            fp=open("/etc/timezone","wb")
++            fp.write("%s\n" % timezone)
++            fp.close()
++        except:
++            log.debug("failed to write to /etc/timezone")
++            raise
++    elif os.path.exists("/etc/sysconfig/clock"):
++        try:
++            with open("/etc/sysconfig/clock", "w") as fp:
++                fp.write('ZONE="%s"\n' % timezone)
++        except:
++            log.debug("failed to write to /etc/sysconfig/clock")
++            raise
+ 
+     try:
+         shutil.copy(tz_file, "/etc/localtime")
diff --git a/cloud-init-README.fedora b/cloud-init-README.fedora
new file mode 100644
index 0000000..99bf7ab
--- /dev/null
+++ b/cloud-init-README.fedora
@@ -0,0 +1,12 @@
+The following cloud-init modules are currently unsupported on this OS:
+ - apt_update_upgrade ('apt_update', 'apt_upgrade', 'apt_mirror', 'apt_preserve_sources_list', 'apt_old_mirror', 'apt_sources', 'debconf_selections', 'packages' options)
+ - byobu ('byobu_fy_default' option)
+ - chef
+ - grub_dpkg
+ - mcollective
+ - set_hostname ('hostname' and 'fqdn' options)
+ - update_hostname
+
+Future work:
+ - 'hostname' and 'fqdn' support
+ - 'packages' and yum support
diff --git a/cloud-init-fedora.cfg b/cloud-init-fedora.cfg
new file mode 100644
index 0000000..54fb129
--- /dev/null
+++ b/cloud-init-fedora.cfg
@@ -0,0 +1,37 @@
+user: ec2-user
+disable_root: 1
+ssh_pwauth:   0
+
+cc_ready_cmd: ['/bin/true']
+mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
+locale_configfile: /etc/sysconfig/i18n
+
+cloud_init_modules:
+ - bootcmd
+ - resizefs
+ - set_hostname
+ - rsyslog
+ - ssh
+
+cloud_config_modules:
+ - mounts
+ - ssh-import-id
+ - locale
+ - set-passwords
+ - grub-dpkg
+ - timezone
+ - puppet
+ - disable-ec2-metadata
+ - runcmd
+
+cloud_final_modules:
+ - rightscale_userdata
+ - scripts-per-once
+ - scripts-per-boot
+ - scripts-per-instance
+ - scripts-user
+ - keys-to-console
+ - phone-home
+ - final-message
+
+# vim:syntax=yaml
diff --git a/cloud-init.spec b/cloud-init.spec
new file mode 100644
index 0000000..dd74ee5
--- /dev/null
+++ b/cloud-init.spec
@@ -0,0 +1,154 @@
+%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+
+Name:           cloud-init
+Version:        0.6.2
+Release:        0.1.bzr450%{?dist}
+Summary:        EC2 instance init scripts
+
+Group:          System Environment/Base
+License:        GPLv3
+URL:            http://launchpad.net/cloud-init
+# bzr export -r 450 cloud-init-0.6.2-bzr450.tar.gz lp:cloud-init
+Source0:        %{name}-%{version}-bzr450.tar.gz
+Source1:        cloud-init-fedora.cfg
+Source2:        cloud-init-README.fedora
+Patch0:         cloud-init-0.6.2-fedora.patch
+# Unbundle boto.utils (not yet upstream)
+Patch1:         cloud-init-0.6.2-botobundle.patch
+# Add systemd support (not yet upstream)
+Patch2:         cloud-init-0.6.2-systemd.patch
+# Restore SSH files' selinux contexts (not yet upstream)
+Patch3:         cloud-init-0.6.2-sshcontext.patch
+# Make locale file location configurable (not yet upstream)
+Patch4:         cloud-init-0.6.2-localefile.patch
+# Write timezone data to /etc/sysconfig/clock (not yet upstream)
+Patch5:         cloud-init-0.6.2-tzsysconfig.patch
+# Restore puppet files' selinux contexts (not yet upstream)
+Patch6:         cloud-init-0.6.2-puppetcontext.patch
+# Make enabling the puppet service work on Fedora (not yet upstream)
+Patch7:         cloud-init-0.6.2-puppetenable.patch
+
+BuildArch:      noarch
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildRequires:  python-devel
+BuildRequires:  python-setuptools-devel
+BuildRequires:  systemd-units
+Requires:       e2fsprogs
+Requires:       iproute
+Requires:       libselinux-python
+Requires:       net-tools
+Requires:       procps
+Requires:       python-boto
+Requires:       python-cheetah
+Requires:       python-configobj
+Requires:       PyYAML
+Requires:       shadow-utils
+Requires:       xfsprogs
+Requires(post):   systemd-units
+Requires(preun):  systemd-units
+Requires(postun): systemd-units
+
+%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}-bzr450
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+
+cp -p %{SOURCE2} README.fedora
+
+
+%build
+%{__python} setup.py build
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
+
+for x in $RPM_BUILD_ROOT/usr/bin/*.py; do mv "$x" "${x%.py}"; done
+chmod +x $RPM_BUILD_ROOT/%{python_sitelib}/cloudinit/SshUtil.py
+install -d $RPM_BUILD_ROOT/var/lib/cloud
+
+# We supply our own config file since our software differs from Ubuntu's.
+cp -p %{SOURCE1} $RPM_BUILD_ROOT/etc/cloud/cloud.cfg
+
+# /etc/rsyslog.d didn't exist by default until F15.
+# el6: https://bugzilla.redhat.com/show_bug.cgi?id=740420
+%if 0%{?fedora} > 14
+install -d $RPM_BUILD_ROOT/etc/rsyslog.d
+cp -p tools/21-cloudinit.conf $RPM_BUILD_ROOT/etc/rsyslog.d/21-cloudinit.conf
+%endif
+
+# Install the systemd bits
+mkdir -p        $RPM_BUILD_ROOT/%{_unitdir}
+cp -p systemd/* $RPM_BUILD_ROOT/%{_unitdir}
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%post
+if [ $1 -eq 1 ] ; then
+    # Initial installation
+    # Enabled by default per "runs once then goes away" exception
+    /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
+
+%preun
+if [ $1 -eq 0 ] ; then
+    # Package removal, not upgrade
+    /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 || :
+    # One-shot services -> no need to stop
+fi
+
+%postun
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+# One-shot services -> no need to restart
+
+
+%files
+%doc ChangeLog LICENSE TODO README.fedora
+%config(noreplace) /etc/cloud/cloud.cfg
+%dir               /etc/cloud/cloud.cfg.d
+%config(noreplace) /etc/cloud/cloud.cfg.d/*.cfg
+%doc               /etc/cloud/cloud.cfg.d/README
+%dir               /etc/cloud/templates
+%config(noreplace) /etc/cloud/templates/*
+%{_unitdir}/cloud-config.service
+%{_unitdir}/cloud-config.target
+%{_unitdir}/cloud-final.service
+%{_unitdir}/cloud-init-local.service
+%{_unitdir}/cloud-init.service
+%{python_sitelib}/*
+%{_libexecdir}/%{name}
+/usr/bin/cloud-init*
+%doc /usr/share/doc/%{name}
+%dir /var/lib/cloud
+
+%if 0%{?fedora} > 14
+%config(noreplace) /etc/rsyslog.d/21-cloudinit.conf
+%endif
+
+
+%changelog
+* Wed Sep 21 2011 Garrett Holmstrom <gholms at fedoraproject.org> - 0.6.2-0.1.bzr450
+- Initial packaging
diff --git a/sources b/sources
index e69de29..561979b 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+f02b6f11e2f16d9756f909526d17d0a0  cloud-init-0.6.2-bzr450.tar.gz


More information about the scm-commits mailing list