Add mechanism for using a custom unattend.xml
[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 . @commondir@/common.sh
21
22 set -e
23
24 if [ "x$1" != "x--force" ]; then
25     echo "WARNING: Exiting, this command would cause the system to halt." >&2
26     echo "Use --force if you know what you're doing." >&2
27     exit 1
28 fi
29
30 # terminate helper vm when the script exits
31 add_cleanup telinit 0
32
33 if [ ! -b "$FLOPPY_DEV" ]; then
34     log_error "Floppy device is not present!"
35 fi
36
37 floppy=$(mktemp -d --tmpdir floppy.XXXXXX)
38 add_cleanup rmdir "$floppy"
39
40 mount $FLOPPY_DEV $floppy
41 add_cleanup umount "$floppy"
42
43 if [ -f "$floppy/rules" ]; then
44     source "$floppy/rules"
45 else
46     log_error "Floppy does not contain \`rules\' file"
47 fi
48
49 if [ -f "$floppy/unattend.xml" ]; then
50     export SNF_IMAGE_UNATTEND="$floppy/unattend.xml"
51 fi
52
53 if [ -n "$SNF_IMAGE_PROPERTIES" ]; then
54     properties=$(mktemp --tmpdir properties.XXXXXX)
55     add_cleanup rm "$properties"
56     echo "$SNF_IMAGE_PROPERTIES" |
57         "@scriptsdir@/decode-properties.py" "$properties"
58     source "$properties"
59 fi
60
61 # Image mount point...
62 target=$(mktemp -d --tmpdir target.XXXXXX)
63 add_cleanup rmdir "$target"
64
65 export SNF_IMAGE_TARGET="$target"
66
67 if [ ! -d "@tasksdir@" ]; then
68     log_error "snf-image/tasks directory is missing"
69 fi
70
71 RUN_PARTS=$(which run-parts)
72 if [ -z "$RUN_PARTS" ]; then
73     log_error "run-parts program is missing from the system"
74 fi
75
76 # If something goes wrong with the tasks, try to umount the target filesystem
77 # in case it is left mounted...
78 trap '{ umount "$target"; }' ERR
79
80 if [ -z "$SNF_IMAGE_PROPERTY_EXCLUDE_ALL_TASKS" ]; then
81
82     export SNF_IMAGE_RESIZE_PART="$(get_partition_to_resize "$SNF_IMAGE_DEV")"
83
84     if [[ ! "$SNF_IMAGE_PROPERTY_OSFAMILY" =~ ^(linux|windows)$ ]]; then
85         log_error "Supported values for OSFAMILY property are: linux|windows"
86     fi
87
88     # Redirect standard error to standard output,
89     # prepend a timestamp before each line of output.
90     echo "Execute all snf-image tasks...."
91     $RUN_PARTS -v --exit-on-error "@tasksdir@" 2>&1|
92         while IFS= read -r line; do
93             echo $(date +%Y:%m:%d-%H:%M:%S.%N) "$line"
94         done
95 fi
96
97 # Disable the trap. If code reaches here, the filesystem is unmounted.
98 trap - ERR
99
100 echo "SUCCESS" > "$RESULT"
101
102 cleanup
103 trap - EXIT
104
105 # never called...
106 exit 0
107
108 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :