blob: 41103233ff2a9a5b903a08005b162300fe6c14a0 [file] [log] [blame]
#!/bin/sh
# 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.
from_local_dist=
from_release=
local_dist_path=
qpid_version=
MY_NAME=$(basename "$0")
print_help()
{
cat << END_OF_HELP
Usage: $MY_NAME [OPTION]...
options:
--release Apache Qpid Broker-J release version to build with
--local-dist-path Path to the local Apache Qpid Broker-J distribution to build with
--help, -h, -? Print this help and exit
END_OF_HELP
}
parse_parameters()
{
while [ $# -gt 0 ]; do
case $1 in
--local-dist-path)
from_local_dist=true
local_dist_path=$2
shift;;
--release)
from_release=true
qpid_version=$2
shift;;
--help | -h | -?)
print_help; exit 0;;
*)
echo "Unknown parameter '$1'"
exit 2;;
esac
shift
done
if [ -n "${local_dist_path}" ] && [ -n "${qpid_version}" ]; then
echo "Please specify either building image from local installation or from a particular release version, but not both"
exit 2
fi
if [ -z "${local_dist_path}" ] && [ -z "${qpid_version}" ]; then
print_help
echo "Please specify either building image from local installation or from a particular release version"
exit 2
fi
if [ -n "${local_dist_path}" ]; then
if [ ! -f "${local_dist_path}" ]; then
echo "Local distribution file ${local_dist_path} not found"
exit 1
fi
if [ "$(echo ${local_dist_path} | tail -c 7)" != "tar.gz" ]; then
echo "Local distribution file ${local_dist_path} should be a tar.gz archive"
exit 1
fi
fi
}
install()
{
qpid_dist_dir="./qpid-broker-j"
qpid_dist_file_name=
# Prepare directory
if [ ! -d "${qpid_dist_dir}" ]; then
echo "Creating directory ${qpid_dist_dir}"
mkdir -p "${qpid_dist_dir}"
elif [ ! -z "$(find "${temp_dir}" -name "${qpid_version}" -type d -mmin +60)" ]; then
echo "Cleaning up directory ${qpid_dist_dir}"
rm -rf ${qpid_dist_dir}/*
else
echo "Using directory ${qpid_dist_dir}"
fi
if [ -n "${from_release}" ]; then
qpid_dist_file_name="apache-qpid-broker-j-${qpid_version}-bin.tar.gz"
# Check if the release is already available locally, if not try to download it
if [ -z "$(ls -A ${qpid_dist_dir})" ]; then
cdn="$(curl -s https://www.apache.org/dyn/closer.cgi\?preferred=true)/qpid/broker-j/${qpid_version}/binaries/"
archive="https://archive.apache.org/dist/qpid/broker-j/${qpid_version}/binaries/"
qpid_base_url=${cdn}
curl_output="${qpid_dist_dir}/${qpid_dist_file_name}"
# Fallback to the apache archive if the version doesn't exist on the CDN anymore
if [ -z "$(curl -Is ${qpid_base_url}${qpid_dist_file_name} | head -n 1 | grep 200)" ]; then
qpid_base_url=${archive}
# If the archive also doesn't work then report the failure and abort
if [ -z "$(curl -Is ${qpid_base_url}${qpid_dist_file_name} | head -n 1 | grep 200)" ]; then
echo "Failed to find ${qpid_dist_file_name}. Tried both ${cdn} and ${archive}."
exit 1
fi
fi
echo "Downloading ${qpid_dist_file_name} from ${qpid_base_url}..."
curl --progress-bar "${qpid_base_url}${qpid_dist_file_name}" --output "${curl_output}"
fi
elif [ -n "${from_local_dist}" ]; then
qpid_dist_file_name=$(basename ${local_dist_path})
qpid_version=$(echo "$qpid_dist_file_name" | sed -e 's/apache-qpid-broker-j-\(.*\)-bin.tar.gz/\1/')
echo "Broker-J distribution file is $qpid_dist_file_name"
echo "Broker-J version is $qpid_version"
echo "Copying ${local_dist_path} to ${qpid_dist_dir}..."
cp "$local_dist_path" "$qpid_dist_dir"
else
exit 2
fi
echo "Expanding ${qpid_dist_dir}/${qpid_dist_file_name}..."
tar xzf "${qpid_dist_dir}"/"${qpid_dist_file_name}" --directory "${qpid_dist_dir}" --strip 1
echo "Removing ${qpid_dist_dir}/${qpid_dist_file_name}..."
rm -rf "${qpid_dist_dir}"/"${qpid_dist_file_name}"
mkdir -p $qpid_dist_dir/${qpid_version}/docker/
cp ./broker.acl "$qpid_dist_dir/${qpid_version}/docker/"
cp ./*.json "$qpid_dist_dir/${qpid_version}/docker/"
cp ./Containerfile "$qpid_dist_dir/${qpid_version}/docker/"
cp -r $qpid_dist_dir/${qpid_version}/lib "$qpid_dist_dir/${qpid_version}/docker/"
cp ./entrypoint.sh "$qpid_dist_dir/${qpid_version}/docker/"
}
print_instruction()
{
cat <<HERE
Well done! Now you can continue with building the Docker image:
# Go to $qpid_dist_dir/${qpid_version}/docker/
$ cd $qpid_dist_dir/${qpid_version}/docker/
# For Ubuntu with JRE 17
$ docker build -f ./Containerfile -t qpid-ubuntu .
# For Alpine with JRE 17
$ docker build -f ./Containerfile --build-arg OS_NAME=alpine -t qpid-alpine .
Note: -t qpid-ubuntu and -t qpid-alpine are just a tag names for the purpose of this guide
For more info see README.md
HERE
exit 0
}
# main
parse_parameters "$@" && install && print_instruction