Merge pull request #24 from thetechprepper/feature/vara

Feature/vara
This commit is contained in:
thetechprepper
2025-02-11 10:33:34 -07:00
committed by GitHub
34 changed files with 1161 additions and 73 deletions
+1 -1
View File
@@ -79,7 +79,7 @@ USERS_GID=1981
# new users to other groups.
# This is the list of groups that new non-system users will be added to
# Default:
EXTRA_GROUPS="bluetooth dialout cdrom floppy audio video plugdev users"
EXTRA_GROUPS="bluetooth dialout cdrom floppy audio video plugdev tty users"
# If ADD_EXTRA_GROUPS is set to something non-zero, the EXTRA_GROUPS
# option above will be default behavior for adding new, non-system users
+6 -1
View File
@@ -1,6 +1,6 @@
# Author : Gaston Gonzalez
# Date : 23 April 2024
# Updated : 25 December 2024
# Updated : 1 February 2025
# Description : bash profile
# All user accounts should be in the 'et-data' group to allow data sharing with
@@ -29,3 +29,8 @@ echo -e "${NC}"
export ET_USER_CONFIG=${HOME}/.config/emcomm-tools/user.json
export ET_LOG_DIR=${HOME}/.local/share/emcomm-tools
# Export environment variables to support WINE installs for VARA
export WINARCH="win32"
export WINEPREFIX="$HOME/.wine32"
export WINEDEBUG=-all
+8
View File
@@ -6,6 +6,14 @@ AGWPaclen=80
AGWPort=8000
AGWTermCall=N0CALL
AGWToCalls=TTPBBS,
PTT=HAMLIB
PTTBAUD=0
PTTMode=17
PTTOnString=127.0.0.1
TermMode=0
VARAEnable=1
VARAFM=1
VARAHF=0
VARATermCall=N0CALL
YAPPPath=
singlemodeFormat=1
@@ -0,0 +1,19 @@
# Author : Gaston Gonzalez
# Date : 3 February 2025
# Purpose : User systemd unit file for EmComm Tools Winlink over packet
#
# Usage:
# Check status : systemctl --user status et-service-winlink-native-packet
# Start service : systemctl --user start et-service-winlink-native-packet
# Stop service : systemctl --user stop et-service-winlink-native-packet
# Reload this config : systemctl --user daemon-reload
[Unit]
Description=EmComm Tools Winlink native AX.25 packet service
[Service]
ExecStart=/opt/emcomm-tools/bin/et-winlink start-native-packet
Restart=no
[Install]
WantedBy=multi-user.target
+2
View File
@@ -0,0 +1,2 @@
*.exe
*.zip
+27
View File
@@ -0,0 +1,27 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 20 January 2025
# Updated : 1 February 2025
# Purpose : Install wine dependencies to support VARA install
set -e
source ./common-checks.sh
if [[ ! -e ${WINEPREFIX} ]]; then
winetricks \
--unattended \
--force \
winxp \
sound=alsa \
dotnet35sp1 \
vb6run
if [[ $? -ne 0 ]]; then
show-err-dialog "Failed to instaill WINE dependencies."
exit 1
fi
else
echo -e "${WINEPREFIX} already exists. Skipping WINE dependency installation.\n"
fi
echo -e "${YELLOW}Run ${WHITE}./02-install-vara-hf.sh${YELLOW} to install VARA HF.${NC}"
+43
View File
@@ -0,0 +1,43 @@
#!/bin/bash
#
# Author : Gaston Gonzalez
# Date : 20 January 2025
# Updated : 1 February 2025
# Purpose : Install VARA HF
set -e
source ./common-checks.sh
VERSION="4.8.9"
DOWNLOAD_FILE="vara-hf-${VERSION}.zip"
URL="https://downloads.winlink.org/VARA%20Products/VARA%20HF%20v${VERSION}%20setup.zip"
VARA_HOME="${HOME}/.wine32/drive_c/VARA"
et-log "Installing VARA HF..."
if [ ! -e ${DOWNLOAD_FILE} ]; then
et-log "Downloading VARA HF ${version} from ${URL}"
curl -s -f -L -o ${DOWNLOAD_FILE} "${URL}"
fi
if [ $? -ne 0 ]; then
et-log "Error downloading VARA HF ${VERSION}."
exit 1
fi
unzip -o ${DOWNLOAD_FILE}
wine 'VARA setup (Run as Administrator).exe'
if [ ! -e "${VARA_HOME}/nt4pdhdll.exe" ]; then
et-log "Install missing DLL..."
CWD=$(pwd)
cd ${VARA_HOME}
curl -s -f -L -O \
http://download.microsoft.com/download/winntsrv40/update/5.0.2195.2668/nt4/en-us/nt4pdhdll.exe && unzip nt4pdhdll.exe
cd ${CWD}
fi
echo -e "${YELLOW}Run ${WHITE}./03-install-vara-fm.sh${YELLOW} to install VARA FM.${NC}"
+43
View File
@@ -0,0 +1,43 @@
#!/bin/bash
#
# Author : Gaston Gonzalez
# Date : 20 January 2025
# Updated : 1 February 2025
# Purpose : Install VARA FM
set -e
source ./common-checks.sh
VERSION="4.3.8"
DOWNLOAD_FILE="vara-fm-${VERSION}.zip"
URL="https://downloads.winlink.org/VARA%20Products/VARA%20FM%20v${VERSION}%20setup.zip"
VARA_HOME="${HOME}/.wine32/drive_c/VARA FM"
et-log "Installing VARA FM..."
if [ ! -e ${DOWNLOAD_FILE} ]; then
et-log "Downloading VARA FM ${version} from ${URL}"
curl -s -f -L -o ${DOWNLOAD_FILE} "${URL}"
fi
if [ $? -ne 0 ]; then
et-log "Error downloading VARA FM ${VERSION}."
exit 1
fi
unzip -o ${DOWNLOAD_FILE}
wine 'VARA FM setup (Run as Administrator).exe'
if [ ! -e "${VARA_HOME}/nt4pdhdll.exe" ]; then
et-log "Install missing DLL..."
CWD=$(pwd)
cd "${VARA_HOME}"
curl -s -f -L -O \
http://download.microsoft.com/download/winntsrv40/update/5.0.2195.2668/nt4/en-us/nt4pdhdll.exe && unzip nt4pdhdll.exe
cd ${CWD}
fi
echo -e "${YELLOW}Run ${WHITE}./04-run-regedit.sh${YELLOW} to run registry editor.${NC}"
+17
View File
@@ -0,0 +1,17 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 20 January 2025
# Updated : 4 February 2025
# Purpose : Run regedit
set -e
source ./common-checks.sh
echo -e "${YELLOW}"
echo -e "1. Expand HKEY_LOCAL_MACHINE > Software > Wine > Ports"
echo -e "2. In the main pain, right-click and select 'New' > 'String Value'"
echo -e "3. Set the name to ${WHITE}COM10${YELLOW} and the value to ${WHITE}/dev/et-cat${YELLOW}"
echo -e "4. Close the Registry Editor application"
echo -e "${NC}"
wine regedit
+32
View File
@@ -0,0 +1,32 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 1 February 2025
# Purpose : Backup the ~/.wine32 directory for use in ETC image inclusion.
TODAY=$(date +"%Y%m%d")
BACKUP_FILE="${HOME}/etc-wine-backup-${HOSTNAME}-${TODAY}.tar.gz"
source /opt/emcomm-tools/bin/et-common
if [ -e "${BACKUP_FILE}" ]; then
echo -e -n "${RED}A backup file for today exists. Can ${WHITE}${BACKUP_FILE} ${RED}be overwritten? (y/n) ${NC}"
read response
[[ $response != [yY] ]] && echo "Skipping backup and exiting." && exit 1
fi
# All paths are relative to $HOME.
BACKUP_DIRS=(
".wine32"
)
tar -czf ${BACKUP_FILE} \
--transform 's|^.*\.local|.local|' \
-C "${HOME}" "${BACKUP_DIRS[@]}"
[ $? -ne 0 ] && et-log "Error creating backup" && exit 1
# Test that we can read if after we create it.
TAR_OUT=$(tar -tzf ${BACKUP_FILE})
[ $? -ne 0 ] && et-log "Can't read backup file: ${BACKUP_FILE}. Error creating backup." && exit 1
echo -e "${GREEN}Backup created: ${WHITE}${BACKUP_FILE}\n"
+33
View File
@@ -0,0 +1,33 @@
# Installing Windows Applications
The following instructions only need to be run once. They should be run
in this directory as your normal user (do not use 'sudo').
1. Install the WINE dependencies.
./01-install-wine-deps.sh
2. Install VARA HF. Accept the default settings and uncheck Launch My Program
when prompted during the installation.
./02-install-vara-hf.sh
3. Install VARA FM. Accept the default settings and uncheck Launch My Program
when prompted during the installation.
./03-install-vara-fm.sh
4. Run the registery editor. Follow the instructions in the terminal. In
this step we will need to map COM port 10 (COM10) to the EmComm Tools
CAT control device (/dev/et-cat).
./04-run-regedit.sh
5. If you want to include your WINE installation in a future EmComm Tools
Community image build, run the following to make a backup of your WINE
installation now.
./05-backup-wine-install.sh
It is important that you do not run any of the VARA programs until after
the backup is run in step 5.
+34
View File
@@ -0,0 +1,34 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 1 February 2025
# Purpose : Performs various checks to ensure that changes can be made
# to a user's local WINE installation.
source /opt/emcomm-tools/bin/et-common
WINE_OUT=$(which winetricks)
if [[ $? -ne 0 ]]; then
echo -e "${RED}Wine is not installed. As root, first run: ${WHITE}/root/emcomm-tools-os-community/scripts/install-wine.sh${NC}"
exit 1
fi
if [[ "${EUID}" -eq 0 ]]; then
echo -e "${RED}This script must not be run as root. Run it as your normal user.${NC}"
exit 1
fi
if [[ -z "${WINARCH}" ]]; then
echo -e "The WINARCH environment variable is not set. Setting it for you."
export WINARCH="win32"
fi
if [[ -z "${WINEPREFIX}" ]]; then
echo -e "The WINEPREFIX environment variable is not set. Setting it for you."
export WINEPREFIX="${HOME}/.wine32"
fi
if [[ -z "${DISPLAY}" && -z "${WAYLAND_DISPLAY}" ]]; then
echo -e "${RED}No graphical environment detected. Run this command from a desktop session.${NC}"
echo -e "${RED}This can't be run from within Cubic.${NC}"
exit 1
fi
-1
View File
@@ -2,6 +2,5 @@
%bluetooth ALL=(ALL) NOPASSWD: /usr/sbin/kissattach /dev/rfcomm0 *
%bluetooth ALL=(ALL) NOPASSWD: /usr/sbin/kissparms *
%bluetooth ALL=(ALL) NOPASSWD: /usr/bin/killall kissattach
%bluetooth ALL=(ALL) NOPASSWD: /usr/bin/killall kissattach
%bluetooth ALL=(ALL) NOPASSWD: /usr/bin/killall rfcomm
+17
View File
@@ -0,0 +1,17 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 1 February 2025
# Purpose : Common environment variables and functions
export ESC="\x1B"
export RED="${ESC}[1;31m"
export BLUE="${ESC}[1;34m"
export GREEN="${ESC}[1;32m"
export WHITE="${ESC}[97m"
export YELLOW="${ESC}[1;33m"
export NC="${ESC}[0m"
show-err-dialog() {
local message="$1"
dialog --title "Notification" --msgbox "$message" 8 60
}
+18 -1
View File
@@ -2,21 +2,38 @@
#
# Author : Gaston Gonzalez
# Date : 12 November 2024
# Updated : 13 January 2025
# Updated : 7 February 2025
# Purpose : Stops all EmComm Tools sound-based services (i.e. modems) and
# amatuer radio applications to ensure a clean start for the next mode.
stop_pat() {
PS_OUT=$(ps -ef | grep "[p]at http")
if [[ $? -eq 0 ]]; then
PAT_PID=$(ps -ef | grep "[p]at http" | awk '{print $2}')
kill -9 ${PAT_PID}
fi
}
# 1. Attempt to stop all EmComm Tools services regardless if they are running.
# 2. Stop the applications first, then the modems.
stop_all_services() {
systemctl --user stop et-service-winlink-ardop
systemctl --user stop et-service-winlink-packet
systemctl --user stop et-service-winlink-native-packet
systemctl --user stop et-service-ardop
systemctl --user stop et-service-direwolf-300
systemctl --user stop et-service-direwolf-9600
systemctl --user stop et-service-direwolf-simple
systemctl --user stop et-service-direwolf-aprs-digipeater
systemctl --user stop et-service-direwolf-packet-digipeater
# Stop VARA with a sledge hammer
pkill et-winlink
pkill et-vara
pkill VARA
stop_pat
}
et-log "Stopping all services"
+117 -18
View File
@@ -2,12 +2,14 @@
#
# Author : Gaston Gonzalez
# Date : 6 November 2024
# Updated : 14 January 2025
# Updated : 9 February 2025
# Purpose : Configures the system for a specific mode of operation
# Use a simple text file to save the state of the last mode selected
MODE_STATUS_FILE="${HOME}/.config/emcomm-tools/et-mode"
QTTERMTCP_CONF_FILE="${HOME}/.config/QtTermTCP.ini"
# List of supported modes of operation
MODE_ID_NONE="none"
MODE_ID_APRS_DIGIPEATER="aprs-digipeater"
@@ -18,9 +20,11 @@ MODE_ID_CHAT_CLIENT="chat-chattervox"
MODE_ID_PACKET_DIGIPEATER="packet-digipeater"
MODE_ID_WINLINK_ARDOP="winlink-ardop"
MODE_ID_WINLINK_PACKET="winlink-packet"
MODE_ID_WINLINK_VARA_HF="winlink-vara-hf"
MODE_ID_WINLINK_VARA_FM="winlink-vara-fm"
# Default to 1200 baud
PACKET_MODE=simple
# Default to 1200 baud packet for terminal sessions
TERM_MODE=1200
# Attempt to stop all EmComm Tools services regardless if they are running.
stop_all_services() {
@@ -66,16 +70,52 @@ start_and_wait_for_service() {
exit_on_service_failure ${systemd_unit_name}
}
select_direwolf_mode () {
packet_mode=()
packet_mode+=("simple" "1200 baud (default for VHF/UHF)")
packet_mode+=("9600" "9600 baud (VHF/UHF)")
packet_mode+=("300" "300 baud (HF)")
start_and_wait_for_vara() {
local vara_cmd="$1"
local elapsed=0
PACKET_MODE=$(dialog --clear --menu "Select a modem" 10 60 10 "${packet_mode[@]}" 3>&1 1>&2 2>&3)
et-log "Starting ${vara_cmd}..."
${vara_cmd} &
et-log "Waiting for ${vara_cmd} to become active..."
while true; do
CHECK_VARA=$(ps -ef | grep "[V]ARA")
if [ $? -eq 0 ]; then
break
fi
sleep "$INTERVAL"
elapsed=$((elapsed + INTERVAL))
if [ "$elapsed" -ge "$TIMEOUT" ]; then
et-log "Timeout reached. ${systemd_unit_name} failed to start."
exit 1
fi
et-log "Waiting for ${vara_cmd} to become active..."
done
}
select_term_mode () {
term_mode=()
term_mode+=("1200" "1200 baud (default for VHF/UHF)")
term_mode+=("9600" "9600 baud (VHF/UHF)")
term_mode+=("300" "300 baud (HF)")
# Only allow VARA terminal modes when using QtTermTCP
if [[ "${SELECTED_MODE}" == "${MODE_ID_BBS_CLIENT2}" ]]; then
if [ -e "${HOME}/.wine32/drive_c/VARA FM/VARAFM.exe" ]; then
term_mode+=("vara-fm" "VARA FM")
fi
if [ -e "${HOME}/.wine32/drive_c/VARA/VARA.exe" ]; then
term_mode+=("vara-hf" "VARA HF")
fi
fi
TERM_MODE=$(dialog --clear --menu "Select a modem" 13 60 10 "${term_mode[@]}" 3>&1 1>&2 2>&3)
exit_status=$?
if [ "${PACKET_MODE}" == "9600" ]; then
if [ "${TERM_MODE}" == "9600" ]; then
dialog --title "Note on 9600 Baud" --msgbox "9600 baud is only supported on limited radios and typically requires a special cable.\n\nDon't forget to set the packet settings to 9600 on the radio." 0 0
fi
@@ -87,6 +127,18 @@ select_direwolf_mode () {
fi
}
select_winlink_mode () {
winlink_mode=()
BLUETOOTH_TNC_CHECK=$(ps -ef | grep "[r]fcomm connect")
if [[ $? -eq 0 ]]; then
et-log "AX.25 over Bluetooth connected. Configuring Winlink for native AX.25"
start_and_wait_for_service et-service-winlink-native-packet
min http://localhost:8080
exit 0
fi
}
# Build list of options
options=()
options+=("${MODE_ID_NONE}" "No mode selected")
@@ -96,11 +148,20 @@ options+=("${MODE_ID_BBS_CLIENT2}" "BBS Client (QtTermTCP)")
options+=("${MODE_ID_CHAT_CLIENT}" "Chat (chattervox)")
options+=("${MODE_ID_APRS_DIGIPEATER}" "APRS Digipeater")
options+=("${MODE_ID_PACKET_DIGIPEATER}" "Packet Digipeater")
options+=("${MODE_ID_WINLINK_ARDOP}" "Winlink over HF (ARDOP)")
options+=("${MODE_ID_WINLINK_PACKET}" "Winlink over VHF/UHF (AX.25 Packet)")
if [ -e "${HOME}/.wine32/drive_c/VARA FM/VARAFM.exe" ]; then
options+=("${MODE_ID_WINLINK_VARA_FM}" "Winlink over VHF/UHF (VARA FM)")
fi
options+=("${MODE_ID_WINLINK_ARDOP}" "Winlink over HF (ARDOP)")
if [ -e "${HOME}/.wine32/drive_c/VARA/VARA.exe" ]; then
options+=("${MODE_ID_WINLINK_VARA_HF}" "Winlink over HF (VARA HF)")
fi
# Prompt user for option and save exit status
SELECTED_MODE=$(dialog --clear --menu "Select a mode:" 16 65 10 "${options[@]}" 3>&1 1>&2 2>&3)
SELECTED_MODE=$(dialog --clear --menu "Select a mode:" 18 65 10 "${options[@]}" 3>&1 1>&2 2>&3)
exit_status=$?
tput sgr 0 && clear
@@ -124,18 +185,38 @@ if [ $exit_status -eq 0 ]; then
et-yaac start
;;
${MODE_ID_BBS_CLIENT})
select_direwolf_mode
et-log "Using ${PACKET_MODE} as the modem speed."
select_term_mode
et-log "Using ${TERM_MODE} as the modem speed."
start_and_wait_for_service et-service-direwolf-${PACKET_MODE}
start_and_wait_for_service et-service-direwolf-${TERM_MODE}
et-log "Starting Paracon."
et-paracon start
;;
${MODE_ID_BBS_CLIENT2})
select_direwolf_mode
et-log "Using ${PACKET_MODE} as the modem speed."
select_term_mode
et-log "Using ${TERM_MODE} as the modem."
start_and_wait_for_service et-service-direwolf-${PACKET_MODE}
case "${TERM_MODE}" in
"1200")
start_and_wait_for_service et-service-direwolf-simple
;;
"9600")
start_and_wait_for_service et-service-direwolf-9600
;;
"300")
start_and_wait_for_service et-service-direwolf-300
;;
"vara-fm")
sed -i "s|^VARAFM=.*|VARAFM=1|g" ${QTTERMTCP_CONF_FILE}
sed -i "s|^VARAHF=.*|VARAHF=0|g" ${QTTERMTCP_CONF_FILE}
start_and_wait_for_vara et-vara-fm
;;
"vara-hf")
sed -i "s|^VARAFM=.*|VARAFM=0|g" ${QTTERMTCP_CONF_FILE}
sed -i "s|^VARAHF=.*|VARAHF=1|g" ${QTTERMTCP_CONF_FILE}
start_and_wait_for_vara et-vara-hf
;;
esac
et-log "Starting QtTermTCP."
et-qttermtcp start
@@ -150,15 +231,33 @@ if [ $exit_status -eq 0 ]; then
et-log "Packet digipeater now running."
;;
${MODE_ID_WINLINK_ARDOP})
et-log "Using ARDOP as the modem."
start_and_wait_for_service et-service-ardop
start_and_wait_for_service et-service-winlink-ardop
min http://localhost:8080
;;
${MODE_ID_WINLINK_PACKET})
select_winlink_mode
start_and_wait_for_service et-service-direwolf-simple
start_and_wait_for_service et-service-winlink-packet
min http://localhost:8080
;;
${MODE_ID_WINLINK_VARA_FM})
dialog --title "User Action Required" --msgbox "VARA FM is not a plug and play mode. You must configure VARA manually." 10 50
tput sgr 0 && clear
start_and_wait_for_vara et-vara-fm
et-winlink start-vara-fm &
sleep 1
min http://localhost:8080 2>/dev/null
;;
${MODE_ID_WINLINK_VARA_HF})
dialog --title "User Action Required" --msgbox "VARA HF is not a plug and play mode. You must configure VARA manually." 10 50
tput sgr 0 && clear
start_and_wait_for_vara et-vara-hf
et-winlink start-vara-hf &
sleep 1
min http://localhost:8080 2>/dev/null
;;
*)
et-log "Mode ${SELECTED_MODE} not yet supported"
exit 1
+3 -1
View File
@@ -2,6 +2,7 @@
#
# Author : Gaston Gonzalez
# Date : 17 December 2024
# Updated : 8 February 2025
# Purpose : Wrapper script for starting JS8Call with PnP support
#
# Preconditions
@@ -57,7 +58,8 @@ update-config () {
exit 1
fi
sed -i "s|^AGWTermCall.*|AGWTermCall=${CALLSIGN}|" ${CONF_FILE}
sed -i "s|^AGWTermCall.*|AGWTermCall=${CALLSIGN}|g" ${CONF_FILE}
sed -i "s|^VARATermCall.*|VARATermCall=${CALLSIGN}|g" ${CONF_FILE}
sed -i "s|^YAPPPath.*|YAPPPath=${HOME}/Downloads|" ${CONF_FILE}
et-log "Updated QtTermTCP configuration with user callsign '${CALLSIGN}'"
+8 -2
View File
@@ -2,7 +2,7 @@
#
# Author : Gaston Gonzalez
# Date : 11 October 2024
# Updated : 14 December 2024
# Updated : 5 February 2025
# Purpose : A script for managaing plug-and-play radios
set -e
@@ -48,6 +48,13 @@ if [ $exit_status -eq 0 ]; then
VENDOR=$(cat ${ACTIVE_RADIO} | jq -r .vendor)
MODEL=$(cat ${ACTIVE_RADIO} | jq -r .model)
BLUETOOTH_TNC_CHECK=$(ps -ef | grep "[r]fcomm connect")
if [[ $? -eq 0 ]]; then
et-log "Killing running processes for Bluetooth TNC"
sudo /usr/bin/killall kissattach
sudo /usr/bin/killall rfcomm
fi
printf "%-20s %-10s %-10s\n" "Radio ID" "Vendor" "Model"
printf "%-20s %-10s %-10s\n\n" $ID "$VENDOR" "$MODEL"
@@ -55,7 +62,6 @@ if [ $exit_status -eq 0 ]; then
cat ${ACTIVE_RADIO} | jq -r '.notes[] | "* \(.)"'
echo -e "${NC}"
printf "${GREEN}REQUIRED ACTIONS\n"
printf "1. Apply the settings above to your radio.\n"
printf "2. Plug in the USB cable for your radio. If it is already\n"
+9 -1
View File
@@ -2,7 +2,7 @@
#
# Author : Gaston Gonzalez
# Date : 6 October 2024
# Updated : 17 December 2024
# Updated : 7 February 2025
# Purpose : Utility script for dumping system information
function usage() {
@@ -183,6 +183,8 @@ case $1 in
MODE_ID_APRS_CLIENT="aprs-client"
MODE_ID_WINLINK_ARDOP="winlink-ardop"
MODE_ID_WINLINK_PACKET="winlink-packet"
MODE_ID_WINLINK_VARA_HF="winlink-vara-hf"
MODE_ID_WINLINK_VARA_FM="winlink-vara-fm"
if [ ! -e /dev/et-audio ]; then
echo "Run 'et-mode' to set"
@@ -218,6 +220,12 @@ case $1 in
${MODE_ID_WINLINK_PACKET})
echo "Winlink Packet"
;;
${MODE_ID_WINLINK_VARA_FM})
echo "Winlink VARA FM"
;;
${MODE_ID_WINLINK_VARA_HF})
echo "Winlink VARA HF"
;;
*)
echo "Unknown"
;;
+1 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 14 January 2025
# Updated : 16 January 2025
# Updated : 1 February 2025
# Purpose : Back up select files from the user's home directory.
#
# The backups are limited to the following:
@@ -31,7 +31,6 @@ BACKUP_DIRS=(
".config/emcomm-tools"
".local/share/emcomm-tools"
".local/share/pat"
".ssh"
)
tar -czf ${BACKUP_FILE} \
+7 -7
View File
@@ -2,14 +2,14 @@
#
# Author : Gaston Gonzalez
# Date : 1 January 2025
# Updated : 3 January 2025
# Updated : 3 February 2025
# Purpose : Utility for accessing the Bluetooth TNC on the BTECH
# UV PRO.
ACTIVE_RADIO="${ET_HOME}/conf/radios.d/btech-uvpro.bt.json"
DEVICE_NAME="UV-PRO"
BT_DEVICE="/dev/rfcomm0"
AX25_PORT="pkt1200"
AX25_PORT="wl2k"
AX25_CONF_FILE="/etc/ax25/axports"
ESC="\x1B"
@@ -78,15 +78,15 @@ update_ax25_conf() {
GREP_OUT=$(grep ${AX25_PORT} ${AX25_CONF_FILE})
if [ $? -eq 0 ]; then
# Delete all existing pkt1200 entries. Note: we can't use sed here
# Delete all existing AX.25 port entries. Note: we can't use sed here
# since we do not have permission to create a temporary file with
# inline replacement. ed modifies the file directly.
printf "g/^pkt1200/d\nw\nq\n" | ed ${AX25_CONF_FILE} > /dev/null 2>&1
printf "g/^${AX25_PORT}/d\nw\nq\n" | ed ${AX25_CONF_FILE} > /dev/null 2>&1
fi
info_message "Adding AX25 port for ${CALLSIGN}"
echo "pkt1200 ${CALLSIGN} 1200 255 2 1200 Packet" >> ${AX25_CONF_FILE}
echo "${AX25_PORT} ${CALLSIGN} 1200 255 2 1200 Packet" >> ${AX25_CONF_FILE}
}
stop_all_services() {
@@ -235,8 +235,8 @@ EOF
echo -e "${YELLOW}"
echo -e "SAMPLE COMMANDS DESCRIPTION "
echo -e "------------------------------- --------------------------------"
echo -e "axcall pkt1200 <STATION> Connect directly to a node "
echo -e "axcall pkt1200 <STATION> <DIGI> Connect to node via a digipeater"
echo -e "axcall ${AX25_PORT} <STATION> Connect directly to a node "
echo -e "axcall ${AX25_PORT} <DIGI> Connect to node via a digipeater"
echo -e "sudo axlisten -a -tttt -c Monitor inbound and outbound traffic"
echo -e "${NC}"
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 20 January 2025
# Updated : 7 February 2025
# Purpose : Run VARA FM
source /opt/emcomm-tools/bin/et-common
EXE="${HOME}/.wine32/drive_c/VARA FM/VARAFM.exe"
if [[ ! -e ${EXE} ]]; then
echo -e "${RED}"
echo -e "${EXE} does not exist."
echo -e "You might NOT have installed the windows subsystem (WINE)."
echo -e "Navigate to ${WHITE}${HOME}/add-ons/wine${RED} and follow the"
echo -e "instructions in the ${WHITE}README.md${RED} file."
echo -e "${NC}"
exit 1
fi
# 1. Check if the symlink was created by the udev rules
if [[ -e /dev/et-audio ]]; then
# 2. Check that this device was properly tagged with the ET_AUDIO env variable with a udev rule
APLAY_OUT=$(arecord -l | grep ET_AUDIO)
if [[ $? -eq 0 ]]; then
# Configure ALSA settings for sound card
/opt/emcomm-tools/bin/et-audio update-config
else
echo -e "${RED}No ET_AUDIO device detected.${NC}"
exit 1
fi
else
echo -e "${RED}No ET_AUDIO device plugged in.${NC}"
exit 1
fi
wine ~/.wine32/drive_c/VARA\ FM/VARAFM.exe
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 20 January 2025
# Updated : 7 February 2025
# Purpose : Run VARA HF
source /opt/emcomm-tools/bin/et-common
EXE="${HOME}/.wine32/drive_c/VARA/VARA.exe"
if [[ ! -e ${EXE} ]]; then
echo -e "${RED}"
echo -e "${EXE} does not exist."
echo -e "You might NOT have installed the windows subsystem (WINE)."
echo -e "Navigate to ${WHITE}${HOME}/add-ons/wine${RED} and follow the"
echo -e "instructions in the ${WHITE}README.md${RED} file."
echo -e "${NC}"
exit 1
fi
# 1. Check if the symlink was created by the udev rules
if [[ -e /dev/et-audio ]]; then
# 2. Check that this device was properly tagged with the ET_AUDIO env variable with a udev rule
APLAY_OUT=$(arecord -l | grep ET_AUDIO)
if [[ $? -eq 0 ]]; then
# Configure ALSA settings for sound card
/opt/emcomm-tools/bin/et-audio update-config
else
echo -e "${RED}No ET_AUDIO device detected.${NC}"
exit 1
fi
else
echo -e "${RED}No ET_AUDIO device plugged in.${NC}"
exit 1
fi
wine ${EXE}
+74 -14
View File
@@ -2,7 +2,7 @@
#
# Author : Gaston Gonzalez
# Date : 4 November 2024
# Updated : 12 December 2024
# Updated : 4 February 2025
# Purpose : Wrapper script for starting YAAC with PnP support
#
# Preconditions:
@@ -13,14 +13,19 @@
# 1. Callsign, Winlink password, and grid are updated are updated
# 2. pat http is started
source /opt/emcomm-tools/bin/et-common
PAT_CONF_FILE=${HOME}/.config/pat/config.json
PAT_CONF_FILE_TEMPLATE=/etc/skel/.config/pat/config.json
usage() {
echo "usage: $(basename $0) <command>"
echo " <command>"
echo " start-ardop - Start Pat Winlink in ardop mode"
echo " start-packet - Start Pat Winlink in packet mode"
echo " start-ardop - Start Pat Winlink in ardop mode"
echo " start-packet - Start Pat Winlink in packet mode"
echo " start-native-packet - Start Pat Winlink in native AX.25 packet mode"
echo " start-vara-fm - Start Pat Winlink in VARA FM mode"
echo " start-vara-hf - Start Pat Winlink in VARA HF mode"
}
if [ $# -ne 1 ]; then
@@ -60,7 +65,7 @@ start_packet() {
notify_user "Dire Wolf not running. Run: et-direwolf simple-packet"
exit 1
fi
update_config packet
CMD="pat http"
@@ -69,6 +74,44 @@ start_packet() {
${CMD}
}
# Only the BTECH UV PRO is supported in this mode
start_native_packet() {
BLUETOOTH_TNC_CHECK=$(ps -ef | grep "[r]fcomm connect")
if [[ $? -ne 0 ]]; then
echo -e "${RED}Can't start Pat in native AX.25 packet mode."
echo -e "If you have a UV Pro, first run: ${YELLOW}et-uv-pro connect${NC}"
exit 1
fi
update_config native-packet
CMD="pat http"
et-log "Starting Pat with: ${CMD}"
${CMD}
}
start_vara_fm() {
update_config vara-fm
CMD="pat http"
et-log "Starting Pat with: ${CMD}"
${CMD}
}
start_vara_hf() {
update_config vara-hf
CMD="pat http"
et-log "Starting Pat with: ${CMD}"
${CMD}
}
update_config () {
[ -z "$ET_USER_CONFIG" ] && ET_USER_CONFIG="${HOME}/.config/emcomm-tools/user.json"
@@ -82,22 +125,30 @@ update_config () {
exit 1
fi
case $1 in
ardop)
PAT_CONF_FILE_TEMPLATE=/opt/emcomm-tools/conf/template.d/winlink/config.ardop.json
;;
packet)
PAT_CONF_FILE_TEMPLATE=/opt/emcomm-tools/conf/template.d/winlink/config.ax25-agw.json
;;
native-packet)
PAT_CONF_FILE_TEMPLATE=/opt/emcomm-tools/conf/template.d/winlink/config.ax25-native.json
;;
vara-fm)
PAT_CONF_FILE_TEMPLATE=/opt/emcomm-tools/conf/template.d/winlink/config.vara-fm.json
;;
vara-hf)
PAT_CONF_FILE_TEMPLATE=/opt/emcomm-tools/conf/template.d/winlink/config.vara-hf.json
;;
esac
et-log "Updating Pat configuration file: ${PAT_CONF_FILE}..."
cp -v ${PAT_CONF_FILE_TEMPLATE} ${PAT_CONF_FILE}
sed -i "s|{{ET_CALLSIGN}}|${CALLSIGN}|g" ${PAT_CONF_FILE}
sed -i "s|{{ET_WINLINK_PASSWD}}|${WINLINK_PASSWD}|g" ${PAT_CONF_FILE}
sed -i "s|{{ET_GRID}}|${GRID}|g" ${PAT_CONF_FILE}
# Enable the P2P listener for the current mode selected (ARDOP or AX.25)
case $1 in
ardop)
sed -i "s|{{ET_WINLINK_LISTEN}}|ardop|g" ${PAT_CONF_FILE}
;;
packet)
sed -i "s|{{ET_WINLINK_LISTEN}}|ax25|g" ${PAT_CONF_FILE}
;;
esac
}
case $1 in
@@ -107,6 +158,15 @@ case $1 in
start-packet)
start_packet
;;
start-native-packet)
start_native_packet
;;
start-vara-fm)
start_vara_fm
;;
start-vara-hf)
start_vara_hf
;;
*)
echo "Invalid command."
usage
@@ -0,0 +1,83 @@
{
"mycall": "{{ET_CALLSIGN}}",
"secure_login_password": "{{ET_WINLINK_PASSWD}}",
"auxiliary_addresses": [],
"locator": "{{ET_GRID}}",
"service_codes": [
"PUBLIC"
],
"http_addr": "localhost:8080",
"motd": [
"Open source Winlink client - getpat.io"
],
"connect_aliases": {
"telnet": "telnet://{mycall}:CMSTelnet@cms.winlink.org:8772/wl2k"
},
"listen": [ "ardop" ],
"hamlib_rigs": {
"et-rig": {
"address": "localhost:4532",
"network": "tcp"
}
},
"ax25": {
"engine": "agwpe",
"beacon": {
"every": 3600,
"message": "Winlink P2P",
"destination": "IDENT"
},
"agwpe": {"addr": "localhost:8000", "radio_port": 0}
},
"serial-tnc": {
"path": "/dev/ttyUSB0",
"serial_baud": 9600,
"hbaud": 1200,
"type": "Kenwood"
},
"ardop": {
"addr": "localhost:8515",
"arq_bandwidth": {
"Forced": false,
"Max": 500
},
"rig": "et-rig",
"ptt_ctrl": true,
"beacon_interval": 0,
"cwid_enabled": true
},
"pactor": {
"path": "/dev/ttyUSB0",
"baudrate": 57600,
"rig": "",
"custom_init_script": ""
},
"telnet": {
"listen_addr": ":8774",
"password": ""
},
"varahf": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 2300,
"rig": "",
"ptt_ctrl": false
},
"varafm": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 0,
"rig": "",
"ptt_ctrl": false
},
"gpsd": {
"enable_http": false,
"allow_forms": false,
"use_server_time": false,
"addr": "localhost:2947"
},
"schedule": {},
"version_reporting_disabled": false
}
@@ -0,0 +1,83 @@
{
"mycall": "{{ET_CALLSIGN}}",
"secure_login_password": "{{ET_WINLINK_PASSWD}}",
"auxiliary_addresses": [],
"locator": "{{ET_GRID}}",
"service_codes": [
"PUBLIC"
],
"http_addr": "localhost:8080",
"motd": [
"Open source Winlink client - getpat.io"
],
"connect_aliases": {
"telnet": "telnet://{mycall}:CMSTelnet@cms.winlink.org:8772/wl2k"
},
"listen": [ "ax25" ],
"hamlib_rigs": {
"et-rig": {
"address": "localhost:4532",
"network": "tcp"
}
},
"ax25": {
"engine": "agwpe",
"beacon": {
"every": 3600,
"message": "Winlink P2P",
"destination": "IDENT"
},
"agwpe": {"addr": "localhost:8000", "radio_port": 0}
},
"serial-tnc": {
"path": "/dev/ttyUSB0",
"serial_baud": 9600,
"hbaud": 1200,
"type": "Kenwood"
},
"ardop": {
"addr": "localhost:8515",
"arq_bandwidth": {
"Forced": false,
"Max": 500
},
"rig": "et-rig",
"ptt_ctrl": true,
"beacon_interval": 0,
"cwid_enabled": true
},
"pactor": {
"path": "/dev/ttyUSB0",
"baudrate": 57600,
"rig": "",
"custom_init_script": ""
},
"telnet": {
"listen_addr": ":8774",
"password": ""
},
"varahf": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 2300,
"rig": "",
"ptt_ctrl": false
},
"varafm": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 0,
"rig": "",
"ptt_ctrl": false
},
"gpsd": {
"enable_http": false,
"allow_forms": false,
"use_server_time": false,
"addr": "localhost:2947"
},
"schedule": {},
"version_reporting_disabled": false
}
@@ -0,0 +1,78 @@
{
"mycall": "{{ET_CALLSIGN}}",
"secure_login_password": "{{ET_WINLINK_PASSWD}}",
"auxiliary_addresses": [],
"locator": "{{ET_GRID}}",
"service_codes": [
"PUBLIC"
],
"http_addr": "localhost:8080",
"motd": [
"Open source Winlink client - getpat.io"
],
"connect_aliases": {
"telnet": "telnet://{mycall}:CMSTelnet@cms.winlink.org:8772/wl2k"
},
"listen": [ "ax25" ],
"hamlib_rigs": {
},
"ax25": {
"engine": "linux",
"beacon": {
"every": 3600,
"message": "Winlink P2P",
"destination": "IDENT"
},
"ax25_linux": {"port": "wl2k"}
},
"serial-tnc": {
"path": "/dev/ttyUSB0",
"serial_baud": 9600,
"hbaud": 1200,
"type": "Kenwood"
},
"ardop": {
"addr": "localhost:8515",
"arq_bandwidth": {
"Forced": false,
"Max": 500
},
"ptt_ctrl": true,
"beacon_interval": 0,
"cwid_enabled": true
},
"pactor": {
"path": "/dev/ttyUSB0",
"baudrate": 57600,
"rig": "",
"custom_init_script": ""
},
"telnet": {
"listen_addr": ":8774",
"password": ""
},
"varahf": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 2300,
"rig": "",
"ptt_ctrl": true
},
"varafm": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 0,
"rig": "",
"ptt_ctrl": false
},
"gpsd": {
"enable_http": false,
"allow_forms": false,
"use_server_time": false,
"addr": "localhost:2947"
},
"schedule": {},
"version_reporting_disabled": false
}
@@ -0,0 +1,83 @@
{
"mycall": "{{ET_CALLSIGN}}",
"secure_login_password": "{{ET_WINLINK_PASSWD}}",
"auxiliary_addresses": [],
"locator": "{{ET_GRID}}",
"service_codes": [
"PUBLIC"
],
"http_addr": "localhost:8080",
"motd": [
"Open source Winlink client - getpat.io"
],
"connect_aliases": {
"telnet": "telnet://{mycall}:CMSTelnet@cms.winlink.org:8772/wl2k"
},
"listen": [],
"hamlib_rigs": {
"et-rig": {
"address": "localhost:4532",
"network": "tcp"
}
},
"ax25": {
"engine": "agwpe",
"beacon": {
"every": 3600,
"message": "Winlink P2P",
"destination": "IDENT"
},
"agwpe": {"addr": "localhost:8000", "radio_port": 0}
},
"serial-tnc": {
"path": "/dev/ttyUSB0",
"serial_baud": 9600,
"hbaud": 1200,
"type": "Kenwood"
},
"ardop": {
"addr": "localhost:8515",
"arq_bandwidth": {
"Forced": false,
"Max": 500
},
"rig": "et-rig",
"ptt_ctrl": true,
"beacon_interval": 0,
"cwid_enabled": true
},
"pactor": {
"path": "/dev/ttyUSB0",
"baudrate": 57600,
"rig": "",
"custom_init_script": ""
},
"telnet": {
"listen_addr": ":8774",
"password": ""
},
"varahf": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 2300,
"rig": "et-rig",
"ptt_ctrl": true
},
"varafm": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 0,
"rig": "et-rig",
"ptt_ctrl": true
},
"gpsd": {
"enable_http": false,
"allow_forms": false,
"use_server_time": false,
"addr": "localhost:2947"
},
"schedule": {},
"version_reporting_disabled": false
}
@@ -0,0 +1,83 @@
{
"mycall": "{{ET_CALLSIGN}}",
"secure_login_password": "{{ET_WINLINK_PASSWD}}",
"auxiliary_addresses": [],
"locator": "{{ET_GRID}}",
"service_codes": [
"PUBLIC"
],
"http_addr": "localhost:8080",
"motd": [
"Open source Winlink client - getpat.io"
],
"connect_aliases": {
"telnet": "telnet://{mycall}:CMSTelnet@cms.winlink.org:8772/wl2k"
},
"listen": [],
"hamlib_rigs": {
"et-rig": {
"address": "localhost:4532",
"network": "tcp"
}
},
"ax25": {
"engine": "agwpe",
"beacon": {
"every": 3600,
"message": "Winlink P2P",
"destination": "IDENT"
},
"agwpe": {"addr": "localhost:8000", "radio_port": 0}
},
"serial-tnc": {
"path": "/dev/ttyUSB0",
"serial_baud": 9600,
"hbaud": 1200,
"type": "Kenwood"
},
"ardop": {
"addr": "localhost:8515",
"arq_bandwidth": {
"Forced": false,
"Max": 500
},
"rig": "et-rig",
"ptt_ctrl": true,
"beacon_interval": 0,
"cwid_enabled": true
},
"pactor": {
"path": "/dev/ttyUSB0",
"baudrate": 57600,
"rig": "",
"custom_init_script": ""
},
"telnet": {
"listen_addr": ":8774",
"password": ""
},
"varahf": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 2300,
"rig": "et-rig",
"ptt_ctrl": true
},
"varafm": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 0,
"rig": "et-rig",
"ptt_ctrl": true
},
"gpsd": {
"enable_http": false,
"allow_forms": false,
"use_server_time": false,
"addr": "localhost:2947"
},
"schedule": {},
"version_reporting_disabled": false
}
+78
View File
@@ -0,0 +1,78 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 17 December 2024
# Updated : 28 January 2025
# Purpose : Install QtTermTCP
set -e
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
trap 'et-log "\"${last_command}\" command failed with exit code $?."' ERR
. ./env.sh
APP=qttermtcp
VERSION=latest
DOWNLOAD_FILE=QtTermSource.zip
BIN_FILE=QtTermTCP
INSTALL_DIR="/opt/${APP}-${VERSION}"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
LINK_PATH="/opt/${APP}"
et-log "Enabling i386 architecture support.."
dpkg --add-architecture i386
apt update
et-log "Installing QtTermTCP 32-bit build dependencies..."
apt install \
qtbase5-dev:i386 \
qtbase5-dev-tools:i386 \
qt5-qmake:i386 \
qtchooser:i386 \
qtmultimedia5-dev:i386 \
libqt5serialport5-dev:i386 \
libfftw3-dev:i386 \
qttools5-dev-tools:i386 \
-y
et-log "Installing QtTermTCP build dependencies..."
apt install \
qtbase5-dev \
qtbase5-dev-tools \
qt5-qmake \
qtchooser \
qtmultimedia5-dev \
libqt5serialport5-dev \
libfftw3-dev \
qttools5-dev-tools \
-y
if [ ! -e ${ET_DIST_DIR}/${DOWNLOAD_FILE} ]; then
URL=http://www.cantab.net/users/john.wiseman/Downloads/${DOWNLOAD_FILE}
et-log "Downloading QtTermTCP: ${URL}"
curl -s -L -o ${DOWNLOAD_FILE} --fail ${URL}
mv -v ${DOWNLOAD_FILE} ${ET_DIST_DIR}
fi
CWD_DIR=`pwd`
# Only build once
if [ ! -e "${ET_SRC_DIR}/${APP}/${BIN_FILE}" ]; then
cd ${ET_SRC_DIR}
mkdir -v ${APP} && cd ${APP}
unzip ${ET_DIST_DIR}/${DOWNLOAD_FILE}
et-log "Building QtTermTCP.."
qmake && make
fi
[ ! -e ${INSTALL_BIN_DIR} ] && mkdir -v -p ${INSTALL_BIN_DIR}
cp -v "${ET_SRC_DIR}/${APP}/${BIN_FILE}" ${INSTALL_BIN_DIR}
[ -e ${LINK_PATH} ] && rm ${LINK_PATH}
ln -s ${INSTALL_DIR} ${LINK_PATH}
stow -v -d /opt ${APP} -t /usr/local
cd $CWD_DIR
+17 -23
View File
@@ -1,7 +1,6 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 17 December 2024
# Updated : 31 December 2024
# Date : 3 February 2025
# Purpose : Install QtTermTCP
set -e
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
@@ -11,22 +10,26 @@ trap 'et-log "\"${last_command}\" command failed with exit code $?."' ERR
APP=qttermtcp
VERSION=latest
DOWNLOAD_FILE=QtTermSource.zip
DOWNLOAD_FILE=QtTermTCP
BIN_FILE=QtTermTCP
INSTALL_DIR="/opt/${APP}-${VERSION}"
INSTALL_BIN_DIR="${INSTALL_DIR}/bin"
LINK_PATH="/opt/${APP}"
et-log "Installing QtTermTCP build dependencies..."
et-log "Enabling i386 architecture support.."
dpkg --add-architecture i386
apt update
et-log "Installing QtTermTCP 32-bit build and runtime dependencies..."
apt install \
qtbase5-dev \
qtbase5-dev-tools \
qt5-qmake \
qtchooser \
qtmultimedia5-dev \
libqt5serialport5-dev \
libfftw3-dev \
qttools5-dev-tools \
qtbase5-dev:i386 \
qtbase5-dev-tools:i386 \
qt5-qmake:i386 \
qtchooser:i386 \
qtmultimedia5-dev:i386 \
libqt5serialport5-dev:i386 \
libfftw3-dev:i386 \
qttools5-dev-tools:i386 \
-y
if [ ! -e ${ET_DIST_DIR}/${DOWNLOAD_FILE} ]; then
@@ -36,23 +39,14 @@ if [ ! -e ${ET_DIST_DIR}/${DOWNLOAD_FILE} ]; then
et-log "Downloading QtTermTCP: ${URL}"
curl -s -L -o ${DOWNLOAD_FILE} --fail ${URL}
chmod 755 ${DOWNLOAD_FILE}
mv -v ${DOWNLOAD_FILE} ${ET_DIST_DIR}
fi
CWD_DIR=`pwd`
# Only build once
if [ ! -e "${ET_SRC_DIR}/${APP}/${BIN_FILE}" ]; then
cd ${ET_SRC_DIR}
mkdir -v ${APP} && cd ${APP}
unzip ${ET_DIST_DIR}/${DOWNLOAD_FILE}
et-log "Building QtTermTCP.."
qmake && make
fi
[ ! -e ${INSTALL_BIN_DIR} ] && mkdir -v -p ${INSTALL_BIN_DIR}
cp -v "${ET_SRC_DIR}/${APP}/${BIN_FILE}" ${INSTALL_BIN_DIR}
cp -v "${ET_DIST_DIR}/${DOWNLOAD_FILE}" ${INSTALL_BIN_DIR}
[ -e ${LINK_PATH} ] && rm ${LINK_PATH}
ln -s ${INSTALL_DIR} ${LINK_PATH}
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
# Author : Gaston Gonzalez
# Date : 20 January 2025
# Updated : 1 February 2025
# Purpose : Install WINE to support VARA
WIN32_DIR="${HOME}/.win32"
et-log "Installing WINE..."
# Check for an existing i386 architecture
ARCH_OUT=$(dpkg --print-foreign-architectures | grep i386)
[ $? -ne 0 ] && dpkg --add-architecture i386
#if [ ! -e "/etc/apt/keyrings/winehq-archive.key" ]; then
# et-log "Adding apt keys for official wine repo"
# mkdir -pm755 /etc/apt/keyrings
# wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
# wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$(lsb_release -sc)/winehq-$(lsb_release -sc).sources
# apt update
# apt install --install-recommends winehq-stable
#fi
apt install \
wine \
winetricks \
exe-thumbnailer \
-y
dialog --textbox wine.txt 15 74
tput sgr 0 && clear
+3 -1
View File
@@ -2,7 +2,7 @@
#
# Author : Gaston Gonzalez
# Date : 16 March 2024
# Updated : 31 December 2024
# Updated : 20 January 2025
# Purpose : Main installer for EmComm Tools OS Community
. ./env.sh
@@ -57,3 +57,5 @@ exitIfNotRoot
# Add user-specific data
./download-osm-maps.sh
./download-wikipedia.sh
./install-wine.sh
+27
View File
@@ -0,0 +1,27 @@
The base WINE applications have been installed to support a future
installation of Windows programs such as VARA HF, VARA FM, and VARA
Terminal. However, these applications can't be installed within this
session of Cubic. They must be installed on a running version of
EmComm Tools Community via a desktop session.
If you previously made a backup copy of your WINE installation using
the "$HOME/add-ons/wine/05-backup-wine-install.sh" script and would
like to bake it into this ISO image, perform the following:
1. Change into the skeleton directory now with:
cd /etc/skel
2. Copy your etc-wine-backup-*.tar.gz file using Cubic to this
directory.
3. Restore the backup into this directory with:
tar -xzf etc-wine-backup-*.tar.gz
4. Confirm that you see a `.wine32` directory here.
5. Delete the compressed backup file to reduce the size of the
final image.
rm etc-wine-backup-*.tar.gz