четверг, 31 октября 2013 г.

Как создать VLAN и добавить в него порты на коммутаторах серий DES-35XX, DES-38XX, DES-30XX и DES-3226S по SNMP

Задача:
Создать VLAN с VID=5 и добавить в него порты: порт 14 как tagged, порты 25-26 как untagged.
Примечание: Порты 14, 25-26 удалены из VLAN default.
Команда (для серий DES-38XX, DES-35XX и DES-30XX):
snmpset -v2c -c private 192.168.0.1 1.3.6.1.2.1.17.7.1.4.3.1.1.5 s v5 1.3.6.1.2.1.17.7.1.4.3.1.2.5 x 000400C0 1.3.6.1.2.1.17.7.1.4.3.1.3.5 x 00000000 1.3.6.1.2.1.17.7.1.4.3.1.4.5 x 00040000 1.3.6.1.2.1.17.7.1.4.3.1.5.5 i 4
Объяснение:
5 - VID
snmpset -v2c -c private 192.168.0.1
1.3.6.1.2.1.17.7.1.4.3.1.1.5 sv5 <= Задаём имя VLAN-а с VID=5 – v5.

1.3.6.1.2.1.17.7.1.4.3.1.2.5 x 000400С0 <= Порты, которые должны быть добавлены в VLAN как tagged– порты 25-26.
Порты задаются следующим образом:
x 00000000 – шестнадцатеричное число, каждый октет (4 разряда) которого представляют 4 порта. Старший разряд представляет порт 1. Старшие два разряда седьмого октета представляют порты 25-26. Т.е. 1100 (двоичное) = C (шестнадцатеричное).
1.3.6.1.2.1.17.7.1.4.3.1.3.5 x 00000000 <= Порты, которые не могут быть добавлены в этот VLAN (forbidden).

1.3.6.1.2.1.17.7.1.4.3.1.4.5 x 00040000 <= Порты, которые должны быть добавлены в VLANкак untagged– порт 14.
*  Для того, чтобы добавить untagged порт в VLAN, сначала его нужно добавить как tagged, т.е. добавление в VLAN как untaggedпорта 14 будет выглядеть следующим образом, при условии, что VLANv5 уже создан:
snmpset -v2c -c private 192.168.0.1 1.3.6.1.2.1.17.7.1.4.3.1.2.5 x 00040000  1.3.6.1.2.1.17.7.1.4.3.1.4.5 x 00040000
1.3.6.1.2.1.17.7.1.4.3.1.5.5 i 4 <= Создать VLAN с указанными параметрами createAndGo(4)


Команда (для DES-3226S):
Отличие заключается в том, что DES-3226S поддерживает аппаратное стекирование. В стек может быть добавлено до 16 коммутаторов DES-3226S, следовательно общее количество портов 26*16 = 416. Количество шестнадцатеричных цифр представляющих это количество портов 416:4 = 104. Исходя их этого и указывается количество шестнадцатеричных разрядов.
snmpset -v2c -c private 192.168.0.1 1.3.6.1.2.1.17.7.1.4.3.1.1.5 s v5
snmpset -v2c -c private 192.168.0.1 1.3.6.1.2.1.17.7.1.4.3.1.2.5 x 000000C000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000
snmpset -v2c -c private 192.168.0.1 1.3.6.1.2.1.17.7.1.4.3.1.3.5 x 000000C000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000
snmpset -v2c -c private 192.168.0.1 1.3.6.1.2.1.17.7.1.4.3.1.4.5 x 0004000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000
snmpset -v2c -c private 192.168.0.1 1.3.6.1.2.1.17.7.1.4.3.1.5.5 i 4

вторник, 29 октября 2013 г.

Как перезагрузить управляемые коммутаторы D-Link по SNMP?



