ITDim
    Все будет итышно, когда вы с нами :)

Включить mod_rewrite в Apache (на примере Ubuntu)



Включаем мод:
sudo a2enmod rewrite
Редактируем:  
/etc/apache2/sites-enabled/000-default
И меняем в нем:
AllowOverride None
на
AllowOverride All

После рестартуем апач и все работает.

Joomla заметки

Изучал немного сегодня joomla и сделал для себя пару заметок:
1) Обновление joomla через интерфейс администратора не проходит, выдает ошибки, но вручную оказалось обновлять не сложно - качаешь апдейт, и тупо загоняешь папки! (файлы, которые находятся в корне для обновления не нужны) на фтп.
2) Модули и плагины на хостинге, не хотят обновляться через папку темп, вначале подумал, что это из за того что в пункте Directory Permissions (которая находится в System Information) напротив папки стояло Unwritable. Решил эту проблему тем что в файле cinfiguration.php была неправильно прописана эта папка вместо /htdocs/tmp нужно указывать просто /tmp.
Короче это все тоже не помогло. Но я попробовал загрузить модули через файл архива:
 И все чудесным образом установилось)
3) Дальше я попал на сайт sape.ru пытался присобачить это к joomla 2.5 никак не получилось и я забросил эту тему видимо с 2.5 никак) ждем модулей под нужную версию.
4) Решил я установить нормальный плагин редактора текста, а то надоело писать в html, немного поискав в инете я нашел следующий плагин: JCK Editor
Вроде нормально выглядит) во всяком случае лучше чем было (4 кнопки). JCK  устанавливается без проблем, но не забываем установить его редактором по умолчанию, иначе будет старенький.

Остальные плагины и модули которые я попробовал были унылые и писать о них не стоит.

Вышло новое обновление программы Инвентаризация

На сайте http://exe.ho.ua/ размещено новое обновление программы, теперь она стала еще лучше и более функциональной.

Тут весь список обновлений

Смотрим через командную строку какие диски подключены

c:\>fsutil fsinfo drives 

Разрешаем входящие пинги на Hyper-V Server 2008

По умолчанию на Hyper-V Server 2008 включен брандмауэр, блокирующий почти все, что можно и что нельзя. Нельзя, например, блокировать входящие пинги, которые являются простейшим и удобнейшим способом сетевой диагностики. Разрешаем их следующей командой:

netsh advfirewall firewall add rule name="ICMP Allow incoming V4 
echo request" protocol=icmpv4:8,any dir=in action=allow

Linksys x2000

В целом достойное оборудование, хороший дизайн, стабильность работы высокая. Но я столкнулся со следующими проблемами:
1) Не смог его адаптировать к adsl провайдер ВЕГА, мог работать 2 дня, мог 30 мин, при этом само устройство не подвисало, заменил на тп линк, никаких проблем.
2) При работе через езернет, все отлично было пока не прошился на новую прошивку 2.0.04, прошивка не дает залогинится не на один сайт, и подключение впн падает чере 10 сек. Проблему с куки смог решить включением в вкладке безопасности фильтр куки, а вот впн никак).
Прошивочку старую найди довольно сложно, поэтому вот она:
http://www.exe.ho.ua/images/downloads/FW_X2000_2.0.03.001.7z

после прошивки на старую версию все настройки слетают!

Отключение гибернации.

Отключение гибернации.

- заходим в меню Пуск, и в строке поиска вводим cmd;

- кликаем Правой кнопкой мыши по файлу cmd.exe, и выбираем параметр Запуск от администратора;

- откроется командная строка, в нее вводим текст powercfg -h off;

- командная строка вскоре вернется в режим ожидания команды – когда это произойдет, вы сможете быть уверены, что гибернация отключена

Сетевые интерфейсы

http://manpages.ubuntu.com/manpages/lucid/man5/interfaces.5.html
http://manpages.ubuntu.com/manpages/lucid/man8/ip.8.html
man interfaces - первоисточник по конфигурации Ethernet интерфейсов

Примечание
Команда ifconfig считается устаревшей и не рекомендована к использованию, вместо нее следует использовать исключительно команду ip

Перезапуск сетевых интерфейсов
/etc/init.d/networking restart выполнение такой команды в Debian приводит к тому, что система жалуется нам:
"Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces ..."
Вместо этого лучше использовать команды ifdown eth0, а затем ifup eth0, для каждого отдельно взятого интерфейса ethX.
Если мы работаем удаленно и связаны, к примеру, с удаленным хостом черех eth0,  то выполнение ifdown eth0 приведет к отключению интерфейса и потере связи с сервером, поэтому перезапускаем интерфейс такой командой:
#ifdown eth0 && ifup eth0
что последовательно выполняет команды ifdown eth0, а затем ifup eth0

