3247184d86
I spoke with the prefix team sometime back and was told that they do not have an interest in using OpenRC on prefix systems.
121 lines
2.5 KiB
Plaintext
121 lines
2.5 KiB
Plaintext
#!@PREFIX@/sbin/runscript
|
|
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
|
# Released under the 2-clause BSD license.
|
|
|
|
description="Check and repair filesystems according to /etc/fstab"
|
|
_IFS="
|
|
"
|
|
|
|
depend()
|
|
{
|
|
use dev clock modules
|
|
keyword -jail -openvz -timeout -vserver -lxc
|
|
}
|
|
|
|
_abort() {
|
|
rc-abort
|
|
return 1
|
|
}
|
|
|
|
# We should only reboot when first booting
|
|
_reboot() {
|
|
if [ "$RC_RUNLEVEL" = "$RC_BOOTLEVEL" ]; then
|
|
reboot "$@"
|
|
_abort || return 1
|
|
fi
|
|
}
|
|
|
|
_forcefsck()
|
|
{
|
|
[ -e /forcefsck ] || get_bootparam forcefsck
|
|
}
|
|
|
|
start()
|
|
{
|
|
local fsck_opts= p= check_extra=
|
|
|
|
if [ -e /fastboot ]; then
|
|
ewarn "Skipping fsck due to /fastboot"
|
|
return 0
|
|
fi
|
|
if _forcefsck; then
|
|
fsck_opts="$fsck_opts -f"
|
|
check_extra="(check forced)"
|
|
elif ! yesno ${fsck_on_battery:-YES} && ! on_ac_power; then
|
|
ewarn "Skipping fsck due to not being on AC power"
|
|
return 0
|
|
fi
|
|
|
|
if [ -n "$fsck_passno" ]; then
|
|
check_extra="[passno $fsck_passno] $check_extra"
|
|
if [ -n "$fsck_mnt" ]; then
|
|
eerror "Only 1 of fsck_passno and fsck_mnt must be set!"
|
|
return 1
|
|
fi
|
|
fi
|
|
ebegin "Checking local filesystems $check_extra"
|
|
# Append passno mounts
|
|
for p in $fsck_passno; do
|
|
local IFS="$_IFS"
|
|
case "$p" in
|
|
[0-9]*) p="=$p";;
|
|
esac
|
|
set -- "$@" $(fstabinfo --passno "$p")
|
|
unset IFS
|
|
done
|
|
# Append custom mounts
|
|
for m in $fsck_mnt ; do
|
|
local IFS="$_IFS"
|
|
set -- "$@" "$m"
|
|
unset IFS
|
|
done
|
|
|
|
if [ "$RC_UNAME" = Linux ]; then
|
|
fsck_opts="$fsck_opts -C0 -T"
|
|
if [ -z "$fsck_passno" -a -z "$fsck_mnt" ]; then
|
|
fsck_args=${fsck_args--A -p}
|
|
if echo 2>/dev/null >/.test.$$; then
|
|
rm -f /.test.$$
|
|
fsck_opts="$fsck_opts -R"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
trap : INT QUIT
|
|
fsck ${fsck_args--p} $fsck_opts "$@"
|
|
case $? in
|
|
0) eend 0; return 0;;
|
|
1) ewend 1 "Filesystems repaired"; return 0;;
|
|
2|3) if [ "$RC_UNAME" = Linux ]; then
|
|
ewend 1 "Filesystems repaired, but reboot needed"
|
|
_reboot -f
|
|
else
|
|
ewend 1 "Filesystems still have errors;" \
|
|
"manual fsck required"
|
|
_abort
|
|
fi;;
|
|
4) if [ "$RC_UNAME" = Linux ]; then
|
|
ewend 1 "Fileystem errors left uncorrected, aborting"
|
|
_abort
|
|
else
|
|
ewend 1 "Filesystems repaired, but reboot needed"
|
|
_reboot
|
|
fi;;
|
|
8) ewend 1 "Operational error"; return 0;;
|
|
12) ewend 1 "fsck interrupted";;
|
|
*) eend 2 "Filesystems couldn't be fixed";;
|
|
esac
|
|
_abort || return 1
|
|
}
|
|
|
|
stop()
|
|
{
|
|
# Fake function so we always shutdown correctly.
|
|
_abort() { return 0; }
|
|
_reboot() { return 0; }
|
|
_forcefsck() { return 1; }
|
|
|
|
yesno $fsck_shutdown && start
|
|
return 0
|
|
}
|