root / snf-image-helper / snf-image-helper.in @ 78e9f209
History | View | Annotate | Download (2.6 kB)
1 | 54080484 | Nikos Skalkotos | #!/bin/bash |
---|---|---|---|
2 | 54080484 | Nikos Skalkotos | |
3 | 3709b5f4 | Nikos Skalkotos | # Copyright (C) 2011 GRNET S.A. |
4 | 54080484 | Nikos Skalkotos | # |
5 | 3709b5f4 | Nikos Skalkotos | # This program is free software; you can redistribute it and/or modify |
6 | 3709b5f4 | Nikos Skalkotos | # it under the terms of the GNU General Public License as published by |
7 | 3709b5f4 | Nikos Skalkotos | # the Free Software Foundation; either version 2 of the License, or |
8 | 3709b5f4 | Nikos Skalkotos | # (at your option) any later version. |
9 | 54080484 | Nikos Skalkotos | # |
10 | 3709b5f4 | Nikos Skalkotos | # This program is distributed in the hope that it will be useful, but |
11 | 3709b5f4 | Nikos Skalkotos | # WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | 3709b5f4 | Nikos Skalkotos | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | 3709b5f4 | Nikos Skalkotos | # General Public License for more details. |
14 | 54080484 | Nikos Skalkotos | # |
15 | 3709b5f4 | Nikos Skalkotos | # You should have received a copy of the GNU General Public License |
16 | 3709b5f4 | Nikos Skalkotos | # along with this program; if not, write to the Free Software |
17 | 3709b5f4 | Nikos Skalkotos | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
18 | 3709b5f4 | Nikos Skalkotos | # 02110-1301, USA. |
19 | 54080484 | Nikos Skalkotos | |
20 | bf7c33b2 | Nikos Skalkotos | . @commondir@/common.sh |
21 | 54080484 | Nikos Skalkotos | |
22 | c349d1b3 | Nikos Skalkotos | set -e |
23 | bad5ca1f | Nikos Skalkotos | set -o pipefail |
24 | c349d1b3 | Nikos Skalkotos | |
25 | ff7783b8 | Vangelis Koukis | if [ "x$1" != "x--force" ]; then |
26 | af4a3462 | Vangelis Koukis | echo "WARNING: Exiting, this command would cause the system to halt." >&2 |
27 | af4a3462 | Vangelis Koukis | echo "Use --force if you know what you're doing." >&2 |
28 | ff7783b8 | Vangelis Koukis | exit 1 |
29 | ff7783b8 | Vangelis Koukis | fi |
30 | ff7783b8 | Vangelis Koukis | |
31 | 54080484 | Nikos Skalkotos | # terminate helper vm when the script exits |
32 | bad5ca1f | Nikos Skalkotos | add_cleanup telinit 0 |
33 | 54080484 | Nikos Skalkotos | |
34 | bad5ca1f | Nikos Skalkotos | if [ ! -b "$FLOPPY_DEV" ]; then |
35 | c349d1b3 | Nikos Skalkotos | log_error "Floppy device is not present!" |
36 | c349d1b3 | Nikos Skalkotos | fi |
37 | c349d1b3 | Nikos Skalkotos | |
38 | bad5ca1f | Nikos Skalkotos | floppy=$(mktemp -d --tmpdir floppy.XXXXXX) |
39 | bad5ca1f | Nikos Skalkotos | add_cleanup rmdir "$floppy" |
40 | 54080484 | Nikos Skalkotos | |
41 | c349d1b3 | Nikos Skalkotos | mount $FLOPPY_DEV $floppy |
42 | bad5ca1f | Nikos Skalkotos | add_cleanup umount "$floppy" |
43 | c349d1b3 | Nikos Skalkotos | |
44 | bad5ca1f | Nikos Skalkotos | if [ -f "$floppy/rules" ]; then |
45 | bad5ca1f | Nikos Skalkotos | source "$floppy/rules" |
46 | 54080484 | Nikos Skalkotos | else |
47 | c349d1b3 | Nikos Skalkotos | log_error "Floppy does not contain \`rules\' file" |
48 | c308b9f9 | Nikos Skalkotos | fi |
49 | 54080484 | Nikos Skalkotos | |
50 | 473f4fa5 | Nikos Skalkotos | if [ -n "$SNF_IMAGE_PROPERTIES" ]; then |
51 | 473f4fa5 | Nikos Skalkotos | properties=$(mktemp --tmpdir properties.XXXXXX) |
52 | 473f4fa5 | Nikos Skalkotos | add_cleanup rm "$properties" |
53 | 38552c68 | Nikos Skalkotos | echo "$SNF_IMAGE_PROPERTIES" | |
54 | 38552c68 | Nikos Skalkotos | "@scriptsdir@/decode-properties.py" "$properties" |
55 | 473f4fa5 | Nikos Skalkotos | source "$properties" |
56 | 473f4fa5 | Nikos Skalkotos | fi |
57 | 473f4fa5 | Nikos Skalkotos | |
58 | c349d1b3 | Nikos Skalkotos | # Image mount point... |
59 | bad5ca1f | Nikos Skalkotos | target=$(mktemp -d --tmpdir target.XXXXXX) |
60 | bad5ca1f | Nikos Skalkotos | add_cleanup rmdir "$target" |
61 | 54080484 | Nikos Skalkotos | |
62 | bad5ca1f | Nikos Skalkotos | export SNF_IMAGE_TARGET="$target" |
63 | 54080484 | Nikos Skalkotos | |
64 | 27b1de98 | Nikos Skalkotos | if [ ! -d "@tasksdir@" ]; then |
65 | 1bb3e009 | Nikos Skalkotos | log_error "snf-image/tasks directory is missing" |
66 | 1bb3e009 | Nikos Skalkotos | fi |
67 | c349d1b3 | Nikos Skalkotos | |
68 | 1bb3e009 | Nikos Skalkotos | RUN_PARTS=$(which run-parts) |
69 | 1bb3e009 | Nikos Skalkotos | if [ -z "$RUN_PARTS" ]; then |
70 | cc9de6c0 | Vangelis Koukis | log_error "run-parts program is missing from the system" |
71 | 54080484 | Nikos Skalkotos | fi |
72 | 54080484 | Nikos Skalkotos | |
73 | 0468a748 | Nikos Skalkotos | # If something goes wrong with the tasks, try to umount the target filesystem |
74 | 0468a748 | Nikos Skalkotos | # in case it is left mounted... |
75 | bad5ca1f | Nikos Skalkotos | trap '{ umount "$target"; }' ERR |
76 | 0468a748 | Nikos Skalkotos | |
77 | e50c4112 | Nikos Skalkotos | if [ -z "$SNF_IMAGE_PROPERTY_EXCLUDE_ALL_TASKS" ]; then |
78 | e7cbe965 | Nikos Skalkotos | # Redirect standard error to standard output, |
79 | e7cbe965 | Nikos Skalkotos | # prepend a timestamp before each line of output. |
80 | e7cbe965 | Nikos Skalkotos | echo "Execute all snf-image tasks...." |
81 | e7cbe965 | Nikos Skalkotos | $RUN_PARTS -v --exit-on-error "@tasksdir@" 2>&1| |
82 | e7cbe965 | Nikos Skalkotos | while IFS= read -r line; do |
83 | e7cbe965 | Nikos Skalkotos | echo $(date +%Y:%m:%d-%H:%M:%S.%N) "$line" |
84 | e7cbe965 | Nikos Skalkotos | done |
85 | e7cbe965 | Nikos Skalkotos | fi |
86 | 1bb3e009 | Nikos Skalkotos | |
87 | cb6b4f68 | Nikos Skalkotos | # Disable the trap. If code reaches here, the filesystem is unmounted. |
88 | cb6b4f68 | Nikos Skalkotos | trap - ERR |
89 | cb6b4f68 | Nikos Skalkotos | |
90 | bad5ca1f | Nikos Skalkotos | echo "SUCCESS" > "$RESULT" |
91 | 7f6bd8e0 | Nikos Skalkotos | |
92 | 54080484 | Nikos Skalkotos | cleanup |
93 | 54080484 | Nikos Skalkotos | trap - EXIT |
94 | 54080484 | Nikos Skalkotos | |
95 | 54080484 | Nikos Skalkotos | # never called... |
96 | 54080484 | Nikos Skalkotos | exit 0 |
97 | 54080484 | Nikos Skalkotos | |
98 | 54080484 | Nikos Skalkotos | # vim: set sta sts=4 shiftwidth=4 sw=4 et ai : |