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


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
for 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";

29 окт. 2024 г.

Python script ping and log

import subprocess, time
while True:
    result = None
    try:
        result = subprocess.check_output(['ping','-w', '1', '-c', '1', '-n', '-q' ,'192.168.0.1'])
        result = result.decode("utf-8").split('/')
        result = float(result[4])
    except:
        with open("mon.log", "a") as myfile:
            myfile.write(time.strftime('%X %x %Z')+' Ping error.\n')
        myfile.close()
    print result
    if result > 5 :
        with open("mon.log", "a") as myfile:
            myfile.write(time.strftime('%X %x %Z')+' '+str(result)+'\n')
        myfile.close()
    time.sleep(1)

 

20 авг. 2024 г.

Save credentials for windows terminal server

 Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation]
"AllowSavedCredentialsWhenNTLMOnly"=dword:00000001
“AllowSavedCredentials”=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\AllowSavedCredentialsWhenNTLMOnly]
"1"="TERMSRV/*"
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\AllowSavedCredentials]
"1"="TERMSRV/*"
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Policies\Microsoft\Windows\CredentialsDelegation]
“AllowSavedCredentialsWhenNTLMOnly”=dword:00000001
“AllowSavedCredentials”=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Policies\Microsoft\Windows\CredentialsDelegation\AllowSavedCredentialsWhenNTLMOnly]
"1"="TERMSRV/*"
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Policies\Microsoft\Windows\CredentialsDelegation\AllowSavedCredentials]
"1"="TERMSRV/*"

16 авг. 2024 г.

Asterisk Chanspy() - supervisor assistance

 exten => _555XXXX,1,Verbose(${CHANNELS()})
 same => n,Authenticate(2128)
 same => n,Answer
 same => n,Wait(1)
 same => n,ChanSpy(SIP/${EXTEN:3},qw)
 same => n,Hangup()

Where calling "555ext_num" connects to current conversation after password "2128#"

q - quiet mode
w - whisper mode (one side) 

10 июн. 2024 г.

RSYNC Cygwin to NAS326

 Rsync из Windows через cygwin уже был, вот здесь - https://dzelenov.blogspot.com/2014/07/rsync-windows-cwrsync.html

Усложняем задачу. Копировать надо с Windows (см. пред. статью) на ZyXel NAS326. Проблема та же - не съесть весь bandwidth.

1. На NAS надо поставить rsync. Для этого надо разрешить ssh в вебинтерфейсе 








и попасть в shell (busybox).

Потом из пакетов по этой статье - https://stepin.name/en/technoblog/080-rsync-on-nas326/
ставим rsync. Все хорошо, кроме того, что он удаляется после перезагрузки и надо скрипт выполнять заново.
Если коротко - ставим репозитарий и из него ставим rsync с зависимостями.

cat >/i-data/d732885c/install_rsync.sh <<EOF
curl -fLO http://entware.zyxmon.org/binaries/armv7/installer/entware_install.sh
chmod +x entware_install.sh
./entware_install.sh
/opt/bin/opkg install --force-space rsync
cp /opt/bin/rsync /bin
EOF
chmod 755 /i-data/d732885c/install_rsync.sh

2. Пробуем копировать файлы из Linux, типа 

rsync -e ssh --partial --progress --bwlimit=100K --time-limit=300 ~/rsynctest/* root@192.168.1.101:/i-data/022cf873/Video

Пароль спрашивает, но работает.

3. Ставим cygwin, пробуем из Windows - не работает.

Нужно:

- Создать файл ~/.ssh/config на Windows, вписать туда

Host NAS326
  HostName 192.168.1.101
  HostKeyAlgorithms=+ssh-rsa

чтобы ssh cygwin знал, что нужно использовать ключи rsa.

- сгенерировать пару ключей в Windows и отправить их в NAS

ssh_keygen -t rsa
ssh-copy-id root@NAS326

После этого можно уже запускать синхронизацию, обращаясь к NAS уже строго по имени.

rsync -e ssh --partial --progress --bwlimit=1000K --time-limit=300 /cygdrive/d/Backup/daily/* root@NAS326:/i-data/022cf873/Backup

Ключи:

--partial --progress -сохранять недокачанную часть, при повторном запуске продолжать
--bwlimit=1000K - скорость не больше 1Мбайт/с
--time-limit=300 - через 5 часов обрубить, так как будет нужен Интернет на полную.

Автоматизация запуска rsync на cygwin - по старой статье 2014 года.



9 дек. 2023 г.

HDD to SSD. Как перевести компьютер/ноутбук с HDD на SSD, если на нем Secure Boot и UEFI. Ошибка 0xc0000225

 Как перенести содержимое жесткого диска с HDD на SSD, если у вас обычная таблица MBR  - тут все достаточно понятно. Переносите разделы жесткого диска с одного носителя на другой, ставите соответствующие флаги, все работает.

С UEFI все немного сложнее.

4 окт. 2023 г.

Sync time in AD from Internet w32tm

On the time source of domain (1st dc)

w32tm /config /syncfromflags:manual /manualpeerlist:"0.us.pool.ntp.org 1.us.pool.ntp.org 2.us.pool.ntp.org 3.us.pool.ntp.org" /update
или
w32tm /config /syncfromflags:manual /manualpeerlist:"0.pool.ntp.org"

Stop-Service w32time
Start-Service w32time
или
net stop w32time
net start w32time

w32tm /query /status

6 апр. 2023 г.

S3 Linux



Для работы под Windows (и под Wine) есть бесплатная утилита - https://s3browser.com/
Требует .Net

Для работы под linux либо s3cmd - через команды, либо монтирование через FUSE - s3fs.