Statistics
| Branch: | Tag: | Revision:

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 :