kopia lustrzana https://github.com/km4ack/pi-build
update
rodzic
df4976442a
commit
533ed06863
920
build-a-pi
920
build-a-pi
|
@ -1,22 +1,60 @@
|
|||
#!/bin/bash
|
||||
##################################################################
|
||||
# #
|
||||
# # # # # # # ##### # # #
|
||||
# # # # # # # ## # # # # # #
|
||||
# # # # # # # # # # # # # #
|
||||
# ## # # ##### ####### # ## #
|
||||
# # # # # # # # # # # #
|
||||
# # # # # # # # # # # #
|
||||
# # # # # # # # ##### # # #
|
||||
# #
|
||||
##################################################################
|
||||
|
||||
|
||||
|
||||
#####################################################
|
||||
# DEV NOTES
|
||||
#####################################################
|
||||
#add log viewer
|
||||
#####################################################
|
||||
|
||||
#MAIN SCRIPT FOR NEW PI BUILD
|
||||
#20191210 KM4ACK
|
||||
#Credit to TB-14 for the inspiration for this script
|
||||
|
||||
MYDIR=$HOME/pi-build
|
||||
DIR=$HOME/temp
|
||||
mkdir -p $DIR
|
||||
TEMPCRON=$DIR/tempcron
|
||||
touch $TEMPCRON
|
||||
WHO=$(whoami)
|
||||
RB=$(ls $HOME/.config/ | grep KM4ACK)
|
||||
DESK=$(printenv | grep DISPLAY)
|
||||
LOG=$HOME/Documents/mylog.txt
|
||||
APPLIST=app-list
|
||||
BUILDLOG=$HOME/Documents/build-log.txt
|
||||
chmod +x $MYDIR/addon-build-a-pi
|
||||
MYPATH=$HOME/pi-build
|
||||
LOGO=$MYPATH/logo.png
|
||||
RB=$( ls $HOME/.config | grep KM4ACK)
|
||||
BASE=$MYPATH/base.txt
|
||||
ADDITIONAL=$MYPATH/additional.txt
|
||||
UTILITY=$MYPATH/utility.txt
|
||||
FLSUITE=$MYPATH/flsuite.txt
|
||||
CONFIG=$MYPATH/config
|
||||
FUNCTIONS=$MYPATH/functions
|
||||
TEMPCRON=$MYPATH/cron.tmp
|
||||
DIR=$MYPATH/temp
|
||||
WHO=$(whoami)
|
||||
VERSION=$(cat $MYPATH/changelog | grep version= | 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
|
||||
|
||||
#check for display. can't run from SSH
|
||||
if [ -z "$DESK" ]
|
||||
then
|
||||
cat <<EOF
|
||||
|
@ -27,71 +65,13 @@ EOF
|
|||
exit 0
|
||||
fi
|
||||
|
||||
#put info in build log
|
||||
echo "###########SYSTEM INFO##############" >> $BUILDLOG
|
||||
cat /etc/os-release >> $BUILDLOG
|
||||
uname -a >> $BUILDLOG
|
||||
free -m | grep Mem: | awk '{ print $2 }' >> $BUILDLOG
|
||||
echo "###########END SYSTEM INFO##############" >> $BUILDLOG
|
||||
|
||||
#Backup cron just in case script is run twice
|
||||
crontab -l > $TEMPCRON
|
||||
#add part 2 to be called from cron at boot
|
||||
echo "@reboot sleep 20 && export DISPLAY=:0 && lxterminal -e $HOME/pi-build/addon-build-a-pi" >> $TEMPCRON
|
||||
|
||||
#create primary log
|
||||
touch $LOG
|
||||
#create buld log
|
||||
touch $BUILDLOG
|
||||
|
||||
if [ $WHO = "root" ]
|
||||
then
|
||||
echo "No need for sudo with this script"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$RB" ]
|
||||
then
|
||||
echo
|
||||
else
|
||||
cat <<EOF
|
||||
It looks like you have run this script before
|
||||
It is only designed to be run one time
|
||||
It may cause issues if you try to run multiple times
|
||||
Press CRTL+C to exit or
|
||||
EOF
|
||||
read -n 1 -s -r -p "Press any key to continue"
|
||||
fi
|
||||
|
||||
|
||||
#install YAD & jq as needed
|
||||
clear;echo;echo
|
||||
read -p "What is your call sign? " CALL
|
||||
touch $MYDIR/callsign.txt
|
||||
echo $CALL > $MYDIR/callsign.txt
|
||||
cat <<EOF
|
||||
Please stand by while we grab a few updates
|
||||
This may take a while if you haven't already
|
||||
updated the system. You will be presented with
|
||||
a pop up window shortly to select which
|
||||
applications you wish to install.
|
||||
|
||||
EOF
|
||||
read -n 1 -s -r -p "Press any key to begin"
|
||||
|
||||
echo "#######################################"
|
||||
echo "# Updating repository & installing #"
|
||||
echo "# a few needed items before we begin #"
|
||||
echo "#######################################"
|
||||
sudo apt-get update
|
||||
sudo apt-get -y upgrade
|
||||
sudo apt -y full-upgrade
|
||||
touch $HOME/.config/KM4ACK
|
||||
|
||||
#create bin dir and add to path
|
||||
mkdir -p $HOME/bin
|
||||
echo "export PATH=$PATH:$HOME/bin" >> $HOME/.bashrc
|
||||
#grab add-wifi tool
|
||||
cd $HOME/bin
|
||||
wget https://raw.githubusercontent.com/km4ack/pi-scripts/master/add-wifi
|
||||
chmod +x add-wifi
|
||||
cd $HOME
|
||||
|
||||
if ! hash yad 2>/dev/null; then
|
||||
sudo apt install -y yad
|
||||
fi
|
||||
|
@ -99,456 +79,440 @@ cd $HOME
|
|||
sudo apt install -y jq
|
||||
fi
|
||||
|
||||
clear;echo;echo
|
||||
cat <<EOF
|
||||
Decision time......
|
||||
The FLDIGI suite can be built from source or downloaded from the
|
||||
repository. Building from source will give you the very latest and
|
||||
greatest FLDIGI suite. It will also add roughly an hour to the
|
||||
build time of this script. If you choose to build from
|
||||
source, many of FLDIGI tools will be installed. The
|
||||
tools this script includes is FLRIG, FLDIGI, FLARQ, FLMSG, FLAMP.
|
||||
#####################################
|
||||
# Check if run before
|
||||
#####################################
|
||||
if [ -n "$RB" ]; then
|
||||
bash $MYPATH/update &
|
||||
exit
|
||||
fi
|
||||
#####################################
|
||||
# Check user is pi
|
||||
#####################################
|
||||
if [ "$WHO" != 'pi' ]; then
|
||||
yad --form --width=500 --text-align=center --center --title="Build-a-Pi" --text-align=center \
|
||||
--image $LOGO --window-icon=$LOGO --image-on-top --separator="|" --item-separator="|" \
|
||||
--text="<b>USER NAME IS NOT PI</b>\rThis script is designed to be run as the pi user. Please set the user name to pi \
|
||||
and try again. You can change the user name after the build is complete but some configuration may not work \
|
||||
as expected" \
|
||||
--button=gtk-close
|
||||
exit 1
|
||||
fi
|
||||
#####################################
|
||||
# notice to user
|
||||
#####################################
|
||||
cat <<EOF > $MYPATH/intro.txt
|
||||
This script takes approximately 4 hours to complete
|
||||
if you choose to install everything. If you find it
|
||||
helpful please consider a donation to encourage future
|
||||
development.
|
||||
|
||||
https://paypal.me/km4ack
|
||||
EOF
|
||||
read -p "Build FL suite from source? y/n " FLS
|
||||
if [ $FLS = "y" ] || [ $FLS = "Y" ]
|
||||
then
|
||||
APPLIST=source-app-list
|
||||
|
||||
INTRO=$(yad --width=550 --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<$MYPATH/intro.txt \
|
||||
--button="Continue":2 > /dev/null 2>&1)
|
||||
BUT=$?
|
||||
if [ $BUT = 252 ]; then
|
||||
rm $MYPATH/intro.txt
|
||||
exit
|
||||
fi
|
||||
|
||||
##########################################
|
||||
MAIN () {
|
||||
yad --height=600 --width=400 --center --list --checklist --column=Install --column=App --separator="," --text "Select the apps you wish to install." --title="Build-a-Pi by KM4ACK" --button="Exit:1" --button="Install Selected:2" < $MYDIR/$APPLIST > $MYDIR/appchoices
|
||||
|
||||
BUTTON=$?
|
||||
|
||||
if [ $BUTTON = "3" ]
|
||||
then
|
||||
yad --width=500 --height=500 --center --button="Close:1" --wrap --text-info < info.txt
|
||||
MAIN
|
||||
elif [ $BUTTON = "252" ]
|
||||
then
|
||||
exit 0
|
||||
elif [ $BUTTON = "1" ]
|
||||
then
|
||||
exit 0
|
||||
rm $MYPATH/intro.txt
|
||||
#####################################
|
||||
# Get User Call
|
||||
#####################################
|
||||
CALL(){
|
||||
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="<b>version $VERSION</b>" \
|
||||
--field="Call Sign*" \
|
||||
--field="<b>* Required</b>":LBL \
|
||||
--button="Continue":2)
|
||||
BUT=$?
|
||||
if [ $BUT = 252 ]; then
|
||||
exit
|
||||
fi
|
||||
}
|
||||
CALL
|
||||
CALL=$(echo $INFO | awk -F "|" '{print $1}')
|
||||
CALL=${CALL^^}
|
||||
|
||||
echo $BUTTON
|
||||
echo "CALL=$CALL" > $CONFIG
|
||||
|
||||
cat $MYDIR/appchoices | sed 's/TRUE,//g' | sed 's/,//' | sed 's/$/=yes/' > $MYDIR/config
|
||||
rm $MYDIR/appchoices
|
||||
};export -f MAIN
|
||||
|
||||
MAIN
|
||||
|
||||
############################################################################
|
||||
|
||||
source $MYDIR/config
|
||||
|
||||
if [ $RTC = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
sudo sed -i 's/#dtparam=i2c_arm=on/dtparam=i2c_arm=on/' /boot/config.txt
|
||||
touch $HOME/RTC
|
||||
#NOTE: Reboot is required before we can install. We are simply enabling i2c interface &
|
||||
#writing an emptyfile that we can check for in the second part of the install
|
||||
fi
|
||||
|
||||
if [ $HOTSPOT = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING AUTOHOTSPOT"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
cd $DIR
|
||||
wget https://raw.githubusercontent.com/km4ack/pi-scripts/master/autohotspotN-setup || echo "Can't download autohotspot script" >> $BUILDLOG
|
||||
chmod +x $DIR/autohotspotN-setup
|
||||
sudo $DIR/autohotspotN-setup
|
||||
echo "*/5 * * * * sudo /usr/bin/autohotspotN >/dev/null 2>&1" >> $TEMPCRON
|
||||
rm $DIR/autohotspotN-setup
|
||||
echo "Hot spot installed" >> $BUILDLOG
|
||||
fi
|
||||
|
||||
if [ $HSTOOLS = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING HOTSPOT TOOLS"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
git clone https://github.com/km4ack/hotspot-tools.git $HOME/hotspot-tools
|
||||
cd $HOME/hotspot-tools
|
||||
git checkout dev
|
||||
bash setup
|
||||
#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="<b>Call Can't be Blank</b>" \
|
||||
--button=gtk-ok
|
||||
CALL
|
||||
fi
|
||||
|
||||
|
||||
if [ $GPS = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING GPS Tools"
|
||||
echo "##################################################"
|
||||
cd $DIR
|
||||
wget https://raw.githubusercontent.com/km4ack/pi-scripts/master/gpsinstall || echo "Can't download GPS Tools" >> $BUILDLOG
|
||||
chmod +x $DIR/gpsinstall
|
||||
sudo $DIR/gpsinstall
|
||||
rm $DIR/gpsinstall
|
||||
echo "GPS Tools installed" >> $BUILDLOG
|
||||
#####################################
|
||||
# Base Apps
|
||||
#####################################
|
||||
yad --center --list --checklist --width=600 --height=600 --separator="" \
|
||||
--image $LOGO --column=Check --column=App --column=Description \
|
||||
--print-column=2 --window-icon=$LOGO --image-on-top --text-align=center \
|
||||
--text="<b>Base Applications</b>" --title="Build-a-Pi" \
|
||||
false "HOTSPOT" "Hot Spot Generator for Portable Ops" \
|
||||
false "HSTOOLS" "Tools to Manage Hot Spot" \
|
||||
false "GPS" "GPS Software" \
|
||||
false "ARDOP" "Modem for HF" \
|
||||
false "ARDOPGUI" "GUI for ARDOP" \
|
||||
false "HAMLIB" "Needed for Rig Control" \
|
||||
false "DIREWOLF" "Software TNC" \
|
||||
false "AX25" "Data Link Layer Protocol" \
|
||||
false "PULSE" "Sound Server" \
|
||||
--button="Exit":1 \
|
||||
--button="Check All and Continue":3 \
|
||||
--button="Next":2 > $BASE
|
||||
BUT=$?
|
||||
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ $PAT = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING PAT WINLINK"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
if ! hash pat 2>/dev/null; then
|
||||
cd $DIR
|
||||
wget https://github.com/la5nta/pat/releases/download/v0.9.0/pat_0.9.0_linux_armhf.deb || echo "Can't download Pat Winlink" >> $BUILDLOG
|
||||
sudo dpkg -i $DIR/pat_0.9.0_linux_armhf.deb
|
||||
pat http &
|
||||
sudo killall pat
|
||||
sudo systemctl start pat@$WHO
|
||||
sudo systemctl enable pat@$WHO
|
||||
#/usr/bin/pat http &
|
||||
#sudo killall pat
|
||||
cd $DIR
|
||||
wget https://raw.githubusercontent.com/km4ack/patmenu/master/patlogin
|
||||
bash patlogin
|
||||
jq '.ax25.rig = '\"my-rig\"'' $HOME/.wl2k/config.json | jq '.ardop.rig = '\"my-rig\"'' | jq '.hamlib_rigs = {'\"my-rig\"': {"address": "127.0.0.1:4532", "network": "tcp"}}' > ~/Desktop/config.json
|
||||
mv ~/Desktop/config.json ~/.wl2k/config.json
|
||||
sed -i "s/\"http_addr\": \".*\",/\"http_addr\": \"0.0.0.0:8080\",/" $HOME/.wl2k/config.json
|
||||
#enable gps in pat is gps=yes
|
||||
if [ $GPS = "yes" ]
|
||||
if [ $BUT = 3 ]; then
|
||||
BASEAPPS=(HOTSPOT HSTOOLS GPS ARDOP ARDOPGUI HAMLIB DIREWOLF AX25 PULSE)
|
||||
for i in "${BASEAPPS[@]}"
|
||||
do
|
||||
echo "$i" >> $BASE
|
||||
done
|
||||
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')
|
||||
LIST=$(sudo iw dev "wlan0" scan ap-force | egrep "^BSS|SSID:" | grep SSID: | sed 's/SSID://')
|
||||
LIST=$(echo "$LIST" | tr '\n' '|')
|
||||
|
||||
|
||||
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="<b>HotSpot Information\r\rPlease enter the information\rbelow \
|
||||
for the Hot Spot\r</b>NOTE: 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 <b>This password can only contain letters and numbers</b>" \
|
||||
--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)
|
||||
BUT=$?
|
||||
if [ $BUT = 3 ];then
|
||||
HSINFO #Call HSINFO function
|
||||
fi
|
||||
|
||||
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
|
||||
exit
|
||||
fi
|
||||
#}
|
||||
#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
|
||||
sed -i 's/"enable_http": false,/"enable_http": true,/' $HOME/.wl2k/config.json
|
||||
fi
|
||||
echo "Pat Winlink installed" >> $BUILDLOG
|
||||
yad --center --form --width=300 --height=200 --separator="|" \
|
||||
--image $LOGO --window-icon=$LOGO --image-on-top --text-align=center \
|
||||
--text="<b>Hotspot password has to be 8-63 characters</b>" --title="Build-a-Pi" \
|
||||
--button=gtk-ok
|
||||
HSINFO
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $HAMLIB = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING RIG CONTROL"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
cd $DIR
|
||||
wget https://sourceforge.net/projects/hamlib/files/hamlib/3.3/hamlib-3.3.tar.gz || echo "Can't download HAMLIB" >> $BUILDLOG
|
||||
tar -xzf $DIR/hamlib-3.3.tar.gz
|
||||
rm $DIR/hamlib-3.3.tar.gz
|
||||
cd $DIR/hamlib-3.3
|
||||
./configure
|
||||
make
|
||||
sudo make install
|
||||
sudo ldconfig
|
||||
echo "HAMLIB installed" >> $BUILDLOG
|
||||
}
|
||||
HSINFO
|
||||
fi
|
||||
|
||||
if [ $CONKY = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING CONKY"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
if ! hash conky 2>/dev/null; then
|
||||
sudo apt install -y conky
|
||||
fi
|
||||
sudo apt-get install -y ruby2.3
|
||||
sudo gem install gpsd_client
|
||||
sudo gem install maidenhead
|
||||
cp $MYDIR/conky/.conkyrc $HOME/.conkyrc
|
||||
mkdir -p $HOME/bin/conky
|
||||
cp $MYDIR/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
|
||||
echo "@reboot sleep 20 && export DISPLAY=:0 && /usr/bin/conky" >> $TEMPCRON
|
||||
echo "CONKY installed" >> $BUILDLOG
|
||||
echo "SHACKSSID=$SHACKSSID" >> $CONFIG
|
||||
echo "SHACKPASS=\"$SHACKPASS\"" >> $CONFIG
|
||||
echo "HSPASS=\"$HSPASS\"" >> $CONFIG
|
||||
|
||||
#####################################
|
||||
# FLSUITE
|
||||
#####################################
|
||||
yad --center --list --checklist --width=600 --height=600 --separator="" \
|
||||
--image $LOGO --column=Check --column=App --column=Description \
|
||||
--print-column=2 --window-icon=$LOGO --image-on-top --text-align=center \
|
||||
--text="<b>FLDIGI Suite</b>" --title="Build-a-Pi" \
|
||||
false "FLRIG" "Rig Contol GUI" \
|
||||
false "FLDIGI" "Digital Software" \
|
||||
false "FLAMP" "File Transfer Program" \
|
||||
false "FLNET" "Net Control Software" \
|
||||
false "FLMSG" "Forms Manager" \
|
||||
false "FLWRAP" "File Encapsulation" \
|
||||
--button="Exit":1 \
|
||||
--button="Check All and Continue":3 \
|
||||
--button="Next":2 > $FLSUITE
|
||||
BUT=$?
|
||||
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
|
||||
exit
|
||||
fi
|
||||
if [ $BUT = 3 ]; then
|
||||
FLAPPS=(FLRIG FLDIGI FLAMP FLNET FLMSG FLWRAP)
|
||||
for i in "${FLAPPS[@]}"
|
||||
do
|
||||
echo "$i" >> $FLSUITE
|
||||
done
|
||||
fi
|
||||
|
||||
if [ $FL_Suite = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING FLDIGI SUITE"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
|
||||
chmod +x $HOME/pi-build/flsuite
|
||||
$HOME/pi-build/flsuite
|
||||
echo "FLDIGI SUITE installed" >> $BUILDLOG
|
||||
#####################################
|
||||
# Ham Apps
|
||||
#####################################
|
||||
yad --center --list --checklist --width=600 --height=600 --separator="" \
|
||||
--image $LOGO --column=Check --column=App --column=Description \
|
||||
--print-column=2 --window-icon=$LOGO --image-on-top --text-align=center \
|
||||
--text="<b>Ham Applications</b>" --title="Build-a-Pi" \
|
||||
false "CONKY" "System Information Display" \
|
||||
false "PI-APRS" "APRS Message Application" \
|
||||
false "CHIRP" "Program Radios" \
|
||||
false "GARIM" "File Transfer Program" \
|
||||
false "PAT" "Radio Email Application" \
|
||||
false "PAT-MENU" "Control for Pat Winlink" \
|
||||
false "JS8CALL" "Weak Signal Digital Mode Software" \
|
||||
false "M0IAX" "Tools for JS8Call Messages" \
|
||||
false "WSJTX" "Weak Signal Digital Mode Software" \
|
||||
false "PYQSO" "Logging Software" \
|
||||
false "CQRLOG" "Logging Software" \
|
||||
false "EES" "KM4ACK Emergency Email Server" \
|
||||
false "QSSTV" "Slow Scan TV" \
|
||||
false "GRIDTRACKER" "Track Grids in WSJTX" \
|
||||
false "HAMCLOCK" "Clock for Ham Radio Ops" \
|
||||
false "PROPAGATION" "Propagation Prediction Software" \
|
||||
false "YAAC" "Yet Another APRS Client" \
|
||||
false "XASTIR" "APRS Client" \
|
||||
--button="Exit":1 \
|
||||
--button="Check All and Continue":3 \
|
||||
--button="Next":2 > $ADDITIONAL
|
||||
BUT=$?
|
||||
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ $FLRIG = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING FLRIG"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
if ! hash flrig 2>/dev/null; then
|
||||
sudo apt install -y flrig
|
||||
echo "FLRIG installed repository" >> $BUILDLOG
|
||||
fi
|
||||
if [ $BUT = 3 ]; then
|
||||
ADDAPPS=(CONKY PI-APRS CHIRP GARIM PAT PAT-MENU JS8CALL M0IAX WSJTX PYQSO \
|
||||
CQRLOG EES QSSTV GRIDTRACKER HAMCLOCK PROPAGATION YAAC XASTIR)
|
||||
|
||||
for i in "${ADDAPPS[@]}"
|
||||
do
|
||||
echo "$i" >> $ADDITIONAL
|
||||
done
|
||||
fi
|
||||
|
||||
if [ $FLDIGI = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING FLDIGI"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
if ! hash fldigi 2>/dev/null; then
|
||||
sudo apt install -y fldigi
|
||||
echo "FLDIGI installed repository" >> $BUILDLOG
|
||||
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="<b>version $VERSION</b>" \
|
||||
--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
|
||||
|
||||
if [ $FLAMP = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING FLAMP"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
if ! hash flamp 2>/dev/null; then
|
||||
sudo apt install -y flamp
|
||||
echo "FLAMP installed repository" >> $BUILDLOG
|
||||
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="<b>version $VERSION</b>" \
|
||||
--field="Six Character Grid Square" \
|
||||
--field="Winlink Password" \
|
||||
--field="<b>Password is case sensitive</b>":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
|
||||
|
||||
if [ $FLMSG = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING FLMSG"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
if ! hash flmsg 2>/dev/null; then
|
||||
sudo apt install -y flmsg
|
||||
echo "FLMSG installed repository" >> $BUILDLOG
|
||||
fi
|
||||
#####################################
|
||||
# Utilities
|
||||
#####################################
|
||||
yad --center --list --checklist --width=600 --height=600 --separator="" \
|
||||
--image $LOGO --column=Check --column=App --column=Description \
|
||||
--print-column=2 --window-icon=$LOGO --image-on-top --text-align=center \
|
||||
--text="<b>Utilities</b>" --title="Build-a-Pi" \
|
||||
false "DIPOLE" "Dipole Calculator" \
|
||||
false "CALLSIGN" "Call sign lookup" \
|
||||
false "TEMPCONVERT" "Temperature Converter" \
|
||||
false "GPARTED" "Disk Utility Tool" \
|
||||
false "SHOWLOG" "Log file viewer" \
|
||||
--button="Exit":1 \
|
||||
--button="Check All and Continue":3 \
|
||||
--button="Install Selected":2 > $UTILITY
|
||||
BUT=$?
|
||||
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ $ARDOPC = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING PIARDOPC"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
mkdir -p $HOME/ardop
|
||||
cd $HOME/ardop
|
||||
wget https://www.cantab.net/users/john.wiseman/Downloads/Beta/piardopc || echo "Can't download PIARDOPC" >> $BUILDLOG
|
||||
sudo chmod +x $HOME/ardop/piardopc
|
||||
echo "PIARDOPC installed" >> $BUILDLOG
|
||||
if [ $BUT = 3 ]; then
|
||||
UTILAPPS=(DIPOLE CALLSIGN TEMPCONVERT GPARTED SHOWLOG)
|
||||
for i in "${UTILAPPS[@]}"
|
||||
do
|
||||
echo "$i" >> $UTILITY
|
||||
done
|
||||
fi
|
||||
|
||||
if [ $ARDOPGUI = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING ARDOP-GUI"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
mkdir -p $HOME/ardop
|
||||
cd $HOME/ardop
|
||||
wget https://www.cantab.net/users/john.wiseman/Downloads/Beta/piARDOP_GUI || echo "Can't download piARDOP_GUI" >> $BUILDLOG
|
||||
sudo chmod +x $HOME/ardop/piARDOP_GUI
|
||||
cat > ardopgui.desktop <<EOF
|
||||
[Desktop Entry]
|
||||
Name=ARDOP GUI
|
||||
GenericName=ARDOP GUI
|
||||
Comment=Graphical User Interface for ARDOP modem
|
||||
Exec=$HOME/ardop/piARDOP_GUI
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Network;HamRadio;
|
||||
EOF
|
||||
|
||||
sudo mv ardopgui.desktop /usr/share/applications/
|
||||
FILE=$HOME/.config/G8BPQ/ARDOP_GUI.conf
|
||||
mkdir -p $HOME/.config/G8BPQ
|
||||
touch $FILE
|
||||
echo "[General]" >> $FILE
|
||||
echo "Host=local" >> $FILE
|
||||
echo "Port=8515" >> $FILE
|
||||
echo "ARDOP-GUI installed" >> $BUILDLOG
|
||||
fi
|
||||
|
||||
if [ $PATMENU = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING Pat Menu"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
git clone https://github.com/km4ack/patmenu.git $HOME/patmenu && bash $HOME/patmenu/setup || echo "Can't download Pat Menu" >> $BUILDLOG
|
||||
echo "Pat Menu installed" >> $BUILDLOG
|
||||
cat > patmenu.desktop <<EOF
|
||||
[Desktop Entry]
|
||||
Name=Pat Menu
|
||||
GenericName=Amateur Radio Digital Modem
|
||||
Comment=Amateur Radio Sound Card Communications
|
||||
Exec=$HOME/patmenu/patmenu-new
|
||||
Icon=$HOME/patmenu/pat-logo.png
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Network;HamRadio;
|
||||
EOF
|
||||
|
||||
sudo mv patmenu.desktop /usr/share/applications/
|
||||
fi
|
||||
|
||||
if [ $DIREWOLF = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING DIREWOLF"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
cd $HOME
|
||||
git clone https://www.github.com/wb2osz/direwolf || echo "Can't download DIREWOLF" >> $BUILDLOG
|
||||
cd $HOME/direwolf
|
||||
sudo apt-get install -y libasound2-dev
|
||||
make
|
||||
sudo make install
|
||||
make install-conf
|
||||
sed -i "s/N0CALL/$CALL/" "$HOME/direwolf.conf"
|
||||
sed -i 's/# ADEVICE plughw:1,0/ADEVICE plughw:1,0/' $HOME/direwolf.conf
|
||||
echo "DIREWOLF installed" >> $BUILDLOG
|
||||
fi
|
||||
|
||||
if [ $AX25 = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING AX25"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
sudo apt-get install -y ax25-tools
|
||||
echo "wl2k "$CALL" 1200 255 7 Winlink" | sudo tee -a /etc/ax25/axports
|
||||
sudo apt-get install -y ax25-apps
|
||||
echo "AX25 tools installed" >> $BUILDLOG
|
||||
fi
|
||||
|
||||
if [ $JS8CALL = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING JS8CALL"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
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 $JS8LATE || echo "Can't Download JS8Call" >> $BUILDLOG
|
||||
sudo dpkg -i $JS8PKG
|
||||
sudo apt-get --fix-broken -y install
|
||||
sudo dpkg -i $JS8PKG
|
||||
echo "JS8Call installed" >> $BUILDLOG
|
||||
fi
|
||||
|
||||
if [ $PULSE = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING PULSE AUDIO"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
sudo apt-get install -y pulseaudio
|
||||
sudo apt-get install -y pavucontrol
|
||||
echo "Pulse audio installed" >> $BUILDLOG
|
||||
fi
|
||||
|
||||
if [ $M0IAX = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING M0IAX TOOLS"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
pip3 install gps
|
||||
pip3 install maidenhead
|
||||
pip3 install psutil
|
||||
pip3 install OSGridConverter
|
||||
cd $HOME/bin
|
||||
git clone https://github.com/m0iax/JS8CallUtilities_V2.git
|
||||
chmod +x $HOME/bin/JS8CallUtilities_V2/gpsdGPSListener.py $HOME/bin/JS8CallUtilities_V2.git/JS8CallUtils_v2.py
|
||||
mv $HOME/bin/JS8CallUtilities_V2/* $HOME/bin
|
||||
rm -rf JS8CallUtilities_V2
|
||||
|
||||
cat > js8tools.desktop <<EOF
|
||||
[Desktop Entry]
|
||||
Name=M0IAX JS8 Tools
|
||||
GenericName=M0IAX JS8 Tools
|
||||
Comment=GPS & Message Tool for JS8Call
|
||||
Exec=$HOME/bin/JS8CallUtils_v2.py
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Network;HamRadio;
|
||||
EOF
|
||||
|
||||
sudo mv js8tools.desktop /usr/share/applications/
|
||||
|
||||
echo "MOIAX tools installed" >> $BUILDLOG
|
||||
fi
|
||||
|
||||
if [ $WSJTX = "yes" ] > /dev/null 2>&1
|
||||
then
|
||||
echo;echo;echo
|
||||
echo "##################################################"
|
||||
echo "##########INSTALLING WSJTX"
|
||||
echo "##################################################"
|
||||
sleep 2
|
||||
cd $DIR
|
||||
wget --no-check-certificate https://physics.princeton.edu/pulsar/k1jt/wsjtx_2.1.0_armhf.deb || echo "Can't download WSJTX" >> $BUILDLOG
|
||||
sudo dpkg -i wsjtx_2.1.0_armhf.deb
|
||||
sudo apt-get --fix-broken -y install
|
||||
sudo dpkg -i wsjtx_2.1.0_armhf.deb
|
||||
echo "WSJTX installed" >> $BUILDLOG
|
||||
fi
|
||||
#backup crontab
|
||||
crontab -l > $TEMPCRON
|
||||
echo "@reboot sleep 10 && export DISPLAY=:0 && $MYPATH/.complete" >> $TEMPCRON
|
||||
$MYPATH/.funfacts &
|
||||
#upgrade the system
|
||||
sudo apt-get upgrade
|
||||
sudo apt -y full-upgrade
|
||||
|
||||
#add virtual sound card link for pulse audio
|
||||
#20191228
|
||||
cd $DIR
|
||||
cat > tempsound <<EOF
|
||||
pcm.pulse {
|
||||
type pulse
|
||||
}
|
||||
|
||||
ctl.pulse {
|
||||
type pulse
|
||||
}
|
||||
EOF
|
||||
sudo chown root:root tempsound
|
||||
sudo mv tempsound /etc/asound.conf
|
||||
#End 20191228 edits
|
||||
|
||||
|
||||
#mod sound card for Buster May 2020
|
||||
#so it will always load as card #2
|
||||
cd $DIR
|
||||
cat > tempsound <<EOF
|
||||
#Internal sound
|
||||
options snd-bcm2835 index=0
|
||||
|
||||
#USB soundcard
|
||||
options snd-usb-audio index=2
|
||||
EOF
|
||||
sudo chown root:root tempsound
|
||||
sudo mv tempsound /etc/modprobe.d/alsa.conf
|
||||
|
||||
#install ham radio menu
|
||||
sudo apt-get install -y extra-xdg-menus
|
||||
|
||||
#setup bin dir and put in path
|
||||
mkdir -p $HOME/bin
|
||||
echo "export PATH=$PATH:$HOME/bin" >> $HOME/.bashrc
|
||||
|
||||
#set update script to exec
|
||||
chmod +x $MYPATH/update $MYPATH/build-a-pi
|
||||
|
||||
#create build-a-pi menu item
|
||||
cd $MYPATH
|
||||
cat > build-a-pi.desktop <<EOF
|
||||
[Desktop Entry]
|
||||
Name=Build-a-Pi
|
||||
GenericName=KM4ACK Build-a-Pi
|
||||
Comment=Build-a-Pi App Manager
|
||||
Exec=$HOME/pi-build/update
|
||||
Icon=$HOME/pi-build/logo.png
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Settings;DesktopSettings;GTK;X-LXDE-Settings;
|
||||
EOF
|
||||
|
||||
sudo mv build-a-pi.desktop /usr/share/applications/
|
||||
|
||||
#####################################
|
||||
# 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
|
||||
#Perform memory reset if needed
|
||||
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
|
||||
rm -rf $DIR > /dev/null 2>&1
|
||||
rm -rf $HOME/Downloads/* > /dev/null 2>&1
|
||||
sudo apt -y autoremove
|
||||
|
||||
#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 --window-icon=$LOGO \
|
||||
--undecorated --text="<big><big><big><b>Build Finished \rReboot Required</b></big></big></big>\r\r" \
|
||||
--button="Reboot Now":0 \
|
||||
--button="Exit":1
|
||||
BUT=$(echo $?)
|
||||
|
||||
rm -rf $DIR
|
||||
|
||||
#clean up downloads dir
|
||||
rm -rf $HOME/Downloads/*
|
||||
|
||||
echo;echo;echo "rebooting in 5 seconds"
|
||||
sleep 5
|
||||
if [ $BUT = 0 ]; then
|
||||
echo rebooting
|
||||
sudo reboot
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
elif [ $BUT = 1 ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue