From ff8b14afe7126c7c0f502f17101560ee28d7b50c Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Sat, 28 Nov 2015 06:07:10 -0500 Subject: [PATCH 1/8] Added bitstring --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index d77d77b..6eadd74 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ Twisted>=12.0.0 +https://pypi.python.org/packages/source/b/bitstring/bitstring-3.1.3.zip + From c0c2dd7403f29c46390e1ecbb9eab8441b524bc0 Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Sun, 29 Nov 2015 08:07:23 -0500 Subject: [PATCH 2/8] Init script for DMRlink script --- init.d/bridge | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 init.d/bridge diff --git a/init.d/bridge b/init.d/bridge new file mode 100755 index 0000000..327efb0 --- /dev/null +++ b/init.d/bridge @@ -0,0 +1,64 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: Mototrbo_IPSC_bridging +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: DMRlink Bridge +# Description: Open Source IPSC bridging +### END INIT INFO + +# Where is the directory containing DMRlink +DIR=/opt/dmrlink/bridge +# Filename of the python script +DAEMON=$DIR/bridge.py +# Daemon name +DAEMON_NAME=bridge + +# Add any command line options for your daemon where +DAEMON_OPTS="" + +# This next line determines what user the script runs as. +# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python. +DAEMON_USER=root + +# The process ID of the script when it runs is stored here: +PIDFILE=/var/run/$DAEMON_NAME.pid + +. /lib/lsb/init-functions + +do_start () { + log_daemon_msg "Starting system $DAEMON_NAME daemon" + start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS + log_end_msg $? +} +do_stop () { + log_daemon_msg "Stopping system $DAEMON_NAME daemon" + start-stop-daemon --stop --pidfile $PIDFILE --remove-pidfile --retry 10 + log_end_msg $? +} + +case "$1" in + + start|stop) + do_${1} + ;; + + restart|reload|force-reload) + do_stop + do_start + ;; + + status) + status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $? + ;; + *) + echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}" + exit 1 + ;; + +esac +exit 0 + From e8789a6d96d8d348529743eaccf6557d8148da1a Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Thu, 3 Dec 2015 09:32:18 -0500 Subject: [PATCH 3/8] Create directory structure and copy files --- ambe_audio.cfg | 1 - dmrlink_SAMPLE.cfg | 10 ++-- mk_dmrlink | 113 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+), 5 deletions(-) create mode 100755 mk_dmrlink diff --git a/ambe_audio.cfg b/ambe_audio.cfg index 3b87cd1..626e25c 100644 --- a/ambe_audio.cfg +++ b/ambe_audio.cfg @@ -2,7 +2,6 @@ _debug = False _outToFile = False _outToUDP = True -#_gateway = 192.168.1.184 _gateway = 127.0.0.1 _gateway_port = 1234 _remote_control_port = 1235 diff --git a/dmrlink_SAMPLE.cfg b/dmrlink_SAMPLE.cfg index d72e88c..fe6329b 100644 --- a/dmrlink_SAMPLE.cfg +++ b/dmrlink_SAMPLE.cfg @@ -2,13 +2,15 @@ # # Rename to dmrlink.cfg and add your information # +# minor tweaks to match install for use by DMRGateway +# N4IRS # # # GLOBAL CONFIGURATION ITEMS # [GLOBAL] -PATH: /absolute/path/to/DMRlink +PATH: /opt/dmrlink # NETWORK REPORTING CONFIGURATION @@ -54,9 +56,9 @@ PRINT_PEERS_INC_FLAGS: 0 # used. # [LOGGER] -LOG_FILE: /tmp/dmrlink.log -LOG_HANDLERS: console -LOG_LEVEL: CRITICAL +LOG_FILE: /var/log/dmrlink/dmrlink.log +LOG_HANDLERS: file +LOG_LEVEL: warning LOG_NAME: DMRlink diff --git a/mk_dmrlink b/mk_dmrlink new file mode 100755 index 0000000..991e21f --- /dev/null +++ b/mk_dmrlink @@ -0,0 +1,113 @@ +#! /bin/sh + +################################################# +# # +# Create directory structure for DMRlink # +# # +################################################# + +# To allow multiple instances of DMRlink to run +# You need multiple ipsc directories, dmrlink.py and dmrlink.cfg +# The needed files are copied to /opt/dmrlink + +# Make needed directories +mkdir -p /opt/dmrlink/ambe_audio/ipsc +mkdir -p /opt/dmrlink/bridge/ipsc +mkdir -p /opt/dmrlink/gateway/ipsc +mkdir -p /opt/dmrlink/log/ipsc +mkdir -p /opt/dmrlink/playback/ipsc +mkdir -p /opt/dmrlink/play_group/ipsc +mkdir -p /opt/dmrlink/record/ipsc +mkdir -p /opt/dmrlink/rcm/ipsc +mkdir -p /opt/dmrlink/doc +mkdir -p /opt/dmrlink/samples +mkdir -p /var/log/dmrlink + +# Put scripts in /opt/dmrlink +cp /srv/DMRlink/get_ids.sh /opt/dmrlink # should be linked to /etc/cron.daily +cp /srv/DMRlink/init.d/bridge /opt/dmrlink/rc.bridge + +# bitstring install +cd /opt/dmrlink +wget https://pypi.python.org/packages/source/b/bitstring/bitstring-3.1.3.zip +unzip bitstring-3.1.3.zip +cd bitstring-3.1.3 +# python setup.py install +cd /opt/dmrlink +rm bitstring-3.1.3.zip + +# Put common files in /opt/dmrlink +cp /srv/DMRlink/subscriber_ids.csv /opt/dmrlink +cp /srv/DMRlink/subscriber_idsxxx.csv /opt/dmrlink +cp /srv/DMRlink/talkgroup_ids.csv /opt/dmrlink +cp /srv/DMRlink/peer_ids.csv /opt/dmrlink +cp /srv/DMRlink/get_ids.sh /opt/dmrlink + +# Copy ipsc directory into each app directory +cp /srv/DMRlink/ipsc/* /opt/dmrlink/ambe_audio/ipsc +cp /srv/DMRlink/ipsc/* /opt/dmrlink/bridge/ipsc +cp /srv/DMRlink/ipsc/* /opt/dmrlink/gateway/ipsc +cp /srv/DMRlink/ipsc/* /opt/dmrlink/log/ipsc +cp /srv/DMRlink/ipsc/* /opt/dmrlink/playback/ipsc +cp /srv/DMRlink/ipsc/* /opt/dmrlink/play_group/ipsc +cp /srv/DMRlink/ipsc/* /opt/dmrlink/record/ipsc +cp /srv/DMRlink/ipsc/* /opt/dmrlink/rcm/ipsc + +# Put the samples together for easy ref +cp /srv/DMRlink/bridge_rules_SAMPLE.py /opt/dmrlink/samples +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/samples +cp /srv/DMRlink/known_bridges_SAMPLE.py /opt/dmrlink/samples +cp /srv/DMRlink/playback_config_SAMPLE.py /opt/dmrlink/samples + +# Put the doc together for easy ref +cp /srv/DMRlink/FAQ.md /opt/dmrlink/doc +cp /srv/DMRlink/internal_data_decode.txt /opt/dmrlink/doc +cp /srv/DMRlink/LICENSE.txt /opt/dmrlink/doc +cp /srv/DMRlink/README.md /opt/dmrlink/doc +cp /srv/DMRlink/requirements.txt /opt/dmrlink/doc + +# Stock ambe_audio +cp /srv/DMRlink/ambe_audio.cfg /opt/dmrlink/ambe_audio/ +cp /srv/DMRlink/ambe_audio.py /opt/dmrlink/ambe_audio/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/ambe_audio/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/ambe_audio/dmrlink.cfg + +# ambe_audio for DMRGateway +cp /srv/DMRlink/ambe_audio.cfg /opt/dmrlink/gateway/ +cp /srv/DMRlink/ambe_audio.py /opt/dmrlink/gateway/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/gateway/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/gateway/dmrlink.cfg + +# Bridge app +cp /srv/DMRlink/bridge.py /opt/dmrlink/bridge/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/bridge/ +cp /srv/DMRlink/bridge_rules_SAMPLE.py /opt/dmrlink/bridge/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/bridge/dmrlink.cfg + +# Log app +cp /srv/DMRlink/log.py /opt/dmrlink/log/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/log/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/log/dmrlink.cfg + +# Playback (Parrot) +cp /srv/DMRlink/playback.py /opt/dmrlink/playback/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/playback/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/playback/dmrlink.cfg + +# Play Group app +cp /srv/DMRlink/play_group.py /opt/dmrlink/play_group/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/play_group/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/play_group/dmrlink.cfg + +# record app +cp /srv/DMRlink/record.py /opt/dmrlink/record/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/record/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/record/dmrlink.cfg + +# rcm app +cp /srv/DMRlink/rcm_db_log.py /opt/dmrlink/rcm/ +cp /srv/DMRlink/rcm.py /opt/dmrlink/rcm/ +cp /srv/DMRlink/dmrlink.py /opt/dmrlink/rcm/ +cp /srv/DMRlink/dmrlink_SAMPLE.cfg /opt/dmrlink/rcm/dmrlink.cfg +cp /srv/DMRlink/pickle_stat_reader.py /opt/dmrlink/rcm/ + From a6ee57bd2612b67cc3c30cb9ac94b0d0b0339e2f Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Thu, 3 Dec 2015 09:35:25 -0500 Subject: [PATCH 4/8] Enable bitstring install --- mk_dmrlink | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mk_dmrlink b/mk_dmrlink index 991e21f..a14d45f 100755 --- a/mk_dmrlink +++ b/mk_dmrlink @@ -32,7 +32,7 @@ cd /opt/dmrlink wget https://pypi.python.org/packages/source/b/bitstring/bitstring-3.1.3.zip unzip bitstring-3.1.3.zip cd bitstring-3.1.3 -# python setup.py install +python setup.py install cd /opt/dmrlink rm bitstring-3.1.3.zip From 11786cb603ade8acd1e139a76b5701d1c404bb52 Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Thu, 3 Dec 2015 09:38:58 -0500 Subject: [PATCH 5/8] Simple install instructions --- install.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 install.txt diff --git a/install.txt b/install.txt new file mode 100644 index 0000000..b55b890 --- /dev/null +++ b/install.txt @@ -0,0 +1,6 @@ +To install DMRlink for DMRGateway +cd /srv +git clone https://github.com/N4IRS/DMRlink.git +cd DMRlink +./mk_dmrlink + From 9e12fc9d5d93b3524d725d1f6ff6c7b65348a55d Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Fri, 4 Dec 2015 06:06:35 -0500 Subject: [PATCH 6/8] Add unzip and twisted to script --- mk_dmrlink | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mk_dmrlink b/mk_dmrlink index a14d45f..b5f6dd9 100755 --- a/mk_dmrlink +++ b/mk_dmrlink @@ -6,6 +6,9 @@ # # ################################################# +apt-get install unzip -y +apt-get install python-twisted -y + # To allow multiple instances of DMRlink to run # You need multiple ipsc directories, dmrlink.py and dmrlink.cfg # The needed files are copied to /opt/dmrlink From 7113a56d2ab44eb08cdd2f2347cb4176203bfaee Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Fri, 4 Dec 2015 21:40:23 -0500 Subject: [PATCH 7/8] path needs a trailing / --- dmrlink_SAMPLE.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dmrlink_SAMPLE.cfg b/dmrlink_SAMPLE.cfg index fe6329b..41caab5 100644 --- a/dmrlink_SAMPLE.cfg +++ b/dmrlink_SAMPLE.cfg @@ -10,7 +10,7 @@ # GLOBAL CONFIGURATION ITEMS # [GLOBAL] -PATH: /opt/dmrlink +PATH: /opt/dmrlink/ # NETWORK REPORTING CONFIGURATION From fccc8b33676781e48930d5ac19ebd5f49074df72 Mon Sep 17 00:00:00 2001 From: Steve Zingman N4IRS Date: Fri, 4 Dec 2015 21:41:16 -0500 Subject: [PATCH 8/8] fix config --- dmrlink_SAMPLE.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dmrlink_SAMPLE.cfg b/dmrlink_SAMPLE.cfg index 41caab5..0d73f73 100644 --- a/dmrlink_SAMPLE.cfg +++ b/dmrlink_SAMPLE.cfg @@ -58,7 +58,7 @@ PRINT_PEERS_INC_FLAGS: 0 [LOGGER] LOG_FILE: /var/log/dmrlink/dmrlink.log LOG_HANDLERS: file -LOG_LEVEL: warning +LOG_LEVEL: WARNING LOG_NAME: DMRlink