Statistics
| Branch: | Tag: | Revision:

root / snf-image-helper / tasks / 30MountImage.in @ 1bda0902

History | View | Annotate | Download (3.2 kB)

1
#! /bin/bash
2

    
3
# Copyright (C) 2011 GRNET S.A. 
4
#
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
9
#
10
# This program is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
# General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
17
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18
# 02110-1301, USA.
19

    
20
### BEGIN TASK INFO
21
# Provides:		MountImage
22
# RunBefore:		UmountImage
23
# Short-Description:	Mount the partition that hosts the image
24
### END TASK INFO
25

    
26
set -e
27
. "@commondir@/common.sh"
28

    
29
trap task_cleanup EXIT
30
report_task_start
31

    
32
if [ ! -d "$SNF_IMAGE_TARGET" ]; then
33
    log_error "Target dir:\`$SNF_IMAGE_TARGET' is missing"
34
fi
35

    
36
if [ -z "$SNF_IMAGE_PROPERTY_ROOT_PARTITION" ]; then
37
    log_error "Required image property \`ROOT_PARTITION' not defined or empty"
38
fi
39

    
40
rootdev="${SNF_IMAGE_DEV}${SNF_IMAGE_PROPERTY_ROOT_PARTITION}"
41

    
42
if [ ! -b "$rootdev" ]; then
43
    log_error "Root partition device:\`$rootdev' is not a block device. " \
44
        "Please check if the value for image property \`ROOT_PARTITION' " \
45
        "(=$SNF_IMAGE_PROPERTY_ROOT_PARTITION) is valid."
46
fi
47

    
48
if [[ "$SNF_IMAGE_PROPERTY_OSFAMILY" == *bsd ]]; then
49
    if ! $DUMPFS_UFS "$rootdev" &> /dev/null; then
50
        os=${SNF_IMAGE_PROPERTY_OSFAMILY^^[bsd]}
51
        log_error "For ${os^?} images only UFS root partitions are supported."
52
    fi
53
    ufstype="$(get_ufstype "$rootdev")"
54
    if [ "x$ufstype" = "x" ]; then
55
        exit 1
56
    fi
57
    $MOUNT -t ufs -o ufstype="$ufstype,rw" "$rootdev" "$SNF_IMAGE_TARGET"
58

    
59
    # In many cases when you try to mount a UFS file system read-write,
60
    # the mount command returns SUCCESS and a message like this gets printed:
61
    #
62
    #   mount: warning: /mnt seems to be mounted read-only.
63
    #
64
    # remounting does the trick
65
    $MOUNT -o remount,rw "$SNF_IMAGE_TARGET"
66
else
67
    $MOUNT -o rw "$rootdev" "$SNF_IMAGE_TARGET"
68
fi
69

    
70
if [ "$SNF_IMAGE_PROPERTY_OSFAMILY" != "linux" ]; then
71
    exit 0
72
fi
73

    
74
if [ ! -f "${SNF_IMAGE_TARGET}/etc/fstab" ]; then
75
    log_error "/etc/fstab is missing from the root file system"
76
fi
77

    
78
# Read the local partitions from fstab and get a sorted list:
79
#<mount_point> <device> <options>
80
fstab="$(grep -v ^\# "${SNF_IMAGE_TARGET}/etc/fstab" | awk '{ if (match($3, "ext[234]")) { print $2,$1,$4 } }' | sort -bd)"
81

    
82
# Mount non-root filesystems
83
while read line; do
84
    read -ra entry <<< "$line"
85
    # Skip root. It is already mounted
86
    if [ "${entry[0]}" = "/" ]; then
87
        continue
88
    fi
89

    
90
    if [[ ${entry[1]} =~ ^(LABEL|UUID)= ]]; then
91
        entry[1]=$(findfs "${entry[1]}")
92
    fi
93

    
94
    # I'm in doupt. Sould I mount the filesystems with the mount options
95
    # found in the image's /etc/fstab or not?
96
    $MOUNT "${entry[1]}" "${SNF_IMAGE_TARGET}${entry[0]}" # -o "${entry[2]}"
97

    
98
done <<< "$fstab"
99

    
100
exit 0
101

    
102
# vim: set sta sts=4 shiftwidth=4 sw=4 et ai :