First start of OpenBCM V1.08-3-g9b42

The first time you start BCM, the directories and files that are needed for BCM are created.
You are getting a error message about a wrong H-boxaddress. You can close BCM with “Ctrl C”

16.11.18 10:40:17z SYSTEM: #S cron: no valid H-boxaddress MYCALL.#BAY.DEU.EU

Let’s have a look in de directory of openBCM.

pd9q@pd9q:~/bcm-setup $ ls -l
total 1584
-rwxr-xr-x 1 pd9q pd9q 890996 Nov 15 15:16 bcm
-rw-r--r-- 1 pd9q pd9q 262144 Nov 16 10:39 bidh2.bcm
-rw-r--r-- 1 pd9q pd9q     36 Nov 16 10:39 bids3.bcm
-rw-r--r-- 1 pd9q pd9q     30 Nov 16 10:39 bulletin.bak
-rw-r--r-- 1 pd9q pd9q     30 Nov 16 10:40 bulletin.bcm
-rw-r--r-- 1 pd9q pd9q    612 Nov 16 10:40 crontab.bcm
drwxr-xr-x 6 pd9q pd9q   4096 Nov 16 10:39 fwd
-rw-r--r-- 1 pd9q pd9q     66 Nov 16 10:39 fwd.bcm
-rw-r--r-- 1 pd9q pd9q   1024 Nov 16 10:39 hadr4.bcm
-rw-r--r-- 1 pd9q pd9q 131072 Nov 16 10:39 hadrhash.bcm
drwxr-xr-x 2 pd9q pd9q   4096 Nov 16 10:39 http
drwxr-xr-x 2 pd9q pd9q   4096 Nov 16 10:40 info
-rw-r--r-- 1 pd9q pd9q   1460 Nov 16 10:40 init.bcm
-rw-r--r-- 1 pd9q pd9q    384 Nov 16 10:39 init.l2
drwxr-xr-x 2 pd9q pd9q   4096 Nov 16 10:39 log
drwxr-xr-x 2 pd9q pd9q   4096 Nov 16 10:39 msg
-rw-r--r-- 1 pd9q pd9q    403 Nov 16 10:39 speech.bcm
drwxr-xr-x 2 pd9q pd9q   4096 Nov 16 10:39 temp
drwxr-xr-x 2 pd9q pd9q   4096 Nov 16 10:39 trace
drwxr-xr-x 2 pd9q pd9q   4096 Nov 16 10:40 user
-rw-r--r-- 1 pd9q pd9q 262144 Nov 16 10:39 userh2.bcm
-rw-r--r-- 1 pd9q pd9q      0 Nov 16 10:39 users4.bak
-rw-r--r-- 1 pd9q pd9q    640 Nov 16 10:39 users4.bcm
pd9q@pd9q:~/bcm-setup $

The most important configuration file is the init.bcm

; --- mailbox ---
boxaddress MYCALL.#BAY.DEU.EU
boxheader OpenBCM
sysopcall DL8MBT
guestcall off
savebroken 0
infopath info
userpath user
fspath off
fsbmail 1
remerase 1
maxbids 8388608
; --- packet interface ---
mycall
fwdssid 8
ax25k_if off
; --- tcp/ip interface ---
http_port 8080
ftp_port 8021
smtp_port 8025
pop3_port 8110
nntp_port 8119
telnet_port 4719
serv_port 8123
radio_port 0
nopopsmtp 0
httpaccount 0
httpguestfirst 0
httpttypw 0
httpshowsysopcall 1
httprobots 1
unsecurettypw 0
internetmailgate off
; --- timers ---
infolife 999
userlife 999
oldestfwd 30
oldestbeacon 1
fwdtimeout 60
usrtimeout 0
autofwdtime 0
holdtime 0
; --- logging ---
tracelevel 1
fwdtrace 0
tcpiptrace 0
eraselog 0
; --- system ---
disable 1
sfonly 0
usvsense 0
watchdog 6
timeslot 2
ttymode off
dosinput 0
addlinuxsystemuser 0
; --- user constraints ---
paclen 0
minpaclen 40
maxpaclen 256
mailbeacon 1
altboardinfo 0
timeoutwarning 1
nounknownroute 0
asklogin 0
smoothheader 0
userquota 0
maxlogins 0
userpw 1
readlock 0
createboard 1
nopurge 0
ltquery 0
m_filter off
; --- server ---
maillistserv 0
maillistsender 0
pocsaglistserv 0
tellmode 2
oldumail 0
defswaplf 2
; --- user defaults ---
defstatus 0
deffbbcheckmode 0
defprompt (%b)-->
defcmd D
defhelp 2
deflines 0
deflf 0
defidir ADEKLMWYZ
defudir ADKLMTWYZ
defilist ABDJQTWXY
defulist ABDJQTWXY
defiread ABDEILMPRTUWYZ
defuread ABDEILMPRTUWYZ
defcheck ABDEJLMWXY
defps
defrea 0
defhold 0
defhttpsurface 1

In the init.bcm file it is important to adjust some things first. You can of course do this entirely according to your own interests.

In the mailbox section

boxaddress PI8LAP.#ZL.NLD.EU
boxheader OpenBCM
sysopcall PD9Q
guestcall GUEST

In the tcp/ip interface section

httpaccount 0
httpguestfirst 1
httpttypw 1
httpshowsysopcall 1
httprobots 0

In the logging section

tracelevel 0
fwdtrace 2
tcpiptrace 1
eraselog 1

In the system section

disable 0

In the user constraints section

asklogin 1
userpw 1

In the user defaults section

defprompt %m %d %t %w (%b)->%r

Okay that’s it. Now start BCM again.