Параметр SNMP, отвечающий за перезагрузку устройства, может отличаться в зависимости от модели коммутатора.
Ниже приведена таблица этих параметров для наиболее распространённых моделей управляемых коммутаторов D-Link:
Модель коммутатора FW Параметр SNMP Значение
DES-2110 Любая miscReset(OID=1.3.6.1.4.1.171.10.61.1.3.2) (1) - reset
DES-2108 Любая miscReset(OID=1.3.6.1.4.1.171.10.61.2.3.2) (1) - reset
DES-3226S Любая agentSystemReset(OID=1.3.6.1.4.1.171.11.36.2.5.2.1.0) (2) - cold start
DES-3226S Любая agentSystemReset(OID=1.3.6.1.4.1.171.11.48.1.1.1.1.2.5) (2) - cold start
DES-3250TG Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (2) - cold start
DES-3026 Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (3) - warm start
DES-3526 Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3.0) (3) - warm start
DES-3326SR Любая agentSystemReset(OID=1.3.6.1.4.1.171.11.49.2.1.1.1.2.5) (2) - cold start
DES-3350SR Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (3) - warm start
DES-3828 Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (3) - warm start
DGS-3024 Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (2) - cold start
DES-3224TGR Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (3) - warm start
DGS-3312SR Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (3) - warm start
DGS-3324SR
DGS-3324SR
DXS-3326GSR
DXS-3350SR
Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (3) - warm start
DES-6500 Любая agentSystemReset(OID=1.3.6.1.4.1.171.12.1.2.3) (3) - warm start

AAA на коммутаторах D-Link через RADIUS

Конфиг для авторизации (  где 192.68.0.105 - радиус сервер, 1 - пароль для повышения привелегий)

create authen server_host 192.68.0.105 protocol radius port 1812 key "mkserveradius" timeout 5 retransmit 2
config authen server_group radius delete server_host 192.68.0.105 protocol radius
config authen server_group radius add server_host 192.68.0.105 protocol radius
config authen_login default method radius local
create authen_login method_list_name terminal
config authen_login method_list_name terminal method local
config authen_enable default method local_enable
create authen_enable method_list_name terminal
config authen_enable method_list_name terminal method local_enable
config authen application console login method_list_name terminal
config authen application console enable method_list_name terminal
config authen application telnet login default
config authen application telnet enable default
config authen application ssh login default
config authen application ssh enable default
config authen application http login default
config authen application http enable default
config authen parameter response_timeout 30
config authen parameter attempt 3
enable authen_policy
config admin local_enable

1
1

Настройка RADIUS описана в этой ссылке : Примеры настройки аутентификации при доступе к коммутатору с использованием серверов Radius и Tacacs+

понедельник, 28 октября 2013 г.

Конвертация flv to avi, swf to avi

Добрый день. Возникла необходимость сконвертировать видео flv в avi, для просмотра на IPad и Android устройствах. Наверное есть какие-то приложения для Android и IOS, которые позволяют смотреть flv, но приложений под IOS, которые просматривают swf точно нет, т.к. для проигрывания swf нужен Flash. От конвертации под Windows я сразу отказался, по трём причинам:
1.  Происхождение приложений. Скачивая приложения с непонятных сайтов и устанавливая их с правами администратора, можно получить очень "интересные" последствия. Наверное, я параноик, но устанавливать непонятные Win-приложения я не хочу.
2. Интерфейс у приложений, какой-то не очень для меня очевидный. Может быть я тупой или ленивый, но разбираться в невероятном количестве менюшек мне не хотелось.
3. В процессе конвертации видео на моём бюджетном ноутбуке, выяснилось что время, затрачиваемое на конвертацию, чуть ли не больше, чем время воспроизведения файла. Т.е. на конвертацию 20 часов видео потратиться более суток и если при этом что-то, программа  вернёт ошибку, то сколько то часов времени будет потеряно.

И тут мне в голову пришла совершенно очевидная мысль: не может быть, что бы в репозиториях для Debian не было средства для конвертации. Первая же ссылка в поиске привела меня на форум OpenNet . А дальше дело техники:
# apt-get install ffmpeg

Сам код для конвертации без потери качества, для тех кому день читать man :
ffmpeg -i src.flv -vcodec copy -acodec copy dst.avi

И маленький скриптик:

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10 11 12
do
        ffmpeg -i $i.flv -vcodec copy -acodec copy $i.avi &
done

exit 0


Кстати, очень важно наличие амперсанда & в конце команды :

ffmpeg -i $i.flv -vcodec copy -acodec copy $i.avi

Т.к. это позволяет запустить конвертацию в несколько "потоков" и отвязать выполнение скрипта от консоли в которой он запущен. Т.е. после запуска скрипта проверяем наличие ffmpeg
в top и можно закрывать консоль. На моём сервере с древним Xeon и 2 Гб оперативной памяти все процессы (12 шт.) ffmpeg "съели" 4% процессорного времени и всё видео (20 часов) сконвертировалось в течении 3-4 минут.

