Adding debian version 4.0~a1-1.
[live-boot-grml.git] / scripts / boot / 3010-verify-checksums
1 #!/bin/sh
2
3 #set -e
4
5 Verify_checksums ()
6 {
7         for _PARAMETER in ${_CMDLINE}
8         do
9                 case "${_PARAMETER}" in
10                         live-boot.verify-checksums=*|verify-checksums=*)
11                                 LIVE_VERIFY_CHECKSUMS="true"
12                                 LIVE_VERIFY_CHECKSUMS_DIGESTS="${_PARAMETER#*verify-checksums=}"
13                                 ;;
14
15                         live-boot.verify-checksums|verify-checksums)
16                                 LIVE_VERIFY_CHECKSUMS="true"
17                                 ;;
18                 esac
19         done
20
21         case "${LIVE_VERIFY_CHECKSUMS}" in
22                 true)
23                         ;;
24
25                 *)
26                         return 0
27                         ;;
28         esac
29
30         _MOUNTPOINT="${1}"
31
32         LIVE_VERIFY_CHECKSUMS_DIGESTS="${LIVE_VERIFY_CHECKSUMS_DIGESTS:-sha512 sha384 sha256 sha224 sha1 md5}"
33         _TTY="/dev/tty8"
34
35         log_begin_msg "Verifying checksums"
36
37         cd "${_MOUNTPOINT}"
38
39         for _DIGEST in $(echo ${LIVE_VERIFY_CHECKSUMS_DIGESTS} | sed -e 's|,| |g')
40         do
41                 _CHECKSUMS="$(echo ${_DIGEST} | tr [a-z] [A-Z])SUMS"
42
43                 if [ -e "${_CHECKSUMS}" ]
44                 then
45                         echo "Found ${_CHECKSUMS}..." > "${_TTY}"
46
47                         if [ -e "/bin/${_DIGEST}sum" ]
48                         then
49                                 echo "Checking ${_CHECKSUMS}..." > "${_TTY}"
50
51                                 # Verify checksums
52                                 /bin/${_DIGEST}sum -c "${_CHECKSUMS}" < "${_TTY}" > "${_TTY}"
53                                 _RETURN="${?}"
54
55                                 # Stop after first verification
56                                 break
57                         else
58                                 echo "Not found /bin/${_DIGEST}sum..." > "${_TTY}"
59                         fi
60                 fi
61         done
62
63         log_end_msg
64
65         case "${_RETURN}" in
66                 0)
67                         log_success_msg "Verification successfull, rebooting in 10 seconds."
68                         sleep 10
69
70                         # Unmount live-media
71                         cd /
72                         umount -f ${_MOUNTPOINT} > /dev/null 2>&1
73                         sync
74
75                         # Attempt to remount all mounted filesystems read-only
76                         echo u > /proc/sysrq-trigger
77
78                         # Immediately reboot the system without syncing or unmounting filesystems
79                         echo b > /proc/sysrq-trigger
80                         ;;
81
82                 *)
83                         panic "Verification failed, $(basename ${_TTY}) for more information."
84                         ;;
85         esac
86 }