reverted rev 82
[grml-scripts.git] / usr_sbin / grml-tpm
1 #!/bin/zsh
2 # Filename:      grml-tpm
3 # Purpose:       set up a system for use with TPM technology
4 # Authors:       (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 # Latest change: Mit Jul 26 02:26:06 CEST 2006 [mika]
8 ################################################################################
9
10 . /etc/grml/lsb-functions
11
12 if [ $UID != 0 ] ; then
13    eerror Error: become root before starting $0 >& 2 ; eend 1
14    exit 100
15 fi
16
17 PN=$(basename "$0")
18 TPM_MODULES=$(awk '/tpm/ {print $1}' /proc/modules | xargs echo -n)
19
20 case "$1" in
21    start)
22       # tpm_emulator registers as /sys/class/misc/tpm while
23       # real tpm modules should provide /sys/class/misc/tpm0
24       if [ -d /sys/class/misc/tpm0 ] ; then
25         ewarn "TPM kernel modules $TPM_MODULES seem to be loaded already." ; eend 0
26       else
27         if ! modinfo tpm_emulator &>/dev/null ; then
28           eerror "Error: kernel module tpm_emulator not found." >& 2
29           eerror "Check for an existing debian package or get it from http://tpm-emulator.berlios.de/" >& 2
30           exit 1
31         fi
32
33         if grep -q tpm_emulator /proc/modules ; then
34           ewarn "Kernel driver tpm_emulator already loaded." ; eend 0
35         else
36           einfo "Loading kernel driver tpm_emulator."
37           modprobe tpm_emulator startup=clear ; eend $?
38         fi
39       fi
40
41       if [ -x /usr/sbin/tcsd ] ; then
42         if pidof tcsd &>/dev/null ; then
43           ewarn "trousers daemon already running." ; eend 0
44         else
45           einfo "Starting trousers daemon."
46           /usr/sbin/tcsd ; eend $?
47           [ $? != 0 ] && exit 1
48         fi
49       else
50         eerror "trousers daemon not available. Exiting." ; eend 1
51         exit 1
52       fi
53
54       einfo "Startup of $PN finished." ; eend 0
55      ;;
56   stop)
57       if pidof tcsd &>/dev/null ; then
58         einfo "Stopping trousers daemon."
59         kill `pidof tcsd` ; eend $?
60       else
61         ewarn "No running trousers daemon found. Nothing to be done." ; eend 0
62       fi
63
64       if grep -q tpm_emulator /proc/modules ; then
65         einfo "Unloading kernel driver tpm_emulator."
66         rmmod tpm_emulator ; eend $?
67       elif grep -q tpm /proc/modules ; then
68           einfo "Unloading TPM kernel drivers $(awk '/tpm/ {print $1}' /proc/modules | xargs echo -n)."
69           while grep -q tpm /proc/modules ; do
70             for module in $(cd /lib/modules/$(uname -r)/kernel/drivers/char/tpm/ ; ls *.ko) ; do
71               rmmod ${module%%.ko} &>/dev/null
72             done
73             eend 0
74           done
75       else
76         ewarn "No TPM kernel driver found. Nothing to be done." ; eend 0
77       fi
78      ;;
79   status)
80       if [ -r /sys/class/misc/tpm ] ; then
81         einfo "Seems to be running with tpm_emulator." ; eend 0
82       fi
83
84       if [ -r /sys/class/misc/tpm0 ] ; then
85         einfo "Seems to be running with real TPM hardware." ; eend 0
86       fi
87
88       if pidof tcsd &>/dev/null ; then
89         einfo "trousers daemon running." ; eend 0
90         if [ -x /usr/sbin/tpm_version ] ; then
91           einfo "tpm-version: "
92           tpm_version ; eend $?
93         else
94           eerror "tpm_version not found." ; eend 1
95         fi
96       else
97         ewarn "trousers daemon not running." ; eend 0
98       fi
99
100       if [ -r /sys/class/misc/tpm0/device/pcrs ] ; then
101         einfo "Dumping PCRS..."
102         cat /sys/class/misc/tpm0/device/pcrs ; RC=$?
103         einfo "... finished dumping of PCRS." ; eend $RC
104       fi
105      ;;
106   restart)
107      $0 stop ; sleep 1 ; $0 start
108      ;;
109   *)
110      eerror "Usage: $PN [start|stop|restart|status]"
111      ;;
112 esac
113
114 ## END OF FILE #################################################################