| #!/bin/bash |
| # Copyright 2019 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Use this script to regenerate the artifacts needed by the test-dlc. |
| |
| if [ -z "${BOARD}" ]; then |
| echo "BOARD variable is unset." && exit 1 |
| else |
| echo "using BOARD='${BOARD}'" |
| fi |
| |
| set -ex |
| |
| TEMP="$(mktemp -d)" |
| BUILD_BOARD="/build/${BOARD}" |
| DLC_ROOTFS_META_DIR="rootfs_meta" |
| DLC_PAYLOADS_DIR="payloads" |
| DLC_IMAGES_DIR="images" |
| DLC_BUILD_ROOTFS_DIR="build/rootfs/dlc" |
| DLC_PACKAGE="test-package" |
| DLC_PAYLOAD="dlcservice_test-dlc.payload" |
| LSB_RELEASE="etc/lsb-release" |
| UPDATE_ENGINE_CONF="etc/update_engine.conf" |
| |
| # Creates files (truncated/hash/perm) in the files directory with given |
| # truncate size, name, and permissions. |
| generate_file() { |
| local size="$1" |
| local filepath="${DLC_FILES_DIR}/$2" |
| local permissions="$3" |
| # Read to /dev/urandom as tests are in place to check based off checksum. |
| dd if=/dev/urandom of="${filepath}" bs="${size}" count=1 || die |
| sha256sum "${filepath}" > "${filepath}.sum" || die |
| chmod "${permissions}" "${filepath}" || die |
| echo "${permissions}" > "${filepath}.perms" || die |
| } |
| |
| |
| mkdir -p "${DLC_PAYLOADS_DIR}" "${DLC_ROOTFS_META_DIR}" "${DLC_IMAGES_DIR}" |
| for N in {1..2}; do |
| DLC_ID="test${N}-dlc" |
| DLC_PATH="${DLC_ID}/${DLC_PACKAGE}" |
| DLC_FILES_DIR="${TEMP}/${DLC_BUILD_ROOTFS_DIR}/${DLC_ID}/${DLC_PACKAGE}/root" |
| |
| mkdir -p "${DLC_FILES_DIR}/dir" "${TEMP}"/etc |
| # Don't create unreadable files as tests check based on readability. |
| generate_file 10 "file1.bin" 0755 |
| generate_file 20 "dir/file2.bin" 0544 |
| generate_file 30 "dir/file3.bin" 0444 |
| |
| args=( |
| --install-root-dir "${TEMP}" |
| --pre-allocated-blocks "5" |
| --version "1.0.0" |
| --id "${DLC_ID}" |
| --package "${DLC_PACKAGE}" |
| --name "Test${N} DLC" |
| --description "Description for Test${N} DLC" |
| --board "${BOARD}" |
| --build-package |
| ) |
| # For the first DLC, make it user used by the user. |
| if [[ "${N}" == 1 ]]; then |
| args+=( --used-by "user" ) |
| fi |
| # For the second DLC, make preloadable. |
| if [[ "${N}" == 2 ]]; then |
| args+=( --preload ) |
| fi |
| |
| build_dlc "${args[@]}" |
| |
| cp "${BUILD_BOARD}/${LSB_RELEASE}" "${TEMP}"/etc/ |
| cp "${BUILD_BOARD}/${UPDATE_ENGINE_CONF}" "${TEMP}"/etc/ |
| |
| build_dlc --sysroot "${TEMP}" --rootfs "${TEMP}" |
| |
| cp -r "${TEMP}/opt/google/dlc"/* "${DLC_ROOTFS_META_DIR}/" |
| |
| DLC_IMG_PATH="${TEMP}/build/rootfs/dlc/${DLC_PATH}/dlc.img" |
| DLC_IMAGES_PATH="${DLC_IMAGES_DIR}/${DLC_PATH}" |
| mkdir -p "${DLC_IMAGES_PATH}" |
| cp "${DLC_IMG_PATH}" "${DLC_IMAGES_PATH}" |
| |
| PAYLOAD_NAME="${DLC_ID}_${DLC_PACKAGE}_${DLC_PAYLOAD}" |
| cros_generate_update_payload \ |
| --tgt-image "${DLC_IMG_PATH}" \ |
| --output "${TEMP}/${PAYLOAD_NAME}" |
| |
| # Remove the AppID because it is static and nebraska won't be able to get it |
| # when different boards pass different APP IDs. |
| FIND_BEGIN="{\"appid\": \"" |
| FIND_END="_test" |
| sed -i "s/${FIND_BEGIN}.*${FIND_END}/${FIND_BEGIN}${FIND_END}/" \ |
| "${TEMP}/${PAYLOAD_NAME}.json" |
| |
| cp "${TEMP}/${PAYLOAD_NAME}" "${TEMP}/${PAYLOAD_NAME}.json" "${DLC_PAYLOADS_DIR}/" |
| |
| sudo rm -rf "${TEMP}" |
| done |