OpenBCM V1.08-3-g9b42 (Linux)(c) GNU GPL 1992-2013 F. Radlherr, DL8MBT et al.
OpenBCM is maintained by Markus Baumann, DH8YMB
16.11.18 11:14:24z SYSTEM: #R working dir: '/home/pd9q/bcm-setup'
16.11.18 11:14:24z SYSTEM: #R l1axip: 127.0.0.1 rxport=14866 txport=14867
16.11.18 11:14:24z SYSTEM: #R l1axip: initialised to channel 0
16.11.18 11:14:24z SYSTEM: #L Start: V1.08-3-g9b42 Linux mem 884160kB hd 11856MB
16.11.18 11:14:24z SYSTEM: #R init_tnc: 200 ports
16.11.18 11:14:24z SYSTEM: #R ax25k_init: Kernel AX25 disabled
16.11.18 11:14:24z SYSTEM: #R initfwdlist: 0 partners, 0 destinations
16.11.18 11:14:24z SYSTEM: #R readtree: 0 bulletins
16.11.18 11:14:24z SYSTEM: #R telnetd: initialised to port 4719
16.11.18 11:14:24z SYSTEM: #R httpd: initialised to port 8080
16.11.18 11:14:24z SYSTEM: #R ftpd: initialised to port 8021
16.11.18 11:14:24z SYSTEM: #R sendmail: initialised to port 8025
16.11.18 11:14:24z SYSTEM: #R popper: initialised to port 8110
16.11.18 11:14:24z SYSTEM: #R nntpd: initialised to port 8119
16.11.18 11:14:24z SYSTEM: #R radiod: radio connectivity disabled
16.11.18 11:14:24z SYSTEM: #R serv: initialised to port 8123
16.11.18 11:14:25z SYSTEM: #R mbcron: started

That look fine to me.

Now we can telnet to BCM. “telnet localhost 4719”

pd9q@pd9q:~ $ telnet localhost 14719
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.


OpenBCM-Mailbox V1.08-3-g9b42 (Linux)

PI8LAP login: pd9q


OpenBCM V1.08-3-g9b42 (Linux)
Helplevel = 2, Lines = 0, first login.
Please enter your Home-BBS by typing "A F <boxcall>"

No messages found for PD9Q @ ???.
Help Dir Read Erase Check REPly Send Alter Quit
PI8LAP 16.11.2018 11:14:49z 213 Bytes (PD9Q)->

Very nice. Firt let set a password for the sysop user (pd9q) Give the command “a” on the command prompt.

Parameters of PD9Q: (see HELP ALTER)
New callsign..(A NE).none
Home-BBS.......(A F).?
Reject-boards..(A R).
Prompt.........(A P).%m %d %t %w (%b)->%r
Login-command..(A C).D                   Name........(A N).
QTH...........(A QT).
ZIP-Code.......(A Z).
Language.......(A S).??                  Lines.......(A L).0
Helplevel......(A H).2                   Linefeeds..(A LF).0
Info-dir......(A ID).ADEKLMWYZ           User-dir...(A UD).ADKLMTWYZ
Info-list.....(A IL).ABDJQTWXY           User-list..(A UL).ABDJQTWXY
Info-read.....(A IR).ABDEILMPRTUWYZ      User-read..(A UR).ABDEILMPRTUWYZ
Check-opt.....(A CH).ABDEJLMWXY          PS-Options.(A PS).
FHold.........(A FH).0                   FWD-Delay..(A FD).0 min
User-Forward..(A UF).passive
Status........(A ST).0                   No-Purge...(A NO).0
Passwordlen...(A PW).0                   TTYPWlen..(A TTY).0
Readlock.....(A REA).0                   FBBCheckmode (A FBB).0
Binmode........(A B).AutoBIN             HTTP-Surface.........1
Away...........(A A).0
Notification.(A NOT).off
Last D N...(Check)...16.11.2018 11:14:49z
Last login...........16.11.2018 11:14:49z  via TELNET
Logins 1, mails received 0, read 0, sent 0
Help Dir Read Erase Check REPly Send Alter Quit
PI8LAP 16.11.2018 11:14:59z 1556 Bytes (PD9Q)->

With the command “a ttypw (password)” you set the password for the sysop.

PI8LAP 16.11.2018 11:23:28z 1575 Bytes (PD9Q)->
a ttypw pancake

TTYPW ok.
Help Dir Read Erase Check REPly Send Alter Quit
PI8LAP 16.11.2018 11:23:34z 1703 Bytes (PD9Q)->

Okay the password for the sysop has been set. Now you probably think that if you log in via “telnet localhost 4719” you will encounter a password prompt. Wrong. This is because the ip-address of the localhost (127.0.0.1) is included in the file rhosts.bcm. Actually, this file means that the IP addresses that are listed here are trusted.

; OpenBCM sample rhosts.bcm file
; might be unsecure!
;
127.0.0.1

Just try, put one; for the ip address 127.0.0.1

;127.0.0.1

Now telnet again to localhost. There is the password prompt.

pd9q@nl9nkg:~/bcm-setup $ telnet localhost 14719
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.


OpenBCM-Mailbox V1.08-3-g9b42 (Linux)

PI8LAP login: pd9q
password: pancake


OpenBCM V1.08-3-g9b42 (Linux)
Helplevel = 2, Lines = 0, last login 16.11.2018 11:25:18z
Please enter your Home-BBS by typing "A F <boxcall>"

No messages found for PD9Q @ ???.
Help Dir Read Erase Check REPly Send Alter Quit
PI8LAP 16.11.2018 11:26:19z 232 Bytes (PD9Q)->

Now it’s time to look at the http server. In the beginning, in init.bcm in the mailbox section put “guestcall GUEST”. Now of course it is nice to let users use the possibilities of OpenBCM. Of course we will not make an account for everyone who want to use the http server. Here we have the GUEST call for. Lets create a password GUEST. Now users can log in with call GUEST and Password Guest.

If you dont do that, you get a error.

PI8LAP 16.11.2018 11:40:42z 432 Bytes (PD9Q)->
setuser guest ttypw guest

TTYPW ok.
Help Dir Read Erase Check REPly Send Alter Quit
PI8LAP 16.11.2018 11:41:42z 569 Bytes (PD9Q)->

Okay done.

Have a look at the website off your OpenBCM. http://ip-address:8080

OpenBCM V1.08-3-g9b42 (Linux)

Libor OK2PEN and I were talking about openBCM. I was getting very intrested in openBCM. Now I would like to run this on my Raspberry PI. I have a number of versions of openBCM but that is for an i386 system. So I went into the evil world and searched for openBCM for the Raspberry (ARM processor). I came on the github website of OE5HPM he has ported it to ARMv6 / ARMv7hf

https://github.com/oe5hpm/openBCM/releases

So let’s go

