switchroot: Document a bit more, add demo shell implementation
This could help others who want to integrate with other init systems/initramfs. Commit-message-by: Colin Walters <walters@verbum.org> Closes: #784 Approved by: cgwalters
This commit is contained in:
parent
49a525f6a5
commit
dea2025531
|
|
@ -71,17 +71,23 @@ directory.
|
||||||
|
|
||||||
## Booting and initramfs technology
|
## Booting and initramfs technology
|
||||||
|
|
||||||
OSTree comes with optional dracut+systemd integration code that parses
|
OSTree comes with optional dracut+systemd integration code which follows
|
||||||
the `ostree=` kernel command line argument in the initramfs, and then
|
this logic:
|
||||||
sets up the read-only bind mount on `/usr`, a bind mount on the
|
|
||||||
deployment's `/sysroot` to the physical `/`, and then finally uses
|
- Parse the `ostree=` kernel command line argument in the initramfs
|
||||||
`mount(MS_MOVE)` to make the deployment root appear to be the root
|
- Set up a read-only bind mount on `/usr`
|
||||||
filesystem before telling systemd to switch root.
|
- Bind mount the deployment's `/sysroot` to the physical `/`
|
||||||
|
- Use `mount(MS_MOVE)` to make the deployment root appear to be the root filesystem
|
||||||
|
|
||||||
|
After these steps, systemd switches root.
|
||||||
|
|
||||||
If you are not using dracut or systemd, using OSTree should still be
|
If you are not using dracut or systemd, using OSTree should still be
|
||||||
possible, but you will have to write the integration code. Patches to
|
possible, but you will have to write the integration code. See the
|
||||||
support other initramfs technologies and init systems, if sufficiently
|
existing sources in [src/switchroot](/src/switchroot) as a reference,
|
||||||
clean, will likely be accepted upstream.
|
as well as [src/switchroot/switchroot.sh](/src/switchroot/switchroot.sh).
|
||||||
|
|
||||||
|
Patches to support other initramfs technologies and init systems, if
|
||||||
|
sufficiently clean, will likely be accepted upstream.
|
||||||
|
|
||||||
A further specific note regarding `sysvinit`: OSTree used to support
|
A further specific note regarding `sysvinit`: OSTree used to support
|
||||||
recording device files such the `/dev/initctl` FIFO, but no longer
|
recording device files such the `/dev/initctl` FIFO, but no longer
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This demonstration script is an implementation in shell
|
||||||
|
# similar to ostree-prepare-root.c. For a bit more information,
|
||||||
|
# see adapting-existing.md.
|
||||||
|
|
||||||
|
## the ostree boot parameter is avaialbe during the init
|
||||||
|
env | grep ostree
|
||||||
|
# ostree=/ostree/boot.1/.../.../0
|
||||||
|
## bind mount the ostree deployment to prepare it for move
|
||||||
|
mount --bind $sysroot$ostree $sysroot$ostree
|
||||||
|
## bind mount read-only /usr
|
||||||
|
mount --bind $sysroot$ostree/usr $sysroot$ostree/usr
|
||||||
|
mount --bind -o remount,ro $sysroot$ostree/usr $sysroot$ostree/usr
|
||||||
|
## bind mount the physical root
|
||||||
|
mount --bind $sysroot $sysroot$ostree/sysroot
|
||||||
|
## bind mount the var directory which is preserved between deployments
|
||||||
|
mount --bind $sysroot/ostree/deploy/os/var $sysroot$ostree/var
|
||||||
|
## make sure target directories are present within var
|
||||||
|
cd $sysroot$ostree/var
|
||||||
|
mkdir -p roothome mnt opt home
|
||||||
|
cd -
|
||||||
|
## move the deployment to the sysroot
|
||||||
|
mount --move $sysroot$ostree $sysroot
|
||||||
|
## after these the init system should start the switch root process
|
||||||
Loading…
Reference in New Issue