cros_generate_update_payload: Don't mount src/dst rootfs.
The delta_generator doesn't require us to pass the mounted rootfs
anymore so we avoid mounting them from cros_generate_update_payload.
Note that mounting the stateful partition is still required for old
images with an unpatched kernel.
This patch also runs delta_generator as a normal user since it doesn't
access the mounted filesystems anymore which were the only files
requiring root.
CQ-DEPEND=CL:283643
BUG=chromium:305832
TEST=Ran cros_generate_update_payload delta on old (link FSI) and new (link ToT) images.
Change-Id: I5cc0dd8666bbf374a9b04a43b5713c62e9718821
Reviewed-on: https://chromium-review.googlesource.com/283563
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Don Garrett <dgarrett@chromium.org>
Tested-by: Alex Deymo <deymo@chromium.org>
Trybot-Ready: Alex Deymo <deymo@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
diff --git a/host/cros_generate_update_payload b/host/cros_generate_update_payload
index 5ae1148..de4e452 100755
--- a/host/cros_generate_update_payload
+++ b/host/cros_generate_update_payload
@@ -91,8 +91,8 @@
# be cleaned up on the build servers at the end of cbuildbot.
MOUNTS_ROOT="/tmp/crbug_358933"
-SRC_MNT=""
-DST_MNT=""
+ROOTFS_PART_NUM=3
+
SRC_KERNEL=""
SRC_ROOT=""
DST_KERNEL=""
@@ -127,12 +127,7 @@
cleanup() {
local err=""
- umount_and_rmdir "${SRC_MNT}" || err=1
- umount_and_rmdir "${DST_MNT}" || err=1
umount_and_rmdir "${STATE_MNT}" || err=1
-
- SRC_MNT=""
- DST_MNT=""
STATE_MNT=""
if [[ -z "${FLAGS_src_kern_path}" ]]; then
@@ -222,7 +217,8 @@
local bin_file="$1"
local root_out="$2"
- extract_partition_to_temp_file "${bin_file}" 3 "${root_out}"
+ extract_partition_to_temp_file "${bin_file}" "${ROOTFS_PART_NUM}" \
+ "${root_out}"
}
mkdir -p "${MOUNTS_ROOT}"
@@ -288,13 +284,6 @@
DST_KERNEL=$(extract_kern "${FLAGS_image}" "${FLAGS_kern_path}")
DST_ROOT=$(extract_root "${FLAGS_image}" "${FLAGS_root_path}")
-DST_MNT=$(mktemp -d --tmpdir="${MOUNTS_ROOT}" dst_root.XXXXXX)
-sudo mount -o loop,ro "${DST_ROOT}" "${DST_MNT}"
-
-# TODO(deymo): Remove the DST_MNT mounting and read the partition size from the
-# GPT table.
-source "${DST_MNT}"/usr/sbin/write_gpt.sh || warn "Could not read write_gpt.sh"
-
GENERATOR_ARGS=(
# Common payload args:
-out_file="${FLAGS_output}"
@@ -311,9 +300,6 @@
)
if [[ "${DELTA}" -eq "${FLAGS_TRUE}" ]]; then
- SRC_MNT=$(mktemp -d --tmpdir="${MOUNTS_ROOT}" src_root.XXXXXX)
- sudo mount -o loop,ro "${SRC_ROOT}" "${SRC_MNT}"
-
GENERATOR_ARGS+=(
# Source image args:
-old_image="${SRC_ROOT}"
@@ -324,9 +310,6 @@
-old_key="${FLAGS_src_key}"
-old_build_channel="${FLAGS_src_build_channel}"
-old_build_version="${FLAGS_src_build_version}"
- # Extra args required by delta payloads:
- -new_dir="${DST_MNT}"
- -old_dir="${SRC_MNT}"
)
# The passed chunk_size is only used for delta payload. Use delta_generator's
@@ -337,21 +320,18 @@
fi
fi
-if [[ -n "${ROOTFS_PARTITION_SIZE}" ]]; then
- echo "Using rootfs partition size: ${ROOTFS_PARTITION_SIZE}";
- GENERATOR_ARGS+=( -rootfs_partition_size="${ROOTFS_PARTITION_SIZE}" )
+# Add partition size. Only *required* for minor_version=1.
+DST_ROOT_PARTITION_SECTORS=$(partsize "${FLAGS_image}" "${ROOTFS_PART_NUM}")
+if [[ -n "${DST_ROOT_PARTITION_SECTORS}" ]]; then
+ DST_ROOT_PARTITION_SIZE=$(( DST_ROOT_PARTITION_SECTORS * 512 ))
+ echo "Using rootfs partition size: ${DST_ROOT_PARTITION_SIZE}";
+ GENERATOR_ARGS+=( -rootfs_partition_size="${DST_ROOT_PARTITION_SIZE}" )
else
echo "Using the default partition size."
fi
echo "Running delta_generator with args: ${GENERATOR_ARGS[@]}"
-if [[ "${DELTA}" -eq "${FLAGS_TRUE}" ]]; then
- # Preserve the path during sudo so that unpacked binaries are used when
- # outside the chroot.
- sudo PATH=${PATH} "${GENERATOR}" "${GENERATOR_ARGS[@]}"
-else
- "${GENERATOR}" "${GENERATOR_ARGS[@]}"
-fi
+"${GENERATOR}" "${GENERATOR_ARGS[@]}"
if [[ -n "${FLAGS_out_metadata_hash_file}" ]]; then
# The manifest - unfortunately - contain two fields called