20 дек. 2012 г.

Python, извлечение параметров из Post или Get запросов.

Извлекать параметры, введенные в форму (get или post), довольно легко. В этом поможет следующая конструкция:


from mod_python import util

def handler(req):
   form_data = util.FieldStorage(req, keep_blank_values=1)
   myparameter = form_data.getfirst("parameter")

В myparameter теперь находится значение того, что было передано с именем "parameter". Например, того, что было в ведено в "EditBox1".

19 дек. 2012 г.

Настройка сетевого интерфейса в RHEL6 (RedHat, CentOS, Oracle Linux)

Решил вот сделать заметку о настройке сетевых интерфейсов RHEL (RedHat, CentOS, Oracle Linux, Fedora).

Вначале редактируем файлик настройки интерфейса, например eth1 (<> - означает специфические значения):

nano /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE="eth1"
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.2
PREFIX=24
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"
UUID=<>
ONBOOT=yes
HWADDR=<>
GATEWAY=192.168.1.1
DNS1=192.168.1.1
DNS2=8.8.8.8
VLAN=yes
MASTERr=bond0
SLAVE=yes

Строки говорят сами за себя. HWADDR и UUID проще не указывать, чтобы система сама их розчехлила, а если и указывать, то точно для вашего адаптера.

  • BOOTPROTO=none - при задании статического адреса. Для получения динамического адреса, здесь необходимо указать =dhcp
  • VLAN=yes - если мы настраиваем интерфейс для работы с тегами VLAN.
  • MASTERr=bond0 - если мы настраиваем интерфейс как часть бонда
  • SLAVE=yes - если мы настраиваем интерфейс как часть бонда
  • NETMASK=255.255.255.0 - указываем только ОДИН из параеметров - или NETMASK или PREFIX
Далее редактируем:

nano /etc/sysconfig/network

18 дек. 2012 г.

Подсветка синтаксиса в Blogger

На эту тему довольно много статей есть. При начальной настройке у меня вылазили различные глюки, потому я решил поделиться окончательным решением, которое у меня сейчас работает.

Подсветка синтаксиса использует Java-script библиотеку SyntaxHighlighter

Итак, открываем панель блоггера, переходим в Шаблон › Изменить HTML и находим там строчку такого вида (у вас может быть другая, главное - чтобы были теги <title>):


<title><data:blog.pageTitle/></title>

После этой строчки дописываем следующее:


<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"></link>
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css"></link>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript">
</script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript">
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/>

<script type='text/javascript'>
  SyntaxHighlighter.config.bloggerMode = false;
  SyntaxHighlighter.all();
</script>

Также, чтобы в браузере Google Chrome не было глюков с нумерацией строк, нужно найти строчку:

Сеть 1Gb (1000BaseT) на контроллерах RTL8111/8168B встроенных в материнскую плату

Недавно столкнулся с тем, что драйвер для  интегрированного в материнскую плату сетевого адаптера RealTek RTL8111/8168B/8169, идущий вместе с ОС Debian / Oracle Linux 6 ни в какую не хочет работать в режиме 1Gb.
Проблема эта решается установкой свежей версии драйвера.
В Debian 7 я эту проблему решил установкой драйвера из исходников:

1.  Переходим на сайт разработчика Realtek и качаем нужную нам версию (LINUX driver for kernel 3.x and 2.6.x and 2.4.x) с миррора поближе к нам. Ссылки там сделаны в виде жабаскриптов, потому из консоли мне скачать не удалось, да и не беда это. Скачиваем, затем по scp или ещё как копируем на сервер файлик r8168-8.034.00.tar.bz.

2. Распаковываем и переходим в директорию:

tar -xjvf r8168-8.034.00.tar.bz
cd r8168-8.034.00


3. Устанавливаем необходимые пакеты, если их еще нет:

aptitude install build-essential linux-headers-$(uname -r)

14 дек. 2012 г.

SQLAlchemy в Python

В python для работы с MySQL есть библиотечка SQLAlchemy.
У неё много всяких фишек-плюшек, но я в подавляющем большинстве случаев использую конструкции такого типа:


from sqlalchemy import create_engine
b_connection_string = 'mysql://user:password@localhost/db_name'
user = "admin"
db =  create_engine(db_connection_string)
for row in db.execute("select Permissions from users where Name = \"%s\""%(user)):
    result.append(str(row))

Где в 1й строчке мы импортируем функцию, затем создаем соединение с БД, а затем выполняем какой-то запрос. В итоге мы получим такую конструкцию (в данном примере):

["('On, Off, Bla-bla',)"]

Теперь можно облагородить результат, добавив , например:


result = result[0].replace("('","")
result = result.replace("',)","")
result = result.replace(", ", ",")

Получим в result:  'On, Off, Bla-bla'

Как с помощью iptables разрешить доступ к локальному порту только для списка IP адресов

Возможно, есть способы и попроще, но я сделал так.
Защищать будем, например, Asterisk (по-умолчанию порт для протокола SIP 5060)

Создаем новую цепочку:

iptables -N asterisk-manual
iptables -I INPUT -i eth0 -p udp --dport 5060 -j asterisk-manual

Прописываем, из каких адресов можно подключаться и в конце запрещаем остальным:

iptables -A asterisk-manual -s 192.168.1.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.2.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.3.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.4.2 -j ACCEPT
iptables -A asterisk-manual -j DROP

И сохраняем правила:

iptables-save

Чтобы добавить новый адрес вначале удалим последнюю строчку (по ее номеру), а затем добавим новую и восстановим запрещающую:

iptables -L asterisk-manual -n --line-numbers
iptables -D asterisk-manual 5
iptables -A asterisk-manual -s 192.168.4.3 -j ACCEPT
iptables -A asterisk-manual -j DROP

Не забываем сохраняться:

iptables-save

Как разрешить обычному пользователю Linux выполнять команду shutdown

В некоторых дистрибутивах обычный пользователь не может из консоли выключить/перезагрузить компьютер под управлением ОС Linux. Разрешаем так:

which shutdown
chmod u+s /sbin/shutdown

Быстрое сохраниение и восстановление конфигурации alsa в Linux

Чтобы сохранить текущую конфигурацию выполняем:

alsactl store -f ./alsamixer.conf

Для восстановления конфигурации:

alsactl restore -f ./alsamixer.conf

Открытие портов в iptables в RHEL дистрибутивах (RedHat, Oracle Linux, CentOS, etc.)

nano /etc/sysconfig/iptables

Добавляем запись, например:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT


