@@ -231,7 +231,7 @@ UUID=%s /var %s defaults 0 0
231
231
/var/home /home x-systemd.after=/var bind 0 0
232
232
/var/opt /opt x-systemd.after=/var bind 0 0
233
233
/.system/usr /.system/usr none bind,ro 0 0
234
- } `
234
+ `
235
235
fstab := fmt .Sprintf (
236
236
template ,
237
237
root .Partition .Uuid ,
@@ -250,6 +250,55 @@ UUID=%s /var %s defaults 0 0
250
250
return nil
251
251
}
252
252
253
+ // GenerateSbinInit generates a usr/sbin/init file for the future root
254
+ func (s * ABSystem ) GenerateSbinInit (rootPath string , root ABRootPartition ) error {
255
+ PrintVerbose ("ABSystem.GenerateSbinInit: generating init" )
256
+
257
+ template := `#!/usr/bin/bash
258
+ echo "ABRoot: Initializing mount points..."
259
+
260
+ # /var mount
261
+ mount -U %s /var
262
+
263
+ # /etc overlay
264
+ mount -t overlay overlay -o lowerdir=/.system/etc,upperdir=/var/lib/abroot/etc/%s,workdir=/var/lib/abroot/etc/%s-work /etc
265
+
266
+ # /var binds
267
+ mount -o bind /var/home /home
268
+ mount -o bind /var/opt /opt
269
+ mount -o bind,ro /.system/usr /usr
270
+
271
+ echo "ABRoot: Starting systemd..."
272
+
273
+ # Start systemd
274
+ exec /lib/systemd/systemd
275
+ `
276
+
277
+ init := fmt .Sprintf (
278
+ template ,
279
+ s .RootM .VarPartition .Uuid ,
280
+ root .Label ,
281
+ root .Label ,
282
+ )
283
+
284
+ os .Remove (rootPath + "/usr/sbin/init" )
285
+
286
+ err := ioutil .WriteFile (rootPath + "/usr/sbin/init" , []byte (init ), 0755 )
287
+ if err != nil {
288
+ PrintVerbose ("ABSystem.GenerateSbinInit:err: %s" , err )
289
+ return err
290
+ }
291
+
292
+ err = os .Chmod (rootPath + "/usr/sbin/init" , 0755 )
293
+ if err != nil {
294
+ PrintVerbose ("ABSystem.GenerateSbinInit:err(2): %s" , err )
295
+ return err
296
+ }
297
+
298
+ PrintVerbose ("ABSystem.GenerateSbinInit: init generated" )
299
+ return nil
300
+ }
301
+
253
302
// Upgrade upgrades the system to the latest available image
254
303
func (s * ABSystem ) Upgrade () error {
255
304
PrintVerbose ("ABSystem.Upgrade: starting upgrade" )
@@ -353,7 +402,7 @@ func (s *ABSystem) Upgrade() error {
353
402
return err
354
403
}
355
404
356
- // Stage 6: Generate /etc/fstab
405
+ // Stage 6: Generate /etc/fstab and /usr/sbin/init
357
406
// ------------------------------------------------
358
407
PrintVerbose ("[Stage 6] -------- ABSystemUpgrade" )
359
408
@@ -363,6 +412,12 @@ func (s *ABSystem) Upgrade() error {
363
412
return err
364
413
}
365
414
415
+ err = s .GenerateSbinInit (systemNew , partFuture )
416
+ if err != nil {
417
+ PrintVerbose ("ABSystem.Upgrade:err(6.1): %s" , err )
418
+ return err
419
+ }
420
+
366
421
// Stage 7: Update the bootloader
367
422
// ------------------------------------------------
368
423
PrintVerbose ("[Stage 7] -------- ABSystemUpgrade" )
0 commit comments