вторник, 30 декабря 2014 г.

суббота, 6 декабря 2014 г.

sed и экранирование амперсанда

Что то совсем на ночь глядя голова не соображает.
Есть строка и не одна, а пару тысяч, её нужно положить в файл sql для последующей отправки в БД. Из которой в дальнейшем данные будут выводиться на html-страницу. Строки естественно содержат в себе всякий мусор от которого нужно избавляться. Самое основное, конечно же замена апострофа, ибо у запроса вид:
INSERT INTO \`bd\`.\`products\` (\`id\`, \`model\`, \`description\`) VALUES ('NULL', '2', 'тут строка');
И апострофы всё испортят, их надо заменить на спецсимвол ' и вот беда, sed воспринимает & как часть регулярного выражения.
Минут 30 искал как это сделать, т.к. \ не помогал. В итоге, оказалось всё просто, заменил
sed s/\'/\&\#39\;/g
на
sed "s/'/\'/g"
Чего тупил, не понятно.

четверг, 20 ноября 2014 г.

Zabbix-шаблон для PLANET GSW-2416

Для создания шаблонов сетевого оборудования (коммутаторов) пользуюсь генератором шаблонов из этой статьи . В принципе он подходит ко всему, для чего я делал шаблоны. Единственный с кам возникли проблемы это PLANET GSW2416, довольно не плохой свич, выглядит из далека примерно так:


среда, 19 ноября 2014 г.

Zabbix мониторинг MySQL

Стандартный набор шаблонов Zabbix имеет шаблон для мониторинга сервера mysql, но вот беда, если его просто включить, никаких данных он не соберёт.
Для того что бы этого не допустить нужно настроить агент на сервере с mysql
Для этого надо первым делом создать mysql-пользоваетеля под которым будет заходить агент  опрашивать mysql о его текущих параметрах. Привилегии мы никакие давать пользователю не будем во избежании всякого.
Далее необходимо в конфигурационный файл zabbix-агента (/etc/zabbix/zabbix_agentd.conf) прописать следующее:

UserParameter=mysql.status[*], mysqladmin -u[user] -p[password] extended-status | grep "$1 " | grep -o -P "[0-9.]+"

Вместо [user] и [password] подставляем значения созданного пользователя и перезагружаем агент

вторник, 18 марта 2014 г.

Браузер не видит принтеры в Ubuntu 13.10

Довольно таки давно, ещё когда на моём рабочем компютере стояла Ubuntu 13.04 столкнулся с проблемой, что браузер (Firefox & Google Chrome) встаёт колом когда я пытаюсь распечатать страницу в одном из самописных web-приложений. Сначала я это списал на обновление JavaScript скриптов и так как были более важные дела, это всё было отложено в долгий ящик, но сегодня  вопрос встал снова. Экспериментальным путём было выявлено, что проблема наблюдается при попытке распечатать любую страницу, даже без использования каких либо скриптов. Далее выяснилось, что браузеры в принципе не видят ни одного принтера. Сначала подозрение конечно же пало на проблемы при обновлении до версии 13.10. Но всё оказалось проще. В логах cups было следующее:

W [18/Mar/2014:12:25:44 +0400] Max clients reached, holding new connections...
W [18/Mar/2014:12:25:46 +0400] Max clients reached, holding new connections...
W [18/Mar/2014:12:25:58 +0400] Max clients reached, holding new connections...
W [18/Mar/2014:12:26:05 +0400] Max clients reached, holding new connections...
W [18/Mar/2014:12:26:05 +0400] Max clients reached, holding new connections... 

То есть, просто слишком много соединений приходило на сервер печати. Решить это можно очень просто. 

  • В любом браузере переходим на страницу http://127.0.0.1:631/
  • в верхнем меню выбираем Administration
  • нажимаем кнопку Edit configuration file
  • Появится область в котором отображается конфиг cups. Тут нужно найти строку содержащую MaxClients 2 и увеличить число (я поставил 5). 
  • Далее осталось нажать Save changes и дождатся рестарта сервера печати.

После перезапуска браузера всё стало работать отлично.

четверг, 13 марта 2014 г.

Обратный отсчёт Ubuntu 14.04 для сайта

Кому нужен счётчик отсчитывающий время до выхода Ubuntu 14.04 берите у меня,

Код для вставки:

<iframe frameborder="0" height="150" scrolling="no" src="http://162.248.142.50/ubuntucountdown/" width="180">
Ubuntu countdown </iframe>

Скачать архив
Сам код я позаимствовал с сайта http://djazz.mine.nu/files/ubuntucountdown/ Сам им пользовался два года, но в этом году автор видимо забыл про Ubuntu и не обновил даты.

Модуль для instantCMS

Склепал небольшой модуль для сайта на InstantCMS для вывода прогноза погоды.

Модуль скачивает и кэширует данные с сайта rp5.ru на 4 часа и показывает результат.
Что можно настроить:

  • код города прогноз которого хотим показывать.
  • показывать / не показывать:  картинки, температуру, давление, влажность и т.д.
  • размер отображаемых изображений.
  • количество прогнозов от 1 до 4.
Для установки скачайте и распакуйте архив, содержимое каталога rp5weather кроме файла readme.txt скопируйте в корень вашего сайта. После этого останется в админке установить модуль (Модули -> Установить модули -> Погода с сайта rp5.ru) и настроить модуль под себя.


Скачать модуль rp5weather бесплатно и без SMS

пятница, 7 марта 2014 г.

FreeBSD микро "web-сервер" на inetd и bash

Недавно, хотя скорее довольно давно появилась необходимость смотреть определённую информацию с сервера на FreeBSD. Подключаться по ssh каждый раз лень, да и периодичность примерно раз в два-три дня. Идеальным решением было бы смотреть через браузер, но ставить ради подобной хотелки web-сервер мне показалось странно, но как оказалось и совсем не обязательно. В FreeBSD (по крайней мере в версиях с 8 по 9.2) есть замечательная вещь под названием inetd (не путать с init.d). Из руководства по FreeBSD можно прочесть про inetd следующее:

The inetd(8) daemon is sometimes referred to as a Super-Server because it manages connections for many services. Instead of starting multiple applications, only the inetd service needs to be started. When a connection is received for a service that is managed by inetd, it determines which program the connection is destined for, spawns a process for that program, and delegates the program a socket. Using inetd for services that are not heavily used can reduce system load, when compared to running each daemon individually in stand-alone mode.
nano /etc/inetd.conf

Из этого можно вынести примерно следующее, inetd или супер-сервер висит себе спокойно в памяти если какая то программа хочет подсоединится к компу по сети, inetd определяет. что это за сервис и запускает согласно сервису соответствующую программу, которая уже занимается обработкой соединения. Сделано это для того, что бы программы обращение по сети к которым происходит довольно редко, не висели постоянно в памяти и не потребляли ресурсы в ожидании что кто то постучит.
Как то так.

Что же нам потребуется. что бы смастерить такую штуку? Перво наперво придумаем какое нибудь хитрое название для сервиса  и назначим ему порт.
Всё это делается в файле /etc/services, для примера возьмём имя mweb, и tcp порт номер 47559, что бы жизнь мёдом не казалась.
Итак, куда нибудь в конец добавляем:

mweb            47559/tcp

Теперь сообщим inetd, что нужно делать если кто то решиться обратиться к этому сервису.
В файл /etc/inetd.conf добавим:

mweb      stream  tcp     nowait  nobody  /home/user/web.sh

где mweb - название сервиса, stream - тип сокета, tcp - протокол, nowait - открывать новый сокет для каждого подключения (здесь могут быть разные параметры с помощью которых можно задать максимальное количество детей процесса, максимальное количество соединений с одного IP и т.д. подробней), nobody - пользователь от имени которого будет выполнен скрипт/программа, /home/user/web.sh - сам скрипт который будет запускаться.

/etc/rc.d/inetd restart

Осталось создать скрипт
nano /home/user/web.sh

#!/bin/sh
echo "Hello world!"


Теперь при обращении через браузер (и не только) на порт 47559 увидим результат выполнения скрипта. Хотел вывести страничку с html-кодом, но blogger не позволяет вставлять тэги, или просто я не осилил.

SMS-уведомления для Nagios

В последнее время цены на SMS увеличились в два или три раза почти на всех шлюзах и стало накладно использовать их для отправки SMS-уведомлений от Nagios, особенно если в день приходит иногда по сотне сообщений. Относительно недавно обнаружил необычный сервис отправки sms.ru, который предлагает бесплатную отправку сообщений, с тем лишь условием, что SMS будут приходить только на один номер телефона. Сначала было подозрительно, но попользовавшись им около 3 месяцев могу сказать, что работает всё просто отлично. Задержки по времени почти такие же как у всех, но при этом гораздо дешевле.
Естественно услуги sms.ru не ограничиваются отправкой SMS на один номер, в системе присутствуют все необходимые средства для массовых рассылок на различные номера с различными параметрами и естественно буквенные отправители.
У сервиса есть API и примеры реализации для нескольких языков программирования, удобный, понятны и богатый функционалом личный кабинет и даже партнёрская программа.
В общем, рекомендую!
Итак, как прикрутить к Nagios. А всё просто до идиотизма:

Запустить Ubuntu без графической оболочки

Потребовался давеча небольшой временный сервачок, на глаза попался компьютер с установленной Ubuntu 12.04 Desktop. По железу комп сгодится, на борту уже стоит LTS, никаких нужных данных на нём нет, что ещё нужно? Сомнения взяли только неумеренные апетиты графической оболочки, которая в данном случае совсем не нужна. Быстрый поиск дал несколько решений:
1. Изменить runlevel
Для этого достаточно изменить в файле /etc/init/rc-sysinit.conf строку
env DEFAULT_RUNLEVEL=2
на 
env DEFAULT_RUNLEVEL=3
После перезагрузки графическая оболочка не будет загружаться. Соответственно, если поменять обратно на 2, то будет всё как прежде. Подробней про уровни запуска Тут
2. Убрать X11 из автозагрузки
В консоли достаточно выполнить:
update-rc.d -f xdm remove
Для запуска можно воспользоваться командой: service xdm start 
Что бы вернуть как было (запускать при запуске) update-rc.d -f xdm defaults
3. Удалить X11
apt-get remove --purge x11-common && apt-get autoremove
Удалит всё к чертям, что бы вернуть как было нужно будет всё ставить заного.