Системная часть
cat /proc/net/dev посмотреть все сетевые интерфейсы, подключенные к системе. Будут показаны активные и неактивные сетевые карты
ifconfig показывает статус текущих активных сетевых интерфейсов - устаревает
ip link show up показывает статус текущих сетевых интерфейсов

ifconfig -a показывает статус всех доступных в системе сетевых интерфейсов - активных и неактивных - устаревает
ip address показывает статут всех сетевых интерфейсов
2: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:af:8c:e6:93:e2 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:af:af:66:ae:44 brd ff:ff:ff:ff:ff:ff
    inet 192.168.77.191/24 brd 192.168.77.255 scope global wlan0
    inet6 fe80::215:afff:fe66:ae44/64 scope link
       valid_lft forever preferred_lft forever

ip address в чем-то более информативна, чем ifconfig
NO-CARRIER - нет связи, не воткнут кабель итп.
UP - активирован интерфейс
00:af:af:66:ae:44 MAC-адрес
192.168.77.191/24 IP-адрес/маска подсети

192.168.77.255 широковещательный адрес


sudo lspci - список pci устройств, среди которых есть и сетевые карты
sudo lspci -v подробнее; sudo lspci -vv - еще подробнее; sudo lspci -vvv - подробнее не бывает :)
sudo lshw - список оборудования, можно посмотреть и логическое имя сетевой карты
sudo lshw -class network список сетевого оборудования с логическими именами
ifconfigrourte и netstat - устаревшие команды(legacy), вместо них нужно использовать ip  и ss
sudo ip link set wlan0 down - деактивировать wlan0 (sudo ifconfig wlan0 down)
sudo ip link set wlan0 up -активировать wlan0 (sudo ifconfig wlan0 up)

/etc/udev/rules.d/70-persistent-net.rules привязка имен eth0, eth1, ... ,ethX к сетевым картам, привязка идет на основе мак-адреса сетевой карты.
Подредактировав данный файл можно убрать привязки тех сетевых карт, которые ранее втыкались в комп и сделать аккуратную сплошную нумерацию для логических имен сетевых интерфейсов. Может пригодиться при перетыкании сетевых карт, чтобы не переписывать правила для iptables
Переназначить имена можно также при помощи всемогущей команды ip

Настройка сетевых карт:
man 5 interfaces - руководство
/etc/network/interfaces файл настроек сетевых карт
Добавить шлюз по умолчанию:
1) ip route add default via 7.7.7.1 dev eth1
(Этот шлюз пропадет при перезапуске сетевых интерфейсов
/etc/init.d/networking restart - т.е. в файл /etc/network/interfaces запись не производится)

После добавления таким образом шлюза ip route дает такой вывод:
....
default via 7.7.7.1 dev eth1
2) вносим в файл /etc/network/interfaces запись после eth1:
gateway 7.7.7.1, после чего делаем /etc/init.d/networking restart
ip route выдаст такой результат:
.....
default via 7.7.7.1 dev eth1 metric 100

Пример файла interfaces:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 7.7.7.7
    netmask 255.255.255.0
    network 7.7.7.0
    broadcast 7.7.7.255
    dns-nameservers 192.168.0.1 x.x.x.x y.y.y.y
    dns-search lan
    post-up iptables-restore < /etc/iptables.up.rules
    gateway 7.7.7.1
    # dns-* options are implemented by the resolvconf package, if installed

# The secondary network interface

auto eth1
iface eth1 inet static
    address 192.168.0.1
    netmask 255.255.255.0


Еще один пример для интерфейса, получающего настройки от DHCP-сервера:
auto eth0
iface eth0 inet dhcp

Еще один пример для интерфейса, получающего настройки от DHCP-сервера:

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

Еще один пример для статически заданного интерфейса:
auto eth0
iface eth0 inet static
address 192.168.0.7
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.254

Смена раскладки в ubuntu

Заходим в параметры раскладки клавиатуры - жмем на параметры - находим Клавиши для мены раскладки и выбираем нужное

VPN plugin failed: 1


С такими параметрами подключение к pptp заработает. Игнорировать авто получение маршрутов и Использовать это соединение только для ресурсов в этой сети дает возможность не использовать шлюз VPN, но тогда придется прописывать маршруты к машинам находящимся внутри сети:
к примеру мы хотим подключится к машине 192.168.10.10 - В поле адрес пишем 192.168.10.10, в поле маска пишем маску нашей сети, которую раздал нам впн (ifconfig в помощь) к примеру 255.255.255.255, шлюзом будет выступать ip который нам выдал vpn, к примеру 192.168.11.11, ну и с метрикой все понятно).

FtpUp автоматизируем ежедневное обновление файлов на FTP


