Packages

nerves_system_br

1.0.0-rc.4
1.34.0 1.33.9 1.33.8 1.33.7 1.33.6 1.33.5 1.33.4 1.33.3 1.33.2 1.33.1 1.33.0 1.32.5 1.32.4 1.32.3 1.32.2 1.32.1 1.32.0 1.31.7 1.31.6 1.31.5 1.31.4 1.31.3 1.31.2 1.31.1 1.31.0 1.30.1 1.30.0 1.29.3 1.29.2 1.29.1 1.29.0 1.28.3 1.28.2 1.28.1 1.28.0 1.27.3 1.27.2 1.27.1 1.27.0 1.26.1 1.26.0 1.25.3 1.25.2 1.25.1 1.25.0 1.24.1 1.24.0 1.23.3 1.23.2 1.23.1 1.23.0 1.22.8 1.22.7 1.22.6 1.22.5 1.22.4 1.22.3 1.22.2 1.22.1 1.22.0 1.21.6 1.21.5 1.21.4 1.21.3 1.21.2 1.21.1 1.21.0 1.20.6 1.20.5 1.20.4 1.20.3 1.20.2 1.20.1 1.20.0 1.19.1 1.19.0 1.18.6 1.18.5 1.18.4 1.18.3 1.18.2 1.18.1 1.18.0 1.17.4 1.17.3 1.17.2 1.17.1 1.17.0 1.16.5 1.16.4 1.16.3 1.16.2 1.16.1 1.16.0 1.15.2 1.15.1 1.15.0 1.14.5 1.14.4 1.14.3 1.14.2 1.14.1 1.14.0 1.13.8 1.13.7 1.13.6 1.13.5 1.13.4 1.13.3 1.13.2 1.13.1 1.13.0 1.12.4 1.12.3 1.12.2 1.12.1 1.12.0 1.12.0-rc.0 1.11.4 1.11.3 1.11.2 1.11.1 1.11.0 1.10.3 1.10.2 1.10.1 1.10.0 1.9.5 1.9.4 1.9.3 1.9.2 1.9.1 1.9.0 1.8.6 1.8.5 1.8.4 1.8.3 1.8.2 1.8.1 1.8.0 1.7.3 1.7.2 1.7.1 1.7.0 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.6 1.5.5 1.5.4 1.5.3 1.5.2 1.5.1 1.5.0 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.2 1.2.1 1.2.0 1.1.0 1.0.1 1.0.0 1.0.0-rc.4 1.0.0-rc.3 1.0.0-rc.2 1.0.0-rc.1 1.0.0-rc.0 0.17.0 0.16.4 0.16.3 0.16.2 0.16.1-2017-11 0.16.0-2017-11 0.15.1 0.15.0 0.14.1 0.14.0 0.13.9 0.13.8 0.13.7 0.13.6 0.13.5 0.13.4 retired 0.13.3 0.13.2 0.13.0 0.12.1 0.12.0 0.11.1 0.11.0 0.10.1 0.10.0 0.9.4 0.9.3 0.9.2 0.9.1 0.9.0 0.8.2 0.8.1 0.8.0 0.7.0 0.6.1 0.6.0 0.5.2 0.5.1 0.5.0 0.4.2 0.4.1

Nerves System BR - Buildroot based build platform for Nerves Systems

Current section

Files

Jump to
nerves_system_br scripts scrub-otp-release.sh
Raw

scripts/scrub-otp-release.sh

#!/bin/sh
# Remove or minimize files in an Erlang/OTP release directory
# in preparation for use packaging in a Nerves firmware image.
#
# scrub-otp-release.sh <Erlang/OTP release directory>
set -e
export LC_ALL=C
SCRIPT_NAME=$(basename "$0")
RELEASE_DIR="$1"
# Check that the release directory exists
if [ ! -d "$RELEASE_DIR" ]; then
echo "$SCRIPT_NAME: ERROR: Missing Erlang/OTP release directory: ($RELEASE_DIR)"
exit 1
fi
if [ ! -d "$RELEASE_DIR/lib" -o ! -d "$RELEASE_DIR/releases" ]; then
echo "$SCRIPT_NAME: ERROR: Expecting '$RELEASE_DIR' to contain 'lib' and 'releases' subdirectories"
exit 1
fi
STRIP="$CROSSCOMPILE-strip"
READELF="$CROSSCOMPILE-readelf"
if [ ! -e "$STRIP" -o ! -e "$READELF" ]; then
echo "$SCRIPT_NAME: ERROR: Expecting \$CROSSCOMPILE to be set. Did you source nerves-env.sh?"
echo " \"mix firmware\" should do this for you. Please file an issue is using \"mix\"."
echo " Additional information:"
echo " strip=$STRIP"
echo " readelf=$READELF"
exit 1
fi
# Clean up the Erlang release of all the files that we don't need.
# The user should create their releases without source code
# unless they want really big images..
rm -fr "${RELEASE_DIR:?}/bin" "$RELEASE_DIR"/erts-*
# Delete empty directories
find "$RELEASE_DIR" -type d -empty -delete
# Delete any temp files, release tarballs, etc from the base release directory
# Nothing is supposed to be there.
find "$RELEASE_DIR" -maxdepth 1 -type f -delete
# Clean up the releases directory
find "$RELEASE_DIR/releases" \( -name "*.sh" \
-o -name "*.bat" \
-o -name "*gz" \
-o -name "start.boot" \
-o -name "start_clean.boot" \
\) -delete
#
# Scrub the executables
#
executable_type()
{
READELF_OUTPUT=$("$READELF" -h "$1" 2>&1)
ELF_MACHINE=$(echo "$READELF_OUTPUT" | sed -E -e '/^ Machine: +(.+)/!d; s//\1/;' | head -1)
ELF_FLAGS=$(echo "$READELF_OUTPUT" | sed -E -e '/^ Flags: +(.+)/!d; s//\1/;' | head -1)
if [ -z "$ELF_MACHINE" ]; then
echo "$SCRIPT_NAME: ERROR: Didn't expect empty machine field in ELF header on $1." 1>&2
exit 1
fi
echo "$ELF_MACHINE;$ELF_FLAGS"
}
get_expected_executable_type()
{
# Compile a trivial C program with the crosscompiler
# so that we know what the `file` output should look like.
tmpfile=$(mktemp /tmp/scrub-otp-release.XXXXXX)
echo "int main() {}" | "$CROSSCOMPILE-gcc" -x c -o "$tmpfile" -
executable_type "$tmpfile"
rm "$tmpfile"
}
EXECUTABLES=$(find "$RELEASE_DIR" -type f -perm -100)
EXPECTED_TYPE=$(get_expected_executable_type)
for EXECUTABLE in $EXECUTABLES; do
case $(file -b "$EXECUTABLE") in
*ELF*)
# Verify that the executable was compiled for the target
TYPE=$(executable_type "$EXECUTABLE")
if [ "$TYPE" != "$EXPECTED_TYPE" ]; then
echo "$SCRIPT_NAME: ERROR: Unexpected executable format for '$EXECUTABLE'"
echo
echo "Got:"
echo " $TYPE"
echo
echo "Expecting:"
echo " $EXPECTED_TYPE"
echo
echo " This file may have been compiled for the host or a different target."
echo " Make sure that nerves-env.sh has been sourced and rebuild to fix this."
echo
exit 1
fi
# Strip debug information from ELF binaries
# Symbols are still available to the user in the release directory.
$STRIP "$EXECUTABLE"
;;
*) ;;
esac
done