Сохраняем и рестартуем iptables:

/etc/init.d/iptables restart


Возможно Selinux будет ругаться при рестарте. Придется его отключить:

nano /etc/selinux/config 

И изменяем строчку SELINUX:

SELINUX=disabled

Добавление статического роута в RHEL дистрибутивах (RedHat, Oracle, CentOS, etc.)

Роуты нужно класть в папку /etc/sysconfig/network-scripts/ в виде текстового файлика route-X где Х - имя интерфейса. Например:

nano /etc/sysconfig/network-scripts/route-eth0

в формате

192.168.1.0/24 via 192.168.1.1

или

ADDRESS0=192.168.1.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.1.1

Если роутов нужно больше одного, то для первого формата просто записываем с новой строки, а для второго - меняем цифру:

ADDRESS1=192.168.2.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.2.1

Проверяем:

netstat -rn
route -n

Добавить не статический роут можно командой:

route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.1

4 дек. 2012 г.

Проверка балланса GSM-модема, подключенного к Asterisk и формирование лога звонков за прошедшие сутки с отправкой по e-mail на Python 3

Недавно был описанный в заголовке таск.

Т. к. я очень люблю питончик, то скрипты пишу на нём. В скрипте выполняется команда астериска (USSD-запрос), далее вытягивается содержимое ответа на ussd, вытягивается лог звонков за сутки, формируется письмо в виде html и отсылается на заданные адреса по электронной почте.

1. Импорты необходимых библиотек:


#!/usr/bin/env python3
import os, smtplib, time, subprocess, shlex, sys, csv
from email.utils import formatdate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

2. Формируем шапку письма - кому, куда, что и зачем :)


# me == my email address
# you == recipient's email address
# cc == copy's address
me = "asterisk@example.com"
сс = "recipient1@example.com"
you = "recipient2@example.com"
# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = "GSM modem balance ("+time.strftime("%m/%d/%Y",time.localtime())+")"
msg['From'] = me
msg['To'] = you+", "+cc
msg['Date'] = formatdate(localtime=True)

Отправка USSD-запроса сосстояния балланса и обработка результата. Для посылки запроса использую вызов bash команды через subprocess.call - может быть и слишком криво, но быстро и работает.

Затем идет пауза в 10 сек - необходима, чтобы пришел ответ от оператора.

26 нояб. 2012 г.

Hello world! с помощью mod_python

Написание сайта с использованием mod_python состоит из двух этапов: конфигурирование сервера (apache) и собственно написание кода.

1. Конфигурация сервера:

Вначале установим модуль, если его еще нет:

aptitude install libapache2-mod-python
a2enmod python

Подредактируем, например, на Debian файл /etc/apache2/sites-available/default :


<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py        #говорит апачу передавать обработку файлов *.py в mod_python
                PythonHandler index                     #говорит, в каком файле находится обработчик хэндлеров.
                DirectoryIndex index.py                #указывает, какой файл отображается по-умолчанию в директории
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        AddHandler mod_python .py
        PythonHandler mod_python.publisher
        PythonDebug On                                  #включает выведение ошибок в браузер - удобно пр иотладке
        DirectoryIndex index.py
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Кодинг на Python в NetBeans (7.2.1)

Я перепробовал много IDE для написания кода на питончике - начиная с обычного nano и заканчивая платными продуктами - PyCharm и WingIDE. Но в итоге выбор пал на бесплатный NetBeans, т. к. выкладывать 100 баксов за платную ИДЕ как-то не хочется... Итак, приступим (описанное здесь я тестировал на ОС Debian 7 и Oracle Linux 6.3).

1. Качаем Java SE SDK с официального сайта Oracle и устанавливаем

2. Качаем с оф. сайта последнюю стабильную версию (на момент написания статьи это была версия 7.2.1) - http://netbeans.org/downloads/ и качаем любую версию, устанавливаем. При установке может попросить указать папку с Java SDK - указываем (если мы качали .tar.gz).

3. А теперь сама "Магия" :) Запускаем наш свеженький NetBeans и переходим в меню Tools > Plugins, вкладка Settings и нажимаем Add, указываем какое-то вменяемое имя и как URL - http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz


4. Переходим на вкладку Available Plugins и в поиску набираем python. Будет 3 плугина - устанавливаем, презапускаем IDE, ждем пока она проиндексирует питоновские модули, и кодим на питоне с автодополнением и т. п. :)


12 нояб. 2012 г.

Отключения службы фаерволла в Windows Server 2008 и 2012 без потери доступа по RDP

Если просто остановить службу, то у нас отвалится RDP  и порт 3389 будет блокирован на сервере.

Чтобы этого не допустить, то надо не сразу останавливать службу, а вначале выполнить команды в консоли с правами администратора:

netsh firewall set portopening protocol=TCP port=3389 mode=ENABLE
netsh advfirewall set allprofiles state off

Иначе прийдется бежать за монитором :)

Как получить в Python текущее время в наносекундах

Код такой:

>>> import time 
>>> print "%.9f" % time.time()
1352732708.160078049

7 нояб. 2012 г.

SSH tunneling

Пробросить порт с помощью ssh довольно просто:

ssh -R localip:localport:remoteip:remoteport localuser@localip

пример: 192.168.1.1:8080:192.168.2.1:80 root@192.168.1.1

Т. е. порт на той машине, где запущена эта команда будет форвардиться на порт на удаленной машине. Например, локальная машина имееть vpn-подключение, недоступной другим машинам и они могут через нее коннектиться к какомуто серверу на другом конце vpn.
В примере все запросы на порт 8080 машины 192.168.1.1 будут идти на порт 80 машины 192.168.2.1 и, соответственно, ответы будут приходить обратно. В общем, примерно то же, что и port forwarding в роутере.

12 окт. 2012 г.

Установка Skype 4 в Oracle Linux 6 (Redhat 6 / CentOS 6)

Скайпу нужны х86 библиотеки. Установим его зависимости вначале:

yum install alsa-lib.i686 fontconfig.i686 freetype.i686 glib2.i686 libSM.i686 libXScrnSaver.i686 libXi.i686 libXrandr.i686 libXrender.i686 libXv.i686 libstdc++.i686 pulseaudio-libs.i686 qt.i686 qt-x11.i686 zlib.i686

Теперь качаем скайп static билд и распаковываем:

wget --trust-server-names http://www.skype.com/go/getskype-linux-beta-static
mkdir /opt/skype 

tar xvf skype_static* -C /opt/skype --strip-components=1

