adding extract_dellbin
This commit is contained in:
parent
22c24220e5
commit
80ec529954
1 changed files with 86 additions and 0 deletions
86
shell/extract_dellbin.sh
Executable file
86
shell/extract_dellbin.sh
Executable file
|
|
@ -0,0 +1,86 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
#
|
||||||
|
# Extract the payload file(s) from a Dell firmware .BIN download
|
||||||
|
# for Linux, which can then be flashed via the iDRAC webUI
|
||||||
|
#
|
||||||
|
# The tar.gz payload starts one line after a defined marker line
|
||||||
|
# - extracting from there to end of file should be a valid tgz
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
_VERSION="0.0.1"
|
||||||
|
_NAME=$(basename "${0}")
|
||||||
|
|
||||||
|
# This appears to be consistent to all .BIN files
|
||||||
|
_TGZ_MARKER="#####Startofarchive#####"
|
||||||
|
|
||||||
|
# Default output directory
|
||||||
|
_DEFOUT="./payload"
|
||||||
|
|
||||||
|
# generic help output
|
||||||
|
function usage() {
|
||||||
|
echo "$_NAME version $_VERSION"
|
||||||
|
echo
|
||||||
|
echo "Extract the payload file(s) from a Dell firmware .BIN download"
|
||||||
|
echo
|
||||||
|
echo "Usage: $_NAME < -f FILENAME > [ -o OUTDIR ] [ -h ] [ -V ]"
|
||||||
|
echo
|
||||||
|
echo " -f FILENAME Name of downloaded .BIN file from Dell"
|
||||||
|
echo " -o OUTDIR Output directory, default: ${_DEFOUT}"
|
||||||
|
echo " -V Version of program"
|
||||||
|
echo " -h This help text"
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
# get the user inputs
|
||||||
|
while getopts ":f:o:Vh" opt; do
|
||||||
|
case "$opt" in
|
||||||
|
f)
|
||||||
|
BINFILE="$(realpath ${OPTARG})" ;;
|
||||||
|
o)
|
||||||
|
OUTDIR="$(realpath ${OPTARG})" ;;
|
||||||
|
V)
|
||||||
|
echo "$_NAME version $_VERSION"
|
||||||
|
exit 0 ;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 0 ;;
|
||||||
|
*)
|
||||||
|
echo "Unrecognized option: $OPTARG (Run '$_NAME -h' for help)"
|
||||||
|
exit 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
|
# ensure we have an input file and can read it and use it's full path
|
||||||
|
if [[ -z "${BINFILE}" ]]; then
|
||||||
|
echo "Error: -f FILENAME is required"
|
||||||
|
usage
|
||||||
|
exit 2
|
||||||
|
elif [[ ! -r "${BINFILE}" ]]; then
|
||||||
|
echo "Error: cannot open file ${BINFILE}"
|
||||||
|
usage
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
# create desired output directory if supplied
|
||||||
|
_OUT="${_DEFOUT}"
|
||||||
|
if [[ -n "${OUTDIR}" ]]; then
|
||||||
|
_OUT="${OUTDIR}"
|
||||||
|
fi
|
||||||
|
if [[ ! -d "${_OUT}" ]]; then
|
||||||
|
mkdir -p "${_OUT}"
|
||||||
|
fi
|
||||||
|
_ARGS="-C ${_OUT}"
|
||||||
|
|
||||||
|
# where does the payload start (offset)
|
||||||
|
_TGZ_LINE=$(grep -m1 -an "^$_TGZ_MARKER" "${BINFILE}" | cut -d ":" -f 1)
|
||||||
|
_TGZ_START=$((_TGZ_LINE+1))
|
||||||
|
|
||||||
|
# extract tarball starting at marker
|
||||||
|
tail -n +${_TGZ_START} "${BINFILE}" | tar ${_ARGS} -zvxf - \
|
||||||
|
--strip=1 --wildcards --no-anchored "payload/*"
|
||||||
|
|
||||||
|
# print out a md5sum of the files just extracted
|
||||||
|
md5sum "${_OUT}/"*
|
||||||
Loading…
Add table
Add a link
Reference in a new issue