X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=vmdebootstrap;h=4bf8cfded88a287bc341fb77d4a0264a0f1aa9a2;hb=3106a9b2ea2a7778d1394a2c4b7e46ccbc39e6d7;hp=ce163b4f47a474112e4087e8b68d5f2adf18c05c;hpb=9507d09f75325c6157afbb6d0d9c08396ed43810;p=forks%2Fvmdebootstrap.git diff --git a/vmdebootstrap b/vmdebootstrap index ce163b4..4bf8cfd 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 @@ -28,34 +29,35 @@ class VmDebootstrap(cliapp.Application): def add_settings(self): default_arch = 'amd64' - self.settings.add_boolean_setting(['verbose'], - 'report what is going on') - self.settings.add_string_setting(['image'], - 'put created disk image in FILE', - metavar='FILE') - self.settings.add_bytesize_setting(['size'], - 'create a disk image of size SIZE ' - '(%default)', - metavar='SIZE', - default='1G') - self.settings.add_string_setting(['mirror'], - 'use MIRROR as package source ' - '(%default)', - metavar='URL', - default='http://cdn.debian.net/debian/') - self.settings.add_string_setting(['arch'], - 'architecture to use ' - '(%default)', - metavar='ARCH', - default=default_arch) - self.settings.add_string_setting(['distribution'], - 'release to use (%default)', - metavar='NAME', - 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.boolean(['verbose'], 'report what is going on') + self.settings.string(['image'], 'put created disk image in FILE', + metavar='FILE') + self.settings.bytesize(['size'], + 'create a disk image of size SIZE (%default)', + metavar='SIZE', + default='1G') + self.settings.string(['mirror'], + 'use MIRROR as package source (%default)', + metavar='URL', + default='http://cdn.debian.net/debian/') + self.settings.string(['arch'], 'architecture to use (%default)', + metavar='ARCH', + default=default_arch) + self.settings.string(['distribution'], + 'release to use (%default)', + metavar='NAME', + default='stable') + self.settings.string_list(['package'], 'install PACKAGE onto system') + self.settings.boolean(['enable-dhcp'], 'enable DHCP on eth0') + self.settings.string(['root-password'], 'set root password', + metavar='PASSWORD') + self.settings.string(['customize'], + 'run SCRIPT after setting up system', + metavar='SCRIPT') + self.settings.string(['hostname'], + 'set name to HOSTNAME (%default)', + metavar='HOSTNAME', + default='debian') def process_args(self, args): if not self.settings['image']: @@ -74,10 +76,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 @@ -165,9 +169,21 @@ 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') @@ -246,6 +262,12 @@ append initrd=%(initrd)s root=UUID=%(uuid)s ro quiet 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()