Желающие могут усовершенствовать скрипт использую BASH Guide .
Конвертация проходит без потери качества.
Удачи:)

воскресенье, 27 октября 2013 г.

Обновляем прошивку на коммутаторах D-Link

Существует по крайне мере 4 способа (возможно есть и еще) обновления прошивки на коммутаторах D-link
Для примера возьмем DES-3526
1. Загрузка прошивки через консольный кабель (восстановление слетевшей прошивки)
2. Загрузка прошивки по сети, через cli.
3. Загрузка прошивки через web интерфейс
4. Загрузка прошивки по средствам snmp.

FTP с которого можно получить прошивки, MIB и т.п. ftp://ftp.dlink.ru/pub/Switch/

Первый способ применим лишь  тогда, когда на коммутаторе отсутствует прошивка. Про этот способ я уже писал, ознакомиться с ним можно тут Восстановление прошивки на коммутаторах D-link
2. Загрузка прошивки по сети, через cli.
- Необходимо зайти на коммутатор по telnet или ssh.
- Ввести в командной строке коммутатора команду:
download firmware <Полный путь к файлу прошивки> <указать в какой слот загружать прошивку, в первый или во второй, если не указывать image_id то по умолчанию будет 1 слот)>
Пример команды:
DES-3526:admin# download firmware_fromTFTP 192.168.200.10 fw_des3526
Дождавшись загрузки и установки прошивки на коммутатор, необходимо перезагрузить коммутатор, выполнив команду reboot на коммутаторе и нажав «y» для подтверждения.
3. Загрузка прошивки через web интерфейс
Заходим на коммутатор через веб-интерфейс, выбираем Maintenance -> Download firmware

Вписываем в поле Server IP Address – ip-адрес tftp сервера, а в поле File Name – имя файла прошивки, после этого нажать старт.






Дождавшись окончания загрузки необходимо перезагрузить коммутатор.
4. Загрузка прошивки по средствам snmp.
Задаем IP-адрес TFTP-сервера:
snmpset –v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.1.1.3.1 a 192.168.200.10
172.20.0.1 -> IP-адрес коммутатора
192.168.200.10 -> IP-адрес TFTP-сервера
Указываем тип передачи файла:
snmpset -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.1.1.4.1 i 2
Задаем имя файла прошивки:
snmpset -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.1.1.5.1 s fw_des3526
Указываем загрузку файла на коммутатор
snmpset -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.1.1.7.1 i 3
Начать передачу файла:
snmpset -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.1.1.8.1 i 3
Выбрать ID прошивки в качестве загрузочной:
snmpset -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.1.1.10.1 i 1
Теперь осталось только перезагрузить коммутатор:
snmpset -t 45 -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.3.0 i 3
Получился у нас приблизительно такой скрипт:
#!/usr/local/bin/bash
snmpset -t 90 -r 1 -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.1.1.3.1 a 192.168.200.10 \
1.3.6.1.4.1.171.12.1.2.1.1.4.1 i 2 \
1.3.6.1.4.1.171.12.1.2.1.1.5.1 s fw_des3526 \
1.3.6.1.4.1.171.12.1.2.1.1.7.1 i 3 \
1.3.6.1.4.1.171.12.1.2.1.1.8.1 i 3 \
1.3.6.1.4.1.171.12.1.2.1.1.10.1 i 1
snmpset -t 45 -v2c -c private 172.20.0.1 1.3.6.1.4.1.171.12.1.2.3.0 i 3
P.S: Сохранение конфига:
snmpset -t 60 -r 1 -v2c -c private 10.90.90.90 1.3.6.1.4.1.171.12.1.2.6.0 i 3

пятница, 25 октября 2013 г.

Включение LLDP D-Link 3200-28

config lldp ports 1-24 notification disable
config lldp ports 1-24 admin_status disable
config lldp ports 25-28 notification enable
config lldp ports 25-28 admin_status tx_and_rx
config lldp ports 25-28 basic_tlvs port_description system_name system_description system_capabilities enable
config lldp ports 25-28 mgt_addr ipv4 10.4.255.23 enable
config lldp forward_message enable
config lldp ports 25-28 notification enable
config lldp ports 25-28 basic_tlvs all enable
config lldp ports 25-28 dot1_tlv_pvid enable
config lldp ports 25-28 dot1_tlv_vlan_name vlan all enable
enable lldp

