summaryrefslogtreecommitdiff
path: root/packages/bddeb
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bddeb')
-rwxr-xr-xpackages/bddeb157
1 files changed, 83 insertions, 74 deletions
diff --git a/packages/bddeb b/packages/bddeb
index 10ad08b3..2cfddb99 100755
--- a/packages/bddeb
+++ b/packages/bddeb
@@ -3,13 +3,21 @@
import os
import shutil
import sys
-import glob
+
+
+def find_root():
+ # expected path is in <top_dir>/packages/
+ top_dir = os.environ.get("CLOUD_INIT_TOP_D", None)
+ if top_dir is None:
+ top_dir = os.path.dirname(
+ os.path.dirname(os.path.abspath(sys.argv[0])))
+ if os.path.isfile(os.path.join(top_dir, 'setup.py')):
+ return os.path.abspath(top_dir)
+ raise OSError(("Unable to determine where your cloud-init topdir is."
+ " set CLOUD_INIT_TOP_D?"))
# Use the util functions from cloudinit
-possible_topdir = os.path.normpath(os.path.join(os.path.abspath(
- sys.argv[0]), os.pardir, os.pardir))
-if os.path.exists(os.path.join(possible_topdir, "cloudinit", "__init__.py")):
- sys.path.insert(0, possible_topdir)
+sys.path.insert(0, find_root())
from cloudinit import templater
from cloudinit import util
@@ -17,24 +25,27 @@ from cloudinit import util
import argparse
# Package names that will showup in requires to what we can actually
-# use in our debian 'control' file
+# use in our debian 'control' file, this is a translation of the 'requires'
+# file pypi package name to a debian/ubuntu package name.
PKG_MP = {
- 'tempita': 'python-tempita',
'boto': 'python-boto',
'configobj': 'python-configobj',
'oauth': 'python-oauth',
- 'yaml': 'python-yaml',
+ 'pyyaml': 'python-yaml',
'prettytable': 'python-prettytable',
'argparse': 'python-argparse',
+ 'cheetah': 'python-cheetah',
}
+DEBUILD_ARGS = ["-us", "-S", "-uc"]
-def write_debian_folder(root, version, revno, init_sys):
+def write_debian_folder(root, version, revno):
deb_dir = util.abs_join(root, 'debian')
os.makedirs(deb_dir)
-
+
# Fill in the change log template
- templater.render_to_file(util.abs_join('debian', 'changelog'),
+ templater.render_to_file(util.abs_join(find_root(),
+ 'packages', 'debian', 'changelog.in'),
util.abs_join(deb_dir, 'changelog'),
params={
'version': version,
@@ -42,56 +53,45 @@ def write_debian_folder(root, version, revno, init_sys):
})
# Write out the control file template
- cmd = [sys.executable,
- util.abs_join(os.pardir, 'tools', 'read-dependencies')]
+ cmd = [util.abs_join(find_root(), 'tools', 'read-dependencies')]
(stdout, _stderr) = util.subp(cmd)
-
- # Map to known packages
pkgs = [p.lower().strip() for p in stdout.splitlines()]
+
+ # Map to known packages
requires = []
for p in pkgs:
- tgt_pkg = None
- for name in PKG_MP.keys():
- if p.find(name) != -1:
- tgt_pkg = PKG_MP.get(name)
- break
+ tgt_pkg = PKG_MP.get(p)
if not tgt_pkg:
- raise RuntimeError(("Do not know how to translate %s to "
- " a known package") % (p))
+ raise RuntimeError(("Do not know how to translate pypi dependency"
+ " %r to a known package") % (p))
else:
requires.append(tgt_pkg)
- templater.render_to_file(util.abs_join('debian', 'control'),
+ templater.render_to_file(util.abs_join(find_root(),
+ 'packages', 'debian', 'control.in'),
util.abs_join(deb_dir, 'control'),
params={'requires': requires})
-
- templater.render_to_file(util.abs_join('debian', 'rules'),
- util.abs_join(deb_dir, 'rules'),
- params={'init_sys': init_sys})
-
+
# Just copy the following directly
- for base_fn in ['dirs', 'copyright', 'compat', 'pycompat']:
- shutil.copy(util.abs_join('debian', base_fn),
+ for base_fn in ['dirs', 'copyright', 'compat', 'pycompat', 'rules']:
+ shutil.copy(util.abs_join(find_root(),
+ 'packages', 'debian', base_fn),
util.abs_join(deb_dir, base_fn))
def main():
parser = argparse.ArgumentParser()
- parser.add_argument("-n", "--no-sign", dest="sign",
- help=("attempt to sign "
- "the package (default: %(default)s)"),
- default=True,
- action='store_false')
parser.add_argument("-v", "--verbose", dest="verbose",
help=("run verbosely"
" (default: %(default)s)"),
default=False,
action='store_true')
- parser.add_argument("-b", "--boot", dest="boot",
- help="select boot type (default: %(default)s)",
- metavar="TYPE", default='upstart',
- choices=('upstart', 'upstart-local'))
+
+ for ent in DEBUILD_ARGS:
+ parser.add_argument(ent, dest="debuild_args", action='append_const',
+ const=ent, help=("pass through '%s' to debuild" % ent))
+
args = parser.parse_args()
capture = True
@@ -100,21 +100,19 @@ def main():
with util.tempdir() as tdir:
- cmd = [sys.executable,
- util.abs_join(os.pardir, 'tools', 'read-version')]
+ cmd = [util.abs_join(find_root(), 'tools', 'read-version')]
(sysout, _stderr) = util.subp(cmd)
version = sysout.strip()
cmd = ['bzr', 'revno']
(sysout, _stderr) = util.subp(cmd)
revno = sysout.strip()
-
+
# This is really only a temporary archive
# since we will extract it then add in the debian
# folder, then re-archive it for debian happiness
print("Creating a temporary tarball using the 'make-tarball' helper")
- cmd = [sys.executable,
- util.abs_join(os.getcwd(), 'make-tarball')]
+ cmd = [util.abs_join(find_root(), 'tools', 'make-tarball')]
(sysout, _stderr) = util.subp(cmd)
arch_fn = sysout.strip()
tmp_arch_fn = util.abs_join(tdir, os.path.basename(arch_fn))
@@ -123,47 +121,58 @@ def main():
print("Extracting temporary tarball %r" % (tmp_arch_fn))
cmd = ['tar', '-xvzf', tmp_arch_fn, '-C', tdir]
util.subp(cmd, capture=capture)
- base_name = os.path.basename(arch_fn)[:-len(".tar.gz")]
- shutil.move(util.abs_join(tdir, base_name),
- util.abs_join(tdir, 'cloud-init'))
+ extracted_name = tmp_arch_fn[:-len('.tar.gz')]
+ os.remove(tmp_arch_fn)
+
+ xdir = util.abs_join(tdir, 'cloud-init')
+ shutil.move(extracted_name, xdir)
- print("Creating a debian/ folder in %r" %
- (util.abs_join(tdir, 'cloud-init')))
- write_debian_folder(util.abs_join(tdir, 'cloud-init'),
- version, revno, args.boot)
+ print("Creating a debian/ folder in %r" % (xdir))
+ write_debian_folder(xdir, version, revno)
# The naming here seems to follow some debian standard
# so it will whine if it is changed...
- tar_fn = "cloud-init_%s~%s.orig.tar.gz" % (version, revno)
- print("Archiving that new folder into %r" % (tar_fn))
- cmd = ['tar', '-czvf',
- util.abs_join(tdir, tar_fn),
- '-C', util.abs_join(tdir, 'cloud-init')]
- cmd.extend(os.listdir(util.abs_join(tdir, 'cloud-init')))
+ tar_fn = "cloud-init_%s~bzr%s.orig.tar.gz" % (version, revno)
+ print("Archiving the adjusted source into %r" %
+ (util.abs_join(tdir, tar_fn)))
+ cmd = ['tar', '-czvf',
+ util.abs_join(tdir, tar_fn),
+ '-C', xdir]
+ cmd.extend(os.listdir(xdir))
util.subp(cmd, capture=capture)
- shutil.copy(util.abs_join(tdir, tar_fn), tar_fn)
- print("Wrote out archive %r" % (util.abs_join(tar_fn)))
-
- print("Running 'debuild' in %r" % (util.abs_join(tdir, 'cloud-init')))
- with util.chdir(util.abs_join(tdir, 'cloud-init')):
- cmd = ['debuild']
- if not args.sign:
- cmd.extend(['-us', '-uc'])
+
+ # Copy it locally for reference
+ shutil.copy(util.abs_join(tdir, tar_fn),
+ util.abs_join(os.getcwd(), tar_fn))
+ print("Copied that archive to %r for local usage (if desired)." %
+ (util.abs_join(os.getcwd(), tar_fn)))
+
+ print("Running 'debuild' in %r" % (xdir))
+ with util.chdir(xdir):
+ cmd = ['debuild', '--preserve-envvar', 'INIT_SYSTEM']
+ if args.debuild_args:
+ cmd.extend(args.debuild_args)
util.subp(cmd, capture=capture)
- globs = []
- globs.extend(glob.glob("%s/*.deb" %
- (os.path.join(tdir))))
link_fn = os.path.join(os.getcwd(), 'cloud-init_all.deb')
- for fn in globs:
- base_fn = os.path.basename(fn)
- shutil.move(fn, base_fn)
- print("Wrote out debian package %r" % (base_fn))
- if fn.endswith('_all.deb'):
+ link_dsc = os.path.join(os.getcwd(), 'cloud-init.dsc')
+ for base_fn in os.listdir(os.path.join(tdir)):
+ full_fn = os.path.join(tdir, base_fn)
+ if not os.path.isfile(full_fn):
+ continue
+ shutil.move(full_fn, base_fn)
+ print("Wrote %r" % (base_fn))
+ if base_fn.endswith('_all.deb'):
# Add in the local link
util.del_file(link_fn)
os.symlink(base_fn, link_fn)
- print("Linked %r to %r" % (base_fn, link_fn))
+ print("Linked %r to %r" % (base_fn,
+ os.path.basename(link_fn)))
+ if base_fn.endswith('.dsc'):
+ util.del_file(link_dsc)
+ os.symlink(base_fn, link_dsc)
+ print("Linked %r to %r" % (base_fn,
+ os.path.basename(link_dsc)))
return 0