FtpUp:
Консольное приложение, которое позволит вам автоматизировать ежедневное обновление файлов на сайте, на фтп и т.д. 
В директории установки есть файл Options.ini, в этот файл вписываем параметры подключения по ftp, прописываем путь к файлам, путь к каталогу фтп, путь к .bat файлу (bat файл запускается перед загрузкой файла на фтп). Пример bat файла устанавливается в домашний каталог, называется Apt.bat
Использую эту программу для ежедневного обновления прайсов на сайте. Алгоритм в моем случае следующий: 1) Запускается bat файл, который создает архивы, в моем случае 2 (прайс опт, прайс розница) 2) Созданные архивы загружаются в нужную директорию по ftp 3) Созданные архивы удаляются (в Options.ini удаление можно отключить)

Журналы системных ошибок Ubuntu


Введение
Наконец сегодня вырвал из работы какое-то время, чтобы посвятить его очень полезной информации. Речь пойдет о системных логах-logs Ubuntu (журналах). Так как читкой логов занимаются в основном системные администраторы, то я эту статью размещаю в разделе "Администрирование Ubuntu"
Что же такое Log files???
Файл регистрациипротоколжурнал или лог (англ. log) — файл с записями о событиях в хронологическом порядке.
Лог-файлы сервера — специальные файлы, в которых протоколируются все действия пользователя на сервере. В лог-файлы сервера попадает информация, откуда пришел тот либо иной посетитель, когда и сколько времени он провел на сайте, что там смотрел и скачивал, какой у него браузер и какой IP-адрес у его компьютера. Каждая запись в лог-файле соответствует определенному хиту, так как сервер может фиксировать именно запрос к одному из элементов сайта. Проанализировав лог-файлы, можно получить сводные цифры активности пользователей, изучить закономерности поведения групп пользователей и оценить эффективность рекламной кампании.
Ведение протокола , или протоколирование, — хронологическая запись c различной (настраиваемой) степенью детализации сведений о происходящих в системе событиях (ошибки, предупреждения, сообщения), обычно в файл.
Исследование содержимого файла регистрации ошибок после возникновения неполадок часто позволяет понять их причины.
Лог файлы различных приложений
Тут собраны пусть не все, но основные Log Files. Все журналы находятся в каталоге/var/log:
  • /арасhе2/ — журналы Web-сервера Apache2;
  • /cups/ — журналы системы печати;
  • /gdm/ — журналы менеджера дисплея;
  • /installer/ — журналы программы установки;
  • /news/ — журналы NNTP-сервера и NNTP-клиентов;
  • /proftpd/ — журналы FTP-сервера;
  • auth.log — журнал аутентификации (кто и когда входил в систему);
  • daemons.log — журнал для разных демонов (служб);
  • dmesg — загрузочные сообщения ядра;
  • dpkg.log — журнал программы dpkg;
  • kem.log — журнал сообщений ядра;
  • mail* — журналы почтовой службы;
  • messages — различные сообщения ядра (и в некоторых случаях — обычных программ);
  • secure — журнал службы безопасности;
  • syslog — журнал демона syslog;
  • Xorg.O.log — журнал системы XFree86;
  • user.log — различные сообщения программ пользовательского уровня.
Протоколирование сообщений системы и программ выполняется двумя демонами —klogd и syslogd. Первый протоколирует сообщения ядра, а второй — все остальные сообщения, поэтому никогда не отключайте эти демоны. Файл dmesg создается самим ядром при начальной загрузке системы.
Имена файлов журналов могут немного отличаться от приведенных выше, поскольку имена журналов зависят от настроек системы, в том числе и от настроек syslogd. К тому же у вас могут быть дополнительные файлы протоколов или даже каталоги, содержащие файлы протоколов, — повторюсь, все зависит от настроек системы. Чтобы узнать, какие файлы протоколов у вас являются основными, откройте файл конфигурации syslogd —/etc/syslog.conf. Прочитав его, вы узнаете, какие файлы протоколирования есть в вашей системе и для чего они используются.
Но в файле конфигурации /etc/syslogd.conf перечислены далеко не все файлы протоколов. Многие серверы ведут свои журналы, имена файлов которых вы можете узнать в файле конфигурации того или иного сервера.
В каком же журнале искать ошибку? Тут нужно исходить из принципа взаимоисключения: если у вас не работает Web-сервер Apache, то искать причину нужно в каталоге/var/log/apache2/, но никак не в файле /var/log/user.log.
Сообщения различных программ пользовательского уровня, т. е. обычных программ, возможно, запущенных с привилегиями root, протоколируются в файл /var/log/user.log.

взято с http://talk-it.com.ua/

Ubuntu vs CentOS.


Как человек постоянно работающий в Ubuntu и преподающий CentOS, я уже успел сформулировать для себя принципиальную разницу между этими двумя системами применительно к серверным задачам, и решил поделиться своими наблюдениями с вами.


