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.
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

