@@ -101,7 +101,8 @@ pub(crate) fn update(name: &str) -> Result<ComponentUpdateResult> {
101
101
} else {
102
102
anyhow:: bail!( "Component {} is not installed" , name) ;
103
103
} ;
104
- let update = component. query_update ( ) ?;
104
+ let sysroot = openat:: Dir :: open ( "/" ) ?;
105
+ let update = component. query_update ( & sysroot) ?;
105
106
let update = match update. as_ref ( ) {
106
107
Some ( p) if inst. meta . can_upgrade_to ( & p) => p,
107
108
_ => return Ok ( ComponentUpdateResult :: AtLatestVersion ) ,
@@ -110,8 +111,8 @@ pub(crate) fn update(name: &str) -> Result<ComponentUpdateResult> {
110
111
let mut pending_container = state. pending . take ( ) . unwrap_or_default ( ) ;
111
112
let interrupted = pending_container. get ( component. name ( ) ) . cloned ( ) ;
112
113
pending_container. insert ( component. name ( ) . into ( ) , update. clone ( ) ) ;
113
- let mut state_guard = SavedState :: acquire_write_lock ( openat :: Dir :: open ( "/" ) ? )
114
- . context ( "Failed to acquire write lock" ) ?;
114
+ let mut state_guard =
115
+ SavedState :: acquire_write_lock ( sysroot ) . context ( "Failed to acquire write lock" ) ?;
115
116
state_guard
116
117
. update_state ( & state)
117
118
. context ( "Failed to update state" ) ?;
@@ -132,18 +133,19 @@ pub(crate) fn update(name: &str) -> Result<ComponentUpdateResult> {
132
133
133
134
/// daemon implementation of component adoption
134
135
pub ( crate ) fn adopt_and_update ( name : & str ) -> Result < ContentMetadata > {
136
+ let sysroot = openat:: Dir :: open ( "/" ) ?;
135
137
let mut state = SavedState :: load_from_disk ( "/" ) ?. unwrap_or_default ( ) ;
136
138
let component = component:: new_from_name ( name) ?;
137
139
if state. installed . get ( name) . is_some ( ) {
138
140
anyhow:: bail!( "Component {} is already installed" , name) ;
139
141
} ;
140
- let update = if let Some ( update) = component. query_update ( ) ? {
142
+ let update = if let Some ( update) = component. query_update ( & sysroot ) ? {
141
143
update
142
144
} else {
143
145
anyhow:: bail!( "Component {} has no available update" , name) ;
144
146
} ;
145
- let mut state_guard = SavedState :: acquire_write_lock ( openat :: Dir :: open ( "/" ) ? )
146
- . context ( "Failed to acquire write lock" ) ?;
147
+ let mut state_guard =
148
+ SavedState :: acquire_write_lock ( sysroot ) . context ( "Failed to acquire write lock" ) ?;
147
149
148
150
let inst = component
149
151
. adopt_update ( & state_guard. sysroot , & update)
@@ -169,6 +171,7 @@ pub(crate) fn validate(name: &str) -> Result<ValidationResult> {
169
171
pub ( crate ) fn status ( ) -> Result < Status > {
170
172
let mut ret: Status = Default :: default ( ) ;
171
173
let mut known_components = get_components ( ) ;
174
+ let sysroot = openat:: Dir :: open ( "/" ) ?;
172
175
let state = SavedState :: load_from_disk ( "/" ) ?;
173
176
if let Some ( state) = state {
174
177
for ( name, ic) in state. installed . iter ( ) {
@@ -182,7 +185,7 @@ pub(crate) fn status() -> Result<Status> {
182
185
. as_ref ( )
183
186
. map ( |p| p. get ( name. as_str ( ) ) )
184
187
. flatten ( ) ;
185
- let update = component. query_update ( ) ?;
188
+ let update = component. query_update ( & sysroot ) ?;
186
189
let updatable = ComponentUpdatable :: from_metadata ( & ic. meta , update. as_ref ( ) ) ;
187
190
let adopted_from = ic. adopted_from . clone ( ) ;
188
191
ret. components . insert (
0 commit comments