diff options
| author | Roy Marples <roy@marples.name> | 2008-01-31 16:10:18 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2008-01-31 16:10:18 +0000 | 
| commit | e687cc1e79f95c3fb69ed895e5666e434c1a3519 (patch) | |
| tree | 18d356cdeadf6ca0a1511eebf744c158cc95c935 | |
| parent | b6b88d3a07a921de7450a529769a02f0b86cb7db (diff) | |
| download | openrc-e687cc1e79f95c3fb69ed895e5666e434c1a3519.tar.xz | |
Remove the over-engineered checkfs and checkroot scripts and replace with simple fsck, root and mtab scripts. Update dependencies accordingly.
| -rw-r--r-- | init.d.BSD/hostid | 2 | ||||
| -rwxr-xr-x | init.d.BSD/savecore | 3 | ||||
| -rw-r--r-- | init.d.Linux/mtab | 29 | ||||
| -rwxr-xr-x | init.d/checkfs | 77 | ||||
| -rwxr-xr-x | init.d/checkroot | 130 | ||||
| -rw-r--r-- | init.d/fsck | 37 | ||||
| -rwxr-xr-x | init.d/hostname | 5 | ||||
| -rwxr-xr-x | init.d/localmount | 3 | ||||
| -rw-r--r-- | init.d/root | 25 | ||||
| -rw-r--r-- | init.d/swap | 5 | ||||
| -rw-r--r-- | runlevels/Makefile | 4 | ||||
| -rw-r--r-- | runlevels/Makefile.Linux | 2 | 
12 files changed, 98 insertions, 224 deletions
diff --git a/init.d.BSD/hostid b/init.d.BSD/hostid index d8e21237..57fc6001 100644 --- a/init.d.BSD/hostid +++ b/init.d.BSD/hostid @@ -7,7 +7,7 @@ hostid_file=${hostid_file:-/etc/hostid}  depend()  { -	need checkroot +	need root  	before devd net  } diff --git a/init.d.BSD/savecore b/init.d.BSD/savecore index 54246a9c..217c0817 100755 --- a/init.d.BSD/savecore +++ b/init.d.BSD/savecore @@ -6,8 +6,7 @@ description="Saves a kernel dump."  depend()  { -	need checkfs -	before swap +	need localmount   }  start() diff --git a/init.d.Linux/mtab b/init.d.Linux/mtab new file mode 100644 index 00000000..abb94922 --- /dev/null +++ b/init.d.Linux/mtab @@ -0,0 +1,29 @@ +#!/sbin/runscript +# Copyright 2007-2008 Roy Marples <roy@marples.name> +# All rights reserved. Released under the 2-clause BSD license. + +description="Update /etc/mtab to match what the kernel knows about" + +depend() +{ +	need root +} + +start() +{ +	ebegin "Updating /etc/mtab" +	if ! echo 2>/dev/null >/etc/mtab; then +		ewend 1 "/etc/mtab is not updateable" +		return 0 +	fi + +	# With / as tmpfs we cannot umount -at tmpfs in localmount as that +	# makes / readonly and dismounts all tmpfs even if in use which is +	# not good. Luckily, umount uses /etc/mtab instead of /proc/mounts +	# which allows this hack to work. +	grep -v "^[^ ]* / tmpfs " /proc/mounts > /etc/mtab + +	# Remove stale backups +	rm -f /etc/mtab~ /etc/mtab~~ +	eend 0 +} diff --git a/init.d/checkfs b/init.d/checkfs deleted file mode 100755 index 4f8004db..00000000 --- a/init.d/checkfs +++ /dev/null @@ -1,77 +0,0 @@ -#!/sbin/runscript -# Copyright 2007-2008 Roy Marples <roy@marples.name> -# All rights reserved. Released under the 2-clause BSD license. - -description="Check filesystems according to /etc/fstab for errors and \ -optionally repair them." - -# Hard return to parse fstabinfo output -_IFS=" -" - -depend() -{ -	need checkroot -	after modules -	keywords notimeout -} - -do_checkfs() -{ -	local retval=0 opts= -	[ "${RC_UNAME}" = "Linux" ] && opts="-C0 -T" -	 -	ebegin "Checking all filesystems" - -	# Load our partitions into $@ -	local IFS="$_IFS" -	set -- $(fstabinfo --passno ">1") -	unset IFS -	if [ $# = 0 ]; then -		eend 0 -		return 0 -	fi - -	fsck -p ${opts} "$@" -	retval=$? - -	if [ ${retval} -eq 0 ]; then -		eend 0 -	elif [ ${retval} -eq 1 ]; then -		ewend 1 "Filesystem errors corrected." -		retval=0 -	elif [ ${retval} -eq 2 ]; then -		ewend 1 "System should be rebooted" -	elif [ ${retval} -eq 8 ]; then -		ewend 1 "Operational error, continuing" -		retval=0 -	else -		if yesno ${rc_force_auto:-${RC_FORCE_AUTO}}; then -			eend 2 "Fsck could not correct all errors, rerunning" -			fsck -y ${opts} "$@" -			retval=$? -			eend ${retval} -		fi - -		if [ ${retval} -gt 3 ]; then -			eend 2 "Fsck could not correct all errors, manual repair needed" -			exec rc-abort || exit 1 -		fi -	fi - -	return ${retval} -} - -start() -{ -	do_checkfs -} - -stop() -{ -	# fsck on shutdown if we need to -	if yesno "${fsck_shutdown:-${FSCK_SHUTDOWN}}"; then -		do_checkfs -	fi -	return 0 -} diff --git a/init.d/checkroot b/init.d/checkroot deleted file mode 100755 index 05991408..00000000 --- a/init.d/checkroot +++ /dev/null @@ -1,130 +0,0 @@ -#!/sbin/runscript -# Copyright 2007-2008 Roy Marples <roy@marples.name> -# All rights reserved. Released under the 2-clause BSD license. - -description="Check the root filesystem according to /etc/fstab for errors \ -and optionally repair them." - -depend() -{ -	keywords notimeout -} - -do_mtab() -{ -	# Don't create mtab if /etc is readonly -	if ! echo 2>/dev/null >/etc/mtab; then -		ewarn "Skipping /etc/mtab initialization (ro root)" -		return 0 -	fi -	ebegin "Updating /etc/mtab" - -	# With / as tmpfs we cannot umount -at tmpfs in localmount as that -	# makes / readonly and dismounts all tmpfs even if in use which is -	# not good. Luckily, umount uses /etc/mtab instead of /proc/mounts -	# which allows this hack to work. -	grep -v "^[^ ]* / tmpfs " /proc/mounts > /etc/mtab - -	# Remove stale backups -	rm -f /etc/mtab~ /etc/mtab~~ -	eend 0 -} - -root_rw() -{ -	echo 2>/dev/null >/.test.$$ || return 1 -	rm -f /.test.$$ -} - -do_fsck() -{ -	local retval=0 opts= root= -	case "${RC_UNAME}" in -		FreeBSD) opts="-F";; -		Linux) opts="-T -C0";; -	esac - -	# Don't bother doing a fsck on these -	if [ -n "${CDBOOT}" ] || is_net_fs / || is_union_fs /; then -		return 0 -	fi - -	if root_rw; then -		einfo "root filesystem is mounted read-write - skipping" -		return 0 -	fi - -	root=$(fstabinfo --blockdevice /) -	[ ! -e "${root}" -a -e /dev/root ] && root=/dev/root - -	# Obey the fs_passno setting for / (see fstab(5)) -	local pass=$(fstabinfo --passno /) -	if [ ${pass:-0} != "0" ]; then -		ebegin "Checking root filesystem" -		fsck ${opts} -p "${root}" -		retval=$? -	else -		ebegin "Skipping root filesystem check (fstab's passno == 0)" -		retval=0 -	fi - -	if [ ${retval} -eq 0 ]; then -		eend 0 -	elif [ ${retval} -eq 1 ]; then -		ewend 1 "Filesystem repaired" -		retval=0 -	elif [ ${retval} -eq 8 ]; then -		ewend 1 $"Operational error, continuing" -		retval=0 -	elif [ ${retval} -eq 2 -o ${retval} -eq 3 ]; then -		ewend 1 "Filesystem repaired, but reboot needed!" -		if ! yesno ${rc_force_auto:-${RC_FORCE_AUTO}}; then -			printf "\a"; sleep 1; printf "\a"; sleep 1 -			printf "\a"; sleep 1; printf "\a"; sleep 1 -			ewarn "Rebooting in 10 seconds ..." -			sleep 10 -		fi -		einfo "Rebooting" -		reboot -f -	else -		if yesno ${rc_force_auto:-${RC_FORCE_AUTO}}; then -			eend 2 "Rerunning fsck in force mode" -			fsck ${opts} -y "${root}" -			retval=$? -		else -			eend 2 "Filesystem couldn't be fixed :(" -			exec rc-abort || exit 1 -		fi -		if [ ${retval} != "0" ]; then -			einfo "Unmounting filesystems" -			if [ "${RC_UNAME}" = "Linux" ]; then -				mount -a -o remount,ro / -			else -				mount -u -o ro / -			fi -			einfo "Rebooting" -			reboot -f -		fi -	fi -} - -start() -{ -	do_fsck || return 1 - -	if ! root_rw; then -		ebegin "Remounting root filesystem read/write" -		if [ "${RC_UNAME}" = "Linux" ]; then -			mount -n -o remount,rw / -		else -			mount -u -o rw / -		fi -		eend $? "Root filesystem could not be mounted read/write" || return $? -	fi - -	# Only Linux has mtab -	[ "${RC_UNAME}" = "Linux" -a -e /proc/mounts ] && do_mtab - -	# We got here, so return 0 -	return 0 -} diff --git a/init.d/fsck b/init.d/fsck new file mode 100644 index 00000000..01c92a69 --- /dev/null +++ b/init.d/fsck @@ -0,0 +1,37 @@ +#!/sbin/runscript +# Copyright 2007-2008 Roy Marples <roy@marples.name> +# All rights reserved. Released under the 2-clause BSD license. + +description="Check and repair filesystems according to /etc/fstab" + +depend() +{ +	need swap +	after clock modules +	keywords notimeout +} + +start() +{ +	local retval=0 opts= root= +	if [ "${RC_UNAME}" = "Linux" ]; then +		opts="${opts} -A -C0 -T" +		if echo 2>/dev/null >/.test.$$; then +			rm -f /.test.$$ +			opts="${opts} -R" +		fi +	fi + +	ebegin "Checking local filesystems" +	fsck -p ${opts} +	case $? in +		0)     eend 0; return 0;; +		1)     ewend 1 "Filesystems repaired"; return 0;; +		2|4)   ewend 1 "Filesystems repaired, but reboot needed" +		       reboot; exec rc-abort; return 1;; +		8)     ewend 1 "Operational error"; return 0;; +		12)    ewend 1 "fsck interupted"; return 1;; +		*)     eend 2 "Filesystems couldn't be fixed" +		       exec rc-abort; return 1;; +	esac +} diff --git a/init.d/hostname b/init.d/hostname index 1ee3e381..a777cb38 100755 --- a/init.d/hostname +++ b/init.d/hostname @@ -4,11 +4,6 @@  description="Sets the hostname of the machine." -depend() -{ -	need checkroot -} -  start()  {  	hostname=${hostname-${HOSTNAME-localhost}} diff --git a/init.d/localmount b/init.d/localmount index 1983aa54..5b8e849c 100755 --- a/init.d/localmount +++ b/init.d/localmount @@ -6,7 +6,8 @@ description="Mounts disks and swap according to /etc/fstab."  depend()  { -	need checkfs +	need fsck +	use modules mtab  }  start() diff --git a/init.d/root b/init.d/root new file mode 100644 index 00000000..fa20ebd8 --- /dev/null +++ b/init.d/root @@ -0,0 +1,25 @@ +#!/sbin/runscript +# Copyright 2007-2008 Roy Marples <roy@marples.name> +# All rights reserved. Released under the 2-clause BSD license. + +description="Mount the root fs read/write" + +depend() +{ +	need fsck +} + +start() +{ +	if echo 2>/dev/null >/.test.$$; then +		rm -f /.test.$$ +		return 0 +	fi + +	ebegin "Remounting root filesystem read/write" +	case "${RC_UNAME}" in +		Linux)	mount -n -o remount,rw /;; +		*)	mount -u -o rw /;; +	esac +	eend $? "Root filesystem could not be mounted read/write" +} diff --git a/init.d/swap b/init.d/swap index 53cf45c6..8e7d42f7 100644 --- a/init.d/swap +++ b/init.d/swap @@ -2,11 +2,6 @@  # Copyright 2007-2008 Roy Marples <roy@marples.name>  # All rights reserved. Released under the 2-clause BSD license. -depend() -{ -	need localmount -} -  start()  {  	ebegin "Activating swap" diff --git a/runlevels/Makefile b/runlevels/Makefile index 1e2591ab..05e45399 100644 --- a/runlevels/Makefile +++ b/runlevels/Makefile @@ -1,5 +1,5 @@ -BOOT=		bootmisc checkroot checkfs hostname localmount \ -		swap sysctl urandom +BOOT=		bootmisc fsck hostname localmount \ +		root swap sysctl urandom  DEFAULT=	local netmount  LEVELDIR=	${DESTDIR}/etc/runlevels diff --git a/runlevels/Makefile.Linux b/runlevels/Makefile.Linux index 205f0971..81101e34 100644 --- a/runlevels/Makefile.Linux +++ b/runlevels/Makefile.Linux @@ -1,2 +1,2 @@ -BOOT+=		clock consolefont keymaps modules net.lo procfs +BOOT+=		clock consolefont keymaps modules mtab net.lo procfs  DEFAULT+=	hdparm  | 
