xref: /aosp_15_r20/system/update_engine/sample_images/generate_images.sh (revision 5a9231315b4521097b8dc3750bc806fcafe0c72f)
1*5a923131SAndroid Build Coastguard Worker#!/bin/bash
2*5a923131SAndroid Build Coastguard Worker
3*5a923131SAndroid Build Coastguard Worker#
4*5a923131SAndroid Build Coastguard Worker# Copyright (C) 2015 The Android Open Source Project
5*5a923131SAndroid Build Coastguard Worker#
6*5a923131SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
7*5a923131SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
8*5a923131SAndroid Build Coastguard Worker# You may obtain a copy of the License at
9*5a923131SAndroid Build Coastguard Worker#
10*5a923131SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
11*5a923131SAndroid Build Coastguard Worker#
12*5a923131SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
13*5a923131SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
14*5a923131SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*5a923131SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
16*5a923131SAndroid Build Coastguard Worker# limitations under the License.
17*5a923131SAndroid Build Coastguard Worker#
18*5a923131SAndroid Build Coastguard Worker
19*5a923131SAndroid Build Coastguard Worker# This script generates some sample images used in unittests and packages them
20*5a923131SAndroid Build Coastguard Worker# in the sample_images.tar.bz2 file. The list of generated images and their
21*5a923131SAndroid Build Coastguard Worker# options are described in the main() function. You need to manually run this
22*5a923131SAndroid Build Coastguard Worker# script to update the generated images whenever you modify this script.
23*5a923131SAndroid Build Coastguard Worker
24*5a923131SAndroid Build Coastguard Workerset -e
25*5a923131SAndroid Build Coastguard Worker
26*5a923131SAndroid Build Coastguard Worker# cleanup <path>
27*5a923131SAndroid Build Coastguard Worker# Unmount and remove the mountpoint <path>
28*5a923131SAndroid Build Coastguard Workercleanup() {
29*5a923131SAndroid Build Coastguard Worker  local path="$1"
30*5a923131SAndroid Build Coastguard Worker  if ! sudo umount "${path}" 2>/dev/null; then
31*5a923131SAndroid Build Coastguard Worker    if mountpoint -q "${path}"; then
32*5a923131SAndroid Build Coastguard Worker      sync && sudo umount "${path}"
33*5a923131SAndroid Build Coastguard Worker    fi
34*5a923131SAndroid Build Coastguard Worker  fi
35*5a923131SAndroid Build Coastguard Worker  if [ -n "${path}" ]; then
36*5a923131SAndroid Build Coastguard Worker    sudo rm -rf "${path}"
37*5a923131SAndroid Build Coastguard Worker  fi
38*5a923131SAndroid Build Coastguard Worker}
39*5a923131SAndroid Build Coastguard Worker
40*5a923131SAndroid Build Coastguard Worker# add_files_default <mntdir> <block_size>
41*5a923131SAndroid Build Coastguard Worker# Add several test files to the image mounted in <mntdir>.
42*5a923131SAndroid Build Coastguard Workeradd_files_default() {
43*5a923131SAndroid Build Coastguard Worker  local mntdir="$1"
44*5a923131SAndroid Build Coastguard Worker  local block_size="$2"
45*5a923131SAndroid Build Coastguard Worker
46*5a923131SAndroid Build Coastguard Worker  ### Generate the files used in unittest with descriptive names.
47*5a923131SAndroid Build Coastguard Worker  sudo touch "${mntdir}"/empty-file
48*5a923131SAndroid Build Coastguard Worker
49*5a923131SAndroid Build Coastguard Worker  # regular: Regular files.
50*5a923131SAndroid Build Coastguard Worker  echo "small file" | sudo dd of="${mntdir}"/regular-small status=none
51*5a923131SAndroid Build Coastguard Worker  dd if=/dev/zero bs=1024 count=16 status=none | tr '\0' '\141' |
52*5a923131SAndroid Build Coastguard Worker    sudo dd of="${mntdir}"/regular-16k status=none
53*5a923131SAndroid Build Coastguard Worker  sudo dd if=/dev/zero of="${mntdir}"/regular-32k-zeros bs=1024 count=16 \
54*5a923131SAndroid Build Coastguard Worker    status=none
55*5a923131SAndroid Build Coastguard Worker
56*5a923131SAndroid Build Coastguard Worker  echo "with net_cap" | sudo dd of="${mntdir}"/regular-with_net_cap status=none
57*5a923131SAndroid Build Coastguard Worker  sudo setcap cap_net_raw=ep "${mntdir}"/regular-with_net_cap
58*5a923131SAndroid Build Coastguard Worker
59*5a923131SAndroid Build Coastguard Worker  # sparse_empty: Files with no data blocks at all (only sparse holes).
60*5a923131SAndroid Build Coastguard Worker  sudo truncate --size=10240 "${mntdir}"/sparse_empty-10k
61*5a923131SAndroid Build Coastguard Worker  sudo truncate --size=$(( block_size * 2 )) "${mntdir}"/sparse_empty-2blocks
62*5a923131SAndroid Build Coastguard Worker
63*5a923131SAndroid Build Coastguard Worker  # sparse: Files with some data blocks but also sparse holes.
64*5a923131SAndroid Build Coastguard Worker  echo -n "foo" |
65*5a923131SAndroid Build Coastguard Worker    sudo dd of="${mntdir}"/sparse-16k-last_block bs=1 \
66*5a923131SAndroid Build Coastguard Worker      seek=$(( 16 * 1024 - 3)) status=none
67*5a923131SAndroid Build Coastguard Worker
68*5a923131SAndroid Build Coastguard Worker  # ext2 inodes have 12 direct blocks, one indirect, one double indirect and
69*5a923131SAndroid Build Coastguard Worker  # one triple indirect. 10000 should be enough to have an indirect and double
70*5a923131SAndroid Build Coastguard Worker  # indirect block.
71*5a923131SAndroid Build Coastguard Worker  echo -n "foo" |
72*5a923131SAndroid Build Coastguard Worker    sudo dd of="${mntdir}"/sparse-10000blocks bs=1 \
73*5a923131SAndroid Build Coastguard Worker      seek=$(( block_size * 10000 )) status=none
74*5a923131SAndroid Build Coastguard Worker
75*5a923131SAndroid Build Coastguard Worker  sudo truncate --size=16384 "${mntdir}"/sparse-16k-first_block
76*5a923131SAndroid Build Coastguard Worker  echo "first block" | sudo dd of="${mntdir}"/sparse-16k-first_block status=none
77*5a923131SAndroid Build Coastguard Worker
78*5a923131SAndroid Build Coastguard Worker  sudo truncate --size=16384 "${mntdir}"/sparse-16k-holes
79*5a923131SAndroid Build Coastguard Worker  echo "a" | sudo dd of="${mntdir}"/sparse-16k-holes bs=1 seek=100 status=none
80*5a923131SAndroid Build Coastguard Worker  echo "b" | sudo dd of="${mntdir}"/sparse-16k-holes bs=1 seek=10000 status=none
81*5a923131SAndroid Build Coastguard Worker
82*5a923131SAndroid Build Coastguard Worker  # link: symlinks and hardlinks.
83*5a923131SAndroid Build Coastguard Worker  sudo ln -s "broken-link" "${mntdir}"/link-short_symlink
84*5a923131SAndroid Build Coastguard Worker  sudo ln -s $(dd if=/dev/zero bs=256 count=1 status=none | tr '\0' '\141') \
85*5a923131SAndroid Build Coastguard Worker    "${mntdir}"/link-long_symlink
86*5a923131SAndroid Build Coastguard Worker  sudo ln "${mntdir}"/regular-16k "${mntdir}"/link-hard-regular-16k
87*5a923131SAndroid Build Coastguard Worker
88*5a923131SAndroid Build Coastguard Worker  # Directories.
89*5a923131SAndroid Build Coastguard Worker  sudo mkdir -p "${mntdir}"/dir1/dir2/dir1
90*5a923131SAndroid Build Coastguard Worker  echo "foo" | sudo tee "${mntdir}"/dir1/dir2/file >/dev/null
91*5a923131SAndroid Build Coastguard Worker  echo "bar" | sudo tee "${mntdir}"/dir1/file >/dev/null
92*5a923131SAndroid Build Coastguard Worker
93*5a923131SAndroid Build Coastguard Worker  # FIFO
94*5a923131SAndroid Build Coastguard Worker  sudo mkfifo "${mntdir}"/fifo
95*5a923131SAndroid Build Coastguard Worker
96*5a923131SAndroid Build Coastguard Worker  # character special file
97*5a923131SAndroid Build Coastguard Worker  sudo mknod "${mntdir}"/cdev c 2 3
98*5a923131SAndroid Build Coastguard Worker
99*5a923131SAndroid Build Coastguard Worker  # removed: removed files that should not be listed.
100*5a923131SAndroid Build Coastguard Worker  echo "We will remove this file so it's contents will be somewhere in the " \
101*5a923131SAndroid Build Coastguard Worker    "empty space data but it won't be all zeros." |
102*5a923131SAndroid Build Coastguard Worker    sudo dd of="${mntdir}"/removed conv=fsync status=none
103*5a923131SAndroid Build Coastguard Worker  sudo rm "${mntdir}"/removed
104*5a923131SAndroid Build Coastguard Worker}
105*5a923131SAndroid Build Coastguard Worker
106*5a923131SAndroid Build Coastguard Worker# add_files_ue_settings <mntdir> <block_size>
107*5a923131SAndroid Build Coastguard Worker# Add the update_engine.conf settings file. This file contains the
108*5a923131SAndroid Build Coastguard Workeradd_files_ue_settings() {
109*5a923131SAndroid Build Coastguard Worker  local mntdir="$1"
110*5a923131SAndroid Build Coastguard Worker
111*5a923131SAndroid Build Coastguard Worker  sudo mkdir -p "${mntdir}"/etc >/dev/null
112*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/etc/update_engine.conf >/dev/null <<EOF
113*5a923131SAndroid Build Coastguard WorkerPAYLOAD_MINOR_VERSION=1234
114*5a923131SAndroid Build Coastguard WorkerEOF
115*5a923131SAndroid Build Coastguard Worker  # Example of a real lsb-release file released on link stable.
116*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/etc/lsb-release >/dev/null <<EOF
117*5a923131SAndroid Build Coastguard WorkerCHROMEOS_AUSERVER=https://tools.google.com/service/update2
118*5a923131SAndroid Build Coastguard WorkerCHROMEOS_BOARD_APPID={F26D159B-52A3-491A-AE25-B23670A66B32}
119*5a923131SAndroid Build Coastguard WorkerCHROMEOS_CANARY_APPID={90F229CE-83E2-4FAF-8479-E368A34938B1}
120*5a923131SAndroid Build Coastguard WorkerCHROMEOS_DEVSERVER=
121*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_APPID={F26D159B-52A3-491A-AE25-B23670A66B32}
122*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_BOARD=link-signed-mp-v4keys
123*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_BRANCH_NUMBER=63
124*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_BUILD_NUMBER=6946
125*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_BUILD_TYPE=Official Build
126*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_CHROME_MILESTONE=43
127*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_DESCRIPTION=6946.63.0 (Official Build) stable-channel link
128*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_NAME=Chrome OS
129*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_PATCH_NUMBER=0
130*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_TRACK=stable-channel
131*5a923131SAndroid Build Coastguard WorkerCHROMEOS_RELEASE_VERSION=6946.63.0
132*5a923131SAndroid Build Coastguard WorkerGOOGLE_RELEASE=6946.63.0
133*5a923131SAndroid Build Coastguard WorkerEOF
134*5a923131SAndroid Build Coastguard Worker}
135*5a923131SAndroid Build Coastguard Worker
136*5a923131SAndroid Build Coastguard Workeradd_files_postinstall() {
137*5a923131SAndroid Build Coastguard Worker  local mntdir="$1"
138*5a923131SAndroid Build Coastguard Worker
139*5a923131SAndroid Build Coastguard Worker  sudo mkdir -p "${mntdir}"/bin >/dev/null
140*5a923131SAndroid Build Coastguard Worker
141*5a923131SAndroid Build Coastguard Worker  # A postinstall bash program.
142*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/bin/postinst_example >/dev/null <<EOF
143*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
144*5a923131SAndroid Build Coastguard Workerecho "I'm a postinstall program and I know how to write to stdout"
145*5a923131SAndroid Build Coastguard Workerecho "My call was $@"
146*5a923131SAndroid Build Coastguard Workerexit 0
147*5a923131SAndroid Build Coastguard WorkerEOF
148*5a923131SAndroid Build Coastguard Worker
149*5a923131SAndroid Build Coastguard Worker  # A symlink to another program. This should also work.
150*5a923131SAndroid Build Coastguard Worker  sudo ln -s "postinst_example" "${mntdir}"/bin/postinst_link
151*5a923131SAndroid Build Coastguard Worker
152*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/bin/postinst_fail3 >/dev/null <<EOF
153*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
154*5a923131SAndroid Build Coastguard Workerexit 3
155*5a923131SAndroid Build Coastguard WorkerEOF
156*5a923131SAndroid Build Coastguard Worker
157*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/bin/postinst_fail1 >/dev/null <<EOF
158*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
159*5a923131SAndroid Build Coastguard Workerexit 1
160*5a923131SAndroid Build Coastguard WorkerEOF
161*5a923131SAndroid Build Coastguard Worker
162*5a923131SAndroid Build Coastguard Worker  # A program that succeeds if it is suspended during the first 5 minutes.
163*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/bin/postinst_suspend >/dev/null <<EOF
164*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
165*5a923131SAndroid Build Coastguard Workertrap "{ echo Got a SIGCONT; exit 0; }" CONT
166*5a923131SAndroid Build Coastguard Worker# Signal that we are ready to receive the signal by redirecting our stdin to
167*5a923131SAndroid Build Coastguard Worker# /dev/zero, the test can detect that.
168*5a923131SAndroid Build Coastguard Workerexec </dev/zero
169*5a923131SAndroid Build Coastguard Worker# Allow the signal handler to run every 100 ms.
170*5a923131SAndroid Build Coastguard Workeri=3000
171*5a923131SAndroid Build Coastguard Workerwhile [ \$i -ge 0 ]; do
172*5a923131SAndroid Build Coastguard Worker  sleep 0.1
173*5a923131SAndroid Build Coastguard Worker  i=\$((i-1))
174*5a923131SAndroid Build Coastguard Workerdone
175*5a923131SAndroid Build Coastguard Workerexit 1
176*5a923131SAndroid Build Coastguard WorkerEOF
177*5a923131SAndroid Build Coastguard Worker
178*5a923131SAndroid Build Coastguard Worker  # A program that reports back progress.
179*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/bin/postinst_progress >/dev/null <<EOF
180*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
181*5a923131SAndroid Build Coastguard Worker# These values have exact representation in IEEE 754 so we avoid rounding
182*5a923131SAndroid Build Coastguard Worker# errors.
183*5a923131SAndroid Build Coastguard Workerecho global_progress 0.25 >&3
184*5a923131SAndroid Build Coastguard Workerecho global_progress 0.5 >&3
185*5a923131SAndroid Build Coastguard Workerecho global_progress 1.0 >&3
186*5a923131SAndroid Build Coastguard Workerexit 0
187*5a923131SAndroid Build Coastguard WorkerEOF
188*5a923131SAndroid Build Coastguard Worker
189*5a923131SAndroid Build Coastguard Worker  # An unlabeled postinstall bash program.
190*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/bin/self_check_default_context >/dev/null <<EOF
191*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
192*5a923131SAndroid Build Coastguard Workerecho "This is my context:"
193*5a923131SAndroid Build Coastguard Workerls -lZ "\$0"
194*5a923131SAndroid Build Coastguard Workerls -lZ "\$0" | grep -F ' u:object_r:postinstall_file:s0 ' || exit 5
195*5a923131SAndroid Build Coastguard Workerexit 0
196*5a923131SAndroid Build Coastguard WorkerEOF
197*5a923131SAndroid Build Coastguard Worker
198*5a923131SAndroid Build Coastguard Worker  # A postinstall bash program.
199*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/bin/self_check_context >/dev/null <<EOF
200*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
201*5a923131SAndroid Build Coastguard Workerecho "This is my context:"
202*5a923131SAndroid Build Coastguard Workerls -lZ "\$0"
203*5a923131SAndroid Build Coastguard Workerls -lZ "\$0" | grep -F ' u:object_r:postinstall_exec:s0 ' || exit 5
204*5a923131SAndroid Build Coastguard Workerexit 0
205*5a923131SAndroid Build Coastguard WorkerEOF
206*5a923131SAndroid Build Coastguard Worker
207*5a923131SAndroid Build Coastguard Worker  # Give the test function the context we expect the postinstall-executable to have.
208*5a923131SAndroid Build Coastguard Worker  sudo setfattr -n security.selinux -v u:object_r:postinstall_exec:s0 "${mntdir}"/bin/self_check_context
209*5a923131SAndroid Build Coastguard Worker
210*5a923131SAndroid Build Coastguard Worker  sudo tee "${mntdir}"/postinst >/dev/null <<EOF
211*5a923131SAndroid Build Coastguard Worker#!/etc/../bin/sh
212*5a923131SAndroid Build Coastguard Workerecho "postinst"
213*5a923131SAndroid Build Coastguard Workerexit 0
214*5a923131SAndroid Build Coastguard WorkerEOF
215*5a923131SAndroid Build Coastguard Worker
216*5a923131SAndroid Build Coastguard Worker  sudo chmod +x "${mntdir}"/postinst "${mntdir}"/bin/*
217*5a923131SAndroid Build Coastguard Worker}
218*5a923131SAndroid Build Coastguard Worker
219*5a923131SAndroid Build Coastguard Worker# generate_fs <filename> <kind> <size> [block_size] [block_groups]
220*5a923131SAndroid Build Coastguard Workergenerate_fs() {
221*5a923131SAndroid Build Coastguard Worker  local filename="$1"
222*5a923131SAndroid Build Coastguard Worker  local type="$2"
223*5a923131SAndroid Build Coastguard Worker  local kind="$3"
224*5a923131SAndroid Build Coastguard Worker  local size="$4"
225*5a923131SAndroid Build Coastguard Worker  local block_size="${5:-4096}"
226*5a923131SAndroid Build Coastguard Worker  local block_groups="${6:-}"
227*5a923131SAndroid Build Coastguard Worker
228*5a923131SAndroid Build Coastguard Worker  local mkfs_opts=( -q -F -b "${block_size}" -L "ROOT-TEST" -t ext2 )
229*5a923131SAndroid Build Coastguard Worker  if [[ -n "${block_groups}" ]]; then
230*5a923131SAndroid Build Coastguard Worker    mkfs_opts+=( -G "${block_groups}" )
231*5a923131SAndroid Build Coastguard Worker  fi
232*5a923131SAndroid Build Coastguard Worker
233*5a923131SAndroid Build Coastguard Worker  local mntdir=$(mktemp --tmpdir -d generate_ext2.XXXXXX)
234*5a923131SAndroid Build Coastguard Worker  trap 'cleanup "${mntdir}"; rm -f "${filename}"' INT TERM EXIT
235*5a923131SAndroid Build Coastguard Worker  # Cleanup old image.
236*5a923131SAndroid Build Coastguard Worker  if [[ -e "${filename}" ]]; then
237*5a923131SAndroid Build Coastguard Worker    rm -f "${filename}"
238*5a923131SAndroid Build Coastguard Worker  fi
239*5a923131SAndroid Build Coastguard Worker
240*5a923131SAndroid Build Coastguard Worker  if [[ "${type}" == "ext2" ]]; then
241*5a923131SAndroid Build Coastguard Worker    truncate --size="${size}" "${filename}"
242*5a923131SAndroid Build Coastguard Worker
243*5a923131SAndroid Build Coastguard Worker    mkfs.ext2 "${mkfs_opts[@]}" "${filename}"
244*5a923131SAndroid Build Coastguard Worker    sudo mount "${filename}" "${mntdir}" -o loop
245*5a923131SAndroid Build Coastguard Worker  fi
246*5a923131SAndroid Build Coastguard Worker  case "${kind}" in
247*5a923131SAndroid Build Coastguard Worker    unittest)
248*5a923131SAndroid Build Coastguard Worker      add_files_ue_settings "${mntdir}" "${block_size}"
249*5a923131SAndroid Build Coastguard Worker      add_files_postinstall "${mntdir}" "${block_size}"
250*5a923131SAndroid Build Coastguard Worker      ;;
251*5a923131SAndroid Build Coastguard Worker    default)
252*5a923131SAndroid Build Coastguard Worker      add_files_default "${mntdir}" "${block_size}"
253*5a923131SAndroid Build Coastguard Worker      ;;
254*5a923131SAndroid Build Coastguard Worker    empty)
255*5a923131SAndroid Build Coastguard Worker      ;;
256*5a923131SAndroid Build Coastguard Worker  esac
257*5a923131SAndroid Build Coastguard Worker
258*5a923131SAndroid Build Coastguard Worker  if [[ "${type}" == "sqfs" ]]; then
259*5a923131SAndroid Build Coastguard Worker    mksquashfs "${mntdir}" "${filename}"
260*5a923131SAndroid Build Coastguard Worker  fi
261*5a923131SAndroid Build Coastguard Worker
262*5a923131SAndroid Build Coastguard Worker  cleanup "${mntdir}"
263*5a923131SAndroid Build Coastguard Worker  trap - INT TERM EXIT
264*5a923131SAndroid Build Coastguard Worker}
265*5a923131SAndroid Build Coastguard Worker
266*5a923131SAndroid Build Coastguard WorkerOUTPUT_DIR=$(dirname "$0")
267*5a923131SAndroid Build Coastguard WorkerIMAGES=()
268*5a923131SAndroid Build Coastguard Worker
269*5a923131SAndroid Build Coastguard Worker# generate_image <image_name> [<image args> ...]
270*5a923131SAndroid Build Coastguard Workergenerate_image() {
271*5a923131SAndroid Build Coastguard Worker  echo "Generating image $1.img"
272*5a923131SAndroid Build Coastguard Worker  IMAGES+=( "$1.img" )
273*5a923131SAndroid Build Coastguard Worker  generate_fs "${OUTPUT_DIR}/$1.img" "${@:2}"
274*5a923131SAndroid Build Coastguard Worker}
275*5a923131SAndroid Build Coastguard Worker
276*5a923131SAndroid Build Coastguard Workermain() {
277*5a923131SAndroid Build Coastguard Worker  # Add more sample images here.
278*5a923131SAndroid Build Coastguard Worker  generate_image disk_ext2_1k ext2 default $((1024 * 1024)) 1024
279*5a923131SAndroid Build Coastguard Worker  generate_image disk_ext2_4k ext2 default $((1024 * 4096)) 4096
280*5a923131SAndroid Build Coastguard Worker  generate_image disk_ext2_4k_empty ext2 empty $((1024 * 4096)) 4096
281*5a923131SAndroid Build Coastguard Worker  generate_image disk_ext2_unittest ext2 unittest $((1024 * 4096)) 4096
282*5a923131SAndroid Build Coastguard Worker
283*5a923131SAndroid Build Coastguard Worker  # Add squashfs sample images.
284*5a923131SAndroid Build Coastguard Worker  generate_image disk_sqfs_empty sqfs empty $((1024 * 4096)) 4096
285*5a923131SAndroid Build Coastguard Worker  generate_image disk_sqfs_default sqfs default $((1024 * 4096)) 4096
286*5a923131SAndroid Build Coastguard Worker  generate_image disk_sqfs_unittest sqfs unittest $((1024 * 4096)) 4096
287*5a923131SAndroid Build Coastguard Worker
288*5a923131SAndroid Build Coastguard Worker  # Generate the tarball and delete temporary images.
289*5a923131SAndroid Build Coastguard Worker  echo "Packing tar file sample_images.tar.bz2"
290*5a923131SAndroid Build Coastguard Worker  tar -jcf "${OUTPUT_DIR}/sample_images.tar.bz2" -C "${OUTPUT_DIR}" \
291*5a923131SAndroid Build Coastguard Worker    --sparse "${IMAGES[@]}"
292*5a923131SAndroid Build Coastguard Worker  cd "${OUTPUT_DIR}"
293*5a923131SAndroid Build Coastguard Worker  rm "${IMAGES[@]}"
294*5a923131SAndroid Build Coastguard Worker}
295*5a923131SAndroid Build Coastguard Worker
296*5a923131SAndroid Build Coastguard Workermain
297