Check if the img_properties are decoded correct
[snf-image] / snf-image-helper / snf-image-helper.in
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 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
21
22 if [ $$ -eq 1 ]; then
23     mount / -o remount
24     /etc/init.d/udev start
25     hwclock -u -s
26
27     (exec $0) &
28     wait
29     exit 0 # Hopefully this is never called...
30 fi
31
32 . @commondir@/common.sh
33
34 set -e
35
36 if grep snf_image_activate_helper /proc/cmdline > /dev/null; then
37     # terminate helper vm when the script exits
38     add_cleanup system_poweroff
39 else
40     log_error "Kernel command line activation flag: " \
41               "\`snf_image_activate_helper' is missing"
42 fi
43
44 if [ ! -b "$FLOPPY_DEV" ]; then
45     log_error "Floppy device is not present!"
46 fi
47
48 floppy=$(mktemp -d --tmpdir floppy.XXXXXX)
49 add_cleanup rmdir "$floppy"
50
51 mount $FLOPPY_DEV $floppy
52 add_cleanup umount "$floppy"
53
54 if [ -f "$floppy/rules" ]; then
55     source "$floppy/rules"
56 else
57     log_error "Floppy does not contain \`rules\' file"
58 fi
59
60 if [ -f "$floppy/unattend.xml" ]; then
61     export SNF_IMAGE_UNATTEND="$floppy/unattend.xml"
62 fi
63
64 if [ -n "$SNF_IMAGE_PROPERTIES" ]; then
65     properties=$(mktemp --tmpdir properties.XXXXXX)
66     add_cleanup rm "$properties"
67     if ! echo "$SNF_IMAGE_PROPERTIES" | \
68         "@scriptsdir@/decode-properties.py" "$properties"; then
69
70         log_error "Unable to decode image properties. " \
71              "Please check if the variable is in valid json format."
72     fi
73     source "$properties"
74 fi
75
76 # Image mount point...
77 target=$(mktemp -d --tmpdir target.XXXXXX)
78 add_cleanup rmdir "$target"
79
80 export SNF_IMAGE_TARGET="$target"
81
82 if [ ! -d "@tasksdir@" ]; then
83     log_error "snf-image/tasks directory is missing"
84 fi
85
86 RUN_PARTS=$(which run-parts)
87 if [ -z "$RUN_PARTS" ]; then
88     log_error "run-parts program is missing from the system"
89 fi
90
91 # If something goes wrong with the tasks, try to umount the target filesystem
92 # in case it is left mounted...
93 trap '{ umount "$target"; }' ERR
94
95 if [ -z "$SNF_IMAGE_PROPERTY_EXCLUDE_ALL_TASKS" ]; then
96
97     if [ "$SNF_IMAGE_PROPERTY_OSFAMILY" = "" ]; then
98         log_error "Required image property \`OSFAMILY' is missing or empty."
99     fi
100
101     if [ "$SNF_IMAGE_PROPERTY_ROOT_PARTITION" = "" ]; then
102         log_error "Required image property \`ROOT_PARTITION' is missing or empty."
103     fi
104
105     export SNF_IMAGE_RESIZE_PART="$(get_partition_to_resize "$SNF_IMAGE_DEV")"
106
107     if [[ ! "$SNF_IMAGE_PROPERTY_OSFAMILY" =~ ^(linux|windows)$ ]]; then
108         log_error "Supported values for OSFAMILY property are: linux|windows"
109     fi
110
111     # Redirect standard error to standard output,
112     # prepend a timestamp before each line of output.
113     echo "Execute all snf-image tasks...."
114     $RUN_PARTS -v --exit-on-error "@tasksdir@" 2>&1|
115         while IFS= read -r line; do
116             echo $($DATE +%Y:%m:%d-%H:%M:%S.%N) "$line"
117         done
118 fi
119
120 # Disable the trap. If code reaches here, the filesystem is unmounted.
121 trap - ERR
122
123 echo "SUCCESS" > "$RESULT"
124
125 cleanup
126 trap - EXIT
127
128 # never called...
129 exit 0
130
131 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :