X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=vmdebootstrap;h=19238c7dab98deacb8d4aaa2bff42d3d9314d32f;hb=1f0b11248461b09c6fdbb4e664d826adbb4ebde0;hp=6d0578207e3934a4629224f6f25496549ba52255;hpb=96b6c1bee590500030a5ad25b47e9d57f1957fc4;p=forks%2Fvmdebootstrap.git diff --git a/vmdebootstrap b/vmdebootstrap index 6d05782..19238c7 100755 --- a/vmdebootstrap +++ b/vmdebootstrap @@ -15,6 +15,7 @@ # along with this program. If not, see . import cliapp +import crypt import logging import os import re @@ -54,6 +55,18 @@ class VmDebootstrap(cliapp.Application): default='stable') self.settings.add_string_list_setting(['package'], 'install PACKAGE onto system') + self.settings.add_boolean_setting(['enable-dhcp'], + 'enable DHCP on eth0') + self.settings.add_string_setting(['root-password'], + 'set root password', + metavar='PASSWORD') + self.settings.add_string_setting(['customize'], + 'run SCRIPT after setting up system', + metavar='SCRIPT') + self.settings.add_string_setting(['hostname'], + 'set name to HOSTNAME (%default)', + metavar='HOSTNAME', + default='debian') def process_args(self, args): if not self.settings['image']: @@ -72,8 +85,12 @@ class VmDebootstrap(cliapp.Application): self.mkfs(rootdev) rootdir = self.mount(rootdev) self.debootstrap(rootdir) + self.set_hostname(rootdir) self.set_root_password(rootdir) + self.remove_udev_persistent_rules(rootdir) + self.setup_networking(rootdir) self.install_extlinux(rootdev, rootdir) + self.customize(rootdir) except: self.cleanup() raise @@ -161,9 +178,45 @@ class VmDebootstrap(cliapp.Application): rootdir, self.settings['mirror']]) + def set_hostname(self, rootdir): + hostname = self.settings['hostname'] + f = open(os.path.join(rootdir, 'etc', 'hostname'), 'w') + f.write(hostname) + f.close() + def set_root_password(self, rootdir): - self.message('Removing root password') - self.runcmd(['chroot', rootdir, 'passwd', '-d', 'root']) + if self.settings['root-password']: + self.message('Setting root password') + encrypted = crypt.crypt(self.settings['root-password'], '..') + self.runcmd(['chroot', rootdir, 'usermod', '-p', encrypted, + 'root']) + else: + self.message('Locking root password') + self.runcmd(['chroot', rootdir, 'passwd', '-l', 'root']) + + def remove_udev_persistent_rules(self, rootdir): + self.message('Removing udev persistent cd and net rules') + for x in ['70-persistent-cd.rules', '70-persistent-net.rules']: + pathname = os.path.join(rootdir, 'etc', 'udev', 'rules.d', x) + if os.path.exists(pathname): + logging.debug('rm %s' % pathname) + os.remove(pathname) + else: + logging.debug('not removing non-existent %s' % pathname) + + def setup_networking(self, rootdir): + self.message('Setting up networking') + + f = open(os.path.join(rootdir, 'etc', 'network', 'interfaces'), 'w') + f.write('auto lo\n') + f.write('iface lo inet loopback\n') + + if self.settings['enable-dhcp']: + f.write('\n') + f.write('allow-hotplug eth0\n') + f.write('iface eth0 inet dhcp\n') + + f.close() def install_extlinux(self, rootdev, rootdir): self.message('Installing extlinux') @@ -193,7 +246,7 @@ timeout 1 label linux kernel %(kernel)s -append initrd=%(initrd)s root=UUID=%(uuid)s ro +append initrd=%(initrd)s root=UUID=%(uuid)s ro quiet ''' % { 'kernel': kernel_image, 'initrd': initrd_image, @@ -218,6 +271,12 @@ append initrd=%(initrd)s root=UUID=%(uuid)s ro for dirname in self.remove_dirs: shutil.rmtree(dirname) + def customize(self, rootdir): + script = self.settings['customize'] + if script: + self.message('Running customize script %s' % script) + self.runcmd([script, rootdir]) + if __name__ == '__main__': VmDebootstrap().run()