Statistics
| Branch: | Tag: | Revision:

root / snf-image-helper / tasks / 30MountImage.in @ 1876c955

History | View | Annotate | Download (2.7 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" = "freebsd" ]; then
49
    if ! $DUMPFS_UFS "$rootdev" &> /dev/null; then
50
        log_error "For FreeBSD images only UFS root partitions are supported."
51
    fi
52
    $MOUNT -t ufs -o ufstype=ufs2,rw "$rootdev" "$SNF_IMAGE_TARGET"
53
else
54
    $MOUNT -o rw "$rootdev" "$SNF_IMAGE_TARGET"
55
fi
56

    
57
if [ "$SNF_IMAGE_PROPERTY_OSFAMILY" != "linux" ]; then
58
    exit 0
59
fi
60

    
61
if [ ! -f "${SNF_IMAGE_TARGET}/etc/fstab" ]; then
62
    log_error "/etc/fstab is missing from the root file system"
63
fi
64

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

    
69
# Mount non-root filesystems
70
while read line; do
71
    read -ra entry <<< "$line"
72
    # Skip root. It is already mounted
73
    if [ "${entry[0]}" = "/" ]; then
74
        continue
75
    fi
76

    
77
    if [[ ${entry[1]} =~ ^(LABEL|UUID)= ]]; then
78
        entry[1]=$(findfs "${entry[1]}")
79
    fi
80

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

    
85
done <<< "$fstab"
86

    
87
exit 0
88

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