Skip to content

Commit 5cb20de

Browse files
committed
store: Add accessors for the ostree repo
To make clearer what it is vs the other two storage types. Signed-off-by: Colin Walters <[email protected]>
1 parent d3ddd17 commit 5cb20de

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

crates/lib/src/deploy.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ pub(crate) async fn cleanup(sysroot: &Storage) -> Result<()> {
464464

465465
// We create clones (just atomic reference bumps) here to move to the thread.
466466
let repo = sysroot.repo();
467-
let sysroot = sysroot.sysroot.clone();
467+
let sysroot = sysroot.get_ostree_cloned()?;
468468
let repo_prune =
469469
ostree_ext::tokio_util::spawn_blocking_cancellable_flatten(move |cancellable| {
470470
let locked_sysroot = &SysrootLock::from_assumed_locked(&sysroot);
@@ -543,7 +543,7 @@ async fn deploy(
543543
None
544544
};
545545
// Clone all the things to move to worker thread
546-
let sysroot_clone = sysroot.sysroot.clone();
546+
let ostree = sysroot.get_ostree_cloned()?;
547547
// ostree::Deployment is incorrectly !Send 😢 so convert it to an integer
548548
let merge_deployment = merge_deployment.map(|d| d.index() as usize);
549549
let stateroot = stateroot.to_string();
@@ -553,7 +553,7 @@ async fn deploy(
553553
let r = async_task_with_spinner(
554554
"Deploying",
555555
spawn_blocking_cancellable_flatten(move |cancellable| -> Result<_> {
556-
let sysroot = sysroot_clone;
556+
let ostree = ostree;
557557
let stateroot = Some(stateroot);
558558
let mut opts = ostree::SysrootDeployTreeOpts::default();
559559

@@ -565,11 +565,11 @@ async fn deploy(
565565
if let Some(kargs) = override_kargs.as_deref() {
566566
opts.override_kernel_argv = Some(&kargs);
567567
}
568-
let deployments = sysroot.deployments();
568+
let deployments = ostree.deployments();
569569
let merge_deployment = merge_deployment.map(|m| &deployments[m]);
570570
let origin = glib::KeyFile::new();
571571
origin.load_from_data(&origin_data, glib::KeyFileFlags::NONE)?;
572-
let d = sysroot.stage_tree_with_options(
572+
let d = ostree.stage_tree_with_options(
573573
stateroot.as_deref(),
574574
&ostree_commit,
575575
Some(&origin),

crates/lib/src/store/mod.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub(crate) struct Storage {
3636
pub physical_root: Dir,
3737

3838
/// The OSTree storage
39-
pub sysroot: SysrootLock,
39+
ostree: SysrootLock,
4040
/// The composefs storage
4141
pub composefs: OnceCell<Arc<ComposefsRepository>>,
4242
/// The containers-image storage used foR LBIs
@@ -56,7 +56,7 @@ impl Deref for Storage {
5656
type Target = SysrootLock;
5757

5858
fn deref(&self) -> &Self::Target {
59-
&self.sysroot
59+
&self.ostree
6060
}
6161
}
6262

@@ -82,21 +82,32 @@ impl Storage {
8282

8383
Ok(Self {
8484
physical_root,
85-
sysroot,
85+
ostree: sysroot,
8686
run,
8787
composefs: Default::default(),
8888
imgstore: Default::default(),
8989
})
9090
}
9191

92+
/// Access the underlying ostree repository
93+
pub(crate) fn get_ostree(&self) -> Result<&SysrootLock> {
94+
Ok(&self.ostree)
95+
}
96+
97+
/// Access the underlying ostree repository
98+
pub(crate) fn get_ostree_cloned(&self) -> Result<ostree::Sysroot> {
99+
let r = self.get_ostree()?;
100+
Ok((*r).clone())
101+
}
102+
92103
/// Access the image storage; will automatically initialize it if necessary.
93104
pub(crate) fn get_ensure_imgstore(&self) -> Result<&crate::imgstorage::Storage> {
94105
if let Some(imgstore) = self.imgstore.get() {
95106
return Ok(imgstore);
96107
}
97-
let sysroot_dir = crate::utils::sysroot_dir(&self.sysroot)?;
108+
let sysroot_dir = crate::utils::sysroot_dir(&self.ostree)?;
98109

99-
let sepolicy = if self.sysroot.booted_deployment().is_none() {
110+
let sepolicy = if self.ostree.booted_deployment().is_none() {
100111
// fallback to policy from container root
101112
// this should only happen during cleanup of a broken install
102113
tracing::trace!("falling back to container root's selinux policy");
@@ -106,8 +117,8 @@ impl Storage {
106117
// load the sepolicy from the booted ostree deployment so the imgstorage can be
107118
// properly labeled with /var/lib/container/storage labels
108119
tracing::trace!("loading sepolicy from booted ostree deployment");
109-
let dep = self.sysroot.booted_deployment().unwrap();
110-
let dep_fs = deployment_fd(&self.sysroot, &dep)?;
120+
let dep = self.ostree.booted_deployment().unwrap();
121+
let dep_fs = deployment_fd(&self.ostree, &dep)?;
111122
lsm::new_sepolicy_at(&dep_fs)?
112123
};
113124

@@ -132,7 +143,7 @@ impl Storage {
132143

133144
// Bootstrap verity off of the ostree state. In practice this means disabled by
134145
// default right now.
135-
let ostree_repo = &self.sysroot.repo();
146+
let ostree_repo = &self.ostree.repo();
136147
let ostree_verity = ostree_ext::fsverity::is_verity_enabled(ostree_repo)?;
137148
if !ostree_verity.enabled {
138149
tracing::debug!("Setting insecure mode for composefs repo");
@@ -147,7 +158,7 @@ impl Storage {
147158
#[context("Updating storage root mtime")]
148159
pub(crate) fn update_mtime(&self) -> Result<()> {
149160
let sysroot_dir =
150-
crate::utils::sysroot_dir(&self.sysroot).context("Reopen sysroot directory")?;
161+
crate::utils::sysroot_dir(&self.ostree).context("Reopen sysroot directory")?;
151162

152163
sysroot_dir
153164
.update_timestamps(std::path::Path::new(BOOTC_ROOT))

0 commit comments

Comments
 (0)