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