5ab3465925da6712d2d9cd34b3f3232908dc4ede
[myops.git] / web / collect / client / get_bootcd_version.sh
1 #!/bin/bash
2
3 kernel=$1
4
5 function get_version () {
6
7    DEVICE=$1
8    cd /tmp
9    if [ -f /mnt/boot/pl_version ]; then
10          cat /mnt/boot/pl_version 
11    fi
12 }
13 function get_kernel_version () {
14
15    DEVICE=$1
16    cd /tmp
17    if [ -f /mnt/boot/kernel ]; then
18          strings /mnt/boot/kernel | grep planetlab
19    else
20          echo "No kernel at /mnt/boot/kernel"
21    fi
22 }
23
24 function mount_works () {
25    DEVICE=$1
26    msg="mount: you must specify the filesystem type"
27    r=`mount $DEVICE /mnt/boot 2>&1`
28    if [ "$r" == "$msg" ] ; then 
29        return 1;
30    else
31        return 0;
32    fi
33 }
34
35 mkdir -p /mnt/boot
36 DL=`./sysinfo/systeminfo.py | sort -n | awk '{print $2}' | head -1`
37 if [ -z "$kernel" ] ; then
38     V="No BootImage Found"
39 else
40     V="Unable to find kernel image"
41 fi
42 (
43     flock -x 400
44     for dev in /dev/cdrom /dev/cdrom1 $DL ${DL}4 ${DL}1; do
45         if [ -b $dev ] ; then
46             if mount_works $dev ; then
47                 if [ -z "$kernel" ] ; then
48                     V=$( get_version $dev )
49                 else
50                     V=$( get_kernel_version $dev )
51                 fi
52                 r=`umount /mnt/boot 2>&1`
53                 msg2="umount: /mnt/boot: device is busy"
54                 if [ "$r" == "$msg2" ] ; then 
55                     r=`umount /mnt/boot 2>&1`
56                 fi
57                 break
58             fi
59         fi
60     done
61
62     if [ -z "$kernel" ] ; then
63         if [ -z "$V" ] ; then
64             wc=$( dmesg | grep "Buffer I/O error"  | wc -l )
65             if [ $wc -gt 0 ] ; then
66                 echo "Multiple IO errors prevent reading: $wc"
67             else 
68                 echo "No BootImage Found"
69             fi
70         else
71             echo $V
72         fi
73     else
74         echo $V
75     fi
76 ) 400>/var/lock/myops.mount