cd /home/pd9q
git clone https://github.com/oe5hpm/openBCM
cd openBCM
make
cd out-x86_32
mkdir /home/pd9q/bcm
cp bcm /home/pd9q/bcm
cd bcm
./bcm
OpenBCM V1.08-3-g9b42 (Linux)(c) GNU GPL 1992-2013 F. Radlherr, DL8MBT et al.
OpenBCM is maintained by Markus Baumann, DH8YMB
15.11.18 20:58:30z SYSTEM: #R working dir: '/home/pd9q/bcm'
15.11.18 20:58:30z SYSTEM: #R l1axip: 127.0.0.1 rxport=4866 txport=4867
15.11.18 20:58:30z SYSTEM: #R l1axip: initialised to channel 0
15.11.18 20:58:30z SYSTEM: #L Start: V1.08-3-g9b42 Linux mem 891400kB hd 11912MB
15.11.18 20:58:30z SYSTEM: #R init_tnc: 200 ports
15.11.18 20:58:30z SYSTEM: #R ax25k_init: Kernel AX25 disabled
15.11.18 20:58:30z SYSTEM: #R initfwdlist: 0 partners, 0 destinations
15.11.18 20:58:30z SYSTEM: #R readtree: 0 bulletins
15.11.18 20:58:30z SYSTEM: #R telnetd: initialised to port 4719
15.11.18 20:58:30z SYSTEM: #R httpd: initialised to port 8080
15.11.18 20:58:30z SYSTEM: #R ftpd: initialised to port 8021
15.11.18 20:58:30z SYSTEM: #R sendmail: initialised to port 8025
15.11.18 20:58:30z SYSTEM: #R popper: initialised to port 8110
15.11.18 20:58:30z SYSTEM: #R nntpd: initialised to port 8119
15.11.18 20:58:30z SYSTEM: #R radiod: radio connectivity disabled
15.11.18 20:58:30z SYSTEM: #R serv: initialised to port 8123
15.11.18 20:58:31z SYSTEM: #R mbcron: started
Date: 15.11.2018 21:36:51z

OpenBCM V1.08-3-g9b42 (Linux)
(c) GNU GPL 1992-2013 F. Radlherr, DL8MBT et al.
OpenBCM is maintained by Markus Baumann, DH8YMB
https://github.com/oe5hpm/openbcm
Compiled Nov 15 2018 15:15:28 with GCC 6.3.0 20170516
and support for:
filesurf mailserver pocsagserver servif radioif
mdpw serial guest ax25k autofwd runutils
macro yapp filefwd telnetfwd didadit userLT
fwd-edit rej-edit conv-edit extract fbbcheckmode
users4convert fts oldmailimport linuxsystemuser
Uptime: 00:38
CPU: ARMv7  BogoMips: 57.60
OS: Linux version 4.14.71-v7+               
PR-Interface: OpenBCM-L2 200 ports, Linux Kernel AX25
Available Memory / Used Swap                : 885608 kB / 0 kB
Info-Path: /home/pd9q/bcm/info              : 11912 MB  (14496 MB)
User-Path: /home/pd9q/bcm/user              : 11912 MB  (14496 MB)
BCM-Home:  /home/pd9q/bcm                   : 11912 MB  (14496 MB)
Filesurf:  not defined

Now I have to figure out how to configure it.

Raspberry PI 3 model A+

Came across the new Raspberry PI 3 Model A +
Look very nice

Specificaties

  • Processor: Broadcom BCM2837B0, Cortex-A53 64-bit SoC @ 1.4GHz
  • Geheugen: 512MB LPDDR2 SDRAM
  • Connectiviteit:
    • 2.4GHz en 5GHz 802.11b/g/n/ac WiFi
    • Bluetooth 4.2 / BLE
    • 1x USB 2.0 poort
  • Uitbreiding: 40-pin GPIO header
  • Video & Geluid:
    • 1x full-size HDMI
    • DSI display poort
    • DSI camera poort
    • 4-polige 3.5mm jack voor stereo audio en composiet video
  • Multimedia: H.264, MPEG-4 decode (1080p30); H.264 encode (1080p30); OpenGL ES 1.1, 2.0 graphics
  • Stroomvoorziening:
    • 5V / 2.5A DC via microUSB
    • 5V DC via GPIO header
  • Afmetingen: 65x56x8.5mm
  • Gewicht: 29g

https://www.raspberrypi.org/blog/new-product-raspberry-pi-3-model-a/

Update start script

I have update the start script for pi1lap/pi8lap. I have add start/stop/restart/status in it.
The disadvantage of this script is if you for example make an adjustment in axport you have to stop and restart the whole system. Maybe divide into smaller parts.

Ok lets check the status.

