root / snf-image-helper / common.sh @ bad5ca1f
History | View | Annotate | Download (4.4 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 | bad5ca1f | Nikos Skalkotos | add_cleanup() { |
42 | bad5ca1f | Nikos Skalkotos | local cmd="" |
43 | bad5ca1f | Nikos Skalkotos | for arg; do cmd+=$(printf "%q " "$arg"); done |
44 | bad5ca1f | Nikos Skalkotos | CLEANUP+=("$cmd") |
45 | bad5ca1f | Nikos Skalkotos | } |
46 | bad5ca1f | Nikos Skalkotos | |
47 | 54080484 | Nikos Skalkotos | log_error() { |
48 | 7f6bd8e0 | Nikos Skalkotos | echo "ERROR: $@" | tee $RESULT >&2 |
49 | 54080484 | Nikos Skalkotos | exit 1 |
50 | 54080484 | Nikos Skalkotos | } |
51 | 54080484 | Nikos Skalkotos | |
52 | 54080484 | Nikos Skalkotos | get_base_distro() { |
53 | 54080484 | Nikos Skalkotos | local root_dir=$1 |
54 | 54080484 | Nikos Skalkotos | |
55 | 54080484 | Nikos Skalkotos | if [ -e "$root_dir/etc/debian_version" ]; then |
56 | 54080484 | Nikos Skalkotos | echo "debian" |
57 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/redhat-release" ]; then |
58 | 54080484 | Nikos Skalkotos | echo "redhat" |
59 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/slackware-version" ]; then |
60 | 54080484 | Nikos Skalkotos | echo "slackware" |
61 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/SuSE-release" ]; then |
62 | 54080484 | Nikos Skalkotos | echo "suse" |
63 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/gentoo-release" ]; then |
64 | 54080484 | Nikos Skalkotos | echo "gentoo" |
65 | 54080484 | Nikos Skalkotos | fi |
66 | 54080484 | Nikos Skalkotos | } |
67 | 54080484 | Nikos Skalkotos | |
68 | 54080484 | Nikos Skalkotos | get_distro() { |
69 | 54080484 | Nikos Skalkotos | local root_dir=$1 |
70 | 54080484 | Nikos Skalkotos | |
71 | 54080484 | Nikos Skalkotos | if [ -e "$root_dir/etc/debian_version" ]; then |
72 | 54080484 | Nikos Skalkotos | distro="debian" |
73 | 54080484 | Nikos Skalkotos | if [ -e ${root_dir}/etc/lsb-release ]; then |
74 | 54080484 | Nikos Skalkotos | ID=$(grep $DISTRIB_ID=${root_dir}/etc/lsb-release | cut -d= -f2) |
75 | 54080484 | Nikos Skalkotos | if [ "x$ID" = "xUbuntu" ]; then |
76 | 54080484 | Nikos Skalkotos | distro="ubuntu" |
77 | 54080484 | Nikos Skalkotos | fi |
78 | 54080484 | Nikos Skalkotos | fi |
79 | 54080484 | Nikos Skalkotos | echo "$distro" |
80 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/fedora-release" ]; then |
81 | 54080484 | Nikos Skalkotos | echo "fedora" |
82 | a93a31ee | Nikos Skalkotos | elif [ -e "$root_dir/etc/centos-release" ]; then |
83 | 54080484 | Nikos Skalkotos | echo "centos" |
84 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/redhat-release" ]; then |
85 | 54080484 | Nikos Skalkotos | echo "redhat" |
86 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/etc/slackware-version" ]; then |
87 | 54080484 | Nikos Skalkotos | echo "slackware" |
88 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/SuSE-release" ]; then |
89 | 54080484 | Nikos Skalkotos | echo "suse" |
90 | 54080484 | Nikos Skalkotos | elif [ -e "$root_dir/gentoo-release" ]; then |
91 | 54080484 | Nikos Skalkotos | echo "gentoo" |
92 | 54080484 | Nikos Skalkotos | fi |
93 | 54080484 | Nikos Skalkotos | } |
94 | 54080484 | Nikos Skalkotos | |
95 | 54080484 | Nikos Skalkotos | cleanup() { |
96 | 54080484 | Nikos Skalkotos | # if something fails here, it souldn't call cleanup again... |
97 | 54080484 | Nikos Skalkotos | trap - EXIT |
98 | 54080484 | Nikos Skalkotos | |
99 | 54080484 | Nikos Skalkotos | if [ ${#CLEANUP[*]} -gt 0 ]; then |
100 | 54080484 | Nikos Skalkotos | LAST_ELEMENT=$((${#CLEANUP[*]}-1)) |
101 | 54080484 | Nikos Skalkotos | REVERSE_INDEXES=$(seq ${LAST_ELEMENT} -1 0) |
102 | 54080484 | Nikos Skalkotos | for i in $REVERSE_INDEXES; do |
103 | 54080484 | Nikos Skalkotos | # If something fails here, it's better to retry it for a few times |
104 | 54080484 | Nikos Skalkotos | # before we give up with an error. This is needed for kpartx when |
105 | 54080484 | Nikos Skalkotos | # dealing with ntfs partitions mounted through fuse. umount is not |
106 | 54080484 | Nikos Skalkotos | # synchronous and may return while the partition is still busy. A |
107 | 54080484 | Nikos Skalkotos | # premature attempt to delete partition mappings through kpartx on a |
108 | 54080484 | Nikos Skalkotos | # device that hosts previously mounted ntfs partition may fail with |
109 | 54080484 | Nikos Skalkotos | # an `device-mapper: remove ioctl failed: Device or resource busy' |
110 | 54080484 | Nikos Skalkotos | # error. A sensible workaround for this is to wait for a while and |
111 | 54080484 | Nikos Skalkotos | # then try again. |
112 | 54080484 | Nikos Skalkotos | local cmd=${CLEANUP[$i]} |
113 | 54080484 | Nikos Skalkotos | $cmd || for interval in 0.25 0.5 1 2 4; do |
114 | 54080484 | Nikos Skalkotos | echo "Command $cmd failed!" |
115 | 54080484 | Nikos Skalkotos | echo "I'll wait for $interval secs and will retry..." |
116 | 54080484 | Nikos Skalkotos | sleep $interval |
117 | 54080484 | Nikos Skalkotos | $cmd && break |
118 | 54080484 | Nikos Skalkotos | done |
119 | 76009480 | Nikos Skalkotos | if [ "$?" != "0" ]; then |
120 | 76009480 | Nikos Skalkotos | echo "Giving Up..." |
121 | 76009480 | Nikos Skalkotos | exit 1; |
122 | 76009480 | Nikos Skalkotos | fi |
123 | 54080484 | Nikos Skalkotos | done |
124 | 54080484 | Nikos Skalkotos | fi |
125 | 54080484 | Nikos Skalkotos | } |
126 | 54080484 | Nikos Skalkotos | |
127 | 54080484 | Nikos Skalkotos | trap cleanup EXIT |
128 | 54080484 | Nikos Skalkotos | |
129 | 54080484 | Nikos Skalkotos | # vim: set sta sts=4 shiftwidth=4 sw=4 et ai : |