Сделаем ссылку на библиотеку, которую скайп "не понимает", но она есть - под другим именем.

cd /usr/lib 
ln -s libtiff.so.3 /usr/lib/libtiff.so.4

Сделаем ссылки в менюшки, чтобы всё было "по фен-шую"

ln -s /opt/skype/skype.desktop /usr/share/applications/skype.desktop 
ln -s /opt/skype/icons/SkypeBlue_48x48.png /usr/share/icons/skype.png 
ln -s /opt/skype/icons/SkypeBlue_48x48.png /usr/share/pixmaps/skype.png 

Сдедаем фейковый бинарник для запуска статика:

touch /usr/bin/skype 
chmod 755 /usr/bin/skype

В нем пропишем:

#!/bin/sh 
export SKYPE_HOME="/opt/skype" 
 $SKYPE_HOME/skype --resources=$SKYPE_HOME $*

Всё. Запускаем скайп просто из командной строки: skype или из менюшек.
Если будут проблемы со звуком - читаем ниже про настройку alsamixer.

Изменить временную зону (timezone) в Linux без перезагрузки

Файлы временных зон находятся в папке и подпапках /usr/share/zoneinfo/
Делаем ссылку /etc/localtime на нужную нам зону, перезаписывая существеющую:

ln -sf /usr/share/zoneinfo/Asia/Calcutta /etc/localtime

Проверяем:

date

Поменять дату и время легко командой:

date -s "18 OCT 20113 18:00:00"
Только дату:

date +%Y%m%d -s "20131018"

Только время:

date +%T -s "10:13:13"

10 окт. 2012 г.

Nut. Изменить уровень заряда UPS, при котором начинается shutdown event

Допустим, нам необходимо, чтобы ПК начинал выключаться при 40% заряда ИБП, а не при 10% - как задано по-умолчанию.

Для этого нужно в /etc/ups/upsd.users добавить пользователя:

[some_name]

password = some_password
allowfrom = localhost
actions = set

А затем выполнить команду (например, для UPS определенного как apc_backups@localhost) :

upsrw -s battery.charge.low=40 -u some_name -p some_password apc_backups@localhost

Так мы меняем параметр с 10% на 40%. У других UPS этот параметр может называться по-другому, а также он может сбрасываться на дефолтное значение при перезагрузке ПК.

9 окт. 2012 г.

Ошибка при доставке почты в dovecot: ... status=deferred (temporary failure)

Если на почтовый сервер postfix + dovecot не приходит почта и мы видим ошибку в mail.log примерно такого вида:

postfix/pipe[26239]: 7390F1203B3: to=<user1@domain.com>, relay=dovecot, delay=483, delays=483/0.01/0/0.02, dsn=4.3.0, status=deferred (temporary failure)

То ищем дополнительный лог довекота:

locate dovecot-deliver.log

Смотрим:

tail /home/vmail/dovecot-deliver.log

А там видим такое:

Fatal: Plugin 'sieve' not found from directory /usr/lib/dovecot/modules

Это значит, что не хватает плугина Sieve.Ставим (Debian way) и перезапускаем dovecot:

aptitude install dovecot-sieve
service dovecot restart

8 окт. 2012 г.

Доступ на ESXi сервер через ssh по ключу

Доступ по ключу удобная штука, и не заменимая при автоматизации.

Для реализации доступа по ключу создаем пару ключей, как я присал в этой статье. Затем, если мы хотим заходить на пользователя root по ключу, то выполняем команду (изменив данные на свои):

cat ~/.ssh/id_dsa.pub | ssh root@esxi.machine.com 'cat >> /etc/ssh/keys-root/authorized_keys'

Ключи в ESXi хранятся в файле /etc/ssh/keys-ИМЯ_ПОЛЬЗОВАТЕЛЯ/authorized_keys.

Тестируем (не забываем, что в папке ~/.ssh того пользователя, под которым ходим, должен быть приватный ключ с владельцем этот пользователь и правами 400):

ssh root@esxi.machine.com

Удаленное логирование сообщений роутера (например, Asus-16n)

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

На самом сетевом оборудовании логирование на удаленный сервер настраивается по-разному, но как-правило нужно просто прописать адрес лог-сервера и - возможно - порт.

Заходим на сервер, на котором предполагается хранить логи раутера, и правим /etc/rsyslog.conf
Включаем модули для сбора удаленных логов:

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

И дописываем в секцию Rules правило для записи логов роутера в отдельный файл:

###############
#### RULES ####
###############

if $hostname contains 'asus16n' then /var/log/router.log;TraditionalFormat

Теперь все сообщения от источника с именем хоста asus16n будут записываться кроме общей лого-свалки, в отдельный файл /var/log/router.log. Для другого оборудовая скорее всего будут другие ключевые слова для парсинга логов.

Поправка:

В некоторых версиях rsyslog вместо TraditionalFormat нужно писать RSYSLOG_TraditionalFileFormat

5 окт. 2012 г.

Настройка автоматического выключения при low battery от UPS с помощью nut (Network UPS Tools)

Если имеются ИБП с подключением по USB, то целесообразно настроить корректное атовыключение рабочих станций на Oracle Linux 6.3 и Debian при отсутствии питания от сети. ИБП - Mustek PowerAgent 650 с USB.

1. Подключаем все провода, не забываем USB-кабелем соединить ПК и ИБП.
2. Устанавливаем Nut:

aptitude install nut

или

yum install nut

Особые извращенцы могут, конечно же, скомпилить из исходников :)
Различие между Debian и RHEL6 дистрибутивами только в том, что конфигурационные файлы в 1м случае лежат в /etc/nut, а во 2м - в /etc/ups :)

3. Настройка драйвера. Смотрим наши юсб-устройсва командой:

lsusb

Ищем среди них что-то типа:

Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial

27 сент. 2012 г.

vSphere Client не может подключиться к ESXi

Вы вводите заведомо валидные данные, и после паузы выпрыгивает ошибка типа такой:

The server 'my.host.name' could not interpret the client's request. (The remote server returned an error: (503) Server Unavailable
Call "ServiceInstance.RetrieveContent" for object "ServiceInstance" on Server "my.host.name" failed.


При это с помощью SSH нормально можно зайти на хост. Точнее, нужно зайти и выполнить команду:

/sbin/services.sh restart

После завершения всех действий команды (когда вы опять увидите приглашение командной строки) можно будет снова зайти на ESXi гипервизор с помощью vSphere Client.

17 сент. 2012 г.

