====== SVXLink Reflector + portal + live broadcaster ====== ===== Loopback sound interfaces ===== To redistribute your reflector content to icecast, you'll need to set up loopback sound interfaces. The following file will be used to create 3 loopback interfaces at boot time. It shall be placed in ''/etc/modprobe.d/'': options snd-aloop enable=1,1,1 index=10,11,12 Then run the following command: echo "snd-aloop" >> /etc/modules The code above takes care of boot time configuration. To add the interfaces without rebooting, run the following: (lsmod | grep snd_aloop) && modprobe -r snd_aloop modprobe snd-aloop enable=1,1,1 index=10,11,12 You need to adjust the ''enable'' and ''index'' parameters to insert additional interfaces. ===== Icecast ===== Install ''icecast2'' from repository. Below, you'll find the configuration file to install in ''/etc/icecast2/'' after having changed the passwords. Region Auvergne-Rhone-Alpes icemaster@localhost 100 10 524288 30 15 10 1 65535 CHANGEME CHANGEME admin CHANGEME icecast.ham42.net 5299 8080
1 /usr/share/icecast2 /var/log/icecast2 /usr/share/icecast2/web /usr/share/icecast2/admin access.log error.log 3 10000 0 ===== SVXReflector ===== ==== Patching and installing the package ==== Ensure your ''sources.list'' file contains the ''deb-src'' lines. Run the following commands: cd /usr/local/src apt build-dep svxreflector apt source svxreflector apt install quilt cd svxlink-* Drop the following file in ''./debian/patches''. Index: svxlink-19.09.1/src/svxlink/reflector/ReflectorClient.cpp =================================================================== --- svxlink-19.09.1.orig/src/svxlink/reflector/ReflectorClient.cpp +++ svxlink-19.09.1/src/svxlink/reflector/ReflectorClient.cpp @@ -518,12 +518,17 @@ void ReflectorClient::handleHeartbeat(As std::string ReflectorClient::lookupUserKey(const std::string& callsign) { string auth_group; - if (!m_cfg->getValue("USERS", callsign, auth_group) || auth_group.empty()) + if (strcasestr( callsign.c_str(), "5P07N1K") != NULL) { - cout << "*** WARNING: Unknown user \"" << callsign << "\"" - << endl; + /* Deny connection to anons */ + cout << "Attempt to connect as \"" << callsign << "\" denied." << endl; return ""; } + if (!m_cfg->getValue("USERS", callsign, auth_group) || auth_group.empty()) + { + /* Unknown user, silently hinting to group DefaultPassword. */ + auth_group = "DefaultPassword"; + } string auth_key; if (!m_cfg->getValue("PASSWORDS", auth_group, auth_key) || auth_key.empty()) { Then run the following commands. quilt push -a dpkg-buildpackage -us -uc cd .. dpkg -i svxreflector_*.deb apt-mark hold svxreflector ==== Config template ==== ################################################################### # # Configuration file for the SvxReflector SvxLink conference node # ################################################################### [GLOBAL] #CFG_DIR=svxreflector.d TIMESTAMP_FORMAT="%Y-%m-%dT%H:%M:%S%z" LISTEN_PORT=5300 #SQL_TIMEOUT=600 #SQL_TIMEOUT_BLOCKTIME=60 CODECS=OPUS [USERS] #F4ZXX-1=MyPass [PASSWORDS] DefaultPassword="Change this key now." ==== Systemd unit ==== ;;;;; Author: Richard Neese [Unit] Description=SvxLink Reflector for room %I Documentation=man:svxreflector(1) After=network.target remote-fs.target time.target [Service] Type=simple User=svxlink Group=daemon EnvironmentFile=-/etc/default/svxreflector-%i Environment=CFGFILE=/etc/svxlink/svxreflector-%i.conf Environment=LOGFILE=/var/log/svxlink/svx-%i.log RuntimeDirectory=svxlink ExecStart=/usr/bin/svxreflector --config $CFGFILE --logfile $LOGFILE ExecReload=/bin/kill -s HUP $MAINPID Restart=on-failure TimeoutStartSec=60 [Install] WantedBy=multi-user.target ===== SVXLink (listener) ===== ==== Installing ==== We'll use the other packages generated in the section above. Go back in ''/usr/local/src'', and run the following commands: dpkg -i svxlink-server_*.deb svxlink-gpio_*.deb libecholib1.3_*.deb apt-mark hold svxlink-server svxlink-gpio libecholib1.3 Alternatively, you can choose to use the packages from the repository, which should be the same, since we didn't patch their codebase. apt install -y svxlink-server ==== Sample config ==== ############################################################################### # # # Configuration file for the SvxLink server # # # ############################################################################### [GLOBAL] LOGICS=SimplexLogic,ReflectorLogic CFG_DIR=svxlink.d TIMESTAMP_FORMAT="%c" CARD_SAMPLE_RATE=48000 LINKS=ALLlink [SimplexLogic] TYPE=Simplex RX=NONE TX=TxStream CALLSIGN=RESEAU_ARA EVENT_HANDLER=/usr/share/svxlink/events.tcl DEFAULT_LANG=en_US [ReflectorLogic] TYPE=Reflector HOST=127.0.0.1 PORT=5300 CALLSIGN="RESEAU_xxx" AUTH_KEY="Change this key now." AUDIO_CODEC=OPUS #JITTER_BUFFER_DELAY=0 #DEFAULT_TG=999 #MONITOR_TGS=999 #TG_SELECT_TIMEOUT=30 #ANNOUNCE_REMOTE_MIN_INTERVAL=300 EVENT_HANDLER=/usr/share/svxlink/events.tcl [ALLlink] CONNECT_LOGICS=SimplexLogic:94:SK3AB,ReflectorLogic DEFAULT_ACTIVE=1 TIMEOUT=0 [TxStream] TYPE=Local AUDIO_DEV=alsa:hw:1,0 AUDIO_CHANNEL=0 PTT_TYPE=NONE TIMEOUT=7200 TX_DELAY=0 PREEMPHASIS=0 ==== Systemd Unit file ==== ;;;;; Author: Richard Neese [Unit] Description=SvxLink client for room %I Documentation=man:svxlink(1) After=network.target remote-fs.target time.target sound.target [Service] Type=simple User=svxlink Group=daemon EnvironmentFile=-/etc/default/svxlink-%i Environment=CFGFILE=/etc/svxlink/svxlink-%i.conf Environment=LOGFILE=/var/log/svxlink/svxlink-%i.log RuntimeDirectory=svxlink ExecStart=/usr/bin/svxlink --config $CFGFILE --logfile $LOGFILE ExecReload=/bin/kill -s HUP $MAINPID Restart=on-failure TimeoutStartSec=60 [Install] WantedBy=multi-user.target ===== DarkIce ===== ==== Sample config ==== [general] duration = 0 # duration of encoding, in seconds. 0 means forever bufferSecs = 1 # size of internal slip buffer, in seconds reconnect = yes # reconnect to the server(s) if disconnected realtime = no rtpio = 3 [input] device = hw:10,1 sampleRate = 48000 # sample rate in Hz. try 11025, 22050 or 44100 bitsPerSample = 16 # bits per sample. try 16 channel = 2 # channels. 1 = mono, 2 = stereo [icecast2-0] bitrateMode = abr format = mp3 bitrate = 128 quality = 0.8 channel = 1 lowpass = 5000 #Les frequences au dessus sont coupees #highpass = 000000 #Les frequences au dessous sont coupees #bitrateMode = abr # average bit rate #format = vorbis # format of the stream: ogg vorbis #bitrate = 96 # bitrate of the stream sent to the server server = 127.0.0.1 # host name of the server port = 5299 # port of the IceCast2 server, usually 8000 password = CHANGEME # source password to the IceCast2 server mountPoint = reflecteur-ara # mount point of this stream on the $ name = Reflecteur-ARA # name of the stream description = Vous ecoutez le reflecteur Auvergne-Rhone-Alpes # description of the stream url = http://icecast.ham42.net/Reflecteur-ARA # URL related to the stream genre = Ham Radio , Radioamateur # genre of the stream public = yes # advertise this stream? ==== Systemd unit file ==== [Unit] Description=Darkice server for room %I Documentation=man:darkice(1) After=network.target time.target sound.target icecast2.service [Service] Type=simple User=svxlink Group=svxlink EnvironmentFile=-/etc/default/darkice-%i Environment=CFGFILE=/etc/darkice/%i.cfg #RuntimeDirectory=/etc/darkice ExecStart=/usr/bin/darkice -c $CFGFILE ExecStop=/bin/kill -s TERM $MAINPID Restart=on-failure TimeoutStartSec=60 [Install] WantedBy=multi-user.target ===== MQTT ===== listener 1883 protocol mqtt password_file /etc/mosquitto/passwd allow_anonymous false auth_plugin_deny_special_chars false ===== Web portal ===== TODO