Полезные ссылки:
XGU LLDP

четверг, 17 октября 2013 г.

Lighttpd + WebDAV


Ставим пакеты:

apt-get update
apt-get install -y lighttpd
apt-get install -y lighttpd-mod-webdav

Добавляем в конфиг файл
vi /etc/lighttpd/lighttpd.conf

$HTTP["url"] =~ "^/dav($|/)" {
webdav.activate = "enable" # allow module
webdav.is-readonly = "disable" # enable write
webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db" # access to locaks and metadata database
}

Около блока "server.modules" ищем строку "mod_webdav" и убираем знак диеза слева, если он установлен.

После этого нам требуется создать хотя бы одну папку с доступом по WebDAV. Корнем веб сервера устанавливается папка /var/www, если вас устраивает такое положение, можете её так и оставить, в противном случае можете изменить её местоположение в конфиг файле. После этого создаем папку для WebDAV доступа:
mkdir /var/www/dav
chown www-data:www-data /var/www/dav

Ну и напоследок применяем настройки:
/etc/init.d/lighttpd restart

После это можно каким-нить WebDAV клиентом (я использовал nd) попробовать поиграться с папкой http://ваш_сайт/dav

Я использовал версию (в случае же проблем, обновляемся на более новую):
lighttpd-1.4.13 (ssl) - a light and fast webserver
Build-Date: Apr 15 2008 08:23:10

Играемс:
nd -d http://домен.ru:81/dav/suxx.ics --- удаление файла
nd -p wammu.log http://домен.ru:81/dav/suxx.log -- загружаем файл
nd -m http://домен.ru:81/dav/suxx555.log http://домен.ru:81/dav/suxx.log -- перемещаем файл
nd -v http://домен.ru:81/dav/555suxx.log -- запрос свойств объекта
У меня было выдано:
Status: 0
Last-Modified:
Created:
Size:
Content-Type:
Resource-Type:

Зададим новое свойство:
nd -l http://домен.ru:81/dav/suxx555.log -- блокируем объект
Lock: token="opaquelocktoken:aebb8df4-3321-4604-a8aa-cf69429c2725",
scope="exclusive",
owner-href="",
timeout="Second-600"

nd -u -t opaquelocktoken:aebb8df4-3321-4604-a8aa-cf69429c2725 http://домен.ru:81/dav/suxx555.log -- разлочим объект посредством "ключа", выданного нам при блокировке
nd -k http://домен.ru:81/dav/folder1 -- создаем новую папку

А вот далее интереснее:
nd -e test=12345 http://домен.ru:81/dav/suxx555.log
nd -v http://домен.ru:81/dav/suxx555.log
Name: http://домен.ru:81/dav/suxx555.log
Status: 0
Last-Modified:
Created:
Size:
Content-Type:
Resource-Type:


