def mount_existing_system(storage, root_device, read_only=None): """Mount filesystems specified in root_device's /etc/fstab file.""" root_path = conf.target.physical_root read_only = "ro" if read_only else "" # Mount the root device. if root_device.protected and os.path.ismount("/mnt/install/isodir"): blivet_util.mount("/mnt/install/isodir", root_path, fstype=root_device.format.type, options="bind") else: root_device.setup() root_device.format.mount(chroot=root_path, mountpoint="/", options="%s,%s" % (root_device.format.options, read_only)) # Set up the sysroot. set_system_root(root_path) # Mount the filesystems. storage.fsset.parse_fstab(chroot=root_path) storage.fsset.mount_filesystems(root_path=root_path, read_only=read_only, skip_root=True) # Turn on swap. if not conf.target.is_image or not read_only: try: storage.fsset.turn_on_swap(root_path=root_path) except StorageError as e: log.error("Error enabling swap: %s", str(e)) # Generate mtab. if not read_only: storage.make_mtab(chroot=root_path)
def mount_filesystems(self): root_path = conf.target.physical_root # Mount the root and the filesystems. self.fsset.mount_filesystems(root_path=root_path) # Set up the sysroot. set_system_root(root_path)
def test_same(self, exists_mock, conf_mock, mkdir_mock, exec_mock): """Test set_system_root_path mount to same path""" conf_mock.target.system_root = "/same/root" exec_mock.side_effect = [0, 0, 0, 0] exists_mock.return_value = True set_system_root("/same/root") # same as conf target root exists_mock.assert_not_called() mkdir_mock.assert_not_called() exec_mock.assert_not_called()
def run(self): """Reload and find the path to the new deployment.""" sysroot_file = Gio.File.new_for_path(self._physroot) sysroot = OSTree.Sysroot.new(sysroot_file) sysroot.load(None) deployments = sysroot.get_deployments() assert len(deployments) > 0 deployment = deployments[0] deployment_path = sysroot.get_deployment_directory(deployment) set_system_root(deployment_path.get_path())
def test_alt(self, exists_mock, conf_mock, mkdir_mock, exec_mock): """Test set_system_root_path alternate code paths""" conf_mock.target.system_root = "/some/root" exec_mock.side_effect = [1, 0, 0, 0] exists_mock.return_value = False set_system_root("/other/root") exists_mock.assert_called_once_with("/some/root") mkdir_mock.assert_called_once_with("/some/root") exec_mock.assert_has_calls([ call("findmnt", ["-rn", "/some/root"]), call("mount", ["--rbind", "/other/root", "/some/root"]), ]) assert exec_mock.call_count == 2
def test_noroot(self, exists_mock, conf_mock, mkdir_mock, exec_mock): """Test set_system_root_path with no root""" conf_mock.target.system_root = "/some/root" exec_mock.side_effect = [0, 0, 0, 0] exists_mock.return_value = True set_system_root(None) exists_mock.assert_not_called() mkdir_mock.assert_not_called() exec_mock.assert_has_calls([ call("findmnt", ["-rn", "/some/root"]), call("mount", ["--make-rprivate", "/some/root"]), call("umount", ["--recursive", "/some/root"]), ]) assert exec_mock.call_count == 3
def test_fail(self, exists_mock, conf_mock, mkdir_mock, exec_mock): """Test set_system_root_path failure""" conf_mock.target.system_root = "/some/root" exec_mock.side_effect = [0, 0, 0, 1] exists_mock.return_value = True with pytest.raises(OSError): set_system_root("/other/root") exists_mock.assert_called_once_with("/some/root") mkdir_mock.assert_not_called() exec_mock.assert_has_calls([ call("findmnt", ["-rn", "/some/root"]), call("mount", ["--make-rprivate", "/some/root"]), call("umount", ["--recursive", "/some/root"]), call("mount", ["--rbind", "/other/root", "/some/root"]), ])
def test_success(self, exists_mock, conf_mock, mkdir_mock, exec_mock): """Test set_system_root_path success""" conf_mock.target.system_root = "/some/root" exec_mock.side_effect = [0, 0, 0, 0] exists_mock.return_value = True set_system_root( "/other/root") # note it's different from the conf target root exists_mock.assert_called_once_with("/some/root") mkdir_mock.assert_not_called() exec_mock.assert_has_calls([ call("findmnt", ["-rn", "/some/root"]), call("mount", ["--make-rprivate", "/some/root"]), call("umount", ["--recursive", "/some/root"]), call("mount", ["--rbind", "/other/root", "/some/root"]), ])
def umount_filesystems(self, swapoff=True): # Unmount the root and the filesystems. self.fsset.umount_filesystems(swapoff=swapoff) # Unmount the sysroot. set_system_root(None)