mirror of
https://github.com/ostreedev/ostree.git
synced 2024-12-22 17:35:55 +03:00
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
|
||||
|
||||
OSTree comes with optional dracut+systemd integration code that parses
|
||||
the `ostree=` kernel command line argument in the initramfs, and then
|
||||
sets up the read-only bind mount on `/usr`, a bind mount on the
|
||||
deployment's `/sysroot` to the physical `/`, and then finally uses
|
||||
`mount(MS_MOVE)` to make the deployment root appear to be the root
|
||||
filesystem before telling systemd to switch root.
|
||||
OSTree comes with optional dracut+systemd integration code which follows
|
||||
this logic:
|
||||
|
||||
- Parse the `ostree=` kernel command line argument in the initramfs
|
||||
- Set up a read-only bind mount on `/usr`
|
||||
- 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
|
||||
possible, but you will have to write the integration code. Patches to
|
||||
support other initramfs technologies and init systems, if sufficiently
|
||||
clean, will likely be accepted upstream.
|
||||
possible, but you will have to write the integration code. See the
|
||||
existing sources in [src/switchroot](/src/switchroot) as a reference,
|
||||
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
|
||||
recording device files such the `/dev/initctl` FIFO, but no longer
|
||||
|
25
src/switchroot/switchroot.sh
Normal file
25
src/switchroot/switchroot.sh
Normal file
@ -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
Block a user