V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Záměrně jsem se rozhodl pro demonstraci konfigurace prostřednictvím jednoduchého příkladu, protože není v silách (a koneckonců ani záměrem) tohoto článku probrat detailně všechny možnosti ústředny. Nechť vám tento díl slouží jen jako jakýsi "nástřel" usnadňující začátek. Zájemci o serióznější aplikaci určitě nevynechají buď knihu Asterisk-TFOT zmiňovanou v prvním díle nebo on-line stránky dokumentace.
Asterisk se konfiguruje zásadně pomocí textových konfiguračních souborů, které najdeme (pokud jsme při instalaci neopomněli make samples
) všechny pěkně pohromadě v adresáři /etc/asterisk
. Dobrou zprávou je, že nejnovější verze Asterisku (1.4) obsahuje GUI rozhraní založené na vestavěném web serveru, které vám pomůže Asterisk nakonfigurovat i bez detailních znalostí jeho architektury. Je ovšem nutno poznamenat, že tato schopnost je v Asterisku úplně nová (a tudíž také ne dostatečně odladěná), takže bych na ni příliš nespoléhal (já to ani nezkoušel, ale rád si přečtu zkušenosti čtenářů). Ti, kdož chtějí spolehlivou ústřednu bez experimentů, se proto spíše spolehnou na starý dobrý textový editor.
Tento soubor obsahuje konfiguraci zařízení komunikujících s Asteriskem pomocí SIP protokolu. V našem připadě (a v drtivé většině případů) půjde o telefony. Zde definujeme 3 telefony:
; ; SIP Configuration for Asterisk ; ; Syntax for specifying a SIP device in extensions.conf is ; SIP/devicename where devicename is defined in a section below. ; [general] port = 5060 ; Port to bind to context = praha ; Default context for incoming calls disallow=all ; need to disallow=all before we can use allow= allow=ulaw ; Note: In user sections the order of codecs dtmfmode=auto ; Set default dtmfmode for sending DTMF. Default: rfc2833 [jarda] type=friend username=jarda userid=Jarda Toman <17> host=dynamic [tomas] type=friend username=tomas userid=Tomas Rukl <27> host=dynamic [jirka] type=friend username=Jirka userid=Jiri Fuml <37> host=dynamic
V sekci [general]
vidíme všeobecné nastavení platné pro všechny telefony. Port 5060 je standardizován pro všechna SIP zařízení. Asterisk rozlišuje umístění zařízení do domén, tzn. kontextů. My pro jednoduchost užijeme pouze jediný, pracovně nazvaný Praha. Dále vidíte, že z důvodu kvality hovorů povoluji pouze jediný kodek, totiž G.711 u-law. Specifikuji také způsob přenosu DTMF po kanálu.
Po sekci [general]
následují záznamy registrující jednotlivé telefony. Naše telefony nemají pevnou IP adresu (host=dynamic
), a proto se identifikují logováním pomocí uživatelského jména (to je samozřejmě také nutno nastavit u každého telefonu). Je ale možno použít i hesla, ta tu pro jednoduchost neužívám.
Telefony se obvykle používají obousměrně (jednou volám já, jindy někdo zavolá mně) a to Asterisku řekneme pomocí type=friend
. Na displeji volaného obvykle chceme zobrazit jméno volajícího a jeho linku - to nám zajistí volba userid
.
Tento soubor je, dá se říci, srdcem naší ústředny - definuje totiž celý číslovací plán. Zde definujeme chování všech spojení v ústředně. Oproti tradičním ústřednám, kde je každé číslo (klapka) přiřazeno telefonu nebo obecně nějakému rozhraní, je v Asterisku číslo definováno jako seznam příkazů k vykonání. Příkazy jsou obecně vykonávány v pořadí definovaném svým priority
tagem, přičemž jisté příkazy jako Dial nebo GotoIf mají možnost, v závislosti na určitých podmínkách, přesměrování někam jinam.
V syntaxi souboru je každý krok zapsán v tomto formátu:
exten => číslo,priorita,příkaz(parametry)
V tomto souboru tedy přiřadíme našim SIP telefonům jejich čísla a propojíme je tak, aby si mohly vzájemně volat:
; ; Static extension configuration file. This is where you ; configure all your inbound and outbound calls in Asterisk. ; ; ; The "General" category is for certain variables. ; [general] ; static=yes writeprotect=yes ; The "Globals" category contains global variables that ; can be referenced in the dialplan with ${VARIABLE} or ; ${ENV(VARIABLE)} for Environmental variable ; ${${VARIABLE}} or ${text${VARIABLE}} or any hybrid ; [globals] ; ========================================================== ; =============== Dialplan ================================= ; ========================================================== [praha] exten => 100,1,Answer exten => 100,n,Playback(demo-echotest) exten => 100,n,Echo() exten => 100,n,Hangup() ;SIP users exten => 17,1,Dial(SIP/jarda) exten => 27,1,Dial(SIP/tomas) exten => 37,1,Dial(SIP/jirka)
Vidíme, že jsem našim uživatelům přiřadil v kontextu praha
čísla, na která si mohou volat. Zároveň jsem pro zkoušku ústředny nadefinoval číslo 100, které přehraje volajícímu zprávu a demonstruje také možnost ústředny zaznamenávat hovory (funkce Echo). Jistě si povšimnete, že jsem pro toto číslo nadefinoval pouze prioritu 1 a ostatní jsem nahradil písmenkem n
. To v podstatě značí prioritu o jedna větší než byla předchozí. Stejného efektu bych dosáhl, pokud bych místo těchto písmenek dosadil priority 2, 3 a 4.
Uplně na začátku v sekci [general]
jsem prostřednictvím direktiv static
a writeprotect
také zablokoval možnost dynamické změny dialplánu. Je to jakási bezpečnostní pojistka, protože za jistých okolností a pomocí vzdálené administrace je možné dynamicky měnit číslovací plán - pokud to nepotřebujeme, je vhodné to zakázat.
Takže náš první a velice triviální (nicméně funkční) číslovací plán máme hotov, a pokud máme i telefony připojeny do sítě, můžeme vše otestovat. Spustíme démona Asterisku příkazem
/etc/init.d/asterisk start
Pokud máme vše správně nainstalováno, tak by se spuštěný démon měl automaticky připojit k deváté virtuální konzoli (Alt-F9), kde bude pravděpodobně vidět spousta hlášek informujících o nahrávání různých konfiguračních souborů. Je dobré si to pročíst, občas se tam objeví docela důležité hlášení informující třeba o syntaktické chybě nebo jiném problému.
Na této konzoli se také objevuje hlášení o stavu ústředny, postup spojování, rozpojování nových či stávajících hovorů a vůbec všech akcích, které ústředna právě vykonává.
Kromě tohoto dosti důležitého výstupu můžeme protřednictvím této konzole ústředně zadávat i různé příkazy a efektivně ji tak spravovat - po nastartování Asterisku by se nám po stisku klávesy Enter měla objevit příkazová řádka
*CLI>
kam můžeme tyto příkazy zadávat. Zmíním alespoň některé hodně užívané příkazy:
help |
vypíše všechny známé příkazy |
help <příkaz> |
vypíše návod k použití příkazu |
reload |
znovu načte knofiguraci |
restart when convenient |
restartuje Asterisk, až nebude nikdo volat |
Pokud vás nebaví pořád fyzicky sedět u ústředny a koukat na devátou konzoli, pak je tu možnost vzdáleného připojení. Stačí se na stroj nějak přilogovat (ssh, telnet) a zadat:
asterisk -r
Tak, ústředna běží, telefony připojeny, můžeme to otestovat. Zkuste si mezi nimi zavolat, a pokud jste udělali vše správně, mělo by to zafungovat.
V příštím dílu seriálu náš číslovací plán trochu vylepšíme - ošetříme chybové stavy a připojíme naši našlápnutou ústřednu k veřejné telefonní síti. Takže se těšte!
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
1. re-INITE: skoro bych rekl, ze jeho pouzivani je velmi nerozumne. A nejen proto, ze nekteri klienti ho "nerozdychaji", ale zejmena proto, ze tim ztratite kontrolu na RTP streamem a nebudete schopen zabijet "uhnile" hovory.
2. userid: S tim jsem se tez nesetkal a IMHO se jedna spise o chybu, nez starou/novou versi. Ale kdyz to Asterisk zkousne (jeko ostatne kde co , tak proc ne...
Hezky den!
kokoska.rokoska
1. Cesta RTP: pokud neni potreba "prekonavat" NAT a Asterisk je spravne nastaven, tak po re-INVITE Asterisk samozrejme "vypadne z kola ven"
2. Traskodovani: ja se domnivam, ze se nejedna o bug, ale u umysl. Pri generovani noveho INVITE totiz Asterisk nabizi v SDP celou sadu kodeku nastavenou pro konkretniho peera (a v poradi definovanem administratorem - ten preci vi, co dela, ze . A vcelku pochopitelne akceptuje odpoved od peera. Zvysuje se tim pravdepodobnost uspesneho spojeni a tim, ze vychazite vstric klientskym zarizenim, tak sice mozna zvysite zatez systemu, ale statisticky skoro urcite zkvalitnite samotnou komunikaci - kazdy klient ma prece duvod, pro si nastavil prave takove poradi kodeku...
Druha moznost je posilat v SDP odchoziho INVITE jen to co prislo "z druhe strany" - tuto filozofii razi FreeSWITCH. Vyhnete se tim transkodovani, ale znacne snizite uzivatelum komfort.
Jedinou (byt pofiderni) moznosti by bylo pouziti Asteriskova soucasneho systemu a nasledne zaslani re-INVITE zpet "na sebe". Ale to by byla velka cunarna, jak jiste uznate
1. Rychlosti: Ano, soucasna kvalita linek (nepocitame-li nektere wifi spoje) je uz dostatecna pro G.711 a kdo muze at ho pouziva...
Problem muze nastat pouze pri mnoha soucasnych hovorech z firemnich PBX - pouhych 20 soucasnych hovoru spotrebuje na upstreamu od ustredny temer 2 Mb/s. A u roadwarrioru dokonce dvojnasobek...
2. G.711a <-> G.711u: Prehazet poradi bitu skutecne na prvni pohled kvalitu nezhorsi Ale i zde existuji uskali - naroste latence spoje (problem pro echocancel a jitterbuffer) a protoze nepouzivame (aspon vetsina ne) HW prevodniky, tak velmi pravdepodobne naroste i jitter. Takze i trasnkodovani "alaw" <-> "ulaw" je vhodne se vyhnout
1. Prudeni vyrobcu: v tom s Vami samozrejme souhlasim
2. Prepojeni hovoru: tam by IMHO re-INVITE vubec nemel prijit do hry. Pro prepojeni hovoru by mel byt pouzit bud REFER na klientske strane nebo transparentni prepojeni na strane PBX (u Asteriska je implementovano pomoci "kodu" z features.conf)
3. Dohled nad RTP: znovu opakuji, ze IMHO existuje velmi zavazny duvod, proc udrzovat kontrolu nad RTP. A tim duvodem je prave zminovana moznost zabijeni "uhnilych" hovoru. Aneb tech, u nichz signalizacne nedoslo k ukonceni a pritom RTP uz davno netecou. My nemame na "ustredne" velky provoz (max 15 000 hovoru mesicne), ale i tak je takovych hovoru nekolik desitek kazdy mesic. Operatori by Vam zajiste potvrdili, ze procento takto nasilne ukoncovanych hovoru vubec neni zanedbatelne...
Asterisk 1.0.7-BRIstuffed-0.2.0-RC7k, Copyright (C) 1999-2004 Digium. Written by Mark Spencer ========================================================================= Connected to Asterisk 1.0.7-BRIstuffed-0.2.0-RC7k currently running on server (pid = 8691) server*CLI> reload Feb 27 13:58:09 NOTICE[8692]: indications.c:397 ast_unregister_indication_country: Removed default indication country 'us' Feb 27 13:58:09 WARNING[8692]: chan_sip.c:8703 reload_config: Unknown dtmf mode 'auto', using rfc2833 Feb 27 13:58:09 WARNING[8692]: pbx_config.c:1663 pbx_load_module: Invalid priority 'n' at line 10 Feb 27 13:58:09 WARNING[8692]: pbx_config.c:1663 pbx_load_module: Invalid priority 'n' at line 11 Feb 27 13:58:09 WARNING[8692]: pbx_config.c:1663 pbx_load_module: Invalid priority 'n' at line 12