root / snf-image-helper / common.sh @ aa4fc6bb
History | View | Annotate | Download (4.3 kB)
1 | 54080484 | Nikos Skalkotos | # Copyright 2011 GRNET S.A. All rights reserved. |
---|---|---|---|
2 | 54080484 | Nikos Skalkotos | # |
3 | 54080484 | Nikos Skalkotos | # Redistribution and use in source and binary forms, with or without |
4 | 54080484 | Nikos Skalkotos | # modification, are permitted provided that the following conditions |
5 | 54080484 | Nikos Skalkotos | # are met: |
6 | 54080484 | Nikos Skalkotos | # |
7 | 54080484 | Nikos Skalkotos | # 1. Redistributions of source code must retain the above copyright |
8 | 54080484 | Nikos Skalkotos | # notice, this list of conditions and the following disclaimer. |
9 | 54080484 | Nikos Skalkotos | # |
10 | 54080484 | Nikos Skalkotos | # 2. Redistributions in binary form must reproduce the above copyright |
11 | 54080484 | Nikos Skalkotos | # notice, this list of conditions and the following disclaimer in the |
12 | 54080484 | Nikos Skalkotos | # documentation and/or other materials provided with the distribution. |
13 | 54080484 | Nikos Skalkotos | # |
14 | 54080484 | Nikos Skalkotos | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
15 | 54080484 | Nikos Skalkotos | # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
16 | 54080484 | Nikos Skalkotos | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
17 | 54080484 | Nikos Skalkotos | # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
18 | 54080484 | Nikos Skalkotos | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
19 | 54080484 | Nikos Skalkotos | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
20 | 54080484 | Nikos Skalkotos | # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
21 | 54080484 | Nikos Skalkotos | # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
22 | 54080484 | Nikos Skalkotos | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
23 | 54080484 | Nikos Skalkotos | # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
24 | 54080484 | Nikos Skalkotos | # SUCH DAMAGE. |
25 | 54080484 | Nikos Skalkotos | # |
26 | 54080484 | Nikos Skalkotos | # The views and conclusions contained in the software and documentation are |
27 | 54080484 | Nikos Skalkotos | # those of the authors and should not be interpreted as representing official |
28 | 54080484 | Nikos Skalkotos | # policies, either expressed or implied, of GRNET S.A. |
29 | 54080484 | Nikos Skalkotos | |
30 | 7f6bd8e0 | Nikos Skalkotos | RESULT=/dev/ttyS1 |
31 | c349d1b3 | Nikos Skalkotos | FLOPPY_DEV=/dev/fd0 |
32 | 54080484 | Nikos Skalkotos | |
33 | 8cd155a3 | Nikos Skalkotos | PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin |
34 | 8cd155a3 | Nikos Skalkotos | |
35 | 54080484 | Nikos Skalkotos | # Programs |
36 | 54080484 | Nikos Skalkotos | XMLSTARLET=xmlstarlet |
37 | c349d1b3 | Nikos Skalkotos | RESIZE2FS=resize2fs |
38 | 54080484 | Nikos Skalkotos | |
39 | 54080484 | Nikos Skalkotos | CLEANUP=( ) |
40 | 54080484 | Nikos Skalkotos | |
41 | 54080484 | Nikos Skalkotos | log_error() { |
42 | 7f6bd8e0 | Nikos Skalkotos | echo "ERROR: $@" | tee $RESULT >&2 |
43 | 54080484 | Nikos Skalkotos | exit 1 |
44 | 54080484 | Nikos Skalkotos | } |
45 | 54080484 | Nikos Skalkotos | |
46 | 54080484 | Nikos Skalkotos | get_base_distro() { |
47 | 54080484 | Nikos Skalkotos | local root_dir=$1 |
48 | 54080484 | Nikos Skalkotos | |
49 | 54080484 | Nikos Skalkotos | if [ -e "$root_dir/etc/debian_version" ]; then |
50 | 54080484 | Nikos Skalkotos | echo "debian" |
51 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/redhat-release" ]; then |
52 | 54080484 | Nikos Skalkotos | echo "redhat" |
53 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/slackware-version" ]; then |
54 | 54080484 | Nikos Skalkotos | echo "slackware" |
55 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/SuSE-release" ]; then |
56 | 54080484 | Nikos Skalkotos | echo "suse" |
57 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/gentoo-release" ]; then |
58 | 54080484 | Nikos Skalkotos | echo "gentoo" |
59 | 54080484 | Nikos Skalkotos | fi |
60 | 54080484 | Nikos Skalkotos | } |
61 | 54080484 | Nikos Skalkotos | |
62 | 54080484 | Nikos Skalkotos | get_distro() { |
63 | 54080484 | Nikos Skalkotos | local root_dir=$1 |
64 | 54080484 | Nikos Skalkotos | |
65 | 54080484 | Nikos Skalkotos | if [ -e "$root_dir/etc/debian_version" ]; then |
66 | 54080484 | Nikos Skalkotos | distro="debian" |
67 | 54080484 | Nikos Skalkotos | if [ -e ${root_dir}/etc/lsb-release ]; then |
68 | 54080484 | Nikos Skalkotos | ID=$(grep $DISTRIB_ID=${root_dir}/etc/lsb-release | cut -d= -f2) |
69 | 54080484 | Nikos Skalkotos | if [ "x$ID" = "xUbuntu" ]; then |
70 | 54080484 | Nikos Skalkotos | distro="ubuntu" |
71 | 54080484 | Nikos Skalkotos | fi |
72 | 54080484 | Nikos Skalkotos | fi |
73 | 54080484 | Nikos Skalkotos | echo "$distro" |
74 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/fedora-release" ]; then |
75 | 54080484 | Nikos Skalkotos | echo "fedora" |
76 | a93a31ee | Nikos Skalkotos | elif [ -e "$root_dir/etc/centos-release" ]; then |
77 | 54080484 | Nikos Skalkotos | echo "centos" |
78 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/redhat-release" ]; then |
79 | 54080484 | Nikos Skalkotos | echo "redhat" |
80 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/slackware-version" ]; then |
81 | 54080484 | Nikos Skalkotos | echo "slackware" |
82 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/SuSE-release" ]; then |
83 | 54080484 | Nikos Skalkotos | echo "suse" |
84 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/gentoo-release" ]; then |
85 | 54080484 | Nikos Skalkotos | echo "gentoo" |
86 | 54080484 | Nikos Skalkotos | fi |
87 | 54080484 | Nikos Skalkotos | } |
88 | 54080484 | Nikos Skalkotos | |
89 | 54080484 | Nikos Skalkotos | cleanup() { |
90 | 54080484 | Nikos Skalkotos | # if something fails here, it souldn't call cleanup again... |
91 | 54080484 | Nikos Skalkotos | trap - EXIT |
92 | 54080484 | Nikos Skalkotos | |
93 | 54080484 | Nikos Skalkotos | if [ ${#CLEANUP[*]} -gt 0 ]; then |
94 | 54080484 | Nikos Skalkotos | LAST_ELEMENT=$((${#CLEANUP[*]}-1)) |
95 | 54080484 | Nikos Skalkotos | REVERSE_INDEXES=$(seq ${LAST_ELEMENT} -1 0) |
96 | 54080484 | Nikos Skalkotos | for i in $REVERSE_INDEXES; do |
97 | 54080484 | Nikos Skalkotos | # If something fails here, it's better to retry it for a few times |
98 | 54080484 | Nikos Skalkotos | # before we give up with an error. This is needed for kpartx when |
99 | 54080484 | Nikos Skalkotos | # dealing with ntfs partitions mounted through fuse. umount is not |
100 | 54080484 | Nikos Skalkotos | # synchronous and may return while the partition is still busy. A |
101 | 54080484 | Nikos Skalkotos | # premature attempt to delete partition mappings through kpartx on a |
102 | 54080484 | Nikos Skalkotos | # device that hosts previously mounted ntfs partition may fail with |
103 | 54080484 | Nikos Skalkotos | # an `device-mapper: remove ioctl failed: Device or resource busy' |
104 | 54080484 | Nikos Skalkotos | # error. A sensible workaround for this is to wait for a while and |
105 | 54080484 | Nikos Skalkotos | # then try again. |
106 | 54080484 | Nikos Skalkotos | local cmd=${CLEANUP[$i]} |
107 | 54080484 | Nikos Skalkotos | $cmd || for interval in 0.25 0.5 1 2 4; do |
108 | 54080484 | Nikos Skalkotos | echo "Command $cmd failed!" |
109 | 54080484 | Nikos Skalkotos | echo "I'll wait for $interval secs and will retry..." |
110 | 54080484 | Nikos Skalkotos | sleep $interval |
111 | 54080484 | Nikos Skalkotos | $cmd && break |
112 | 54080484 | Nikos Skalkotos | done |
113 | 54080484 | Nikos Skalkotos | test $? -eq 1 && { echo "Giving Up..."; exit 1; } |
114 | 54080484 | Nikos Skalkotos | done |
115 | 54080484 | Nikos Skalkotos | fi |
116 | 54080484 | Nikos Skalkotos | } |
117 | 54080484 | Nikos Skalkotos | |
118 | 54080484 | Nikos Skalkotos | trap cleanup EXIT |
119 | 54080484 | Nikos Skalkotos | |
120 | 54080484 | Nikos Skalkotos | # vim: set sta sts=4 shiftwidth=4 sw=4 et ai : |