GUI or not GUI.
Ububtu Server не содержит никаких GUI (Graphical User Interface - Графический интерфейс пользователя) в комплекте. Совершенно никаких! Все устанавливается, настраивается и администрируется через консоль. Я считаю такой подход более правильным, ведь по большому счету для работы Linux графика в 90% случаев не нужна, и следовательно нет смысла засирать дисковое пространство, оперативную память и нагружать процессор всяким ненужным. Если потребуется, то установить графику в ubuntu можно одной командой.
CentOS же ставить без Server GUI будет моветоном, хотя такая возможность есть, по факту я не встречал CentOS серверов без традиционного Gnome. В CentOS есть прекрасные графические утилиты, которые позволяют настраивать большинство сервисов, особенно запомнилась конфигурялка DNS сервера и настройка авторизации. Всё просто, красиво, лаконично. Стоить сказать что никто не отменял initlevel 3, тоесть загрузка без X-ов, но приличное количество места на диске будет занято все равно.
Подводя итог, по умолчанию Ubuntu - это тру юникс вей, с голой консолью, а CentOS - это тру ентерпрайз вэй, с красивыми и функциональными GUI. Что из этого лучше? То что вам проще! Лично мне нравится консоль + webmin, связка прекрасно работающая везде. Итак, Ubuntu Server после установки занимает около 1.5 Gb, CentOS Server GUI около 4.5 Gb


Интеграция.
Первое что подкупает в RedHat based дистрибутивах это удобство интеграции в Microsoft Network. Настроить авторизацию пользователей в CentOS из Microsoft AD - задача посильная даже для макаки. Для Ubuntu так же есть интересные статьи на эту тему, и даже какие то утилиты типа likewise-open, но все это ни в какое сравнение не идет с CentOS. Браво RedHat!

Джентельменский набор.
Установив первый раз CentOS и увидев его объем (4.5 Gb) я был немного в ужасе, а перезагрузив один раз сервер ужас был ещё больше. В комплекте CentOS Server идет буквально все подряд. У вас будет MySQL, Apache, PHP, Perl, Sendmail, BIND, DHCP, FTP и ещё десяток сервисов уже установленных в систему из коробки. Такой букет очень удивляет, особенно когда в планах поднять только файловую помойку на Samba (которая тоже идет в комплекте). Но больше всего удивляет что половина этих сервисов уже как то работают, и поднимаются при загрузке системы. Тоесть впереди неизбежная чистка загружаемых сервисов, что через GUI делать очень просто, но только не покидает вопрос "а нафига"?
Ubuntu является образцом лаконичности. Хотите сервисы - ставьте! Система практически голая, и все что понадобиться, будет устанавливаться вручную. В коробке есть с дюжину пакетов типичных сервисов, но их установка будет произведена только с вашего согласия.

Организация системы.
Этого момента я больше всего боялся берясь за CentOS после Ubuntu, и оказалось зря. Давным давно в книге про Linux я читал обзор основных дистрибутивов среди которых были Debian, SuSE и RedHat, и организация скриптов в debian была названа просто "бардаком". Ubuntu как приемник Debian унаследовал от своего родителя эту организацию, и я долгое время считал что привык к этому "бардаку", пока не обнаружил что CentOS организован практически так же. Разница лишь в названиях некоторых сервисов и каталогов. Например apache2 в ubuntu называется apache2 но httpd в CentOS, так же понятное bind в ubuntu превратилось в named на CentOS... Вообщем то никаких более менее существенных или радикальных различий в дистрибутивах нет. Это не Slackware с его BSD системой инициализации. Все на своем привычном месте.
Хотя есть некоторые моменты которые нельзя не заметить. Например тот же apache2 в ubuntu как будто специально приготовлен под развертывание крупного хостинга с уже организованной системой папок типа sites-aviable и sites-enabled, и аккуратно вынесенным файлом apache.conf.local для добавления пользовательских настроек. В CentOS все проще, один файл httpd.conf, и симлинки на PID файл и логи. Сделать организацию в духе ubuntu не составит труда, но по умолчанию все порсто, лаконично, и для того что бы разместить один корпоративный сайт не придется разбираться со структурой директорий в /etc/apache2, и понимать какая из частей файла apache.conf за что отвечает.
Подытоживающая можно сказать что существует некоторый парадокс, CentOS ориентируемый на GUI проще для управления из консоли, и наоборот Ubuntu конфигурируемая из консоли имеет некоторую тенденцию к усложнению.

Безопасность.
Ubuntu использует AppArmor, а CentOS SELinux. Это две прекрасные системы мандатного доступа (что н
е разрешено - то запрещено) и свои функции они выполняют на все 100%, поэтому в плане безопасности, если не человеческий фактор, то системы полностью надежны из коробки. Правда у CentOS есть root и у него есть пароль, в ubuntu по традиции все делается безопаснее через sudo. Что лучше AppArmor или SELinux - дискуссия не входящая в мои планы.

