mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-23 06:31:18 +02:00
make_universal_factory_shim: support "-m" to assign master (base) image
Some images (especially RMA) need to use stateful or other lagacy stuff from other image files. This CL adds "-m" to make_universal_factory_shim so that we can change the master image (the one for all legacy / stateful partition). BUG=chrome-os-partner:4108 TEST=./make_universal_factory_shim.sh -m factory_test.bin \ factory_install.bin factory_test.bin release_image.bin Change-Id: I6c8e096fd7ae921a4fb157c035f575a7c3b33834 Reviewed-on: http://gerrit.chromium.org/gerrit/4020 Reviewed-by: Nick Sanders <nsanders@chromium.org> Tested-by: Hung-Te Lin <hungte@chromium.org>
This commit is contained in:
parent
2f2b9031bc
commit
8d5f0e60de
@ -52,6 +52,7 @@ image_copy_partition() {
|
||||
local from_part="$2"
|
||||
local to_image="$3"
|
||||
local to_part="$4"
|
||||
local bs="$CGPT_BS"
|
||||
|
||||
local from_offset="$(image_get_partition_offset "$from_image" "$from_part")"
|
||||
local from_size="$(image_get_partition_size "$from_image" "$from_part")"
|
||||
@ -62,9 +63,29 @@ image_copy_partition() {
|
||||
die "Failed to copy partition: $from_image#$from_part -> $to_image#$to_part"
|
||||
fi
|
||||
|
||||
# TODO(hungte) Speed up by increasing bs
|
||||
dd if="$from_image" of="$to_image" bs="$CGPT_BS" conv=notrunc \
|
||||
# Seed up by increasing block size
|
||||
# TODO(hungte) improve obs calculation or change offsets
|
||||
while [ "$((from_size > 0 &&
|
||||
from_size % 2 == 0 &&
|
||||
from_offset % 2 == 0 &&
|
||||
to_offset % 2 == 0))" = "1" ]; do
|
||||
bs=$((bs * 2))
|
||||
from_size=$((from_size / 2))
|
||||
from_offset=$((from_offset / 2))
|
||||
to_offset=$((to_offset / 2))
|
||||
done
|
||||
|
||||
# Display progress if the partition is larger than 32M.
|
||||
if [ "$((from_size * bs > 32 * 1048576))" = "1" ] && type pv >/dev/null 2>&1
|
||||
then
|
||||
dd if="$from_image" bs="$bs" count=$from_size skip="$from_offset" |
|
||||
pv -B "$bs" -s "$((bs * from_size))" |
|
||||
dd of="$to_image" bs="$bs" count="$from_size" seek="$to_offset" \
|
||||
conv=notrunc iflag=fullblock
|
||||
else
|
||||
dd if="$from_image" of="$to_image" bs="$bs" conv=notrunc \
|
||||
count=$from_size skip="$from_offset" seek="$to_offset"
|
||||
fi
|
||||
}
|
||||
|
||||
images_get_total_size() {
|
||||
@ -72,13 +93,16 @@ images_get_total_size() {
|
||||
local total="0"
|
||||
local index
|
||||
|
||||
# reference, slot_a, slot_b, slot_c.
|
||||
[ "$#" = 4 ] || die "incorrect call to images_get_total_size"
|
||||
|
||||
# copy most partitions from first image
|
||||
total="$((total + CGPT_START_SIZE + CGPT_END_SIZE))"
|
||||
for index in $STATE_PARTITION $LEGACY_PARTITIONS; do
|
||||
total="$((total + $(image_get_partition_size "$1" $index) ))"
|
||||
done
|
||||
|
||||
for image in "$1" "$2" "$3"; do
|
||||
for image in "$2" "$3" "$4"; do
|
||||
if [ -z "$image" ]; then
|
||||
total="$((total + $(image_get_partition_size "$1" $RESERVED_PARTITION)))"
|
||||
total="$((total + $(image_get_partition_size "$1" $RESERVED_PARTITION)))"
|
||||
@ -115,35 +139,53 @@ image_append_partition() {
|
||||
|
||||
main() {
|
||||
local force=""
|
||||
if [ "$1" = "-f" ]; then
|
||||
shift
|
||||
local image=""
|
||||
local output=""
|
||||
local main_source=""
|
||||
local index=""
|
||||
local slots="0"
|
||||
|
||||
while [ "$#" -gt 1 ]; do
|
||||
case "$1" in
|
||||
"-f" )
|
||||
force="True"
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
"-m" )
|
||||
main_source="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
* )
|
||||
break
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$#" -lt 2 -o "$#" -gt 4 ]; then
|
||||
echo "Usage: $SCRIPT [-f] output shim_image_1 [shim_2 [shim_3]]"
|
||||
echo "Usage: $SCRIPT [-m master] [-f] output shim_image_1 [shim_2 [shim_3]]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local image=""
|
||||
local output="$1"
|
||||
local main_source="$2"
|
||||
local index=""
|
||||
local slots="0"
|
||||
if [ -z "$main_source" ]; then
|
||||
main_source="$2"
|
||||
fi
|
||||
output="$1"
|
||||
shift
|
||||
|
||||
if [ -f "$output" -a -z "$force" ]; then
|
||||
die "Output file $output already exists. To overwrite the file, add -f."
|
||||
fi
|
||||
for image in "$@"; do
|
||||
for image in "$main_source" "$@"; do
|
||||
if [ ! -f "$image" ]; then
|
||||
die "Cannot find input file $image."
|
||||
fi
|
||||
done
|
||||
|
||||
# build output
|
||||
local total_size="$(images_get_total_size "$@")"
|
||||
local total_size="$(images_get_total_size "$main_source" "$@")"
|
||||
# echo "Total size from [$@]: $total_size"
|
||||
truncate "$output" -s "$((total_size * CGPT_BS))"
|
||||
truncate -s "0" "$output" # starting with a new file is much faster.
|
||||
truncate -s "$((total_size * CGPT_BS))" "$output"
|
||||
cgpt create "$output"
|
||||
cgpt boot -p "$output"
|
||||
|
||||
@ -153,7 +195,7 @@ main() {
|
||||
local rootfs_part=3
|
||||
for image in "$1" "$2" "$3"; do
|
||||
if [ -z "$image" ]; then
|
||||
image="$1"
|
||||
image="$main_source"
|
||||
kpart="$RESERVED_PARTITION"
|
||||
rootfs_part="$RESERVED_PARTITION"
|
||||
fi
|
||||
|
Loading…
x
Reference in New Issue
Block a user