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