pi-build/build-a-pi

553 wiersze
15 KiB
Plaintext
Czysty Zwykły widok Historia

2020-06-14 14:06:04 +00:00
##################################################################
# #
# # # # # # # ##### # # #
# # # # # # # ## # # # # # #
# # # # # # # # # # # # # #
# ## # # ##### ####### # ## #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # ##### # # #
# #
##################################################################
2020-06-20 12:00:37 +00:00
#20200620
2019-12-24 20:57:51 +00:00
2020-02-24 12:11:05 +00:00
DESK=$(printenv | grep DISPLAY)
2020-06-14 14:06:04 +00:00
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=//')
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
FINISH(){
if [ -f "$BASE" ]; then
rm $BASE
2020-02-24 12:11:05 +00:00
fi
2020-02-20 13:21:41 +00:00
2020-06-14 14:06:04 +00:00
if [ -f "$ADDITIONAL" ]; then
rm $ADDITIONAL
fi
2020-02-20 13:21:41 +00:00
2020-06-14 14:06:04 +00:00
if [ -f "$FLSUITE" ]; then
rm $FLSUITE
fi
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
if [ -f "$UTILITY" ]; then
rm $UTILITY
2019-12-26 23:52:35 +00:00
fi
2020-06-14 14:06:04 +00:00
}
trap FINISH EXIT
2019-12-26 23:52:35 +00:00
2020-06-14 14:06:04 +00:00
#check for display. can't run from SSH
if [ -z "$DESK" ]
2019-12-24 20:57:51 +00:00
then
2020-02-20 13:21:41 +00:00
cat <<EOF
2020-06-14 14:06:04 +00:00
This script cannot be run from an SSH session.
Please boot into the pi's desktop environment,
open the terminal, and run this script again
2020-02-20 13:21:41 +00:00
EOF
2020-06-14 14:06:04 +00:00
exit 0
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
#install YAD & jq as needed
2019-12-24 20:57:51 +00:00
clear;echo;echo
2020-06-14 14:06:04 +00:00
echo "#######################################"
echo "# Updating repository & installing #"
echo "# a few needed items before we begin #"
echo "#######################################"
2019-12-24 20:57:51 +00:00
sudo apt-get update
if ! hash yad 2>/dev/null; then
sudo apt install -y yad
fi
2019-12-30 16:44:49 +00:00
if ! hash jq 2>/dev/null; then
sudo apt install -y jq
fi
2020-06-14 14:06:04 +00:00
#####################################
# Check if run before
#####################################
if [ -n "$RB" ]; then
bash $MYPATH/update &
exit
2020-02-20 13:21:41 +00:00
fi
2020-06-14 14:06:04 +00:00
#####################################
# 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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
#####################################
# 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
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
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
2020-02-21 15:34:17 +00:00
fi
2020-06-14 14:06:04 +00:00
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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
}
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="<b>Call Can't be Blank</b>" \
--button=gtk-ok
CALL
2020-02-29 17:34:38 +00:00
fi
2020-06-14 14:06:04 +00:00
#####################################
# 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
2020-02-20 13:21:41 +00:00
fi
2020-06-14 14:06:04 +00:00
if [ $BUT = 3 ]; then
BASEAPPS=(HOTSPOT HSTOOLS GPS ARDOP ARDOPGUI HAMLIB DIREWOLF AX25 PULSE)
for i in "${BASEAPPS[@]}"
do
echo "$i" >> $BASE
done
2019-12-24 20:57:51 +00:00
fi
2020-07-07 11:55:05 +00:00
#############################################################
#check if hotspot is chosen for install & get info if needed#
#############################################################
2020-06-14 14:06:04 +00:00
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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
exit
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
#}
#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 --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
2019-12-24 20:57:51 +00:00
fi
fi
2020-06-14 14:06:04 +00:00
}
HSINFO
2020-01-04 00:17:03 +00:00
fi
2020-06-14 14:06:04 +00:00
echo "SHACKSSID=$SHACKSSID" >> $CONFIG
echo "SHACKPASS=\"$SHACKPASS\"" >> $CONFIG
echo "HSPASS=\"$HSPASS\"" >> $CONFIG
2020-07-07 11:55:05 +00:00
###################################
#CHECK IF GPS IS CHOSEN TO INSTALL#
###################################
GPSINSTALL=$(cat $BASE | grep GPS)
2020-07-07 12:59:22 +00:00
if [ -n "$GPSINSTALL" ]; then
2020-07-07 11:55:05 +00:00
USB=$(ls /dev/serial/by-id)
USB=$(echo $USB | sed "s/\s/|/g")
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\r<b><big>Connect your GPS to the pi</big></b>" \
--button="Exit":1 \
--button="Continue":2
BUT=$?
if [ $BUT = 1 ] || [ $BUT = 252 ]; then
exit
fi
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
2020-06-14 14:06:04 +00:00
#####################################
# 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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
if [ $BUT = 3 ]; then
FLAPPS=(FLRIG FLDIGI FLAMP FLNET FLMSG FLWRAP)
for i in "${FLAPPS[@]}"
do
echo "$i" >> $FLSUITE
done
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
#####################################
# 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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
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)
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
for i in "${ADDAPPS[@]}"
do
echo "$i" >> $ADDITIONAL
done
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
#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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
#####################################
# 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
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
if [ $BUT = 3 ]; then
UTILAPPS=(DIPOLE CALLSIGN TEMPCONVERT GPARTED SHOWLOG)
for i in "${UTILAPPS[@]}"
do
echo "$i" >> $UTILITY
done
2019-12-24 20:57:51 +00:00
fi
2020-06-14 14:06:04 +00:00
#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
2020-01-01 00:13:39 +00:00
2020-06-15 11:38:43 +00:00
#set wallpaper
pcmanfm --set-wallpaper $HOME/pi-build/bap-wallpaper.jpg
2019-12-30 00:33:53 +00:00
#add virtual sound card link for pulse audio
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
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
#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
2020-02-20 13:21:41 +00:00
sudo apt-get install -y extra-xdg-menus
2020-06-14 14:06:04 +00:00
#setup bin dir and put in path
mkdir -p $HOME/bin
echo "export PATH=$PATH:$HOME/bin" >> $HOME/.bashrc
2020-02-20 13:21:41 +00:00
2020-06-14 14:06:04 +00:00
#set update script to exec
chmod +x $MYPATH/update $MYPATH/build-a-pi
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
#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
2020-02-20 13:21:41 +00:00
2020-06-14 14:06:04 +00:00
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
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
#####################################
# Install ADDITIONAL Apps
#####################################
while read i ; do
source $FUNCTIONS/additional.function
$i
done < $ADDITIONAL
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
#####################################
# Install KM4ACK Utilites
#####################################
while read i ; do
source $FUNCTIONS/utility.function
$i
done < $UTILITY
2019-12-24 20:57:51 +00:00
2020-06-14 14:06:04 +00:00
#####################################
# 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 $?)
if [ $BUT = 0 ]; then
echo rebooting
sudo reboot
elif [ $BUT = 1 ]; then
exit
fi
2019-12-24 20:57:51 +00:00
2020-01-10 22:31:54 +00:00