diff options
author | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2012-01-11 17:00:33 +0000 |
---|---|---|
committer | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2012-01-11 17:00:33 +0000 |
commit | aaee88bf4323dc4f29af63dd1b2a99c87c23ffa1 (patch) | |
tree | 8d219be1caf25a8a2b021b2d59c8a1474af2c4d5 /morphlib/builder.py | |
parent | a41042cd9fd7ee21b2f47406764d650dbb9cea8e (diff) | |
download | morph-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.py | 61 |
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): |