Packet Radio BBS, Tanio i Szybko

By | 24 września 2017

W związku z tym że powrót Packet Radio na 2m jest faktem i co wieczór rozmawiamy za jego pomocą na falach ultra-krótkich, postanowiłem że potrzebujemy radiowego BBS-a. I tutaj postanowiłem połączyć razem sprawdzone rozwiązanie w roli TNC (Direwolf) oraz linBPQ.


Do uruchomienia będziemy potrzebować: raspberrypi, interfejsu separującego z radiem, oraz dodatkowej karty muzycznej na USB.
Rozpoczynamy procedurę instalacji DireWolfa, na początek instalujemy niezbędne pakiety:

sudo apt-get install libasound2-dev
sudo apt-get install git

Ważne też jest usunięcie pakietów pulseaudio który według opinii twórców DireWolfa może powodować komplikacje:

sudo apt-get remove --purge pulseaudio
sudo apt-get autoremove
rm -rf /home/pi/.pulse

Ściągamy źródła DireWolfa do katalogu domowego użytkownika pi:

cd
git clone https://www.github.com/wb2osz/direwolf

Następnie wchodzimy do katalogu (utworzył się pod nazwą direwolf w katalogu /home/pi) ze źródłami i rozpoczynamy kompilację, wydając po kolei następujące komendy:

make
sudo make install
make install-conf

Po skompilowaniu przechodzimy do katalogu /home/pi a gdzie możemy skonfigurować DireWolfa.
Zanim zaczniemy konfigurację wato sprawdzić czy karta dźwiękowa jest widoczna w systemie:

aplay -l

Powinniśmy zobaczyć mniej więcej coś takiego:

pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
pi@raspberrypi:~ $

Używamy karty muzycznej podłączonej do portu USB. I to tę kartę należy skonfigurować w pliku konfiguracyjnym który po instalacji DireWolfa znajduje się w /home/pi/direwolf.conf. Konfigurujemy także pin GPIO który będzie naciskał PTT w radiu za pomocą dodatkowego układu wykonawczego, możemy także ustawić sygnalizację dekodowania ramki na kolejnym pinie GPIO:

ADEVICE plughw:1,0
PTT GPIO 25
DCD GPIO 24

 

Kolejny krok to konfiguracja automatycznego startu direwolfa i linBPQ, na początek tworzymy plik startowy dla direwolfa:

sudo pico /etc/systemd/system/direwolf.service

Wewnątrz którego wpisujemy:

[Unit]
Description=Direwolf Daemon
After=network.target sound.target

[Service]
ExecStartPre=/bin/rm -f /tmp/kisstnc
ExecStart=/home/pi/direwolf/direwolf -t 0 -c /home/pi/direwolf/direwolf.conf -p
ExecStop=/bin/rm -f /tmp/kisstnc

[Install]
WantedBy=multi-user.target
DefaultInstance=1

Następnie wydajemy komendę która spowoduje uruchomienie direwolfa przy każdym starcie:

sudo systemctl enable direwolf.service

Jeśli zachodzi potrzeba zatrzymania lub uruchomienia direwolfa korzystamy z polecenia:

 sudo systemctl stop direwolf.service
 sudo systemctl start direwolf.service

Przełącznik -p podczas startu direwolfa uruchamia go z opcją emulacji KISS TNC na porcie /dev/pts/1, dzięki temu będziemy mogli podłączyć linBPQ do tego TNC.

LinBPQ ściągamy ze strony twórcy oprogramowania:
http://www.cantab.net/users/john.wiseman/Documents/
(bezpośredni link do linbpq na raspberry pi)
W katalogu domowym użytkownika pi przygotowujemy folder linBPQ do którego wgrywamy pobrany plik, a następnie zmieniamy uprawnienia i tworzymy plik konfiguracyjny.

sudo chmod +x pilinbpq
touch bpq32.cfg

