понедельник, 6 февраля 2012 г.

Изменить расположение файла подкачки для хоста виртуализации Hyper-V

Выбираем место для хранения файла подкачки (мы у себя для этих целей всегда создаём отдельный раздел на диске (желательно не системном), обзываем его какой-нить буквой из конца алфавита (у нас - всегда буква S:)). Это делаем через удалённое управление хостом со своей машины.
Удалённо подключаемся к реестру на хосте виртуализации, идём в ветку HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Настраиваем параметры файла подкачки, как на картинке.

Здесь цифры в параметре PagingFiles - минимальный и максимальный размер файла. Когда они одинаковы - размер файла подкачки фиксирован.

Перегружаем сервер, получаем счастье.

четверг, 15 декабря 2011 г.

Удаляем службы в Windows Hyper-V Server 2008 R2

Для удаления службы в Windows Hyper-V Server 2008 R2 делаем следующее:

1. На своей машине идём в Управление компьютером. Подключаемся к хосту Hyper-V. Идём в Службы.
2. Находим требуемую службу, останавливаем и со страницы свойств копируем её название.
3. Идём на консоль сервера Hyper-V и выполняем команду:
sc delete <имя службы>

Всё.

среда, 14 декабря 2011 г.

Удалённый доступ к Device Manager для сервера Microsoft Hyper-V Server 2008 R2

Расширяли сетевые возможности своего сервера виртуализации. Столкнулись с проблемой доступа к Менеджеру устройств на этом серваке. Порывшись, нашёл такое решение.

1. На своём компе (с которого есть удалённый доступ к серверу) запускаем консоль mmc. Добавляем в неё оснастку "Редактор объектов групповой политики" и вместо локального компа указываем наш сервер:
Далее движемся в раздел Конфигурация компьютера - Административные шаблоны - Система - Установка устройств и для параметра "Разрешить удалённый доступ к устройствам Plug and Play" ставим значение "Включено".

2. Идём на консоль нашего сервера и делаем ему больно - gpudate /force

3. Подключаемся со своего компа к удалённому управлению нашим сервером, смотрим на результат. Он полуположительный - device manager есть, записи нет. Но это у Microsoft уже не лечится.

воскресенье, 20 ноября 2011 г.

VPN в корпоративную сеть

Думал, что всё будет очень сложно. Ан нет, порадовала Fedora. Оказалось, всё очень просто.
1. Идём в Network Manager.
2. Говорим ему Manage Connections
3. На закладке VPN говорим Add, выбираем PPTP
4. На первой страничке (PPTP Settings) вводим данные своего VPN
5. Там-же нажимаем кнопочку Advanced, и делаем как на скриншоте.
Всё, сохраняем наш VPN, подключаемся. Имеем счастье.

How-To: Устанавливаем драйвера NVIDIA на Fedora Core 16 + KDE4

 Итак, сказано - сделано. Наф винды, (ну... не наф, конечно - остались они на винте, что греха таить...) да здравствует Linux.
Поставил сначала последнюю Fedora (release 16 Verne) с Гномом. Эмм... Не знаю, что там курят разработчики Гнома - но что-то больно забористое, это точно. Ниасилил, как говорится. Убил наф, поставил со старым добрым KDE 4.7.3. Интерфейс-то родной, но...
У меня два монитора. Один - эт ноут. Второй - эт рядом. На ноуте - NVidia FX880M. KDE благополучно второй монитор находит... Только ничего про него не запоминает и вываливается постоянно. Подумал, что это из-за драйверов - ведь по умолчанию Fedora, найдя карту NVidia, ставит nouveau-драйвер. Сходил на NVidia, почитал про драйвера под Linux. Ничо не понял.
Погуглил, подумал, и сделал так.

1. Обновил систему в части ядра, заголовков и Selinux

yum update -y kernel* selinux-policy*
reboot
2. Добавил в систему прогугленный репозиторий, который содержит свежак драйверов

rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
3. Установил сами драйвера

yum install kmod-nvidia xorg-x11-drv-nvidia-libs
4. Удалил ссылки на nouveau-драйвер из загрузчика


mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
dracut /boot/initramfs-$(uname -r).img $(uname -r)
reboot

Ну и получил счастье. Оба монитора работают, настройки сохраняются и запоминаются и вообще всё хорошо.

понедельник, 23 мая 2011 г.

Отправляем SMS при помощи kannel на базе CentOS 5.5 - Настройка.

