openrc/init.d/bootmisc.in

169 lines
3.7 KiB
Plaintext
Raw Normal View History

#!@PREFIX@/sbin/runscript
2009-05-01 19:41:40 +05:30
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
depend()
{
need localmount
before logger
after clock sysctl
keyword -prefix -timeout
}
2008-04-09 04:55:48 +05:30
dir_writeable()
{
mkdir "$1"/.test.$$ 2>/dev/null && rmdir "$1"/.test.$$
}
2009-04-27 13:21:18 +05:30
: ${wipe_tmp:=${WIPE_TMP:-yes}}
cleanup_tmp_dir()
{
2008-04-09 05:36:50 +05:30
local dir="$1"
2009-04-27 13:21:18 +05:30
if ! [ -d "$dir" ]; then
mkdir -p "$dir" || return $?
2008-04-09 04:55:48 +05:30
fi
2009-04-27 13:21:18 +05:30
dir_writeable "$dir" || return 1
chmod a+rwt "$dir" 2> /dev/null
cd "$dir" || return 1
2009-04-27 13:21:18 +05:30
if yesno $wipe_tmp; then
ebegin "Wiping $dir directory"
# Faster than raw find
if ! rm -rf -- [^ajlq\.]* 2>/dev/null ; then
# Blah, too many files
find . -maxdepth 1 -name '[^ajlq\.]*' -exec rm -rf -- {} +
fi
# pam_mktemp creates a .private directory within which
# each user gets a private directory with immutable
# bit set; remove the immutable bit before trying to
# remove it.
[ -d /tmp/.private ] && chattr -R -a /tmp/.private 2> /dev/null
# Prune the paths that are left
find . -maxdepth 1 \
! -name . \
! -name lost+found \
! -name quota.user \
! -name aquota.user \
! -name quota.group \
! -name aquota.group \
! -name journal \
-exec rm -rf -- {} +
eend 0
else
2009-04-27 13:21:18 +05:30
ebegin "Cleaning $dir directory"
rm -rf -- .X*-lock esrv* kio* \
jpsock.* .fam* .esd* \
orbit-* ssh-* ksocket-* \
.*-unix
eend 0
fi
}
2009-04-17 05:09:37 +05:30
mkutmp()
{
: >"$1"
2009-04-18 06:26:48 +05:30
# Not all systems have the utmp group
chgrp utmp "$1" 2>/dev/null
2009-04-17 05:09:37 +05:30
chmod 0664 "$1"
}
start()
{
2009-04-27 13:21:18 +05:30
# Remove any added console dirs
rm -rf "$RC_LIBEXECDIR"/console/*
2009-04-27 13:21:18 +05:30
local logw=false runw=false extra=
# Ensure that our basic dirs exist
[ "$RC_UNAME" = Linux ] && extra=/var/lib/misc # Satisfy Linux FHS
for x in /var/log /var/run /tmp $extra; do
2009-04-27 13:21:18 +05:30
if ! [ -d $x ]; then
if ! mkdir -p $x; then
eend 1 "failed to create needed directory $x"
return 1
fi
fi
done
2008-04-09 04:55:48 +05:30
if dir_writeable /var/run; then
ebegin "Creating user login records"
2009-04-17 05:09:37 +05:30
local xtra=
2009-04-27 13:21:18 +05:30
[ "$RC_UNAME" = NetBSD ] && xtra=x
2009-04-17 05:09:37 +05:30
for x in "" $xtra; do
2009-04-27 13:21:18 +05:30
mkutmp /var/run/utmp$x
2009-04-17 05:09:37 +05:30
done
[ -e /var/log/wtmp ] || mkutmp /var/log/wtmp
2008-04-09 04:55:48 +05:30
eend 0
ebegin "Cleaning /var/run"
for x in $(find /var/run ! -type d ! -name utmp \
2008-05-12 20:41:04 +05:30
! -name random-seed ! -name dev.db \
2008-04-09 04:55:48 +05:30
! -name ld-elf.so.hints ! -name ld.so.hints);
2008-10-02 02:42:54 +05:30
do
# Clean stale sockets
2009-04-27 13:21:18 +05:30
if [ -S "$x" ]; then
2008-10-15 14:05:21 +05:30
if type fuser >/dev/null 2>&1; then
fuser "$x" >/dev/null 2>&1 || rm -- "$x"
2008-10-15 14:05:21 +05:30
else
2009-04-27 13:21:18 +05:30
rm -- "$x"
2008-10-15 14:05:21 +05:30
fi
2008-10-02 02:42:54 +05:30
fi
2009-04-27 13:21:18 +05:30
[ ! -f "$x" ] && continue
2008-04-09 04:55:48 +05:30
# Do not remove pidfiles of already running daemons
2009-04-27 13:21:18 +05:30
case "$x" in
2008-04-09 04:55:48 +05:30
*.pid)
start-stop-daemon --test --quiet \
2009-04-27 13:21:18 +05:30
--stop --pidfile "$x" && continue
;;
2008-04-09 04:55:48 +05:30
esac
2009-04-27 13:21:18 +05:30
rm -f -- "$x"
2008-04-09 04:55:48 +05:30
done
eend 0
fi
# Clean up /tmp directories
2007-11-20 17:50:50 +05:30
local tmp=
for tmp in ${clean_tmp_dirs:-${wipe_tmp_dirs-/tmp}}; do
2009-04-27 13:21:18 +05:30
cleanup_tmp_dir "$tmp"
done
2008-04-09 04:55:48 +05:30
if dir_writeable /tmp; then
# 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
2008-04-09 04:55:48 +05:30
mkdir -p /tmp/.ICE-unix /tmp/.X11-unix
chmod 1777 /tmp/.ICE-unix /tmp/.X11-unix
2009-04-27 13:21:18 +05:30
if [ -x /sbin/restorecon ]; then
restorecon /tmp/.ICE-unix /tmp/.X11-unix
fi
2008-04-09 04:55:48 +05:30
fi
2009-04-27 13:21:18 +05:30
if $logw || dir_writeable /var/log; then
2008-04-09 04:55:48 +05:30
# Create an 'after-boot' dmesg log
2009-04-27 13:21:18 +05:30
if [ "$RC_SYS" != VSERVER -a "$RC_SYS" != OPENVZ ]; then
2008-04-09 04:55:48 +05:30
dmesg > /var/log/dmesg
chmod 640 /var/log/dmesg
fi
2007-04-26 19:52:54 +05:30
fi
2008-01-11 04:52:46 +05:30
[ -w /etc/nologin ] && rm -f /etc/nologin
2008-04-09 05:36:50 +05:30
return 0
}
stop()
{
# Write a halt record if we're shutting down
2009-04-27 13:21:18 +05:30
if [ "$RC_RUNLEVEL" = shutdown ]; then
[ "$RC_UNAME" = Linux ] && halt -w
if [ "$RC_SYS" = OPENVZ ]; then
yesno $RC_REBOOT && printf "" >/reboot
fi
fi
return 0
}