#!/bin/bash ################################################################## # # # # # # # # # ##### # # # # # # # # # # ## # # # # # # # # # # # # # # # # # # # # # ## # # ##### ####### # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### # # # # # ################################################################## MYPATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE=${MYPATH}/base.txt FUNCTIONS=${MYPATH}/functions ADDITIONAL=${MYPATH}/additional.txt UTILITY=${MYPATH}/utility.txt FLSUITE=${MYPATH}/flsuite.txt CONFIG=${MYPATH}/config LOGO=${MYPATH}/logo.png TEMPCRON=${MYPATH}/cron.tmp VERSION=$(grep "version=" ${MYPATH}/changelog | sed 's/version=//') FINISH() { if [ -f "${BASE}" ]; then rm ${BASE} fi if [ -f "${ADDITIONAL}" ]; then rm ${ADDITIONAL} fi if [ -f "${FLSUITE}" ]; then rm ${FLSUITE} fi if [ -f "${UTILITY}" ]; then rm ${UTILITY} fi } trap FINISH EXIT #remove temp dir if exist #fix issue 108 https://github.com/km4ack/pi-build/issues/108 #Thanks to N5RKS for finding the bug if [ -d ${HOME}/pi-build/temp ]; then rm -rf "${HOME}/pi-build/temp" fi ##################################### # Create autostart dir #used to autostart conky at boot ##################################### mkdir -p ${HOME}/.config/autostart #Check for BAP updates #Check for build a pi updates echo "Checking for Build a Pi updates" CURRENT=$(head -1 ${MYPATH}/changelog | sed s'/version=//') LATEST=$(curl -s https://raw.githubusercontent.com/km4ack/pi-build/master/changelog | tac | tac | head -1 | sed 's/version=//') if (($(echo "$LATEST $CURRENT" | awk '{print ($1 > $2)}'))); then cat <${MYPATH}/updatebap.txt Build a Pi update available. Current version is $CURRENT and the lateest version is $LATEST. Would you like to update? Change log - https://github.com/km4ack/pi-build/blob/master/changelog EOF BAP=$( yad --width=650 --height=250 --text-align=center --center --title="Build-a-Pi" --show-uri \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text-info \ --button="Yes":2 \ --button="No":3 <${MYPATH}/updatebap.txt ) BUT=$? echo ${BUT} ########## if [ ${BUT} = 252 ]; then exit elif [ ${BUT} = 2 ]; then wget -q --tries=5 --timeout=10 --spider http://google.com #| yad --center --progress --pulsate --timeout-indicator=top --auto-close --no-buttons --text="Checking internet connection" if [[ $? -eq 1 ]]; then yad --center --timeout=3 --timeout-indicator=top --no-buttons --text="You are not connected to the internet" exit fi echo "Updating Build a Pi to $LATEST" mv ${MYPATH}/config ${HOME}/Documents/config.bap rm -rf "${MYPATH}" cd ~ || ! echo "Failure" git clone https://github.com/km4ack/pi-build.git mv ${HOME}/Documents/config.bap ${MYPATH}/config cat <${MYPATH}/updatebap.txt Build a Pi has been updated to $LATEST. Please restart Build a Pi. EOF BAP=$( yad --width=650 --height=250 --text-align=center --center --title="Build-a-Pi" --show-uri \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text-info \ --button="OK":2 <${MYPATH}/updatebap.txt ) BUT=$? exit 0 fi ########## fi rm ${MYPATH}/updatebap.txt >>/dev/null 2>&1 rm ${MYPATH}/complete.txt >>/dev/null 2>&1 clear #Scan system for updated applications yad --width=550 --height=250 --text-align=center --center --title="Update" \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text="Version $VERSION\r\r\r\rFirst we need to scan the system to see what is installed, \ then check for updates on the web. This should take less than a minute. Ready when you are." \ --button="Exit":1 \ --button="Start Scan":2 BUT=$? if [ ${BUT} = 252 ] || [ ${BUT} = 1 ]; then exit fi #install bc if not installed if ! hash bc >/dev/null; then sudo apt install -y bc fi CHECK() { #----------------------------------------------------# # Hotspot #----------------------------------------------------# HOTSPOT="/usr/bin/autohotspotN" if [ ! -f "$HOTSPOT" ]; then HOTSPOT="Not Installed" else HOTSPOT="Installed" fi #remove duplicate HST check #----------------------------------------------------# # AX25 #----------------------------------------------------# if [ ! -d /etc/ax25 ]; then AX25="Not Installed" else AX25="Installed" fi #----------------------------------------------------# # GPS #----------------------------------------------------# if ! hash gpsd 2>/dev/null; then GPS="Not Installed" else GPS="Installed" fi #----------------------------------------------------# # PULSE #----------------------------------------------------# if ! hash pavucontrol 2>/dev/null; then PULSE="Not Installed" else PULSE="Installed" fi #----------------------------------------------------# # ARDOP #----------------------------------------------------# if [ -f ${HOME}/ardop/piardopc ]; then ARDOP="Installed" else ARDOP="Not Installed" fi #----------------------------------------------------# # ARDOP GUI #----------------------------------------------------# if [ -f ${HOME}/ardop/piARDOP_GUI ]; then ARDOPGUI="Installed" else ARDOPGUI="Not Installed" fi #----------------------------------------------------# # JS8Call #----------------------------------------------------# if ! hash js8call 2>/dev/null; then JS8="Not Installed" else JS8="Installed" fi #----------------------------------------------------# # WSJTX #----------------------------------------------------# if ! hash wsjtx 2>/dev/null; then FT8="Not Installed" else FT8="Installed" fi #----------------------------------------------------# # CONKY #----------------------------------------------------# if [ -f ${HOME}/.conkyrc ]; then CONKY=Installed else CONKY="Not Installed" fi #----------------------------------------------------# # M0IAX #----------------------------------------------------# if [ -f /usr/local/bin/JS8CallUtils_v2 ]; then M0IAX=Installed else M0IAX="Not Installed" fi #----------------------------------------------------# # RIG CONTROL - HAMLIB #----------------------------------------------------# if ! hash rigctl 2>/dev/null; then RIG="Not_Installed" else echo "Checking Rig Control" RIG=$(rigctl --version | grep Hamlib | sed s/"rigctl(d),\ Hamlib\ "//) NEWRIG=$(curl -s https://sourceforge.net/projects/hamlib/files/latest/download | grep -o https://downloads.sourceforge.net/project/hamlib/hamlib/[0-9].[0-9] | head -n 1 | awk -F "/" '{print $7}') if (($(echo "${NEWRIG} ${RIG}" | awk '{print ($1 > $2)}'))); then RIG=NEEDS-UPDATE else RIG="is_latest_version" fi fi #----------------------------------------------------# # FLDIGI #----------------------------------------------------# echo "Checking FLDIGI" if ! hash fldigi 2>/dev/null; then FLDIGI="Not_Installed" else FLDIGI=$(fldigi --version | awk 'FNR == 1 {print $2}') NEWFLDIGI=$(curl -s https://sourceforge.net/projects/fldigi/files/fldigi/ | grep .tar.gz | head -1 | awk -F "-" '{print $2}' | awk -F ".tar" '{print $1}') if (($(echo "${NEWFLDIGI} ${FLDIGI}" | awk '{print ($1 > $2)}'))); then FLDIGI=NEEDS-UPDATE else FLDIGI="is_latest_version" fi fi #----------------------------------------------------# # FLWRAP #----------------------------------------------------# echo "Checking FLWRAP" if ! hash flwrap 2>/dev/null; then FLWRAP="Not_Installed" else FLWRAP=$(flwrap --version | awk 'FNR == 1 {print $2}') NEWFLWRAP=$(curl -s http://www.w1hkj.com/files/flwrap/ | grep .tar.gz | sed 's/
  • \ flwrap.*$//' | sed 's/flwrap-//' | sed 's/.tar.gz//') if (($(echo "${NEWFLWRAP} ${FLWRAP}" | awk '{print ($1 > $2)}'))); then FLWRAP=NEEDS-UPDATE else FLWRAP="is_latest_version" fi fi #----------------------------------------------------# # FLRIG #----------------------------------------------------# echo "Checking FLRIG" if ! hash flrig 2>/dev/null; then FLRIG="Not_Installed" else FLRIG=$(flrig --version | awk 'FNR == 1 {print $2}') NEWFLRIG=$(curl -s https://sourceforge.net/projects/fldigi/files/flrig/ | grep .tar.gz | head -1 | awk -F "-" '{print $2}' | awk -F ".tar.gz" '{print $1}') if (($(echo "${NEWFLRIG} ${FLRIG}" | awk '{print ($1 > $2)}'))); then FLRIG=NEEDS-UPDATE else FLRIG="is_latest_version" fi fi #----------------------------------------------------# # FLAMP #----------------------------------------------------# echo "Checking FLAMP" if ! hash flamp 2>/dev/null; then FLAMP="Not_Installed" else FLAMP=$(flamp --version | awk 'FNR == 1 {print $2}') NEWFLAMP=$(curl -s https://sourceforge.net/projects/fldigi/files/flamp/ | grep .tar.gz | head -1 | awk -F "-" '{print $2}' | awk -F ".tar.gz" '{print $1}') if (($(echo "${NEWFLAMP} ${FLAMP}" | awk '{print ($1 > $2)}'))); then FLAMP=NEEDS-UPDATE else FLAMP="is_latest_version" fi fi #----------------------------------------------------# # FLMSG #----------------------------------------------------# echo "Checking FLMSG" if ! hash flmsg 2>/dev/null; then FLMSG="Not_Installed" else FLMSG=$(flmsg --version | awk 'FNR == 1 {print $2}') NEWFLMSG=$(curl -s https://sourceforge.net/projects/fldigi/files/flmsg/ | grep .tar.gz | head -1 | awk -F "-" '{print $2}' | awk -F ".tar.gz" '{print $1}') if (($(echo "${NEWFLMSG} ${FLMSG}" | awk '{print ($1 > $2)}'))); then FLMSG=NEEDS-UPDATE else FLMSG="is_latest_version" fi fi #----------------------------------------------------# # FLNET #----------------------------------------------------# echo "Checking FLNET" if ! hash flnet 2>/dev/null; then FLNET="Not_Installed" else FLNET=$(flnet --version | awk 'FNR == 1 {print $2}') NEWFLNET=$(curl -s https://sourceforge.net/projects/fldigi/files/flnet/ | grep .tar.gz | head -1 | awk -F "-" '{print $2}' | awk -F ".tar" '{print $1}') if (($(echo "${NEWFLNET} ${FLNET}" | awk '{print ($1 > $2)}'))); then FLNET=NEEDS-UPDATE else FLNET="is_latest_version" fi fi #----------------------------------------------------# # Pat Winlink #----------------------------------------------------# echo "Checking Pat Winlink" if ! hash pat 2>/dev/null; then PAT="Not_Installed" else PAT=$(pat version | awk '{print $2}' | sed 's/v//' | sed 's/0\.//') 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\.//') VERTEST=$(echo "${NEWPAT}>${PAT}" | bc) if [ "$VERTEST" = 1 ]; then PAT=NEEDS-UPDATE else PAT="is_latest_version" fi fi #----------------------------------------------------# # CHRIP #----------------------------------------------------# echo "Checking Chirp" if ! hash chirpw 2>/dev/null; then CHIRP="Not_Installed" else CP=$(chirpw --version) CHIRP=$(echo ${CP} | awk '{ print $2 }' | sed 's/daily-//') NEWCHIRP=$(curl -s https://trac.chirp.danplanet.com/chirp_daily/LATEST/ | grep .tar.gz | awk -F 'chirp-daily-' '{print $2}' | head -c 8) if (($(echo "${NEWCHIRP} ${CHIRP}" | awk '{print ($1 > $2)}'))); then CHIRP=NEEDS-UPDATE else CHIRP="is_latest_version" fi fi #----------------------------------------------------# # DIREWOLF #----------------------------------------------------# echo "Checking Direwolf" if ! hash direwolf 2>/dev/null; then DIRE="Not_Installed" else DIRE=$(direwolf -S -t 0 | head -1 | sed 's/Dire\ Wolf\ version\ //') wget -P /tmp/ https://raw.githubusercontent.com/wb2osz/direwolf/master/CHANGES.md >/dev/null 2>&1 NEWDIRE=$(cat /tmp/CHANGES.md | head -5 | tail -1 | awk '{ print $3 }') if (($(echo "${NEWDIRE} ${DIRE}" | awk '{print ($1 > $2)}'))); then DIRE=NEEDS-UPDATE else DIRE="is_latest_version" fi fi #----------------------------------------------------# # Pat Menu #----------------------------------------------------# echo "Checking Pat Menu" if [ ! -d ${HOME}/patmenu2 ]; then PATMENU="Not_Installed" else cd ${HOME}/patmenu2/ || ! echo "Failure" wget -O ${HOME}/patmenu2/latest https://raw.githubusercontent.com/km4ack/patmenu2/master/changelog >/dev/null 2>&1 LATEST=$(cat ${HOME}/patmenu2/latest | grep '^release' | sed 's/release=//') CURRENT=$(cat ${HOME}/patmenu2/changelog | grep '^release' | sed 's/release=//') rm ${HOME}/patmenu2/latest >/dev/null 2>&1 if (($(echo "${LATEST} ${CURRENT}" | awk '{print ($1 > $2)}'))); then PATMENU="NEEDS-UPDATE" else PATMENU="is_latest_version" fi fi #----------------------------------------------------# # Hot Spot Tools #----------------------------------------------------# if [ ! -d ${HOME}/hotspot-tools2 ]; then HSTOOLS="Not_Installed" else CURRENT=$(cat ${HOME}/hotspot-tools2/changelog | grep version= | sed 's/version=//') LATEST=$(curl -s https://raw.githubusercontent.com/km4ack/hotspot-tools2/master/changelog | grep version= | sed 's/version=//') if (($(echo "${LATEST} ${CURRENT}" | awk '{print ($1 > $2)}'))); then HSTOOLS="NEEDS-UPDATE" else HSTOOLS="is_latest_version" fi fi #----------------------------------------------------# # GARIM #----------------------------------------------------# echo "Checking GARIM" if ! hash garim 2>/dev/null; then GARIM="Not_Installed" else GARIM=$(garim --version | head -n1 | awk -F ' ' '{print $2}') NEWGARIM=$(curl -s https://www.whitemesa.net/garim/garim.html | grep -m 1 \ "armv7l.tar.gz" | awk -F '-' '{print $2}') if (($(echo "${NEWGARIM} ${GARIM}" | awk '{print ($1 > $2)}'))); then GARIM=NEEDS-UPDATE else GARIM="is_latest_version" fi fi #----------------------------------------------------# # XASTIR #----------------------------------------------------# echo "Checking Xastir" if ! hash xastir 2>/dev/null; then XASTIR="Not_Installed" else LATESTXAS=$(curl -s https://github.com/Xastir/Xastir | grep Release- | head -1 | sed 's/.*Release-//;s/">//') CURRENTXAS=$(xastir -V | sed 's/Xastir V//;s/(.*//;/^\s*$/d') if (($(echo "${LATESTXAS} ${CURRENTXAS}" | awk '{print ($1 > $2)}'))); then XASTIR=NEEDS-UPDATE else XASTIR="is_latest_version" fi fi #----------------------------------------------------# # YAAC #----------------------------------------------------# YAAC="${HOME}/YAAC" echo "Checking YAAC for updates" if [ ! -d "$YAAC" ]; then YAAC="Not Installed" else CURYAAC=$(java -jar ${HOME}/YAAC/YAAC.jar -version | grep core | awk '{print $7}' | sed 's/(.*//;s/1.0-beta//') wget -q https://sourceforge.net/projects/yetanotheraprsc/files/YAACBuildLabel.txt -O /run/user/${UID}/latestyaac.txt LATESTYAAC=$(cat /run/user/${UID}/latestyaac.txt | sed 's/1.0-beta//;s/(.*//') if (($(echo "${LATESTYAAC} ${CURYAAC}" | awk '{print ($1 > $2)}'))); then YAAC=NEEDS-UPDATE else YAAC="is_latest_version" fi fi #----------------------------------------------------# # PYQSO #----------------------------------------------------# if ! hash pyqso 2>/dev/null; then PYQSO="Not Installed" else PYQSO="Installed" fi #----------------------------------------------------# # QSSTV #----------------------------------------------------# if ! hash qsstv 2>/dev/null; then QSSTV="Not Installed" else QSSTV="Installed" fi #----------------------------------------------------# # GRIDTRACKER #----------------------------------------------------# GT="${HOME}/GridTracker" if [ ! -d "$GT" ]; then GRIDTRACK="Not Installed" else GRIDTRACK="Installed" fi #----------------------------------------------------# # PROPAGATION #----------------------------------------------------# if ! hash voacapl 2>/dev/null; then PROP="Not Installed" else PROP="Installed" fi #----------------------------------------------------# # CQRLOG #----------------------------------------------------# if ! hash cqrlog 2>/dev/null; then CQRLOG="Not Installed" else CQRLOG="Installed" fi #----------------------------------------------------# # EES #----------------------------------------------------# if [ -f /var/www/html/email.php ]; then EES="Installed" else EES="Not Installed" fi #----------------------------------------------------# # Pi-APRS #----------------------------------------------------# if [ -d ${HOME}/Pi-APRS ]; then PIAPRS=Installed else PIAPRS="Not Installed" fi #----------------------------------------------------# # Temp Convert #----------------------------------------------------# if [ -f ${HOME}/bin/converttemp ]; then TEMPCONVERT="Installed" else TEMPCONVERT="Not Installed" fi #----------------------------------------------------# # GPARTED #----------------------------------------------------# if ! hash gparted 2>/dev/null; then GPARTED="Not Installed" else GPARTED="Installed" fi #----------------------------------------------------# # DIPOLE CALCULATOR #----------------------------------------------------# if [ -f ${HOME}/bin/dipole ]; then DIPOLE="Installed" else DIPOLE="Not Installed" fi #----------------------------------------------------# # SHOWLOG | Log file viewer #----------------------------------------------------# if [ -f ${HOME}/bin/showlog ]; then SHOWLOG="Installed" else SHOWLOG="Not Installed" fi #----------------------------------------------------# # Call Sign Lookup GETCALL #----------------------------------------------------# if [ -f ${HOME}/bin/getcall ]; then CALLSIGN="Installed" else CALLSIGN="Not Installed" fi #----------------------------------------------------# # HamClock #----------------------------------------------------# HAMCLOCK=$(ls /usr/local/bin | grep hamclock) if [ -n "$HAMCLOCK" ]; then HAMCLOCK="Installed" else HAMCLOCK="Not Installed" fi #----------------------------------------------------# # Real Time Clock #----------------------------------------------------# RTC="Unknown" #----------------------------------------------------# # Gpredict #----------------------------------------------------# if ! hash gpredict 2>/dev/null; then GPREDICT="Not Installed" else GPREDICT="Installed" fi #----------------------------------------------------# # TQSL #----------------------------------------------------# if ! hash tqsl 2>/dev/null; then TQSL="Not Installed" else TQSL="Installed" fi #----------------------------------------------------# # PISTATS #----------------------------------------------------# if ! hash pistats 2>/dev/null; then PISTATS="Not Installed" else PISTATS="Installed" fi #----------------------------------------------------# # XLOG CHECK #----------------------------------------------------# if ! hash xlog 2>/dev/null; then XLOG="Not_Installed" else XLOGCUR=$(xlog -version | sed 's/xlog\ version\ //') XLOGLATEST=$(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.*$//' | sed 's/xlog-//' | sed 's/.tar.gz//') if (($(echo "${XLOGLATEST} ${XLOGCUR}" | awk '{print ($1 > $2)}'))); then XLOG="NEEDS-UPDATE" else XLOG=is_latest_version fi fi #----------------------------------------------------# # JTDX #----------------------------------------------------# if ! hash jtdx 2>/dev/null; then JTDX="Not_Installed" else JTDX=Installed fi } #----------------------------------------------------# # TELNET #----------------------------------------------------# if ! hash telnet 2>/dev/null; then TEL="Not Installed" else TEL="Installed" fi #----------------------------------------------------# # piQtTermTCP #----------------------------------------------------# if [ -f /usr/local/bin/piQtTermTCP ]; then PITERM="Installed" else PITERM="Not Installed" fi #----------------------------------------------------# # Security Tools #----------------------------------------------------# if [ -f /usr/local/bin/securefile ]; then SECURITY="Installed" else SECURITY="Not Installed" fi #----------------------------------------------------# # YGATE #----------------------------------------------------# YGATE="${HOME}/bin/ygate.py" if [ ! -f "$YGATE" ]; then YGATE="Not Installed" else YGATE="Installed" fi #----------------------------------------------------# # BPQ #----------------------------------------------------# BPQ="${HOME}/linbpq/linbpq" if [ ! -f "$BPQ" ]; then BPQ="Not Installed" else BPQ="Installed" fi #----------------------------------------------------# # Battery Test Script :: BATT #----------------------------------------------------# BATT="${HOME}/bin/batt-test" if [ ! -f "$BATT" ]; then BATT="Not Installed" else BATT="Installed" fi #----------------------------------------------------# # VNC Viewer #----------------------------------------------------# if ! hash vncviewer 2>/dev/null; then VNC="Not Installed" else VNC="Installed" fi #----------------------------------------------------# # ZYGRIB Viewer #----------------------------------------------------# if [ -f /usr/bin/zyGrib ]; then ZYGRIB=Installed else ZYGRIB="Not Installed" fi #----------------------------------------------------# # GPS UPDATE TOOL #----------------------------------------------------# echo "Checking GPS Update Tool" if [ ! -f ${HOME}/bin/gpsupdate ]; then GPSUPDATE="Not_Installed" else GPSUPDATE=$(grep VERSION= ${HOME}/bin/gpsupdate | sed 's/VERSION=//') NEWGPSUPDATE=$(curl -s https://raw.githubusercontent.com/km4ack/pi-scripts/master/gpsupdate | grep VERSION= | sed 's/VERSION=//') if (($(echo "${NEWGPSUPDATE} ${GPSUPDATE}" | awk '{print ($1 > $2)}'))); then GPSUPDATE=NEEDS-UPDATE else GPSUPDATE="is_latest_version" fi fi #----------------------------------------------------# # Grid Calc #----------------------------------------------------# echo "Checking Grid Calc" if [ ! -f $HOME/bin/grid-calc ]; then GRIDCALC="Not_Installed" else CURRENT=$(grep VERSION $HOME/bin/grid-calc | head -1 | sed 's/VERSION=//') LATEST=$(curl -s https://raw.githubusercontent.com/km4ack/pi-scripts/master/grid-calc | grep VERSION | head -1 | sed 's/VERSION=//') if (($(echo "${LATEST} ${CURRENT}" | awk '{print ($1 > $2)}'))); then GRIDCALC=NEEDS-UPDATE else GRIDCALC="is_latest_version" fi fi #----------------------------------------------------# # HAMRS #----------------------------------------------------# if [ ! -f /usr/local/bin/hamrs ]; then HAMRS="Not_Installed" else HAMRS="Installed" fi #----------------------------------------------------# # PacketSearch #----------------------------------------------------# echo "Checking Packet Search" if [ ! -f $HOME/bin/packetsearch ]; then PACKETSEARCH="Not_Installed" else PACKETSEARCH=$(grep VERSION $HOME/bin/packetsearch | sed 's/VERSION=//') NEWPACKETSEARCH=$(curl -s https://raw.githubusercontent.com/km4ack/pi-scripts/master/packetsearch | grep VERSION | sed 's/VERSION=//') if (($(echo "${NEWFLNET} ${FLNET}" | awk '{print ($1 > $2)}'))); then PACKETSEARCH=NEEDS-UPDATE else PACKETSEARCH="is_latest_version" fi fi #----------------------------------------------------# # piQtSoundModem #----------------------------------------------------# if [ -f /usr/local/bin/piQtSoundModem ]; then QTSOUND="Installed" else QTSOUND="Not Installed" fi CHECK #################################################################### #################################################################### #################################################################### #################################################################### #################################################################### #################################################################### #################################################################### #################################################################### #################################################################### ##################################### # Get User Call ##################################### CALL() { source ${MYPATH}/config INFO=$(yad --form --width=420 --text-align=center --center --title="Build-a-Pi" \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text="version ${VERSION}" \ --field="Call Sign*" "${CALL}" \ --field="* Required":LBL \ --button="Continue":2) BUT=$? if [ ${BUT} = 252 ]; then exit fi } CALL CALL=$(echo $INFO | awk -F "|" '{print $1}') CALL=${CALL^^} echo "CALL=${CALL}" >${CONFIG} #Verify call not empty if [ -z "${CALL}" ]; then yad --form --width=420 --text-align=center --center --title="Build-a-Pi" --text-align=center \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text="Call Can't be Blank" \ --button=gtk-ok CALL fi #----------------------------------------------------# # BASE APP MENU #----------------------------------------------------# yad --center --list --checklist --width=600 --height=600 --separator="" \ --image ${LOGO} --column=Check --column=App --column=status --column=description --print-column=2 \ --window-icon=${LOGO} --image-on-top --text-align=center \ --text="Base Apps" --title="Update" \ false "HAMLIB" "$RIG" "Rig Control" \ false "HOTSPOT" "$HOTSPOT" "Hot Spot Generator for Portable Ops" \ false "HSTOOLS" "$HSTOOLS" "Tools to Manage HotSpot" \ false "GPS" "${GPS}" "GPS Software" \ false "GPSUPDATE" "${GPSUPDATE}" "Tool to Manage GPS Devices" \ false "ARDOP" "$ARDOP" "Mode for HF" \ false "ARDOPGUI" "$ARDOPGUI" "GUI for ARDOP" \ false "DIREWOLF" "$DIRE" "Software TNC" \ false "AX25" "$AX25" "Data Link Layer Protocol" \ false "PULSE" "$PULSE" "Sound server" \ --button="Exit":1 \ --button="Next":2 >${BASE} BUT=$? if [ ${BUT} = 1 ] || [ ${BUT} = 252 ]; then exit fi ############################################################# #check if hotspot is chosen for install & get info if needed# ############################################################# HS=$(cat ${BASE} | grep HOTSPOT) if [ -n "$HS" ]; then HSINFO() { #unblock wifi sudo rfkill unblock all >/dev/null 2>&1 #bring wifi up sudo ifconfig wlan0 up #LIST=$(sudo iw dev "wlan0" scan ap-force | egrep "^BSS|SSID:" | grep SSID: | sed 's/SSID://' | awk '{ print $1 }') #LIST=$(echo $LIST | sed 's/ /|/g') #Thanks to https://github.com/kuperman for fixing wifi space issue with line below. LIST=$(sudo iw dev "wlan0" scan ap-force | sed -ne 's/^.*SSID: \(..*\)/\1/p' | sort | uniq | paste -sd '|') HSINFO=$(yad --center --form --width=400 --height=400 --separator="|" --item-separator="|" \ --image ${LOGO} --column=Check --column=App --column=Description \ --window-icon=${LOGO} --image-on-top --text-align=center \ --text="HotSpot Information\r\rPlease enter the information\rbelow \ for the Hot Spot\rNOTE: The last field is the password for the hotspot. You will use this password to \ connect to your Pi when it is in hotspot mode This password can only contain letters and numbers" \ --title="Build-a-Pi" \ --field="Home Wifi SSID":CB "${LIST}" \ --field="Home Wifi Password" \ --field="Hot Spot Password" \ --button="Exit":1 \ --button="Continue":2 \ --button="Refresh Wifi":3) #} THIS IS WHERE ORIGINAL FUNCTION STOPPED################ #HSINFO SEE COMMENT PREVIOUS LINE BUT=$? if [ ${BUT} = 3 ]; then HSINFO #Call HSINFO function fi if [ ${BUT} = 252 ] || [ ${BUT} = 1 ]; then exit fi } #THIS IS NEW FUNCTION END FOR TESTING#################### HSINFO fi SHACKSSID=$(echo $HSINFO | awk -F "|" '{print $1}') SHACKPASS=$(echo $HSINFO | awk -F "|" '{print $2}') HSPASS=$(echo $HSINFO | awk -F "|" '{print $3}') #Check password length if [ -n "$HS" ]; then COUNT=${#HSPASS} if [ $COUNT -lt 8 ]; then yad --center --form --width=300 --height=200 --separator="|" \ --image ${LOGO} --column=Check --column=App --column=Description \ --window-icon=${LOGO} --image-on-top --text-align=center \ --text="Hotspot password has to be 8-63 characters" --title="Build-a-Pi" \ --button=gtk-ok HSINFO fi fi echo "SHACKSSID=${SHACKSSID}" >>${CONFIG} echo "SHACKPASS=${SHACKPASS}" >>${CONFIG} echo "HSPASS=${HSPASS}" >>${CONFIG} ################################### #CHECK IF GPS IS CHOSEN TO INSTALL# ################################### GPSINSTALL=$(cat ${BASE} | grep GPS) if [ -n "${GPSINSTALL}" ]; then yad --center --height="300" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \ --image ${LOGO} --window-icon=${LOGO} --image-on-top \ --text="\r\r\r\r\rConnect your GPS to the pi" \ --button="Exit":1 \ --button="Continue":2 BUT=$? if [ ${BUT} = 1 ] || [ ${BUT} = 252 ]; then exit fi USB=$(ls /dev/serial/by-id) USB=$(echo $USB | sed "s/\s/|/g") GPS=$(yad --center --height="600" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \ --image ${LOGO} --window-icon=${LOGO} --image-on-top \ --text="Choose Your GPS" \ --field="GPS":CB "$USB") BUT=$? if [ ${BUT} = 252 ] || [ ${BUT} = 1 ]; then echo exiting exit fi GPS=$(echo ${GPS} | awk -F "|" '{print $1}') GPS=/dev/serial/by-id/${GPS} echo "GPS=${GPS}" >>${CONFIG} fi #----------------------------------------------------# # FLSUITE APP MENU #----------------------------------------------------# yad --center --list --checklist --width=600 --height=600 --separator="" \ --image ${LOGO} --column=Check --column=App --column=status --column=description --print-column=2 \ --window-icon=${LOGO} --image-on-top --text-align=center \ --text="FLDIGI Suite" --title="Update" \ false "FLRIG" "${FLRIG}" "Rig Control GUI" \ false "FLDIGI" "${FLDIGI}" "Digital Software" \ false "FLAMP" "${FLAMP}" "File Transfer Program" \ false "FLNET" "${FLNET}" "Net Control Software" \ false "FLMSG" "${FLMSG}" "Form Manager" \ false "FLWRAP" "${FLWRAP}" "File Encapsulation" \ --button="Exit":1 \ --button="Next":2 >${FLSUITE} BUT=$? if [ ${BUT} = 1 ] || [ ${BUT} = 252 ]; then exit fi #----------------------------------------------------# # HAM APP MENU #----------------------------------------------------# yad --center --list --checklist --width=600 --height=600 --separator="" \ --image ${LOGO} --column=Check --column=App --column=status --column=description --print-column=2 \ --window-icon=${LOGO} --image-on-top --text-align=center \ --text="HAM Apps" --title="Update" \ false "PAT" "$PAT" "Radio Email Application" \ false "PAT-MENU" "$PATMENU" "Control for Pat Winlink" \ false "CHIRP" "$CHIRP" "Program Radios" \ false "GARIM" "$GARIM" "File Transfer Program " \ false "M0IAX" "$M0IAX" "Tools for JS8Call messages" \ false "CONKY" "$CONKY" "System Information Display" \ false "WSJTX" "$FT8" "Weak signal digital mode software" \ false "JS8CALL" "$JS8" "Weak signal digital mode software" \ false "XASTIR" "$XASTIR" "APRS Client" \ false "YAAC" "$YAAC" "Yet Another APRS Client" \ false "PI-APRS" "$PIAPRS" "APRS Messaging Client" \ false "PYQSO" "$PYQSO" "Logging Software" \ false "CQRLOG" "$CQRLOG" "Logging Software" \ false "XLOG" "$XLOG" "Logging Software" \ false "HAMRS" "$HAMRS" "Logging Software" \ false "QSSTV" "$QSSTV" "Slow scan TV" \ false "GRIDTRACKER" "$GRIDTRACK" "Track grids in WSJTX" \ false "HAMCLOCK" "$HAMCLOCK" "Clock for Ham Radio Ops" \ false "PROPAGATION" "$PROP" "Propagation prediction" \ false "EES" "$EES" "KM4ACK Emergency Email Server" \ false "GPREDICT" "$GPREDICT" "Satellite Tracking" \ false "TQSL" "$TQSL" "LOTW Software" \ false "GRIDCALC" "$GRIDCALC" "Grid Calculation Software" \ --button="Exit":1 \ --button="Next":2 >${ADDITIONAL} BUT=$? if [ ${BUT} = 1 ] || [ ${BUT} = 252 ]; then exit fi #check if hamclock is being installed HCCHECK=$(cat ${ADDITIONAL} | grep HAMCLOCK) if [ -n "$HCCHECK" ]; then HC=$(yad --form --width=420 --text-align=center --center --title="Build-a-Pi" \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text="version $VERSION" \ --field="Ham Clock Size":CB "SMALL|LARGE" \ --button="Continue":2) HC=$(echo $HC | awk -F "|" '{print $1}') sed -i 's/HAMCLOCK//' ${ADDITIONAL} echo $HC >>${ADDITIONAL} fi PATCHECK=$(cat ${ADDITIONAL} | grep PAT) if [ -n "$PATCHECK" ]; then INFO=$(yad --form --width=420 --text-align=center --center --title="Build-a-Pi" \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text="version $VERSION" \ --field="Six Character Grid Square" "$GRID" \ --field="Winlink Password" \ --field="Password is case sensitive":LBL \ --button="Continue":2) GRID=$(echo $INFO | awk -F "|" '{print $1}') GRID=${GRID^^} WL2KPASS=$(echo $INFO | awk -F "|" '{print $2}') echo "GRID=$GRID" >>${CONFIG} echo "WL2KPASS=\"$WL2KPASS\"" >>${CONFIG} fi #----------------------------------------------------# # UTILITIES MENU #----------------------------------------------------# yad --center --list --checklist --width=600 --height=600 --separator="" \ --image ${LOGO} --column=Check --column=App --column=status --column=description --print-column=2 \ --window-icon=${LOGO} --image-on-top --text-align=center \ --text="UTILITIES" --title="Update" \ false "DIPOLE" "$DIPOLE" "Dipole Calculator" \ false "PACKETSEARCH" "$PACKETSEARCH" "Winlink Packet Tool" \ false "CALLSIGN" "${CALL}SIGN" "Call Sign Lookup Utility" \ false "TEMPCONVERT" "$TEMPCONVERT" "Temperature Converter" \ false "GPARTED" "$GPARTED" "Disk Utility Application" \ false "RTC" "$RTC" "Real Time Clock" \ false "SHOWLOG" "$SHOWLOG" "Log File Viewer" \ false "PISTATS" "$PISTATS" "Pi3/4 Stats Monitor" \ false "TELNET" "$TEL" "Telnet Protocol" \ false "PITERM" "$PITERM" "PiQTermTCP Terminal Program" \ false "QTSOUND" "$QTSOUND" "PiQtSoundModem" \ false "SECURITY" "$SECURITY" "File Encryption Software" \ false "YGATE" "$YGATE" "Yaesu APRS Software" \ false "BPQ" "$BPQ" "LinBPQ Software" \ false "BATT" "$BATT" "Battery Test Script" \ false "VNC" "$VNC" "VNC Viewer Application" \ false "ZYGRIB" "$ZYGRIB" "Grib File Viewer" \ --button="Exit":1 \ --button="Install/Update Selected":2 >${UTILITY} BUT=$? if [ ${BUT} = 1 ] || [ ${BUT} = 252 ]; then exit fi #check and exit if nothing selected CKBASE=$(cat ${BASE}) CKFL=$(cat ${FLSUITE}) CKADD=$(cat ${ADDITIONAL}) CKUTIL=$(cat ${UTILITY}) if [ -z "$CKBASE" ] && [ -z "$CKFL" ] && [ -z "$CKADD" ] && [ -z "$CKUTIL" ]; then rm ${BASE} ${FLSUITE} ${ADDITIONAL} ${UTILITY} >/dev/null 2>&1 yad --width=550 --height=250 --text-align=center --center --title="Update" \ --image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \ --text="\r\r\r\rNothing selected for install/update" \ --button="CLOSE":1 exit fi #backup crontab crontab -l >${TEMPCRON} echo "@reboot sleep 10 && export DISPLAY=:0 && ${MYPATH}/.complete" >>${TEMPCRON} #update/upgrade the system sudo apt-get -y update sudo apt-get -y upgrade sudo apt -y full-upgrade #create new menu subcategories. One for FLDIGI Suite and #one for Build a Pi. bash ${HOME}/pi-build/menu-update ##################################### # Install Base Apps ##################################### touch ${HOME}/.config/KM4ACK while read i; do source ${FUNCTIONS}/base.function $i done <${BASE} ##################################### # Install FLSUITE ##################################### source ${FUNCTIONS}/flsuite.function #perform memory increase if needed CHECKFL=$(cat ${MYPATH}/flsuite.txt) if [ -n "$CHECKFL" ]; then FLSTART fi touch ${HOME}/.config/KM4ACK while read i; do source ${FUNCTIONS}/flsuite.function $i done <${FLSUITE} source ${FUNCTIONS}/flsuite.function if [ -n "$CHECKFL" ]; then FLSTOP fi ##################################### # Install ADDITIONAL Apps ##################################### while read i; do source ${FUNCTIONS}/additional.function $i done <${ADDITIONAL} ##################################### # Install KM4ACK Utilites ##################################### while read i; do source ${FUNCTIONS}/utility.function $i done <${UTILITY} ##################################### # END CLEANUP ##################################### #Remove temp files rm ${BASE} ${ADDITIONAL} ${UTILITY} ${FLSUITE} >/dev/null 2>&1 #restore crontab crontab ${TEMPCRON} rm ${TEMPCRON} #reboot when done yad --width=400 --height=200 --title="Reboot" --image ${LOGO} \ --text-align=center --skip-taskbar --image-on-top \ --wrap --center --window-icon=${LOGO} \ --undecorated --text="Update Finished \rReboot Required\r\r" \ --button="Reboot Now":0 \ --button="Exit":1 BUT=$(echo $?) if [ ${BUT} = 0 ]; then echo rebooting sudo reboot elif [ ${BUT} = 1 ]; then exit fi