#!/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. # project.version VERSION=$1 # project.build.directory BASEDIR=$2 #hdds.version HDDS_VERSION=$3 function run() { declare res echo "\$ ${*}" "${@}" res=$? if [[ ${res} != 0 ]]; then echo echo "Failed!" echo exit "${res}" fi } function findfileindir() { declare file="$1" declare dir="${2:-./share}" declare count count=$(find "${dir}" -iname "${file}" | wc -l) #shellcheck disable=SC2086 echo ${count} } function copyifnotexists() { declare src="$1" declare dest="$2" declare srcname declare destdir declare child declare childpath if [[ -f "${src}" ]]; then srcname=${src##*/} if [[ "${srcname}" != *.jar || $(findfileindir "${srcname}") -eq "0" ]]; then destdir=$(dirname "${dest}") mkdir -p "${destdir}" cp -p "${src}" "${dest}" fi else for childpath in "${src}"/*; do child="${childpath##*/}" if [[ "${child}" == "doc" || "${child}" == "webapps" ]]; then mkdir -p "${dest}/${child}" cp -r "${src}/${child}"/* "${dest}/${child}" continue; fi copyifnotexists "${src}/${child}" "${dest}/${child}" done fi } #Copy all contents as is except the lib. #for libs check for existence in share directory, if not exist then only copy. function copy() { declare src="$1" declare dest="$2" declare child declare childpath if [[ -d "${src}" ]]; then for childpath in "${src}"/*; do child="${childpath##*/}" if [[ "${child}" == "share" ]]; then copyifnotexists "${src}/${child}" "${dest}/${child}" else if [[ -d "${src}/${child}" ]]; then mkdir -p "${dest}/${child}" cp -pr "${src}/${child}"/* "${dest}/${child}" else cp -pr "${src}/${child}" "${dest}/${child}" fi fi done fi } # shellcheck disable=SC2164 ROOT=$(cd "${BASEDIR}"/../..;pwd) echo echo "Current directory $(pwd)" echo run rm -rf "ozone-${HDDS_VERSION}" run mkdir "ozone-${HDDS_VERSION}" run cd "ozone-${HDDS_VERSION}" run cp -p "${ROOT}/LICENSE.txt" . run cp -p "${ROOT}/NOTICE.txt" . # Copy hadoop-common first so that it have always have all dependencies. # Remaining projects will copy only libraries which are not present already in 'share' directory. run copy "${ROOT}/hadoop-common-project/hadoop-common/target/hadoop-common-${VERSION}" . # HDDS run copy "${ROOT}/hadoop-hdds/common/target/hadoop-hdds-common-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-hdds/framework/target/hadoop-hdds-server-framework-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-hdds/server-scm/target/hadoop-hdds-server-scm-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-hdds/container-service/target/hadoop-hdds-container-service-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-hdds/client/target/hadoop-hdds-client-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-hdds/tools/target/hadoop-hdds-tools-${HDDS_VERSION}" . # Ozone run copy "${ROOT}/hadoop-ozone/common/target/hadoop-ozone-common-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-ozone/ozone-manager/target/hadoop-ozone-ozone-manager-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-ozone/objectstore-service/target/hadoop-ozone-objectstore-service-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-ozone/client/target/hadoop-ozone-client-${HDDS_VERSION}" . run copy "${ROOT}/hadoop-ozone/tools/target/hadoop-ozone-tools-${HDDS_VERSION}" . #shaded ozonefs mkdir -p "./share/hadoop/ozonefs" cp "${ROOT}/hadoop-ozone/ozonefs/target/hadoop-ozone-filesystem-${HDDS_VERSION}.jar" "./share/hadoop/ozonefs/hadoop-ozone-filesystem.jar" #shaded datanode service mkdir -p "./share/hadoop/ozoneplugin" cp "${ROOT}/hadoop-ozone/objectstore-service/target/hadoop-ozone-objectstore-service-${HDDS_VERSION}-plugin.jar" "./share/hadoop/ozoneplugin/hadoop-ozone-datanode-plugin.jar" # Optional documentation, could be missing cp -r "${ROOT}/hadoop-ozone/docs/target/classes/webapps/docs" ./share/hadoop/ozone/webapps/ozoneManager/ cp -r "${ROOT}/hadoop-ozone/docs/target/classes/webapps/docs" ./share/hadoop/hdds/webapps/scm/ cp -r "${ROOT}/hadoop-ozone/docs/target/classes/webapps/docs" ./ rm sbin/*all.sh rm sbin/*all.cmd #remove test and java sources find . -name "*tests.jar" | xargs rm find . -name "*sources.jar" | xargs rm find . -name jdiff -type d | xargs rm -rf #add ozone specific readme run cp "${ROOT}/hadoop-dist/src/main/ozone/README.txt" README.txt #Copy docker compose files and robot tests run cp -p -r "${ROOT}/hadoop-dist/src/main/compose" . run cp -p -r "${ROOT}/hadoop-dist/src/main/smoketest" . mkdir -p ./share/hadoop/mapreduce mkdir -p ./share/hadoop/yarn mkdir -p ./share/hadoop/hdfs echo echo "Hadoop Ozone dist layout available at: ${BASEDIR}/ozone-${HDDS_VERSION}" echo