Packages

nerves_system_br

1.7.0
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" ] || [ ! -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" ] || [ ! -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 "*.ps1" \
-o -name "*gz" \
-o -name "start.boot" \
-o -name "start_clean.boot" \
-o -name "*.script" \
\) -delete
#
# Scrub the executables
#
executable_type()
{
FILE=$1
# Try readelf first, since it's output seems more trustworthy for executables
READELF_OUTPUT=$("$READELF" -h "$FILE" 2>/dev/null || true)
if [ "$READELF_OUTPUT" ]; then
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 in $FILE." 1>&2
echo " Try running '$READELF -h $FILE' and" 1>&2
echo " and create an issue at https://github.com/nerves-project/nerves_system_br/issues." 1>&2
exit 1
fi
echo "readelf:$ELF_MACHINE;$ELF_FLAGS"
else
# readelf didn't work, so try file and guess at things that will cause problems
FILE_OUTPUT=$(file -b -h "$FILE")
case "$FILE_OUTPUT" in
*shared*library*)
echo "file:$FILE_OUTPUT"
;;
*x86_64*)
echo "file:$FILE_OUTPUT"
;;
*)
echo "portable"
;;
esac
fi
}
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
TYPE=$(executable_type "$EXECUTABLE")
if [ "$TYPE" != "portable" ]; then
# Verify that the executable was compiled for the target
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 was compiled for the host or a different target and probably"
echo "will not work."
echo
echo "Check the following:"
echo
echo "1. Are you using a path dependency in your mix deps? If so, run"
echo " 'mix clean' in that directory to avoid pulling in any of its"
echo " build products."
echo
echo "2. Did you recently upgrade to Nerves 1.3 or Distillery 2.0? Make"
echo " sure that your 'rel/config.exs' has 'plugin Nerves'. See"
echo " https://hexdocs.pm/nerves/updating-projects.html#updating-from-v1-0-to-v1-3-0"
echo
echo "3. Did you recently upgrade or change your Nerves system? If so,"
echo " try cleaning and rebuilding this project and its deps."
echo
echo "4. Are you building outside of Nerves' mix integration? If so,"
echo " make sure that you've sourced 'nerves-env.sh'."
echo
echo "If you're still having trouble, please file an issue on Github"
echo "at https://github.com/nerves-project/nerves_system_br/issues."
echo
exit 1
fi
# Strip debug information from ELF binaries
# Symbols are still available to the user in the release directory.
$STRIP "$EXECUTABLE"
fi
done