flatcar-scripts/mod_image_for_test.sh
Eric Li df5bf95764 Change mod_for_test_script to make it work with arm os image.
Get rid of chroot inside this script, and not mounting mod_for_test_scripts into rootfs any more.

The reason caused the failure here is once you chroot into the mounted rootfs directory, all binaries were searched inside the rootfs. But all binaries inside the arm rootfs was for arm hardware, so not executable on the host linux machine(intel).

Review URL: http://codereview.chromium.org/845007
2010-03-15 20:35:59 -07:00

106 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Script to modify a keyfob-based chromeos system image for testability.
# Load common constants. This should be the first executable line.
# The path to common.sh should be relative to your script's location.
. "$(dirname "$0")/common.sh"
get_default_board
DEFINE_string board "$DEFAULT_BOARD" "Board for which the image was built"
DEFINE_string image "" "Location of the rootfs raw image file"
DEFINE_boolean yes $FLAGS_FALSE "Answer yes to all prompts" "y"
# Parse command line
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
# No board, no default and no image set then we can't find the image
if [ -z $FLAGS_IMAGE ] && [ -z $FLAGS_board ] ; then
setup_board_warning
echo "*** mod_image_for_test failed. No board set and no image set"
exit 1
fi
# We have a board name but no image set. Use image at default location
if [ -z $FLAGS_image ] ; then
IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}"
FLAGS_image="${IMAGES_DIR}/$(ls -t $IMAGES_DIR 2>&-| head -1)/rootfs.image"
fi
# Abort early if we can't find the image
if [ ! -f $FLAGS_image ] ; then
echo "No image found at $FLAGS_image"
exit 1
fi
# Make sure anything mounted in the rootfs is cleaned up ok on exit.
cleanup_rootfs_mounts() {
# Occasionally there are some daemons left hanging around that have our
# root image file system open. We do a best effort attempt to kill them.
PIDS=`sudo lsof -t "${ROOT_FS_DIR}" | sort | uniq`
for pid in ${PIDS}
do
local cmdline=`cat /proc/$pid/cmdline`
echo "Killing process that has open file on our rootfs: $cmdline"
! sudo kill $pid # Preceded by ! to disable ERR trap.
done
}
cleanup_rootfs_loop() {
sudo umount "${LOOP_DEV}"
sleep 1 # in case $LOOP_DEV is in use
sudo losetup -d "${LOOP_DEV}"
}
cleanup() {
# Disable die on error.
set +e
cleanup_rootfs_mounts
if [ -n "${LOOP_DEV}" ]
then
cleanup_rootfs_loop
fi
# Turn die on error back on.
set -e
}
# main process begins here.
set -e
trap cleanup EXIT
ROOT_FS_DIR="`dirname ${FLAGS_image}`/rootfs"
mkdir -p "${ROOT_FS_DIR}"
LOOP_DEV=`sudo losetup -f`
sudo losetup "${LOOP_DEV}" "${FLAGS_image}"
sudo mount "${LOOP_DEV}" "${ROOT_FS_DIR}"
# Make sure this is really what the user wants, before nuking the device
if [ $FLAGS_yes -ne $FLAGS_TRUE ]; then
read -p "Modifying image ${FLAGS_image} for test; are you sure (y/N)? " SURE
SURE="${SURE:0:1}" # Get just the first character
if [ "$SURE" != "y" ]; then
echo "Ok, better safe than sorry."
exit 1
fi
else
echo "Modifying image ${FLAGS_image} for test..."
fi
MOD_SCRIPTS_ROOT="${GCLIENT_ROOT}/src/scripts/mod_for_test_scripts"
# Run test setup script inside chroot jail to modify the image
sudo GCLIENT_ROOT=${GCLIENT_ROOT} ROOT_FS_DIR=${ROOT_FS_DIR} \
"${MOD_SCRIPTS_ROOT}/test_setup.sh"
cleanup
trap - EXIT