@@ -538,6 +538,8 @@ async fn initialize_ostree_root_from_self(
538
538
let sepolicy = state. load_policy ( ) ?;
539
539
let sepolicy = sepolicy. as_ref ( ) ;
540
540
541
+ let container_rootfs = & Dir :: open_ambient_dir ( "/" , cap_std:: ambient_authority ( ) ) ?;
542
+
541
543
// Load a fd for the mounted target physical root
542
544
let rootfs_dir = & root_setup. rootfs_fd ;
543
545
let rootfs = root_setup. rootfs . as_path ( ) ;
@@ -640,18 +642,29 @@ async fn initialize_ostree_root_from_self(
640
642
imgref : src_imageref,
641
643
} ;
642
644
645
+ // Load the kargs from the /usr/lib/bootc/kargs.d from the running root,
646
+ // which should be the same as the filesystem we'll deploy.
647
+ let kargsd = crate :: kargs:: get_kargs_in_root ( container_rootfs, std:: env:: consts:: ARCH ) ?;
648
+ let kargsd = kargsd. iter ( ) . map ( |s| s. as_str ( ) ) ;
649
+
643
650
let install_config_kargs = state
644
651
. install_config
645
652
. as_ref ( )
646
653
. and_then ( |c| c. kargs . as_ref ( ) )
647
654
. into_iter ( )
648
655
. flatten ( )
649
656
. map ( |s| s. as_str ( ) ) ;
657
+ // Final kargs, in order:
658
+ // - root filesystem kargs
659
+ // - install config kargs
660
+ // - kargs.d from container image
661
+ // - args specified on the CLI
650
662
let kargs = root_setup
651
663
. kargs
652
664
. iter ( )
653
665
. map ( |v| v. as_str ( ) )
654
666
. chain ( install_config_kargs)
667
+ . chain ( kargsd)
655
668
. chain ( state. config_opts . karg . iter ( ) . flatten ( ) . map ( |v| v. as_str ( ) ) )
656
669
. collect :: < Vec < _ > > ( ) ;
657
670
let mut options = ostree_container:: deploy:: DeployOpts :: default ( ) ;
0 commit comments