Skip to content

Commit

Permalink
Take subvol mount option for root into account
Browse files Browse the repository at this point in the history
If the rootfs is btrfs based make sure the fstab entry for
it takes the name of the root subvolume into account
  • Loading branch information
schaefi committed Jul 26, 2023
1 parent f97b47e commit f8f1c00
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
7 changes: 7 additions & 0 deletions kiwi/builder/disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -1119,6 +1119,13 @@ def _write_generic_fstab(
custom_root_mount_args += ['ro']
fs_check_interval = '0 0'

if self.volume_manager_name and self.volume_manager_name == 'btrfs':
root_volume_name = system.get_root_volume_name()
if root_volume_name != '/':
custom_root_mount_args += [
f'defaults,subvol={root_volume_name}'
]

self._add_fstab_entry(
device_map['root'].get_device(), '/',
custom_root_mount_args, fs_check_interval
Expand Down
35 changes: 35 additions & 0 deletions test/unit/builder/disk_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -1197,6 +1197,41 @@ def get_filesystem():
call('LABEL=blkid_result /var ext3 defaults 0 0')
] in self.disk_builder.fstab.add_entry.call_args_list

@patch('kiwi.builder.disk.FileSystem.new')
@patch('kiwi.builder.disk.VolumeManager.new')
@patch('kiwi.builder.disk.Command.run')
@patch('kiwi.builder.disk.Defaults.get_grub_boot_directory_name')
@patch('kiwi.builder.disk.ImageSystem')
@patch('os.path.exists')
def test_create_disk_btrfs_managed_root(
self, mock_exists, mock_ImageSystem, mock_grub_dir, mock_command,
mock_volume_manager, mock_fs
):
mock_exists.return_value = True
volume_manager = Mock()
volume_manager.get_device = Mock(
return_value={
'root': MappedDevice('root', Mock())
}
)
volume_manager.get_fstab = Mock(
return_value=['fstab_volume_entries']
)
volume_manager.get_root_volume_name = Mock(
return_value='@'
)
mock_volume_manager.return_value = volume_manager
filesystem = Mock()
mock_fs.return_value = filesystem
self.disk_builder.volume_manager_name = 'btrfs'

with patch('builtins.open'):
self.disk_builder.create_disk()

assert [
call('UUID=blkid_result / blkid_result_fs ro,defaults,subvol=@ 0 0')
] in self.disk_builder.fstab.add_entry.call_args_list

@patch('kiwi.builder.disk.FileSystem.new')
@patch('kiwi.builder.disk.VolumeManager.new')
@patch('kiwi.builder.disk.Command.run')
Expand Down

0 comments on commit f8f1c00

Please sign in to comment.