diff options
-rw-r--r-- | MANIFEST.in | 2 | ||||
-rwxr-xr-x | bin/vmdebootstrap | 49 | ||||
-rw-r--r-- | doc/conf.py | 2 | ||||
-rw-r--r-- | man/conf.py | 2 | ||||
-rw-r--r-- | vmdebootstrap/__init__.py | 1 | ||||
-rw-r--r-- | vmdebootstrap/base.py | 18 | ||||
-rw-r--r-- | vmdebootstrap/codenames.py | 18 | ||||
-rw-r--r-- | vmdebootstrap/extlinux.py | 2 | ||||
-rw-r--r-- | vmdebootstrap/grub.py | 5 | ||||
-rw-r--r-- | vmdebootstrap/uefi.py | 7 |
10 files changed, 66 insertions, 40 deletions
diff --git a/MANIFEST.in b/MANIFEST.in index 2d9b7f4..c250038 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,5 +3,5 @@ include vmextract.py include vmdebootstrap.8.in recursive-include examples *.sh *.txt recursive-include common *.lib -recursive-include doc *.rst +include doc/* recursive-include man *.rst diff --git a/bin/vmdebootstrap b/bin/vmdebootstrap index db88d35..175292e 100755 --- a/bin/vmdebootstrap +++ b/bin/vmdebootstrap @@ -424,9 +424,7 @@ class VmDebootstrap(cliapp.Application): # pylint: disable=too-many-public-meth # uefi - make rootfs partition after end of ESP # needs extent elif self.settings['use-uefi']: - bootsize = self.settings['esp-size'] / (1024 * 1024) + 1 - runcmd(['parted', '-s', self.settings['image'], - 'mkpart', 'primary', str(bootsize), extent]) + uefi.make_root(extent) # no boot partition else: @@ -440,41 +438,18 @@ class VmDebootstrap(cliapp.Application): # pylint: disable=too-many-public-meth # return to doing swap setup base.make_swap(extent) - def _bootstrap_packages(self): # pylint: disable=too-many-branches + def _bootstrap_packages(self): + base = self.handlers[Base.name] uefi = self.handlers[Uefi.name] + grub = self.handlers[GrubHandler.name] distro = self.handlers[Codenames.name] - include = self.settings['package'] - if not self.settings['foreign'] and not self.settings['no-acpid']: - include.append('acpid') - - if self.settings['grub']: - if self.settings['use-uefi']: - include.extend(uefi.efi_packages()) - else: - include.append('grub-pc') - - if not self.settings['no-kernel']: - if self.settings['kernel-package']: - kernel_image = self.settings['kernel-package'] - else: - if self.settings['arch'] == 'i386': - # wheezy (which became oldstable on 04/25/2015) used '486' - if distro.was_oldstable(datetime.date(2015, 4, 26)): - kernel_arch = '486' - else: - kernel_arch = '586' - elif self.settings['arch'] == 'armhf': - kernel_arch = 'armmp' - else: - kernel_arch = self.settings['arch'] - kernel_image = 'linux-image-%s' % kernel_arch - include.append(kernel_image) - - if self.settings['sudo'] and 'sudo' not in include: - include.append('sudo') - - return include + include = self.settings['package'] + include.extend(base.base_packages()) + include.extend(uefi.efi_packages()) + include.extend(grub.grub_packages()) + include.extend(distro.kernel_package()) + return list(set(include)) def _debootstrap_second_stage(self, rootdir): base = self.handlers[Base.name] @@ -553,11 +528,13 @@ class VmDebootstrap(cliapp.Application): # pylint: disable=too-many-public-meth base = self.handlers[Base.name] base.message('Setting up networking') distro = self.handlers[Codenames.name] + ifc_d = os.path.join(rootdir, 'etc', 'network', 'interfaces.d') + if not os.path.exists(ifc_d): + os.mkdir(ifc_d) # unconditionally write for wheezy (which became oldstable on 04/25/2015) if distro.was_oldstable(datetime.date(2015, 4, 26)): with open(os.path.join(rootdir, 'etc', 'network', 'interfaces'), 'w') as netfile: netfile.write('source /etc/network/interfaces.d/*\n') - os.mkdir(os.path.join(rootdir, 'etc', 'network', 'interfaces.d')) elif not os.path.exists(os.path.join(rootdir, 'etc', 'network', 'interfaces')): iface_path = os.path.join(rootdir, 'etc', 'network', 'interfaces') diff --git a/doc/conf.py b/doc/conf.py index 9a1c0f2..5f3056c 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -10,6 +10,7 @@ # All configuration values have a default; values that are commented out # serve to show the default. +import subprocess import sys import os @@ -53,7 +54,6 @@ copyright = u'2015 Neil Williams' # |version| and |release|, also used in various other places throughout the # built documents. # -import subprocess # The short X.Y version. version = subprocess.Popen(['python', 'setup.py', '-V'], cwd=r'..', stdout=subprocess.PIPE).stdout.read().rstrip() # The full version, including alpha/beta/rc tags. diff --git a/man/conf.py b/man/conf.py index 0a9e248..7d80f0a 100644 --- a/man/conf.py +++ b/man/conf.py @@ -10,6 +10,7 @@ # All configuration values have a default; values that are commented out # serve to show the default. +import subprocess import sys import os @@ -47,7 +48,6 @@ copyright = u'2015, Neil Williams' # |version| and |release|, also used in various other places throughout the # built documents. # -import subprocess # The short X.Y version. version = subprocess.Popen(r'./version.py', cwd=r'..', stdout=subprocess.PIPE).stdout.read() # The full version, including alpha/beta/rc tags. diff --git a/vmdebootstrap/__init__.py b/vmdebootstrap/__init__.py index 8b13789..e69de29 100644 --- a/vmdebootstrap/__init__.py +++ b/vmdebootstrap/__init__.py @@ -1 +0,0 @@ - diff --git a/vmdebootstrap/base.py b/vmdebootstrap/base.py index be51ce6..fc7305d 100644 --- a/vmdebootstrap/base.py +++ b/vmdebootstrap/base.py @@ -178,3 +178,21 @@ class Base(object): logging.debug("Setting minimum 256Mb swap space") extent = "%s%%" % int(100 * (self.settings['size'] - swap) / self.settings['size']) return extent + + def make_swap(self, extent): + if self.settings['swap'] > 0: + logging.debug("Creating swap partition") + runcmd([ + 'parted', '-s', self.settings['image'], + 'mkpart', 'primary', 'linux-swap', extent, '100%']) + + def base_packages(self): + packages = [] + if not self.settings['foreign'] and not self.settings['no-acpid']: + packages.append('acpid') + if self.settings['sudo']: + packages.append('sudo') + if not self.settings['no-kernel']: + if self.settings['kernel-package']: + packages.append(self.settings['kernel-package']) + return packages diff --git a/vmdebootstrap/codenames.py b/vmdebootstrap/codenames.py index 25cd94d..d0f71fe 100644 --- a/vmdebootstrap/codenames.py +++ b/vmdebootstrap/codenames.py @@ -59,3 +59,21 @@ class Codenames(Base): if not self.debian_info.valid(suite): return False return suite == self.debian_info.stable(limit) + + def kernel_package(self): + packages = [] + if not self.settings['no-kernel']: + if self.settings['kernel-package']: + return packages + if self.settings['arch'] == 'i386': + # wheezy (which became oldstable on 04/25/2015) used '486' + if self.was_oldstable(datetime.date(2015, 4, 26)): + kernel_arch = '486' + else: + kernel_arch = '586' + elif self.settings['arch'] == 'armhf': + kernel_arch = 'armmp' + else: + kernel_arch = self.settings['arch'] + packages.append('linux-image-%s' % kernel_arch) + return packages diff --git a/vmdebootstrap/extlinux.py b/vmdebootstrap/extlinux.py index d5861a9..5698f6c 100644 --- a/vmdebootstrap/extlinux.py +++ b/vmdebootstrap/extlinux.py @@ -32,6 +32,8 @@ from vmdebootstrap.base import Base, runcmd class ExtLinux(Base): + name = 'extlinux' + def __init__(self): super(ExtLinux, self).__init__() diff --git a/vmdebootstrap/grub.py b/vmdebootstrap/grub.py index 909c2d1..95b17eb 100644 --- a/vmdebootstrap/grub.py +++ b/vmdebootstrap/grub.py @@ -116,3 +116,8 @@ class GrubHandler(Base): umount_wrapper(rootdir) if not ret: raise cliapp.AppException("Failed to install extra grub uefi") + + def grub_packages(self): + if self.settings['grub'] and not self.settings['use-uefi']: + return ['grub-pc'] + return [] diff --git a/vmdebootstrap/uefi.py b/vmdebootstrap/uefi.py index 7f77f9f..50ad842 100644 --- a/vmdebootstrap/uefi.py +++ b/vmdebootstrap/uefi.py @@ -46,6 +46,8 @@ class Uefi(Base): def efi_packages(self): packages = [] + if self.settings['grub'] and not self.settings['use-uefi']: + return packages pkg = arch_table[self.settings['arch']]['package'] self.message("Adding %s" % pkg) packages.append(pkg) @@ -123,3 +125,8 @@ class Uefi(Base): self.mkfs(bootdev, fstype='vfat') os.makedirs(self.bootdir) return self.bootdir + + def make_root(self, extent): + bootsize = self.settings['esp-size'] / (1024 * 1024) + 1 + runcmd(['parted', '-s', self.settings['image'], + 'mkpart', 'primary', str(bootsize), extent]) |