Packages
nerves_system_br
1.0.0-rc.1
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
if [ -e "$CROSSCOMPILE-strip" ]; then
STRIP="$CROSSCOMPILE-strip"
else
echo "$SCRIPT_NAME: ERROR: Expecting \$CROSSCOMPILE to be set. Did you source nerves-env.sh?"
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()
{
# Run 'file' on $1, trim out parts
# that can vary on a platform, and
# normalize whitespace
# NOTE: The SYSV vs. GNU/Linux part has to be removed
# since C++ template instantiation enables the
# GNU/Linux extension, but doesn't actually
# break anything.
file -b "$1" \
| sed 's/, BuildID[^,]*,/,/g' \
| sed 's/, dynamically linked,/,/g' \
| sed 's/,[^,]*debug_info//g' \
| sed 's/,[^,]*stripped//g' \
| sed 's/[[:space:]]\+/ /g' \
| sed 's/[[:space:]]*(SYSV)//g' \
| sed 's/[[:space:]]*(GNU\/Linux)//g'
}
get_expected_dynamic_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"
}
get_expected_static_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 -static -o "$tmpfile" -
executable_type "$tmpfile"
rm "$tmpfile"
}
get_expected_library_type()
{
# Compile a trivial C shared library with the crosscompiler
# so that we know what the `file` output should look like.
tmpfile=$(mktemp /tmp/scrub-otp-release.XXXXXX)
echo "void doit() {}" | "$CROSSCOMPILE-gcc" --shared -x c -o "$tmpfile" -
executable_type "$tmpfile"
rm "$tmpfile"
}
EXECUTABLES=$(find "$RELEASE_DIR" -type f -perm -100)
EXPECTED_DYNAMIC_BIN_TYPE=$(get_expected_dynamic_executable_type)
EXPECTED_STATIC_BIN_TYPE=$(get_expected_static_executable_type)
EXPECTED_SO_TYPE=$(get_expected_library_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_DYNAMIC_BIN_TYPE" -a "$TYPE" != "$EXPECTED_STATIC_BIN_TYPE" -a "$TYPE" != "$EXPECTED_SO_TYPE" ]; then
echo "$SCRIPT_NAME: ERROR: Unexpected executable format for '$EXECUTABLE'"
echo
echo "Got:"
echo " $TYPE"
echo
echo "If binary, expecting:"
echo " $EXPECTED_DYNAMIC_BIN_TYPE"
echo
echo "or, for static binaries:"
echo " $EXPECTED_STATIC_BIN_TYPE"
echo
echo "If shared library, expecting:"
echo " $EXPECTED_SO_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