ACCUMULO-1964 Create a convenience script to build and install the native map code in the expected directory
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/ca98fe9a Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/ca98fe9a Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/ca98fe9a Branch: refs/heads/master Commit: ca98fe9a30a6413b984588926e6a463cd1e5bfee Parents: bbe895d Author: Josh Elser <els...@apache.org> Authored: Wed Dec 4 22:51:59 2013 -0500 Committer: Josh Elser <els...@apache.org> Committed: Wed Dec 4 22:51:59 2013 -0500 ---------------------------------------------------------------------- README | 15 ++++++--- bin/build_native_library.sh | 73 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/ca98fe9a/README ---------------------------------------------------------------------- diff --git a/README b/README index 3243bec..a232fdb 100644 --- a/README +++ b/README @@ -37,14 +37,21 @@ e.g. "-Dhadoop.profile=1.2 -Dhadoop.version=0.20.205.0" or If you are running on another Unix-like operating system (OSX, etc) then you may wish to build the native libraries. They are not strictly necessary but having them available suppresses a runtime warning and enables Accumulo -to run faster. Unpack the accumulo-native tarball in the $ACCUMULO_HOME/lib -directory. Change to the accumulo-native directory in the current directory -and issue `make`. Copy the resulting 'libaccumulo' library into the -$ACCUMULO_HOME/lib/native/map. +to run faster. You can execute the following script to automatically unpack +and install the native library. Be sure to have a JDK and a C++ compiler +installed with the JAVA_HOME environment variable set. + + $ ./bin/build_native_library.sh + +Alternatively, you can manually unpack the accumulo-native tarball in the +$ACCUMULO_HOME/lib directory. Change to the accumulo-native directory in +the current directory and issue `make`. Then, copy the resulting 'libaccumulo' +library into the $ACCUMULO_HOME/lib/native/map. $ mkdir -p $ACCUMULO_HOME/lib/native/map $ cp libaccumulo.* $ACCUMULO_HOME/lib/native/map + If you want to build the debian release, use the command "mvn package -Pdeb" to generate the .deb files in the target/ directory. Please follow the steps at https://cwiki.apache.org/BIGTOP/how-to-install-hadoop-distribution-from-bigtop.html http://git-wip-us.apache.org/repos/asf/accumulo/blob/ca98fe9a/bin/build_native_library.sh ---------------------------------------------------------------------- diff --git a/bin/build_native_library.sh b/bin/build_native_library.sh new file mode 100755 index 0000000..b537a23 --- /dev/null +++ b/bin/build_native_library.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Start: Resolve Script Directory +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + bin="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$bin/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +bin="$( cd -P "$( dirname "$SOURCE" )" && pwd )" +script=$( basename "$SOURCE" ) +# Stop: Resolve Script Directory + + +lib="${bin}/../lib" +native_tarball="${lib}/accumulo-native.tar.gz" +final_native_target="${lib}/native/map" + +if [[ ! -f $native_tarball ]]; then + echo "Could not find native code artifact: ${native_tarball}"; + exit 1 +fi + +# Make the destination for the native library +mkdir -p "${final_native_target}" + +# Make a directory for us to unpack the native source into +TMP_DIR=`mktemp -d /tmp/accumulo-native.XXXX` || exit 1 + +# Unpack the tarball to our temp directory +tar xf "${native_tarball}" -C "${TMP_DIR}" + +if [[ $? -ne 0 ]]; then + echo "Failed to unpack native tarball to ${TMP_DIR}" + exit 1 +fi + +# Move to the first (only) directory in our unpacked tarball +native_dir=`find "${TMP_DIR}" -type d -depth 1` + +cd "${native_dir}" + +# Make the native library +make + +# Make sure it didn't fail +if [[ $? -ne 0 ]]; then + echo "Make failed!" + exit 1 +fi + +# "install" the artifact +cp libaccumulo.* "${final_native_target}" + +# Clean up our temp directory +rm -rf "${TMP_DIR}" + +echo "Successfully installed native library"