mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-09 05:56: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"
|
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"
|
"Directory and file containing release image: /path/chromiumos_image.bin"
|
||||||
DEFINE_string subfolder "" \
|
DEFINE_string subfolder "" \
|
||||||
"If set, the name of the subfolder to put the payload items inside"
|
"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
|
# Parse command line
|
||||||
FLAGS "$@" || exit 1
|
FLAGS "$@" || exit 1
|
||||||
@ -80,6 +85,35 @@ FACTORY_DIR="$(dirname "${FLAGS_factory}")"
|
|||||||
RELEASE_IMAGE="$(basename "${FLAGS_release}")"
|
RELEASE_IMAGE="$(basename "${FLAGS_release}")"
|
||||||
FACTORY_IMAGE="$(basename "${FLAGS_factory}")"
|
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() {
|
prepare_omaha() {
|
||||||
sudo rm -rf "${OMAHA_DATA_DIR}/rootfs-test.gz"
|
sudo rm -rf "${OMAHA_DATA_DIR}/rootfs-test.gz"
|
||||||
@ -145,9 +179,6 @@ compress_and_hash_partition() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clean up stale config and data files.
|
|
||||||
prepare_omaha
|
|
||||||
|
|
||||||
# Decide if we should unpack partition
|
# Decide if we should unpack partition
|
||||||
if image_has_part_tools; then
|
if image_has_part_tools; then
|
||||||
IMAGE_IS_UNPACKED=
|
IMAGE_IS_UNPACKED=
|
||||||
@ -159,6 +190,46 @@ else
|
|||||||
IMAGE_IS_UNPACKED=1
|
IMAGE_IS_UNPACKED=1
|
||||||
fi
|
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.
|
# Get the release image.
|
||||||
pushd "${RELEASE_DIR}" >/dev/null
|
pushd "${RELEASE_DIR}" >/dev/null
|
||||||
echo "Generating omaha release image from ${FLAGS_release}"
|
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}"
|
mv oem.gz "${OMAHA_DATA_DIR}"
|
||||||
echo "oem: ${oem_hash}"
|
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
|
popd >/dev/null
|
||||||
|
|
||||||
# Go to retrieve the factory test image.
|
# 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}"
|
mv state.gz "${OMAHA_DATA_DIR}"
|
||||||
echo "state: ${state_hash}"
|
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
|
popd >/dev/null
|
||||||
|
|
||||||
if [ -n "${FLAGS_firmware_updater}" ]; then
|
if [ -n "${FLAGS_firmware_updater}" ]; then
|
||||||
@ -226,7 +297,8 @@ fi
|
|||||||
# append another config.
|
# append another config.
|
||||||
if [ -n "${FLAGS_subfolder}" ] &&
|
if [ -n "${FLAGS_subfolder}" ] &&
|
||||||
[ -f "${OMAHA_CONF}" ]; then
|
[ -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
|
while [ -s "${OMAHA_CONF}" ]; do
|
||||||
# If the last line is null
|
# If the last line is null
|
||||||
if [ -z "$(tail -1 "${OMAHA_CONF}")" ]; then
|
if [ -z "$(tail -1 "${OMAHA_CONF}")" ]; then
|
||||||
@ -285,3 +357,11 @@ To validate the configutarion, run:
|
|||||||
--validate_factory_config
|
--validate_factory_config
|
||||||
To run the server:
|
To run the server:
|
||||||
python2.6 devserver.py --factory_config miniomaha.conf"
|
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