Во второй части статьи мы кратко рассмотрели процесс установки kannel. Теперь начинается самое интересное - настройка.
Перед началом процесса настройки настоятельно рекомендую почитать официальную документацию на стабильный релиз. Без этого будет тяжеловато понимать логику работы программы.
Итак.
Kannel состоит из трех частей, которые разработчики называют boxes – bearerbox, smsbox и wapbox. Bearerbox – главный модуль, принимающий SMS-сообщения с мобильного телефона и пересылающий их в wapbox и smsbox. Поддерживается множество WAP- и SMS boxes. Wapbox в нашем случае нас не интересует (мы не собираемся предоставлять мобильный контент корпоративным пользователям), поэтому настройку wapbox в рамках этой статьи мы рассматривать не будем.
Вся настройка может храниться в одном файле - kannel.conf. После установки kannel из исходников (а почему мы сделали именно это, а не поставили его из готовых пакетов, коих в сети предостаточно, в том числе и в базовой конфигурации CentOS, я расскажу чуть позже) конфигурационный файл по умолчанию не создаётся, мы вольны расположить его где угодно. Я для этого использую папку /etc/kannel. Сам файл может быть как один, так и содержать в себе ссылки на файлы конфигурации отдельных boxes - если ваша конфигурация в результате разрастётся до неприличных размеров. Наша задача не такая большая, поэтому мы будем использовать один файл.
Первая секция - настройка самого bearerbox. Как уже говорилось - это основной модуль программы. Выглядит секция приблизительно так:
#Файл основной конфигурации kannel
#Секция bearerbox
#Описывает основные свойства и общую настройку kannel
#
#Обязательный параметр. Группа core присутствует ВСЕГДА
group = core
#Обязательный параметр. Номер порта, на котором находится
#административный интерфейс kannel. Через этот интерфейс мы
#можем управлять нашими боксами
admin-port = 13000
#Обязательный параметр. Без него административный
#http-интерфейс не работает.
admin-password = T[fkUhtrfXthtpHtre
#Номер порта, на котором слушается smsbox. Можно использовать другой номер.
smsbox-port = 13001
#Где лежат логи bearerbox и степень их детализации:
#0 - отладка (debug)
#1 - информация (info)
#2 - предупреждения (warning)
#3 - ошибки (error)
#4 - panic
log-file = /var/log/kannel/bearerbox.log
log-level = 0
access-log = /var/log/kannel/access.log
#Тип хранилища подтверждений о доставке сообщений на телефон абонента.
#При использовании в качестве SMS-центра модема доставка таких
#подтверждений не работает, поэтому можно не писать. :-) (DeLivery Report) 
dlr-storage = internal
#Тип хранилища сообщений. Может быть либо spool - тогда все сообщения
#хранятся в отдельном каталоге и для каждого из них создаётся отдельный
#файл, либо file - тогда все сообщения валятся в один файл. Сделано это
#для того, чтобы при падении kannel сообщения не пропали.
store-type = spool
store-location = /var/spool/kannel/
Вторая секция - настройка smsbox. Это тот модуль, который слушает определённый http-порт и при наличии на этом порту GET- или POST- (или какого либо ещё) запроса на отправку сообщения передаёт его соответствующему SMS-центру и рапортует при помощи http-response о выполении этой задачи.
#Секция smsbox
#Описывает настройку модуля smsbox
#
#Обязательный параметр. Говорит о типе бокса
group = smsbox
#Где находится основной модуль kannel. Из этого параметра следует,
#что в больших инсталляциях bearerbox может располагаться
#на другом сервере.
bearerbox-host = localhost
#Название нашего бокса. Будет отображаться в логах, служит
#идентификатором бокса, т.к. smsbox может быть несколько.
smsbox-id = My-smsbox
#Где лежат логи smsbox и степень их детализации:
#0 - отладка (debug)
#1 - информация (info)
#2 - предупреждения (warning)
#3 - ошибки (error)
#4 - panic
log-file = /var/log/kannel/smsbox.log
log-level = 0
#Порт, на котором слушаются запросы. Можно ставить свой номер.
sendsms-port = 13013
Третья секция - настройки SMS-центра. SMS-центр определяет, связь какого типа будет использоваться для передачи SMS. Это может быть и протокол SMPP, и SMS-центр Nokia CIMD версии 1.37 или 2.0, и различные http-релеи, пересылающие запросы соответствующим smsbox. Специально для нашего случая разработана секция, в которой в качестве оборудования используется GSM-модем или терминал. Её настройки мы и опишем.

#Секция smsc
#Описывает настройку модуля smsc
#
#Обязательный параметр. Говорит о типе бокса
group = smsc
#Тип используемого SMS-центра. Для модема - обязательно at.
smsc = at
#Название нашего SMS-центра. Будет отображаться в логах, служит
#идентификатором SMS-центра, т.к. их может быть несколько (например,
#три разных модема на трёх COM-портах)
smsc-id = APPM-smsc
#Тип используемого модема. Некоторые известные типы модемов отражены в
#документации, которая лежит по адресу /usr/src/gateway-1.4.3/doc/examples
#Если тип модема там не представлен, можно смело ставить auto.
modemtype = auto
#Порт, на котором живёт наш модем. В данном случае - COM1
device = /dev/ttyS0
#Список адресов, с которых разрешён доступ к нашему SMS-центру.
connect-allow-ip = 127.0.0.1
#Скорость последовательного порта
speed = 115200
#Хранить входящие сообщения в памяти sim-карты
sim-buffering = true
#Номер телефона SMS-центра оператора. Может быть прошит в вашей sim-карте,
#а может жёстко задаваться тут. Я выбрал второй путь - он прописывается
#в терминал перед отправкой каждого сообщения. Номер задаётся в
#международном формате.
sms-center = +79219909090
Четвёртая секция - описание собственно модема и правил работы с ним.

#Секция modems
#Описывает настройку GSM-терминала.
#
#Обязательный параметр. Говорит о типе бокса
group = modems
#Идентификатор и имя устройства
id = SIEMENS MC35i
name = "Siemens_MC35i"
#Если в выводе команды ATI содержатся эти две строки, то использовать
#описание и параметры этого модема
detect-string = "SIEMENS"
detect-string2 = "MC35i"
#Строка инициализации модема. Почти все грабли, которые можно собрать
#на этапе первоначальной настройки, связаны с неправильной строкой
#инициализации
init-string = "AT+CNMI=1,2,0,1,1"
#Использовать аппаратную синхронизацию потока
enable-hwhs = "AT\\Q3"
#При длительном неиспользовании модем может уснуть. Чтобы этого
#не случилось, говорят
need-sleep = true
#тип хранилища входящих сообщений.
message-storage = SM
Пятая секция - описание раздела авторизации пользователей при отправке SMS-сообщений. Если поля username и password в этой секции пусты, то отправить может любой. Если в этой секции присутствует поле default-sender, то в формируемом GET-запросе не надо будет указывать поле from=. (О структуре GET-запроса смотри ниже)

group = sendsms-user
username = ""
password = ""
default-sender = +79314114119
Шестая секция - описание http-интерфейса, предоставляющего доступ ко входящим сообщениям. Как я уже упоминал выше, нам это неактуально, поэтому в этой секции всё будет просто:

group = sms-service
keyword = default
text = "No service specified"
catch-all = true
Таким образом, в собранном воедино виде наш конфигурационный файл будет выглядеть следующим образом:
#kannel configuration file
group = core
admin-port = 13000
admin-password = T[fkUhtrfXthtpHtre
smsbox-port = 13001
log-file = /var/log/kannel/bearerbox.log
log-level = 0
access-log = /var/log/kannel/access.log
dlr-storage = internal
store-type = spool
store-location = /var/spool/kannel/

group = smsbox
bearerbox-host = localhost
smsbox-id = APPM-smsbox
log-file = /var/log/kannel/smsbox.log
log-level = 0
sendsms-port = 13013

group = smsc
smsc = at
smsc-id = APPM-smsc
#log-file = /var/log/kannel/smsc_at.log
#log-level = 0
modemtype = auto
device = /dev/ttyS0
connect-allow-ip = 127.0.0.1
speed = 115200
sim-buffering = true
sms-center = +79219909090

group = smsbox-route
smsbox-id = APPM-smsbox
smsc-id = APPM-smsc

group = modems
id = SIEMENS MC35i
name = "Siemens_MC35i"
detect-string = "SIEMENS"
detect-string2 = "MC35i"
init-string = "AT+CNMI=1,2,0,1,1"
enable-hwhs = "AT\\Q3"
need-sleep = true
message-storage = SM

group = sendsms-user
username = ""
password = ""
default-sender = +79314114119

group = sms-service
keyword = default
text = "No service specified"
catch-all = true
Всё готово к тому, чтобы стартовать kannel с тем, что мы натворили. На этапе отладки делать это лучше из двух разных окошек ssh-консоли (либо с двух разных локальных консолей). В первой консоли набираем:

bearerbox /etc/kannel/kannel.conf
и видим примерно такую картину:
Во втором окне выполняем запуск smsbox:

smsbox /etc/kannel/kannel.conf
Выглядит это так:

Теперь можно открыть третье окошко ssh-консоли (или третий локальный терминал, Alt+F3) и посмотреть, работает ли web-сервер, который поднимается из-под bearerbox:
Ок, всё работает!
Теперь попробуем отослать SMS.
Здесь мне придётся сделать некоторое лирическое отступление.
Как я ни пытался, но мне так и не удалось отправить SMS на номер, сформированный по правилам, привычным мне с момента начала пользования мобильным телефоном - +7МММХХХХХХХ. Что с плюсом впереди, что без плюса - в результате формировалась PDU, у которой в типе номера телефона в поле DA всегда стояло 81h. А наш любимый оператор Мегафон такие SMS не принимает, считая, что номер указан не в международном формате. После трёх дней экспериментов и плотного общения с инженерами Мегафон и разработчиками kannel на канале users@kannel.org было обнаружено, что SMS уходят без проблем в двух случаях: если вместо "+" в номере получателя ставится регулярное выражение %2B или номер телефона получателя пишется в ПОЛНОМ международном формате - +007МММХХХХХХХ. Теоретически для определения префиксов кодов стран в конфигурационном файле kannel служит специальная переменная, unified-prefix. Но разобраться с форматом этой переменной для России я так и не смог - куда и как бы я её не подставлял, номер телефона получателя всё равно ставился с 81h в поле DA.
Итак, для отправки SMS с помощью GET-запроса вводим в адресную строку вашего любимого браузера следующую строку:

http://smsgate.appm.local:13013/cgi-bin/sendsms?username=&password=&to=+007MMMXXXXXX&text=Test from Kannel
Если у нас всё правильно настроено, то в двух окнах, в которых запущены процессы bearerbox и smsbox вы увидите процесс отправки SMS, а само сообщение прилетит к вам на телефон.
Поздравляю, теперь любой ваш мониторинг сможет оповещать вас посредством отправки SMS-сообщения на ваш телефон!

У нас осталась последняя часть рассказа - как всё, что мы сейчас сделали, прикрутить к мониторингу от Paessler (который PRTG Network Monitor)

воскресенье, 22 мая 2011 г.

Отправляем SMS при помощи kannel на базе CentOS 5.5 - Установка.

В первой части мы поговорили о некоторых аспектах теории, теперь перейдём к практической реализации того, что мы выбрали.

Итак, оно нам подходит, так что собираемся с духом и приступаем.

Первое: железо.

В первой части мы говорили, что наша задача - просто SMS-оповещение о событиях мониторинга. Для этих целей большого сервера не нужно. В моём случае аппаратной платформой для реализации проекта стал самый простой IBM System x3250, с Пентиумом на борту и гигом оперативки - можно было бы купить меньше памяти - взял бы и 256 мегов - этого бы хватило. Самое ценное для нас на борту этого сервера - COM-порт, к которому подключен GSM-терминал, выполняющий у нас роль отправителя SMS-сообщений. С этим терминалом имею дело давно - аж с 2000 года, и зарекомендовал он себя с самой лучшей стороны. За 11 лет НЕПРЕРЫВНОЙ работы - ни одного серьёзного сбоя. (По случаю старта нового проекта был куплен новый. Теперь на них почему-то написано Cinterion, хотя на команду ATI он исправно отвечает SIEMENS MC35i REVISION 2.0)

Второе: среда.

С этим у меня никогда не было мучений выбора. Люблю RHEL, но не имею ни одной лицензии на неё. Поэтому ни о чём не думая пользую CentOS - тоже самое, только бесплатно.

Третье: вариант использования kannel.

Эмм... Можно договориться с оператором и общаться с его SMS-центром при помощи SMPP. НО. Эта штука будет работать только до тех пор, пока не ляжет мой канал в интернет. А поскольку это событие случается несколько чаще, чем мне хотелось бы (о том, что такое "последняя миля" в нашем варианте, я расскажу потом. Может быть. Половину. Ну, ту, которую можно рассказать цензурными выражениями...), я буду использовать вариант отправки сообщений напрямую через терминал - это работает всегда.

С составом проекта определились, приступаем к реализации.


1. Ставим CentOS. Ставим в минимально возможной конфигурации - нам от средств, предлагаемых базовой комплектацией системы нужны будут только mc, ssh и minicom (для тестирования терминала в автономном режиме). Да, для успешной установки нам ещё понадобится компилятор gcc и библиотека libxml2 версии где-то 2.6. Если после инсталляции системы их у нас нет (проверяем наличие командой yum list gcc libxml2), ставим их из базовых пакетов:

yum install gcc libxml2
Ну и после этого обновляем всю систему

yum update
2. Определяемся, что для исходников будем использовать папку /usr/src

cd /usr/src
3. Качаем исходники текущего стабильного релиза kannel с официального сайта.

wget http://www.kannel.org/download/1.4.3/gateway-1.4.3.tar.gz
 4. Разархивируем их.

tar zxvf gateway-1.4.3.tar.gz
5. Переходим в папку с исходниками.
cd gateway-1.4.3
6. Устанавливаем всё по умолчанию.

./configure
make
make install
7. Всё. kannel установился в /usr/local.

Далее начинаем процесс настройки. В моём случае мы будем настраивать kannel для работы с терминалом Cinterion MC35i (Siemens MC35i), подключенным к сети "Мегафон Северо-Запад". О настройке - в следующей части статьи.