Early boot
Jump to navigation
Jump to search
This page is monitored by the OLPC team.
NOTE: The contents of this page are not set in stone, and are subject to change! This page is a draft in active flux ... |
Draft of early boot upgrade/init procedures designed by Michael Stone and C. Scott Ananian.
[initrd] v python2.5 (pid 1) v network_setup(), mount usb/sd, etc v antitheft client (ATC) olpc.atc.run(fqdn of schoolserver, callback) (sometime later, or immediately if already activated) v callback (as pid 2) v mount /sysroot, unmount usb/sd copy /security/lease to /sysroot/security/lease if first boot parse chosen/bootpath, swing /p/current v make minimal userland context (mount --move /sysroot /) vserver (protect PID 1, RTC <- vserver delta time) v with open('/sbin/olpc-init.py') as f: str = f.read() eval(str) --------------------> debian w/ developer key: | def run(): | os.exec('/sbin/init') xo boot: $current = last part of /pristine/current symlink mnt /home /run/$current/home mnt /security /run/$current/security mnt /pristine /run/$current/pristine chroot /run/$current (mount --move ?) v with open('/sbin/olpc-init.py') as f: str = f.read() eval(str) ---------------------> debian w/o developer key (in run) | pyinit + rainbow stuff (take over legacy init's job) fork run-parts (/etc/inittab stuff) listen for shutdown, etc. vserver (- CONTEXT) --------------------------------- P_SF_RUN: off = allow mod = run from /run/X on = pristine = run from /run/X switch on->off: set the unlink flags on /run off->on: create immutably-tagged /run/a,b from /pristine/a,b --------------------------- directories in root: /sys, /proc, /ofw vfs /pristine/a /pristine/b /pristine/current -> /pristine/a (say) /run/a /run/b /security /home /sbin/olpc-init.py /boot -> /pristine/current/boot /boot-alt -> /pristine/alt/boot -------------------------- Upgrade procedure, creating new b from a (w.l.o.g) Rainbow: (ATC gives <version> <hash> <priority>) 0. swing /pristine/alt to /pristine/a 1. delete /pristine/b 2. Invoke 'olpc-updater <version>' in new container: /current (ro-bind mount from /pristine/a) /upgrade (initially empty) OLPC updater: 3. clone /current to /upgrade 4. upgrade /upgrade by hook or crook 5. exit Rainbow: 6. Verify $container/upgrade matches <hash> 7. Move $container/upgrade to /pristine/b (atomic!) 8. Swing /pristine/current to /pristine/b (atomic!) 9. If <priority> reboot. -----------------------