Index: src/scripts/image_to_usb.sh |
diff --git a/src/scripts/image_to_usb.sh b/src/scripts/image_to_usb.sh |
index bad72715f70718334112d006411bb931e8e0a148..1724e5ecea92d1692273f0aaf9b6cc64eb912d57 100755 |
--- a/src/scripts/image_to_usb.sh |
+++ b/src/scripts/image_to_usb.sh |
@@ -79,6 +79,29 @@ FLAGS_to=`eval readlink -f ${FLAGS_to}` |
# Uses this rootfs image as the source image to copy |
ROOTFS_IMAGE="${FLAGS_from}/rootfs.image" |
+PART_SIZE=$(stat -c%s "${ROOTFS_IMAGE}") # Bytes |
+ |
+# Setup stateful partition variables |
+STATEFUL_IMG="${FLAGS_from}/stateful_partition.image" |
+STATEFUL_DIR="${FLAGS_from}/stateful_partition" |
+ |
+# TODO(sosa@chromium.org) - Remove legacy support. |
+if [ ! -f "${STATEFUL_IMG}" ] ; then |
+ echo "WARNING! Stateful partition not found. Creating clean stateful" |
+ STATEFUL_LOOP_DEV=$(sudo losetup -f) |
+ if [ -z "${STATEFUL_LOOP_DEV}" ] ; then |
+ echo "No free loop device. Free up a loop device or reboot. exiting. " |
+ exit 1 |
+ fi |
+ set -x |
+ dd if=/dev/zero of="${STATEFUL_IMG}" bs=1 count=1 \ |
+ seek=$(( (${PART_SIZE} - 1) )) |
+ set +x |
+ sudo losetup "$STATEFUL_LOOP_DEV" "$STATEFUL_IMG" |
+ sudo mkfs.ext3 "$STATEFUL_LOOP_DEV" |
+ sudo tune2fs -L "C-STATE" -c 0 -i 0 "$STATEFUL_LOOP_DEV" |
+ sudo losetup -d "${STATEFUL_LOOP_DEV}" |
+fi |
# Modifies image for test if requested |
if [ ${FLAGS_test_image} -eq ${FLAGS_TRUE} ] ; then |
@@ -96,12 +119,18 @@ function do_cleanup { |
sudo losetup -d "${LOOP_DEV}" |
} |
-STATEFUL_DIR=${FLAGS_from}/stateful_partition |
-mkdir -p "${STATEFUL_DIR}" |
- |
function install_autotest { |
if [ -d ${AUTOTEST_SRC} ] |
then |
+ local stateful_loop_dev=$(sudo losetup -f) |
+ if [ -z "${stateful_loop_dev}" ] |
+ then |
+ echo "No free loop device. Free up a loop device or reboot. exiting." |
+ exit 1 |
+ fi |
+ |
+ sudo mount "${stateful_loop_dev}" "${STATEFUL_DIR}" |
+ |
echo -ne "Install autotest into stateful partition..." |
local autotest_client="/home/autotest-client" |
sudo mkdir -p "${STATEFUL_DIR}${autotest_client}" |
@@ -109,8 +138,9 @@ function install_autotest { |
"${STATEFUL_DIR}${autotest_client}" |
sudo chmod 755 "${STATEFUL_DIR}${autotest_client}" |
sudo chown -R 1000:1000 "${STATEFUL_DIR}${autotest_client}" |
- echo "Done." |
- sudo umount "${STATEFUL_DIR}" |
+ |
+ sudo umount ${STATEFUL_DIR} |
+ sudo losetup -d "${stateful_loop_dev}" |
else |
echo "/usr/local/autotest under ${DEFAULT_CHROOT_DIR} is not installed." |
echo "Please call make_autotest.sh inside chroot first." |
@@ -157,37 +187,23 @@ then |
! sudo umount "$i" |
done |
sleep 3 |
- |
- PART_SIZE=$(stat -c%s "${ROOTFS_IMAGE}") # Bytes |
- |
- echo "Copying root fs..." |
- sudo "${SCRIPTS_DIR}"/file_copy.py \ |
- if="${ROOTFS_IMAGE}" \ |
- of="${FLAGS_to}" bs=4M \ |
- seek_bytes=$(( (${PART_SIZE} * 2) + 512 )) |
- |
- # Set up loop device |
- LOOP_DEV=$(sudo losetup -f) |
- if [ -z "${LOOP_DEV}" ] |
- then |
- echo "No free loop device. Free up a loop device or reboot. exiting." |
- exit 1 |
- fi |
- |
- trap do_cleanup EXIT |
- |
- echo "Creating stateful partition..." |
- sudo losetup -o 512 "${LOOP_DEV}" "${FLAGS_to}" |
- sudo mkfs.ext3 -F -b 4096 -L C-STATE "${LOOP_DEV}" $(( ${PART_SIZE} / 4096 )) |
- if [ ${FLAGS_install_autotest} -eq ${FLAGS_TRUE} ] |
- then |
- sudo mount "${LOOP_DEV}" "${STATEFUL_DIR}" |
+ |
+ if [ ${FLAGS_install_autotest} -eq ${FLAGS_TRUE} ] ; then |
install_autotest |
fi |
- sync |
- sudo losetup -d "${LOOP_DEV}" |
- sync |
+ |
+ # Write stateful partition to first partition. |
+ echo "Copying stateful partition ..." |
+ sudo "${SCRIPTS_DIR}"/file_copy.py \ |
+ if="${STATEFUL_IMG}" of="${FLAGS_to}" bs=4M \ |
+ seek_bytes=512 |
+ # Write root fs to third partition. |
+ echo "Copying root fs partition ..." |
+ sudo "${SCRIPTS_DIR}"/file_copy.py \ |
+ if="${ROOTFS_IMAGE}" of="${FLAGS_to}" bs=4M \ |
+ seek_bytes=$(( (${PART_SIZE} * 2) + 512 )) |
+ |
trap - EXIT |
if [ ${FLAGS_copy_kernel} -eq ${FLAGS_TRUE} ] |
@@ -209,15 +225,7 @@ else |
PART_SIZE=$(stat -c%s "${ROOTFS_IMAGE}") |
- echo "Creating empty stateful partition" |
- dd if=/dev/zero of="${FLAGS_from}/stateful_partition.image" bs=1 count=1 \ |
- seek=$((${PART_SIZE} - 1)) |
- mkfs.ext3 -F -L C-STATE "${FLAGS_from}/stateful_partition.image" |
- |
- if [ ${FLAGS_install_autotest} -eq ${FLAGS_TRUE} ] |
- then |
- sudo mount -o loop "${FLAGS_from}/stateful_partition.image" \ |
- "${STATEFUL_DIR}" |
+ if [ ${FLAGS_install_autotest} -eq ${FLAGS_TRUE} ] ; then |
install_autotest |
fi |