summaryrefslogtreecommitdiff
path: root/init.d/bootmisc.in
diff options
context:
space:
mode:
Diffstat (limited to 'init.d/bootmisc.in')
-rw-r--r--init.d/bootmisc.in132
1 files changed, 132 insertions, 0 deletions
diff --git a/init.d/bootmisc.in b/init.d/bootmisc.in
new file mode 100644
index 0000000..a14a2c7
--- /dev/null
+++ b/init.d/bootmisc.in
@@ -0,0 +1,132 @@
+#!/sbin/runscript
+# Copyright 2007-2008 Roy Marples <roy@marples.name>
+# All rights reserved. Released under the 2-clause BSD license.
+
+depend()
+{
+ use hostname
+ need localmount
+ before logger
+ after clock sysctl
+ keyword noprefix
+}
+
+cleanup_tmp_dir()
+{
+ local dir=$1
+
+ mkdir -p "${dir}"
+ cd "${dir}"
+ if yesno ${wipe_tmp:-${WIPE_TMP:-yes}}; then
+ ebegin "Wiping ${dir} directory"
+ local startopts="-x . -depth" delete="-exec rm -rf -- {} ;"
+
+ if [ "${RC_UNAME}" = "Linux" ]; then
+ startopts=". -xdev -depth"
+ # busybox find / rm cannot handle --
+ delete="-delete"
+ fi
+
+ # Faster than find
+ rm -rf -- [b-ikm-pr-zA-Z0-9\.]*
+
+ 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} \
+ -type d -prune
+ eend 0
+ else
+ ebegin "Cleaning ${dir} directory"
+ rm -rf -- "${dir}"/.X*-lock "${dir}"/esrv* "${dir}"/kio* \
+ "${dir}"/jpsock.* "${dir}"/.fam* "${dir}"/.esd* \
+ "${dir}"/orbit-* "${dir}"/ssh-* "${dir}"/ksocket-* \
+ "${dir}"/.*-unix
+ eend 0
+ fi
+}
+
+start()
+{
+ if ! mkdir /.test.$$ 2>/dev/null; then
+ ewarn "Skipping /var and /tmp initialization (ro root?)"
+ return 0
+ fi
+ rmdir /.test.$$
+
+ # Ensure that our basic dirs exist
+ for x in /var/log /var/run /tmp; do
+ if ! [ -d "${x}" ]; then
+ if ! mkdir -p "${x}"; then
+ eend 1 "failed to create needed directory ${x}"
+ return 1
+ fi
+ fi
+ done
+
+ ebegin "Creating user login records"
+ cp /dev/null /var/run/utmp
+ [ -e /var/log/wtmp ] || cp /dev/null /var/log/wtmp
+ chmod 0644 /var/run/utmp /var/log/wtmp
+ eend 0
+
+ ebegin "Cleaning /var/run"
+ for x in $(find /var/run ! -type d ! -name utmp ! -name random-seed \
+ ! -name ld-elf.so.hints ! -name ld.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
+ eend 0
+
+ # Clean up /tmp directories
+ local tmp=
+ for tmp in ${wipe_tmp_dirs-/tmp}; do
+ cleanup_tmp_dir "${tmp}"
+ done
+ chmod +t /tmp /var/tmp
+
+ # 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
+
+ # Create an 'after-boot' dmesg log
+ if [ "${RC_SYS}" != "VPS" ]; then
+ dmesg > /var/log/dmesg
+ chmod 640 /var/log/dmesg
+ fi
+
+ rm -f /etc/nologin
+}
+
+stop()
+{
+ # Write a halt record if we're shutting down
+ case "${RC_SOFTLEVEL}" in
+ reboot|shutdown) [ "${RC_UNAME}" = "Linux" ] && halt -w;;
+ esac
+
+ return 0
+}