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 25, 2023
1 parent f3caa39 commit 4a55c5d
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 @@ -1118,6 +1118,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 @@ -1195,6 +1195,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 4a55c5d

Please sign in to comment.