root@linux:/etc/ax25# ./ax-start status
Checking for fbb daemon: No, fbb is down :(
Checking for ax25d daemon: No, ax25d is down :(
Checking for netromd daemon: No, netromd is down :(
Checking for ax25rtd daemon: No, ax25rtd is down :(
Checking for flexd daemon: No, flexd is down :(
Checking for mheardd daemon: No, mheardd is down :(
Checking for ax25ipd daemon: No, ax25ipd is down :(
Checking for ax25udp daemon: No, ax25udp is down :(
Checking for linuxnet node: No, linuxnet node is down :(
Checking for jnos bbs: No, jnos is down :(
Checking for kissattach: No, kissattach is down :(
Checking for slattach: No, slattach is down :(
Checking for kissnetd: No, kissnetd is down :(
Checking for mkiss: No, mkiss is down :(
Checking for socat: No, socat is down :(
Checking for rstatrxd: No, rstatrxd is down :(
root@linux:/etc/ax25#

Now let start the system.

root@linux:/etc/ax25# ./ax-start start
Starting ax0
ax0     PI1LAP-1        9600    128     4       144.850Mhz 1k2
AX.25 port ax0 bound to device ax0
start Done
Starting ax1
ax1     PI1LAP-2        9600    128     4       430.950Mhz 9k6
AX.25 port ax1 bound to device ax1
start Done
Starting ax2
ax2     PI1LAP-3        19200   128     4       Link local BBS pi8lap
AX.25 port ax2 bound to device ax2
start Done
Starting ax3
ax3     PI1LAP-6        19200   128     4       Link local Dx pi1lap-4
AX.25 port ax3 bound to device ax3
start Done
Starting ax4
ax4     PI1LAP-8        19200   256     2       AX25/udp via pi1lap-8
AX.25 port ax4 bound to device ax4
start Done
Starting ax5
ax5     PI1LAP-9        19200   256     2       AX25/ip via pi1lap-9
AX.25 port ax5 bound to device ax5
start Done
Starting ax6
ax6     PD9Q-7         19200   256     2       Link local Jnos p9q
AX.25 port ax6 bound to device ax6
start Done
Starting rose0
rose0  2040330113  ROSE port 330113
Rose port rose0 bound to device rose0
start Done
Starting nr0
nr0      PI1LAP-5       LAPURO  236     Uronode PI1LAP-15
NET/ROM port nr0 bound to device nr0
start Done
Starting nr1
nr1      PI8LAP         LAPBBS  236     Fbb BBS PI8LAP
NET/ROM port nr1 bound to device nr1
start Done
Starting nr2
nr2      PI1LAP-4       LAPDX   236     DxSpider PI1LAP-4
NET/ROM port nr2 bound to device nr2
start Done
Starting nr3
nr3      PI1LAP-7       LAPPAC  236     FPAC node PI1LAP-7
NET/ROM port nr3 bound to device nr3
start Done
Starting ax25d daemon
start Done
Starting mheardd daemon
start Done
Starting ax25rtd daemon
start Done
Starting flexd daemon
FlexD started.
start Done
Starting netromd daemon
start Done
Starting FBB daemon
Checking fbb tree.... Ok
Checking fbb configuration :
FBB options : -s -a
Running XFBB in background mode ^C to abort
Starting XFBB (pwd = /usr/local/var/ax25/fbb)...

Now look at the status

root@linux:/etc/ax25# ./ax-start status
Checking for fbb daemon: Yes, fbb is up :)
Checking for ax25d daemon: Yes, ax25d is up :)
Checking for netromd daemon: Yes, netromd is up :)
Checking for ax25rtd daemon: Yes, ax25rtd is up :)
Checking for flexd daemon: Yes, flexd is up :)
Checking for mheardd daemon: Yes, mheardd is up :)
Checking for ax25ipd daemon: Yes, ax25ipd is up :)
Checking for ax25udp daemon: Yes, ax25udp is up :)
Checking for linuxnet node: Yes, linuxnet is up :)
Checking for jnos bbs: Yes, jnos is up :)
Checking for kissattach: Yes, kissattach is up :)
Checking for slattach: Yes, slattach is up :)
Checking for kissnetd: Yes, kissnetd is up :)
Checking for mkiss: No, mkiss is down :(
Checking for socat: Yes, socat is up :)
Checking for rstatrxd: Yes, rstatrxd is up :)

Here you see that “mkiss” is down. That is because I do not use “mkiss” at the moment.

Ok, now we will stop the system

root@linux:/etc/ax25# ./ax-start stop
Shutting down jnos bbs
Shutting down FBB script
Shutting down FBB daemon
Shutting down mheardd daemon
Shutting down netromd daemon
Shutting down ax25d daemon
Shutting down ax25ipd daemon
Shutting down ax25upd daemon
Shutting down rstatrxd daemon
Shutting down ax25rtd daemon
Shutting down mkiss daemon
mkiss: no process found
Shutting down kissattach daemon
Shutting down kissnetd daemon
Shutting down slattach daemon
Shutting down socat daemon
Shutting down beacon daemon
Shutting down flexd daemon
Shutting down netrom ports
Shutting down ax ports
Shutting down rose ports
stop Failed

Here you see that stopping has failed, this is because “mkiss” can not be stopped.

Here is the start script

#!/bin/bash
# Start AX25/Netrom networking daemons.
# Script written and modified by Niels pd9q
# Date of last modification: 11-14-2018

### BEGIN INIT INFO
# Provides:       ax25
# Required-Start: $network $remote_fs $syslog
# Required-Stop:  $network $remote_fs $syslog
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Description:    AX25 server
### END INIT INFO
# Add some color
green='\e[0;32m'
red='\e[0;31m'
reset='\e[0m'

set +e   # Don't exit on error status

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/xnet:/usr/local/etc/ax25:/home/pd2lt/jnos

DESC="AX25 server"

ENABLED=1

base=${0##*/}
link=${base#*[SK][0-9][0-9]}

test $link = $base && AX_START=yes
test "$AX_START" = yes || exit 0
test -x /usr/local/etc/ax25/ax-start || exit 0

return="Done"
case "$1" in
  start)
        modprobe mkiss
        modprobe ax25
        modprobe netrom
	modprobe rose


	# Dual port TNC KPC-9612
	#mkiss -s 9600 -x 2 /dev/ttyUSB0 > /tmp/unix98
	#export PTS0=`more /tmp/unix98 | grep -w /dev | cut -b -11`
	#export PTS1=`more /tmp/unix98 | grep -w /dev | cut -b 12-`
	#sleep 1
	# Port 1k2 144.850Mhz
	echo "Starting ax0 "
        if grep ax0 /etc/ax25/axports ; then
                kissattach /dev/ttyUSB0 ax0 || return=$rc_failed

        	ifconfig ax0 44.137.31.73 netmask 255.255.255.224
       		sleep 2
        else
                echo  "Error ax0 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# Port 9k6 430.950Mhz
	echo "Starting ax1 "
        if grep ax1 /etc/ax25/axports ; then
                kissattach /dev/ttyUSB1 ax1 || return=$rc_failed

                ifconfig ax1 44.137.31.73 netmask 255.255.255.224
                sleep 2
        else
                echo  "Error ax1 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# link local pi8lap (xnet)
	echo "Starting ax2 "
	if grep ax2 /etc/ax25/axports ; then
	tmpfile="/tmp/$$.startax2.pts"
	kissnetd -p 2 > "$tmpfile" &
	sleep 2
	attachthem () {
		read PTS1 PTS2
        	kissattach -l $PTS1 ax2 44.137.31.73 || return=$rc_failed
		ifconfig ax2 44.137.31.73 netmask 255.255.255.224 up
        	sleep 1
        	sed -i "s,attach sdev3 kiss 3 1 19200 /dev/.*$,attach sdev3 kiss 3 1 19200 $PTS2," /usr/local/xnet/AUTOBOOT.NET
	}

	tail -n 1 $tmpfile | attachthem
	rm $tmpfile
	sleep 3
	else
                echo  "Error ax2 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# Link local pi1lap-4 (xnet)
	echo "Starting ax3 "
        if grep ax3 /etc/ax25/axports ; then
	tmpfile="/tmp/$$.startax3.pts"
	kissnetd -p 2 > "$tmpfile" &
	sleep 2
	attachthem () {
        	read PTS1 PTS2
        	kissattach -l $PTS1 ax3 44.137.31.73 || return=$rc_failed
		ifconfig ax3 44.137.31.73 netmask 255.255.255.224 up
        	sleep 1
        	sed -i "s,attach sdev4 kiss 4 1 19200 /dev/.*$,attach sdev4 kiss 4 1 19200 $PTS2," /usr/local/xnet/AUTOBOOT.NET
	}

	tail -n 1 $tmpfile | attachthem
	rm $tmpfile
	sleep 3
	else
                echo  "Error ax3 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# create slip link Linux <-> Xnet
	socat -d -d -ly PTY,link=/dev/ttyq1 PTY,link=/dev/ptyq1 &
	sleep 2
		slattach -s 38400 -p slip /dev/ptyq1 &
        	sleep 1
        	ifconfig sl0 44.137.31.69 netmask 255.255.255.255 pointopoint 44.137.31.70 mtu 236 up
        	sleep 1

	# create axudp device
	socat -d -d -ly PTY,link=/dev/ttyq2 PTY,link=/dev/ptyq2 &
	sleep 2
	echo "Starting ax4 "
        if grep ax4 /etc/ax25/axports ; then
		kissattach -m 256 /dev/ptyq2 ax4 44.137.31.73 || return=$rc_failed
		ax25udp -c /etc/ax25/ax25ipd-10093.conf > /tmp/axudp
		ifconfig ax4 44.137.31.73 netmask 255.255.255.224 up
	sleep 1
	else
                echo  "Error ax4 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# create axip device
        socat -d -d -ly PTY,link=/dev/ttyq3 PTY,link=/dev/ptyq3 &
        sleep 2
	echo "Starting ax5 "
        if grep ax5 /etc/ax25/axports ; then
        	kissattach -m 256 /dev/ptyq3 ax5 44.137.31.73 || return=$rc_failed
        	ax25ipd -c /etc/ax25/ax25ipd-axip.conf > /tmp/axip
        	ifconfig ax5 44.137.31.73 netmask 255.255.255.224 up
	sleep 1
	else
                echo  "Error ax5 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# create socat device (jnos-uro)
        socat -d -d -ly PTY,link=/dev/ttyq4 PTY,link=/dev/ptyq4 &
	sleep 2
	echo "Starting ax6 "
        if grep ax6 /etc/ax25/axports ; then
		kissattach -m 256 /dev/ptyq4 ax6 44.137.31.73 || return=$rc_failed
                ifconfig ax6 44.137.31.73 netmask 255.255.255.224 up
	sleep 1
	else
                echo  "Error ax6 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# attach rose port
	echo "Starting rose0 "
        if grep rose0 /etc/ax25/rsports ; then
        	rsattach rose0 || return=$rc_failed
        	ifconfig rose0 44.137.31.73 netmask 255.255.255.224
        	rsparms -call PI1LAP-10
	else
                echo  "Error rose0 not found in the file rsports"
                return="Failed"
        fi
        echo "$1 $return"

	# MFnos running in DOSEmu
	# Set the comport in de file /etc/dosemu/dosemu.comf $_com1 = "dev/ttyq5"
	#socat -d -d -ly PTY,link=/dev/ttyq5 PTY,link=/dev/ptyq5 &
	#	slattach -n -q -p slip -s 38400 /dev/ptyq5 &
        #sleep 2
	# KISS inteface for MFnos / slip
        #	kissattach /dev/ptyq5 ax6 44.137.31.73
        #	kissparms -p ax6 -c 1 -f y -t 10 -s 100 -r 255
        #	axparms -setcall ax6 pi1lap-10
	#
        #	ifconfig ax3 44.88.0.9 netmask 255.255.255.224 up
	#sleep 2

	# create nr0 device (lapuro/pi1lap-5) uronode
	echo "Starting nr0 "
        if grep nr0 /etc/ax25/nrports ; then
	        ifconfig nr0 down
        	nrattach -i 44.137.31.73 -m 512 nr0 || return=$rc_failed
        	ifconfig nr0 44.137.31.73 netmask 255.255.255.224 hw netrom PI1LAP-5 up
	else
                echo  "Error nr0 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# create nr1 device (lapbbs/pi8lap) f6fbb
        echo "Starting nr1 "
        if grep nr1 /etc/ax25/nrports ; then
		ifconfig nr1 down
        	nrattach -i 44.137.31.73 -m 512 nr1 || return=$rc_failed
        	ifconfig nr1 44.137.31.73 netmask 255.255.255.224 hw netrom PI8LAP up
	else
                echo  "Error nr1 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# create nr2 device (lapdx/pi1lap-4) dxspider
        echo "Starting nr2 "
        if grep nr2 /etc/ax25/nrports ; then
		ifconfig nr2 down
        	nrattach -i 44.137.31.73 -m 512 nr2 || return=$rc_failed
        	ifconfig nr2 44.137.31.73 netmask 255.255.255.224 hw netrom PI1LAP-4 up
	else
                echo  "Error nr2 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# create nr3 device (lappac/pi1lap-7) fpac
        echo "Starting nr3 "
        if grep nr3 /etc/ax25/nrports ; then
		ifconfig nr3 down
        	nrattach -i 44.137.31.73 -m 512 nr3 || return=$rc_failed
        	ifconfig nr3 44.137.31.73 netmask 255.255.255.224 hw netrom PI1LAP-7 up
	else
                echo  "Error nr3 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# start xnet
	cd /usr/local/xnet
	rm *.CFG &> /dev/null
	sleep 2
	./linuxnet < /dev/tty2 > /dev/tty2 2>&1 &
	./rstatrxd /var/www/cgi-bin/postat/ &> /dev/null &
	sleep 2

	# start jnos
	cd /home/pd9q/jnos
	./startnos </dev/tty3>/dev/tty3 2>&1 &
	sleep 3

	# route
	# Xnet route
	ip route add 44.137.31.70 dev sl0 table 44 src 44.137.31.69
	# Mfnos route to 192.168.1.110
	#route add 44.137.31.75 gw 192.168.1.112

	# beacons
		beacon -c PI1LAP-15 -t 10 -d  ID ax0 "Network node PI1LAP-15 Zeeland, JO11VN" &
        beacon -c PI1LAP-15 -t 10 -d  ID ax1 "Network node PI1LAP-15 Zeeland, JO11VN" &
        beacon -c PI1LAP-15 -t 10 -d  ID ax2 "Network node PI1LAP-15 Zeeland, JO11VN" &
        beacon -c PI1LAP-15 -t 10 -d  ID ax3 "Network node PI1LAP-15 Zeeland, JO11VN" &

	# start ax25 deamons
	echo "Starting ax25d daemon "
        if [ -f /usr/local/etc/ax25/ax25d.conf ] ; then
                /usr/local/sbin/ax25d || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/ax25d.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting mheardd daemon "
        /usr/local/sbin/mheardd
	echo "$1 $return"

	echo "Starting ax25rtd daemon "
        if [ -f /usr/local/etc/ax25/ax25rtd.conf ] ; then
                /usr/local/sbin/ax25rtd || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/ax25rtd.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting flexd daemon "
        if [ -f /usr/local/etc/ax25/flexd.conf ] ; then
                /usr/local/sbin/flexd || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/flexd.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting netromd daemon "
        if [ -f /usr/local/etc/ax25/nrports ] ; then
                /usr/local/sbin/netromd -c -i -p 1 -t 15 || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/nrports file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting FBB daemon "
        if [ -f /usr/local/etc/ax25/fbb/fbb.conf ] ; then
                /usr/local/sbin/fbb -s -a -l /etc/ax25/fbb.log || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/fbb/fbb.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"
        ;;

 stop)
        kill $(ps aux | grep '[l]inuxnet' | awk '{print $2}')
	echo "Shutting down jnos bbs"
        killall -KILL jnos || return="Failed"
	echo "Shutting down FBB script"
        killall -KILL fbb || return="Failed"
        echo "Shutting down FBB daemon"
        killall -KILL xfbbd || return="Failed"
        echo "Shutting down mheardd daemon"
        killall -KILL mheardd || return="Failed"
	echo "Shutting down netromd daemon"
        killall -KILL netromd || return="Failed"
	echo "Shutting down ax25d daemon"
        killall -KILL ax25d || return="Failed"
	echo "Shutting down ax25ipd daemon"
        killall -KILL ax25ipd || return="Failed"
	echo "Shutting down ax25upd daemon"
        killall -KILL ax25udp || return="Failed"
	echo "Shutting down rstatrxd daemon"
        killall -KILL rstatrxd || return="Failed"
	echo "Shutting down ax25rtd daemon"
        killall -KILL ax25rtd || return="Failed"
	echo "Shutting down mkiss daemon"
        killall -KILL mkiss || return="Failed"
	echo "Shutting down kissattach daemon"
        killall -KILL kissattach || return="Failed"
	echo "Shutting down kissnetd daemon"
        killall -KILL kissnetd || return="Failed"
	echo "Shutting down slattach daemon"
        killall -KILL slattach || return="Failed"
	echo "Shutting down socat daemon"
        killall -KILL socat || return="Failed"
	echo "Shutting down beacon daemon"
        killall -KILL beacon || return="Failed"
	echo "Shutting down flexd daemon"
        killall -KILL flexd || return="Failed"
	echo "Shutting down netrom ports"
        ifconfig nr0 down || return="Failed"
        ifconfig nr1 down || return="Failed"
        ifconfig nr2 down || return="Failed"
        ifconfig nr3 down || return="Failed"
	echo "Shutting down ax ports"
        ifconfig ax0 down || return="Failed"
        ifconfig ax1 down || return="Failed"
        ifconfig ax2 down || return="Failed"
        ifconfig ax3 down || return="Failed"
        ifconfig ax4 down || return="Failed"
        ifconfig ax5 down || return="Failed"
	echo "Shutting down rose ports"
	ifconfig rose0 down || return="Failed"
        ifconfig rose1 down || return="Failed"
	sleep 4
        echo "$1 $return"
        ;;
restart|reload)
        $0 stop && $0 start
        ;;
status)
        echo -n "Checking for fbb daemon: "
        PID=`/bin/pidof -x xfbbd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, fbb is up :)${reset}"
         else
                echo -e "${red}No, fbb is down :(${reset}"
        fi
	echo -n "Checking for ax25d daemon: "
        PID=`/bin/pidof -x ax25d`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25d is up :)${reset}"
         else
                echo -e "${red}No, ax25d is down :(${reset}"
        fi
	echo -n "Checking for netromd daemon: "
        PID=`/bin/pidof -x netromd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, netromd is up :)${reset}"
         else
                echo -e "${red}No, netromd is down :(${reset}"
        fi
	echo -n "Checking for ax25rtd daemon: "
        PID=`/bin/pidof -x ax25rtd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25rtd is up :)${reset}"
         else
                echo -e "${red}No, ax25rtd is down :(${reset}"
        fi
	echo -n "Checking for flexd daemon: "
        PID=`/bin/pidof -x flexd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, flexd is up :)${reset}"
         else
                echo -e "${red}No, flexd is down :(${reset}"
        fi
	echo -n "Checking for mheardd daemon: "
        PID=`/bin/pidof -x mheardd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, mheardd is up :)${reset}"
         else
                echo -e "${red}No, mheardd is down :(${reset}"
        fi
	echo -n "Checking for ax25ipd daemon: "
        PID=`/bin/pidof -x ax25ipd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25ipd is up :)${reset}"
         else
                echo -e "${red}No, ax25ipd is down :(${reset}"
        fi
	echo -n "Checking for ax25udp daemon: "
        PID=`/bin/pidof -x ax25udp`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25udp is up :)${reset}"
         else
                echo -e "${red}No, ax25udp is down :(${reset}"
        fi
	echo -n "Checking for linuxnet node: "
        PID=`/bin/pidof -x linuxnet`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, linuxnet is up :)${reset}"
         else
                echo -e "${red}No, linuxnet node is down :(${reset}"
        fi
	echo -n "Checking for jnos bbs: "
        PID=`/bin/pidof -x jnos`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, jnos is up :)${reset}"
         else
                echo -e "${red}No, jnos is down :(${reset}"
        fi
	echo -n "Checking for kissattach: "
        PID=`/bin/pidof -x kissattach`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, kissattach is up :)${reset}"
         else
                echo -e "${red}No, kissattach is down :(${reset}"
        fi
	echo -n "Checking for slattach: "
        PID=`/bin/pidof -x slattach`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, slattach is up :)${reset}"
         else
                echo -e "${red}No, slattach is down :(${reset}"
        fi
	echo -n "Checking for kissnetd: "
        PID=`/bin/pidof -x kissnetd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, kissnetd is up :)${reset}"
         else
                echo -e "${red}No, kissnetd is down :(${reset}"
        fi
	echo -n "Checking for mkiss: "
        PID=`/bin/pidof -x mkiss`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, mkiss is up :)${reset}"
         else
                echo -e "${red}No, mkiss is down :(${reset}"
        fi
	echo -n "Checking for socat: "
        PID=`/bin/pidof -x socat`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, socat is up :)${reset}"
         else
                echo -e "${red}No, socat is down :(${reset}"
        fi
	echo -n "Checking for rstatrxd: "
        PID=`/bin/pidof -x rstatrxd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, rstatrxd is up :)${reset}"
         else
                echo -e "${red}No, rstatrxd is down :(${reset}"
        fi

        ;;
