build: copy dynamic libs for zip package
This commit is contained in:
parent
b50f0b67d4
commit
ecb6c1c59e
47
bin/emqx
47
bin/emqx
|
@ -20,6 +20,41 @@ mkdir -p "$RUNNER_LOG_DIR"
|
||||||
# Make sure data directory exists
|
# Make sure data directory exists
|
||||||
mkdir -p "$RUNNER_DATA_DIR"
|
mkdir -p "$RUNNER_DATA_DIR"
|
||||||
|
|
||||||
|
export ROOTDIR="$RUNNER_ROOT_DIR"
|
||||||
|
export ERTS_DIR="$ROOTDIR/erts-$ERTS_VSN"
|
||||||
|
export BINDIR="$ERTS_DIR/bin"
|
||||||
|
export EMU="beam"
|
||||||
|
export PROGNAME="erl"
|
||||||
|
DYNLIBS_DIR="$RUNNER_ROOT_DIR/dynlibs"
|
||||||
|
ERTS_LIB_DIR="$ERTS_DIR/../lib"
|
||||||
|
MNESIA_DATA_DIR="$RUNNER_DATA_DIR/mnesia/$NAME"
|
||||||
|
|
||||||
|
# Echo to stderr on errors
|
||||||
|
echoerr() { echo "$*" 1>&2; }
|
||||||
|
|
||||||
|
check_eralng_start() {
|
||||||
|
"$BINDIR/$PROGNAME" -noshell -boot "$REL_DIR/start_clean" -s crypto start -s init stop
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! check_eralng_start >/dev/null 2>&1; then
|
||||||
|
BUILT_ON="$(head -1 "${REL_DIR}/BUILT_ON")"
|
||||||
|
## failed to start, might be due to missing libs, try to be portable
|
||||||
|
export LD_LIBRARY_PATH="$DYNLIBS_DIR:$LD_LIBRARY_PATH"
|
||||||
|
if ! check_eralng_start; then
|
||||||
|
## it's hopeless
|
||||||
|
echoerr "FATAL: Unable to start Erlang (with libcrypto)."
|
||||||
|
echoerr "Please make sure it's running on the correct platform with all required dependencies."
|
||||||
|
echoerr "This EMQ X release is built for $BUILT_ON"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echoerr "WARNING: There seem to be missing dynamic libs from the OS. Using libs from ${DYNLIBS_DIR}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
## backward compatible
|
||||||
|
if [ -d "$ERTS_DIR/lib" ]; then
|
||||||
|
export LD_LIBRARY_PATH="$ERTS_DIR/lib:$LD_LIBRARY_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
# cuttlefish try to read environment variables starting with "EMQX_"
|
# cuttlefish try to read environment variables starting with "EMQX_"
|
||||||
export CUTTLEFISH_ENV_OVERRIDE_PREFIX='EMQX_'
|
export CUTTLEFISH_ENV_OVERRIDE_PREFIX='EMQX_'
|
||||||
|
|
||||||
|
@ -120,9 +155,6 @@ if [ "$ULIMIT_F" -lt 1024 ]; then
|
||||||
echo "!!!!"
|
echo "!!!!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Echo to stderr on errors
|
|
||||||
echoerr() { echo "$@" 1>&2; }
|
|
||||||
|
|
||||||
# By default, use cuttlefish to generate app.config and vm.args
|
# By default, use cuttlefish to generate app.config and vm.args
|
||||||
CUTTLEFISH="${USE_CUTTLEFISH:-yes}"
|
CUTTLEFISH="${USE_CUTTLEFISH:-yes}"
|
||||||
|
|
||||||
|
@ -364,15 +396,6 @@ else
|
||||||
PROTO_DIST_ARG="-proto_dist $PROTO_DIST"
|
PROTO_DIST_ARG="-proto_dist $PROTO_DIST"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export ROOTDIR="$RUNNER_ROOT_DIR"
|
|
||||||
export ERTS_DIR="$ROOTDIR/erts-$ERTS_VSN"
|
|
||||||
export BINDIR="$ERTS_DIR/bin"
|
|
||||||
export EMU="beam"
|
|
||||||
export PROGNAME="erl"
|
|
||||||
export LD_LIBRARY_PATH="$ERTS_DIR/lib:$LD_LIBRARY_PATH"
|
|
||||||
ERTS_LIB_DIR="$ERTS_DIR/../lib"
|
|
||||||
MNESIA_DATA_DIR="$RUNNER_DATA_DIR/mnesia/$NAME"
|
|
||||||
|
|
||||||
cd "$ROOTDIR"
|
cd "$ROOTDIR"
|
||||||
|
|
||||||
# User can specify an sname without @hostname
|
# User can specify an sname without @hostname
|
||||||
|
|
15
build
15
build
|
@ -98,6 +98,18 @@ make_relup() {
|
||||||
./rebar3 as "$PROFILE" relup --relname emqx --relvsn "${PKG_VSN}"
|
./rebar3 as "$PROFILE" relup --relname emqx --relvsn "${PKG_VSN}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cp_dyn_libs() {
|
||||||
|
local rel_dir="$1"
|
||||||
|
local target_dir="${rel_dir}/dynlibs"
|
||||||
|
if ! [ "$(uname -s)" = 'Linux' ]; then
|
||||||
|
return 0;
|
||||||
|
fi
|
||||||
|
mkdir -p "$target_dir"
|
||||||
|
while read -r so_file; do
|
||||||
|
cp -L "$so_file" "$target_dir/"
|
||||||
|
done < <(find "$rel_dir" -type f \( -name "*.so*" -o -name "beam.smp" \) -print0 | xargs -0 ldd | grep -E '^\s+.*=>\s(/lib|/usr)' | awk '{print $3}')
|
||||||
|
}
|
||||||
|
|
||||||
## make_zip turns .tar.gz into a .zip with a slightly different name.
|
## make_zip turns .tar.gz into a .zip with a slightly different name.
|
||||||
## It assumes the .tar.gz has been built -- relies on Makefile dependency
|
## It assumes the .tar.gz has been built -- relies on Makefile dependency
|
||||||
make_zip() {
|
make_zip() {
|
||||||
|
@ -117,6 +129,9 @@ make_zip() {
|
||||||
local zipball
|
local zipball
|
||||||
zipball="${pkgpath}/${PROFILE}-${SYSTEM}-${PKG_VSN}-${ARCH}.zip"
|
zipball="${pkgpath}/${PROFILE}-${SYSTEM}-${PKG_VSN}-${ARCH}.zip"
|
||||||
tar zxf "${tarball}" -C "${tard}/emqx"
|
tar zxf "${tarball}" -C "${tard}/emqx"
|
||||||
|
## try to be portable for zip packages.
|
||||||
|
## for DEB and RPM packages the dependencies are resoved by yum and apt
|
||||||
|
cp_dyn_libs "${tard}/emqx"
|
||||||
(cd "${tard}" && zip -qr - emqx) > "${zipball}"
|
(cd "${tard}" && zip -qr - emqx) > "${zipball}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue