@@ -336,62 +336,15 @@ func (p *BootcDisk) runInstallContainer(quiet bool, config DiskImageConfig) (err
336
336
logrus .Debugf ("Started install container" )
337
337
338
338
var exitCode int32
339
- if quiet {
340
- //wait for the container to finish
341
- logrus .Debugf ("Waiting for container completion" )
342
- exitCode , err = containers .Wait (p .Ctx , p .bootcInstallContainerId , nil )
343
- if err != nil {
344
- return fmt .Errorf ("failed to wait for container: %w" , err )
345
- }
346
- } else {
347
- // stream logs to stdout and stderr
348
- stdOut := make (chan string )
349
- stdErr := make (chan string )
350
- logErrors := make (chan error )
351
-
352
- var wg sync.WaitGroup
353
- go func () {
354
- follow := true
355
- defer close (stdOut )
356
- defer close (stdErr )
357
- trueV := true
358
- err = containers .Logs (p .Ctx , p .bootcInstallContainerId , & containers.LogOptions {Follow : & follow , Stdout : & trueV , Stderr : & trueV }, stdOut , stdErr )
359
- if err != nil {
360
- logErrors <- err
361
- }
362
-
363
- close (logErrors )
364
- }()
365
-
366
- wg .Add (1 )
367
- go func () {
368
- for str := range stdOut {
369
- fmt .Print (str )
370
- }
371
- wg .Done ()
372
- }()
373
-
374
- wg .Add (1 )
375
- go func () {
376
- for str := range stdErr {
377
- fmt .Fprintf (os .Stderr , "%s" , str )
378
- }
379
- wg .Done ()
380
- }()
381
-
382
- //wait for the container to finish
383
- logrus .Debugf ("Waiting for container completion (streaming output)" )
384
- exitCode , err = containers .Wait (p .Ctx , p .bootcInstallContainerId , nil )
385
- if err != nil {
386
- return fmt .Errorf ("failed to wait for container: %w" , err )
387
- }
388
-
389
- if err := <- logErrors ; err != nil {
390
- return fmt .Errorf ("failed to get logs: %w" , err )
339
+ if ! quiet {
340
+ attachOpts := new (containers.AttachOptions ).WithStream (true )
341
+ if err := containers .Attach (p .Ctx , p .bootcInstallContainerId , os .Stdin , os .Stdout , os .Stderr , nil , attachOpts ); err != nil {
342
+ return fmt .Errorf ("attaching: %w" , err )
391
343
}
392
-
393
- // Ensure the streams are done
394
- wg .Wait ()
344
+ }
345
+ exitCode , err = containers .Wait (p .Ctx , p .bootcInstallContainerId , nil )
346
+ if err != nil {
347
+ return fmt .Errorf ("failed to wait for container: %w" , err )
395
348
}
396
349
397
350
if exitCode != 0 {
@@ -424,13 +377,16 @@ func (p *BootcDisk) createInstallContainer(config DiskImageConfig, tempLosetup s
424
377
}
425
378
bootcInstallArgs = append (bootcInstallArgs , "/output/" + filepath .Base (p .file .Name ()))
426
379
380
+ // Allocate pty so we can show progress bars, spinners etc.
381
+ trueDat := true
427
382
s := & specgen.SpecGenerator {
428
383
ContainerBasicConfig : specgen.ContainerBasicConfig {
429
384
Command : bootcInstallArgs ,
430
385
PidNS : specgen.Namespace {NSMode : specgen .Host },
431
386
Remove : & autoRemove ,
432
387
Annotations : map [string ]string {"io.podman.annotations.label" : "type:unconfined_t" },
433
388
Env : targetEnv ,
389
+ Terminal : & trueDat ,
434
390
},
435
391
ContainerStorageConfig : specgen.ContainerStorageConfig {
436
392
Image : p .ImageNameOrId ,
0 commit comments