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