aboutsummaryrefslogtreecommitdiffstats
path: root/bootscripts/contrib/lsb-v3/init.d/cleanfs
blob: b160fbc220d2e84bcd7169608645af0a05317cfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/sh
# Begin /etc/init.d/cleanfs

### BEGIN INIT INFO
# Provides:            cleanfs
# Required-Start:      $local_fs
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:       sysinit
# Default-Stop:        
# Short-Description:   Cleans temporary directories early in the boot process.
# Description:         Cleans temporary directories /var/run, /var/lock, and
#                      /tmp.  cleanfs also creates /var/run/utmp and any files 
#                      defined in /etc/sysconfig/createfiles.
# X-LFS-Default-Start: S50
# X-LFS-Default-Stop:
# X-LFS-Provided-By:   LFS
### END INIT INFO

. /lib/lsb/init-functions

# Function to create files/directory on boot.
create_files()
{
    # Read in the configuration file.
    exec 9>&0 < /etc/sysconfig/createfiles
    while read name type perm usr grp dtype maj min junk
    do
        # Ignore comments and blank lines.
        case "${name}" in
            ""|\#*) continue ;;
        esac

        # Ignore existing files.
        if [ ! -e "${name}" ]
        then
            # Create stuff based on its type.
            case "${type}" in
                dir)
                    mkdir "${name}"
                    ;;
                file)
                    :> "${name}"
                    ;;
                dev)
                    case "${dtype}" in
                        char)
                            mknod "${name}" c ${maj} ${min}
                            ;;
                        block)
                            mknod "${name}" b ${maj} ${min}
                            ;;
                        pipe)
                            mknod "${name}" p
                            ;;
                        *) 
                            echo -n "\n${WARNING}Unknown device type: ${dtype}"
                            echo "${NORMAL}"
                            ;;
                    esac
                    ;;
                *)
                    echo "\n${WARNING}Unknown type: ${type}${NORMAL}"
                    continue
                    ;;
            esac

            # Set up the permissions, too.
            chown ${usr}:${grp} "${name}"
            chmod ${perm} "${name}"
        fi
    done
    exec 0>&9 9>&-
}

case "${1}" in
    start)
        message="Cleaning file systems: "

        message="${message}${INFO} /tmp"
        find /tmp -xdev -mindepth 1 ! -name lost+found \
            -delete || failed=1

        message="${message} /var/lock"
        find /var/lock -type f -exec rm -f {} \; || failed=1

        message="${message} /var/run${NORMAL}"
        find /var/run ! -type d ! -name utmp -exec rm -f {} \; || failed=1

        > /var/run/utmp
        if grep -q '^utmp:' /etc/group ; then
            chmod 664 /var/run/utmp
            chgrp utmp /var/run/utmp
        fi

        (exit ${failed})
        evaluate_retval standard

        if egrep -qv '^(#|$)' /etc/sysconfig/createfiles 2>/dev/null
        then
            message="Creating files and directories..."
            create_files
            evaluate_retval standard
        fi
        ;;
    *)
        echo "Usage: ${0} {start}"
        exit 1
        ;;
esac

# End /etc/init.d/cleanfs