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

385 lines
12 KiB
Bash
Executable File

#!/bin/bash
#
# Simple script to install FreeDATA in Linux
# Dj Merrill - N1JOV
#
# Currently tested in Debian [11, 12], Ubuntu [22.04, 24.04], Fedora [40,41]
# Untested additions for Linux Mint [21.3]
#
# Run this script by typing in the terminal (without the quotes):
# "bash install-freedata-linux.sh" to install from the main branch
# "bash install-freedata-linux.sh develop" to install from the develop branch
#
# 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:
# 2.3: 01 Feb 2025 (deej)
# Add untested additions for Linux Mint 21.3
#
# 2.2: 01 Feb 2025 (deej)
# Check if account is in the dialout group
# Add a warning about account needing to be in sudoers
#
# 2.1: 01 Feb 2025 (deej)
# Add support for Fedora 41
#
# 2.0: 04 Oct 2024 (deej)
# Add support for Fedora 40
#
# 1.9: 14 Sep 2024 (deej)
# Tweak OS version checking section to handle minor OS revisions better
#
# 1.8: 23 July 2024 ( DJ2LS )
# Add support for browser based gui
#
# 1.7: 31 May 2024 ( DJ2LS )
# Add support for version specific setup
#
# 1.6: 22 May 2024
# Reflect directory name changes in prep for merging develop to main
#
# 1.5: 12 May 2024
# "dr-freedata-001" branch of codec2 merged to main so we don't
# need to checkout that branch specifically
#
# 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
#
# Account needs to be in the dialout group for some radios to work
checkdial=`grep -i $USER /etc/group | grep -i dialout`
if [ -z "$checkdial" ];
then
echo "Please add your account" $USER "to the dialout group in /etc/group and then re-run this script."
exit 1;
fi
case $1 in
"" | "main")
args="main"
;;
"develop")
args="develop"
;;
v*)
args=$1
;;
*)
echo "Argument" $1 "not valid. Exiting."
exit 1
;;
esac
osname=`grep -E '^(NAME)=' /etc/os-release | cut -d\" -f2`
osversion=`grep -E '^(VERSION_ID)=' /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 ""
echo "If the sudo command gives an error saying Sorry, or not in sudoers file,"
echo "or something to that effect, check to make sure your account has sudo"
echo "privileges. This generally means a listing in /etc/sudoers or in a file"
echo "in the directory /etc/sudoers.d"
echo "*************************************************************************"
case $osname in
"Debian GNU/Linux")
case $osversion in
"11" | "12")
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" | "Linux Mint")
case $osversion in
"21.3" | "22.04" | "24.04")
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
;;
"Fedora Linux")
case $osversion in
"VERSION_ID=40" | "VERSION_ID=41")
sudo dnf install -y git cmake make automake gcc gcc-c++ kernel-devel wget portaudio-devel python3-pyaudio python3-pip python3-colorama python3-virtualenv google-noto-emoji-fonts python3-devel
;;
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. nvm 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 "npm 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 "*************************************************************************"
if [ "$args" == "develop" ];
then
echo "Downloading development version"
git clone https://github.com/DJ2LS/FreeDATA.git -b develop
git checkout develop
elif [[ $args == v* ]];
then
echo "Downloading specific version: $args"
git clone https://github.com/DJ2LS/FreeDATA.git -b $args
else
echo "Downloading regular version"
git clone https://github.com/DJ2LS/FreeDATA.git
fi
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
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 "*************************************************************************"
cd freedata_server/lib
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
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 ../../../..
cd freedata_gui
npm i
#npm audit fix --force
#npm i
npm run build
# Return to the directory we started in
cd ../..