Just for fun. Reminds me of earlier packet day’s
sudo apt-get install neofetch
Packet-radio A Way Of Life
Just for fun. Reminds me of earlier packet day’s
sudo apt-get install neofetch
Here is a nice terminal program that connects directly to OpenBCM. This program is suitable for the Raspberry PI.
You can download it here (CLICK)
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
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.
Came across the new Raspberry PI 3 Model A +
Look very nice
https://www.raspberrypi.org/blog/new-product-raspberry-pi-3-model-a/
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
Ken G7VJA – GB7COW has send me the missing fbbw-116 program.
Thank you very much I really appreciate it.
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
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 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