Конференции в Asterisk на ОС Debian 6 или RHEL 6 (Oracle Linux, CentOS) с использованием Meetme (dahdi)

В общем, недавно возился с этими конференциями... При попытке создания конференции появляется ошибка unable to open pseudo device .Вначале установил dahdi (раньше оно называлось Zaptel и служит как интерфейс между модемами и Asterisk, либо как заглушка для Meetme, если модемов никаких нет) из пакетов - не решило это проблему.

Нужн скомпилировать и установить модуляь ядра dahdi из исходных кодов нижеописанным способом.

Скачиваем исходники dahdi-linux-complete:

wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.6.1+2.6.1.tar.gz

Последнюю версию исходников модуля можно скачать здесь.

tar -xzvf dahdi-linux-complete-2.6.1+2.6.1.tar.gz 
cd dahdi-linux-complete-2.6.1+2.6.1/

Если у вас не установлены заголовки текущей версии ядра, устанавливаем. Для Debian:

apt-get install linux-headers-`uname -r`

Для RHEL-дистрибутивов:

yum install kernel-devel kernel-headers gcc

Для Oracle Linux с его UEK-kernel:

yum install kernel-uek-devel.x86_64 kernel-uek-headers.x86_64 gcc

Произведем компиляцию модуля ядра:

make all
make install
make configure

В более новых версий вместо последней команды надо выполнить:

make config

Далее загружаем установленный модуль:

modprobe dahdi

Теперь прописываем правила в extensions.conf для конференции:

exten => 500,1,MeetMe(500)              ;conference room 500
exten => 500,n,Hangup()

Не забыв, конечно же, прописать конференцию в meetme.conf:

conf => 500

Теперь при наборе номера 500 мы будем попадать в соответствующую конференцию.

Добавочный номер можно изменять, добавлять новые номера для конференций, ставить цифровой пароль на конференцию - это всё хорошо описано в комментариях в файле meetme.conf.

11 сент. 2012 г.

Добавить route в iPad 2

Бывает, когда заходим по VPN (встроенный в iPad клиент), без маршрутов какие-лтбо узлы сети могут быть не доступны. Чтобы прописать нужный роут делаем следующее.


Заходим в нашу любимую Cydia и находим там в стандартных репозиториях софтинку network-cmds, устанавливаем.

10 сент. 2012 г.

Авторизация в Apache c помощью MySQL (mod-auth-mysql)

MySQL авторизация - неплохой вариант, особенно для сайтов, использующих эту БД.
Порывшись в инете, разобрался, как её настроить и вот шаги, котором следует последовать :)

1. Устанавливаем необходимый софт (имеется в виду, что веб-сервер уже есть и настроен):

apt-get install libapache2-mod-auth-mysql
a2enmod auth_mysql


2. Создаем для примера БД:

