Browse Source

init: implemented switch_root and revival

0.2-maint
Alejandro Mery 15 years ago
parent
commit
6f7f52466a
2 changed files with 74 additions and 1 deletions
  1. +43
    -0
      initramfs/etc_rc.d_rc.switchroot.sh
  2. +31
    -1
      initramfs/init.sh

+ 43
- 0
initramfs/etc_rc.d_rc.switchroot.sh

@ -0,0 +1,43 @@
#!/bin/sh
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: target/idunn/initramfs/etc_rc.d_rc.switchroot.sh
# Copyright (C) 2008 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. A copy of the
# GNU General Public License can be found in the file COPYING.
# --- SDE-COPYRIGHT-NOTE-END ---
. /etc/rc.d/functions.in
. /etc/conf/idunn
case "$1" in
stop)
# TODO: stop network
title "Moving special filesystems"
for x in dev sys proc; do
check mount -o move "/$x" "$rootfs/$x"
done
status
;;
revive)
title "Moving special filesystems back"
for x in dev sys proc; do
check mount -o move "$rootfs/$x" "/$x"
done
status
# TODO: restart network
title "Restarting Supervisor"
check start-stop-daemon -S -b -x /usr/bin/runsvdir -- /var/service/
status
;;
esac

+ 31
- 1
initramfs/init.sh

@ -70,7 +70,37 @@ while true; do
sleep 1;
if [ -e /var/run/.idunn-resume ]; then
# switch_root requested
. /etc/conf/idunn
echo "switch_root in progress, you will be disconnected now." | wall
rm /var/run/.idunn-resume
# stop services
/etc/rc.d/rc.shutdown 2>&1 | tee -a $LOG
# terminate the rest
sleep 1
killall5 -s TERM
sleep 2
killall5 -s KILL
/etc/rc.d/rc.switchroot stop 2>&1 | tee -a $LOG
# and proceed
exec switch_root -c /dev/console "$rootfs" "$init" $initopt 2>&1 >> $LOG
errno=$?
# outch!
if [ ! -s $LOG ]; then
# the world is gone, time to panic
exit $errno
else
cat <<-EOT >> $LOG
switch_root failed returning $errno
EOT
rm -f /var/run/.idunn-resume
/etc/rc.d/rc.switchroot revive 2>&1 | tee -a $LOG
fi
fi
done

Loading…
Cancel
Save