*)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
esac

exit 0

 

Installing Direwolf and LinBPQ on Raspian Stretch

Jeff KP3FT has written a nice document about the installation of Direwolf and Linbpq on a Raspberry with raspbian Stretch. Download the complet document here.

Dire Wolf

Installing Direwolf and linBPQ on a new Raspian Stretch installation.  It’s a combination from various websites and documentation, condensed down into a straightforward walkthrough.  This doesn’t include configuration of most BPQ settings, only enough to get it to use Direwolf as a modem.

Older Raspian versions like Jessie may require Pulse Audio removed first, prior to installing Direwolf.  Raspian Stretch by default does not have Pulse Audio installed.  My Raspian config settings have SSH and VNC enabled.

First:

sudo apt-get update
sudo apt-get upgrade
sudo reboot now

After it restarts, install libasound:

sudo apt-get install libasound2-dev

Optionally install the following if you want to enable Direwolf to use the GPIO pin on certain USB sound devices for PTT:

sudo apt-get install libudev-dev

Then install Direwolf (as of this writing, version 1.5 is the latest):

cd ~
git clone https://www.github.com/wb2osz/direwolf
cd ~/direwolf
git tag
git checkout 1.5
make -j 
sudo make install 
make install-rpi
make install-conf

Plug your USB sound device(s) into the RPi, open a terminal, and run the following to verify the system sees the USB sound device(s).