yum vs apt или deb vs rpm
На самом деле по большому счету тут не о чем говорить. За годы усовершенствований обе системы управления пакетами равно как и форматы пакетов практически сравнялись по функционалу, возможностям и популярности. Редко встретишь готовые deb пакеты без их аналогов в формате rpm. Человеку имевшему дело с apt не составит труда работать с yum и наоборот. Но есть оно серьезное НО. Репозитории.
Обе системы поддерживают сторонние репозитории, тоесть можно автоматически ставить и обновлять пакеты не входящие в стандартный комплект. Только актуально ли это?
Для Ubuntu, чей репозиторий самый большой из всех, это врядли актуально. Все что нужно вы легко найдете там. Единственное зачем это может понадобиться - более свежие версии пакетов, но насколько это стабильно и безопасно применительно к серверу? А значит скорее всего не актуально, хотя launchpad очень крутой проект как раз в плане сторонних репозиториев.
Для CentOS это более актуально, потому что собственный репозиторий крайне мал. Но никакого аналога launchpad я для CentOS не нашел, а значит остается надеяться что репозиторий будет на сайте разработчиков (очень низкий процент) либо какой то энтузиаст собирает пакет сам, но большая задача найти этого энтузиаста, да и опять же какое доверие к этим пакетам применительно к серверу? Скорее всего собирать придется руками.
Тоесть в comunity support, как и следовало ожидать, ubuntu даст фору кому угодно. Ещё бы, самый популярный дистрибутив.
Однако особо стоит отметить один маленький в целом но большой применительно к России, факт. PostgreSQL от 1С, необходимый для запуска сервера 1С под Linux, имеет пакеты только rpm и только для установки на CentOS, RedHat, Fedora и если не ошибаюсь Alt. На ubuntu этот пакет конечно тоже натягивается, но не так легко и красиво как на RedHat based.

Перспективность в плане обучения.
Если говорить об образовании, то CentOS все же, пока что, более перспективен. Так как он полностью копирует RedHat Enterprise Linux то и овладев им, гораздо проще проходить различные сертификации от RedHat. Так же знаменитый LPIC так же основан на RedHat, а значит изучая CentOS проще будет пройти сертификацию LPIC. Понятно что данный факт имеет очень посредственное отношение к работе сервера и поднятии сервисов, но тем не менее обучая ребят, мы этот факт берем в расчет.



Обнуление счетчика id

alter table device  alter column id counter(1,1)


device - название таблицы
id - ключевое поле id
(1,1) - 1 цифра с какой цифры начинаем считать, 2 цифра сколько к первой цифре прибавлять

squid.conf

