Skip to content

Commit 8b30128

Browse files
committed
install: Use separate pull stage for progress output
The goal here is to get interactive progress on pulling, as that can be slow and also I'd like to get more information there. Signed-off-by: Colin Walters <[email protected]>
1 parent 321c79b commit 8b30128

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

lib/src/cli.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ async fn upgrade(opts: UpgradeOpts) -> Result<()> {
533533
}
534534
}
535535
} else {
536-
let fetched = crate::deploy::pull(sysroot, imgref, opts.quiet).await?;
536+
let fetched = crate::deploy::pull(repo, imgref, opts.quiet).await?;
537537
let kargs = crate::kargs::get_kargs(repo, &booted_deployment, fetched.as_ref())?;
538538
let staged_digest = staged_image.as_ref().map(|s| s.image_digest.as_str());
539539
let fetched_digest = fetched.manifest_digest.as_str();
@@ -630,7 +630,7 @@ async fn switch(opts: SwitchOpts) -> Result<()> {
630630
}
631631
let new_spec = RequiredHostSpec::from_spec(&new_spec)?;
632632

633-
let fetched = crate::deploy::pull(sysroot, &target, opts.quiet).await?;
633+
let fetched = crate::deploy::pull(repo, &target, opts.quiet).await?;
634634
let kargs = crate::kargs::get_kargs(repo, &booted_deployment, fetched.as_ref())?;
635635

636636
if !opts.retain {
@@ -664,6 +664,8 @@ async fn rollback(_opts: RollbackOpts) -> Result<()> {
664664
#[context("Editing spec")]
665665
async fn edit(opts: EditOpts) -> Result<()> {
666666
let sysroot = &get_locked_sysroot().await?;
667+
let repo = &sysroot.repo();
668+
667669
let (booted_deployment, _deployments, host) =
668670
crate::status::get_status_require_booted(sysroot)?;
669671
let new_host: Host = if let Some(filename) = opts.filename {
@@ -690,8 +692,7 @@ async fn edit(opts: EditOpts) -> Result<()> {
690692
return crate::deploy::rollback(sysroot).await;
691693
}
692694

693-
let fetched = crate::deploy::pull(sysroot, new_spec.image, opts.quiet).await?;
694-
let repo = &sysroot.repo();
695+
let fetched = crate::deploy::pull(repo, new_spec.image, opts.quiet).await?;
695696
let kargs = crate::kargs::get_kargs(repo, &booted_deployment, fetched.as_ref())?;
696697

697698
// TODO gc old layers here

lib/src/deploy.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,10 @@ async fn handle_layer_progress_print(
164164
/// Wrapper for pulling a container image, wiring up status output.
165165
#[context("Pulling")]
166166
pub(crate) async fn pull(
167-
sysroot: &SysrootLock,
167+
repo: &ostree::Repo,
168168
imgref: &ImageReference,
169169
quiet: bool,
170170
) -> Result<Box<ImageState>> {
171-
let repo = &sysroot.repo();
172171
let ostree_imgref = &OstreeImageReference::from(imgref.clone());
173172
let mut imp = new_importer(repo, ostree_imgref).await?;
174173
let prep = match imp.prepare().await? {

lib/src/install.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ use serde::{Deserialize, Serialize};
4040
use self::baseline::InstallBlockDeviceOpts;
4141
use crate::containerenv::ContainerExecutionInfo;
4242
use crate::mount::Filesystem;
43+
use crate::spec::ImageReference;
4344
use crate::task::Task;
4445
use crate::utils::sigpolicy_from_opts;
4546

@@ -651,6 +652,12 @@ async fn initialize_ostree_root_from_self(
651652
imgref: src_imageref,
652653
};
653654

655+
// Pull the container image into the target root filesystem.
656+
{
657+
let spec_imgref = ImageReference::from(src_imageref.clone());
658+
crate::deploy::pull(&sysroot.repo(), &spec_imgref, false).await?;
659+
}
660+
654661
// Load the kargs from the /usr/lib/bootc/kargs.d from the running root,
655662
// which should be the same as the filesystem we'll deploy.
656663
let kargsd = crate::kargs::get_kargs_in_root(container_rootfs, std::env::consts::ARCH)?;

0 commit comments

Comments
 (0)