aplay -l (the smallcase letter "l", not the number "1")

If the Raspberry pi’s onboard audio is enabled, it will show up as Card 0, Device 0.  The USB sound device should show up as Card 1, Device 0.  A second USB sound device will show up as Card 2, Device 0, and so on.

Open the direwolf.conf file in a text-editor, scroll down, and enable the correct USB sound device by removing the # at the beginning of the appropriate line.  For example, on mine it is:

ADEVICE  plughw:1,0

Scroll down and change “N0CALL” to your callsign in the line:

MYCALL N0CALL

Enable the modem speed you want.  In my case, I enable 300-baud:

MODEM 300

Scroll down and enable the appropriate PTT option for your setup.
Further down, enable and change the AGWPORT and KISSPORT settings for your setup.
Optionally disable all the APRS-related lines if you don’t want to use those functions.

Save the file and run Direwolf by double-clicking the desktop icon, or test-run it from Terminal with:

cd ~
direwolf

You should see packet activity if the radio is tuned on the right frequency and audio level is good.

Close Direwolf for now (CTRL-C) and install pilinBPQ (skip down to the Direwolf port section if pilinBPQ is already installed):

sudo mkdir linbpq
cd linbpq
sudo wget http://www.cantab.net/users/john.wiseman/Downloads/Beta/pilinbpq
sudo mv pilinbpq linbpq
sudo chmod +x linbpq
sudo su
setcap "CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep" linbpq
su pi
sudo mkdir HTML
cd HTML
sudo wget http://www.cantab.net/users/john.wiseman/Downloads/Beta/HTMLPages.zip
sudo unzip HTMLPages.zip
cd ~/linbpq
sudo mkdir BPQAPRS
cd BPQAPRS
sudo wget http://www.cantab.net/users/john.wiseman/Documents/Samples/APRSHTML.zip
sudo unzip APRSHTML.zip
cd ~
sudo chown -R pi:pi linbpq

