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