29 сент. 2026 г.

Компиляция и установка Asterisk 22 для Debian 13

 По мотивам этой статьи

1. Ставим средства разработки

sed -i 's/main$/main contrib non-free/g' /etc/apt/sources.list

- это хорошо, это пригодится

apt update && apt upgrade -y

- обновляем систему

apt -y install nano git curl wget libnewt-dev libssl-dev libncurses5-dev \
subversion libsqlite3-dev build-essential libjansson-dev libxml2-dev \
uuid-dev libsqlite3-dev zlib1g-dev libxslt1-dev libpq-dev libcurl4-openssl-dev \
libedit-dev libtool autoconf automake pkg-config

- вот немного странно, nano с wget и так есть, а git особо и не нужен, если качаем исходники в *.gz

2. Качаем исходники

cd /usr/src/
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz
tar xvf asterisk-22-current.tar.gz
cd asterisk-22*/

- на 2026 год это long term, но есть особенность, в 20 еще есть старый традиционный SIP, тут уже остался только PJSIP. Так что если нужен старый модуль SIP, качаем 20-й.

3. Ставим зависимости из папки contrib. 

contrib/scripts/get_mp3_source.sh
contrib/scripts/install_prereq install

Достаточно долго собирается, но если не сделать до конфигурирования, многие опции при конфигурировании будут недоступны.

4.Конфигурируем и выбираем, что компилировать.

./configure
make menuselect

В Applications и Dialplan Functions не убираем ничего, все пригодится.
В Add-ons выбираем mp3.
В CDR убираем cdr_pgsql, cdr_radius, cdr_sqlite3, cdr_tds.
В CEL убираем cel_pgsql, cel_radius, cel_sqlite3, cel_tds.
В Channel Drivers убираем chan_console.
В Resource Modules убираем res_config_ldap, res_config_pgsql.
В Core Sound, Music On Hold и Extras Sound выбираем WAV и GSM для тех языков, которые есть и нужны.

Остальное оставляем как есть.


Убирать нужно для того, чтобы при старте Asterisk не пытался подгрузить модули, для которых нет соответствующих условий. Вряд ли мы будем работать с звуковой картой, вставленной в компьютер, писать CDR, CEL и хранить конфигурации в экзотических БД и LDAP. Но в принципе, можно и их скомпилировать, а потом отключить их подгрузку.

5. Компилируем

make -j$(nproc)
make install
make samples
make config
ldconfig

6.Создаем группу и пользователя, от которого мы будем его запускать, даем этому пользователю права на папки, в которые он будет писать

groupadd asterisk
useradd -r -d /var/lib/asterisk -g asterisk asterisk
usermod -aG audio,dialout asterisk
 
chown -R asterisk:asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib/asterisk

7. Берем файл сервиса и закидываем его в systemd


cp /usr/src/asterisk-22.11.0/contrib/systemd /usr/lib/systemd/system

8.Правим файл в systemd, иначе не будет запускаться


Стоит Type=notify, поставим Type=simple
Убираем комментарий с RuntimeDirectory=asterisk
Все остальное ок, но можно еще поставить
Restart=on-failure
RestartSec=1 

9. Разрешаем сервис и запускаем


systemctl enable asterisk
systemctl start asterisk


10.Конфигурируем в /etc/asterisk и пользуемся


19 февр. 2026 г.

Windows share with password, samba server debian 13

  • apt install samba
  • edit /etc/samba.conf, add
[data]
path= /data
readonly = no
guest ok = no
force create mode= 0770
directory mode = 2770

  • groupadd smbusers
  • mkdir /data
  • chgrp smbusers /data
  • chmod 2770 /data
  • useradd -N -s /sbin/nologin winuser
  • usermod -aG smbusers winuser
  • smbpasswd -a winuser
  • smbpasswd -e winuser
  • systemctl restart smbd

28 дек. 2025 г.

Обновление Mikrotik Rb2011 6.xx-7.xx

 1.Конфигурацию лучше сбросить, сложные не перевариваются, все равно придется настраивать заново. Бэкапы конфигураций от 6 в 7 вообще не загружаются, так что только вручную потом. Но что-то простое можно сохранить, не сбрасывать до апгрейда, тогда текущая рабочая конфигурация  из 6 перетянется в 7.

