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


13 февр. 2025 г.

Mysql/MariaDB table delete records by schedule

 1. /root/cleanup_records.sql

use DATABASE_NAME;
delete from TABLE_NAME where `DATE_FIELD` < DATE_SUB(CURDATE(),INTERVAL 3 MONTH);

2. crontab -e (/var/spool/cron/crontabs/root)


# m h  dom mon dow   command
0 0 * * * mysql -uroot <~/cleanup_records.sql

25 янв. 2025 г.

ufw cheatsheet

ufw disable/enable
ufw status verbose
ufw status numbered
ufw delete NUM
ufw delete deny NUM
ufw insert 1 deny in from XXX.XXX.XXX.XXX to any port 25 proto tcp
ufw app info 'OpenSSH' (see /etc/ufw/applications.d)
ufw allow proto tcp from XXX.XXX.XXX.XXX/24 to any port YYYY 
ufw reload (to apply rules)
ufw allow in on eth0 to any port 22
ufw logging on/off/low/medium/high/full
fot NAT - /etc/ufw/before.rules
ufw allow 22/tcp comment 'open port 22 for ssh'
ufw allow <PORTFROM>:<PORTTO>/udp

 

24 дек. 2024 г.

Create random file from 1 to x Megabytes, jitters disk free space (correct BDE bug)

 @ECHO OFF
SET /A NUM=1+(%random%)%%(19)
DEL SOMEMEGABYTES
COPY MEGABYTE SOMEMEGABYTES
FOR /L %%i IN (1,1,%NUM%) DO (
  ECHO %%i
  COPY /Y /B SOMEMEGABYTES TEMPFILE
  COPY /Y /B MEGABYTE+TEMPFILE SOMEMEGABYTES
)
DEL TEMPFILE

13 нояб. 2024 г.

Backup Mikrotik configuration to FTP and SFTP

 Based on https://forum.mikrotik.com/viewtopic.php?p=1048273 by fra81ita
Added SFTP

### Set local variables. Change the value between "" to reflect your environment. Do not delete quotation marks.
:local ftpserver "FTP-SERVER-FQDN_or_IP-ADDRESS"
:local username "FTP-SERVER-USERNAME"
:local password "FTP-SERVER-PASSWORD"
:local remotedirectory "mikrotik"
### Set Local and Remote Filename variables. Do not change this unless you want to edit the format of the filename.
### Default "local file name" is always the same to avoid lots of files and running out of space, "remote file name" uploaded to FTP has the date
:local hostname [/system identity get name]
:local date ([:pick [/system clock get date] 7 11] \
. [:pick [/system clock get date] 0 3] \
. [:pick [/system clock get date] 4 6]);
:local localfilename "$hostname-Backup-Daily";
:local remotefilename "$remotedirectory/$hostname-$date";
### Enable for Debug removing staing hash in the following lines
:log info "$localfilename";
:log info "$remotefilename";
:log info "$hostname";
:log info "$date";
### Stating the Backup
:log info "STARTING BACKUP";
### Create backup file and export the config.
export compact file="$localfilename"
/system backup save name="$localfilename"
:log info "Backup Created Successfully"
### Upload backup file to FTP server.
/tool fetch address=$ftpserver src-path="$localfilename.backup" \
user=$username mode=ftp password=$password \
dst-path="$remotefilename.backup" upload=yes
:log info "Config Uploaded Successfully"
### Upload config file to FTP server.
/tool fetch address=$ftpserver src-path="$localfilename.rsc" \
user=$username mode=ftp password=$password \
dst-path="$remotefilename.rsc" upload=yes
:log info "Config Uploaded Successfully"
### Upload config file to SFTP server.
/tool fetch url="sftp://$ftpserver/home/mikrotik/$remotefilename.backup" src-path="$localfilename.backup" \
user=$username  password=$password \
 upload=yes
:log info "Backup Uploaded Successfully"
### Upload config file to SFTP server.
/tool fetch url="sftp://$ftpserver/home/mikrotik/$remotefilename.rsc" src-path="$localfilename.rsc" \
user=$username  password=$password \
 upload=yes
:log info "Config Uploaded Successfully"

### Wait 2 second before doing anything
delay 2;
### Remove starting hash in the following lines to delete created backup files once they have been uploaded. I usually let them there because it's useful having them ready.
#/file remove "$localfilename.backup"
#/file remove "$localfilename.rsc"
#:log info "Local Backup Files Deleted Successfully"
### Finishing the Backup
:log info "BACKUP FINISHED";