mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-08 21:46:58 +02:00
Allow disk image target for copy machine.
BUG=10531 TEST=build and imaged a mario Change-Id: I60790f178159d707f610ba1668c29179a6c32e61 Review URL: http://codereview.chromium.org/6050006
This commit is contained in:
parent
b1d17e24eb
commit
607c0780c0
@ -168,3 +168,23 @@ image_umount_partition() {
|
||||
|
||||
umount -d "$mount_point"
|
||||
}
|
||||
|
||||
# Copy a partition from one image to another.
|
||||
image_partition_copy() {
|
||||
local src="$1"
|
||||
local srcpart="$2"
|
||||
local dst="$3"
|
||||
local dstpart="$4"
|
||||
|
||||
local srcoffset=$(image_part_offset "${src}" "${srcpart}")
|
||||
local dstoffset=$(image_part_offset "${dst}" "${dstpart}")
|
||||
local length=$(image_part_size "${src}" "${srcpart}")
|
||||
local dstlength=$(image_part_size "${dst}" "${dstpart}")
|
||||
|
||||
if [ "${length}" -gt "${dstlength}" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
image_dump_partition "${src}" "${srcpart}" |
|
||||
dd of="${dst}" bs=512 seek="${dstoffset}" conv=notrunc
|
||||
}
|
||||
|
@ -34,6 +34,11 @@ DEFINE_string release "" \
|
||||
"Directory and file containing release image: /path/chromiumos_image.bin"
|
||||
DEFINE_string subfolder "" \
|
||||
"If set, the name of the subfolder to put the payload items inside"
|
||||
DEFINE_string diskimg "" \
|
||||
"If set, the name of the diskimage file to output"
|
||||
DEFINE_boolean preserve ${FLAGS_FALSE} \
|
||||
"If set, reuse the diskimage file, if available"
|
||||
DEFINE_integer sectors 31277232 "Size of image in sectors"
|
||||
|
||||
# Parse command line
|
||||
FLAGS "$@" || exit 1
|
||||
@ -80,6 +85,35 @@ FACTORY_DIR="$(dirname "${FLAGS_factory}")"
|
||||
RELEASE_IMAGE="$(basename "${FLAGS_release}")"
|
||||
FACTORY_IMAGE="$(basename "${FLAGS_factory}")"
|
||||
|
||||
prepare_img() {
|
||||
local outdev="$FLAGS_diskimg"
|
||||
local sectors="$FLAGS_sectors"
|
||||
local force_full="true"
|
||||
|
||||
# We'll need some code to put in the PMBR, for booting on legacy BIOS.
|
||||
echo "Fetch PMBR"
|
||||
local pmbrcode="$(mktemp -d)/gptmbr.bin"
|
||||
sudo dd bs=512 count=1 if="${FLAGS_release}" of="${pmbrcode}" status=noxfer
|
||||
|
||||
echo "Prepare base disk image"
|
||||
# Create an output file if requested, or if none exists.
|
||||
if [ -b "${outdev}" ] ; then
|
||||
echo "Using block device ${outdev}"
|
||||
elif [ ! -e "${outdev}" -o \
|
||||
"$(stat -c %s ${outdev})" != "$(( ${sectors} * 512 ))" -o \
|
||||
"$FLAGS_preserve" = "$FLAGS_FALSE" ]; then
|
||||
echo "Generating empty image file"
|
||||
image_dump_partial_file /dev/zero 0 "${sectors}" |
|
||||
dd of="${outdev}" bs=8M
|
||||
else
|
||||
echo "Reusing $outdev"
|
||||
fi
|
||||
|
||||
# Create GPT partition table.
|
||||
install_gpt "${outdev}" 0 0 "${pmbrcode}" 0 "${force_full}"
|
||||
# Activate the correct partition.
|
||||
cgpt add -i 2 -S 1 -P 1 "${outdev}"
|
||||
}
|
||||
|
||||
prepare_omaha() {
|
||||
sudo rm -rf "${OMAHA_DATA_DIR}/rootfs-test.gz"
|
||||
@ -145,9 +179,6 @@ compress_and_hash_partition() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Clean up stale config and data files.
|
||||
prepare_omaha
|
||||
|
||||
# Decide if we should unpack partition
|
||||
if image_has_part_tools; then
|
||||
IMAGE_IS_UNPACKED=
|
||||
@ -159,6 +190,46 @@ else
|
||||
IMAGE_IS_UNPACKED=1
|
||||
fi
|
||||
|
||||
generate_img() {
|
||||
local outdev="$FLAGS_diskimg"
|
||||
local sectors="$FLAGS_sectors"
|
||||
|
||||
prepare_img
|
||||
|
||||
# Get the release image.
|
||||
pushd "${RELEASE_DIR}" >/dev/null
|
||||
|
||||
echo "Release Kernel"
|
||||
image_partition_copy "${RELEASE_IMAGE}" 2 "${outdev}" 4
|
||||
|
||||
echo "Release Rootfs"
|
||||
image_partition_copy "${RELEASE_IMAGE}" 3 "${outdev}" 5
|
||||
|
||||
echo "OEM parition"
|
||||
image_partition_copy "${RELEASE_IMAGE}" 8 "${outdev}" 8
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
# Go to retrieve the factory test image.
|
||||
pushd "${FACTORY_DIR}" >/dev/null
|
||||
|
||||
echo "Factory Kernel"
|
||||
image_partition_copy "${FACTORY_IMAGE}" 2 "${outdev}" 2
|
||||
echo "Factory Rootfs"
|
||||
image_partition_copy "${FACTORY_IMAGE}" 3 "${outdev}" 3
|
||||
echo "Factory Stateful"
|
||||
image_partition_copy "${FACTORY_IMAGE}" 1 "${outdev}" 1
|
||||
echo "EFI Partition"
|
||||
image_partition_copy "${FACTORY_IMAGE}" 12 "${outdev}" 12
|
||||
|
||||
echo "Generated Image at $outdev."
|
||||
echo "Done"
|
||||
}
|
||||
|
||||
generate_omaha() {
|
||||
# Clean up stale config and data files.
|
||||
prepare_omaha
|
||||
|
||||
# Get the release image.
|
||||
pushd "${RELEASE_DIR}" >/dev/null
|
||||
echo "Generating omaha release image from ${FLAGS_release}"
|
||||
@ -183,10 +254,6 @@ oem_hash="$(compress_and_hash_partition "${RELEASE_IMAGE}" 8 "oem.gz")"
|
||||
mv oem.gz "${OMAHA_DATA_DIR}"
|
||||
echo "oem: ${oem_hash}"
|
||||
|
||||
efi_hash="$(compress_and_hash_partition "${RELEASE_IMAGE}" 12 "efi.gz")"
|
||||
mv efi.gz "${OMAHA_DATA_DIR}"
|
||||
echo "efi: ${efi_hash}"
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
# Go to retrieve the factory test image.
|
||||
@ -208,6 +275,10 @@ state_hash="$(compress_and_hash_partition "${FACTORY_IMAGE}" 1 "state.gz")"
|
||||
mv state.gz "${OMAHA_DATA_DIR}"
|
||||
echo "state: ${state_hash}"
|
||||
|
||||
efi_hash="$(compress_and_hash_partition "${FACTORY_IMAGE}" 12 "efi.gz")"
|
||||
mv efi.gz "${OMAHA_DATA_DIR}"
|
||||
echo "efi: ${efi_hash}"
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
if [ -n "${FLAGS_firmware_updater}" ]; then
|
||||
@ -226,7 +297,8 @@ fi
|
||||
# append another config.
|
||||
if [ -n "${FLAGS_subfolder}" ] &&
|
||||
[ -f "${OMAHA_CONF}" ]; then
|
||||
# Remove the ']' from the last line of the file so we can add another config.
|
||||
# Remove the ']' from the last line of the file
|
||||
# so we can add another config.
|
||||
while [ -s "${OMAHA_CONF}" ]; do
|
||||
# If the last line is null
|
||||
if [ -z "$(tail -1 "${OMAHA_CONF}")" ]; then
|
||||
@ -285,3 +357,11 @@ To validate the configutarion, run:
|
||||
--validate_factory_config
|
||||
To run the server:
|
||||
python2.6 devserver.py --factory_config miniomaha.conf"
|
||||
}
|
||||
|
||||
# Main
|
||||
if [ -n "$FLAGS_diskimg" ]; then
|
||||
generate_img
|
||||
else
|
||||
generate_omaha
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user