Następnie przystępujemy do konfiguracji linBPQ, poniżej przykładowy plik konfiguracyjny dla noda linBPQ oraz fragmenty dwóch plików konfiguracyjnych, jeden dla BBS-a a drugi dla CHAT’a.

LOCATOR=KO02LG
MAPCOMMENT=SQ9MDD-11, BBS Node

NODECALL=SQ9MDD-11      ; Node callsign
NODEALIAS=WARBEM        ; Node alias (6 characters max)

IDMSG:
SQ9MDD BBS DIREWOLF&linBPQ
***

BTEXT:                  ; UI broadcast text from BCALL to destination UNPROTO=
DIREWOLF&linBPQ
***

INFOMSG:                ; The INFO command text follows:
SQ9MDD LinBPQ Packet/Switch Node 
Computer  : RaspberryPi
TNC       : Direwolf
Interface : SQ9MDD separation KIT
Rx/Tx     : Yaesu FT-817
Sysop     : Rysiek Labus
***

CTEXT: ; The CTEXT text follows:
Witaj polaczyles sie z SQ9MDD-11. BBS Warszawa Bemowo
Wpisz ? by uzyskac pomoc. 
***

FULL_CTEXT=1

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.
LogL4Connects=0		;
NODESINTERVAL=15	; Nodes broadcast interval in minutes
IDINTERVAL=0		; 'IDMSG' UI broadcast interval in minutes, 0=OFF
BTINTERVAL=60		; The BTEXT broadcast interval in minutes, 0=OFF
L3TIMETOLIVE=5		; 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=63		; Max level 2 links
MAXNODES=1024		; Max nodes in nodes table
MAXROUTES=128		; Max adjacent nodes
MAXCIRCUITS=1024	; Max L4 circuits
MINQUAL=100		; Minimum quality to add to nodes table
MAXHOPS=10		; INP3 hop limit to add to tables
MAXRTT=90		; INP3 max RTT in seconds
BUFFERS=130		; Packet buffers - 255 means allocate as many as
                        ; possible, normally about 130, depending upon other
                        ; table sizes.
 
; TNC default parameters:
 
PACLEN=130		; Max packet size (236 max for net/rom)
T3=120			; Link validation timer in seconds
IDLETIME=10000		; Idle link shutdown timer in seconds
 
; Configuration Options:
 
AUTOSAVE=1		; Saves BPQNODES.dat upon program exit
BBS=1			; 1 = BBS support included, 0 = No BBS support
NODE=1			; Include switch support
HIDENODES=0		; If set to 1, nodes beginning with a #
ENABLE_LINKED=Y		; Controls processing of *** LINKED command
                        ; Y = allows unrestricted use
                        ; A = allows use by application program
                        ; N = disabled
; aktywne moduly
LINMAIL
LINCHAT

; aplikacje
APPLICATION 1,BBS,,SQ9MDD-8,MDDBBS,255
APPLICATION 2,CHAT,,SQ9MDD-9,MDDCHAT,255

; telnet port
PORT
 PORTNUM=1	
 ID=Telnet via VPN
 DRIVER=Telnet
 PORTCALL=SQ9MDD-10 
