Files
dts-scripts/include/dts-environment.sh
Michał Iwanicki 8e7a660783 dts-scripts: Enhance mocking for purposes of profile comparison
common-mock-func: set dmidecode to return 0 by default

if test variable isn't defined this likely means that this value
doesn't matter for test purposes.

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock-func: cbmem shouldn't exit in failure in normal check

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock-func: cbfstool: allow specifying fmap regions in binary

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

dts-functions: set_flashrom_update_params: don't use $1 directly

It's hard to know exactly what this argument is for otherwise as this
function isn't documented

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

deploy: don't use mktemp so profile arguments are always the same

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

dts-boot: create TEMP_DIR

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: cbfstool: return 1 if not coreboot

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

cbfstool: don't mock when we check update binary config

Except in some cases where we want to possibly test for identical
config between update binary and current firmware.

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

dasharo-deploy: add 2>>ERR_LOG_FILE redirection

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: cbmem: check if coreboot

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

dts-functions: download_keys: use 'mkdir -p' so it doesn't error out

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: add cbmem_common_mock which returns error if not coreboot

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: add msrtool and mei-amt-check common mock

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: ifdtool: call original ifdtool if used with update binary

Fixes situation on QEMU that results in user not being asked whether to
continue flashing without ME even though we want to test with ME enabled

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: flashrom: verify internal chip use

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: add bootsplash presence mocking

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: both flashrom and cbfstool allow writing over existing file

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: bootsplash region might exist without custom bootsplash

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

check_if_me_disabled: Don't use mocked functions with 'grep -q'

Otherwise grep will break pipe immediately after matching searched
string which will result in mocked function being immediately stopped
even before finishing. It also results in e.g. tool wrapper not writing
used command to profile

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: Add separate ME disabled and ME HAP disabled

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: add cbfstool smmstore mocking

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

common-mock: simplify fuse mock

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

dts-functions: check_if_boot_guard_enabled: hide rdmsr output

remove non-existent command, likely pasted by mistake

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>

include: hal: add cbfstool_add_firmware_section_mock

Signed-off-by: Daniil Klimuk <daniil.klimuk@3mdeb.com>

use dont_mock instead of cbfstool_add_firmware_section_mock

Signed-off-by: Daniil Klimuk <daniil.klimuk@3mdeb.com>

common-mock: rename regions to _regions

Signed-off-by: Michał Iwanicki <michal.iwanicki@3mdeb.com>
2025-08-27 14:45:01 +02:00

218 lines
7.2 KiB
Bash

#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2024 3mdeb <contact@3mdeb.com>
#
# SPDX-License-Identifier: Apache-2.0
# shellcheck disable=SC2034
# shellcheck source=../include/hal/dts-hal.sh
source $DTS_HAL
# shellcheck source=../include/dts-functions.sh
source $DTS_FUNCS
# Text colors:
NORMAL='\033[0m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
GREEN='\033[0;32m'
BLUE='\033[0;36m'
# Return values
OK=0
FAIL=1
CANCEL=2
# DPP variables:
DPP_SERVER_ADDRESS="https://dl.dasharo.com"
DPP_SERVER_USER_ALIAS="premium"
DPP_PACKAGE_MANAGER_DIR="/var/dasharo-package-manager"
DPP_AVAIL_PACKAGES_LIST="$DPP_PACKAGE_MANAGER_DIR/packages-list.json"
DPP_PACKAGES_SCRIPTS_PATH="$DPP_PACKAGE_MANAGER_DIR/packages-scripts"
DPP_SUBMENU_JSON="$DPP_PACKAGES_SCRIPTS_PATH/submenu.json"
DPP_CREDENTIAL_FILE="/etc/cloud-pass"
FW_STORE_URL="${FW_STORE_URL_DEV:-https://dl.3mdeb.com/open-source-firmware/Dasharo}"
FW_STORE_URL_DPP="dl.dasharo.com"
CLOUD_REQUEST="X-Requested-With: XMLHttpRequest"
BASE_HCL_USERNAME="public-hcl"
BASE_HCL_PASSWORD="Vintage-Yearly-Vaporizer-Cubicle"
DEPLOY_REPORT="false"
# DTS menu options:
HCL_REPORT_OPT="1"
DASHARO_FIRM_OPT="2"
REST_FIRM_OPT="3"
DPP_KEYS_OPT="4"
DPP_SUBMENU_OPT="5"
TRANSITION_OPT="6"
BACK_TO_MAIN_MENU_UP="Q"
BACK_TO_MAIN_MENU_DOWN="$(echo $BACK_TO_MAIN_MENU_UP | awk '{print tolower($0)}')"
REBOOT_OPT_UP="R"
REBOOT_OPT_LOW="$(echo $REBOOT_OPT_UP | awk '{print tolower($0)}')"
POWEROFF_OPT_UP="P"
POWEROFF_OPT_LOW="$(echo $POWEROFF_OPT_UP | awk '{print tolower($0)}')"
SHELL_OPT_UP="S"
SHELL_OPT_LOW="$(echo $SHELL_OPT_UP | awk '{print tolower($0)}')"
SSH_OPT_UP="K"
SSH_OPT_LOW="$(echo $SSH_OPT_UP | awk '{print tolower($0)}')"
SEND_LOGS_OPT="L"
SEND_LOGS_OPT_LOW="$(echo $SEND_LOGS_OPT | awk '{print tolower($0)}')"
TOGGLE_DISP_CRED_OPT_UP="C"
TOGGLE_DISP_CRED_OPT_LOW="$(echo $TOGGLE_DISP_CRED_OPT_UP | awk '{print tolower($0)}')"
# Hardware variables:
SYSTEM_VENDOR="$($DMIDECODE dump_var_mock -s system-manufacturer)"
SYSTEM_MODEL="$($DMIDECODE dump_var_mock -s system-product-name)"
BOARD_MODEL="$($DMIDECODE dump_var_mock -s baseboard-product-name)"
CPU_VERSION="$($DMIDECODE dump_var_mock -s processor-version)"
# Firmware variables
BIOS_VENDOR="$($DMIDECODE dump_var_mock -s bios-vendor)"
BIOS_VERSION="$($DMIDECODE dump_var_mock -s bios-version)"
DASHARO_VERSION="$(echo $BIOS_VERSION | cut -d ' ' -f 3 | tr -d 'v')"
DASHARO_FLAVOR="$(echo $BIOS_VERSION | cut -d ' ' -f 1,2)"
# Paths to temporary files, created while deploying or updating Dasharo
# firmware, are used globally for both: updating via binaries and via UEFI
# Capsule Update.
TEMP_DIR="/tmp/dts-temp-files"
BIOS_UPDATE_FILE="/tmp/biosupdate"
BIOS_DUMP_FILE="/tmp/bios.bin"
EC_UPDATE_FILE="/tmp/ecupdate"
BIOS_HASH_FILE="/tmp/bioshash.sha256"
EC_HASH_FILE="/tmp/echash.sha256"
BIOS_SIGN_FILE="/tmp/biossignature.sig"
EC_SIGN_FILE="/tmp/ecsignature.sig"
BIOS_UPDATE_CONFIG_FILE="/tmp/biosupdate_config"
RESIGNED_BIOS_UPDATE_FILE="/tmp/biosupdate_resigned.rom"
SYSTEM_UUID_FILE="/tmp/system_uuid.txt"
SERIAL_NUMBER_FILE="/tmp/serial_number.txt"
# dasharo-deploy backup cmd related variables, do we still use and need this as
# backup is placed in HCL?
ROOT_DIR="/"
FW_BACKUP_NAME="fw_backup"
FW_BACKUP_DIR="${ROOT_DIR}${FW_BACKUP_NAME}"
FW_BACKUP_TAR="${FW_BACKUP_DIR}.tar.gz"
FW_BACKUP_TAR="$(echo "$FW_BACKUP_TAR" | sed 's/\ /_/g')"
# Paths to system files
FLASHROM_LOG_FILE="/var/local/flashrom.log"
FLASH_INFO_FILE="/tmp/flash_info"
OS_VERSION_FILE="/etc/os-release"
KEYS_DIR="/tmp/devkeys"
# Path to board configs
BOARD_CONFIG_PATH="/tmp/dts-configs"
# Paths to system commands:
CMD_SHELL="bash"
# Paths to DTS commands:
CMD_DASHARO_HCL_REPORT="/usr/sbin/dasharo-hcl-report"
CMD_NCMENU="/usr/sbin/novacustom_menu"
CMD_DASHARO_DEPLOY="/usr/sbin/dasharo-deploy"
CMD_CLOUD_LIST="/usr/sbin/cloud_list"
CMD_EC_TRANSITION="/usr/sbin/ec_transition"
# Configuration variables declaration and default values (see dts-functions.sh/
# board_config function for more inf.):
# Versions and names:
declare DASHARO_REL_NAME
declare DASHARO_REL_VER
declare DASHARO_REL_VER_DPP
declare DASHARO_REL_VER_DPP_CAP
declare HEADS_REL_VER_DPP
declare DASHARO_REL_VER_DPP_SEABIOS
declare DASHARO_REL_VER_DPP_SLIMUEFI
declare COMPATIBLE_EC_FW_VERSION
# and for capsules:
declare DASHARO_REL_VER_CAP
declare DASHARO_REL_VER_DPP_CAP
# To use capsule update a platform should already run a firmware with capsule
# update support. Therefore DTS should check, from which Dasharo firmware
# version capsule update is supported for the platform and compare with the
# version of the currently installed firmware. This variable holds the version
# from which Dasharo firmware supports capsule update for current patform. It is
# set in board_config:
declare DASHARO_SUPPORT_CAP_FROM
# MinIO bucket names:
declare BUCKET_DPP # Means coreboot+UEFI
declare BUCKET_DPP_SEABIOS # Means coreboot+SeaBIOS
declare BUCKET_DPP_HEADS # Means coreboot+Headsd
declare BUCKET_DPP_SLIMUEFI # Means Slim Bootloader+UEFI
# Links to files:
declare BIOS_LINK_COMM
declare BIOS_HASH_LINK_COMM
declare BIOS_SIGN_LINK_COMM
declare BIOS_LINK_DPP
declare BIOS_HASH_LINK_DPP
declare BIOS_SIGN_LINK_DPP
declare BIOS_LINK_DPP_SEABIOS
declare BIOS_HASH_LINK_DPP_SEABIOS
declare BIOS_SIGN_LINK_DPP_SEABIOS
declare BIOS_LINK_DPP_SLIMUEFI
declare BIOS_HASH_LINK_DPP_SLIMUEFI
declare BIOS_SIGN_LINK_DPP_SLIMUEFI
declare EC_LINK_COMM
declare EC_HASH_LINK_COMM
declare EC_SIGN_LINK_COMM
declare EC_LINK_DPP
declare EC_HASH_LINK_DPP
declare EC_SIGN_LINK_DPP
declare HEADS_LINK_DPP
declare HEADS_HASH_LINK_DPP
declare HEADS_SIGN_LINK_DPP
# and for capsules:
declare BIOS_LINK_COMM_CAP
declare BIOS_HASH_LINK_COMM_CAP
declare BIOS_SIGN_LINK_COMM_CAP
declare BIOS_LINK_DPP_CAP
declare BIOS_HASH_LINK_DPP_CAP
declare BIOS_SIGN_LINK_DPP_CAP
declare EC_LINK_COMM_CAP
declare EC_HASH_LINK_COMM_CAP
declare EC_SIGN_LINK_COMM_CAP
# Configs, are used in dasharo-deploy script:
CAN_INSTALL_BIOS="false"
HAVE_HEADS_FW="false"
HAVE_EC="false"
NEED_EC_RESET="false"
NEED_SMBIOS_MIGRATION="false"
NEED_SMMSTORE_MIGRATION="false"
NEED_BOOTSPLASH_MIGRATION="false"
NEED_BLOB_TRANSMISSION="false"
NEED_ROMHOLE_MIGRATION="false"
# Default flashrom parameters, may differ depending on a platform:
PROGRAMMER_BIOS="internal"
PROGRAMMER_EC="ite_ec:boardmismatch=force,romsize=128K,autoload=disable"
declare FLASHROM_ADD_OPT_UPDATE_OVERRIDE
declare HEADS_SWITCH_FLASHROM_OPT_OVERRIDE
# Platform-specific:
declare PLATFORM_SIGN_KEY
# Other variables:
# dts-scripts config path
declare DTS_CONFIG_REF="${DTS_CONFIG_REF:-refs/heads/main}"
# Default values for flash chip related information:
declare FLASH_CHIP_SELECT
declare FLASH_CHIP_SIZE
# Default UEFI Capsule Update device:
CAP_UPD_DEVICE="/dev/efi_capsule_loader"
# Variables defining Dasharo specific entries in DMI tables, used to check if
# Dasharo FW is already installed:
DASHARO_VENDOR="3mdeb"
DASHARO_NAME="Dasharo"
# Most the time one flash chipset will be detected, for other cases (like for
# ASUS KGPE-D16) we will test the following list in check_flash_chip function:
FLASH_CHIP_LIST="W25Q64BV/W25Q64CV/W25Q64FV W25Q64JV-.Q W25Q128.V..M"
BASE_DTS_LOGS_URL="xjBCYbzFdyq3WLt"
DTS_LOGS_PASSWORD="/w\J&<y1"
# set custom localization for PGP keys
if [ -d /home/root/.dasharo-gnupg ]; then
GNUPGHOME=/home/root/.dasharo-gnupg
export GNUPGHOME
fi