APRSC/APRSC-install.sh
4b42fc3a
 #!/bin/bash
 
 echo "Please enter the following:"
 read -p 'First and Last name: ' name
 read -p 'Callsign: ' callsign
 read -p "APRS ssid: $callsign-" ssid
 echo
 echo "If you need your APRS Passcode you can get it here: https://willamettevalleymesh.net/aprs-passcode/"
 read -p 'Please enter callsign APRS Passcode: ' aprspasscode
 read -p 'Your Email Address: ' email
 
a6546a84
 
869533d9
 apt update -y
 apt upgrade -y
 
cebe68c1
 apt install -y sudo build-essential htop nginx libevent* debhelper libssl-dev libcap-dev libz-dev libwww-perl libsctp-dev lsb-release
869533d9
 apt --fix-broken install
 
 adduser --system --no-create-home --home /var/run/aprsc --shell /usr/sbin/nologin --group aprsc
 
a6546a84
 cd
 wget http://he.fi/aprsc/down/aprsc-latest.tar.gz
869533d9
 tar xvfz aprsc-latest.tar.gz
 rm -rf aprsc-latest.tar.gz
 cd aprsc-*
 cd src
 ./configure
 make make-deb
060cf64f
 sudo dpkg -i ../aprsc_*.deb
869533d9
 
 
 sudo systemctl enable aprsc
 
 
 tee /etc/default/aprsc <<EOF
 
 #
 # STARTAPRSC: start aprsc on boot. Should be set to "yes" once you have
 #            configured aprsc.
 #
 STARTAPRSC="yes"
 
 #
 # Additional options that are passed to the Daemon.
 # Description of used options (don't change these unless
 # you're sure what you're doing):
 # -u aprsc: switch to user 'aprsc' as soon as possible
 # -t /opt/aprsc: chroot to the given directory
 # -f: fork to a daemon
 # -e info: log at level info
 # -o file: log to file
 # -r logs: log files are placed in /opt/aprsc/logs
 # -c etc/aprsc.conf: configuration file location
 #
 # Since the daemon chroots to /opt/aprsc, all paths are relative to
 # that directory and the daemon cannot access any files outside
 # the chroot.
 #
 # aprsc can log to syslog too, but that'd require bringing the
 # syslog socket within the chroot.
 #
 
 DAEMON_OPTS="-u aprsc -t /opt/aprsc -f -e info -o file -r logs -c etc/aprsc.conf"
 
 EOF
 
4b42fc3a
 echo "ServerId   $callsign-$ssid" > /opt/aprsc/etc/aprsc.conf
 echo "PassCode   $aprspasscode" >> /opt/aprsc/etc/aprsc.conf
 echo "MyAdmin    \"$name, $callsign\"" >> /opt/aprsc/etc/aprsc.conf
 echo "MyEmail   $email" >> /opt/aprsc/etc/aprsc.conf
 
 
 tee -a /opt/aprsc/etc/aprsc.conf <<EOF
