from distro_info import DebianDistroInfo, UbuntuDistroInfo
-__version__ = '0.10'
+__version__ = '0.11'
# pylint: disable=invalid-name,line-too-long,missing-docstring,too-many-branches
'set up foreign debootstrap environment using provided program (ie binfmt handler)')
self.settings.string(
['variant'],
- 'select debootstrap variant it not using the default')
+ 'select debootstrap variant if not using the default [deprecated]')
+ self.settings.string_list(
+ ['debootstrapopts'],
+ 'pass additional options to debootstrap'),
self.settings.boolean(
['extlinux'],
'install extlinux?',
'--include=%s' % ','.join(include))
if self.settings['foreign']:
args.append('--foreign')
- if self.settings['variant']:
+ if self.settings['debootstrapopts']:
+ for opt in self.settings['debootstrapopts']:
+ for part in opt.split(' '):
+ args.append('--%s' % part)
+ elif self.settings['variant']:
args.append('--variant')
args.append(self.settings['variant'])
args += [self.settings['distribution'],
else:
logging.debug('not removing non-existent %s', pathname)
+ def mask_udev_predictable_rules(self, rootdir):
+ """
+ This can be reset later but to get networking using immediately
+ on boot, the interface we're going to use must be kno
+ http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
+ """
+ self.message('Disabling systemd predictable interface names')
+ udev_path = os.path.join(
+ 'etc', 'udev', 'rules.d', '80-net-setup-link.rules')
+ self.runcmd(['chroot', rootdir, 'ln', '-s', '/dev/null', udev_path])
+
def setup_networking(self, rootdir):
self.message('Setting up networking')
+ ifc_file = os.path.join(rootdir, 'etc', 'network', 'interfaces')
+ ifc_d = os.path.join(rootdir, 'etc', 'network', 'interfaces.d')
- # unconditionally write for wheezy (which became oldstable on 04/25/2015)
+ # unconditionally write for wheezy (which became oldstable 2015.04.25)
if self.was_oldstable(datetime.date(2015, 4, 26)):
- with open(os.path.join(rootdir, 'etc', 'network', 'interfaces'), 'w') as netfile:
+ with open(ifc_file, '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')
- with open(iface_path, 'w') as netfile:
+ elif not os.path.exists(ifc_file):
+ with open(ifc_file, 'a') as netfile:
netfile.write('source-directory /etc/network/interfaces.d\n')
- ethpath = os.path.join(rootdir, 'etc', 'network', 'interfaces.d', 'setup')
+
+ if not os.path.exists(ifc_d):
+ os.mkdir(ifc_d)
+ ethpath = os.path.join(ifc_d, 'setup')
with open(ethpath, 'w') as eth:
eth.write('auto lo\n')
eth.write('iface lo inet loopback\n')
eth.write('\n')
eth.write('auto eth0\n')
eth.write('iface eth0 inet dhcp\n')
+ # force predictable interface names
+ self.mask_udev_predictable_rules(rootdir)
def append_serial_console(self, rootdir):
if self.settings['serial-console']: