unify err functions across scripts

include/err.sh

this new handling also does mundane things,
such as tell you what script b0rked

Signed-off-by: Leah Rowe <leah@libreboot.org>
btrfsvols
Leah Rowe 2023-08-23 18:56:31 +01:00
parent b3fbcdf66e
commit 57adbc6eb1
17 changed files with 127 additions and 175 deletions

39
fetch
View File

@ -5,6 +5,8 @@
# SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org> # SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org>
# SPDX-License-Identifier: GPL-3.0-only # SPDX-License-Identifier: GPL-3.0-only
. "include/err.sh"
name="" name=""
revision="" revision=""
location="" location=""
@ -15,7 +17,7 @@ depend=""
main() main()
{ {
[ -z "${1+x}" ] && err 'Error: name not set' [ -z "${1+x}" ] && fail 'Error: name not set'
name=${1} name=${1}
read_config read_config
@ -51,9 +53,9 @@ EOF
verify_config() verify_config()
{ {
[ -z "${revision+x}" ] && err 'Error: revision not set' [ -z "${revision+x}" ] && fail 'Error: revision not set'
[ -z "${location+x}" ] && err 'Error: location not set' [ -z "${location+x}" ] && fail 'Error: location not set'
[ -z "${url+x}" ] && err 'Error: url not set' [ -z "${url+x}" ] && fail 'Error: url not set'
} }
clone_project() clone_project()
@ -61,19 +63,19 @@ clone_project()
tmp_dir=$(mktemp -dt "${name}_XXXXX") tmp_dir=$(mktemp -dt "${name}_XXXXX")
git clone ${url} ${tmp_dir} || git clone ${bkup_url} ${tmp_dir} || \ git clone ${url} ${tmp_dir} || git clone ${bkup_url} ${tmp_dir} || \
err "ERROR: could not download ${name}" fail "ERROR: could not download ${name}"
( (
cd ${tmp_dir} || err "tmpdir not created" cd ${tmp_dir} || fail "tmpdir not created"
git reset --hard ${revision} || err "Cannot reset revision" git reset --hard ${revision} || fail "Cannot reset revision"
) )
patch_project patch_project
[ ! -d "${location}" ] || \ [ ! -d "${location}" ] || \
rm -Rf ${location} || err "Can't remove directory '${location}'" rm -Rf ${location} || fail "Can't remove directory '${location}'"
mv ${tmp_dir} ${location} && return 0 mv ${tmp_dir} ${location} && return 0
printf "ERROR: Could not copy temp file to destination.\n" printf "ERROR: Could not copy temp file to destination.\n"
err " ${tmp_dir} > ${location} check permissions" fail " ${tmp_dir} > ${location} check permissions"
} }
patch_project() patch_project()
@ -83,12 +85,19 @@ patch_project()
for patchfile in ${PWD}/${patchdir}/*.patch ; do for patchfile in ${PWD}/${patchdir}/*.patch ; do
[ -f "${patchfile}" ] || continue [ -f "${patchfile}" ] || continue
( (
cd ${tmp_dir} || err "tmpdir not created" cd ${tmp_dir} || fail "tmpdir not created"
git am ${patchfile} || err "Cannot patch project: $name" git am ${patchfile} || fail "Cannot patch project: $name"
) )
done done
} }
fail()
{
usage
rm -Rf "${tmp_dir}" > /dev/null 2>&1 | :
err "${1}"
}
usage() usage()
{ {
cat <<- EOF cat <<- EOF
@ -99,12 +108,4 @@ usage()
EOF EOF
} }
err()
{
printf "${@}\n"
usage
rm -Rf ${tmp_dir} >/dev/null 2>&1
exit 1
}
main $@ main $@

View File

@ -24,6 +24,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
_target="" _target=""
tree="" tree=""
rev="" rev=""
@ -175,10 +177,4 @@ prepare_new_tree()
) )
} }
err()
{
printf "ERROR, %s, %s\n" $0 $1 1>&2
exit 1
}
main $@ main $@

8
include/err.sh Executable file
View File

@ -0,0 +1,8 @@
# Copyright (c) 2022, 2023 Leah Rowe <info@minifree.org>
# SPDX-License-Identifier: MIT
err()
{
printf "ERROR %s: %s\n" "${0}" "${1}" 1>&2
exit 1
}

25
lbmk
View File

@ -24,6 +24,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
projectname="$(cat projectname)" projectname="$(cat projectname)"
buildpath="" buildpath=""
mode="" mode=""
@ -31,8 +33,8 @@ option=""
main() main()
{ {
[ "${0##*/}" = "lbmk" ] && die "Don't run this script directly." [ "${0##*/}" = "lbmk" ] && err "Don't run this script directly."
[ $# -lt 1 ] && die "Too few arguments. Try: ${0} help" [ $# -lt 1 ] && err "Too few arguments. Try: ${0} help"
buildpath="./resources/scripts/${0##*/}" buildpath="./resources/scripts/${0##*/}"
@ -41,7 +43,7 @@ main()
[ "${mode}" = "help" ] && usage ${0} && exit 0 [ "${mode}" = "help" ] && usage ${0} && exit 0
[ $# -lt 2 ] && usage ${0} && exit 1 [ $# -lt 2 ] && usage ${0} && exit 1
if [ "${mode}" = "dependencies" ]; then if [ "${mode}" = "dependencies" ]; then
install_dependencies $@ || die "Could not install dependencies" install_dependencies $@ || err "Could not install dependencies"
exit 0 exit 0
else else
./resources/scripts/misc/versioncheck ./resources/scripts/misc/versioncheck
@ -62,13 +64,13 @@ main()
*) *)
if [ ! -d "${buildpath}/${mode}" ]; then if [ ! -d "${buildpath}/${mode}" ]; then
usage $0 usage $0
die "Invalid mode '${mode}'. Run: ${0} help" err "Invalid mode '${mode}'. Run: ${0} help"
elif [ ! -f "${buildpath}/${mode}/${option}" ]; then elif [ ! -f "${buildpath}/${mode}/${option}" ]; then
usage $0 usage $0
printf "Invalid option for '%s'." ${mode} printf "Invalid option for '%s'." ${mode}
die "Run: ${0} ${mode} list'." err "Run: ${0} ${mode} list'."
fi fi
"${buildpath}/${mode}/${option}" $@ || die "lbmk error" "${buildpath}/${mode}/${option}" $@ || err "lbmk error"
esac esac
./.gitcheck clean ./.gitcheck clean
@ -76,12 +78,12 @@ main()
install_dependencies() install_dependencies()
{ {
[ -f "resources/dependencies/${2}" ] || die "Unsupported target" [ -f "resources/dependencies/${2}" ] || err "Unsupported target"
aur_notice="" aur_notice=""
. "resources/dependencies/${2}" . "resources/dependencies/${2}"
${pkg_add} ${pkglist} || die "Error installing dependencies" ${pkg_add} ${pkglist} || err "Error installing dependencies"
[ "${aur_notice}" != "" ] && \ [ "${aur_notice}" != "" ] && \
printf "You must install these AUR packages: %s\n" \ printf "You must install these AUR packages: %s\n" \
"${aur_notice}" 1>&2 "${aur_notice}" 1>&2
@ -120,11 +122,4 @@ listmodes()
done done
} }
die()
{
./.gitcheck clean
printf "Error: %s\n" "${@}" 1>&2
exit 1
}
main $@ main $@

View File

@ -29,6 +29,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
projectname="$(cat projectname)" projectname="$(cat projectname)"
opts="" opts=""
boards= boards=
@ -116,9 +118,4 @@ buildrom() {
./build boot roms_helper ${1}${opts} ./build boot roms_helper ${1}${opts}
} }
err() {
printf '%s\n' "${1}" 1>&2
exit 1
}
main $@ main $@

View File

@ -30,11 +30,7 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
err() . "include/err.sh"
{
printf "ERROR: build/boot/roms: %s\n" "${1}" 1>&2
exit 1
}
projectname="$(cat projectname)" projectname="$(cat projectname)"

View File

@ -22,6 +22,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
main() main()
{ {
printf "Cleaning crossgcc builds in all coreboot archives\n" printf "Cleaning crossgcc builds in all coreboot archives\n"
@ -34,10 +36,4 @@ main()
done done
} }
err()
{
printf "%s: %s\n" $0 $1
exit 1
}
main $@ main $@

View File

@ -19,6 +19,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
ich9gen="util/ich9utils/ich9gen" ich9gen="util/ich9utils/ich9gen"
main() main()
@ -36,10 +38,4 @@ main()
) )
} }
err()
{
printf "%s: %s\n" $0 $1
exit 1
}
main $@ main $@

View File

@ -22,6 +22,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
main() main()
{ {
printf "Building GRUB\n" printf "Building GRUB\n"
@ -41,10 +43,4 @@ build_grub()
) )
} }
err()
{
printf "%s: error: %s\n" $0 $1
exit 1
}
main $@ main $@

View File

@ -21,6 +21,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
projectname="$(cat projectname)" projectname="$(cat projectname)"
version="version-unknown" version="version-unknown"
versiondate="version-date-unknown" versiondate="version-date-unknown"
@ -165,10 +167,4 @@ strip_rom_image()
${cbfstool} "${romfile}" remove -n "pci10de,06eb.rom" || exit 1 ${cbfstool} "${romfile}" remove -n "pci10de,06eb.rom" || exit 1
} }
err()
{
printf "%s: %s\n" $0 $1
exit 1
}
main $@ main $@

View File

@ -21,6 +21,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
projectname="$(cat projectname)" projectname="$(cat projectname)"
trees_fetch_list="coreboot u-boot" trees_fetch_list="coreboot u-boot"
@ -161,9 +163,4 @@ create_release_archive()
) )
} }
err()
{
printf "%s: %s\n" $0 $1
}
main $@ main $@

View File

@ -21,6 +21,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
mode="" mode=""
project="" project=""
@ -61,10 +63,4 @@ main()
|| err "cannot clean project src, ${project}" || err "cannot clean project src, ${project}"
} }
err()
{
printf "ERROR: build/src: %s\n" "${1}" 1>&2
exit 1
}
main $@ main $@

View File

@ -24,6 +24,8 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
projectname="$(cat projectname)" projectname="$(cat projectname)"
our_version="$(cat version)" our_version="$(cat version)"
@ -58,20 +60,20 @@ main()
mode="menuconfig" mode="menuconfig"
shift ;; shift ;;
*) *)
err "Invalid option" ;; fail "Invalid option" ;;
esac esac
project="${OPTARG}" project="${OPTARG}"
shift shift
done done
[ -z "${mode}" ] && err "mode not given (-m, -u or -b)" [ -z "${mode}" ] && fail "mode not given (-m, -u or -b)"
elfdir="elf/${project}" elfdir="elf/${project}"
cfgsdir="resources/${project}" cfgsdir="resources/${project}"
[ -d "${cfgsdir}" ] || err "directory, ${cfgsdir}, does not exist" [ -d "${cfgsdir}" ] || fail "directory, ${cfgsdir}, does not exist"
listfile="${cfgsdir}/build.list" listfile="${cfgsdir}/build.list"
[ -f "${listfile}" ] || err "list file, ${listfile}, does not exist" [ -f "${listfile}" ] || fail "list file, ${listfile}, does not exist"
# Build for all targets if no argument is given # Build for all targets if no argument is given
if [ "$#" -eq 0 ]; then if [ "$#" -eq 0 ]; then
@ -90,7 +92,7 @@ main()
printf "Running 'make %s' for project '%s, target '%s''\n" \ printf "Running 'make %s' for project '%s, target '%s''\n" \
"${mode}" "${project}" "${target}" "${mode}" "${project}" "${target}"
[ "${project}" != "coreboot" ] || [ "${mode}" != "all" ] || \ [ "${project}" != "coreboot" ] || [ "${mode}" != "all" ] || \
./update blobs download ${target} || err "blobutil" ./update blobs download ${target} || fail "blobutil"
handle_defconfig || exit 1 handle_defconfig || exit 1
done done
@ -125,15 +127,15 @@ handle_dependencies()
arch="undefined" arch="undefined"
[ ! -f "${target_dir}/target.cfg" ] && \ [ ! -f "${target_dir}/target.cfg" ] && \
err "build/${project} ${target}: Missing target.cfg" fail "build/${project} ${target}: Missing target.cfg"
# Override the above defaults using target.cfg # Override the above defaults using target.cfg
. "${target_dir}/target.cfg" # source . "${target_dir}/target.cfg" # source
[ "${tree}" = "undefined" ] && \ [ "${tree}" = "undefined" ] && \
err "build/${project} %{target}: tree undefined" fail "build/${project} %{target}: tree undefined"
[ "${arch}" = "undefined" ] && \ [ "${arch}" = "undefined" ] && \
err "build/${project} ${target}: undefined cpu type" fail "build/${project} ${target}: undefined cpu type"
codedir="${project}/${tree}" codedir="${project}/${tree}"
[ -d "${codedir}" ] || \ [ -d "${codedir}" ] || \
@ -141,7 +143,7 @@ handle_dependencies()
# u-boot and coreboot are both compiled with coreboot's crossgcc # u-boot and coreboot are both compiled with coreboot's crossgcc
if [ "${project}" = "coreboot" ] || [ "${project}" = "u-boot" ]; then if [ "${project}" = "coreboot" ] || [ "${project}" = "u-boot" ]; then
[ "${mode}" != "all" ] || check_cross_compiler || err "crossgcc" [ "${mode}" != "all" ] || check_cross_compiler || fail "crossgcc"
fi fi
} }
@ -162,7 +164,7 @@ check_cross_compiler()
# only true if not building coreboot: # only true if not building coreboot:
[ -d "${cbdir}" ] || \ [ -d "${cbdir}" ] || \
./fetch_trees coreboot ${cbdir#coreboot/} || \ ./fetch_trees coreboot ${cbdir#coreboot/} || \
err "check_cross_compiler" fail "check_cross_compiler"
if [ "${arch}" = "x86_32" ] || [ "${arch}" = "x86_64" ]; then if [ "${arch}" = "x86_32" ] || [ "${arch}" = "x86_64" ]; then
[ -d "${cbdir}/util/crossgcc/xgcc/i386-elf/" ] || \ [ -d "${cbdir}/util/crossgcc/xgcc/i386-elf/" ] || \
@ -201,7 +203,7 @@ check_cross_compiler()
check_config() check_config()
{ {
[ ! -f "${config}" ] && \ [ ! -f "${config}" ] && \
err "build/${project} ${target}: configs missing" fail "build/${project} ${target}: configs missing"
dest_dir="${elfdir}/${target}/${config_name}" dest_dir="${elfdir}/${target}/${config_name}"
for elftest in "${dest_dir}"/*; do for elftest in "${dest_dir}"/*; do
@ -215,15 +217,15 @@ check_config()
run_make_command() run_make_command()
{ {
make -C "${codedir}" distclean || err "run_make_command" make -C "${codedir}" distclean || fail "run_make_command"
cp "${config}" "${codedir}/.config" || err "run_make_command" cp "${config}" "${codedir}/.config" || fail "run_make_command"
[ "${mode}" != "all" ] || make -C "${codedir}" silentoldconfig || \ [ "${mode}" != "all" ] || make -C "${codedir}" silentoldconfig || \
make -C "${codedir}" oldconfig || : # don't error on oldconfig make -C "${codedir}" oldconfig || : # don't error on oldconfig
[ "${project}" = "coreboot" ] && [ "${mode}" = "all" ] && \ [ "${project}" = "coreboot" ] && [ "${mode}" = "all" ] && \
printf "%s\n" "${our_version}" > "${codedir}/.coreboot-version" printf "%s\n" "${our_version}" > "${codedir}/.coreboot-version"
make -C "${codedir}" -j$(nproc) ${mode} || err "run_make_command" make -C "${codedir}" -j$(nproc) ${mode} || fail "run_make_command"
} }
copy_elf() copy_elf()
@ -233,17 +235,16 @@ copy_elf()
done done
make -C "${codedir}" distclean || \ make -C "${codedir}" distclean || \
make -C "${codedir}" clean || err "copy_elf" make -C "${codedir}" clean || fail "copy_elf"
} }
err() fail()
{ {
[ -z "${codedir}" ] || \ [ -z "${codedir}" ] || \
make -C "${codedir}" distclean \ make -C "${codedir}" distclean \
|| make -C "${codedir}" clean || : || make -C "${codedir}" clean || :
printf "build/defconfig error %s\n" "${1}" 1>&2 err "build/defconfig error ${1}"
exit 1
} }
main $@ main $@

View File

@ -5,6 +5,8 @@
# SPDX-FileCopyrightText: 2023 Leah Rowe <info@minifree.org> # SPDX-FileCopyrightText: 2023 Leah Rowe <info@minifree.org>
# SPDX-License-Identifier: GPL-3.0-only # SPDX-License-Identifier: GPL-3.0-only
. "include/err.sh"
agent="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" agent="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0"
ec_url="" ec_url=""
@ -54,9 +56,9 @@ main()
boarddir="${cbcfgsdir}/${board}" boarddir="${cbcfgsdir}/${board}"
[ ! -d "${boarddir}" ] && \ [ ! -d "${boarddir}" ] && \
fail "Board target, ${board}, not defined" err "Board target, ${board}, not defined"
[ ! -f "${boarddir}/target.cfg" ] && \ [ ! -f "${boarddir}/target.cfg" ] && \
fail "Target missing target.cfg" err "Target missing target.cfg"
no_config="printf \"No config for target, %s\\n\" ${board} 1>&2; exit 0" no_config="printf \"No config for target, %s\\n\" ${board} 1>&2; exit 0"
for x in "${boarddir}"/config/*; do for x in "${boarddir}"/config/*; do
@ -153,16 +155,16 @@ build_dependencies()
{ {
[ -d ${cbdir} ] || \ [ -d ${cbdir} ] || \
./fetch_trees coreboot ${cbdir##*/} || \ ./fetch_trees coreboot ${cbdir##*/} || \
fail "can't download to ${cbdir}" err "can't download to ${cbdir}"
for d in uefitool biosutilities bios_extract me_cleaner; do for d in uefitool biosutilities bios_extract me_cleaner; do
[ -d "${d}" ] && continue [ -d "${d}" ] && continue
./fetch ${d} || fail "can't download ${d}" ./fetch ${d} || err "can't download ${d}"
done done
[ -f uefitool/uefiextract ] || \ [ -f uefitool/uefiextract ] || \
./build src for -b uefitool || fail "can't build uefitool" ./build src for -b uefitool || err "can't build uefitool"
[ -f ${cbdir}/util/kbc1126/kbc1126_ec_dump ] || \ [ -f ${cbdir}/util/kbc1126/kbc1126_ec_dump ] || \
make -BC ${cbdir}/util/kbc1126 || \ make -BC ${cbdir}/util/kbc1126 || \
fail "can't build kbc1126_ec_dump" err "can't build kbc1126_ec_dump"
} }
download_blobs() download_blobs()
@ -183,7 +185,7 @@ download_blobs()
done done
[ -z ${_failed+x} ] || \ [ -z ${_failed+x} ] || \
fail "failed to obtain ${_failed}\nTry manual extraction?" err "failed to obtain ${_failed}\nTry manual extraction?"
} }
download_blob_intel_me() download_blob_intel_me()
@ -214,10 +216,10 @@ extract_blob_intel_me()
innoextract ${dl_path} -d ${appdir} || \ innoextract ${dl_path} -d ${appdir} || \
7z x ${dl_path} -o${appdir} || \ 7z x ${dl_path} -o${appdir} || \
unar "${dl_path}" -o "${appdir}" || \ unar "${dl_path}" -o "${appdir}" || \
fail "Could not extract vendor update" err "Could not extract vendor update"
bruteforce_extract_blob_intel_me "$(pwd)/${_me_destination}" \ bruteforce_extract_blob_intel_me "$(pwd)/${_me_destination}" \
"$(pwd)/${appdir}" || fail "Could not extract Intel ME firmware" "$(pwd)/${appdir}" || err "Could not extract Intel ME firmware"
printf "Truncated and cleaned me output to ${_me_destination}\n" printf "Truncated and cleaned me output to ${_me_destination}\n"
} }
@ -314,7 +316,7 @@ extract_blob_kbc1126_ec()
mv Rom.bin ec.bin mv Rom.bin ec.bin
fi fi
[ -f ec.bin ] || fail "could not extract ec.bin for board, ${board}" [ -f ec.bin ] || err "could not extract ec.bin for board, ${board}"
"${kbc1126_ec_dump}" ec.bin "${kbc1126_ec_dump}" ec.bin
) )
@ -367,10 +369,10 @@ extract_e6400vga()
tail -c +${e6400_vga_offset} "${dl_path##*/}" \ tail -c +${e6400_vga_offset} "${dl_path##*/}" \
| gunzip > bios.bin | gunzip > bios.bin
[ -f "bios.bin" ] || \ [ -f "bios.bin" ] || \
fail "Could not extract bios.bin from Dell E6400 update" err "Could not extract bios.bin from Dell E6400 update"
"${e6400_unpack}" bios.bin || printf "TODO: fix dell extract util\n" "${e6400_unpack}" bios.bin || printf "TODO: fix dell extract util\n"
[ -f "${e6400_vga_romname}" ] || \ [ -f "${e6400_vga_romname}" ] || \
fail "Could not extract VGA ROM from Dell E6400 BIOS update" err "Could not extract VGA ROM from Dell E6400 BIOS update"
) )
cp "${appdir}"/"${e6400_vga_romname}" "${_vga_destination}" cp "${appdir}"/"${e6400_vga_romname}" "${_vga_destination}"
@ -483,10 +485,4 @@ vendor_checksum()
fi fi
} }
fail()
{
printf "\nERROR: $@\n"
exit 1
}
main $@ main $@

View File

@ -5,6 +5,8 @@
# SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org> # SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org>
# SPDX-License-Identifier: GPL-3.0-only # SPDX-License-Identifier: GPL-3.0-only
. "include/err.sh"
sname="" sname=""
board="" board=""
vendor_rom="" vendor_rom=""
@ -29,7 +31,7 @@ _ifd_destination=""
main() main()
{ {
sname=${0} sname=${0}
[ $# -lt 2 ] && fail "Missing arguments (fewer than two)." [ $# -lt 2 ] && err "Missing arguments (fewer than two)."
board="${1}" board="${1}"
vendor_rom="${2}" vendor_rom="${2}"
@ -43,21 +45,21 @@ main()
check_board() check_board()
{ {
[ -f "${vendor_rom}" ] || \ [ -f "${vendor_rom}" ] || \
fail "file does not exist: ${vendor_rom}" err "file does not exist: ${vendor_rom}"
[ -d "${boarddir}" ] || \ [ -d "${boarddir}" ] || \
fail "build/roms ${board}: target not defined" err "build/roms ${board}: target not defined"
[ -f "${boarddir}/target.cfg" ] || \ [ -f "${boarddir}/target.cfg" ] || \
fail "build/roms ${board}: missing target.cfg" err "build/roms ${board}: missing target.cfg"
} }
build_dependencies() build_dependencies()
{ {
[ -d me_cleaner ] || \ [ -d me_cleaner ] || \
./fetch me_cleaner || fail "can't fetch me_cleaner" ./fetch me_cleaner || err "can't fetch me_cleaner"
[ -d ${cbdir} ] || \ [ -d ${cbdir} ] || \
./fetch_trees coreboot default || fail "can't fetch coreboot" ./fetch_trees coreboot default || err "can't fetch coreboot"
[ -f ${ifdtool} ] || \ [ -f ${ifdtool} ] || \
make -C "${ifdtool%/ifdtool}" || fail "can't build ifdtool" make -C "${ifdtool%/ifdtool}" || err "can't build ifdtool"
} }
extract_blobs() extract_blobs()
@ -69,7 +71,7 @@ extract_blobs()
. "${boarddir}/target.cfg" . "${boarddir}/target.cfg"
[ "$CONFIG_HAVE_MRC" != "y" ] || \ [ "$CONFIG_HAVE_MRC" != "y" ] || \
./update blobs mrc || fail "could not download mrc" ./update blobs mrc || err "could not download mrc"
_me_destination=${CONFIG_ME_BIN_PATH#../../} _me_destination=${CONFIG_ME_BIN_PATH#../../}
_gbe_destination=${CONFIG_GBE_BIN_PATH#../../} _gbe_destination=${CONFIG_GBE_BIN_PATH#../../}
@ -81,7 +83,7 @@ extract_blobs()
# Cleans up other files extracted with ifdtool # Cleans up other files extracted with ifdtool
rm -f flashregion*.bin 2> /dev/null rm -f flashregion*.bin 2> /dev/null
[ -f ${_ifd_destination} ] || fail "Could not extract IFD" [ -f ${_ifd_destination} ] || err "Could not extract IFD"
printf "gbe, ifd, and me extracted to %s\n" \ printf "gbe, ifd, and me extracted to %s\n" \
${_me_destination%/*} ${_me_destination%/*}
} }
@ -94,7 +96,7 @@ extract_blob_intel_me()
-M ${_me_destination} ${vendor_rom} -t -r -S || \ -M ${_me_destination} ${vendor_rom} -t -r -S || \
${me7updateparser} \ ${me7updateparser} \
-O ${_me_destination} ${vendor_rom} || \ -O ${_me_destination} ${vendor_rom} || \
fail "me_cleaner failed to extract blobs from rom" err "me_cleaner failed to extract blobs from rom"
} }
extract_blob_intel_gbe_nvm() extract_blob_intel_gbe_nvm()
@ -102,14 +104,7 @@ extract_blob_intel_gbe_nvm()
printf "extracting gigabit ethernet firmware" printf "extracting gigabit ethernet firmware"
./${ifdtool} -x ${vendor_rom} ./${ifdtool} -x ${vendor_rom}
mv flashregion*gbe.bin ${_gbe_destination} || \ mv flashregion*gbe.bin ${_gbe_destination} || \
fail 'could not extract gbe' err 'could not extract gbe'
}
fail()
{
print_help
printf "\n%s: ERROR: %s\n" ${sname} $@
exit 1
} }
print_help() print_help()

View File

@ -5,6 +5,8 @@
# SPDX-FileCopyrightText: 2023 Leah Rowe <info@minifree.org> # SPDX-FileCopyrightText: 2023 Leah Rowe <info@minifree.org>
# SPDX-License-Identifier: GPL-3.0-only # SPDX-License-Identifier: GPL-3.0-only
. "include/err.sh"
sname="" sname=""
archive="" archive=""
_filetype="" _filetype=""
@ -41,7 +43,7 @@ main()
{ {
sname="${0}" sname="${0}"
[ $# -lt 1 ] && fail "No options specified." [ $# -lt 1 ] && err "No options specified."
[ "${1}" = "listboards" ] && listboards && exit 0 [ "${1}" = "listboards" ] && listboards && exit 0
archive="${1}" archive="${1}"
@ -72,21 +74,21 @@ check_board()
{ {
if ! check_release ${archive} ; then if ! check_release ${archive} ; then
[ -f "${rom}" ] || \ [ -f "${rom}" ] || \
fail "${rom} is not a valid path" err "${rom} is not a valid path"
[ -z ${rom+x} ] && \ [ -z ${rom+x} ] && \
fail 'no rom specified' err 'no rom specified'
[ ! -z ${board+x} ] || \ [ ! -z ${board+x} ] || \
board=$(detect_board ${rom}) || \ board=$(detect_board ${rom}) || \
fail 'no board specified' err 'no board specified'
else else
release=true release=true
releasearchive="${archive}" releasearchive="${archive}"
board=$(detect_board ${archive}) || \ board=$(detect_board ${archive}) || \
fail 'Could not detect board type' err 'Could not detect board type'
fi fi
boarddir="${cbcfgsdir}/${board}" boarddir="${cbcfgsdir}/${board}"
[ -d "${boarddir}" ] || fail "board ${board} not found" [ -d "${boarddir}" ] || err "board ${board} not found"
} }
check_release() check_release()
@ -120,9 +122,9 @@ detect_board()
build_dependencies() build_dependencies()
{ {
[ -d "${cbdir}" ] || ./fetch_trees coreboot default [ -d "${cbdir}" ] || ./fetch_trees coreboot default
./build coreboot utils default || fail "could not build cbutils" ./build coreboot utils default || err "could not build cbutils"
./update blobs download ${board} || \ ./update blobs download ${board} || \
fail "Could not download blobs for ${board}" err "Could not download blobs for ${board}"
} }
inject_blobs() inject_blobs()
@ -139,17 +141,17 @@ patch_release_roms()
{ {
_tmpdir=$(mktemp -d "/tmp/${board}_tmpXXXX") _tmpdir=$(mktemp -d "/tmp/${board}_tmpXXXX")
tar xf "${releasearchive}" -C "${_tmpdir}" || \ tar xf "${releasearchive}" -C "${_tmpdir}" || \
fail 'could not extract release archive' err 'could not extract release archive'
for x in ${_tmpdir}/bin/*/*.rom ; do for x in ${_tmpdir}/bin/*/*.rom ; do
echo "patching rom $x" echo "patching rom $x"
patch_rom ${x} || fail "could not patch ${x}" patch_rom ${x} || err "could not patch ${x}"
done done
( (
cd ${_tmpdir}/bin/* cd ${_tmpdir}/bin/*
sha1sum --status -c blobhashes || \ sha1sum --status -c blobhashes || \
fail 'ROMs did not match expected hashes' err 'ROMs did not match expected hashes'
) )
if [ "${modifygbe}" = "true" ]; then if [ "${modifygbe}" = "true" ]; then
@ -223,11 +225,11 @@ inject_blob_intel_me()
rom="${1}" rom="${1}"
[ -z ${CONFIG_ME_BIN_PATH} ] && \ [ -z ${CONFIG_ME_BIN_PATH} ] && \
fail "CONFIG_ME_BIN_PATH not set" err "CONFIG_ME_BIN_PATH not set"
_me_location=${CONFIG_ME_BIN_PATH#../../} _me_location=${CONFIG_ME_BIN_PATH#../../}
[ ! -f "${_me_location}" ] && \ [ ! -f "${_me_location}" ] && \
fail "CONFIG_ME_BIN_PATH points to missing file" err "CONFIG_ME_BIN_PATH points to missing file"
${ifdtool} -i me:${_me_location} ${rom} -O ${rom} || exit 1 ${ifdtool} -i me:${_me_location} ${rom} -O ${rom} || exit 1
} }
@ -310,19 +312,19 @@ modify_gbe()
rom=${1} rom=${1}
[ -z ${CONFIG_GBE_BIN_PATH} ] && \ [ -z ${CONFIG_GBE_BIN_PATH} ] && \
fail "CONFIG_GBE_BIN_PATH not set" err "CONFIG_GBE_BIN_PATH not set"
_gbe_location=${CONFIG_GBE_BIN_PATH#../../} _gbe_location=${CONFIG_GBE_BIN_PATH#../../}
[ -f "${_gbe_location}" ] || \ [ -f "${_gbe_location}" ] || \
fail "CONFIG_GBE_BIN_PATH points to missing file" err "CONFIG_GBE_BIN_PATH points to missing file"
[ -f ${nvmutil} ] || \ [ -f ${nvmutil} ] || \
make -C util/nvmutil || fail 'failed to build nvmutil' make -C util/nvmutil || err 'failed to build nvmutil'
_gbe_tmp=$(mktemp -t gbeXXXX.bin) _gbe_tmp=$(mktemp -t gbeXXXX.bin)
cp ${_gbe_location} ${_gbe_tmp} cp ${_gbe_location} ${_gbe_tmp}
${nvmutil} "${_gbe_tmp}" setmac ${new_mac} || \ ${nvmutil} "${_gbe_tmp}" setmac ${new_mac} || \
fail 'failed to modify mac address' err 'failed to modify mac address'
${ifdtool} -i GbE:${_gbe_tmp} "${rom}" -O "${rom}" || exit 1 ${ifdtool} -i GbE:${_gbe_tmp} "${rom}" -O "${rom}" || exit 1
@ -339,14 +341,6 @@ listboards()
done done
} }
fail()
{
[ -z ${@+x} ] || \
printf "\n%s: ERROR: ${@}\n" ${sname}
usage
exit 1
}
usage() usage()
{ {
cat <<- EOF cat <<- EOF

View File

@ -17,6 +17,9 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v [ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e set -u -e
. "include/err.sh"
export PATH="${PATH}:/sbin" export PATH="${PATH}:/sbin"
# This file is forked from util/chromeos/crosfirmware.sh in coreboot cfc26ce278 # This file is forked from util/chromeos/crosfirmware.sh in coreboot cfc26ce278
@ -51,8 +54,8 @@ main()
printf "Downloading Intel MRC blobs\n" printf "Downloading Intel MRC blobs\n"
check_existing && exit 0 check_existing && exit 0
build_dependencies || fail "could not build dependencies" build_dependencies || err "could not build dependencies"
fetch_mrc || fail "could not fetch mrc.bin" fetch_mrc || err "could not fetch mrc.bin"
} }
check_existing() check_existing()
@ -85,7 +88,7 @@ fetch_mrc()
[ -f ${_file} ] || \ [ -f ${_file} ] || \
download_image ${_url2} ${_file} ${_sha1sum} download_image ${_url2} ${_file} ${_sha1sum}
[ -f $_file ] || \ [ -f $_file ] || \
fail "%{_file} not downloaded / verification failed." err "%{_file} not downloaded / verification failed."
extract_partition ROOT-A ${_file} root-a.ext2 extract_partition ROOT-A ${_file} root-a.ext2
extract_shellball root-a.ext2 chromeos-firmwareupdate-${_board} extract_shellball root-a.ext2 chromeos-firmwareupdate-${_board}
@ -93,7 +96,7 @@ fetch_mrc()
extract_coreboot chromeos-firmwareupdate-${_board} extract_coreboot chromeos-firmwareupdate-${_board}
../../${cbfstool} coreboot-*.bin extract -f mrc.bin -n mrc.bin \ ../../${cbfstool} coreboot-*.bin extract -f mrc.bin -n mrc.bin \
-r RO_SECTION || fail "Could not fetch mrc.bin" -r RO_SECTION || err "Could not fetch mrc.bin"
rm -f "chromeos-firmwareupdate-${_board}" coreboot-*.bin \ rm -f "chromeos-firmwareupdate-${_board}" coreboot-*.bin \
"${_file}" "root-a.ext2" "${_file}" "root-a.ext2"
@ -166,11 +169,4 @@ extract_coreboot()
rm -r "${_unpacked}" rm -r "${_unpacked}"
} }
fail()
{
printf "%s: ERROR: %s\n"
${sname} ${1}
exit 1
}
main $@ main $@