#additional software to install with build-a-pi #20200513 km4ack TEMPCRON=${MYPATH}/cron.tmp DIR=${MYPATH}/temp WHO=$(whoami) mkdir -p ${DIR} BUILDDIR=$HOME/.bap-source-files mkdir -p ${BUILDDIR} source ${MYPATH}/config ################################## # PAT WINLINK ################################## PAT() { echo "##################" echo "installing pat" echo "##################" PORT=8080 cd ${DIR} if [ -f ${HOME}/.wl2k/config.json ]; then cp ${HOME}/.wl2k/config.json ${DIR}/config.json elif [ -f ${XDG_CONFIG_HOME}/pat/config.json ]; then cp $XDG_CONFIG_HOME/pat/config.json ${DIR}/config.json fi if [ `getconf LONG_BIT` = '64' ]; then #install deb file for 64 bit systems NEWPATV=$(curl -s https://github.com/la5nta/pat/releases | grep arm64 | head -1 | sed 's/.*pat_/pat_/' | sed 's/<\/a>.*$//') NEWPAT=$(echo ${NEWPATV} | sed 's/pat_//' | sed 's/_linux_arm64.deb//' | sed 's/0\.//') echo "new pat v ${NEWPATV}" echo "new pat ${NEWPAT}" wget --tries 2 --connect-timeout=60 https://github.com/la5nta/pat/releases/download/v0.${NEWPAT}/${NEWPATV} sudo dpkg -i ${DIR}/${NEWPATV} else #install deb file for 32 bit systems NEWPATV=$(curl -s https://github.com/la5nta/pat/releases | grep armhf | head -1 | sed 's/.*pat_/pat_/' | sed 's/<\/a>.*$//') NEWPAT=$(echo ${NEWPATV} | sed 's/pat_//' | sed 's/_linux_armhf.deb//' | sed 's/0\.//') echo "new pat v ${NEWPATV}" echo "new pat ${NEWPAT}" wget --tries 2 --connect-timeout=60 https://github.com/la5nta/pat/releases/download/v0.${NEWPAT}/${NEWPATV} sudo dpkg -i ${DIR}/${NEWPATV} fi #lines below configure pat with user info pat http & sudo killall pat sudo systemctl start pat@${WHO} sudo systemctl enable pat@${WHO} cd ${DIR} PAT_VERSION=$(pat version | awk '{print $2}' | awk -F "." '{print $2}') #The Pat Winlink config file will change location in version 0.12. The below if statement #checks to see which version is installed. #check to see if pat version is 12 or greater. Change config file location #depending on which version. if [ "$PAT_VERSION" -le 11 ]; then echo "pat version 11 detected" FIG=$HOME/.wl2k/config.json else echo "pat version 12 or greater detected" FIG=$XDG_CONFIG_HOME/pat/config.json fi #set callsign sed -i "s/\"mycall\": \".*\",/\"mycall\": \"${CALL}\",/" ${FIG} #set password WL2KPASS=$(grep "WL2KPASS" ${MYPATH}/config | sed 's/"//g' | sed 's/WL2KPASS=//') sed -i "s/\"secure_login_password\": \".*\",/\"secure_login_password\": \""$WL2KPASS"\",/" ${FIG} #set locator sed -i "s/\"locator\": \".*\",/\"locator\": \"$GRID\",/" ${FIG} #Change localhost to 0.0.0.0 #This is a secutiry risk. See https://github.com/km4ack/pi-build/issues/299 #Changed to 127.0.0.1 on 11OCT2021 KM4ACK sed -i "s/\"http_addr\": \".*\",/\"http_addr\": \"127.0.0.1:$PORT\",/" ${FIG} #jq '.ax25.rig = '\"my-rig\"'' ${FIG} | jq '.ardop.rig = '\"my-rig\"'' | jq '.hamlib_rigs = {'\"my-rig\"': {"address": "127.0.0.1:4532", "network": "tcp"}}' >~/Desktop/config.json jq '.ax25.rig = '\"my-rig\"'' ${FIG} | jq '.varafm.rig = '\"my-rig\"'' | jq '.varahf.rig = '\"my-rig\"'' | jq '.ardop.rig = '\"my-rig\"'' | \ jq '.varafm.ptt_ctrl = 'true'' | jq '.varahf.ptt_ctrl = 'true'' | \ jq '.hamlib_rigs = {'\"my-rig\"': {"address": "127.0.0.1:4532", "network": "tcp"}}' >~/Desktop/config.json mv ${HOME}/Desktop/config.json ${FIG} sed -i 's/"enable_http": false,/"enable_http": true,/' ${FIG} if [ -f ${DIR}/config.json ]; then mv ${DIR}/config.json ${HOME}/.wl2k/ fi PAT_OLD_SOURCE_INSTALL() { #This code is left for reference. This was used ot build pat from source when 64bit Pi OS was first released. 20220922 #reference: #https://www.jeremymorgan.com/tutorials/raspberry-pi/install-go-raspberry-pi/ #https://github.com/la5nta/pat/wiki/Building-from-source #https://cqdeks4td.blogspot.com/2021/11/installing-pat-open-source-winlink.html #install golang needed for pat build cd wget https://go.dev/dl/go1.17.7.linux-arm64.tar.gz sudo tar -C /usr/local -xzf go1.17.7.linux-arm64.tar.gz rm go1.17.7.linux-arm64.tar.gz echo "PATH=$PATH:/usr/local/go/bin" >> $HOME/.profile echo "GOPATH=$HOME/go" >> $HOME/.profile source $HOME/.profile #download/build latest pat cd git clone https://github.com/la5nta/pat cd pat ./make.bash libax25 ./make.bash sudo cp $HOME/pat/debian/pat@.service /lib/systemd/system/ sudo cp $HOME/pat/pat /usr/bin/ rm -rf $HOME/pat } } ################################## # PAT MENU ################################## PAT-MENU() { #backup config files (Issue #119) if [ -f ${HOME}/patmenu2/config ]; then mkdir -p ${DIR}/patconfig cp ${HOME}/patmenu2/*config* ${DIR}/patconfig/ fi #update pat menu if [ -d ${HOME}/patmenu2 ]; then rm -rf "${HOME}/patmenu2" fi cd ${HOME} git clone https://github.com/km4ack/patmenu2.git ${HOME}/patmenu2 #Verify that pat is on master branch. Pat can remain on an old branch #due to a workaround when moving to Pat version 12. This caused Pat Menu #to constantly report that it needed an update with the BAP update tool. PAT_VER=$(grep release $HOME/patmenu2/changelog | head -1 | sed 's/release=//;s/\.//g') if [ "$PAT_VER" -lt 260 ]; then cd $HOME/patmenu2 git checkout master fi bash ${HOME}/patmenu2/setup sed -i "s/N0CALL/${CALL}/" ${HOME}/patmenu2/config sed -i 's/1,0/3,0/g' ${HOME}/patmenu2/config #restore config files if [ -d ${DIR}/patconfig/ ]; then mv ${DIR}/patconfig/* ${HOME}/patmenu2/ fi } ################################## # JS8Call ################################## JS8CALL() { #find how much memory we are working with FREEMEM=$(free -m | grep Mem: | awk '{ print $2 }') echo ${FREEMEM} ################################## # INCREASE SWAP ################################## #increase swap file if less than 3G memory if [ ${FREEMEM} -lt 3000 ]; then echo "Increasing Swap size for build" #increase swap size sudo sed -i 's/#CONF_SWAPFILE=\/var\/swap/CONF_SWAPFILE=\/var\/swap/' /etc/dphys-swapfile sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=1024/' /etc/dphys-swapfile sudo /etc/init.d/dphys-swapfile restart sleep 10 fi #https://9a3gos.com/install-js8call-2-0-0-rc3-on-ubuntu-19-10-hamlib/ #Verify HAMLIB installed or JS8 Won't Build. if ! hash rigctl 2>/dev/null; then source ${MYPATH}/functions/base.function && HAMLIB source ${MYPATH}/config fi echo "###############################" echo "Installing JS8Call Dependancies" echo "###############################" sudo apt-get install -y build-essential gfortran autoconf automake libtool cmake git asciidoctor libfftw3-dev qtdeclarative5-dev texinfo libqt5multimedia5 libqt5multimedia5-plugins qtmultimedia5-dev libusb-1.0.0-dev libqt5serialport5-dev asciidoc libudev-dev JS8PKG=$(curl -s http://files.js8call.com/latest.html | grep .tgz | sed 's/.*js8call-/js8call-/;s/<.*$//') JS8VERSION=$(echo $JS8PKG | sed 's/js8call-//;s/.tgz.*$//') cd ${BUILDDIR} echo "###################" echo "Downloading JS8Call" echo "###################" wget http://files.js8call.com/$JS8VERSION/$JS8PKG tar -xvf $JS8PKG rm $JS8PKG cd ${BUILDDIR}/js8call echo "#################" echo "Compiling JS8Call" echo "#################" cmake -D CMAKE_INSTALL_PREFIX=$HOME/Downloads/js8call cmake --build . -- -j4 sudo cp js8 js8call /usr/local/bin sudo cp js8call.desktop /usr/share/applications sudo cp ./artwork/icon_128.svg /usr/share/pixmaps/js8call_icon.svg #reset swap size to default if [ ${FREEMEM} -lt 3000 ]; then echo "Resetting swap size to default" #increase swap size sudo sed -i 's/CONF_SWAPFILE=\/var\/swap/#CONF_SWAPFILE=\/var\/swap/' /etc/dphys-swapfile sudo sed -i 's/CONF_SWAPSIZE=1024/CONF_SWAPSIZE=100/' /etc/dphys-swapfile sudo /etc/init.d/dphys-swapfile restart sleep 10 fi #Old Way left for reference #cd ${DIR} #JS8LATE=$(curl -s http://files.js8call.com/latest.html | grep armhf | awk '{ print $2 }' | sed 's/href=//' | sed 's/"//g') #JS8PKG=$(curl -s http://files.js8call.com/latest.html | grep armhf | awk '{ print $2 }' | sed 's/\///g' | sed 's/href="http:files.js8call.com[0-9].[0-9].[0-9]//' | sed 's/"//') #wget --tries 2 --connect-timeout=60 ${JS8LATE} || echo "Can't Download JS8Call" >>${BUILDLOG} #sudo dpkg -i ${JS8PKG} #sudo apt-get --fix-broken -y install #sudo dpkg -i ${JS8PKG} } ################################## # WSJTX ################################## WSJTX() { #find how much memory we are working with FREEMEM=$(free -m | grep Mem: | awk '{ print $2 }') echo ${FREEMEM} ################################## # INCREASE SWAP ################################## #increase swap file if less than 3G memory if [ ${FREEMEM} -lt 3000 ]; then echo "Increasing Swap size for build" #increase swap size sudo sed -i 's/#CONF_SWAPFILE=\/var\/swap/CONF_SWAPFILE=\/var\/swap/' /etc/dphys-swapfile sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=1024/' /etc/dphys-swapfile sudo /etc/init.d/dphys-swapfile restart sleep 10 fi sudo apt install -y build-essential git cmake gfortran fftw3-dev qtbase5-dev qttools5-dev libqt5serialport5-dev qtmultimedia5-dev libqt5multimedia5-plugins libqt5sql5-sqlite autoconf automake libtool texinfo libusb-1.0-0-dev libudev-dev libboost-all-dev asciidoctor #credit to Michael Shriver for this fix FT8PKG=$(curl -s https://wsjt.sourceforge.io/wsjtx.html | grep .tgz | sed 's|.*">\(.*\.tgz\)/dev/null; then sudo apt install -y conky fi touch ${HOME}/Documents/mylog.txt #conky will fail to load if this file doesn't exist touch /var/lib/misc/dnsmasq.leases #conky will fail to load if this file doesn't exist sudo apt-get install -y ruby2.7 sudo gem install gpsd_client sudo gem install maidenhead cp ${MYPATH}/conky/.conkyrc ${HOME}/.conkyrc mkdir -p ${HOME}/bin/conky cp ${MYPATH}/conky/* ${HOME}/bin/conky/ chmod +x ${HOME}/bin/conky/get-grid ${HOME}/bin/conky/temp-conv ${HOME}/bin/conky/get-freq ${HOME}/bin/conky/grid sed -i "s/N0CALL/${CALL}/" ${HOME}/.conkyrc #Line below is for https://github.com/km4ack/pi-build/issues/198 echo "#Update GPS maidenhead for conky" >>${TEMPCRON} echo "*/1 * * * * /home/`whoami`/bin/conky/grid" >>${TEMPCRON} #Create files needed for autostart at login #Fix issue https://github.com/km4ack/pi-build/issues/83 cat <${HOME}/.local/share/applications/conky.desktop [Desktop Entry] Name=Conky Comment=Conky GenericName=Conky Screen Background Monitor Exec=conky --pause=5 Icon=/home/`whoami`/pi-build/conky/conky-logo.png Type=Application Encoding=UTF-8 Terminal=false Categories=HamRadio Keywords=Radio EOF ln -sf ${HOME}/.local/share/applications/conky.desktop ${HOME}/.config/autostart/conky.desktop #####Add setconky to main menu chmod +x ${HOME}/pi-build/conky/setconky cat <${HOME}/.local/share/applications/setconky.desktop [Desktop Entry] Name=Conky-Prefs Comment=Conky-Prefs GenericName=Change Conky Preferences Exec=/home/`whoami`/pi-build/conky/setconky Icon=/home/`whoami`/pi-build/conky/conky-logo.png Type=Application Encoding=UTF-8 Terminal=false Categories=Settings;DesktopSettings;GTK;X-LXDE-Settings; Keywords=Radio,Conky EOF } ################################## # M0IAX Tools ################################## M0IAX() { cd ${DIR} || return wget http://m0iax.com/wp-content/uploads/2020/08/JS8CallUtils_RaspberryPi.zip unzip JS8CallUtils_RaspberryPi.zip rm JS8CallUtils_RaspberryPi.zip chmod +x JS8CallUtils_v2 sudo mv JS8CallUtils_v2 /usr/local/bin cat >m0iax.desktop <||') #determine if 32/64 bit and set download link accordingly. issue #382 if [ `getconf LONG_BIT` = '32' ]; then LINK="https://github.com/goldstar611/chirp-appimage/releases/download/$CHIRPDATE/Chirp-next-$CHIRPDATE-armhf.AppImage" else LINK="https://github.com/goldstar611/chirp-appimage/releases/download/$CHIRPDATE/Chirp-next-$CHIRPDATE-aarch64.AppImage" fi wget $LINK CHIRP=$(ls | grep Chirp-next) sudo mv $CHIRP /usr/local/bin/chirp sudo chmod +x /usr/local/bin/chirp cat >chirp.desktop <//' | sed 's/[<].*$//') sudo apt-get -y install python-gtk2 python-serial python-libxml2 python-suds mkdir ${HOME}/chirp cd ${HOME}/chirp || return wget --tries 2 --connect-timeout=60 https://trac.chirp.danplanet.com/chirp_daily/LATEST/$CHIRPBUILD tar -xzf $CHIRPBUILD CHIRPDIR=$(echo $CHIRPBUILD | sed 's/[.].*$//') cd $CHIRPDIR || return sudo python setup.py install pip install future } } ################################## # GARIM ################################## GARIM() { GPKG=$(curl -s https://www.whitemesa.net/garim/src/ | grep tar.gz | tail -1 | sed 's/^.*garim/garim/' | sed 's/tar.gz.*$/tar.gz/') cd ${BUILDDIR} || return wget --tries 2 --connect-timeout=60 https://www.whitemesa.net/garim/src/$GPKG tar -xzvf $GPKG DIRR=$(echo $GPKG | sed 's/.tar.gz//') cd ${DIRR} || return ./configure make sudo make install sudo make clean cd ${BUILDDIR} || return rm *.gz } ################################ # VARIM ################################## VARIM() { sudo apt-get install -y libfltk1.1-dev sudo apt-get install -y libfltk1.3-dev VPKG=$(curl -s https://www.whitemesa.net/varim/src/ | grep tar.gz | tail -1 | sed 's/^.*varim/varim/' | sed 's/tar.gz.*$/tar.gz/') cd ${BUILDDIR} || return wget --tries 2 --connect-timeout=60 https://www.whitemesa.net/varim/src/$VPKG tar -xzvf $VPKG DIRR=$(echo $VPKG | sed 's/.tar.gz//') cd ${DIRR} || return ./configure make sudo make install sudo make clean cd ${BUILDDIR} || return rm *.gz } ################################## # QSSTV ################################## QSSTV() { sudo apt-get install -y g++ libfftw3-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libpulse-dev libhamlib-dev libasound2-dev libv4l-dev libopenjp2-7 libopenjp2-7-dev cd ${BUILDDIR} || return git clone https://github.com/ON4QZ/QSSTV cd QSSTV/src || return qmake make sudo make install sudo make clean cd ${BUILDDIR} || return sudo mkdir -p /usr/local/share/pixmaps/ sudo cp ${BUILDDIR}/QSSTV/src/icons/qsstv.png /usr/local/share/pixmaps/ cat >qsstv.desktop <gridtracker.desktop <>YAAC echo "java -jar ${HOME}/YAAC/YAAC.jar" >>YAAC chmod +x YAAC cat >yaac.desktop <xastir.desktop </dev/null; then sudo apt install -y php7.4 fi #install ghostwriter if needed #this is used to mod the new index.html #page. 20200229 if ! hash ghostwriter 2>/dev/null; then sudo apt-get install -y ghostwriter fi #Install the KM4ACK EES cd ${DIR} || return git clone https://github.com/km4ack/EES-LITE.git cd ${DIR}/EES-LITE || return #git dev branch of code git checkout dev sudo cp -r ${DIR}/EES-LITE/* /var/www/html/ rm -rf "${DIR}/EES-LITE" cd /var/www/html || return sudo chmod +x /var/www/html/firstrun sudo /var/www/html/./firstrun sudo sed -i "s/N0CALL/${CALL}/" /var/www/html/config.php sudo sed -i 's/REMINDER\ FOR\ OPERATOR\ TO\ DO\ SOMETHING/ENABLE\ AUTO\ POST\ REPLY\ IN\ CRON/' /var/www/html/config.php cd ${DIR} || return #Change Pat Winlink port so it won't interfer with the EES sed -i 's/:8080/:5000/' ${XDG_CONFIG_HOME}/pat/config.json sed -i 's/PORT=8080/PORT=5000/' ${HOME}/patmenu2/config sudo killall pat sudo systemctl start pat@${WHO} #Move info.markdown from EES folder to Documents sudo mv /var/www/html/info.markdown ${HOME}/Documents/ sudo chown ${WHO}:${WHO} ${HOME}/Documents/info.markdown #move info.html to pi documents folder sudo cp /var/www/html/index.html ${HOME}/Documents/info.html sudo chown ${WHO}:${WHO} ${HOME}/Documents/info.html #move script to be run by cron to bin dir sudo mv /var/www/html/webcopy ${HOME}/bin/ sudo chown ${WHO}:${WHO} ${HOME}/bin/webcopy sudo chmod +x ${HOME}/bin/webcopy #set up cron job for EES echo "#-----Start EES Server Options------" >>${TEMPCRON} echo "#Move EES email to Pat Winlink Outbox" >>${TEMPCRON} echo "*/1 * * * * /var/www/html/movetopat" >>${TEMPCRON} echo " " >>${TEMPCRON} echo "#Auto post replies for EES server" >>${TEMPCRON} echo "#Default is off. Activate by removing # on line below" >>${TEMPCRON} echo "#*/1 * * * * /var/www/html/autopostreply" >>${TEMPCRON} echo "#Line below moves info.html to index.html when modified" >>${TEMPCRON} echo "*/1 * * * * ${HOME}/bin/webcopy" >>${TEMPCRON} echo "#-----End EES Server Options------" >>${TEMPCRON} } ################################## # Pi-APRS ################################## PI-APRS() { cd ${HOME} || return git clone https://github.com/km4ack/Pi-APRS.git cat < /run/user/$UID/piaprs.desktop [Desktop Entry] Name=Pi-APRS GenericName=Pi-ARPS by KM4ACK Comment=Pi-APRS by KM4ACK Exec=/home/`whoami`/Pi-APRS/pi-aprs Icon=/home/`whoami`/Pi-APRS/ISS.png Terminal=true Type=Application Categories=HamRadio; EOF sudo cp /run/user/$UID/piaprs.desktop /usr/share/applications/ } ################################## # HamClock Small ################################## SMALL() { sudo apt-get -y install make g++ libx11-dev cd ${DIR} || return curl -o ESPHamClock.zip http://www.clearskyinstitute.com/ham/HamClock/ESPHamClock.zip unzip ESPHamClock.zip rm ESPHamClock.zip cd ESPHamClock || return sudo make -j 4 hamclock-800x480 sudo chmod +s hamclock-800x480 sudo mv hamclock-800x480 /usr/local/bin/hamclock rm -rf "${DIR}/ESPHamClock" cat >${HOME}/Downloads/hamclock.desktop <${HOME}/Downloads/hamclock.desktop </dev/null; then cat <${HOME}/Desktop/XLOG.txt Xlog could not be installed because hamlib wasn't found on the system. Use the build a pi script to install hamlib and then try installing xlog again. EOF else TARXLOG=$(curl -s https://download.savannah.nongnu.org/releases/xlog/ | grep 2.[0-9].[0-9][0-9].tar | sort | tail -1 | sed 's/.*xlog/xlog/' | sed 's/.sig.*$//') DIRXLOG=$(echo ${TARXLOG} | sed 's/.tar.gz//') cd ${HOME} || return sudo apt-get install -y libgtkgl2.0-dev libusb-1.0-0-dev wget https://download.savannah.nongnu.org/releases/xlog/${TARXLOG} tar -xzvf ${TARXLOG} rm ${TARXLOG} cd ${DIR}XLOG || return ./configure make sudo make install cd ${HOME} || return rm -rf "${DIR}XLOG" fi } ################################## # HAMRS ################################## HAMRS() { #move any existing hamrs files that might get in the way - https://github.com/km4ack/pi-build/issues/288 HAMRSCHECK=$(ls ~/Downloads/ | grep hamrs-) if [ -n $HAMRSCHECK ]; then echo "moving old hamrs file(s)" mkdir -p $HOME/Downloads/old-hamrs mv $HOME/Downloads/hamrs* $HOME/Downloads/old-hamrs fi cd ${HOME}/Downloads DL=$(curl https://www.hamrs.app | grep armv7 | sed 's/.*href="//;s/".*//') wget ${DL} HAMRS=$(ls | grep hamrs-) mv ${HAMRS} hamrs chmod +x hamrs sudo mv hamrs /usr/local/bin/ #following four lines added to resolve issue #345 sudo apt install -y fuse sudo modprobe fuse sudo groupadd fuse sudo usermod -a -G fuse pi #as of Feb 2022 there is no 64 bit version of HAMRS. The following will allow it to run if [ `getconf LONG_BIT` = '64' ]; then sudo dpkg --add-architecture armhf sudo apt-get update sudo apt install -y libasound2:armhf zlib1g-dev:armhf fuse:armhf libglib2.0-0:armhf libnss3:armhf libatk1.0-0:armhf \ libatk-bridge2.0-0:armhf libx11-xcb1:armhf libgdk-pixbuf-2.0-0:armhf libgtk-3-0:armhf libdrm2:armhf libgbm1:armhf fi #create menu item and download icon cat >${HOME}/Downloads/hamrs.desktop <