Packages
nerves_system_br
1.4.3
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
Current section
Files
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
#
readelf_headers()
{
if ! "$READELF" -h "$1" 2>/dev/null; then
echo "not_elf"
fi
}
executable_type()
{
FILE="$1"
READELF_OUTPUT="$2"
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 "$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" "$(readelf_headers "$tmpfile")"
rm "$tmpfile"
}
EXECUTABLES=$(find "$RELEASE_DIR" -type f -perm -100)
EXPECTED_TYPE=$(get_expected_executable_type)
for EXECUTABLE in $EXECUTABLES; do
READELF_OUTPUT=$(readelf_headers "$EXECUTABLE")
if [ "$READELF_OUTPUT" != "not_elf" ]; then
# Verify that the executable was compiled for the target
TYPE=$(executable_type "$EXECUTABLE" "$READELF_OUTPUT")
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"
fi
done