Skip to content

Added a CLI-specific start-up script. #211

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 146 additions & 0 deletions dw-start-cli.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
#!/bin/bash

# Simplified, CLI-only direwolf start-up script

# Run this from crontab periodically to check whether direwolf is running
# and force it to start up automatically.

# In order to execute this script periodically using crontab, do the following:
# 1.- Configure the script to your liking and save changes.
# 2.- Type "crontab -e" without quotes in the terminal
# 2a.- If this is your first time editing crontab, select your preferred text editor. My favorite is nano.
# 3.- Add the line below to the crontab file. This will force the script to run every minute.
#
# * * * * * /absolute/path/to/this/file/dw-start-cli.sh >/dev/null 2>&1
#
# 4.- Save and close the crontab file.
# 5.- Optional: Use top to check whether direwolf was started. I highly recommend
# testing this script by manually executing it before adding it to the crontab.
# Execute the script manually by typing: ./dw-start-cli.sh

# Versioning (this file, not direwolf version)
#-----------
# v1.4 - KE5WSG - Removed support for the GUI and vastly simplified the script.
# Improved error checking and logging.
# v1.3 - KI6ZHD - added variable support for direwolf binary location
# v1.2 - KI6ZHD - support different versions of VNC
# v1.1 - KI6ZHD - expanded version to support running on text-only displays with
# auto support; log placement change
# v1.0 - WB2OSZ - original version for Xwindow displays only

# Enable (true) / disable (false) logging everything to the log file.
# Setting this to 'false' is recommended to keep from unnecessarily filling the log file.
DEBUG=false

#Where will be stored. The directory must be writable by non-root users.
LOGFILE=/var/tmp/dw-start.log

# Location of the direwolf binary. Depends on $PATH as shown.
# Change this if you want to use some other specific location.
# e.g. DWPATH="/usr/local/bin/direwolf"

DWPATH="/home/pi/direwolf"

# Location of the direwolf configuration file (direwolf.conf).
# Change this if you want to customize or protect where your configuration
# file is stored.
# e.g. DWCONFIG="/home/pi/direwolf"

DWCONFIG="/home/pi/direwolf"

# Name of the direwolf configuration file.

DWCONFIGFILE="direwolf.conf"

# Direwolf start up command. Examples for both a simple and SDR config are provided.
#
# 1. For normal operation as TNC, digipeater, IGate, etc.
# Print audio statistics each 100 seconds for troubleshooting.
# Change this command to however you wish to start Direwolf.
# Be sure to use variables as necessary when building your command.

DWCMD="$DWPATH/direwolf -a 100 -c $DWCONFIG/$DWCONFIGFILE"

#---------------------------------------------------------------
#
# 2. Alternative for running with SDR receiver.
# Piping one application into another makes it a little more complicated.
# We need to use bash for the | to be recognized.

#DWCMD="bash -c 'rtl_fm -f 144.39M - | $DWPATH/direwolf -c $DWCONFIG/sdr.conf -r 24000 -D 1 -'"

# When running from cron, we have a very minimal environment
# including PATH=/usr/bin:/bin.
export PATH=/usr/local/bin:$PATH

# Error checking before attempting to start direwolf

# Check to see whether the direwolf directory exists
if ! [ -d "$DWPATH" ]; then
echo -e "ERROR: The direwolf path (DWPATH) is invalid! Aborting."
echo "-----------------------" >> $LOGFILE
date >> $LOGFILE
echo "ERROR: The direwolf path (DWPATH) is invalid! Aborting." >> $LOGFILE
exit 1
fi

# Check to see whether the direwolf application exists
if ! [ -f "$DWPATH/direwolf" ]; then
echo -e "ERROR: The direwolf application (DWPATH/direwolf) cannot be found! Aborting."
echo "-----------------------" >> $LOGFILE
date >> $LOGFILE
echo "ERROR: The direwolf application (DWPATH/direwolf) cannot be found! Aborting." >> $LOGFILE
exit 1
fi

# Check to see whether the direwolf configuration file exists
if ! [ -f "$DWCONFIG/$DWCONFIGFILE" ]; then
echo -e "ERROR: The direwolf configuration file specified cannot be found! Aborting."
echo "-----------------------" >> $LOGFILE
date >> $LOGFILE
echo "ERROR: The direwolf configuration file specified cannot be found! Aborting." >> $LOGFILE
exit 1
fi

# Check to see whether screen is installed
if ! type "screen" > /dev/null; then
echo -e "ERROR: screen is not installed. Please install using 'sudo apt-get install screen' Aborting."
echo "-----------------------" >> $LOGFILE
date >> $LOGFILE
echo "ERROR: screen is not installed." >> $LOGFILE
exit 1
fi

# Check to see if there's already a screen session named "direwolf"
if screen -list | grep -q "direwolf"; then
echo "A screen session named 'direwolf' is already running. Direwolf is likely already running. Exiting."
if $DEBUG; then
echo "-----------------------" >> $LOGFILE
date >> $LOGFILE
echo "A screen session named 'direwolf' was found. Exiting." >> $LOGFILE
fi
exit
fi

# It looks like none of the errors forced the application to exit. Let's try running direwolf!

# Wait a little while in case we just rebooted and you're using an old RPi.
# Feel free to adjust this delay as needed.
sleep 1

# Print status messages
echo "Direwolf starting up..."
echo "-----------------------" >> $LOGFILE
date >> $LOGFILE
echo "Direwolf starting up..." >> $LOGFILE

# Start direwolf in a screen session named 'direwolf'
screen -S direwolf -d -m $DWCMD

# Print direwolf screen information to the screen/log
screen -list direwolf
screen -list direwolf >> $LOGFILE

echo "-----------------------"
echo "-----------------------" >> $LOGFILE