Having one monolithic packages directory makes it hard to find things and is generally overwhelming. This commit splits it into several logical sections roughly based on function, recipes.txt gives more information about the classifications used. The opportunity is also used to switch from "packages" to "recipes" as used in OpenEmbedded as the term "packages" can be confusing to people and has many different meanings. Not all recipes have been classified yet, this is just a first pass at separating things out. Some packages are moved to meta-extras as they're no longer actively used or maintained. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
212 lines
4.9 KiB
Bash
Executable file
212 lines
4.9 KiB
Bash
Executable file
#
|
|
# checkroot.sh Check to root filesystem.
|
|
#
|
|
# Version: @(#)checkroot.sh 2.84 25-Jan-2002 miquels@cistron.nl
|
|
#
|
|
|
|
. /etc/default/rcS
|
|
|
|
#
|
|
# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
|
|
# from this script *before anything else* with a timeout, like SCO does.
|
|
#
|
|
test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE
|
|
|
|
#
|
|
# Ensure that bdflush (update) is running before any major I/O is
|
|
# performed (the following fsck is a good example of such activity :).
|
|
#
|
|
test -x /sbin/update && update
|
|
|
|
#
|
|
# Read /etc/fstab.
|
|
#
|
|
exec 9>&0 </etc/fstab
|
|
rootmode=rw
|
|
rootopts=rw
|
|
test "$ENABLE_ROOTFS_FSCK" = yes && rootcheck="yes" || rootcheck="no"
|
|
swap_on_md=no
|
|
devfs=
|
|
while read fs mnt type opts dump pass junk
|
|
do
|
|
case "$fs" in
|
|
""|\#*)
|
|
continue;
|
|
;;
|
|
/dev/md*)
|
|
# Swap on md device.
|
|
test "$type" = swap && swap_on_md=yes
|
|
;;
|
|
/dev/*)
|
|
;;
|
|
*)
|
|
# Might be a swapfile.
|
|
test "$type" = swap && swap_on_md=yes
|
|
;;
|
|
esac
|
|
|
|
test "$type" = devfs && devfs="$fs"
|
|
|
|
# Currently we do not care about the other entries
|
|
if test "$mnt" = "/"
|
|
then
|
|
#echo "[$fs] [$mnt] [$type] [$opts] [$dump] [$pass] [$junk]"
|
|
|
|
rootopts="$opts"
|
|
roottype="$type"
|
|
|
|
#The "spinner" is broken on busybox sh
|
|
TERM=dumb
|
|
|
|
test "$pass" = 0 -o "$pass" = "" && rootcheck=no
|
|
|
|
# Enable fsck for ext2 and ext3 rootfs, disable for everything else
|
|
case "$type" in
|
|
ext3) rootcheck=yes;;
|
|
*) rootcheck=no;;
|
|
esac
|
|
|
|
if test "$rootcheck" = yes
|
|
then
|
|
if ! test -x "/sbin/fsck.${roottype}"
|
|
then
|
|
echo -e "\n * * * WARNING: /sbin/fsck.${roottype} is missing! * * *\n"
|
|
rootcheck=no
|
|
fi
|
|
fi
|
|
|
|
case "$opts" in
|
|
ro|ro,*|*,ro|*,ro,*)
|
|
rootmode=ro
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
exec 0>&9 9>&-
|
|
|
|
#
|
|
# Activate the swap device(s) in /etc/fstab. This needs to be done
|
|
# before fsck, since fsck can be quite memory-hungry.
|
|
#
|
|
doswap=no
|
|
test -d /proc/1 || mount -n /proc
|
|
case "`uname -r`" in
|
|
2.[0123].*)
|
|
if test $swap_on_md = yes && grep -qs resync /proc/mdstat
|
|
then
|
|
test "$VERBOSE" != no && echo "Not activating swap - RAID array resyncing"
|
|
else
|
|
doswap=yes
|
|
fi
|
|
;;
|
|
*)
|
|
doswap=yes
|
|
;;
|
|
esac
|
|
if test $doswap = yes
|
|
then
|
|
test "$VERBOSE" != no && echo "Activating swap"
|
|
swapon -a 2> /dev/null
|
|
fi
|
|
|
|
#
|
|
# Check the root filesystem.
|
|
#
|
|
if test -f /fastboot || test $rootcheck = no
|
|
then
|
|
test $rootcheck = yes && echo "Fast boot, no filesystem check"
|
|
else
|
|
#
|
|
# Ensure that root is quiescent and read-only before fsck'ing.
|
|
#
|
|
mount -n -o remount,ro /
|
|
if test $? = 0
|
|
then
|
|
if test -f /forcefsck
|
|
then
|
|
force="-f"
|
|
else
|
|
force=""
|
|
fi
|
|
if test "$FSCKFIX" = yes
|
|
then
|
|
fix="-y"
|
|
else
|
|
fix="-a"
|
|
fi
|
|
spinner="-C"
|
|
case "$TERM" in
|
|
dumb|network|unknown|"") spinner="" ;;
|
|
esac
|
|
test `uname -m` = s390 && spinner="" # This should go away
|
|
test "$VERBOSE" != no && echo "Checking root filesystem..."
|
|
fsck $spinner $force $fix /
|
|
#
|
|
# If there was a failure, drop into single-user mode.
|
|
#
|
|
# NOTE: "failure" is defined as exiting with a return code of
|
|
# 2 or larger. A return code of 1 indicates that filesystem
|
|
# errors were corrected but that the boot may proceed.
|
|
#
|
|
if test "$?" -gt 1
|
|
then
|
|
|
|
# Since this script is run very early in the boot-process, it should be safe to assume that the
|
|
# output is printed to VT1. However, some distributions use a bootsplash to hide the "ugly" boot
|
|
# messages and having the bootsplash "hang" due to a waiting fsck prompt is less than ideal
|
|
chvt 1
|
|
|
|
# Surprise! Re-directing from a HERE document (as in
|
|
# "cat << EOF") won't work, because the root is read-only.
|
|
echo
|
|
echo "fsck failed. Please repair manually and reboot. Please note"
|
|
echo "that the root filesystem is currently mounted read-only. To"
|
|
echo "remount it read-write:"
|
|
echo
|
|
echo " # mount -n -o remount,rw /"
|
|
echo
|
|
echo "CONTROL-D will exit from this shell and REBOOT the system."
|
|
echo
|
|
# Start a single user shell on the console
|
|
/sbin/sulogin $CONSOLE
|
|
reboot -f
|
|
fi
|
|
else
|
|
echo "*** ERROR! Cannot fsck root fs because it is not mounted read-only!"
|
|
echo
|
|
fi
|
|
fi
|
|
|
|
#
|
|
# If the root filesystem was not marked as read-only in /etc/fstab,
|
|
# remount the rootfs rw but do not try to change mtab because it
|
|
# is on a ro fs until the remount succeeded. Then clean up old mtabs
|
|
# and finally write the new mtab.
|
|
# This part is only needed if the rootfs was mounted ro.
|
|
#
|
|
if [ $(grep rootfs /proc/mounts | awk '{print $4}') = rw ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Add a second check, which seems to be needed for some kernel versions
|
|
if [ $(grep "/dev/root" /proc/mounts | awk '{print $4}') = rw ]; then
|
|
exit 0
|
|
fi
|
|
|
|
|
|
echo "Remounting root file system..."
|
|
mount -n -o remount,$rootmode /
|
|
if test "$rootmode" = rw
|
|
then
|
|
if test ! -L /etc/mtab
|
|
then
|
|
rm -f /etc/mtab~ /etc/nologin
|
|
: > /etc/mtab
|
|
fi
|
|
mount -f -o remount /
|
|
mount -f /proc
|
|
test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs"
|
|
fi
|
|
|
|
: exit 0
|