def _setup_default_grub(self): """ Create or update etc/default/grub by parameters required according to the root filesystem setup * GRUB_TIMEOUT * SUSE_BTRFS_SNAPSHOT_BOOTING * GRUB_BACKGROUND * GRUB_THEME * GRUB_USE_LINUXEFI * GRUB_USE_INITRDEFI * GRUB_SERIAL_COMMAND * GRUB_CMDLINE_LINUX """ grub_default_entries = { 'GRUB_TIMEOUT': self.timeout } if self.cmdline: grub_default_entries['GRUB_CMDLINE_LINUX'] = '"{0}"'.format( self.cmdline ) if self.terminal and self.terminal == 'serial': serial_format = '"serial {0} {1} {2} {3} {4}"' grub_default_entries['GRUB_SERIAL_COMMAND'] = serial_format.format( '--speed=38400', '--unit=0', '--word=8', '--parity=no', '--stop=1' ) if self.theme: theme_setup = '{0}/{1}/theme.txt' grub_default_entries['GRUB_THEME'] = theme_setup.format( ''.join(['/boot/', self.boot_directory_name, '/themes']), self.theme ) theme_background = '{0}/{1}/background.png' grub_default_entries['GRUB_BACKGROUND'] = theme_background.format( ''.join(['/boot/', self.boot_directory_name, '/themes']), self.theme ) if self.firmware.efi_mode(): grub_default_entries['GRUB_USE_LINUXEFI'] = 'true' grub_default_entries['GRUB_USE_INITRDEFI'] = 'true' if self.xml_state.build_type.get_btrfs_root_is_snapshot(): grub_default_entries['SUSE_BTRFS_SNAPSHOT_BOOTING'] = 'true' if grub_default_entries: log.info('Writing grub2 defaults file') grub_default_location = ''.join([self.root_dir, '/etc/default/']) if os.path.exists(grub_default_location): grub_default_file = ''.join([grub_default_location, 'grub']) grub_default = SysConfig(grub_default_file) grub_default_entries_sorted = OrderedDict( sorted(grub_default_entries.items()) ) for key, value in list(grub_default_entries_sorted.items()): log.info('--> {0}:{1}'.format(key, value)) grub_default[key] = value grub_default.write()
def setup_sysconfig_bootloader(self): """ Create or update etc/sysconfig/bootloader by the following parameters required according to the grub2 bootloader setup * LOADER_TYPE * LOADER_LOCATION * DEFAULT_APPEND * FAILSAFE_APPEND """ sysconfig_bootloader_entries = { 'LOADER_TYPE': self.boot_directory_name, 'LOADER_LOCATION': 'mbr' } if self.cmdline: sysconfig_bootloader_entries['DEFAULT_APPEND'] = '"{0}"'.format( self.cmdline) if self.cmdline_failsafe: sysconfig_bootloader_entries['FAILSAFE_APPEND'] = '"{0}"'.format( self.cmdline_failsafe) log.info('Writing sysconfig bootloader file') sysconfig_bootloader_location = ''.join( [self.root_dir, '/etc/sysconfig/']) if os.path.exists(sysconfig_bootloader_location): sysconfig_bootloader_file = ''.join( [sysconfig_bootloader_location, 'bootloader']) sysconfig_bootloader = SysConfig(sysconfig_bootloader_file) sysconfig_bootloader_entries_sorted = OrderedDict( sorted(sysconfig_bootloader_entries.items())) for key, value in list( sysconfig_bootloader_entries_sorted.items()): log.info('--> {0}:{1}'.format(key, value)) sysconfig_bootloader[key] = value sysconfig_bootloader.write()
def _set_snapper_sysconfig_file(root_path): sysconf_file = SysConfig( os.sep.join([root_path, 'etc/sysconfig/snapper'])) if not sysconf_file.get('SNAPPER_CONFIGS') or \ len(sysconf_file['SNAPPER_CONFIGS'].strip('\"')) == 0: sysconf_file['SNAPPER_CONFIGS'] = '"root"' sysconf_file.write() elif len(sysconf_file['SNAPPER_CONFIGS'].split()) > 1: raise KiwiVolumeManagerSetupError( 'Unsupported SNAPPER_CONFIGS value: {0}'.format( sysconf_file['SNAPPER_CONFIGS'])) return os.sep.join([ root_path, 'etc/snapper/configs', sysconf_file['SNAPPER_CONFIGS'].strip('\"') ])
def setup_sysconfig_bootloader(self): """ Create or update etc/sysconfig/bootloader by the following parameters required according to the grub2 bootloader setup * LOADER_TYPE * LOADER_LOCATION * DEFAULT_APPEND * FAILSAFE_APPEND """ sysconfig_bootloader_entries = { 'LOADER_TYPE': 'grub2-efi' if self.firmware.efi_mode() else 'grub2', 'LOADER_LOCATION': 'none' if self.firmware.efi_mode() else 'mbr' } if self.cmdline: sysconfig_bootloader_entries['DEFAULT_APPEND'] = '"{0}"'.format( self.cmdline ) if self.cmdline_failsafe: sysconfig_bootloader_entries['FAILSAFE_APPEND'] = '"{0}"'.format( self.cmdline_failsafe ) log.info('Writing sysconfig bootloader file') sysconfig_bootloader_location = ''.join( [self.root_dir, '/etc/sysconfig/'] ) if os.path.exists(sysconfig_bootloader_location): sysconfig_bootloader_file = ''.join( [sysconfig_bootloader_location, 'bootloader'] ) sysconfig_bootloader = SysConfig( sysconfig_bootloader_file ) sysconfig_bootloader_entries_sorted = OrderedDict( sorted(sysconfig_bootloader_entries.items()) ) for key, value in list(sysconfig_bootloader_entries_sorted.items()): log.info('--> {0}:{1}'.format(key, value)) sysconfig_bootloader[key] = value sysconfig_bootloader.write()
class TestSysConfig: def setup(self): self.context_manager_mock = mock.Mock() self.file_mock = mock.Mock() self.enter_mock = mock.Mock() self.exit_mock = mock.Mock() self.enter_mock.return_value = self.file_mock setattr(self.context_manager_mock, '__enter__', self.enter_mock) setattr(self.context_manager_mock, '__exit__', self.exit_mock) self.sysconfig = SysConfig('../data/sysconfig_example.txt') def test_get_item(self): assert self.sysconfig['name'] == ' "Marcus"' assert self.sysconfig.get('name') == ' "Marcus"' def test_set_item_existing(self): self.sysconfig['name'] = 'Bob' assert self.sysconfig['name'] == 'Bob' def test_set_item_not_existing(self): self.sysconfig['foo'] = '"bar"' assert self.sysconfig['foo'] == '"bar"' assert self.sysconfig.data_list[-1] == 'foo' def test_contains(self): assert 'non_existing_key' not in self.sysconfig assert 'name' in self.sysconfig @patch_open def test_write(self, mock_open): mock_open.return_value = self.context_manager_mock self.sysconfig.write() assert self.file_mock.write.call_args_list == [ call('# some name'), call('\n'), call('name= "Marcus"'), call('\n'), call(''), call('\n'), call('some_key= some-value'), call('\n') ]
class TestSysConfig: def setup(self): self.sysconfig = SysConfig('../data/sysconfig_example.txt') def setup_method(self, cls): self.setup() def test_get_item(self): assert self.sysconfig['name'] == ' "Marcus"' assert self.sysconfig.get('name') == ' "Marcus"' def test_set_item_existing(self): self.sysconfig['name'] = 'Bob' assert self.sysconfig['name'] == 'Bob' def test_set_item_not_existing(self): self.sysconfig['foo'] = '"bar"' assert self.sysconfig['foo'] == '"bar"' assert self.sysconfig.data_list[-1] == 'foo' def test_contains(self): assert 'non_existing_key' not in self.sysconfig assert 'name' in self.sysconfig def test_write(self): m_open = mock_open() with patch('builtins.open', m_open, create=True): self.sysconfig.write() assert m_open.return_value.write.call_args_list == [ call('# some name'), call('\n'), call('name= "Marcus"'), call('\n'), call(''), call('\n'), call('some_key= some-value'), call('\n') ]
class TestSysConfig(object): def setup(self): self.context_manager_mock = mock.Mock() self.file_mock = mock.Mock() self.enter_mock = mock.Mock() self.exit_mock = mock.Mock() self.enter_mock.return_value = self.file_mock setattr(self.context_manager_mock, '__enter__', self.enter_mock) setattr(self.context_manager_mock, '__exit__', self.exit_mock) self.sysconfig = SysConfig('../data/sysconfig_example.txt') def test_get_item(self): assert self.sysconfig['name'] == ' "Marcus"' def test_set_item_existing(self): self.sysconfig['name'] = 'Bob' assert self.sysconfig['name'] == 'Bob' def test_set_item_not_existing(self): self.sysconfig['foo'] = '"bar"' assert self.sysconfig['foo'] == '"bar"' assert self.sysconfig.data_list[-1] == 'foo' @patch_open def test_write(self, mock_open): mock_open.return_value = self.context_manager_mock self.sysconfig.write() assert self.file_mock.write.call_args_list == [ call('# some name'), call('\n'), call('name= "Marcus"'), call('\n'), call(''), call('\n'), call('some_key= some-value'), call('\n') ]
def _setup_default_grub(self): # noqa: C901 """ Create or update etc/default/grub by parameters required according to the root filesystem setup * GRUB_TIMEOUT * SUSE_BTRFS_SNAPSHOT_BOOTING * GRUB_BACKGROUND * GRUB_THEME * GRUB_USE_LINUXEFI * GRUB_USE_INITRDEFI * GRUB_SERIAL_COMMAND * GRUB_CMDLINE_LINUX_DEFAULT * GRUB_GFXMODE * GRUB_TERMINAL * GRUB_DISTRIBUTOR """ grub_default_entries = { 'GRUB_TIMEOUT': self.timeout, 'GRUB_GFXMODE': self.gfxmode, 'GRUB_TERMINAL': '"{0}"'.format(self.terminal), 'GRUB_DISTRIBUTOR': '"{0}"'.format(self.get_menu_entry_title()) } if self.cmdline: grub_default_entries['GRUB_CMDLINE_LINUX_DEFAULT'] = '"{0}"'.format( re.sub(r'root=.* |root=.*$', '', self.cmdline).strip() ) if self.terminal and 'serial' in self.terminal: serial_format = '"serial {0} {1} {2} {3} {4}"' grub_default_entries['GRUB_SERIAL_COMMAND'] = serial_format.format( '--speed=38400', '--unit=0', '--word=8', '--parity=no', '--stop=1' ) if self.theme: theme_setup = '{0}/{1}/theme.txt' grub_default_entries['GRUB_THEME'] = theme_setup.format( ''.join(['/boot/', self.boot_directory_name, '/themes']), self.theme ) theme_background = '{0}/{1}/background.png'.format( ''.join(['/boot/', self.boot_directory_name, '/themes']), self.theme ) if os.path.exists(os.sep.join([self.root_dir, theme_background])): grub_default_entries['GRUB_BACKGROUND'] = theme_background if self.firmware.efi_mode(): # linuxefi/initrdefi only exist on x86, others always use efi if self.arch == 'ix86' or self.arch == 'x86_64': use_linuxefi_implemented = Command.run( [ 'grep', '-q', 'GRUB_USE_LINUXEFI', self._get_grub2_mkconfig_tool() ], raise_on_error=False ) if use_linuxefi_implemented.returncode == 0: grub_default_entries['GRUB_USE_LINUXEFI'] = 'true' grub_default_entries['GRUB_USE_INITRDEFI'] = 'true' self.validate_use_of_linuxefi = True if self.xml_state.build_type.get_btrfs_root_is_snapshot(): grub_default_entries['SUSE_BTRFS_SNAPSHOT_BOOTING'] = 'true' if self.custom_args.get('boot_is_crypto'): grub_default_entries['GRUB_ENABLE_CRYPTODISK'] = 'y' enable_blscfg_implemented = Command.run( [ 'grep', '-q', 'GRUB_ENABLE_BLSCFG', self._get_grub2_mkconfig_tool() ], raise_on_error=False ) if enable_blscfg_implemented.returncode == 0: grub_default_entries['GRUB_ENABLE_BLSCFG'] = 'true' if grub_default_entries: log.info('Writing grub2 defaults file') grub_default_location = ''.join([self.root_dir, '/etc/default/']) if os.path.exists(grub_default_location): grub_default_file = ''.join([grub_default_location, 'grub']) grub_default = SysConfig(grub_default_file) grub_default_entries_sorted = OrderedDict( sorted(grub_default_entries.items()) ) for key, value in list(grub_default_entries_sorted.items()): log.info('--> {0}:{1}'.format(key, value)) grub_default[key] = value grub_default.write()
def _setup_default_grub(self): """ Create or update etc/default/grub by parameters required according to the root filesystem setup * GRUB_TIMEOUT * SUSE_BTRFS_SNAPSHOT_BOOTING * GRUB_BACKGROUND * GRUB_THEME * GRUB_USE_LINUXEFI * GRUB_USE_INITRDEFI * GRUB_SERIAL_COMMAND * GRUB_CMDLINE_LINUX_DEFAULT """ grub_default_entries = { 'GRUB_TIMEOUT': self.timeout } if self.cmdline: grub_default_entries['GRUB_CMDLINE_LINUX_DEFAULT'] = '"{0}"'.format( self.cmdline ) if self.terminal and self.terminal == 'serial': serial_format = '"serial {0} {1} {2} {3} {4}"' grub_default_entries['GRUB_SERIAL_COMMAND'] = serial_format.format( '--speed=38400', '--unit=0', '--word=8', '--parity=no', '--stop=1' ) if self.theme: theme_setup = '{0}/{1}/theme.txt' grub_default_entries['GRUB_THEME'] = theme_setup.format( ''.join(['/boot/', self.boot_directory_name, '/themes']), self.theme ) theme_background = '{0}/{1}/background.png'.format( ''.join(['/boot/', self.boot_directory_name, '/themes']), self.theme ) if os.path.exists(os.sep.join([self.root_dir, theme_background])): grub_default_entries['GRUB_BACKGROUND'] = theme_background if self.firmware.efi_mode(): # linuxefi/initrdefi only exist on x86, others always use efi if self.arch == 'ix86' or self.arch == 'x86_64': grub_default_entries['GRUB_USE_LINUXEFI'] = 'true' grub_default_entries['GRUB_USE_INITRDEFI'] = 'true' if self.xml_state.build_type.get_btrfs_root_is_snapshot(): grub_default_entries['SUSE_BTRFS_SNAPSHOT_BOOTING'] = 'true' if grub_default_entries: log.info('Writing grub2 defaults file') grub_default_location = ''.join([self.root_dir, '/etc/default/']) if os.path.exists(grub_default_location): grub_default_file = ''.join([grub_default_location, 'grub']) grub_default = SysConfig(grub_default_file) grub_default_entries_sorted = OrderedDict( sorted(grub_default_entries.items()) ) for key, value in list(grub_default_entries_sorted.items()): log.info('--> {0}:{1}'.format(key, value)) grub_default[key] = value grub_default.write()