@@ -189,6 +189,23 @@ func main() {
189
189
}
190
190
}()
191
191
192
+ zinit , err := zinit .New (zinitSocket )
193
+ if err != nil {
194
+ log .Fatal ().Err (err ).Msg ("failed to connect to zinit" )
195
+ }
196
+
197
+ // with volume allocation is set to nil this flister can be
198
+ // only used for RO mounts. Otherwise it will panic
199
+ flister := flist .New (root , nil )
200
+
201
+ upgrader := upgrade.Upgrader {
202
+ FLister : flister ,
203
+ Zinit : zinit ,
204
+ NoSelfUpdate : debug ,
205
+ }
206
+
207
+ installBinaries (& boot , & upgrader )
208
+
192
209
utils .OnDone (ctx , func (_ error ) {
193
210
log .Info ().Msg ("received a termination signal" )
194
211
})
@@ -205,7 +222,7 @@ func main() {
205
222
// 4. Start watcher for new version
206
223
log .Info ().Msg ("start upgrade daemon" )
207
224
208
- upgradeLoop (ctx , & boot , root , debug , monitor , register )
225
+ upgradeLoop (ctx , & boot , & upgrader , debug , monitor , register )
209
226
}
210
227
211
228
func getBinsRepo () string {
@@ -246,31 +263,45 @@ func debugReinstall(boot *upgrade.Boot, up *upgrade.Upgrader) {
246
263
}()
247
264
}
248
265
249
- func upgradeLoop (
250
- ctx context.Context ,
251
- boot * upgrade.Boot ,
252
- root string ,
253
- debug bool ,
254
- monitor * monitorStream ,
255
- register func (string ) error ) {
266
+ func installBinaries (boot * upgrade.Boot , upgrader * upgrade.Upgrader ) {
256
267
257
- zinit , err := zinit .New (zinitSocket )
268
+ bins , _ := boot .CurrentBins ()
269
+
270
+ repoWatcher := upgrade.FListRepoWatcher {
271
+ Repo : getBinsRepo (),
272
+ Current : bins ,
273
+ }
274
+
275
+ current , toAdd , toDel , err := repoWatcher .Diff ()
258
276
if err != nil {
259
- log .Fatal ().Err (err ).Msg ("failed to connect to zinit " )
277
+ log .Error ().Err (err ).Msg ("failed to list latest binaries to install " )
260
278
}
261
279
262
- // with volume allocation is set to nil this flister can be
263
- // only used for RO mounts. Otherwise it will panic
264
- flister := flist .New (root , nil )
280
+ for _ , pkg := range toDel {
281
+ if err := upgrader .UninstallBinary (pkg ); err != nil {
282
+ log .Error ().Err (err ).Str ("flist" , pkg .Fqdn ()).Msg ("failed to uninstall flist" )
283
+ }
284
+ }
265
285
266
- upgrader := upgrade. Upgrader {
267
- FLister : flister ,
268
- Zinit : zinit ,
269
- NoSelfUpdate : debug ,
286
+ for _ , pkg := range toAdd {
287
+ if err := upgrader . InstallBinary ( pkg ); err != nil {
288
+ log . Error (). Err ( err ). Str ( "package" , pkg . Fqdn ()). Msg ( "failed to install package" )
289
+ }
270
290
}
271
291
292
+ boot .SetBins (current )
293
+ }
294
+
295
+ func upgradeLoop (
296
+ ctx context.Context ,
297
+ boot * upgrade.Boot ,
298
+ upgrader * upgrade.Upgrader ,
299
+ debug bool ,
300
+ monitor * monitorStream ,
301
+ register func (string ) error ) {
302
+
272
303
if debug {
273
- debugReinstall (boot , & upgrader )
304
+ debugReinstall (boot , upgrader )
274
305
}
275
306
276
307
flistWatcher := upgrade.FListSemverWatcher {
0 commit comments