Подключил домой инет от Ростелекома... Заявка через сайт - угу... При попытке выяснить статус заявки колл-центр сказал, что у них таких номеров не бывает и дали номера колокольчиков с одинаковыми клёвыми гудками... Но через некоторое время они сами отзвонились.
Т.к. монтер дошел до дома со второй попытки, а для выяснения, что у него произошло с первой попытки, пришлось посетить офис РТ, заодно узнал, что у РТ есть тариф за 299руб/мес. за 3мб/сек. о котором умолчали на сайте.
Тестирование скорости показало интересные результаты:
Т.к. хочется держать файлопомойки на никсах и при этом нормально интегрировать в виндовую сеть, давно очень хотелось иметь возможность, чтобы пользователи сами могли откатывать версии файлов назад и при этом все работало шустро и занимало мало места.
Оказалось все довольно просто.
Имеем:
Подготавливаем Samba:
[Public]
path = /usr/data/samba/public
public = yes
writable = yes
vfs objects = shadow_copy2
shadow: snapdir = .zfs/snapshot
shadow: sort = desc
shadow: format = %Y-%m-%d_%H.%M.%S--1m
Задание cron для создания снепшотов:
/usr/local/sbin/zfSnap -d -z -R -a 1m zpool/usr/data/samba/public
0,30 7-20
* * *root
После этого мы будем иметь возможность откатиться на любую дневную версию файлопомойки с интервалом в 30 минут с 7 утра до 8 вечера. При этом, места будет заниматься ровно столько, сколько необходимо для хранения всех этих изменений.
В связи с переездом одного офиса перевел его на IP телефонию. Т.е. получаю телефонию по SIP от Билайна, разруливаю все на астериске, часть SIP телефонов Panasonic KX-UT133, часть телефонов обычных подключеных через FXS шлюз grandstream GXW4232.
С обычными телефонами возникла проблема - входящий звонок не получалось перевести на другой телефон. Астериск писал:
No compatible codecs, not accepting this offer!
После долгих мучений, гуглений и т.д. в тщетных попытках как-то вылечить кроме кодека alaw (который использует билайн),разрешил в астериске кодек ulaw, после чего все завелось.
Не знаю, что успел поломать за время мучений, но все заработало. Из неприятного, не смог обновить прошивку на шлюзе. Вроде пробовал и через официальный сайт, и через свой tftp сервер - никаких эмоций у шлюза это не вызвало. Нужно будет стучаться в техподдержку грандстрима.
Имеем железку с FreeBSD 9.2 amd 64 с VirtualBox ose 4.2.18. При попытке загрузить виртуальную машину с исошки FreeBSD 9.x. машина падает в Kernel Panic.
После нескольких часов безуспешных попыток, осознал, что сначала создаю виртуальную машину, без определения ее типа, а потом меняю тип на FreeBSD 64. При этом BSD 8.x грузится нормально, а 9-ке плохо.
После того, как указал тип виртуальной машины во время ее создания, все взлетело без проблем.
P.S. Опыт такая хитрая штука, которая появляется сразу после того, как она была необходима.
(с)left bor.
Искал софтину, которая помогала бы освоиться с нотами, нашел классную штуку для обучения игры на клавишах по нотам - PianoBooster.
Грузишь мидишку - она рисует нотный стан, гонит музыку и позволяет/заставляет в правильное время жать правильные кнопочки, как мартышку. Если все делаешь правильно, то получаешь банан, в виде нормально звучащей композиции.
Для нормального использования, таки требуется MIDI клава, т.к. с обычной клавой как-то вообще не ассоциируется у меня.
Нашел отсюда.
Возникла задачка, скопировать систему с виртуальной машины на железную. Т.к. система была поставлена полность на ZFS, то соответственно, переносить захотелось силами ZFS.
Все оказалось достаточно просто. Загружаем получателя с установочного диска, входим в LiveCD, поднимаем сеть,
подготавливаем диск к загрузке
dd if=/boot/zfsboot of=/dev/ada0 count=1
dd if=/boot/zfsboot of=/dev/ada0 skip=1 seek=1024
создаем пул
zpool create -f zroot ada0
Запускаем netcat на прослушку и передачу данных в zfs
nc -l 8080 | zfs receive -vdF zpool
На рабочей машине делаем снепшот всего пула
zfs snapshot -r zroot@transfer
и запускаем zfs на отправку данных через неткат
zfs send -Rv zroot@transfer | nc new_pc_ip 8080
Некоторое время ждем, и если все хорошо, то перегружаемся.
Продолжаю учиться играть в почту.
При фильтрации почты на спам учитывается и такой момент как подпись писем от почтового сервера.
Идейно есть две вещи DomainKey и DKIM.
Если я правильно понял, то это очень похожие вещи, но сейчас, вроде, чаще используется DKIM.
Идея заключается в том, что все письма исходящие с сервера подписываются закрытым ключем, а публичный ключ публикуется в DNS домена.
Все настраивал по статье "Exim + DKIM на примере FreeBSD 8.2", но как обычно вышло все не без затыков.
Эти строки нужно вставить в секцию remote_smtp транспорта, а не протокола:
dkim_domain = DKIM_DOMAIN
dkim_selector = YouSelectorName
dkim_private_key = DKIM_PRIVATE_KEY
Гуглится легко, но таки время.
Т.к. ключ достаточно длинный, нужно его разбивать на несколько строк, т.е. у меня это выглядело так:
В связи с тем, что в очередной раз пытаюсь вспомнить как играют с почтой на exim и dovecot, захотелось, чтобы сервер автоматически раскладывал почту по папочкам.
Вроде статей много, как это сделать, но все они упускают 2-а момента:
После этого, вроде уже нормально все зашуршало.
Т.к. некоторые SIP/VoIP провайдеры далют халяву с некоторыми ограничениями (на пример sipnet) на количество звонков и их общую продолжительность, захотелось этим воспользоваться, но при этом не попадать на деньги.
Нарисовал 2-а макроса. Первый для учета количества звонков и их длительности, второй для выбора необходимого транка.
Учитываем только отвеченные
[macro-count_dial_from_trunk]
exten => s,1,NoOp(${CDR(duration)} ${CDR(billsec)}); Enable call limit control ?
exten => s,n,GotoIf($[${DB(trunk/${NAME_TRUNK}/day/limit-enable)} = 1 ]?:noanswer)
exten => s,n,GotoIf($[${DIALSTATUS} = ANSWER ]?:noanswer)
exten => s,n,Set(foo=${CUT(CDR(dstchannel),,1)})
exten => s,n,Set(foo=${CUT(foo,/,2)})
exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call-time)})}]?:continue_call-time)
exten => s,n,Set(DB(trunk/${foo}/day/call-time)=0)
exten => s,n(continue_call-time),Set(DB(trunk/${foo}/day/call-time)=$[${DB(trunk/${foo}/day/call-time)}+${CDR(billsec)}])
exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call)})}]?:continue_call)
exten => s,n,Set(DB(trunk/${foo}/day/call)=0)
exten => s,n(continue_call),Set(DB(trunk/${foo}/day/call)=$[ ${DB(trunk/${foo}/day/call)} + 1 ])
exten => s,n(noanswer),Verbose(4,Call count:${DB(trunk/${foo}/day/call)} - time(s):${DB(trunk/${foo}/day/call-time)})
2. Проверка превышения лимита
Захотелось извещать пользователей Asterisk о поступающих им звонках. Наваял такой макрос:
[macro-notice_by_call]
exten => s,1,Verbose(4,Starting notification macros)
exten => s,n,Set(TIME_STRING=${STRFTIME($EPOCH,,%d %B %Y - %T)})
exten => s,n,Set(SUBJECT_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}))
exten => s,n,Set(MESSAGE_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}). Time: ${TIME_STRING})
exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)})}]?skip_jabber_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)}=0]?skip_jabber_notification)
exten => s,n,jabbersend(asterisk,${DB(abonent/${MACRO_EXTEN}/jabber)},${MESSAGE_STRING})
${STRFTIME($EPOCH,,${TIME_STRING})})
exten => s,n(skip_jabber_notification),NoOp(No need jabber notification)
exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_email)})}]?skip_email_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_email)}=0]?skip_email_notification)
exten => s,n,system(echo "${MESSAGE_STRING}" | mail -s "${SUBJECT_STRING}" ${DB(abonent/${MACRO_EXTEN}/email)});
exten => s,n(skip_email_notification),NoOp(No need email notification)
Соответственно, в базе данных астериска должна быть информация о контактах пользователей. Пытаться использовать почту из конфигурационного файла я не захотел, т.к. это может быть разная почта.