X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=vmdebootstrap;h=b66a84ed182a87706ebd7fb786f130d4395f1815;hb=827ae8e56e5669ac0488e0876e672adb8ead4d47;hp=99ef25622f39e093bd5782cc632c55bb9b211151;hpb=545b3e5065fa1f57540cb01255d911d3c5ef2f96;p=forks%2Fvmdebootstrap.git diff --git a/vmdebootstrap b/vmdebootstrap index 99ef256..b66a84e 100755 --- a/vmdebootstrap +++ b/vmdebootstrap @@ -158,13 +158,13 @@ class VmDebootstrap(cliapp.Application): # pylint: disable=too-many-public-meth 'Create an apt source based on the distribution and mirror selected.') self.settings.boolean( ['mbr'], - 'Run install-mbr (no longer done by default)') + 'Run install-mbr (default if extlinux used)') self.settings.boolean( ['grub'], 'Install and configure grub2 - disables extlinux.') self.settings.boolean( ['sparse'], - 'Dont fill the image with zeros to keep a sparse disk image', + 'Do not fill the image with zeros to keep a sparse disk image', default=False) self.settings.boolean( ['pkglist'], @@ -187,7 +187,7 @@ class VmDebootstrap(cliapp.Application): # pylint: disable=too-many-public-meth if self.settings['image']: self.create_empty_image() self.partition_image() - if self.settings['mbr']: + if self.settings['mbr'] or self.settings['extlinux']: self.install_mbr() (rootdev, bootdev) = self.setup_kpartx() self.mkfs(rootdev, fstype=roottype) @@ -340,6 +340,10 @@ class VmDebootstrap(cliapp.Application): # pylint: disable=too-many-public-meth if os.path.exists("/sbin/install-mbr"): self.message('Installing MBR') self.runcmd(['install-mbr', self.settings['image']]) + else: + msg = "mbr enabled but /sbin/install-mbr not found" \ + " - please install the mbr package." + raise cliapp.AppException(msg) def setup_kpartx(self): bootindex = None @@ -356,7 +360,9 @@ class VmDebootstrap(cliapp.Application): # pylint: disable=too-many-public-meth for line in out.splitlines() if line.startswith('add map ')] if len(devices) != parts: - raise cliapp.AppException('Surprising number of partitions') + msg = 'Surprising number of partitions' + logging.debug("%s: devices=%s parts=%s", msg, devices, parts) + raise cliapp.AppException(msg) root = '/dev/mapper/%s' % devices[rootindex] if self.settings['bootsize']: boot = '/dev/mapper/%s' % devices[bootindex] @@ -697,16 +703,20 @@ append initrd=%(initrd)s root=UUID=%(uuid)s ro %(kserial)s def chown(self): # Change image owner after completed build + if self.settings['image']: + filename = self.settings['image'] + elif self.settings['tarball']: + filename = self.settings['tarball'] + else: + return self.message("Changing owner to %s" % self.settings["owner"]) - subprocess.call(["chown", - self.settings["owner"], - self.settings["image"]]) + subprocess.call(["chown", self.settings["owner"], filename]) def list_installed_pkgs(self, rootdir): # output the list of installed packages for sources identification self.message("Creating a list of installed binary package names") out = self.runcmd(['chroot', rootdir, - 'dpkg-query', '-W' "-f='${Package}.deb\n'"]) + 'dpkg-query', '-W', "-f='${Package}.deb\n'"]) with open('dpkg.list', 'w') as dpkg: dpkg.write(out) @@ -726,6 +736,8 @@ append initrd=%(initrd)s root=UUID=%(uuid)s ro %(kserial)s line = '#deb-src %s %s main\n' % (mirror, self.settings['distribution']) f.write(line) f.close() + # ensure the apt sources have valid lists + self.runcmd(['chroot', rootdir, 'apt-get', 'update']) if __name__ == '__main__': VmDebootstrap(version=__version__).run()