Как видите, вновь заданное свойство не показывается (хотя в sqlite лайта базе данных оно имеется). Это баг nd / lighttpd или же я туплю ? Попробуем другой WebDAV клиент, пожалуй, это будет cadaver.
nrg@dell:~$ cadaver
dav:!> open http://домен.ru:81/dav
dav:/dav/> propset suxx555.log suxx 777
dav:/dav/> propget suxx555.log suxx
Fetching properties for `suxx555.log':
Value of suxx is: 777


Таки выходит, глюк nd. Ну вот и все, осталось только придумать, для чего использовать такой замечательный протокол :)

Установка net-snmp-utils в RHEL

Добрый день. Возникла необходимость установить на RedHat x86_64 snmpwalk. Естественно в репозитории rhel его нет. snmpwalk находится в пакете net-snmp-utils . Поискав решение в интернете я поключил несколько репозиториев EPEL, REMI, RPMforge .

Комманды для x86_64 (RHEL 6) :

cd /tmp
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm --import https://fedoraproject.org/static/0608B895.txt
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install -y yum-priorities

Комманды для i386 (RHEL 6) :

cd /tmp
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
rpm -ivh rpmforge-release-0.5.3-1.el6.rf.i686.rpm
rpm --import https://fedoraproject.org/static/0608B895.txt
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install -y yum-priorities
 
Включаем репозитории и выставляем приоритет: 
Во всех репозиториях выставляем enabled=1 и после этой строчки добавляем priority=10 .
vim /etc/yum.repos.d/remi.repo
 
[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority
 
vim /etc/yum.repos.d/epel.repo
 
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&amp;arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
 
Но это не сработало. На http://mirror.centos.org/centos/5/os/x86_64/CentOS/ я нашёл 
нужные пакеты:
wget http://mirror.centos.org/centos/5/os/x86_64/CentOS/net-snmp-5.3.2.2-20.el5.x86_64.rpm
wget http://mirror.centos.org/centos/5/os/x86_64/CentOS/net-snmp-utils-5.3.2.2-20.el5.x86_64.rpm
wget http://mirror.centos.org/centos/5/os/x86_64/CentOS/net-snmp-libs-5.3.2.2-20.el5.i386.rpm
rpm -Uhv net-snmp-libs-5.3.2.2-20.el5.i386.rpm
rpm -Uhv net-snmp-5.3.2.2-20.el5.x86_64.rpm
rpm -Uhv net-snmp-utils-5.3.2.2-20.el5.x86_64.rpm

Теперь работает.

RPM

Простые манипуляции

Чтобы ... Нужно выполнить
Импортировать GPG ключ для проверки пакетов # rpm --import RPM-GPG-KEY
Посмотреть информацию о пакете, который лежит в текущем каталоге $ rpm -qip package-1.rpm
Посмотреть список файлов из неустановленного пакета $ rpm -qlp package-1.rpm
Посмотреть скрипты %pre- %post- install (uninstall) $ rpm -qp --scripts package-1.rpm
Посмотреть changelog пакета $ rpm -qp --changelog package-1.rpm
Установить пакет $ rpm -ivh package-1.rpm
Обновить или установить пакет $ rpm -Uvh package-1.rpm
Обновить пакет, если его предыдущая версия установлена в системе $ rpm -Fvh package-1.rpm
Узнать, какому пакету принадлежит данный файл $ rpm -qf /etc/sysctl.conf
Посмотреть информацию об уже установленном пакете $ rpm -qi initscripts
Посмотреть список всех установленных пакетов $ rpm -qa
Найти все пакеты, начинающиеся на gnome $ rpm -qa "gnome*"
Удалить пакет $ rpm -e package
Посмотреть даты инсталляции пакетов $ rpm -qa --last
Посмотреть зависимости необходимые пакету $ rpm -qR yum



Манипуляции посложнее

Использование ключа подсказки --aid

При инсталляции нового пакета иногда возникают ситуации, в которых требуется добавить еще один или несколько пакетов для удовлетворения зависимостей. К сожалению, по-умолчанию RPM не сообщает какой именно пакет нужен, сообщает только имя библиотеки и версию. Дело в том, что информация о все пакетах, входящих в официальный дистрибутив, содержится отдельно - в специальном пакете rpmdb-* (для версий дистрибутивов RedHat это будет rpmdb-redhat-<дата-релиза>, для CentOS - rpmdb-CentOS-<дата-релиза> и т.д.).
Например: rpmdb-CentOS-4.4-0.20060828
Т.е. необходимым условием является наличие этого пакета, проинсталлированного в системе.
Проверяем:
# rpm -ivh --aid samba-swat-3.0.9-1.3E.7.x86_64.rpm
error: open of /var/spool/up2date/samba-3.0.9-1.3E.7.x86_64.rpm failed: No such file or directory
error: Failed dependencies:
        samba = 0:3.0.9 is needed by samba-swat-3.0.9-1.3E.7
Здесь нам указали, что для инсталляции samba-swat потребуется обязательный пакет samba с версией 0:3.0.9
Обратите внимение на строчку "error: open of /var/spool/up2date/samba-3.0.9-1.3E.7.x86_64.rpm failed: No such file or directory". RPM сам попытался проинсталлировать пакет, но не нашел его в каталоге /var/spool/up2date. Если мы заглянем в конфигурационный файл /etc/rpm/macros.solve и исправим параметр %_solve_pkgsdir на местоположение всех пакетов дистрибутива, то после повторного выполнения команды, RPM найдет необходимый пакет и автоматически его проинсталлирует.
Например, все пакеты дистрибутива у нас живут в каталоге /opt/linux/redhat/as30u7/x86-64, который в свою очередь смонтирован по NFS с сервера. Тогда в файле /etc/rpm/macros.solve должно быть:
%_solve_pkgsdir /opt/linux/redhat/as30u7/x86-64
А вот результат выполнения команды:
# rpm -ivh --aid samba-swat-3.0.9-1.3E.7.x86_64.rpm
Preparing...                ########################################### [100%]
   1:samba                  ########################################### [ 50%]
   2:samba-swat             ########################################### [100%]


Чтобы добавить новые ключи, расширяющие возможности стандартного вывода:

$ cat >~/.popt 
rpm     alias --arch --qf '%{NAME}  %{VERSION}-%{RELEASE} %{ARCH}\n' \
        --POPTdesc=$\"list package name, version, release and arch\"
^D
Посмотреть оригинальные запросы можно в /usr/lib/rpm/rpmpopt-*.
Альтернативные форматы запросов можно помещать в /etc/popt или в ~/.popt

Чтобы увидеть результат выполним комнду: `rpm -q --arch postfix` 
 и сравним ее вывод с выводом этой команды: `rpm -q --arch kernel`
Посмотреть список полей $ rpm -q --querytags
Вывод дополнительных полей $ rpm -q --qf '%{NAME}\t%{VERSION}-%{RELEASE}.%{ARCH}\t%{LICENSE}\n' package-1
Проверить целостность установленного пакета $ rpm -V postfix
Проверить целостность всех установленных пакетов в системе $ rpm -Va
Откатить пакеты по состоянию на 1 мая $ rpm -Uhv --rollback 'may 1'




  • расшифровка результатов проверки целостности:
    `S.......` отличаются размеры файлов
    `.M......` отличаются флаги и права доступа
    `..5.....` отличается контрольная сумма
    `...D....` несоответствуют major/minor номер устройств
    `....L...` readLink(2) path mismatch
    `.....U..` отличаются владельцы
    `......G.` отличаются группы-владельцы
    `.......T` отличается время модификации
    ` c` - файл из секции %config, то есть явно конфигурационный файл
    ` d` - файл из секции %doc, аналогично - явно принадлежит к документации
    ` g` - файл-призрак, т.е. содержимое файла явно не существует в пакете (но возможно создается скриптами при инсталляции пакета)
    ` l` - файл из секции %license
    ` r` - файл из секции %readme

Сложные манипуляции

Как откатить систему пакетов по состоянию на определенное время

1. Добавить в файл /etc/rpm/macros
%_repackage_all_erasures 1
2. Для отката состояния использовать опцию --rollback
rpm -Uhv --rollback '12 hours ago'
требуется `%_repackage_all_erasures 1` в /etc/rpm/macros

среда, 16 октября 2013 г.

Загрузочная флешка с ОС Windows

Возникла задача сделать загрузочную флешку с Windows Vista . Почему именно Vista не важно, задача есть задача. Проблема заключается в том, что Windows 7 USB DVD Download Tool не работает с образами Windows XP и Windows Vista

Нам понадобится дистрибутив с операционной системой (на диске или в виде iso образа) и флешка/карта памяти объемом 4 Гб и больше.

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

Сначала нужно вставить флешку или и запустить Командную строку (это можно сделать как через меню Пуск, так и через Выполнить (нажимаем Win + R) с вводом команды cmd). Она имеет примерно такой вид:
Командная строка
Вводим команду diskpart и нажимаем Enter:
Вводим команду diskpart и нажимаем Enter
Чтобы отобразить список всех запоминающих устройств, вводим команду list disk и нажимаем Enter:
Список запоминающих устройств
Флешка на скриншоте выше является Диск 2. У вас она может быть под другим номером (1, например). Вводим команду select disk 2 и нажимаем Enter (2 - это номер диска. Если у вас флешка под номером 1 (Диск 1), то вводим команду select disk 1. Это очень важно!):

Выбираем диск
Вводим команду clean, которая очищает выбранный диск, и нажимаем Enter:
Очищаем выбранный диск
Вводим команду create partition primary и нажимаем Enter:
Создаем раздел на диске
Вводим команду active и нажимаем Enter:
Активируем раздел
Форматируем раздел. Для этого вводим команду format fs=NTFS и нажимаем Enter:
Форматируем раздел
Назначаем флешке букву командой assign letter=Z и жмем Enter:
Назначаем флешке букву
е этого в системе должна появится флешка. Вводим команду Exit и нажимаем Enter:

Выходим с Diskpart
Теперь копируем все файлы с диска с дистрибутивом на флешку. Если у вас есть ISO образ с дистрибутивом, то рекомендую воспользоваться утилитой 7-Zip. Устанавливаем эту утилиту и выбираем образ с Windows:
Выбираем образ с Windows
Нажимаем на кнопку Извлечь и указываете вашу флешку:
Распаковываем образ на флешку
Ждем пока файлы скопируються
Вот и все.

вторник, 15 октября 2013 г.

Cacti не рисует графики

Cacti не рисует графики - что делать?

imageОчень часто, когда мы начинаем писать свои скрипты получения данных, нас начинает преследовать так называемая проблема NaN - график не отображает данные. Когда я делал первые свои графики это просто ужас как бесило и заставляло меня ругать Cacti. Тратил кучу времени на то что вновь и вновь заново создавал источники данных, переписывал скрипт, искал чорт знает что вобщем. Потом, всеже успокоившись, решил перейти к методическому убийству данной проблемы. В результате набрел на хороший англоязычный ман по лечению данной проблемы и вольно перевел его для себя и глядишь тем пригодится кто только отправляется в битву за графики с Cacti. Итак пошаговое руководство в борьбе с NaN в Cacti.

Проверка Cacti логфайла

В первую очередь следует заглянуть в него. Обычно он находится по адресу /log/cacti.log. В противном случае необходимо заглянуть в настройки - Settings, Paths. В случае если в данном лог файле будет встречаться

SPINE: Host[...] DS[....] WARNING: SNMP timeout detected [500 ms], ignoring host '...'

Это означает вероятнее всего, что опрашиваемое вами устройство не может полностью отработать, то количество SNMP OID в SNMP запросе, которое к нему приходит. Для устранения этой ошибки следует уменьшит количество SNMP OID в запросе. Идем в Settings, Poller и уменьшаем значение The Maximum SNMP OID's Per SNMP Get Request. Следует установить значение в 1 и после того как poller начнет собирать требуемую статистику, следует его постепенно увеличить, выбрав подходящее для вашего случая значение.

Проверка функционирования вашего скрипта

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

su - cactiuser
/full/path/to/perl your-perl-script.pl p1 p2
... (проверяем ответ)

Если вы получаете данные посредством snmp запроса, то для проверки следует использовать snmpget, в запросе укажите OID, используйте тоже значение community и укажите версию snmp, туже что вы определили в cacti. Например опрос OID of .1.3.6.1.4.blablabla, со значением community "very-secret" и версией 2 SNMP опрашиваемый хост target это будет выглядеть вот так:

snmpget -c very-secret -v 2c target .1.3.6.1.4.blablabla
.... (проверяем ответ)


Проверяем Cacti Poller

В первую очередь проверьте наличие poller.php в cron. Эта программа вызывает базовый скрипт cmd.php, или spine, альтернативный метод запросов данных, написанный на C. Установить какой поллер используется встроенный или spine можно в настройках - Settings, Poller. Если вы хотите использовать Spine, то его следует установить отдельно, в базовую установку Cacti он не входит.
Теперь следует очистить лог файл /log/cacti.log (ну или переименуйте его, чтобы не было "старого мусора"). Затем измените настройки - Settings, Poller Logging Level установив значение DEBUG.
Теперь вам следует определить ID вашего запроса и ID вашего хоста. Найти требуемый вам ID запроса следует в меню Data Sources. ID хоста определяется в меню Devices.
Теперь следует запустить наш poller вручную и только для выбранного нами запроса данных. Делается это следующим образом -

php -q cmd.php id id

если вы используете Spine, то запустить такую проверку в режиме логгирования на уровне Debug можно вот так:

./spine --verbosity=5 id id

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

Проверка состояние MySQL

В большинстве своем данная проверка является излишней, и ее можно на первом этапе дабага проблемы просто опустить, но в случае если все далее описанные шаги, показывают что все работает правильно, то следует ее всеже сделать.
В дебаг логе, найдите запрос MySQL update соответствующий исследуемому хосту. Там будет SQL запрос который следует выполнить непосредственно на сервере mysql либо через терминал, либо средствами phpmyadmin. Проверьте что запрос сервером mysql выполняется корректно.

Проверка обновления RRD файла

Проверьте лог файл, в нем должны быть примерно такие строки:

rrdtool update filename --template ...

Для каждого RRD файла должна быть одна строка в логе.
RRD файлы должны создаваться изначально самим поллером. Если он их не создал то соответственно не пойдет и их обновление. Если их нет, проверьте Poller Cache в меню Utilities и проверьте там запрос к файлу.

Проверка владельца RRD файлов

Если rrd файлы были созданы с правами root-а, а поллер запущен в системи с привилегиями cactiuser , то естественно поллер не сможет обновить данные в RRD файле.

cd /var/www/html/cacti/rra
ls -l localhost*
-rw-r--r-- 1 root root 463824 May 31 12:40 localhost_load_1min_5.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_mem_buffers_3.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_mem_swap_4.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_proc_7.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_users_6.rrd


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

chown cactiuser:cactiuser *.rrd

Проверка пределов в RRD файле

Возможно причиной ваших проблем являются некорректно установленные пределы MAXIMUM и MINIMUM в RRD файле данных. Выполните следующее:

rrdtool fetch rrd_file AVERAGE

просмотрите 10-20 строк и если вы там видите NaN, то:

rrdtool info rrd_file

нас интересуют значения ds[loss].min ds[loss].max (loss - это частный пример - у вас будет имя ваших данных) и в результате вы увидите например такую картину:

ds[loss].min = 0.0000000000e+00
ds[loss].max = 1.0000000000e+02


В данном примере мы имеем MINIMUM = 0 и MAXIMUM = 100. Теперь следует сравнить значение ds.[…].type=ВЕЛИЧИНА, то есть мы убеждаемся что полученная нами ВЕЛИЧИНА находится в установленных значениях максимума и минимума.
Если значение не укладывается в установленные пределы , то недостаточно изменить пределы в Data Template, следует выполнить :

rrdtool tune rrd_file --maximum ds-name:new_ds_maximum>

где ds_name имя для данных определенное внутри RRD файла, а new_ds_maximum - новое значение максимума для данных. (Изменение минимума делается аналогично).
На этом шаге следует также проверить значения step и heartbeat интересующего нас RRD файла.

Проверка связи RRD файла и графика


Наконец следует проверить те ли хранилища данных использует график, который мы пытаемся получить. Идем в Graph Management и выбираем наш график. В данном режиме выбираем Turn On Graph Debug Mode и в появивишемся окне RRDTool Command: видим к каким RRD файлам обращается наш график (на это указывает выражение DEF).

Разное

До версии 0.8.6j, poller_output мог "вылезти за грани разума" ).
Эо обычно происходило из-за параметров настройки памяти в php.ini в значение 8 МБ. Измените данное значение по крайней мере на 64 MB.
Чтобы проверить это, выполните sql запрос через mysql cli (или phpmyadmin)
select count(*) from poller_output;
Для устранения проблемы выполните:
truncate table poller_output;
Данная проблема решена, начиная с версии 0.8.7

Установка через RPM

Некоторые RPM инсталяции некорректно встраивают поллер в cron - в результате поллер присутствует в cron в двух таблицах. Необходимо сделать проверку /etc/crontab и таблицы cron пользователя cactiuser (ну или как вы там у себя его назвали) и настроить cron так чтобы вызов шол однократно.

Не Nan , но значение 0

Во первых, внимательно пишите свои скрипты. Если в ы в скрипте используете внешние команды, то не надо надеятся на переменную $PATH. Указывайте нормальный, полный путь до команды /full/path/to/external/command

Во вторых, следите чтобы скрипт выполнялся быстро. Если в логах cacti вы видите “U”, это значит что Cacti устал ждать выполнения скрипта , и в результате вы словите NaN. Скрипт должен выполняться быстро! Но это уже ваша забота по его оптимизации.


Проблема : CACTID: ERROR: Problem with MySQL: 'Can't find file: 'poller_output' (errno: 2)'
 Проблема возникает из-за гибели таблички poller_output (обычное дело для myisam табличек при переполнении диска):

select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,DATA_FREE,CHECK_TIME,CHECKSUM,TABLE_COMMENT from information_schema.tables;
...
| poller_output                         | BASE TABLE  | NULL   |       NULL |      NULL | NULL                |     NULL | Can't find file: 'poller_output' (errno: 2)      
...
Решается  :
mysql -uroot -p -e'repair table cacti.poller_output';

или

mysql -uroot -p -e'truncate table poller_output';