FreeDATA/tools/Linux/install-freedata-linux.sh

338 lines
9.9 KiB
Bash
Executable file

#!/bin/bash
#
# Simple script to install FreeDATA in Linux
# Dj Merrill - N1JOV
#
# Currently supports Debian [11, 12], Ubuntu [22.04, 24.04]
#
# Run this script by typing "bash install-freedata-linux.sh" in the terminal
#
# args: nothing or "main" (use main branch of FreeDATA)
# "develop" (use develop branch of FreeDATA)
#
# This script creates three subdirectories in the directory it is run
# FreeDATA: Contains the FreeDATA software
# FreeDATA-venv: Contains the Python virtual environment
# FreeDATA-hamlib: Contains the hamlib libraries
#
# FreeDATA config file is stored in $HOME/.config/FreeDATA/config.ini
# See the run-freedata-linux.sh for more details
#
#
# Changelog:
# 1.4: 05 May 2024
# Change to "dr-freedata-001" branch of codec2 for develop mode
# Added comments in scripts and README.txt for config file location
# If hamlib 4.5.5 is already in FreeDATA-hamlib, don't reinstall
#
# 1.3: 02 May 2024
# Remove dependency on distro supplied hamlib library which can be old
# Download and install hamlib 4.5.5 into ./FreeDATA-hamlib
# Add support for Debian 11 and Ubuntu 22.04
#
# 1.2: 30 Apr 2024
# Remove dependency on distro supplied nodejs which can be too old
# Install nodejs version 20 into ~/.nvm
#
# 1.1: 26 Apr 2024
# Add support for installing from FreeDATA develop branch
# Add support for Ubuntu 24.04
#
# 1.0: Initial release 25 Apr 2024 supporting Debian 12
#
case $1 in
"" | "main")
args="main"
;;
"develop")
args="develop"
;;
*)
echo "Argument" $1 "not valid. Exiting."
exit 1
;;
esac
osname=`grep -E '^(NAME)=' /etc/os-release | cut -d\" -f2`
osversion=`grep -E '^(VERSION)=' /etc/os-release | cut -d\" -f2`
echo "Running on" $osname "version" $osversion
echo "*************************************************************************"
echo "Installing software prerequisites"
echo "If prompted, enter your password to run the sudo command"
echo "*************************************************************************"
case $osname in
"Debian GNU/Linux")
case $osversion in
"11 (bullseye)" | "12 (bookworm)")
sudo apt install --upgrade -y fonts-noto-color-emoji git build-essential cmake python3 portaudio19-dev python3-pyaudio python3-pip python3-colorama python3-venv wget
;;
*)
echo "*************************************************************************"
echo "This version of Linux is not yet supported by this script."
echo $osname $osversion
echo "*************************************************************************"
exit 1
;;
esac
;;
"Ubuntu")
case $osversion in
"22.04.4 LTS (Jammy Jellyfish)" | "24.04 LTS (Noble Numbat)")
sudo apt install --upgrade -y fonts-noto-color-emoji git build-essential cmake python3 portaudio19-dev python3-pyaudio python3-pip python3-colorama python3-venv wget
;;
*)
echo "*************************************************************************"
echo "This version of Linux is not yet supported by this script."
echo $osname $osversion
echo "*************************************************************************"
exit 1
;;
esac
;;
*)
echo "*************************************************************************"
echo "This version of Linux is not yet supported by this script."
echo $osname $osversion
echo "*************************************************************************"
exit 1
;;
esac
echo "*************************************************************************"
echo "Installing nvm and node v 20 into ~/.nvm"
echo "*************************************************************************"
wget https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh
if [ -f "install.sh" ];
then
XDG_CONFIG_HOME=""
chmod 750 install.sh
./install.sh
else
echo "Something went wrong. npm install.sh not downloaded."
exit 1
fi
if [ -f "$HOME/.nvm/bash_completion" ];
then
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
nvm install 20
echo "nvm is version" `npm -v`
echo "node is version" `node -v`
rm -f install.sh
else
echo "Something went wrong. $HOME/.nvm environment not created properly."
exit 1
fi
echo "*************************************************************************"
echo "Checking for hamlib 4.5.5 in FreeDATA-hamlib"
echo "*************************************************************************"
if [ -d "FreeDATA-hamlib.old" ];
then
rm -rf FreeDATA-hamlib.old
fi
if [ -d "FreeDATA-hamlib" ];
then
if [ -f "./FreeDATA-hamlib/bin/rigctl" ];
then
checkhamlibver=`./FreeDATA-hamlib/bin/rigctl --version | cut -f3 -d" "`
if [ "$checkhamlibver" != "4.5.5" ];
then
mv FreeDATA-hamlib FreeDATA-hamlib.old
else
echo "Hamlib 4.5.5 found, no installation needed."
fi
else
mv FreeDATA-hamlib FreeDATA-hamlib.old
fi
fi
if [ ! -d "FreeDATA-hamlib" ];
then
echo "Installing hamlib 4.5.5 into FreeDATA-hamlib"
curdir=`pwd`
wget https://github.com/Hamlib/Hamlib/releases/download/4.5.5/hamlib-4.5.5.tar.gz
if [ -f "hamlib-4.5.5.tar.gz" ];
then
tar -xplf hamlib-4.5.5.tar.gz
else
echo "Something went wrong. hamlib-4.5.5.tar.gz not downloaded."
exit 1
fi
if [ -d "hamlib-4.5.5" ];
then
cd hamlib-4.5.5
./configure --prefix=$curdir/FreeDATA-hamlib
make
make install
cd ..
else
echo "Something went wrong. hamlib-4.5.5 directory not found."
exit 1
fi
if [ ! -f "$curdir/FreeDATA-hamlib/bin/rigctl" ];
then
echo "Something went wrong." $curdir"/FreeDATA.hamlib/bin/rigctl not found."
exit 1
else
echo "Cleaning up files from hamlib build."
rm -f hamlib-4.5.5.tar.gz
rm -rf hamlib-4.5.5
fi
fi
echo "*************************************************************************"
echo "Checking for old FreeDATA directories"
echo "*************************************************************************"
if [ -d "FreeDATA.old" ];
then
rm -rf FreeDATA.old
fi
if [ -d "FreeDATA-venv.old" ];
then
rm -rf FreeDATA-venv.old
fi
if [ -d "FreeDATA" ];
then
mv FreeDATA FreeDATA.old
fi
if [ -d "FreeDATA-venv" ];
then
mv FreeDATA-venv FreeDATA-venv.old
fi
echo "*************************************************************************"
echo "Creating Python Virtual Environment FreeDATA-venv"
echo "*************************************************************************"
python3 -m venv FreeDATA-venv
echo "*************************************************************************"
echo "Activating the Python Virtual Environment"
echo "*************************************************************************"
if [ -f "./FreeDATA-venv/bin/activate" ];
then
source ./FreeDATA-venv/bin/activate
else
echo "Something went wrong. FreeDATA-venv virtual environment not created properly."
exit 1
fi
echo "*************************************************************************"
echo "Updating pip and wheel"
echo "*************************************************************************"
pip install --upgrade pip wheel
echo "*************************************************************************"
echo "Downloading the FreeDATA software from the git repo"
echo "*************************************************************************"
git clone https://github.com/DJ2LS/FreeDATA.git
echo "*************************************************************************"
echo "Changing Directory into FreeDATA"
echo "*************************************************************************"
if [ -d "FreeDATA" ];
then
cd FreeDATA
else
echo "Something went wrong. FreeDATA software not downloaded from git."
exit 1
fi
if [ "$args" == "develop" ];
then
git checkout develop
fi
echo "*************************************************************************"
echo "Installing required Python programs into the virtual environment"
echo "*************************************************************************"
pip install --upgrade -r requirements.txt
echo "*************************************************************************"
echo "Changing into the server directory"
echo "*************************************************************************"
if [ "$args" == "develop" ];
then
cd freedata_server/lib
else
cd modem/lib
fi
echo "*************************************************************************"
echo "Checking and removing any old codec2 libraries"
echo "*************************************************************************"
if [ -d "codec2" ];
then
mv codec2 codec2.old
fi
echo "*************************************************************************"
echo "Downloading the latest codec library"
echo "*************************************************************************"
git clone https://github.com/drowe67/codec2.git
echo "*************************************************************************"
echo "Changing into the codec2 library directory"
echo "*************************************************************************"
if [ -d "codec2" ];
then
cd codec2
else
echo "Something went wrong. Codec2 software not downloaded from git."
exit 1
fi
if [ "$args" == "develop" ];
then
git checkout dr-freedata-001
fi
echo "*************************************************************************"
echo "Setting up the codec2 build"
echo "*************************************************************************"
mkdir build_linux
cd build_linux
echo "*************************************************************************"
echo "Building the codec2 library"
echo "*************************************************************************"
cmake ..
make -j4
if [ ! -f "src/libcodec2.so.1.2" ];
then
echo "Something went wrong. Codec2 software not built."
exit 1
fi
echo "*************************************************************************"
echo "Building the FreeDATA GUI frontend"
echo "*************************************************************************"
cd ../../../..
if [ "$args" == "develop" ];
then
cd freedata_gui
else
cd gui
fi
npm i
npm audit fix --force
npm i
# Return to the directory we started in
cd ../..