mysql -u root -p
mysql> grant all on auth.* to auth_user@localhost identified by '<auth_password>';
mysql> flush privileges;
mysql> create database auth;
mysql> use auth;
mysql> CREATE TABLE `clients` (
`username` varchar(25) NOT NULL default '',
`passwd` varchar(25) NOT NULL default '',
`groups` varchar(25) NOT NULL default '',
PRIMARY KEY (`username`),
KEY `groups` (`groups`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
mysql> INSERT INTO `clients` VALUES ('<username>', '<password>', '<group>');


3. Редактируем файл виртуалхоста (или .htaccess нужной папки), например:

nano /etc/apache2/sites-available/default


<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride All

        </Directory>
        <Directory /var/www/>    
                AuthMYSQL on     #включает авторизацию по мускулю
                AuthMySQL_Authoritative on
                AuthMySQL_DB auth     #имя БД, в которой находится наша авторизация
                AuthMySQL_Host 127.0.0.1     #адрес или имя хоста с мускулем

                #AuthMySQL_Port 3306     #порт, если отличен от дефолтового
                #AuthMySQL_Socket <socket>    #сокет, если используется

                AuthMySQL_User auth_user     #пользователь БД
                AuthMySQL_Password <auth_password>     #пароль пользователя БД
                AuthMySQL_Password_Table clients     #таблица паролей
                AuthMySQL_Username_Field username     #поле, содержащее имя пользователя
                AuthMySQL_Password_Field passwd     #поле, содержащее праоль пользователя
                #AuthMySQL_Group_Table clients     #поле, содержащее принадлежность к группе
                AuthMySQL_Empty_Passwords off     #запретить пустые пароли
                Auth_MySQL_Encrypted_Passwords off    #если on - указывается, что пароли зашифрованы
                AuthMySQL_Encryption_Types Plaintext     #типа шифрования - может быть Plaintext, Crypt_DES, MySQL. Можно через пробел указывать несколько методов, которые будут использоваться по-очереди
                AuthBasicAuthoritative Off     #Отключить Basic-авторизацию - какойто костыль, без него не работает
                AuthUserFile /dev/null     #типа файл с паролями - тоже костыль
                Require valid-user     #требовать авторизацию. Тут также можно указывать имена групп (несколько - через пробелы): Require group assassins templars .Или конкретных пользователей: Require user leonardo vincent .Это удаобно, если прописывать опции в .htaccess
                AuthName "Please Auth!"     #приветствие
                AuthType Basic #костыль
                <Limit GET POST> #ограничения для запросов                Require valid-user     
                </Limit>     

                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py
                PythonHandler index
        </Directory>

Запуск Wireshark под обычным (non-root) пользователем

Всё нижесказанное валидно для Oracle Linux 6 (RedHat 6, CentOS 6) 64 бита, в других дистрибутивах команды будут немного отличаться. Wireshark установлен не из пакетов, а их исходников, как я писал здесь

1. Устанавливаем зависимости (если еще не установлены):

yum install ibcap.x86_64 libcap-devel.x86_64

2. Проверяем наличие группы wireshark и если ее нет, создаем:

cat /etc/group
groupadd wireshark

3. Добавляем пользователя, под которым нужно использовать wireshark, в эту группу:

usermod -a -G wireshark user
newgrp wireshark

Устанавливаем права команде dumpcap и добавляем ее в нашу группу:

setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/dumpcap
chgrp wireshark
/usr/local/bin/dumpcap
chmod 750 /usr/local/bin/dumpcap

4 сент. 2012 г.

Установка Wireshark в Oracle Linux из исходников

Вначале попытался установить из пакетов, получил ерроры о конфликтах в зависимостях и решил попробовтаь из сорцов:

yum install libpcap libpcap-devel.x86_64
wget http://wiresharkdownloads.riverbed.com/wireshark/src/wireshark-1.8.2.tar.bz2
tar -xjvf wireshark-1.8.2.tar.bz2
cd wireshark-1.8.2
./configure
make
make install

Запускаем:

wireshark

Восстановление загрузки Windows 7 / Vista

По тем или иным причинам в винде может похериться загрузчик. Такая последоваельность действий поможет его восстановить - и всё будет окей, если сама винда не повреждена.

Имеется в вид, что восстановление из точки не помогает.

1. Настройте параметры BIOS таким образом, чтобы первым устройством загрузки был DVD-привод (во многих биосах при загрузке можно нажать [F11] и единоразово выбрать устройство для загрузки)
2. Вставьте установочный компакт-диск с Windows 7 и загрузитесь с него до этого окна:


Установка kDevelop 4 в Oracle Linux 6

Всё нижеизложенное  проделал в Oracle Linux 6.3, но скорее всего действия валидны и для RedHat/CentOS 6, т. к. они все "из одной пробирки".

Итак. Последнюю версию kDevelop - 4.3 - установить мне не удалось, т. к. необходимые ей kdelibs-devel были слишком старой версии в системе, а чтобы их обновить, пришлось бы переколбашивать всю систему с высоким шансом ее угробить, потому пришлось поставить старенькую версию kDevelop - 4.0.2.

1. Ставим зависимости:

yum install qtwebkit.x86_64 kdelibs-devel kdebase-workspace-devel

2. Качаем отсюда http://download.kde.org/stable/kdevelop/4.0.2/src/ и распаковываем сорцы:

cd /home/user/Downloads
wget http://download.kde.org/stable/kdevelop/4.0.2/src/kdevelop-4.0.2.tar.bz2
wget http://download.kde.org/stable/kdevelop/4.0.2/src/kdevplatform-1.0.2.tar.bz2
tar -xjvf kdevelop-4.0.2.tar.bz2
tar -xjvf kdevplatform-1.0.2.tar.bz2

3. Компилится оно немножко по-задроченному, потому создаем папки и копируем сорцы куда надо:

mkdir -p /home/user/src/kdevplatfom/build
mkdir -p /home/user/src/kdevelop/build
cp -R /home/user/Downloads/ kdevplatfom -1.0.2/* /home/user/src/kdevplatfom/
cp -R /home/user/Downloads/kdevelop-4.0.2/* /home/user/src/kdevelop/

30 авг. 2012 г.

Django ошибка django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb при синхронизации БД.

Вы настроили параметры соединения с БД MySQL в settings.py, но при выполнении синхронизауии

python ./manage.py syncd

Вылетает простыня ошибок, а в конце:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Проблема в отсутствии моделя mysql для питона.
Решение:

apt-get install python-mysqldb

Для других конфигураций работают команды:

pip install MySQL-python
easy_install MySQL-python

Установка RoundCube Webmail

Сразу определюсь: ОС - Debian, MTA - Postfix, использую только защищенные подключения, веб-сервер Apache + modphp5.
В Debian, как всегда, есть два пути - ставить из сорцов или из пакетов. Я выбрал 2й путь.

apt-get install roundcube roundcube-mysql libapache2-mod-evasive
nano /etc/apache2/conf.d/roundcube

Добавляем строчки:

Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/

Alias /roundcube /var/lib/roundcube

chown -R www-data /var/lib/roundcube/
nano /var/lib/roundcube/config/main.inc.php

Здесь прописываем конфиги для своего почтового сервера. Пример:

$rcmail_config['force_https'] = TRUE;
$rcmail_config['default_host'] = 'ssl://localhost:993';
$rcmail_config['imap_auth_type'] = 'check';
$rcmail_config['smtp_server'] = '127.0.0.1';
$rcmail_config['smtp_port'] = 465;

$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';

$rcmail_config['smtp_auth_type'] = 'LOGIN';

Разрешение обычным пользователям использовать tcpdump

Возникла потребность разрешить программерам юзать tcpdump. Давать им рутовую консоль как-то не кошерно, потому нашел решение:

which tcpdump
chmod 4755 /sbin/tcpdump

Для зпрещения - chmod 700 или 755

Отключение USB Flash Drive но не клав/мышек в Linux

Задача: запретить юзверам юзать съемные USB-накопители.

Можно конечно втупую отрубить в BIOS, но тогда USB-клавы, мыши и другие нужные девайсы работать не будут.

Моё решение: Находим модуль usb-storage.ko и перемещаем в другое место. Ну или злостно удаляем :)

ls /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko
mv /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko /root


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

modprobe usb-storage

17 авг. 2012 г.

Настройка модемов Huawei для работы с АТС Asterisk PBX

После некоторых мучений и поисков, что чего и куда, решил написать статью для потомков о настройке модемов Huawei для работы с АТС Asterisk.

Для начала установим необходимые пакеты. Всё нижесказанное для системы Debian. Для других дистрибутивов нужно будет подправить команды и возможно пути.

aptitude install asterisk-dev libusb libusb-dev subversion build-essential

Теперь идём на реальную вин-машину. Втыкаем туда нашего зверька, винда должна пошуршать дровами, затем надо установить из памяти устройства программульку U'manager. Она установит дрова именно на сам модем. Для верности, заходим в свойства в прожке и проверяем, виден ли наш модем.


Теперь скачиваем прожку для крякания модемчиков Хуявей тут Huawei_Modem_Unlocker.zip

Установка полноценного Firefox в Linux Debian вместо Iceweasel

Лично я предпочитаю в качеств ебраузера использовать Google Chrome... по многим причинам. Но иногда он нужен - полноценный фаерфокс, с некоторыми его полезными плагинами. А в Debian по-умолчанию установлен кривой Iceweasel. Вот как исправить это недоразумение.

1) удаляем Iceweasel

sudo apt-get remove iceweasel

2) идем на сайт мозиллы http://www.mozilla.org/en-US/firefox/new/ и скачиваем текущую версию фаерфокса.

3) распаковываем архив

bzip2 -d firefox-14.0.1.tar.bz2
tar -xvf firefox-14.0.1.tar
cd firefox

4) запускаем!

./firefox

Для удобвства можно сделать линки себе куда нужно.

16 авг. 2012 г.

Debian, ошибка в логах mpt-statusd: detected non-optimal RAID status

Было замечено, и не только мной, что у Debian 6 Squeeze, установленном на виртуальную машину, часто в лог /var/log/messages сыплет сообщения типа:

mpt-statusd: detected non-optimal RAID status

Устраняется это отключением демона, следящего за RAID (которого в этой ситуации нету):

/etc/init.d/mpt-statusd stop

echo RUNDAEMON=no > /etc/default/mpt-statusd

Всё.

9 авг. 2012 г.

Ошибка при входящеми звонке в Asterisk

Вот только что долбался с тем, что почему-то Asterisk перестал обрабатывать входящие звонки, а в логе ( tail -n 400 /var/log/asterisk/messages ) при этом писал ошибку типа:

WARNING[31425] pbx.c: Channel 'ваш канал' sent into invalid extension 's' in context 'ваш контекст', but no invalid handler

Продолбался, пронервничался, а оказалось всё просто - mistype в названии контекста! :)
В общем, такая ошибка вылазит в двух случаях:

1) нет такого экстеншна в контексте, либо нет в принципе такого контекста (или он закомментирован или т.п .)
2) ошибка в названии контекста/экстеншна, соответственно, Asterisk его не видит.

Вот так всё просто... иногда :)

8 авг. 2012 г.

Debian 7 тормоза при переключении вкладок в Chrome

После установка Debian 7 Wheezy мною было замечено, что Google Chrome начинает немприятно тормозить при переключении вкладок, если их больше 4-5. Это меня через минут 10-15 начало жутко кумарить и я полез искать решение.

Нашел 2 варианта. Остановился на 1м, но приведу оба - вдруг кому подойдет больше 2й.

1) заставиь хром юзать старую библиотеку libcairo2 v1.10.2-7. Необходимо скачать пакет с библиотекой, извлечь ее и скормить хрому. Для 64-битной системы команды:

wget http://backports.debian.org/debian-backports/pool/main/c/cairo/libcairo2_1.10.2-7~bpo60+1_amd64.deb

dpkg -x libcairo2_1.10.2-7~bpo60+1_amd64.deb /opt/libcairo2

ln -s /opt/libcairo2/usr/lib/libcairo.so.* /opt/google/chrome/

2) Для видеокарт nVidia еще работает команда:

nvidia-settings -a InitialPixmapPlacement=0

Но, при этом заметно возрастает нагрузка на CPU, потому я сделал как в 1-м методе, хотя у меня и nVidia.
Надеюсь, вам это поможет также.

6 авг. 2012 г.

Настройка почты в Redmine

Здесь я опишу настройку Redmine для отправки почты через свой почтовый сервер.

Redmine настроен на сервере Linux Debian 6 через mod_passenger веб-сервера apache2

В зависимости от вашей инсталляции редактируем файл /etc/redmine/default/email.yml (Debian, из пакетов) или /usr/share/redmine/config/email.yml (смотрите, не перепутайте, типа как я - и парился, почему ж оно не вхавывает новые настройки... :) ) и прописываем настройки, заменив адреса и т. д. на свои:


production:
  delivery_method: :smtp
  smtp_settings:
    address: 192.168.1.2
    port: 25
    domain: mydomain.com
    authentication: :plain
    user_name: "redmine@mydomain.com"
    password: "Password"


development:

  delivery_method: :smtp
  smtp_settings:
    address: 192.168.1.2
    port: 25
    domain: mydomain.com
    authentication: :plain
    user_name: "redmine@mydomain.com"
    password: "Password"

Щелкает чехол iPad при переносе в сумке

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

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

1) купить таки оригинальный чехол, например Smart Cover, но у него есть одна неприятная особенность - он не закрывает заднюю панель, отчего она неминуемо будет царапаться и т. д.

2) выключить фишку автоблокировки (Настройки -> Основные -> Блокировка при закрытии). Но делать это жаль - довольно удобная функция.

3 авг. 2012 г.

Cisco Any Connect VPN in Linux

Чтобы подключиться из Linux к Cisco Any Connect VPN нужно установить пакет  (в Debian):

aptitude install openvpn

Затем набрать команду:

openconnect -u user 192.168.0.0

подтвердить сертификат, ввести пароль и когда в консольке повиснет сообщение Established DTLS connection, открываем новую и работаем с удаленными машинами.

Исправление ошибок "Server sent passive reply with unroutable address. Using server address instead." или "500 illegal port command" при подключении к FTP серверу на vsftpd

Если у вас ftp сервер находится за роутером и вы из локальной сети подключаетесь отлично, а извне - сыпет ошибки типа "Server sent passive reply with unroutable address. Using server address instead." or "500 illegal port command", то вы по адресу :) Причина этому безобразию - неправильно настроенный по-умолчанию Passive mode на фтп-сервере.

Для начала откройте в вашем роутере порты 4242...4252 для локального адреса фтп-сервера.

Затем в конфиг /etc/vsftpd.conf нужно добавить строчки:

connect_from_port_20=YES 
pasv_enable=YES 
pasv_addr_resolve=YES 
pasv_address=myaddress.dyndns.com
pasv_min_port=4242 
pasv_max_port=4252

Еще для пущей секьюрности можно добавить следующее:

#Включаем список пользователей, только которым можно подключаться к нашему фтп-серверу
userlist_enable=YES
userlist_deny=NO  
#пусть к списку
userlist_file=/etc/vsftpd.userlist 
#включение подробного логирования
logging log_ftp_protocol=YES 
#заключение пользователя в его домашней директории. Маст-хэв опция, если у вас используются локальные аккаунты
chroot_local_user chroot_local_user=YES

25 июл. 2012 г.

Установка сервера NIS в Debian Linux и настройка клиентов

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

Итак, установим нужные пакеты и их зависимости командой:

aptitude -y install nis portmap

Когда спросит, введем имя нашего домена - например, example.com
Автостарт службы сфейлиться, но не пугайтесь - ему просто не хватает некоторых настроек.
Займемся конфигурацией.

1) nano /etc/default/nis

Здесь прописываем: 

NISSERVER=master

2) nano /etc/ypserv.securenets

Здесь закомментируем строчку, разрешающую доступ со всех IP:
# This line gives access to everybody. PLEASE ADJUST!
# make it comment
# 0.0.0.0 0.0.0.0

И пропишем адреса наших подсетей, например:
255.255.255.0                    10.86.35.0

3) nano /var/yp/Makefile

В 119-й линии добавим shadow:
ALL = passwd shadow group hosts rpc services netid protocols netgrp

4) nano /etc/hosts 

Добавим адрес нашего сервера NIS:
127.0.0.1 localhost nis.example.com nis
#Добавим также сетевой адрес сервера
10.86.35.10 nis.example.com nis

5) Обновим базу данных NIS сервера командой (введя на запрос имя нашего nis сервера как мы его прописали чуть выше - nis):

/usr/lib/yp/ypinit -m

5 июл. 2012 г.

Ошибка в FileZilla Error GnuTLS error "-12" A TLS fatal alert has been received.

Эта ошибка возникает, если пытаться зайти колиентом версии 3.5.3 на FTP сервер, поднятый на vsftpd и с использованием FTPES (FTP over explicit TLS/SSL)

Вводим все данные правильно в Site Manager и... получаем ошибку

Error GnuTLS error "-12" A TLS fatal alert has been received.

WTF???

Дело в том, что в FileZilla версией от 3.5.3 не поддерживаются определенные заголовки SSL и TLS. Я так особо не вникал, какие - там можно себе мозг сломать :)

В общем, решение заключается в добавлении в конфиг ftp-сервера /etc/vsftpd.conf строчки:

ssl_ciphers=HIGH

Перезапускаем ftp демона и пробуем.

4 июл. 2012 г.

Удаление скрытых драйверов в Windows 2003

Недавно задолбал меня на сервере драйвер, из-за которого периодически сыпались ошибки в ивентлог... Нашел способ его (и не только его) удалить.

Для того, чтобы найти и удалить ненужные драйвера:

1. Нажмите [Windows]+[Break],чтобы вызвать диалоговое окно System Properties (Свойства системы).

2. Перейдите на вкладку Advanced (Дополнительно) и нажмите на кнопку Environment Variables (Переменные среды).

3. Нажмите на кнопку New (Создать) на панели System Variables (Системные переменные).
В диалоговом окне New System Variable (Новая системная переменная) в поле Variable Name (Имя переменной) введите devmgr_show_nonpresent_devices, а в поле Variable Value (Значение переменной) введите 1.

4. Нажмите OK, чтобы вернуться в диалоговое окно System Properties (Свойства системы) и затем ещё раз нажмите OK.

5. Перейдите на вкладку Hardware (Оборудование) и нажмите на кнопку Device Manager (Диспетчер устройств).

6. В меню Диспетчера устройств выберите View | Show Hidden Devices (Вид | Показать скрытые устройства).

7. Раскройте все списки дерева устройств и ищите затемнённые иконки, обозначающие неиспользуемые драйвера.

8. Чтобы удалить неиспользуемый драйвер, щелкните правой кнопкой на соответствующем ярлыке и выберите команду Uninstall (Удалить).

Тема работает на Windows XP и Windows Server 2003 R2. На остальных версиях не проверял, но мне кажется, что скорее всего тоже работать будет.


3 июл. 2012 г.

Проверка заданий планировщика Windows Scheduler в Nagios

Понадобилось сделать проверку, которая бы раз в день проверяла дату последнего выполнения заданий на сервере и отсылала отчетик по почте.

Такую задачу можно решить многими способами. Здесь опишу свой вариант.

Использовать я буду NRPE для Windows, а точнее его реализацию в NSC++ клиенте (0.3.х версия). NRPE позволяет выполнять на стороне клиента любые скрипты и получать от них результаты - главное всё правильно настроить ;) Как установить и настроить NRPE на сервере и клиенте я писал в этой статье. Для скриптов будем использовать Python 3. Почему? Во 1-х я знаю этот язык :) а во 2-х, я долго мучался с PowerShell, в котором очень криво работает парсинг CSV и мне так и не удалось заставить его нормально вытягивать данные. В итоге, я положий большой и толстый на мракобесную приблуду и заюзал православный питон, в котором тоже была пара граблей, но гугл помог их решить :)

Итак. Для начала настроим клиента.

Идем на http://python.org/download/ и скачиваем 3ю версию питона для Windows, устанавливаем (Далее, Далее... Готово :) ).

Открываем конфиг NSC++ и в секцию [External Scripts] прописываем:

check_scheduler=C:\Python32\python.exe "C:\Program Files\NSClient++\scripts\script.py"

Затем собсно и пишем этот скриптец (создаем текстовый файлик, переименовываем и ПКМ / Edit with IDLE):


import csvimport sys
import os
##Deleting old log
os.system('del "log.csv"')
##Performing schtasks command
os.system('schtasks /query /fo CSV /v >> "log.csv"')
##Clean bad characters inserted by schtasks
fi = open('log.csv', 'rb')
data = fi.read()
fi.close()
fo = open('log.csv1', 'wb')
fo.write(data.replace(b'\x00', b''))
fo.close()
##Opening cleaned CSV
ifile  = open('log.csv1', "r")
reader = csv.reader(ifile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
##Extracting needed data
for row in reader:
    if (row[1] == "rdc_106") or (row[1] == "rdc_108") or (row[1] == "rdc_115") or (row[1] == "rdc_116"):
        print (row[1]+" : "+row[5])
ifile.close()

Алгоритм работы скрипта такой:
  • удаляем старый лог чтоб не мешал
  • командой schtasks /query /fo CSV /v >> "log.csv" получаем список заданий и в формате CSV записываем в лог-файл
  • очищаем файлик от символов неотображаемых null которые мракософтные команды и Excel зачем-то пихают в файлик CSV, а питон ругается на аткие символы
  • а затем извлекаем в командную строку поля TaskName и Last Run Time для нужных нам заданий.
Перезапускаем службу NSClient++. Всё, если вы ничего не напутали с путями, то клиент настроен.
Настроим теперь сервер.

Тут всё даже попроще. Редактируем файл команд /usr/local/nagios/etc/objects/commands.cfg добавив в конец:

define command{
        command_name    check_scheduler
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_scheduler
        }

Затем пишем скриптец на bash, который будет чекать наши задания и отправлять результаты по почте. Мне не надо было делать постоянный чек, потому я не прописывал сервис для хоста.

#!/bin/bash
#удаляем старый лог чтоб не мешал
rm /home/user/daily_log
#тут пишем комментарии, чеки и всё такое
echo " `date ` \n\n Daily report for Super-duper server.\n\n [Disk space on D:]" >> /home/user/daily_log>
/usr/local/nagios/libexec/check_nt -H 192.168.1.4 -p 12489 -v USEDDISKSPACE -l d -d SHOWALL >> /home/user/daily_log
echo "\n [Processes state:]" >> /home/user/daily_log
/usr/local/nagios/libexec/check_nt -H 192.168.1.41 -p 12489 -v PROCSTATE -l someprocess.exe -d SHOWALL >> /home/user/daily_log
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.4 -p 5666 -c check_scheduler >> /home/user/daily_log
cat /home/user/daily_log | mail -s "Report for Super-duper" -c copy_mail@domain.com recipient@domain.com 

chmod +x /home/user/daily_report.sh

И пихаем этот скриптик в планировщик на нужное на время crontab -e (например, в 6-45 по рабочим дням):

45 6 * * 1-5 sh /home/user/daily_report.sh

Усё. Если всё сделано правильно, то пожинаем плоды своего труда.

30 июн. 2012 г.

Чтение в iPad или OPDS каталоги и программа Mega Reader

Есть такая штука OPDS. По своей сути это библиотечный протокол когда устройство получает не HTML в браузере, а каталог книг разбитый по неким критериям. Изначально предназначен для распространения книг на устройства.

Позволяет просматривать каталог по заданным критериям, вести поиск книг/авторов, скачивать нужное. Можно просмотреть карточку книги с описанием и обложкой.

Есть много софтин для ыПада, предназначенных для чтения книг, в т. ч. и с использованием этого протокола, но лично мне первой попалась прожка с очень скромным названием Mega Reader :) ну и както желания искать что ли бо подобное не возникло - прожка меня во всём устраивает. Вот чуть ниже несколько скринов:


29 июн. 2012 г.

Nagios NRPE контроль размера файла (filesize)

Сразу оговорюсь, что система, в которой я настраивал это хозяйство, ранается на Debian 6, а сам Nagios установлен не из пакетов, а из сорцов как в RedHat - в /usr/local/nagios - так проще и удобней, т. к. почти вся документация написана под такой вариант установки.

Для мониторинга нам понадобится плугин к Nagios - NRPE(Nagios Remote Plugin Executor). Смысл его работы показан на рисунке:


На винде он так же точно работает, только через NSClient++.

Итак, приступим. Процесс настройки и установки хорошо описан в официальной пдф-ке: http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf . Но я опишу свои шаги.

1. Устанавливаем необходимую библиотеку:

apt-get update
apt-get install build-essential libssl-dev xinetd


Папки или что где находится в iPad 2

В этой напоминалке я напишу о том, в каких папках что искать в iPad 2. Файловая структура в iPad довольно таки замороченная и постоянно помнить что где валяется довольно проблематично.

Для начала надо сказать, что для просмотра файловой системы в принципе нужен Jailbreak (прочитать о нём можно в моей статье тут) и установленный из Cydia файловый менеджер iFile.

Для этого вначале добавьте в Cydia репозиторий Xsellize: http://cydia.xsellize.com Затем в поиске найдите iFile (не iFiles!!!!) из этого репозитория (а не отмеченный синим цветом) и установите.


Теперь перечислю те полезные папки, которые я обнаружил:

  • Фотографии находятся в подпапках тут: /var/mobile/Media/PhotoStreamsData/ или /var/mobile/Media/DCIM/
  • Фото еще находятся здесь: /var/mobile/Media/PhotoData/Sync/100SYNCD
  • Файлы загрузок Installous находятся тут: /var/mobile/Documents/Installous/Downloads/ сюда полезно кидать загруженные из интернет (торренты, браузер и т п) .ipa файлы, если под рукой нет iTunes.
  • Папка загрузок iCab находится тут: /var/mobile/Applications/<Application_ID>/Documents/ где <Application_ID> = F6E0DC32-A742-4C23-A9AF-67B555D43DF0 у меня. У вас может быть и по-другому - точно не знаю.
  • Файлы с играми для эмуляторов находятся в своих подпапках тут: /var/mobile/Media/ROMs Например: GAMEBOY, GENESIS, GBA, N64, PSX, TURBO
  • /System/Library/LaunchDemons - настройки всех демонов айос, многие из которых можно отключить. Но вслепую лучше не делать этого. Скоро напишу статью по этой теме.
  • /var/stash/Applications - сюда устанавливаются все программы из Cydia, имеющие GUI, в т ч и она сама, также настройки этих программ.
 По ходу обнаружения буду обновлять этот пост.

Google Chrome для iPad

Уррраа!!!

Google Chrome есть теперь для iPad и iPhone.

Скачать его можно бесплатно здесь: http://itunes.apple.com/app/chrome/id535886823?mt=8

Jailbreak для iPad 2 (iOS 5.1.x)

Чтобы ставить бесплатно платные программы и играться со своим девайсом необходимо его малость "препарировать".

Делается это так (из-под винды, а точнее, я делал в Win 7 x64, но думаю что и в остальных всё то же самое):

1. Установите самую последнюю версию iOS - на момент написания статьи это 5.1.1. Настройки -> Основные -> Обновление ПО.


2. Подключите своё устройство к компьютеру и сделайте резервную копию через iTunes (если новый, то можно в принципе и не делать, но очень желательно)

3. Пишут, что перед джеилбрейком желательно стереть всё с ыпада и если не делать этого, то джеил будет очень долго делаться. Как оно на самом деле - хз, но у меня ыпад был почти нулячий и я сбросил: Настройки –> Основные –> Сброс –> Удалить контент и настройки.


4. Скачиваем саму программулину - Absinthe 2.0.4 (на момент написания это самая свежая версия) по ссылке Absinthe 2.0.4 for Windows ну или откуда-нибудь еще. Затем распаковываем, например, на рабочий стол.

5. Откройте Absinthe 2 и убедитесь, что устройство подключено к компьютеру по USB и заряжено хотя бы на половину.

6. Нажмите “Jailbreak” и дождитесь завершения процесса взлома (это может занять какое-то время)

7. Зайдите в iTunes и восстановитесь из созданной ранее резервной копии

Далее сделаем несколько улучшений:

1. Запускаем Cydia. выбираем User.
2. Открываем «Manage» — «Sources»
3. Жмем на «Edit» — «Add» и вводим адрес дополнительного репозитория: http://cydia.hackulo.us
4. Откроется окошко, где нам скажут, что репозитрий хакерский. Не ссым и жмём на «Add Anyway».
5. Игнорируем все ошибки, если возникнут.


6. Заходим в раздел «Sections» — «Hackulo» или в свежих обновлениях (или поиске) находим «AppSync» для Вашей прошивки (5.1 т. е.)
7. Жмём на «install» и «confirm»
8. После установки, обязательно перезагрузить iPad !!!
9. Теперь нужно установить программульку Installous 5. Она нужна для поиска и установки программ .ipa. (как альтернатива - можно на ПК скачивать торренты и ставить через iTunes).



Всё вышеописанное делал на своём ыпадике.