869533d9
 
 ### Directories #########
 # Data directory (for persistent state files - currently none)
 RunDir data
 
 # If logging to a file (-o file), enable built-in log rotation.
 # LogRotate <megabytes> <filecount>
 # "LogRotate 10 5" keeps 5 old files of 10 megabytes each.
 LogRotate 10 5
 
 ### Intervals and timers #########
 # Interval specification format examples:
 # 600 (600 seconds), or 600s, 5m, 2h, 1h30m, 1d3h15m24s, etc...
 
 # When no data is received from an upstream server in N seconds, switch to
 # another server.
 UpstreamTimeout         15s
 
 # When no data is received from a downstream server in N seconds, disconnect
 ClientTimeout           48h
 
 ### TCP listener ##########
 # Listen <socketname> <porttype> tcp <address to bind> <port> <options...>
 #       socketname: any name you wish to show up in logs and statistics
 #       porttype: one of:
 #               fullfeed - everything, after dupe filtering
 #               igate - igate / client port with user-specified filters
 #               udpsubmit - UDP packet submission port (8080)
 #               dupefeed - duplicate packets dropped by the server
 #       options:
 #               filter "m/500" - force a filter for users connected here
 #               maxclients 100 - limit clients connected on this port
 #               acl etc/client.acl - match client addresses against ACL
 #               hidden - don't show the port in the status page
 #
 #              If you wish to provide UDP service for clients, set up a
 #              second listener on the same address, port and protocol.
 #
 #              The  "::"  is IPv6 "IN6ADDR_ANY", whereas "0.0.0.0" is same
 #              with IPv4.
 #
 #              On FreeBSD you need to have separate listeners for IPv4 and
 #              IPv6. On Linux, just use :: alone - the IPv6 listener will
 #              catch the IPv4 connections just as well.
 #
 # Example of normal server ports for Linux, supporting both TCP and UDP,
 # IPv4 and IPv6:
 #
 Listen "Full feed"                                fullfeed tcp ::  10152 hidden
 Listen ""                                         fullfeed udp ::  10152 hidden
 
 Listen "Client-Defined Filters"                   igate tcp ::  14580
 Listen ""                                         igate udp ::  14580
 
 Listen "350 km from my position"                 igate tcp ::  20350 filter "m/350"
 Listen ""                                        igate udp ::  20350 filter "m/350"
 
 Listen "UDP submit"                               udpsubmit udp :: 8080
 
 ### Uplink configuration ########
 # Uplink <name> <type> tcp <address> <port>
 #       name: a name of the server or service you're connecting to
 #       type: one of:
 #               full - full feed
 #               ro   - read-only, do not transmit anything upstream
 #
 # If you wish to specify multiple alternative servers, use multiple
 # Uplink lines, one for each server.
 #
 # Normally a single line for the 'rotate' address is fine - it will connect
 # to one of the servers in a random fashion and go for another one should
 # the first one become unavailable.
 #
 Uplink "Core rotate" full  tcp  rotate.aprs.net 10152
 #Uplink "Core rotate" ro    tcp  rotate.aprs.net 10152
 
 # OPTIONAL: Bind source address before connecting to an uplink
 # You can enter two addresses, one for IPv4 and one for IPv6 connections.
 # Needed if you have multiple IP addresses on your server and only one
 # of them is allowed to connect by the remote server.
 #UplinkBind 127.0.0.1
 #UplinkBind ::1
 
 ### HTTP server ##########
 # HTTPStatus port provides a status view to web browsers.
 # IPv6+IPv4 support works slightly differently than in Listen:
 # :: is "all addresses" for IPv6, 0.0.0.0 for IPv4, but
 # :: only works if you actually have a global IPv6 address
 # configured on the system.
 # The example is for IPv4, change the address to :: if you have
 # IPv6. For FreeBSD, or if you wish to support multiple specific
 # ports/addresses, use multiple HTTPStatus directives for each.
 HTTPStatus 0.0.0.0 14501
 # HTTPUpload port allows position uploads over HTTP
 HTTPUpload 0.0.0.0 8080
 
 ### Environment ############
 # When running this server as super-user, the server can (in many systems)
 # increase several resource limits, and do other things that less privileged
 # server can not do.
 #
 # The FileLimit is resource limit on how many simultaneous connections and
 # some other internal resources the system can use at the same time.
 # If the server is not being run as super-user, this setting has no effect
 # in case it is above what normal user can set.
 #
 FileLimit        10000
 
 ### Operator attention span qualification run ###########
 # After configuring the rest of the settings, remove this bad command
 # from the configuration file. It's here only to avoid starting the
 # server up accidentally with an invalid configuration.
 #MagicBadness    42.7
 EOF
 
eee71147
 sudo systemctl enable aprsc
 
869533d9
 reboot
060cf64f