rootfscheck service: use the passed-from-parent control socket file descriptor
authorDavin McCall <davmac@davmac.org>
Wed, 21 Sep 2016 07:23:30 +0000 (08:23 +0100)
committerDavin McCall <davmac@davmac.org>
Wed, 21 Sep 2016 07:23:30 +0000 (08:23 +0100)
to issue reboot commands (--use-passed-cfd option to reboot).

This may be necessary since the control socket may not have been created yet, due
to the root filesystem being read-only at this point.

doc/linux/services/rootfscheck
doc/linux/services/rootfscheck.sh

index 83d0bcabeb70c4542911c4dfe110b4e783c67934..236cc1f9623adf8d308b1c1d4386f52469bbb3fd 100644 (file)
@@ -3,7 +3,7 @@
 type = scripted
 command = /etc/dinit.d/rootfscheck.sh start
 restart = false
-options = runs-on-console
+options = runs-on-console pass-cs-fd
 
 depends-on = early-filesystems
 depends-on = udevd
index f67db8066ec382a79c4601dbf157e780b70cdad7..8a19384d1c50c40bd26c062a5553950ee9d104bc 100755 (executable)
@@ -2,21 +2,31 @@
 export PATH=/usr/bin:/usr/sbin:/bin:/sbin
 
 if [ "$1" != "stop" ]; then
-
+  
+  ROOTDEV=`findmnt -o SOURCE -n -M /`
+  
   echo "Checking root file system..."
   if [ -x /sbin/fsck ]; then
-    /sbin/fsck -C -a /
+    /sbin/fsck -C -a "$ROOTDEV"
     fsckresult=$?
-    if [ $(($fsckresult & 2)) -eq 2 ]; then
+    if [ $((fsckresult & 4)) -eq 4 ]; then
       echo "***********************"
       echo "WARNING WARNING WARNING"
       echo "***********************"
-      echo "root file system has problems: rebooting..."
+      echo "The root file system has problems which require user attention."
+      echo "A maintennance shell will now be started; system will then be rebooted."
+      /sbin/sulogin
+      /sbin/reboot --system -r      
+    elif [ $(($fsckresult & 2)) -eq 2 ]; then
+      echo "***********************"
+      echo "WARNING WARNING WARNING"
+      echo "***********************"
+      echo "The root file system had problems (now repaired): rebooting..."
       sleep 10
       /sbin/reboot --system -r
     fi
   else
     echo "WARNING - Could not find /sbin/fsck"
   fi
-
+  
 fi;