Приложение П. Системный сервис ccnexec
Использование:
Данный сервис позволяет выполнять команды Cocon из shell, не подключаясь к нему, для этого используется следующий формат:
ccnexec -u <User> [-p <Pass>] [<Host>:[<Port>]] [-o <OutputFile>] [-f <Filename> | -c Command [Arg1 Arg2 ...]]
где
- login - логин для подключения к Cocon;
- password - пароль для подключения к Cocon;
- port - порт для подключения к Cocon;
- OutputFile - файл для вывода;
- Filename - чтение команд из файла;
- Command - команда передаваемая в Cocon.
Для того, чтобы вручную не вводить пароль, можно сохранить куки:
ccnexec -u <User> [-p <Pass>] -S <CookieFile> [<Host>:[<Port>]] ccnexec -u <User> [-p <Pass>] -s [<Host>:[<Port>]]
Ввод команд с использованием cookie(не забудьте установить -rw - - - - - - - разрешения для вашего файла cookie):
ccnexec -k [<Host>:[<Port>]] [-o <OutputFile>] [-f <Filename> | -c Command [Arg1 Arg2 ...]] ccnexec -K <CookieFile> [<Host>:[<Port>]] [-o <OutputFile>] [-f <Filename> | -c Command [Arg1 Arg2 ...]]
Параметры:
-u <User> - пользователь CoCon
-p <Pass> - пароль пользователя
-k - использовать куки (по умолчанию - <HomeDir>/.ccn_cookie)
-K <Cookie> - путь + имя файла Cookie
-o <File> - файл для записи вывода
-f <File> - файл, откуда читать список команд (это не одно и то же, как cat <File> | ./ccnexec)
-c <Cmd> [<Args>] - выполнить одну команду, должен быть в конце, т.к. команды args разделены пробелами
-s - сгенерировать новый файл куки и сохранить его в <HomeDir>/.ccn_cookie
-S <Cookie> -сгенерировать новый файл куки и сохранить его в <Cookie>
Дополнительные параметры:
-A - остановить выполнение при ошибке;
-P - читать пароль из файла (если включена опция -f)
-i - интерактивное выполнение (не работает с опцией -с)
Примеры:
Создать куки:
sasha@ecss1:~/ssw1_3.14$ ccnexec -u admin -p password -s 192.168.1.21 Cookie is saved to /home/sasha/.ccn_cookie
Выполнение простой команды:
sasha@ecss1:~/ssw1_3.14$ ccnexec -k -c system-status Checking... ┌─┬───────────────┬────────────────────────┬───────────────┬─────────────┬──────────┐ │ │ Node │ Release │ Erlang nodes │Mnesia nodes │ Uptime │ ├─┼───────────────┼────────────────────────┼───────────────┼─────────────┼──────────┤ │ │core1@ecss1 │ecss-core-3.14.3.20 │core1@ecss1 │not running │1d 19h 31m│ │ │ds1@ecss1 │ecss-ds-3.14.3.20 │ds1@ecss1 │ds1@ecss1 │1d 19h 31m│ │ │md1@ecss1 │ecss-mediator-3.14.3.20 │md1@ecss1 │md1@ecss1 │1d 19h 30m│ │ │megaco1@ecss1 │ecss-pa-megaco-3.14.3.20│megaco1@ecss1 │megaco1@ecss1│1d 19h 30m│ │ │mycelium1@ecss1│ecss-mycelium-3.14.3.20 │mycelium1@ecss1│not running │1d 19h 31m│ │ │sip1@ecss1 │ecss-pa-sip-3.14.3.20 │sip1@ecss1 │sip1@ecss1 │1d 19h 30m│ └─┴───────────────┴────────────────────────┴───────────────┴─────────────┴──────────┘ All services are started. Active media resource selected list specific: ┌─────────────┬───────┬───────────┬───────────┬────────────┐ │ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │ │ │ │ version │ │ │ ├─────────────┼───────┼───────────┼───────────┼────────────┤ │ core1@ecss1 │ msr_1 │ 3.14.3.11 │ connected │ 1 19:28:20 │ │ │ msr_2 │ 3.14.3.11 │ connected │ 1 17:48:39 │ └─────────────┴───────┴───────────┴───────────┴────────────┘ Alarms list on md1: ┌──────┬──────┬──────┬────────┬────────┬────────┬──────────────────────┐ │ Date │Severi│Locati│ Cause │ Class │Instance│ Message │ │ │ ty │ on │ │ │ │ │ ├──────┼──────┼──────┼────────┼────────┼────────┼──────────────────────┤ │10.11 │critic│core1@│software│ecss::sy│core1@ec│Error log data updated│ │00:00:│al │ecss1 │Error │stem::lo│ss1 │ │ │00 │ │ │ │g │ │ │ └──────┴──────┴──────┴────────┴────────┴────────┴──────────────────────┘ Selected: 1 Total: 1
Установка лицензии с помощью ccnexec - скрипт bash:
#!/bin/bash
ecss_passport_fname='ECSS_test_010079.passp'
ecss_lic_fname='ecss_010079_2019-09.lic'
ip_ecss=192.168.1.21
SCRIPT_FILENAME=`readlink -e "$0"`
SCRIPT_HOME=`dirname "$SCRIPT_FILENAME"` # каталог запуска скрипта
cd $SCRIPT_HOME
if [ -e $ecss_passport_fname ] # Проверка наличия файла.
then
passp=$(cat $ecss_passport_fname)
else
echo "passport file "$ecss_passport_fname" not found!"
exit
fi
if [ -e $ecss_lic_fname ] # Проверка наличия файла.
then
lic=$(cat $ecss_lic_fname)
else
echo "License file "$ecss_lic_fname" not found!"
exit
fi
echo $passp
echo "------------"
echo $lic
echo "----------------"
sudo scp -r $SCRIPT_HOME/_var_lib_ecss/routing/ /var/lib/ecss/
sudo scp -r $SCRIPT_HOME/_var_lib_ecss/adaptation/ /var/lib/ecss/
sudo scp -r $SCRIPT_HOME/_var_lib_ecss/modification/ /var/lib/ecss/
# echo "Restore media-server config"
# cp -pf _etc/ecss/ecss-media-server/config.xml /var/lib/ecss/ecss-media-server/config.xml
sudo chmod 666 /etc/ecss/ecss-media-server/config*
ssh-keygen -f "/home/bsk/.ssh/known_hosts" -R [192.168.1.21]:8023
echo "starting myc & ds.."
sudo systemctl start ecss-mycelium.service
sudo systemctl start ecss-ds.service
sleep 10
ccnexec -u admin -p password -s $ip_ecss
ccnexec -k -c system-status
sleep 5
echo "set passport"
ccnexec -k -c cluster/storage/ds1/licence/set-passport `echo $passp`
sleep 20
echo "add license $lic"
ccnexec -k -c cluster/storage/ds1/licence/add `echo $lic`
sleep 2
echo "restart nodes..."
./restart_ecss.sh
ccnexec -k -c system-status
echo "Done. Then declare domains..."
Создание домена:
#!/bin/bash
ccnexec -k -i << EOF
shell-options prompt \l@\n:\p
domain/declare biysk.local
sleep 4
cocon/add-user-to-group admin ecss-biysk.local-domain-admin
cocon/add-user-to-group admin ecss-biysk.local-domain-user
cocon/list users
domain/list
cd domain/biysk.local
./properties/info
sleep 3
./np/declare np_240
./routing/import ecss1 ctx_city_common.xml
./routing/import ecss1 ctx_from_ewsd.xml
./routing/import ecss1 ctx_to_ewsd.xml
./routing/import ecss1 ctx_from_local.xml
./routing/import ecss1 ctx_to_ivr.xml
sleep 5
./cdr/add_cdr_group bsk3 mode time 00:00
sleep 5
./cdr/change_cdr_group bsk3 prefix bsk3
./alias/set-for-domain cdr_group bsk3
./tts/properties/set cdr_type extended
./tts/properties/set sign_cdr_enabled false
/cluster/mediator/md1/properties/rpss/set * dbConnections stat_db mysql database=ecss_statistics host=192.168.1.71 port=3306 user=statistics password=statistics
sleep 2
/cluster/mediator/md1/statistics/add hostResources 5 rpss_db_export stat_db --recovery-dir /var/lib/ecss/statistics/
sleep 3
/cluster/adapter/sip1/sip/network/set ip_set ipset1 listen-ports list = [5060, 5061, 5062, 5063, 5064, 5065, 5070, 5071, 5072, 5073, 5074, 5075]
sleep 5
/cluster/adapter/sip1/sip/network/set ip_set ipset1 node-ip node = sip1@ecss1 ip = 192.168.2.61
/cluster/adapter/sip1/sip/network/set ip_set ipset1 node-ip node = sip1@ecss2 ip = 192.168.2.62
/cluster/adapter/sip1/sip/network/set ip_set ipset1 dscp 24
/cluster/adapter/sip1/sip/network/info
sleep 5
cd /domain/biysk.local
./properties/set public_names add biysk.local
./sip/network/set ip_set [ipset1]
./trunk/sip/declare ctx_from_ewsd smg.gr smg-4 ipset1 static 192.168.2.8 5061 sip-t 5061 --check
./trunk/sip/declare ctx_from_local sbc.gr nsk_sbc ipset1 static 192.168.2.6 5062 sip-t 5062
./trunk/sip/declare ctx_from_local sbc.gr to_sipp ipset1 static 192.168.2.6 5063 sip-t 5063
./trunk/sip/declare ctx_from_local sbc.gr to_aster ipset1 static 192.168.2.6 5064 sip-t 5064
./trunk/sip/declare ctx_from_local ssw.gr ems1 ipset1 static 192.168.2.15 5071 sip-proxy 5071
./trunk/sip/declare ctx_from_local ssw.gr ems2 ipset1 static 192.168.2.15 5072 sip-proxy 5072
./trunk/sip/declare ctx_from_local ssw.gr bsk1 ipset1 static 192.168.2.12 5073 sip-proxy 5073
./trunk/sip/declare ctx_from_local ssw.gr bsk2 ipset1 static 192.168.2.12 5074 sip-proxy 5074
./trunk/sip/set smg.gr smg-4 sip_transport udp_only
./trace/properties/set mode full_compressed
./trace/properties/set backend dets
sleep 2
./access-type/declare admin1 false false false false false false false false false false true true 21 admin
./regime/declare accsusp false false false false false false false false false false true true 21 accsusp
sleep 1
cd /cluster/storage/ds1/ss
./install ds1@ecss1 *
./access-list add biysk.local *
sleep 1
cd /
./system/media/registrar/set common registration-timeout 90
./system/media/registrar/set private core1@ecss1 listen-ip 192.168.2.21
./system/media/registrar/set private core1@ecss2 listen-ip 192.168.2.22
./system/media/resource/declare core1@ecss1 iface msr_1 bond1.2 default local true
./system/media/resource/declare core1@ecss1 iface msr_2 bond1.2 default local true
./system/media/resource/declare core1@ecss2 iface msr_1 bond1.2 default local true
./system/media/resource/declare core1@ecss2 iface msr_2 bond1.2 default local true
./system/media/trace/set backend dets
./system/media/trace/set mode full_compressed
sleep 1
cd /domain/biysk.local/notifier
./set email ecss10biysk@mail.ru
./set email_enable false
./set email_port 465
./set email_username ecss10biysk@mail.ru
./set email_password <passwd>
./set email_server smtp.mail.ru
./set email_protection_connection ssl_tls
./info
sleep 1
cd /domain/biysk.local
./iface/group-set -g loc.gr -p terminal_type basic
./subscriber-portal/properties/set auto_create_account true
./subscriber-portal/properties/set auto_delete_account true
./subscriber-portal/properties/set connection 192.168.1.71:3306 subscribers subscribers ecss_subscribers
sleep 1
cd /domain/biysk.local/properties/restrictions
./set callcenter\enabled true
./set teleconference\enabled true
./set ivr\enabled true
/system/tc/set * mysql_enabled true
/domain/biysk.local/iface/user-set .system .system system:ivr routing.context ctx_from_local
/domain/biysk.local/iface/user-set .system .system system:teleconference routing.context ctx_from_local
EOF
Создание абонентов(пароли вымышленные):
#!/bin/bash
ccnexec -k -i << EOF
cd domain/biysk.local
./sip/user/declare ctx_from_local loc.gr 240001 alias-as-user qop_authentication login-as-user pw001
./sip/user/declare ctx_from_local loc.gr 240002 alias-as-user qop_authentication login-as-user pw002
./sip/user/declare ctx_from_local loc.gr 240473 alias-as-user qop_authentication login-as-user pw473
./sip/user/declare ctx_from_local loc.gr 240475 alias-as-user qop_authentication login-as-user pw475
./sip/user/declare ctx_from_local loc.gr 240{500-799} alias-as-user qop_authentication login-as-user test_pw
#...
./ss/profile/declare min_ss only_clip_cnip_chold
sleep 3
./ss/profile/ss-add min_ss chold true true dtmf_sequence_as_flash = false
sleep 1
./ss/profile/ss-add min_ss clip true true
sleep 1
./ss/profile/ss-add min_ss clip true true
sleep 3
./ss/profile/declare work_ss for_office
sleep 3
./ss/profile/ss-add work_ss clip true true
./ss/profile/ss-add work_ss cnip true true
./ss/profile/ss-add work_ss chold true true
./ss/profile/ss-add work_ss ctr true true
./ss/profile/ss-add work_ss conference true true
./ss/profile/ss-add work_ss cf_sip true true
./ss/profile/ss-add work_ss cc_agent true true
./ss/profile/ss-add work_ss ml true true
./ss/profile/ss-add work_ss mcid true true
./ss/profile/ss-add work_ss intervention true true
./ss/profile/ss-add work_ss park true true
./ss/profile/ss-add work_ss meet-me-conference true true
./ss/enable 24010{0-1} *
./ss/enable 2404{62-75} *
./ss/enable 24010{0-1} *
./ss/enable 2404{62-75} *
./ss/profile/activate work_ss 24000{1-9}
./ss/profile/activate work_ss 2404{62-75}
./ss/profile/activate work_ss 24010{0-1}