diff options
Diffstat (limited to 'init.d/bootmisc')
-rwxr-xr-x | init.d/bootmisc | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/init.d/bootmisc b/init.d/bootmisc new file mode 100755 index 00000000..1428e874 --- /dev/null +++ b/init.d/bootmisc @@ -0,0 +1,138 @@ +#!/sbin/runscript +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + use hostname + need localmount + before logger + after clock sysctl +} + +start() { + # Put a nologin file in /etc to prevent people from logging + # in before system startup is complete. + if [ "${DELAYLOGIN}" = "yes" ] ; then + echo "System bootup in progress - please wait" \ + > /etc/nologin + cp /etc/nologin /etc/nologin.boot + fi + + if ! touch -c /var/run 2> /dev/null ; then + ewarn "Skipping /var and /tmp initialization (ro root?)" + return 0 + fi + + if [ "${RC_UNAME}" = "Linux" ] ; then + # Setup login records + > /var/run/utmp + touch /var/log/wtmp + chgrp utmp /var/run/utmp /var/log/wtmp + chmod 0664 /var/run/utmp /var/log/wtmp + fi + + ebegin "Updating environment" + /sbin/env-update + eend $? + + # Take care of random stuff [ /var/lock | /var/run | pam ] + ebegin "Cleaning" /var/lock, /var/run + rm -rf /var/run/console.lock /var/run/console/* + + # Clean up any stale locks. + find /var/lock -type f -print0 | xargs -0 rm -f -- + + # Clean up /var/run and create /var/run/utmp so we can login. + for x in $(find /var/run ! -type d ! -name utmp ! -name innd.pid ! -name random-seed ! -name ld-elf.so.hints); do + [ ! -f "${x}" ] && continue + # Do not remove pidfiles of already running daemons + case "${x}" in + *.pid) + start-stop-daemon --test --quiet --stop --pidfile "${x}" + [ $? -eq 0 ] && continue + ;; + esac + rm -f "${x}" + done + + # Reset pam_console permissions if we are actually using it + if [ -x /sbin/pam_console_apply -a ! -c /dev/.devfsd ] ; then + if [ -n $(grep -v -e '^[[:space:]]*#' /etc/pam.d/* | grep 'pam_console') ] ; then + /sbin/pam_console_apply -r + fi + fi + + # Create the .keep to stop portage from removing /var/lock + > /var/lock/.keep + eend 0 + + # Clean up /tmp directory + if [ -d /tmp ] ; then + cd /tmp + if [ "${WIPE_TMP}" = "yes" ] ; then + ebegin "Wiping /tmp directory" + local startopts="-x . -depth" + [ "${RC_UNAME}" = "Linux" ] && startopts=". -xdev -depth" + + # Faster than find + rm -rf [b-ikm-pr-zA-Z]* + + find ${startopts} ! -name . \ + ! -path ./lost+found \ + ! -path "./lost+found/*" \ + ! -path ./quota.user \ + ! -path "./quota.user/*" \ + ! -path ./aquota.user \ + ! -path "./aquota.user/*" \ + ! -path ./quota.group \ + ! -path "./quota.group/*" \ + ! -path ./aquota.group \ + ! -path "./aquota.group/*" \ + ! -path ./journal \ + ! -path "./journal/*" \ + -delete + eend 0 + else + ebegin "Cleaning /tmp directory" + rm -rf /tmp/.X*-lock /tmp/esrv* /tmp/kio* /tmp/jpsock.* \ + /tmp/.fam* /tmp/.esd* /tmp/orbit-* /tmp/ssh-* \ + /tmp/ksocket-* /tmp/.*-unix + eend 0 + fi + + # Make sure our X11 stuff have the correct permissions + # Omit the chown as bootmisc is run before network is up + # and users may be using lame LDAP auth #139411 + rm -rf /tmp/.ICE-unix /tmp/.X11-unix + mkdir -p /tmp/.ICE-unix /tmp/.X11-unix + chmod 1777 /tmp/.ICE-unix /tmp/.X11-unix + [ -x /sbin/restorecon ] && restorecon /tmp/.ICE-unix /tmp/.X11-unix + fi + + # Create an 'after-boot' dmesg log + touch /var/log/dmesg + chmod 640 /var/log/dmesg + dmesg > /var/log/dmesg + + # Check for /etc/resolv.conf, and create if missing + [ -f /etc/resolv.conf ] || touch /etc/resolv.conf 2>/dev/null +} + +stop() { + # Reset pam_console permissions if we are actually using it + if [ -x /sbin/pam_console_apply -a ! -c /dev/.devfsd ] && \ + [ -n $(grep -v -e '^[[:space:]]*#' /etc/pam.d/* | grep 'pam_console') ] ; then + /sbin/pam_console_apply -r + fi + + # Write a halt record if we're shutting down + case "${SOFTLEVEL}" in + reboot|shutdown) + [ "${RC_UNAME}" = "Linux" ] && halt -w + ;; + esac + + return 0 +} + +# vim: set ts=4 : |