X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;ds=sidebyside;f=vmdebootstrap;h=80089a513c8961c70d74a9e8c9c00457088c3f1d;hb=b1de5743d48d5e67319c2084d9104ef18979bf95;hp=67187f4facad9df35fa37491d53e4b48c18c04f9;hpb=7d44f8bbab3383d4b10ead404def7d9546707ce6;p=forks%2Fvmdebootstrap.git diff --git a/vmdebootstrap b/vmdebootstrap index 67187f4..80089a5 100755 --- a/vmdebootstrap +++ b/vmdebootstrap @@ -111,6 +111,11 @@ class VmDebootstrap(cliapp.Application): self.settings.boolean(['configure-apt'], 'Create an apt source based on the distribution ' 'and mirror selected.') + self.settings.boolean(['mbr'], + 'Run install-mbr (no longer done by default)') + self.settings.boolean(['grub'], + 'Install and configure grub2 - disables ' + 'extlinux.') def process_args(self, args): if not self.settings['image'] and not self.settings['tarball']: @@ -132,7 +137,8 @@ class VmDebootstrap(cliapp.Application): if self.settings['image']: self.create_empty_image() self.partition_image() - self.install_mbr() + if self.settings['mbr']: + self.install_mbr() (rootdev, bootdev) = self.setup_kpartx() self.mkfs(rootdev, type=roottype) rootdir = self.mount(rootdev) @@ -156,10 +162,13 @@ class VmDebootstrap(cliapp.Application): self.create_users(rootdir) self.remove_udev_persistent_rules(rootdir) self.setup_networking(rootdir) - self.configure_apt(rootdir) + if self.settings['configure-apt']: + self.configure_apt(rootdir) self.customize(rootdir) if self.settings['image']: - if self.settings['extlinux']: + if self.settings['grub']: + self.install_grub2(rootdev, rootdir) + elif self.settings['extlinux']: self.install_extlinux(rootdev, rootdir) self.append_serial_console(rootdir) self.optimize_image(rootdir) @@ -280,6 +289,9 @@ class VmDebootstrap(cliapp.Application): else: necessary_packages = ['acpid'] + if self.settings['grub']: + necessary_packages.append('grub2') + include = self.settings['package'] if not self.settings['no-kernel']: @@ -442,6 +454,26 @@ class VmDebootstrap(cliapp.Application): with open(inittab, 'a') as f: f.write('\nS0:23:respawn:%s\n' % serial_command) + def install_grub2(self, rootdev, rootdir): + self.message("Configuring grub2") + # rely on kpartx using consistent naming to map loop0p1 to loop0 + install_dev = os.path.join('/dev', os.path.basename(rootdev)[:-2]) + self.runcmd(['mount', '/dev', '-t', 'devfs', '-obind', + '%s' % os.path.join(rootdir, 'dev')]) + self.runcmd(['mount', '/proc', '-t', 'proc', '-obind', + '%s' % os.path.join(rootdir, 'proc')]) + self.runcmd(['mount', '/sys', '-t', 'sysfs', '-obind', + '%s' % os.path.join(rootdir, 'sys')]) + try: + self.runcmd(['chroot', rootdir, 'update-grub']) + self.runcmd(['chroot', rootdir, 'grub-install', install_dev]) + except cliapp.AppException as e: + self.message("Failed to configure grub2. Using extlinux.") + self.runcmd(['umount', os.path.join(rootdir, 'sys')]) + self.runcmd(['umount', os.path.join(rootdir, 'proc')]) + self.runcmd(['umount', os.path.join(rootdir, 'dev')]) + self.install_extlinux(rootdev, rootdir) + def install_extlinux(self, rootdev, rootdir): if not os.path.exists("/usr/bin/extlinux"): self.message("extlinux not installed, skipping.") @@ -560,9 +592,9 @@ append initrd=%(initrd)s root=UUID=%(uuid)s ro %(kserial)s logging.debug('configure apt %s' % conf) f = open(conf, 'w') f.write(''' - deb %(mirror)s %(distribution)s main - #deb-src %(mirror)s %(distribution)s main - ''' % { +deb %(mirror)s %(distribution)s main +#deb-src %(mirror)s %(distribution)s main +''' % { 'mirror': self.settings['mirror'], 'distribution': self.settings['distribution'] })