summaryrefslogtreecommitdiff
path: root/morphlib/builder.py
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-01-11 17:00:33 +0000
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-01-11 17:00:33 +0000
commitaaee88bf4323dc4f29af63dd1b2a99c87c23ffa1 (patch)
tree8d219be1caf25a8a2b021b2d59c8a1474af2c4d5 /morphlib/builder.py
parenta41042cd9fd7ee21b2f47406764d650dbb9cea8e (diff)
downloadmorph-aaee88bf4323dc4f29af63dd1b2a99c87c23ffa1.tar.gz
stop morph from using fakeroot and sudo
Instead, assume the whole build will be run, by the user, under fakeroot or sudo (the latter for system image builds). This allows us to run all non-system-image-build tests without root access at all. We now always create the cache directory, if missing, even if we're running as root. We no longer run ldconfig if ld.so.conf is missing. It is missing during our tests, but is (now) created by fhs-dirs for real builds.
Diffstat (limited to 'morphlib/builder.py')
-rw-r--r--morphlib/builder.py61
1 files changed, 28 insertions, 33 deletions
diff --git a/morphlib/builder.py b/morphlib/builder.py
index c3e3b727..1ac18e0b 100644
--- a/morphlib/builder.py
+++ b/morphlib/builder.py
@@ -43,11 +43,13 @@ def ldconfig(ex, rootdir):
'''
- logging.debug('Running ldconfig for %s' % rootdir)
conf = os.path.join(rootdir, 'etc', 'ld.so.conf')
- cache = os.path.join(rootdir, 'etc', 'ld.so.cache')
- ex.runv(['ldconfig', '-f', conf, '-C', cache, '-r', rootdir])
-
+ if os.path.exists(conf):
+ logging.debug('Running ldconfig for %s' % rootdir)
+ cache = os.path.join(rootdir, 'etc', 'ld.so.cache')
+ ex.runv(['ldconfig', '-f', conf, '-C', cache, '-r', rootdir])
+ else:
+ logging.debug('No %s, not running ldconfig' % conf)
class BinaryBlob(object):
@@ -251,16 +253,14 @@ class Chunk(BinaryBlob):
self.run_sequentially('configure', bs['configure-commands'])
self.run_in_parallel('build', bs['build-commands'])
self.run_sequentially('test', bs['test-commands'])
- self.run_sequentially('install', bs['install-commands'],
- as_fakeroot=True)
+ self.run_sequentially('install', bs['install-commands'])
def build_using_commands(self):
self.msg('Building using explicit commands')
self.run_sequentially('configure', self.morph.configure_commands)
self.run_in_parallel('build', self.morph.build_commands)
self.run_sequentially('test', self.morph.test_commands)
- self.run_sequentially('install', self.morph.install_commands,
- as_fakeroot=True)
+ self.run_sequentially('install', self.morph.install_commands)
def run_in_parallel(self, what, commands):
self.msg('commands: %s' % what)
@@ -268,13 +268,13 @@ class Chunk(BinaryBlob):
self.ex.run(commands)
self.build_watch.stop(what)
- def run_sequentially(self, what, commands, as_fakeroot=False, as_root=False):
+ def run_sequentially(self, what, commands):
self.msg ('commands: %s' % what)
self.build_watch.start(what)
flags = self.ex.env['MAKEFLAGS']
self.ex.env['MAKEFLAGS'] = '-j1'
logging.debug('Setting MAKEFLAGS=%s' % self.ex.env['MAKEFLAGS'])
- self.ex.run(commands, as_fakeroot=as_fakeroot, as_root=as_root)
+ self.ex.run(commands)
self.ex.env['MAKEFLAGS'] = flags
logging.debug('Restore MAKEFLAGS=%s' % self.ex.env['MAKEFLAGS'])
self.build_watch.stop(what)
@@ -321,8 +321,7 @@ class Stratum(BinaryBlob):
self.build_watch.start('unpack-chunks')
for chunk_name, filename in self.built:
self.msg('Unpacking chunk %s' % chunk_name)
- morphlib.bins.unpack_binary(filename, self.destdir, ex,
- as_fakeroot=True)
+ morphlib.bins.unpack_binary(filename, self.destdir, ex)
self.build_watch.stop('unpack-chunks')
self.prepare_binary_metadata(self.morph.name)
self.build_watch.start('create-binary')
@@ -355,22 +354,20 @@ class System(BinaryBlob):
# Partition it.
self.build_watch.start('partition-image')
- self.ex.runv(['parted', '-s', image_name, 'mklabel', 'msdos'],
- as_root=True)
+ self.ex.runv(['parted', '-s', image_name, 'mklabel', 'msdos'])
self.ex.runv(['parted', '-s', image_name, 'mkpart', 'primary',
- '0%', '100%'], as_root=True)
- self.ex.runv(['parted', '-s', image_name, 'set', '1', 'boot', 'on'],
- as_root=True)
+ '0%', '100%'])
+ self.ex.runv(['parted', '-s', image_name, 'set', '1', 'boot', 'on'])
self.build_watch.stop('partition-image')
# Install first stage boot loader into MBR.
self.build_watch.start('install-mbr')
- self.ex.runv(['install-mbr', image_name], as_root=True)
+ self.ex.runv(['install-mbr', image_name])
self.build_watch.stop('install-mbr')
# Setup device mapper to access the partition.
self.build_watch.start('setup-device-mapper')
- out = self.ex.runv(['kpartx', '-av', image_name], as_root=True)
+ out = self.ex.runv(['kpartx', '-av', image_name])
devices = [line.split()[2]
for line in out.splitlines()
if line.startswith('add map ')]
@@ -381,14 +378,14 @@ class System(BinaryBlob):
try:
# Create filesystem.
self.build_watch.start('create-filesystem')
- self.ex.runv(['mkfs', '-t', 'ext3', partition], as_root=True)
+ self.ex.runv(['mkfs', '-t', 'ext3', partition])
self.build_watch.stop('create-filesystem')
# Mount it.
self.build_watch.start('mount-filesystem')
mount_point = self.tempdir.join('mnt')
os.mkdir(mount_point)
- self.ex.runv(['mount', partition, mount_point], as_root=True)
+ self.ex.runv(['mount', partition, mount_point])
self.build_watch.stop('mount-filesystem')
# Unpack all strata into filesystem.
@@ -396,8 +393,7 @@ class System(BinaryBlob):
self.build_watch.start('unpack-strata')
for name, filename in self.built:
self.msg('unpack %s from %s' % (name, filename))
- self.ex.runv(['tar', '-C', mount_point, '-xf', filename],
- as_root=True)
+ self.ex.runv(['tar', '-C', mount_point, '-xf', filename])
ldconfig(ex, mount_point)
self.build_watch.stop('unpack-strata')
@@ -409,7 +405,7 @@ class System(BinaryBlob):
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/sda1 / ext4 errors=remount-ro 0 1
-''', as_root=True, stdout=open(os.devnull,'w'))
+''', stdout=open(os.devnull,'w'))
self.build_watch.stop('create-fstab')
# Install extlinux bootloader.
@@ -423,9 +419,9 @@ timeout 1
label linux
kernel /vmlinuz
append root=/dev/sda1 init=/sbin/init quiet rw
-''', as_root=True, stdout=open(os.devnull, 'w'))
+''', stdout=open(os.devnull, 'w'))
- self.ex.runv(['extlinux', '--install', mount_point], as_root=True)
+ self.ex.runv(['extlinux', '--install', mount_point])
# Weird hack that makes extlinux work. There is a bug somewhere.
self.ex.runv(['sync'])
@@ -434,26 +430,26 @@ append root=/dev/sda1 init=/sbin/init quiet rw
# Unmount.
self.build_watch.start('unmount-filesystem')
- self.ex.runv(['umount', mount_point], as_root=True)
+ self.ex.runv(['umount', mount_point])
self.build_watch.stop('unmount-filesystem')
except BaseException, e:
# Unmount.
if mount_point is not None:
try:
- self.ex.runv(['umount', mount_point], as_root=True)
+ self.ex.runv(['umount', mount_point])
except Exception:
pass
# Undo device mapping.
try:
- self.ex.runv(['kpartx', '-d', image_name], as_root=True)
+ self.ex.runv(['kpartx', '-d', image_name])
except Exception:
pass
raise
# Undo device mapping.
self.build_watch.start('undo-device-mapper')
- self.ex.runv(['kpartx', '-d', image_name], as_root=True)
+ self.ex.runv(['kpartx', '-d', image_name])
self.build_watch.stop('undo-device-mapper')
# Move image file to cache.
@@ -574,13 +570,12 @@ class Builder(object):
if self.settings['bootstrap']:
self.msg('Unpacking chunk %s onto system' % chunk_name)
ex = morphlib.execute.Execute('/', self.msg)
- morphlib.bins.unpack_binary(chunk_filename, '/', ex, as_root=True)
+ morphlib.bins.unpack_binary(chunk_filename, '/', ex)
ldconfig(ex, '/')
else:
self.msg('Unpacking chunk %s into staging' % chunk_name)
ex = morphlib.execute.Execute(staging_dir, self.msg)
- morphlib.bins.unpack_binary(chunk_filename, staging_dir, ex,
- as_root=True)
+ morphlib.bins.unpack_binary(chunk_filename, staging_dir, ex)
ldconfig(ex, staging_dir)
def get_morph_from_git(self, repo, ref, filename):