Copy an existing Linux bpq32.cfg from another source to /pi/linbpq. I have an old bpq32.cfg file here which would need some substantial editing for your own setup:

https://www.qsl.net/swlkp3/Packet/bpq32(Linux).cfg .

Be sure to rename it to bpq32.cfg .If you don’t use the above bpq32.cfg file, and add one or both of these Direwolf ports in the ports section of whatever copy of bpq32.cfg you have, depending on how many Direwolf modems you want to run.  Change the port numbers to whatever works with your particular setup.  The timing settings can also be changed; these are what worked with my setup for 300-baud HF packet and 1200-baud VHF packet.

;******PORT 1 Direwolf 300-baud*****
PORT
   PORTNUM=1                 ; Port number
   ID=HF Packet 300-baud     ; PORTS command text
   TYPE=ASYNC                ; RS232 connection
   IPADDR=127.0.0.1          ; DIREWOLF
   TCPPORT=8001              ; DIREWOLF
   SPEED=19200
   CHANNEL=A                 ; TNC channel
   MAXFRAME=1                ; Max outstanding frames
   FRACK=5000                ; Level 2 timeout (ms)
   RESPTIME=40               ; Level 2 delayed ACK (ms)
   RETRIES=10                ; Level 2 max retries
   PACLEN=40                 ; Max packet length (bytes)
   TXDELAY=100               ; Transmit keyup delay (ms)
   SLOTTIME=100            ; CMSA interval timer (ms)
   TXTAIL=30
   PERSIST=63     ; Persistence (256/(# transmissions-1)
   DIGIFLAG=1       ; Allow Digipeat on this port
ENDPORT
;****** PORT 2 Direwolf 1200-baud *****
PORT
   PORTNUM=2                 ; Port number
   ID=VHF Packet 1200-baud   ; PORTS command text
   TYPE=ASYNC                ; RS232 connection
   IPADDR=127.0.0.1          ; DIREWOLF
   TCPPORT=8003              ; DIREWOLF
   SPEED=19200
   CHANNEL=A                 ; TNC channel
   MAXFRAME=1                ; Max outstanding frames
   FRACK=5000                ; Level 2 timeout (ms)
   RESPTIME=40               ; Level 2 delayed ACK (ms)
   RETRIES=10                ; Level 2 max retries
   PACLEN=236                 ; Max packet length (bytes)
   TXDELAY=100               ; Transmit keyup delay (ms)
   SLOTTIME=100            ; CMSA interval timer (ms)
   TXTAIL=30
   PERSIST=63     ; Persistence (256/(# transmissions-1)
   DIGIFLAG=1       ; Allow Digipeat on this port
ENDPORT

Save the file.

Start Direwolf.

Open another Terminal and start linBPQ:

cd ~/linbpq
sudo -u pi ./linbpq

It should connect to Direwolf(s) on port 127.0.0.1:8001 or whatever port(s) you set up.

Notes:
——
Multiple instances of Direwolf can run at the same time.  Each instance has its own “.conf” file.  Each conf file needs to be edited to enable whatever port and USB sound device will be used.  To do that, just edit the original “direwolf.conf” file and save it under a new name, such as “direwolf_HF.conf”, etc.  Start each instance in Terminal using the “-c” switch to point Direwolf to the correct “.conf” file.  In my setup, I start the first Direwolf instance in Terminal with “direwolf -c direwolf.conf”.  The second instance is started in another Terminal with “direwolf -c direwolf_HF.conf”.

Direwolf has several options that can be used in the command line.  Three that I find particularly useful are the “-q”, -T”, and “-x” options.  By default, Direwolf shows audio in/out levels in its Terminal screen.  This can be turned off with “-q h”.  For example, when I run my HF 300-baud instance of Direwolf to disable audio reports, I run “direwolf -c direwolf_HF.conf -q h”

To show timestamps of sent and received packet frames, use the “-T” option with “%H:%M:%S”.  Example: “direwolf -c direwolf_HF.conf -q h -T %H:%M:%S” to disable audio reporting and show timestamds in hours-minutes-seconds format.

The “-x” option immediately starts Direwolf transmitting calibration tones, which I use mostly to key the transciever for tuning the antenna when I switch bands.  Example: “direwolf -c direwolf_HF.conf -q h -T %H:%M:%S -x”.  Enter CNTRL-C to stop the transmit.

The complete list of command-line options are in the Direwolf user guide, pages 126 through 128: https://github.com/wb2osz/direwolf/tree/master/doc

Update RMSGateway 2.5.0.0

Finally i found some time to update the RMSGateway to RMS 2.5.0.0 with Winlink V5 CMS Web Services support. I only found the issue that if have to edit the sysop.xml and add the password. I dont have read that anywhere.

Thanks to /Basil n7nix we are good to go again.

More then 50 People of the 72 needs to update there software.

root@gw:/home/pd9q/rmsgw/admin# ./versionlist.sh
Using existing version file, with refresh interval: 10 hours

Below rev: 50, Current: 22, Total: 72 at Nov 13 08:23:24 CET 2018
RMS GW Version file is: 0 hours 0 minute(s), 46 seconds old
root@gw:/home/pd9q/rmsgw/admin#

root@gw:/home/pd9q# git clone https://github.com/nwdigitalradio/rmsgw
Cloning into 'rmsgw'...
remote: Enumerating objects: 272, done.
remote: Counting objects: 100% (272/272), done.
remote: Compressing objects: 100% (162/162), done.
remote: Total 530 (delta 194), reused 186 (delta 110), pack-reused 258
Receiving objects: 100% (530/530), 406.70 KiB | 0 bytes/s, done.
Resolving deltas: 100% (310/310), done.
Checking connectivity... done.

root@gw:/home/pd9q# cd rmsgw/admin
root@gw:/home/pd9q/rmsgw/admin# ./admin-update.sh
Update to V5 Winlink Web Service API
Found file: /etc/rmsgw/sysop.xml
Adding password to /etc/rmsgw/sysop.xml
RMS Gateway files & scripts update completed.

root@gw:/home/pd9q/rmsgw/admin# ./testwlapi.sh
Directory /root/tmp does not exist ... creating
Starting test at Tue Nov 13 05:21:59 CET 2018 ...
test finished at Tue Nov 13 05:22:14 CET 2018 ...

root@gw:/home/pd9q/rmsgw/admin# grep -i error /root/tmp/debuglog.txt
Nov 13 05:19:01 gw rmsgw_aci[32448]: Channel Stats: 2 read, 2 active, 0 down, 0 updated, 0 errors
root@gw:/home/pd9q/rmsgw/admin#

Instructions on how to update RMSGateway

Instructions on how to update to the latest scripts supporting Winlink
V5 CMS Web Services.

You need to complete this update soon as Winlink is switching its Web
Services over to only support their latest version. Note that no C
files changed for this upgrade just python scripts & the
/etc/rmsgw/hosts file.

First check your python version:

python –version

The new scripts have a requirement of python version 2.7.9 or above.
If you are running a Debian distribution then wheezy will not work,
jessie, stretch & sid are OK.

Second check that you have an /etc/rmsgw/sysop.xml file.

If you don’t have a sysop.xml file then read the admin/README.md file
https://github.com/nwdigitalradio/rmsgw/blob/master/admin/README.md

Note that the getsysop.py & mksysop.py scripts currently do not work
for the new Winlink Web Services because the SysopGet web service is
not enabled for our key. This may change in the future. If you do not
have a sysop.xml file you can use mksysop.py BEFORE you do the update.

If your system passed the python version test then you can easily
upgrade like this:

git clone https://github.com/nwdigitalradio/rmsgw
cd rmsgw/admin
# become root & run this command
…/admin-update.sh

Verify that the update is working

# As root run the test script in the admin directory

…/testwlapi.sh

# Search the log file for any errors
# The log file grabs some of the rms.debug log file and you are only
# concerned with errors found after you ran the test script

grep -i error /root/tmp/debuglog.txt

Now go to winlink.org (https://winlink.org/RMSChannels) and look at
the Winlink Packet RMS Map/RMS List/Gateway Versions sections.
Search for your call sign.

For more information read the README.md file in the rmsgw/admin
directory here:
https://github.com/nwdigitalradio/rmsgw/blob/master/admin/README.md

/Basil n7nix