[Nov-2024] VE3VTY was a packet system I ran from Algonquin Highlands, Ontario for a few years. It was a fantastic station which had equally fantastic reach considering how it was thrown together. This page is a historical posting and the station is no longer running in Algonquin Highlands or in any similar configuration. I keep this up for your reading pleasure, cheers.
I've been asked by many people about why I setup VE3VTY. The answer is quite easy: because. Some have even gone on to ask how I will illustrate how the system is configured and explain what's what and why what's what is what. If you have any questions or comments please direct them to my socials or email or whatever keys your transmitter.
While I consider myself fairly technically capable, one thing I've learned over my years is that I'm not a fan of bullshit. I like to take a pragmatic approach to information systems and choosing what works reliably with as little headache as possible. Hopefully this will explain why I am running a mixed OS setup and like most all things in life, love and politics, your milage may vary.
The packet system runs from the discomfort of this Lenovo ThinkCentre M900. Which seems to have the CPU pegged at around 50-65% continuously thanks to my flagrant (mis)use of soundmodems.
This is an old buisness machine which can be obtained, inexpensively. They're fantastic machines for the purpose because they give you a lot of bang for little power/price. I've been asked why I don't run this on a Raspberry Pi and the long of the short, they're too expensive and slow and limited. If you're simply running a pilinbpq instance and direwolf, a pi will be quite comfortable though!
High fidelity system overview:
I charge $90/hr for my design services, contact me for consultation.
Windows 10 Pro is the host OS for VTY, despite what the Stallmanites may preach, it is stable and gives me little need to babysit it. Windows also has Hyper-V, a virtualization platform which will allow you to run Virtual Machines, such as the Debian 11 instance which I run linbpq from. The rationale for running Windows on the host is that Hyper-V is fairly decent and will easily do what I need it to do while allowing me run the soundmodems on their native platform, all from one machine. Yesyes, I know you can run soundmodems in Linux and yaddadyadda kjhkdjhfks but like, it's a total pain in the ass to get VARA running if at all in Wine, and I've had stability issues with qtSoundModem. Unlike the Linux based alternatives, it is quick and trivial to administrate this layout while offering the best of both worlds. Make sure to use something like TightVNC for remote access though, because if you connect to your machine via RDP it will hijack all the sound devices and do bad things, you've been warned...and yet this is still better than Xvnc and the circus of getting all these modes running in one OS like Linux.
This setup makes it easy to remotely play with teh ham radya's via TightVNC; hijack a radio for WSJTX, MMSTV, whatever for a bit before returning it to the node. It can be a bit of a dogs breakfast, but this is ham radio and it's far too late for you to be complaining about aestetics. If you like aestetics, go hang out with those commercial radio folks ...yuck.
I also have the entire operation connected to an IoT powerbar where I can remotely turn off individual radios and the computer itself. Which makes it handy to troubleshoot issues or give a remote attitude check. As of writing this I've not had to ever do this though.
Within Hyper-V is a Debian 11 instance which runs the actual goodies like BPQ and other peripheral scripts like WALL.
List of reasons why I'm running a split OS system:
My opinion towards operating systems & their evangelists:
I run the following modes:
All these modes allow for the best spread of users and applications...:
AX.25 for the usual established Net104/Net40 which allows those with legacy equipment to access the system.
IL2P for those who like the benefits of Layer 2 protocols on their modern modems & systems.
VARA for high speed applications such as RMS and my own personal tastes.
ARDOP as the open-source alternative to VARA and for the peeps using PAT RMS on raspi's out and about.
SCS Robust because someone said it was cool, and it's kinda cool...works really well..so yeah, variety is the spice of life.
So, Net104/Net40 is the popular AX.25 network in North America. Originally I had my dials on 14.105 LSB and 7.104 LSB, which was great and all, but also boring. I wanted more ...and I came across PE1RRR's amazing website((now SK, thanks for everything Red<3)) where he illustrated how they're using a compatible layout but on USB in Europe and it just made sense. Using that QRG allowed me to stack AX.25 traffic at 1000Hz, VARA/ARDOP 500 at center 1500Hz and then stuff IL2P at 2000Hz. This stacking protected Net104/Net40 AX.25 legacy systems while allowing one to use faster modes like VARA/ARDOP...All from a single radio. I noticed regional systems adopting this layout increasingly over the past year and joining me and the others in these new modes. IL2P specifically has really blown up and I love to see it.
The following are my active dial QRGs which allow me to stuff all these modes onto a single radio while keeping 1000Hz AX.25 overlapped on the legacy Net104/Net40.
Dial QRGs:
*sauce: https://radiorabbit.ca/ve3vty
I employ two SignaLink USB's on my packet system and they're fantastic interfaces, I've no complaints beyond what they charge for it. As for my mobile and portable digital operations I use the DigiLink Nano from HB9ZHK because it's small, fairly priced and of excellent build quality. I personally recommend the DigiLink and own about five of them. They make excellent stocking stuffers! The interfaces handle the PTT via VOX because KISS.
The radios I use are nothing fancy. An Icom 756Pro and a Yaesu FT-900 that was dropped on it's head, but it still manages. And for antenna's I use G5RV's that have been strung about 25m (80ft) up in tall pine trees using my drone....that's a discussion for another page. As a true digital lid, you'll notice no mics are plugged into these radios, as is the custom of our people.
This is not a replacement, or really even a supplement for the linbpq installation instructions/documentation. If you have specific questions please reach out to me.
If you're running a 64bit linux distro (which I hope most all of you are by now), you must take note that John G8BPQ distributes a 32bit version on his website, and if you wish to run that in your fancy 64bit linux you will need to install the appropriate foundations. I primarily use debian so I'm going to give you the instructions for that below. If you're using Arch you shouldn't need my help. If you're using Fedora or Redhat, you'll need professional help.
You can also download and compile from source if you'd prefer a 64bit version, but there have been quirks with this...and so I'm running his released 32bit binary.
Enable 32bit on Debian-based distros:sudo dpkg --add-architecture i386 sudo apt update sudo apt install ia32-libs // if ia32-libs isnt in your repo sudo apt install lib32z1 sudo apt install libasound2:i386 sudo apt-get install libcap2-bin
Now go fetch a copy of linbpq from John G8BPQ's Downloads. When you have the binary you're gonna wanna +x the silly bugger and set the capabilities such that it will let linbpq to do naughty things with your network system like open low ports and tinker with raw ethernets.
chmod a+x linbpq sudo setcap "CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep" linbpq
And with that, linbpq should now be executable and happily run with user level privileges. You can fire it up if you'd like, see if it works. If not you might be missing a library or something. You can see what libraries it needs using "ldd linbpq" and then hunt down the stragglers.
You'll also need to install the supplemental HTMLPages.zip for linbpq which are for the web admin interface. So make sure to do that, all the files from the archive will go into an 'HTML' subdirectory, case sensitive. And you can grab that archive at John G8BPQ's Downloads.
There are also some various files you'll want to create such as info.txt and NodeHelp.txt (both case sensitive). The info.txt file is simply dumped out when a user types the INFO command on the node, and NodeHelp.txt is dumped when they type HELP.
As for systemd I use the following service configuration to run my instance inside GNU Screen. If you use this make sure you know what screen is and how to use it.
/etc/systemd/system/bpq.service[Unit] Description=BPQ After=network.target [Service] Restart=on-failure RestartSec=60s Type=forking User=ve3vty Group=ve3vty WorkingDirectory=/home/ve3vty/bpq ExecStart=/usr/bin/screen -S packet -d -m /home/ve3vty/bpq/linbpq SyslogIdentifier=BPQ [Install] WantedBy=multi-user.target
You'll need to 'sudo systemctl daemon-reload' and 'sudo systemctl enable bpq' to get that all kicked into place and good... Once that's done you should be able to start the service 'sudo systemctl start bpq' and connect to it using 'screen -x packet'
Alternately, you can just clone and config https://github.com/pe1rrr/linbpq_rtg which is a full linbpq install ready to go, by the one and only Red PE1RRR. Isn't he just a darling!
In the interests of time (and totally not laziness) I'm going to show you a sanitized version of my entire configuration file for you to cut&paste and reference...whatever you'd like. Please note that any errors in this configuration are totally someone elses fault since I pretty much stole most of this from about a dozen different sources. If you find an error or problem in this config please do let me know (especially since it's in 'production').
bpq32.cfg
; N0CALL Packet System Config ; ; LINMAIL LINCHAT ;SYSOP Password: www.cantab.net/users/john.wiseman/Documents/Node%20SYSOP.html PASSWORD=takeoffhoser ; 12345678910 NODECALL=N0CALL-7 NODEALIAS=CALNOD LOCATOR=EN03xc ;------------------------------ NETWORK SYSTEM PARAMETERS ---------------------------------------- ; Network System Parameters: ; ; Nerd Stuff - one parameter you may need to adjust is MINQUAL if you do not get any nodes ; appearing in your table, lower it. Nodes are broadcasted every 30 minutes. ; OBSINIT=6 ; Initial obsolescence set when a node is included ; in a received nodes broadcast. This value is then ; decremented by 1 every NODESINTERVAL. OBSMIN=4 ; When the obsolescence of a node falls below this ; value that node's information is not included in ; a subsequent nodes broadcast. NODESINTERVAL=30 ; Nodes broadcast interval in minutes L3TIMETOLIVE=20 ; Max L3 hops L4RETRIES=3 ; Level 4 retry count L4TIMEOUT=60 ; Level 4 timeout in seconds s/b > FRACK x RETRIES L4DELAY=10 ; Level 4 delayed ack timer in seconds L4WINDOW=4 ; Level 4 window size MAXLINKS=256 ; Max level 2 links MAXNODES=1000 ; Max nodes in nodes table MAXROUTES=144 ; Max adjacent nodes MAXCIRCUITS=160 ; Max L4 circuits MINQUAL=191 ; TNC default parameters: PACLEN=120 ; Max packet size (236 max for net/rom) ; 236 is suitable for reliable and fast connections, such ; as AX/IP/UDP or a dedicated 9600 RF Link ; 120 is suitable for a typical shared VHF packet radio connection ; PACLEN is defined for each port individually in the ports sections ; Level 2 Parameters: ; T1 (FRACK), T2 (RESPTIME) and N2 (RETRIES) are now in the PORTS section T3=120 ; Link validation timer in seconds IDLETIME=720 ; Idle link shutdown timer in seconds ; AGWPE Emulation - EasyTerm/QtTermTCP AGWPORT=8100 AGWMASK=0x30 AGWSESSIONS=10 AGWLOOPMON=1 AGWLOOPTX=1 ; Configuration Options: SAVEMH=1 ; Saves MH lists when shutdown/restarted AUTOSAVE=1 ; Saves BPQNODES.dat upon program exit BBS=1 ; 1 = BBS support included, 0 = No BBS support NODE=1 ; Include switch support HIDENODES=1 ; If set to 1, nodes beginning with a # will be hidden from your table ; they can still be shown using 'N *' command ; The *** LINKED command is intended for use by gateway software, and concern ; has been expressed that it could be misused. It is recommended that it be ; disabled (=N) if unneeded. ENABLE_LINKED=A ; Controls processing of *** LINKED command ; Y = allows unrestricted use ; A = allows use by application program ; N = disabled BTINTERVAL=0 ; Beacon interval (minutes) BTEXT: ; Beacon text [EN03xc] N0CALL-7/N -1/B -10/RMS {BPQ} *** IDINTERVAL=30 ; UI broadcast interval (minutes) IDMSG: [EN03xc] N0CALL-7/N -1/B -10/RMS {BPQ} *** MAPCOMMENT=Some Packet System
40m & 20m Packet System
AFSK, VARA, ARDOP, ROBUST INFOMSG: N0CALL Packet System Some Place, Some Where Grid: EN03xc HELP for verbose command info. SysOp: Nobody N0CALL2 *** FULL_CTEXT=0 ; 0=send CTEXT to L2 connects to NODEALIAS only ; 1=send CTEXT to all connectees CTEXT: ; Connect Message N0CALL-7/N {BPQ} (? for commands) *** ;------------------------------ APRS PARAMETERS ---------------------------------------- ;APRSDIGI ; APRSCall N0CALL ; StatusMsg=Packet System {BPQ} ; Symbol=B ; Symset=/ ; APRSPath 1=APRS,WIDE1-1 ; APRSPath 11=APRS ; APRSPath 12=APRS ; BeaconInterval=30 ; digi map, to IS only ; Digimap 1=IS ; TraceCalls=WIDE,TRACE ; DigiCalls=N0CALL ; ReplaceDigiCalls ; LAT=4513.15N ; LON=07951.30W ; BeaconToIS=1 ; ISHost=noam.aprs2.net ; ISPort=14580 ; ISPasscode=696969 ;*** ; PORT 1 & 2 ;------------------------------ VHF PORTS ---------------------------------------- ; need to use KISS instead of UZ7HO as NETROM broadcasts will not flow over that driver. ;PORT ; PORTNUM=1 ; ID=145.050 MHz AX1200 ; TYPE=ASYNC ; PROTOCOL=KISS ; IPADDR=192.168.0.10 ; TCPPORT=5000 ; CHANNEL=A ; RETRIES=5 ; FULLDUP=0 ; PACLEN=236 ; MAXFRAME=1 ; SLOTTIME=200 ; PERSIST=64 ; FRACK=7000 ; RESPTIME=1000 ; QUALITY=192 ; DIGIFLAG=0 ; INTERLOCK=3 ;VHF Radio ; MHEARD=Y ; USERS=5 ; WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 145050000, PKT1200, 45, 50, 4, 0 ;ENDPORT ;PORT ; PORTNUM=2 ; ID=145.050 MHz VARA-FM ; DRIVER=VARA ; INTERLOCK=3 ;VHF Radio ; QUALITY=192 ; CONFIG ; ADDR 192.168.0.10 5100 ; WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 145050000, VARAFM, 45, 50, 4, 0 ;ENDPORT ; PORT 3 & 4 ;------------------------------ AX.25 HF PORTS ---------------------------------------- PORT PORTNUM=3 ID=40M AX300 DRIVER=UZ7HO CHANNEL=A FULLDUP=0 PACLEN=60 RETRIES=8 PERSIST=64 MAXFRAME=1 INTERLOCK=1 ;40M Radio MHEARD=Y QUALITY=50 CONFIG ADDR 192.168.0.10 3000 MAXSESSIONS=4 ENDPORT PORT PORTNUM=4 ID=20M AX300 DRIVER=UZ7HO CHANNEL=A FULLDUP=0 PACLEN=60 RETRIES=8 PERSIST=64 MAXFRAME=1 INTERLOCK=2 ;20M Radio MHEARD=Y QUALITY=50 CONFIG ADDR 192.168.0.10 4000 MAXSESSIONS=4 ENDPORT ; PORT 5 & 6 ;------------------------------ IL2P HF PORTS ---------------------------------------- PORT PORTNUM=5 ID=40M IL2P 300bd DRIVER=UZ7HO CHANNEL=A FULLDUP=0 PACLEN=80 RETRIES=8 PERSIST=64 MAXFRAME=1 INTERLOCK=1 ;40M Radio MHEARD=Y QUALITY=65 CONFIG ADDR 192.168.0.10 3100 MAXSESSIONS=6 ENDPORT PORT PORTNUM=6 ID=20M IL2P 300bd DRIVER=UZ7HO CHANNEL=A FULLDUP=0 PACLEN=80 RETRIES=8 PERSIST=64 MAXFRAME=1 INTERLOCK=2 ;20M Radio MHEARD=Y QUALITY=65 CONFIG ADDR 192.168.0.10 4100 MAXSESSIONS=6 ENDPORT ; PORT 7 & 8 ;------------------------------ VARA HF PORTS ---------------------------------------- PORT PORTNUM=7 ID=40M VARA-500 DRIVER=VARA INTERLOCK=1 ;40M Radio QUALITY=80 CONFIG ADDR 192.168.0.10 3200 BW500 WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 7102800, VARA500, 100, 80, 4, 0 ENDPORT PORT PORTNUM=8 ID=20M VARA-500 DRIVER=VARA INTERLOCK=2 ;20M Radio QUALITY=80 CONFIG ADDR 192.168.0.10 4200 BW500 WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 14103800, VARA500, 100, 50, 0, 0 ENDPORT ; PORT 9 & 10 ;------------------------------ ARDOP HF PORTS ---------------------------------------- PORT PORTNUM=9 ID=40M ARDOP DRIVER=ARDOP INTERLOCK=1 ;40M Radio MHEARD=Y QUALITY=50 CONFIG ADDR 192.168.0.10 3300 CAPTURE SignaLink USB FT-900 (USB Audio PLAYBACK SignaLink USB FT-900 (USB Audio DEBUGLOG False CMDTRACE False CWID False DRIVELEVEL 100 GRIDSQUARE EN03xc MAXCONREQ 12 PROTOCOLMODE ARQ FECREPEATS 3 ARQBW 500MAX ARQTIMEOUT 60 MONITOR TRUE SQUELCH 3 WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 7102800, ARDOP500, 100, 80, 4, 0 ENDPORT PORT PORTNUM=10 ID=20M ARDOP DRIVER=ARDOP INTERLOCK=2 ;20M Radio MHEARD=Y QUALITY=50 CONFIG ADDR 192.168.0.10 4300 CAPTURE SignaLink USB IC-756 (2- USB AU PLAYBACK SignaLink USB IC-756 (2- USB AU DEBUGLOG False CMDTRACE False CWID False DRIVELEVEL 100 GRIDSQUARE EN03xc MAXCONREQ 12 PROTOCOLMODE ARQ FECREPEATS 3 ARQBW 500MAX ARQTIMEOUT 60 MONITOR TRUE SQUELCH 3 WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 14103800, ARDOP500, 100, 50, 0, 0 ENDPORT ; PORT 11 & 12 ;------------------------------ ROBUST PACKET HF PORTS ---------------------------------------- PORT PORTNUM=11 ID=40M Robust Packet TYPE=ASYNC PROTOCOL=KISS IPADDR=192.168.0.10 TCPPORT=3400 KISSOPTIONS=NOPARAMS CHANNEL=A QUALITY=0 FRACK=9000 RESPTIME=2700 RETRIES=10 MAXFRAME=1 PACLEN=90 UNPROTO=ID L3ONLY=0 DIGIFLAG=0 USERS=3 INTERLOCK=1 ;40M Radio MHEARD=Y WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 7102800, ROBUST, 100, 80, 4, 0 ENDPORT PORT PORTNUM=12 ID=20M Robust Packet TYPE=ASYNC PROTOCOL=KISS IPADDR=192.168.0.10 TCPPORT=4400 KISSOPTIONS=NOPARAMS CHANNEL=A QUALITY=0 FRACK=9000 RESPTIME=2700 RETRIES=10 MAXFRAME=1 PACLEN=90 UNPROTO=ID L3ONLY=0 DIGIFLAG=0 USERS=3 INTERLOCK=2 ;20M Radio MHEARD=Y WL2KREPORT PUBLIC, api.winlink.org, 80, N0CALL-10, EN03xc, 00-23, 14103800, ROBUST, 100, 50, 0, 0 ENDPORT ; PORT 15 & 20 INTERNET ;---------------------------- BPQ TELNET SERVER PORT -------------------------------------------- PORT PORTNUM=15 ID=Telnet DRIVER=TELNET QUALITY=192 CONFIG LOGGING=1 TCPPORT=23 FBBPORT=8011 HTTPPORT=80 CMDPORT=6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 ; APPLICATION numerated local ports CMS=1 CMSCALL=N0CALL CMSPASS=DEADBEEF69 CMSLOGGING=1 CTEXT=Connected to CALNOD:N0CALL-7\nEnter ? for list of commands\n\n LOGINPROMPT=callsign: PASSWORDPROMPT=password: DisconnectOnClose=1 MAXSESSIONS=10 LOCALNET=192.168.0.0/24 USER=N0CALL,stfulearncode,N0CALL2,,SYSOP ;user,pass,call,CMD,SYSOP? WebTermCSS=font-family:monospace;background-color:black;color:lawngreen;font-size:12pt; ENDPORT PORT PORTNUM=20 ID=AX/IP ; AX/IP/UDP Wormholes DRIVER=BPQAXIP ; Uses BPQAXIP.DLL QUALITY=192 MINQUAL=191 MAXFRAME=7 ; Max outstanding frames (1 thru 7) FRACK=7000 ; Level 2 timout in milliseconds RESPTIME=1000 ; Level 2 delayed ack timer in milliseconds RETRIES=10 ; Level 2 maximum retry value PACLEN=236 MHEARD=Y CONFIG UDP 10093 ;Listens for UDP packets on this UDP port number BROADCAST NODES ;AUTOADDMAP ;adds the node call for receives UDP packet for which you do not have a MAP entry ;** You're welcome to connect to me for testing, poke me if you wanna make it more perm. ** ;VE3DTJ Daria -- Algonquin Highlands, ON [FN05ng] // ve3dtj ((at)) radiorabbit ((dot)) ca ;MAP VE3VTY-7 vty.radiorabbit.ca UDP 10093 B ;--other map lines here to remote systems. ENDPORT ; For locked routes (max 32) go here. Only use this if you know what you are doing. Not normally required! ROUTES: *** ;------------------------------------- APPLICATIONS -------------------------------------------- ; base applications APPLICATION 1,BBS,,N0CALL-1,CALBBS,255 APPLICATION 2,RMS,C 15 CMS,N0CALL-10,CALRMS,255 APPLICATION 3,CHAT,,N0CALL-11,CALCHT,255 APPLICATION 4,LOCAL,CHAT N0CALLLocal ; node command extensions (external applications) APPLICATION 10,PORTFREQ,C 15 HOST 0 NOCALL S APPLICATION 11,WALL,C 15 HOST 1 S,N0CALL-14,CALWAL,255 APPLICATION 13,ELMER,C 15 HOST 3 S APPLICATION 14,WEB,C 15 HOST 4 S ; AGWPE Emulated Port/Terminal (use your base call or different one) APPLICATION 5,KEYS,,S0MECALL
© radiorabbit.ca Oct-2023