2.Качаем отсюда сборку системы, основной пакет - routeros-7.20.6-mipsbe.npk, кладем в корень файлов. перезагружаем роутер. Ставится система. Вероятно, надо также скачать пакет wireless, так как поддержка WiFi в отдельном пакете и после перезагрузки не будет WiFi карты. Но я качал только систему, потом подключал роутер к интернет, заходил в System/Packages, делал Check for Updates, разрешал Wireless и перезагружал роутер. Остальные пакеты там в обычной жизни не нужны.

3.Заходим в System/RouterBOARD, и нажимаем Upgrade для обновления firmware.

4. Если конфигурация подтянулась нормально, работаем. Если перекосило - заходим в System/Reset configuration, сбрасываем. Настраиваем заново.


27 дек. 2025 г.

GeoIP routing Mikrotik

1.Делаем тоннель не заблокированным на данный момент времени способом.

[SKIP]

23 сент. 2025 г.

Orthanc and viewers mysql Debian 12 install

 1. Ставим из пакетов Debian Orthanc, к нему SQL

apt install orthanc orthanc-mysql orthanc-dicomweb mariadb-server nginx gnupg wget mc

11 сент. 2025 г.

Asterisk sequence of audio files playback

The directory for every queue contains sequence of greetings named as 1.wav, 2.wav, 3.wav, etc.
Required to play those files before enter queue, in ascending order.


[subPlaySequence]
exten => start,1,NoOp(Play sequence from announce/queue/${ARG1})
   same => n,Set(i=1)
   same => n,While($[${i} < 15])
   same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/ru/announce/queue/${ARG1}/${i}.wav)})
   same => n,ExecIf($[${exists} = 1]?Playback(announce/queue/${ARG1}/${i}))
   same => n,Set(i=$[${i} + 1])
   same => n,EndWhile
   same => n,Return

[incoming]
exten => 600,1,NoOp(${CALLERID(num)} Call to ${EXTEN})
 same => n,Answer()
 same => n,GoSub(subPlaySequence,start,1(callcenter))
 same => n,Queue(callcenter,120)

Asterisk mp3 mono monitor vs stereo monitor (left channel - one side, right channel - another)

[macro-recording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(FULL_DIR=${DIR_RECORDS}${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/)
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${FULL_DIR}${fname}.wav"  "${FULL_DIR}${fname}.mp3" && rm -f "${FULL_DIR}${fname}.wav" && chmod o+r "${FULL_DIR}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${FULL_DIR}${fname}.wav,b,${monopt});
exten => s,n(no),Verbose(Exit record);

[macro-stereorecording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(FULL_DIR=${DIR_RECORDS}${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/)
exten => s,n,Set(monwav=nice -n 19 /usr/bin/sox -M "${FULL_DIR}${fname}-in.wav" "${FULL_DIR}${fname}-out.wav" "${FULL_DIR}${fname}-joint.wav" && );
exten => s,n,Set(monmp3=nice -n 19 /usr/bin/lame -b 32 --silent "${FULL_DIR}${fname}-joint.wav" "${FULL_DIR}${fname}.mp3" && );
exten => s,n,Set(moncleanup=rm -f ${FULL_DIR}${fname}*.wav && chmod o+r "${FULL_DIR}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${FULL_DIR}${fname}.wav,bSr(${FULL_DIR}${fname}-in.wav)t(${FULL_DIR}${fname}-out.wav),${monwav}${monmp3}${moncleanup});
exten => s,n(no),Verbose(Exit stereo record);

 

12 авг. 2025 г.

Asterisk call to client, privacy warning before talk

A() - wav file to play callee
m - play moh to caller while play message to callee 

exten = _00XXXXXXXXXX,1,Verbose(1,"Call out with warning ${EXTEN} from ${CALLERID(num)}")
    same => n,Dial(sip/8${EXTEN:2}@provider,300,mA(announce/outwarn))
    same => n,Hangup()

1 июл. 2025 г.

23 июн. 2025 г.

OpenSSL p12 extract keys and certs, convert ca and user keys to p12, decrypt encrypted key

Create unencrypted key file:

openssl pkcs12 -in mykeys.p12 -out unencrypted.key -nodes -nocerts

Extract certificates to file:

openssl pkcs12 -in mykeys.p12 -out mycerts.crt -nokeys

CA and user certificate will be in the same file!

Convert keys to p12:

openssl pkcs12 -export -certfile ca.crt -in user.crt  -inkey user.key -out mykeys.p12

Decrypt user key:

openssl rsa -in encrypted.key -out decrypted.key

Key and Cert to PEM:

cat server.key server.crt > server.pem