CONFIG
 CMS=1
 CMSCALL=SQ9MDD-10
 CMSPASS=ko02lg
 LOGGING=1
 DisconnectOnClose=1
 CMDPORT 7400 63000
 TCPPORT=6323
 FBBPORT=6300
 HTTPPORT=9180
 LOGINPROMPT=User:
 PASSWORDPROMPT=Password:
 MAXSESSIONS=10
 CTEXT=Welcome to SQ9MDD`s BBS Telnet Server.\nPress ? For list of commands \n\n
 USER=SQ9MDD,******,SQ9MDD,,SYSOP
 USER=SQ5WLA,******,SQ5WLA,,SYSOP
ENDPORT

PORT
 ID=144.850Mhz Port Radiowy     ; Displayed by PORTS command
 TYPE=ASYNC			; Port is RS232 Com
 PROTOCOL=KISS			; TNC is used in KISS, JKISS or BPQKISS mode
 FULLDUP=0			; Only meaningful for KISS, JKISS or BPQKISS devices
 COMPORT=/dev/pts/2		; Direwolf na wirtualnym TNC
 SPEED=19200			; RS232 COM PORT SPEED
 CHANNEL=A			; A for single channel TNC, A or B for multichannel
 NOKEEPALIVES=1
 PERSIST=64			; PERSIST=256/(# of transmitters-1)
 SLOTTIME=150			; CMSA interval timer in milliseconds
 ; DWAIT=20			; zwieksza odstep pomiedzy RX TX
 TXDELAY=300			; Transmit keyup delay in milliseconds
 TXTAIL=90			; TX key down, in milliseconds, at packet end
 QUALITY=192			; Quality factor applied to node broadcasts heard on
 MINQUAL=100			; Entries in the nodes table with qualities greater 
 MAXFRAME=7			; Max outstanding frames (1 thru 7)
 FRACK=5000			; Level 2 timout in milliseconds
 RESPTIME=3000			; Level 2 delayed ack timer in milliseconds
 RETRIES=10			; Level 2 maximum retry value
 PACLEN=130			; Default max packet length for this port
 UNPROTO=CQ                     ; BTEXT broadcast addrs format: DEST[,digi1[,digi2]]
 BCALL=SQ9MDD-11                ; BTEXT call. unstated defaults to APPL1CALL
 L3ONLY=0			; 1=No user downlink connects on this port
 DIGIFLAG=0			; Digipeat: 0=OFF, 1=ALL, 255=UI Only
 DIGIPORT=0			; Port on which to send digi'd frames (0 = same port)
 USERS=0                        ; Maximum number of L2 sessions, 0 = no limit
ENDPORT
main : 
{
  Streams = 10;
  BBSApplNum = 1;
  BBSName = "SQ9MDD-8";
  SYSOPCall = "SQ9MDD";
  ...
Chat : 
{
  ApplNum = 2;
  MaxStreams = 12;
  OtherChatNodes = "";
  ChatWelcomeMsg = "Witaj zapraszam do rozmowy ";
  ...

Gdy mamy już przygotowaną konfigurację linBPQ przystępujemy do konfiguracji systemu tak by linBPQ było uruchamiane przy starcie.
Tworzymy pliki startowe serwisu:

pico /home/pi/linBPQ/runbpq

Zawartość runbpq wygląda tak:

cd /home/pi/linBPQ
sudo ./pilinbpq > /dev/tty2

Serwis linbpq:

sudo pico /etc/systemd/system/linbpq.service

Wewnątrz linbpq.service wpisujemy:

[Unit]
After=network.target direwolf.service

[Service]
ExecStart=/bin/bash /home/pi/linBPQ/runbpq
Restart=always

[Install]
WantedBy=multi-user.target

I podobnie jak to było w przypadku direwolfa musimy wydać komendę która spowoduje uruchomienie linBPQ przy każdym starcie:

sudo systemctl enable linbpq.service

Jeśli zachodzi potrzeba zatrzymania lub uruchomienia linBPQ korzystamy z polecenia:

 sudo systemctl stop linbpq.service
 sudo systemctl start linbpq.service

Opisana tutaj konfiguracja jest w zasadzie najprostszą i najtańszą z możliwych. Tak skonfigurowany węzeł pozwala na łączenie sie poprzez niego z innymi stacjami, wchodzenie na grupowego chata czy też pozostawianie wiadomosci w lokalnym BBS-ie.

BBS-test

Za jakiś czas opiszę kolejne możliwości związane z połaczeniem BBS-a do sieci HamNet i AmprNet.
A póki co zapraszam do łączności via Packet-Radio.

Rysiek SQ9MDD