cache_mem - сколько памяти под кэш потратит (реально в 2.5 раза больше зажрёт. Любит он оперативку. У меня в точно такой конфигурации занимает 297 мегов памяти, примерно через день - когда наберёт объектов в память)
maximum_object_size - максимальный размер объекта сохраняемый на диск (частенько неслушается и сохраняет обекты раза в 2-3 большие)
maximum_object_size_in_memory - максимальный размер объекта хранимого в оперативке
cache_dir - директория для кэша. Должна существовать и юзер от которого работает сквид должен иметь право писать в неё. Там же - ufs - тип файловой системы на которой расположена папка кэша, 2048 - максимальный размер кэша, 64 - число директорий первого уровня
256 - число директорий второго уровня (на директориях экономить не советую, сам столкнулся - кончились папки, но лимит по размеру кэша ещё не был достигнут, инет в итоге работает, но жутко тормозит. Как на модеме хреновеньком.... На 10-ти мегабитной-то линии....)
cache_access_log - местоположение файла логов доступа пользователей к инету - кто, куда, сколько.
cache_log - лог собственно сквида - результаты запусков-остановок, результаты работы с кэшем.
cache_store_log - лог что сохранено в кэше на диске
cache_mgr - е-майл администратора, выводится при ошибках или если доступ к странице запрещён.
visible_hostname - видимое снаружи имя хоста
tcp_outgoing_address - внешний адрес сервера
redirect_program - программа редиректор (занимается анализом запрашиваемых URL и может производить с ними какие-то действия, у меня раньше, таким макаром был прикручен антивирус на проверку входящего http-траффика, а щас висит скрипт срезающий порнуху, от антивиря пришлось отказаться - примерно 30-40% лишнего траффика было, т.к. сайты нынче в основном динамические...)
redirect_children - число процессов программы-редиректора
Затем идут ACL-ы, разрешающие или запрещающие пользование http и поддержка прозрачного проксирования. ACL denied_sites закомментирован, можно пользоваться им самим, но я предпочитаю натравить на него внешнюю программу-редиректор, тогда можно будет вносить в него не сайты целиком, а ключевые слова по которым будет резаться URL - типа sex, deffki, porewo.... Если в запросе будет такое слово (неважно, в середине пути, в имени сервера, или названии файла) то не такой адрес пользователя не пустят. Можно таким макаром зарезать всю графику, например, написать jpg, jpeg, png, gif и всё - графики больше нет :) Можно резать флэши, файлы с нежелательными расширениями, да что угодно....
Учтите, строки типа acl allowed_sites dstdomain "/usr/local/my_doc_smb/squid/allowed_sites.conf" - это одна строка, просто у меня в листинге конфига не влезло и я её так перенёс.
coredump_dir - директория куда будет писаться дамп программы в случае критической ошибки и последующего "выпадания в корку"
pid_filename - имя файла где хранится идентификатор запущенного squid`a

Возвращает пользователя под которым выполнен заход в систему Delphi


Возвращает пользователя под которым выполнен заход в систему

function GetCurrentUserName : string;constcnMaxUserNameLen = 254;varsUserName : string;dwUserNameLen : DWord;begindwUserNameLen := cnMaxUserNameLen-1;SetLength( sUserName, cnMaxUserNameLen );GetUserName(PChar( sUserName ),dwUserNameLen );SetLength( sUserName, dwUserNameLen );Result := sUserName;end;

Nagios; Gammu: уведомление через SMS

Всвязи с увеличением количества серверов возникла необходимость в их мониторинге с возможностью оповещения при возникновении проблем. Выбор пал на Nagios, так как пару лет назад, работая в компании телеком-оператора работал с ним.
Одним из условий была возможность оповещения посредством SMS сообщений.
Итак, что имеем и как все это заставить работать вместе:
— Linux (Debian 5) сервер с установленным Nagios (процесс первоначальной установки и настройки самого Nagios не буду описывать в данной статье)
— Мобильный телефон (в данном случае Nokia 3110), подключаемый посредством USB кабеля
— Желание все это дело заставить работать вместе :)

Для начала устанавливаем Nagios и настраиваем для мониторинга необходимых хостов.

Далее настраиваем систему для работы с мобильным телефоном. Этот шаг опишу так, как реализовал я, так как есть много способов как это сделать :)
Для начала установил программу gammu
apt-get install gammu
Следующий шаг — настройка gammu для работы с мобильным телефоном. Для этого можно воспользоваться утилитой
gammu-config.
После настройки gammu в домашней директории должен появиться файл .gammurc примерно следующего содержания:
~# cat ~/.gammurc
[gammu]
port=/dev/ttyACM0
connection=at115200
name=Nokia 3110c
model=nauto

Для того чтобы проверить работоспособность воспользуемся следующими командами:
~# echo «test msg» | gammu sendsms TEXT +номер_вашего_телефона
таким образом мы отсылаем SMS с текстом «test msg» на телефон "+номер_вашего_телефона" — номер телефона лучше указать в международном формате.

если SMS пришла — тогда читаем дальше, в противном случае возвращаемся к настройке gammu (думаю погуглив на эту тему, можно найти кучу документации).

Следующий шаг — это настройка Nagios для посылки SMS.

Смотрим файл /etc/passwd для того, чтобы узнать где находится домашняя директория для пользователя nagios (в моем случае: /var/run/nagios3). Копируем туда файл .gammurc и меняем права доступа для пользователя nagios:
~# chown nagios: ./.gammurc
Далее мне пришлось изменить права доступа на файл /usr/bin/gammu — присвоить UID при выполнении, таким образом они стали:
/usr/bin# ls -la ./gammu
-rwsr-xr-x 1 root root 360088 Май 11 2008 ./gammu

Далее настраиваем Nagios. Для начала добавляем новые команды. Это делается в файле настроек commands.cfg в конфигурационной директории Nagios (для меня /etc/nagios3). Добавляем следующие строки:
# 'notify-host-by-sms' command definition
define command{
command_name notify-host-by-sms
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAdd
ress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/gammu sendsms TEXT $CONTACTADDRESS1$
}

# 'notify-service-by-sms' command definition
define command{
command_name notify-service-by-sms
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIA
S$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/gammu sendsms TEXT
$CONTACTADDRESS1$
}

Потом переходим к настройке файла с контактами (в моем случае contacts_nagios2.cfg в директории /etc/nagios3/conf.d).
Нам необходимо добавить параметр address1, в котором указываем номер мобильного в международном формате, а также добавить команды для оповещения при смене статуса сервисов или хостов.
Вот как было у меня до:
define contact{
contact_name vano
alias Vano
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email vano@gde-to.tam
}

И как стало после:
define contact{
contact_name vano
alias Vano
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-service-by-email,notify-service-by-sms
host_notification_commands notify-host-by-email,notify-host-by-sms
email vano@gde-to.tam
address1 +700000000000
}

Далее перезапускаем Nagios и начинаем наслаждаться приходящими сообщениями :)
Хотя лучше, когда их меньше :)

PS: просьба ногами сильно не пинать, так как это мой первый пост :) если есть вопросы — задавайте, постараюсь ответить :)

UPD: заметил еще один нюанс, по крайней мере у меня. Так как для пользователя nagios домашняя директория указана в /var/run/nagio3, то после перезагрузки оттуда исчезает файл .gammurc. Решил просто, в /etc/rc.local прописал, чтобы копировал этот файл в директорию /var/run/nagios3 и менял владельца на nagios, после чего — перезапуск сервиса:

/bin/cp /root/.gammurc /var/run/nagios3
/bin/chown -R nagios: /var/run/nagios3
/etc/init.d/nagios3 restart


взято с http://habrahabr.ru/post/66551/

Добавлю от себя: когда я настраивал, у меня проблемы пропадания файла не было, но была проблем прав с этим файлом, и после рестарта сервера приходится перезагружать nagios, что можно решить исполняемым файлом. 

Сохранение записи DBGrid Delphi


Сохранение записи DBGrid

Сохранение записи

Последнее, на что я советую вам обратить внимание - закрытие формы. Пользователь может добавить запись, все вписать и, довольный собой, закрыть форму. Поскольку на другую запись курсор он не переключал, DBGrid не знает, что можно уже сохранять изменения в БД, и запись не добавиться. Мелочь, но очень неприятно и намекает на криворукость программиста. Чтобы сохранить нашу криворукость в тайне, нужно на обработчик закрытия формы добавить такие строки:

if DBGrid1.EditorMode or DBGrid1.DataSource.DataSet.Modified then
DBGrid1.DataSource.DataSet.Post;

Активация PVR (запись теле-программ на USB) - видео SAMSUNG


Активация PVR (запись теле-программ на USB) - видео

Будьте очень осторожны при нажатии кнопок на пульте дистанционного управления во время навигации в сервисном меню.
Перемещение по меню списка - нажимаем только стрелку вниз.Чтобы изменить вариант - стрелка вправо.
ПРИМЕЧАНИЕ: Все пользовательские настройки будут сброшены после этого, так что запишите все настройки на бумаге.

Вставьте в гнездо USB HDD / Flash отформатированный в FAT32. Этот шаг не является необходимым и может быть создан без Flashdisk USB.
Включите телевизор, нажать на пульте дистанционного управления последовательно кнопки MUTE-1-1-9-ENTER, на пункте HOTEL MODE стрелкой вправо меняем в положение ON , а затем выключить телевизор.
При выключенном ТВ нажать на пульте дистанционного управления последовательно кнопки INFO-MENU-MUTE-POWER (Если это не работает, попробуйте MUTE-1-8-2-POWER). Это позволит включить телевизор и показать сервис-меню.
В сервисном меню опускаемся вниз до пункта CONTROL, затем стрелка вправо, опускаемся до пункта HOTEL OPTION, снова стрелка вправо, появляется новое меню, двигаться вниз до пункта Clone TV to USB, снова стрелка вправо - ТВ запишет настройки на USB (если флешка не вставлена, напишет Failed - это не важно). Нажимаем OK. Затем RETURN для возврата. Поднимаемся вверх до пункта Sub Option и стрелка вправо. Появится новое большое меню.
В этом меню двигаться стрелкой вниз (НЕ стрелкой вправо) до пункта PVR Support и стрелкой вправо включаем - ON. Нажимаем кнопку RETURN для выхода и еще раз RETURN для возврата в предыдущее меню.
Опускаемся вниз до пункта HOTEL OPTION, затем стрелка вправо, на пункте HOTEL MODE стрелкой вправо выключаем - OFF. Выключаем ТВ.
Включаем телевизор - PVR уже включен. Нажимаем во время просмотра ТВ кнопку ЗАПИСЬ, телевизор попросит отформатировать диск USB (один раз). Если это будет сделано успешно функция PVR теперь будет работать и начнется запись на USB.

Пробовал на своем телике самсунг 32 5000, все получается по инструкции, даже флешка форматируется, но запись не идет(

Мои примеры триггеров

DELIMITER $$CREATE TRIGGER insert_date before INSERT ON vizits FOR EACH ROW begin set new.weeks = weekofyear(new.date); end; DELIMITER ;
----------------------------------------------
DELIMITER $$CREATE TRIGGER lastviz_doctor AFTER INSERT ON vizits FOR EACH ROWBEGINUpdate doctor set lastviz_date = New.date where id=NEW.doctor_id;END;DELIMITER ;
----------------------------------------------

DELIMITER $$CREATE TRIGGER users_autintif AFTER UPDATE ON users FOR EACH ROWBEGININSERT INTO MONITORINGSELECT b.id, a.user, a.HOST, a.DB, a.TIME, a.STATE, a.INFO, b.login, b.pass, b.empl_id, b.cur_id, NOW()FROM information_schema.PROCESSLIST a, users bWHERE b.cur_id=a.ID;END;DELIMITER ; 

Отличная штука эти триггеры, полезная  

Delphi импорт из xls в таблицу БД



unit _t_mn_unt_;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, ExtCtrls, comobj;

type
  TForm1 = class(TForm)
    _con_: TADOConnection;
    _clt_: TADODataSet;
    _buy_: TADODataSet;
    _ds_clt_: TDataSource;
    _ds_buy_: TDataSource;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    _opg_: TOpenDialog;
    Panel1: TPanel;
    Button1: TButton;
    _start_: TEdit;
    Label1: TLabel;
    _wrk_: TADOQuery;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


const
  xlCellTypeLastCell = $0000000B;
  appname = 'Read excel file';
  appbase = '_db_.mdb';
  Provider   = 'Provider=Microsoft.Jet.OLEDB.4.0;';
  PersistSI  = 'Persist Security Info=False';

type TClientRow = record
  _fio, _address, _birthplace : string;
  _birthdate : TDateTime;
end;

type TBuyRow = record
  _cl_id : integer;
  _product : string;
  _buydate : TDateTime;
end;

var
  Form1: TForm1;
  XLApp, Sheet, Range: OLEVariant;
  _tmp : TClientRow;
  _buy : TBuyRow;

implementation

{$R *.dfm}

function _get_sql(_type : integer) : string;
begin
  case _type of
// При работа с ADO у меня выдавало ошибку синтаксиса, пришлось 
// fio,address,birthdate,birthplace переделать в `fio`,`address`,`birthdate`,`birthplace` 
    0: Result :=  'INSERT INTO client(fio,address,birthdate,birthplace) VALUES' +
                  '(:fio,:address,:birthdate,:birthplace)';
    1: Result :=  'INSERT INTO buys(id_cl,predmet,buydate) VALUES' +
                  '(:id_cl,:predmet,:buydate)';
  end;
end;

function _ins_client_data( _val_ : TClientRow) : integer;
begin
  with _val_, Form1._wrk_ do
  begin
    SQL.Text := _get_sql(0);
    Parameters.ParamByName('fio').Value := _fio;
    Parameters.ParamByName('address').Value := _address;
    Parameters.ParamByName('birthdate').Value := _birthdate;
    Parameters.ParamByName('birthplace').Value := _birthplace;
    ExecSQL;
    SQL.Text := 'SELECT MAX(ID) AS MID FROM client';
    Open;
    Result := FieldByName('MID').AsInteger;
    Close;
  end;
end;

procedure _refresh_ds(_ds : TDataSet);
begin
  _ds.Close;
  _ds.Open;
end;

procedure _ins_buy_data(_val_ : TBuyRow);
begin
  with _val_, Form1._wrk_ do
  begin
    SQL.Text := _get_sql(1);
    Parameters.ParamByName('id_cl').Value := _cl_id;
    Parameters.ParamByName('predmet').Value := _product;
    Parameters.ParamByName('buydate').Value := _buydate;
    ExecSQL;
  end;
end;

function _get_value(x, y : integer) : string;
begin
  Result := VarToStr(XLApp.Cells.Item[x,y].Value);
end;

procedure _read_file(filename : string; start : integer);
var i, j, _cl : integer;
begin
  try
    XLApp := CreateOleObject('Excel.Application');
    XLApp.Visible := False;
    XLApp.Workbooks.Open(filename);
    Sheet := XLApp.Workbooks[ExtractFileName(filename)].WorkSheets[1];
    Range := Sheet.UsedRange;
    for i := start to Range.Rows.Count do
    begin
      try _tmp._birthdate :=  StrToDate(_get_value(i, 3)) except end;
      _tmp._fio := _get_value(i, 1);
      _tmp._address := _get_value(i, 2);
      _tmp._birthplace := _get_value(i, 4);
      _cl := _ins_client_data(_tmp);
      j := 5;
      while j < Range.Columns.Count do
      begin
        _buy._cl_id := _cl;
        _buy._product := _get_value(i, j);
        try _buy._buydate :=  StrToDate(_get_value(i, j + 1)) except end;
        _ins_buy_data(_buy);
        j := j + 2;
      end;
    end;
  finally
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  _opg_.Execute();
  _read_file(_opg_.FileName, StrToInt(_start_.Text));
  _refresh_ds(_clt_);
  _refresh_ds(_buy_);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := appname;
  _con_.Connected := false;
  _con_.ConnectionString := Provider + 'Data Source=' + appbase + ';' + PersistSI;
  _con_.Connected := true;
  _clt_.Open;
  _buy_.Open;
end;

end.

P.S. Содрано, но проверенно работает + переделать под свои нужды не сложно, что я и сделал