Files
rhasspy/download-dependencies.sh
Michael Hansen 6dbc8dc35e Fix arm64 arch
2020-04-10 13:45:07 -04:00

188 lines
6.5 KiB
Bash
Executable File

#!/usr/bin/env bash
this_dir="$( cd "$( dirname "$0" )" && pwd )"
cpu_arch=$(uname --m)
# -----------------------------------------------------------------------------
# Command-line Arguments
# -----------------------------------------------------------------------------
. "${this_dir}/etc/shflags"
DEFINE_string 'download-dir' "${this_dir}/download" 'Directory to cache downloaded files'
DEFINE_boolean 'precise' true 'Install Mycroft Precise'
DEFINE_boolean 'kaldi' true 'Install Kaldi'
DEFINE_boolean 'web' true "Install web UI"
DEFINE_boolean 'offline' false "Don't download anything"
DEFINE_boolean 'all-cpu' false 'Download dependencies for all CPU architectures'
DEFINE_string 'cpu-arch' "${cpu_arch}" 'CPU architecture (x86_64, armv7l, arm64v8, armv6l)'
FLAGS "$@" || exit $?
eval set -- "${FLAGS_ARGV}"
# -----------------------------------------------------------------------------
# Default Settings
# -----------------------------------------------------------------------------
set -e
cpu_arch="${FLAGS_cpu_arch}"
download_dir="${FLAGS_download_dir}"
mkdir -p "${download_dir}"
if [[ "${FLAGS_offline}" -eq "${FLAGS_TRUE}" ]]; then
offline='true'
fi
if [[ "${FLAGS_all_cpu}" -eq "${FLAGS_TRUE}" ]]; then
all_cpu='true'
fi
if [[ "${FLAGS_precise}" -eq "${FLAGS_FALSE}" ]]; then
no_precise='true'
fi
if [[ "${FLAGS_kaldi}" -eq "${FLAGS_FALSE}" ]]; then
no_kaldi='true'
fi
if [[ "${FLAGS_web}" -eq "${FLAGS_FALSE}" ]]; then
no_web='true'
fi
# -----------------------------------------------------------------------------
function maybe_download {
if [[ ! -s "$2" ]]; then
if [[ -n "${offline}" ]]; then
echo "Need to download $1 but offline."
exit 1
fi
mkdir -p "$(dirname "$2")"
curl -sSfL -o "$2" "$1" || { echo "Can't download $1"; exit 1; }
echo "$1 => $2"
fi
}
# -----------------------------------------------------------------------------
declare -A CPU_TO_FRIENDLY
CPU_TO_FRIENDLY["x86_64"]="amd64"
CPU_TO_FRIENDLY["armv7l"]="armhf"
CPU_TO_FRIENDLY["arm64v8"]="aarch64"
CPU_TO_FRIENDLY["aarch64"]="aarch64"
CPU_TO_FRIENDLY["armv6l"]="armv6l"
declare -A FRIENDLY_TO_DOCKER
FRIENDLY_TO_DOCKER["amd64"]="amd64"
FRIENDLY_TO_DOCKER["armhf"]="armv7"
FRIENDLY_TO_DOCKER["aarch64"]="arm64"
FRIENDLY_TO_DOCKER["armv6l"]="armv6"
# CPU architecture
if [[ -n "${all_cpu}" ]]; then
CPU_ARCHS=("x86_64" "armv7l" "arm64v8")
FRIENDLY_ARCHS=("amd64" "armhf" "aarch64")
else
CPU_ARCHS=("${cpu_arch}")
FRIENDLY_ARCHS=("${CPU_TO_FRIENDLY[${cpu_arch}]}")
fi
# -----------------------------------------------------------------------------
# Rhasspy
# -----------------------------------------------------------------------------
for FRIENDLY_ARCH in "${FRIENDLY_ARCHS[@]}"; do
rhasspy_files=()
if [[ -z "${no_tools}" ]]; then
# Install Rhasspy tools
rhasspy_files+=("rhasspy-tools_${FRIENDLY_ARCH}.tar.gz")
fi
if [[ -z "${no_web}" ]]; then
# Install web UI
rhasspy_files+=('rhasspy-web-dist.tar.gz')
fi
for rhasspy_file_name in "${rhasspy_files[@]}"; do
rhasspy_file="${download_dir}/${rhasspy_file_name}"
rhasspy_file_url="https://github.com/synesthesiam/rhasspy/releases/download/v2.0/${rhasspy_file_name}"
maybe_download "${rhasspy_file_url}" "${rhasspy_file}"
done
if [[ -z "${no_tools}" ]]; then
# Create link for docker buildx
DOCKER_ARCH="${FRIENDLY_TO_DOCKER[${FRIENDLY_ARCH}]}"
if [[ "${FRIENDLY_ARCH}" != "${DOCKER_ARCH}" ]]; then
ln -f "${download_dir}/rhasspy-tools_${FRIENDLY_ARCH}.tar.gz" \
"${download_dir}/rhasspy-tools_${DOCKER_ARCH}.tar.gz"
fi
fi
done
# -----------------------------------------------------------------------------
# Pocketsphinx for Python
# -----------------------------------------------------------------------------
pocketsphinx_file="${download_dir}/pocketsphinx-python.tar.gz"
pocketsphinx_url='https://github.com/synesthesiam/pocketsphinx-python/releases/download/v1.0/pocketsphinx-python.tar.gz'
maybe_download "${pocketsphinx_url}" "${pocketsphinx_file}"
# -----------------------------------------------------------------------------
# Snowboy
# -----------------------------------------------------------------------------
snowboy_file="${download_dir}/snowboy-1.3.0.tar.gz"
snowboy_url='https://github.com/Kitt-AI/snowboy/archive/v1.3.0.tar.gz'
maybe_download "${snowboy_url}" "${snowboy_file}"
# -----------------------------------------------------------------------------
# Mycroft Precise
# -----------------------------------------------------------------------------
if [[ -z "${no_precise}" ]]; then
for CPU_ARCH in "${CPU_ARCHS[@]}"; do
case $CPU_ARCH in
x86_64|armv7l|aarch64)
precise_file="${download_dir}/precise-engine_0.3.0_${CPU_ARCH}.tar.gz"
precise_url="https://github.com/MycroftAI/mycroft-precise/releases/download/v0.3.0/precise-engine_0.3.0_${CPU_ARCH}.tar.gz"
maybe_download "${precise_url}" "${precise_file}"
# Create link for docker buildx
FRIENDLY_ARCH="${CPU_TO_FRIENDLY[${CPU_ARCH}]}"
DOCKER_ARCH="${FRIENDLY_TO_DOCKER[${FRIENDLY_ARCH}]}"
if [[ "${CPU_ARCH}" != "${DOCKER_ARCH}" ]]; then
ln -f "${download_dir}/precise-engine_0.3.0_${CPU_ARCH}.tar.gz" \
"${download_dir}/precise-engine_0.3.0_${DOCKER_ARCH}.tar.gz"
fi
esac
done
fi
# -----------------------------------------------------------------------------
# Kaldi
# -----------------------------------------------------------------------------
if [[ -z "${no_kaldi}" ]]; then
for FRIENDLY_ARCH in "${FRIENDLY_ARCHS[@]}"; do
if [[ "${FRIENDLY_ARCH}" != "armv6l" ]]; then
# Install pre-built package
kaldi_file="${download_dir}/kaldi_${FRIENDLY_ARCH}.tar.gz"
kaldi_url="https://github.com/synesthesiam/kaldi-docker/releases/download/v1.0/kaldi_${FRIENDLY_ARCH}.tar.gz"
maybe_download "${kaldi_url}" "${kaldi_file}"
# Create link for docker buildx
DOCKER_ARCH="${FRIENDLY_TO_DOCKER[${FRIENDLY_ARCH}]}"
if [[ "${FRIENDLY_ARCH}" != "${DOCKER_ARCH}" ]]; then
ln -f "${download_dir}/kaldi_${FRIENDLY_ARCH}.tar.gz" \
"${download_dir}/kaldi_${DOCKER_ARCH}.tar.gz"
fi
fi
done
fi
# -----------------------------------------------------------------------------
echo "Done"