#!/bin/bash # Copyright (C) 2011 GRNET S.A. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin if [ $$ -eq 1 ]; then #mount / -o remount mount -t tmpfs -o size=20m tmpfs /tmp /etc/init.d/udev start #hwclock -u -s (exec $0) & wait exit 0 # Hopefully this is never called... fi export PATH . @commondir@/common.sh set -e # Enable errtrace to make functions inherit the ERR trap set -o errtrace trap report_error ERR if grep snf_image_activate_helper /proc/cmdline > /dev/null; then # terminate helper vm when the script exits add_cleanup system_poweroff else log_error "Kernel command line activation flag: " \ "\`snf_image_activate_helper' is missing" fi prepare_helper if [ ! -b "$RULES_DEV" ]; then log_error "Device file hosting the rules file: \`$RULES_DEV' does not exist" fi rules=$(mktemp -d --tmpdir rules.XXXXXX) add_cleanup rmdir "$rules" $MOUNT $RULES_DEV $rules add_cleanup umount "$rules" if [ -f "$rules/rules" ]; then source "$rules/rules" else log_error "$RULES_DEV does not contain \`rules\' file" fi if [ -f "$rules/unattend.xml" ]; then export SNF_IMAGE_UNATTEND="$rules/unattend.xml" fi if [ -n "$SNF_IMAGE_PROPERTIES" ]; then properties=$(mktemp --tmpdir properties.XXXXXX) add_cleanup rm "$properties" if ! echo "$SNF_IMAGE_PROPERTIES" | \ "@scriptsdir@/decode-properties.py" "$properties"; then log_error "Unable to decode image properties. " \ "Please check if the variable is in valid json format." fi source "$properties" fi # Image mount point... target=$(mktemp -d --tmpdir target.XXXXXX) add_cleanup rmdir "$target" export SNF_IMAGE_TARGET="$target" if [ ! -d "@tasksdir@" ]; then log_error "snf-image/tasks directory is missing" fi RUN_PARTS=$(which run-parts) if [ -z "$RUN_PARTS" ]; then log_error "run-parts program is missing from the system" fi if [ -z "$SNF_IMAGE_PROPERTY_EXCLUDE_ALL_TASKS" ]; then if [ "$SNF_IMAGE_PROPERTY_OSFAMILY" = "" ]; then log_error "Required image property \`OSFAMILY' is missing or empty." fi if [ "$SNF_IMAGE_PROPERTY_ROOT_PARTITION" = "" ]; then log_error "Required image property \`ROOT_PARTITION' is missing or empty." fi export SNF_IMAGE_RESIZE_PART="$(get_partition_to_resize "$SNF_IMAGE_DEV")" if [[ ! "$SNF_IMAGE_PROPERTY_OSFAMILY" =~ ^(linux|windows|freebsd)$ ]]; then log_error "Supported values for OSFAMILY property are: linux|windows|freebsd" fi # If something goes wrong with the tasks, try to umount the disk file # systems that are still mounted. trap '{ umount_all "$target"; }' ERR # Redirect standard error to standard output, # prepend a timestamp before each line of output. echo "Execute all snf-image tasks...." $RUN_PARTS -v --exit-on-error "@tasksdir@" 2>&1| while read -r line; do echo $($DATE +%Y:%m:%d-%H:%M:%S.%N) "$line" done # Reset the handler to its original value trap report_error ERR fi return_success cleanup trap - EXIT # never called... exit 0 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :