Показаны сообщения с ярлыком linux. Показать все сообщения
Показаны сообщения с ярлыком linux. Показать все сообщения

вторник, 4 октября 2011 г.

Узнать текущие параметры загруженного модуля.

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

$ modinfo -p <module_name>
$ cat /sys/module/<module_name>/parameters/<param_name>

четверг, 28 июля 2011 г.

Инвентаризация. Где посмотреть в Linux какое железо установлено.

Небольшая памятка для себя.

Как узнать общий объем оперативной памяти:
cat /proc/meminfo | grep Total | head -1

Как узнать какие процессоры установлены и их характеристики:
cat /proc/cpuinfo

Как посмотреть параметры видеокарты
xdpyinfo
glxinfo
xvinfo


Как получить список PCI-устройств и их характеристик:
/sbin/lspci -v

Как не разбирая корпус посмотреть модель материнской платы:
sudo dmidecode

Краткая информация о SCSI-устройствах:
cat /proc/scsi/scsi

Более подробная информация о конкретном SCSI-устройстве:
sudo hdparm -i /dev/sda

среда, 4 мая 2011 г.

Linux IPSec + Cisco. Тунель между Cisco и Linux.

В праздничные дни внезапно упал канал между филиалом и главным офисом. Работать операторы могли через терминальный сервер, однако, несколько спец. программ работают только напрямую. Пришлось поднимать туннель между центральным маршрутизатором (cisco3800) и шлюзом под Linux (Fedora8). Небольшая заметка для себя.
Итак, имеем филиальский сервер, который выступает шлюзом в интернет.
$ rpm -q ipsec-tools
ipsec-tools-0.7-3.fc8
- Подсеть филиала 172.23.0.0/16
- Подсеть главного офиса - 10.0.0.0/8
- Подсеть2 главного офиса - 192.168.0.0/16
Приведенные выше подсети внутри разбиты на части, но с точки зрения маршрутизации, все они находятся за центральным маршрутизатором, так что имеет смысл определить только данные ("крупные") подсети.
- Внешние адреса с обеих сторон (1.1.1.1-linux и 2.2.2.2-cisco)


Конфигурационный файл - racoon.conf
Приведу только несколько измененных директив.

Нужно описать удаленный узел с помощью ключевого слова remote.
Если определено ключевое слово anonymous, то его параметры применяются ко всем удаленным узлам, которые явно не описаны в конфиге.

remote 2.2.2.2
{
# режим проверки подлинности
exchange_mode main,base;

# время жизни безопасного соединения (SA)
lifetime time 8 hour ;

# указываем в случае, если racoon только принимает запросы на соединение, т.е. пассивно ждет пакетов от инициатора. В этом случае, если нет заданных политик в базе данных политик безопасности (SPD — Security Policy Database), racoon выберет первое предложение, переданное инициатором и сгенерирует на его основе новую политику.
generate_policy on;

# пытаться ли участвовать в инициировании соединения или пассивно ждать
passive on ;
# phase 1 proposal (for ISAKMP SA)
proposal {
# Определяем алгоритм шифрования, используемый при проверке подлинности
encryption_algorithm 3des;
# Указываем алгоритм расчёта хэша, используемый на первой фазе согласования между узлами.
hash_algorithm sha1;
# Определяет метод проверки подлинности, используемый при согласовании узлов. В данном случае для проверки подлинности применяются предварительные общие ключи.
authentication_method pre_shared_key;
# Указывает номер группы Диффи-Хелмана для выбора динамически создаваемых ключей сеанса. У меня используется группа из 1024 бит.
dh_group 2 ;
}
}

Поля в sainfo описывают вторую фазу соединения между узлами IPsec — основу IPsec-соединения (включая используемый поддерживаемый алгоритм шифрования) и способ обмена ключами.

sainfo address 172.23.0.0/16 any address 10.0.0.0/8 any
{
# Определяет протокол обмена ключами Диффи-Хелмана, задающий алгоритм, по которому узлы IPsec устанавливают общий временный ключ сеанса для второй фазы соединения IPsec.
pfs_group 2;

# Этот параметр задаёт срок жизни SA и может быть определяться временем или объёмом данных в байтах.
lifetime time 1 hour ;

# Указываем поддерживаемые алгоритмы шифрования для фазы 2
encryption_algorithm 3des, blowfish 448, rijndael ;

# Перечисляем поддерживаемые алгоритмы хэша для проверке подлинности.
authentication_algorithm hmac_sha1, hmac_md5 ;

# Определяем алгоритм сжатия Deflate для поддержки сжатия IP-заголовков (IP Payload Compression, IPCOMP), что может увеличить скорость передачи IP-датаграм по медленным соединениям.
compression_algorithm deflate ;
}

sainfo address 172.23.0.0/16 any address 192.168.0.0/16 any
{
pfs_group 2;
lifetime time 1 hour ;
encryption_algorithm 3des, blowfish 448, rijndael ;
authentication_algorithm hmac_sha1, hmac_md5 ;
compression_algorithm deflate ;
}


Для управления базами безопасных соединений и политик безопасности (SAD/SPD) используется утилита setkey. Более подробное описание можно узнать из man setkey. Я приведу конфигурационный файл, описывающий создание безопасного соединения между подсетями филиала и центрального офиса:

#!/sbin/setkey -f
flush;
spdflush;

spdadd 172.23.0.0/16 10.0.0.0/8 any -P out ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
spdadd 10.0.0.0/8 172.23.0.0/16 any -P in ipsec esp/tunnel/2.2.2.2-1.1.1.18/require;

spdadd 172.23.0.0/16 192.168.0.0/16 any -P out ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
spdadd 192.168.0.0/16 172.23.0.0/16 any -P in ipsec esp/tunnel/2.2.2.2-1.1.1.1/require;


Первый запуск:
service racoon start

Смотрим лог в /var/log/racoon.log
Видим первую ошибку
pfkey X_SPDDUMP failed: No such file or directory

# setkey -D 
No SAD entries. 
Создание записей в БД безопасности из файла  
# setkey -f /etc/racoon/ipsec-tools.conf

Удаляем старые маршруты через маршрутизатор c2801:
route del -net 10.0.0.0 netmask 255.0.0.0 gw 172.23.0.1
route del -net 192.168.0.0 netmask 255.255.0.0 gw 172.23.0.1


Настройка iptables:
iptables
*filtet
-A INPUT -p esp -s 2.2.2.2/32 -j ACCEPT
-A INPUT -p udp --dport 500 -s 2.2.2.2/32 -j ACCEPT

*nat
-A POSTROUTING -s 172.23.0.0/16 -d 10.0.0.0/8 -j ACCEPT
-A POSTROUTING -s 172.23.0.0/16 -d 192.168.0.0/16 -j ACCEPT
-A POSTROUTING -s 172.23.0.0/16 -d ! 10.0.0.0/8 -o eth1 -j SNAT --to-source 1.1.1.1
-A POSTROUTING -s 172.23.0.0/16 -d ! 172.23.0.0/16 -o eth1 -j SNAT --to-source 1.1.1.1

service iptables restart


На стороне cisco филиала
удалить маршрутизацию в подсети, оставив маршрут по умолчанию на linux-шлюз.

no ip route 10.0.0.0 255.0.0.0 192.168.255.1
no ip route 192.168.0.0 255.255.0.0 192.168.255.1
ip route 0.0.0.0 0.0.0.0 172.23.1.254


На стороне Cisco в ЦО.
Не забыть применить crypto map на исходящем интерфейсе, а также указать какие интерфейсы участвуют в nat (ip nat inside и ip nat outside)

****
crypto isakmp policy 25
encr 3des
authentication pre-share
group 2
lifetime 3600
****

crypto isakmp key PASSWORD address 1.1.1.1 no-xauth
crypto ipsec transform-set BRANCH esp-3des esp-sha-hmac

crypto map IPSEC_MAP 48 ipsec-isakmp
description tunnel_to_Branch
set peer 1.1.1.1
set transform-set BRANCH
match address BRANCH-1

ip nat inside source list ALLOW_NAT interface GigabitEthernet0/1.40 overload

ip access-list extended BRANCH-1
permit ip 10.0.0.0 0.255.255.255 172.23.0.0 0.0.255.255
permit ip 172.16.0.0 0.15.255.255 172.23.0.0 0.0.255.255
permit ip 192.168.0.0 0.0.255.255 172.23.0.0 0.0.255.255

ip access-list extended ALLOW_NAT
deny ip any 10.0.0.0 0.255.255.255
deny ip any 172.16.0.0 0.15.255.255
deny ip any 192.168.0.0 0.0.255.255
permit ip any host 1.1.1.1
 *****


Литература:
man racoon.conf, man setkey, документация с сайта cisco.com

четверг, 10 марта 2011 г.

Установка расширения ffmpeg-php на rhel 5.5.

Установка репозитариев:
cat /etc/yum.repos.d/local.repo
[Local]
name=local
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0

cat /etc/yum.repos.d/dag.repo
[Dag]
name=dag
baseurl=http://apt.sw.be/redhat/el5/en/i386/dag
enabled=1
gpgcheck=0

Скачиваем дополнительные репозитории epel и remi:
wget -c http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget -c http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Установка необходимых пакетов:
yum -y --enablerepo=remi,epel install mysql-server php php-devel
yum -y --enablerepo=remi,epel install php-xml (модуль dom.so)
yum -y --enablerepo=remi,epel install php-mbstring php-mcrypt php-intl php-gd
yum -y install gcc httpd re2c
yum -y install ffmpeg ffmpeg-devel libvorbis-devel

Скачиваем сам пакет ffmpeg-php:
wget -c http://switch.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

tar xjf ffmpeg-php-0.6.0.tbz2

cd ffmpeg-php-0.6.0
phpize
./configure --enable-static --disable-debug
make
вылазит ошибка «error: PIX_FMT_RGBA32 undeclared»
в файле ffmpeg_frame.c меняем PIX_FMT_RGBA32 на PIX_FMT_RGB32

cp modules/ffmpeg.so /usr/lib/php/modules

echo "extension=ffmpeg.so" > /etc/php.d/ffmpeg.ini

Если в логах вылазит предупреждение «Persistent movies have been disabled in php.ini», то:
cat << EOF >> /etc/php.ini

[ffmpeg]
ffmpeg.allow_persistent=on
EOF

Также выставить date = Europe/Kiev или какой у вас часовой пояс.

service httpd restart
chkconfig httpd on

Проверка какие модули установлены и их параметры:
cat << EOF >> /var/www/html/index.php
<?php
phpinfo();
?>
EOF

Тестирование ffmpeg (естественно файл предварительно скопировать на сервер):

mkdir -p /var/www/html/tt
chown apache:apache /var/www/html/tt
cp test.avi /var/www/html/tt

cat /var/www/html/tt/test.php

<?php
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

if(!extension_loaded($extension)) {
dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}

$fil='/var/www/html/tt/test.avi';
$frame = 6;
$time = time ();
$movie = new ffmpeg_movie($fil, 1);

$duration = $movie->getDuration();

if ( $duration > 6 ){
$minutes = floor($movie -> getDuration ()/ 60);
$seconds = $movie -> getDuration ()% 60 ;
}

echo 'File: <font color="red">' . $_SERVER [ 'DOCUMENT_ROOT' ] .'/tt/test.avi</font> longs ' . $duration . ' seconds<br />' ;

$img = $_SERVER [ 'DOCUMENT_ROOT' ]. '/tt/' . $time . '_' . $frame . '.jpg' ;

$ff_frame = $movie -> getFrame ( $frame );
if ( $ff_frame ){
$gd_image = $ff_frame -> toGDImage ();
if ( $gd_image ) {
imagepng ( $gd_image , $img );
imagedestroy ( $gd_image );
}
}

echo $minutes . ' min ' . $seconds . ' sec.<br />' ;

echo '<img src="' . $time . '_' . $frame . '.jpg" />' ;

$franecount = $movie->getFrameCount();
$framerate = $movie->getFrameRate();
$filename = $movie->getFilename();
$comment = $movie->getComment();

echo "<br /><br />number of frames in a movie or audio file.".$franecount."<br />";
echo "frame rate of a movie in fps".$framerate."<br />";
echo "path and name of the movie file or audio file.".$filename."<br />";
echo "comment field from the movie or audio file.".$comment."<br />";
?>
 


Заходим на http://YOUR_SERVER_IP/index.php и смотрим страницу с модулями, ищем ffmpeg, если есть смотрим http://YOUR_SERVER_IP/tt/test.php.
Если что-то не получилось посмотрите сначала в файл ошибок вашего web-сервера.

Литература:

http://linuxhostingsupport.net/blog/error-pix_fmt_rgba32-undeclared
http://itblog.su/php-ffmpeg-ustanovka-na-centos-5.html

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

Обновление RDAC на сервере SunFire X4450

Субботний вечер. Сижу дома, никого не трогаю. Звонит ИТ-директор с фразой "все пропало, шеф". Хорошее начало. Оказывается DBA увидел в /var/log/messages на сервере записи типа: "MCE: warning: using only 7 banks". Гугление приводит на errata RHSA-2008:0612-25 (http://rhn.redhat.com/errata/RHSA-2008-0612.html), в котором говорится, что "* the kernel currently expects a maximum of six Machine Check Exception (MCE) banks to be exposed by a CPU. Certain CPUs have 7 or more, which may have caused the MCE to be incorrectly reported." Т.е. надо обновляться до новой версии ядра (текущая 2.6.18-92).

предварительный этап:

делаю бэкап настроек сервера, параллельно dba доделывает бэкап Oracle. Скачиваю последнее ядро для RHEL 5.5 - kernel-2.6.18-194.32.1 и kernel-devel-2.6.18-194.32.1.

С сайта lsi.com/rdac скачиваю последний RDAC - rdac-LINUX-09.03.0C05.0439.

Обновление ядра:
# rpm --test -ivh /root/kernel-2.6.18-194.32.1.el5.x86_64.rpm /root/kernel-devel-2.6.18-194.32.1.el5.x86_64.rpm
warning: /root/kernel-2.6.18-194.32.1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        ecryptfs-utils < 44 conflicts with kernel-2.6.18-194.32.1.el5.x86_64

Ладно, ecryptfs мне не нужен, удаляю пакеты
# rpm -e ecryptfs-utils.x86_64
# rpm -e ecryptfs-utils.i386

# rpm -ivh /root/kernel-2.6.18-194.32.1.el5.x86_64.rpm /root/kernel-devel-2.6.18-194.32.1.el5.x86_64.rpm
warning: /root/kernel-2.6.18-194.32.1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:kernel-devel           ########################################### [ 50%]
   2:kernel

Закомментировать в /etc/fstab все, что касается разделов на стойках.
Перегружаюсь в новое ядро и ловлю на этапе старта кучу ошибок I/O. Недолго думая, вытаскиваю из сервера все FC-линки.
Теперь новое ядро загрузилось без проблем, далее установка RDAC.
Распаковать архив
make uninstall
make clean
make
make install
Изменить/добавить запись в файле /boot/grub/grub.conf
title Red Hat Enterprise Linux Server (2.6.18-194.32.1.el5) with MPP support
        root (hd0,0)
        kernel /vmlinuz-2.6.18-194.32.1.el5 ro root=LABEL=/ quiet elevator=deadline usb-handoff
        initrd /mpp-2.6.18-194.32.1.el5.img

Перезагрузка, подключение FC-линков.
Проверка /opt/mpp/lsvdev, fdisk -l

понедельник, 10 января 2011 г.

Обновление firmware на IBM xSeries 366.

Собственно ничего сложного. IBM предоставляет неплохую графическую утилиту UpdateXpress, но новая версия (4.30) почему-то зависает на этапе сравнения обновлений. Выход - обновить с помощью командной строки, благо такая опция имеется. Поскольку все вопросы касательно получения/сравнения/обновления детально описаны в IBM UpdateXpress System Pack Installer User's Guide, опишу только свои действий.
1) С помощью графического интерфейса выкачал обновления для данной OS (rhel4 64bit) и данного MT (machine type). Не потому, что не осилил CLI, а потому, что не имело смысла качать заново.
2) На этапе сравнения установленных и выкачанных прошивок инсталлятор показывает, что идет процесс и он чем-то сильно занят. В логах /var/log/IBM_support/*.log ничего подозрительного - прибить (закрыть) инсталлятор
3) Если повторный запуск инсталлятора из командной строки завершается ошибкой "Exiting from the current instance is displayed when only one instance of UXSPI is running." решать запуском с опцией -semdestroy
4) ./uxspi430.rhel4 up -L -l 8863-04.11.2011
Querying Updates done
Comparing Updates
(1) [ ] RSA II Linux Daemon
        Severity          : Recommended
        Reboot            : Reboot Required to take effect
        Update ID         : ibm_svc_rsa2_hlp253a_linux_32-64
        Requisites        : None

        Update            : ibmusbasm64
        New Version       : 1.53
        Installed Version : 1.53

(2) [ ] Adaptec adp94xx SAS Controller Driver
        Severity          : Recommended
        Reboot            : Reboot Required to take effect
        Update ID         : ibm_dd_adp94xx_1.0.8-11_rhel4_32-64
        Requisites        : None

        Update            : adp94xx.ko
        New Version       : 1.0.8.11
        Installed Version : 1.0.8-13

(3) [ ] Broadcom NetXtreme TG3 rhel 4 driver
        Severity          : Recommended
        Reboot            : Reboot Required to take effect
        Update ID         : brcm_dd_nic_tg3-3.92n_rhel4_32-64
        Requisites        : None

        Update            : tg3.ko
        New Version       : 3.92n
        Installed Version : 3.110g

(4) [*] IBM ServeRAID 8i, 8k, 8k-l, 8s SAS Controller Driver for RHEL 4
        Severity          : Critical
        Reboot            : Reboot Required to take effect
        Update ID         : ibm_dd_aacraid_1.1.5.24701_rhel4_32-64
        Requisites        : None

        Update            : aacraid.ko
        New Version       : 1.1.5.24701
        Installed Version : 1.1-5[24551]

(5) [ ] BIOS Flash Update
        Severity          : Recommended
        Reboot            : Reboot Required to take effect
        Update ID         : ibm_fw_bios_zue166a_linux_intel32
        Requisites        : None
        New Version       : 1.12 (ZUE166A)
        Installed Version : 1.12 (ZUE166A)

(6) [ ] IBM Preboot Diagnostics Flash Update
        Severity          : Recommended
        Reboot            : Reboot Required to take effect
        Update ID         : ibm_fw_diag_zuyt38a_linux_i386
        Requisites        : None
        New Version       : 1.10 (ZUYT38A)
        Installed Version :      (ZUYT38A)

(7) [*] IBM ServeRAID 8i BIOS and Firmware Update
        Severity          : Recommended
        Reboot            : Reboot Required to take effect
        Update ID         : ibm_fw_aacraid_8i-5.2.0-16002_linux_32-64
        Requisites        : None

        Update            : ServeRAID 8i Firmware
        New Version       : 5.2-0-16002
        Installed Version : 5.2-0-15432

(8) [ ] Online Broadcom NetXtreme and NetXtreme II Firmware Utility
        Severity          : Recommended
        Reboot            : Reboot Required to take effect
        Update ID         : brcm_fw_nic_2.1.5b_linux_32-64
        Requisites        : None

        Update            : 5704 (#1)
        New Version       : 3.41
        Installed Version : 3.41

        Update            : 5704 (#2)
        New Version       : 3.41
        Installed Version : 3.41

(9) [ ] Remote Supervisor Adapter II Update  IBM Systems x3800, x3850, and x3900 (formerly x260, x366, and x460)
        Severity          : Recommended
        Reboot            : Not Required
        Update ID         : ibm_fw_rsa2_zuep66a_linux_i386
        Requisites        : None
        New Version       : 1.19 (ZUEP66A)
        Installed Version :      (ZUEP66A)

(10) [ ] IBM Optical drive firmware update
        Severity          : Non-Critical
        Reboot            : Not Required
        Update ID         : ibm_fw_optical_ujda-1.2_linux_32-64
        Requisites        : None
        New Version       : 1.2_02 (0000)
        Installed Version : Undetected

(11) [*] IBM Baseboard Management Controller Flash Update
        Severity          : Non-Critical
        Reboot            : Not Required
        Update ID         : ibm_fw_bmc_z2bt05j_linux_i386
        Requisites        : None
        New Version       : 2.11 (Z2BT05j)
        Installed Version : 2.11 (Z2BT05I)

Legend:
Type the item number to toggle selected [*] or not selected [ ]
Type 'a' to accept the menu
Type 'f' to select all entries
Type 'q' to quit without processing the entries
[1-11,a,q,f]> a


Copying update files to temporary directory...
(1 of 3) Running IBM ServeRAID 8i, 8k, 8k-l, 8s SAS Controller Driver for RHEL 4.Error code=3
(2 of 3) Running IBM ServeRAID 8i BIOS and Firmware Update............. done
(3 of 3) Running IBM Baseboard Management Controller Flash Update................... done

There were problems running some updates.  See /var/log/IBM_Support/UXSPI_dbmng01.office.com_8863_XxXxXxX_20110106122515.514000+120.log for details.
Finished applying selected updates


(1) IBM ServeRAID 8i, 8k, 8k-l, 8s SAS Controller Driver for RHEL 4
        Name: IBM ServeRAID 8i, 8k, 8k-l, 8s SAS Controller Driver for RHEL 4
        New Version:    1.1.5.24701
        Reboot:         Reboot Required to take effect
        Requisites:
        Status:         ***Install did not succeed***:
                        The update could not be performed, because the system is
                        currently running a certified driver provided by the
                        Linux distribution.  The certified driver can be overridden
                        by using the -o or --linux-override command line argument

(2) IBM ServeRAID 8i BIOS and Firmware Update
        Name: IBM ServeRAID 8i BIOS and Firmware Update
        New Version:    5.2.0-16002
        Reboot:         Reboot Required to take effect
        Requisites:
        Status:         Successfully Installed

(3) IBM Baseboard Management Controller Flash Update
        Name: IBM Baseboard Management Controller Flash Update
        New Version:    2.11 (Z2BT05j)
        Reboot:         Not Required
        Requisites:
        Status:         Successfully Installed

2 update(s) succeeded
0 update(s) were not installed because applicable hardware is not present
1 update(s) failed
See UXSPI_dbmng01.office.com_8863_XxXxXxX_20110106122515.514000+120.log file in IBM_Support directory for details.

5) reboot для закрепления/проверки результата.


Литература:
http://publib.boulder.ibm.com/infocenter/toolsctr/v1r0/index.jsp?topic=%2Fuxspi%2Fuspi_c_customization_uxsps.html 
Документация IBM UpdateXpress System Pack Installer User's Guide

среда, 22 декабря 2010 г.

Подключение к консоли PN0108 (Power over the NET) в Linux.

Поскольку для работы используется Fedora14, то и настройка/управление данным устройством будет из данного дистрибутива. Зачем надо было настраивать? На одном из филиалов один сервер бывало не мог загрузиться без нажатия F1 (из-за проблем с одной из подсистем). Поскольку в серверную доступ имееет только ограниченный круг лиц, то пару раз возникала необходимость ехать на работу в выходной день (не мне, местному админу).

Способы подключения:
- Управление через пункт меню CN-6000 (IP KVM) или KN9116.
- консольный порт RS-232

1. Скачать Java(tm) Communication API под Linux (файл comm3.0_u1_linux.zip на текущий момент).
2. Подключить устройство к COM-порту
3. Прочитать специфические для платформы рекомендации.
4. Распаковать архив
5. Скопировать из архива библиотеку libLinuxSerialParallel.so
cp libLinuxSerialParallel.so /usr/lib/
ldconfig -v | grep -i serial
6. Скопировать comm.jar и javax.comm.properties в JRE/lib (вместо JRE подставить путь, куда установлена Java Runtime Environment)
7. Попробовать запустить JRE/bin/java -jar PowerMan.jar
Если не запускается:
1 ошибка
java.io.IOException: javax.comm: platform driver class name = null
(Check 'driver' property in javax.comm.properties)

скопировать javax.comm.properties в директорию с APPLICATION

2 ошибка
Exception in thread "main" java.lang.RuntimeException: 
Error opening "/dev/ttyS0"  Permission denied

Либо нет прав доступа к /dev/ttyS0 и нужно запускать под root, либо изменить права на /dev/ttyS0.
Также может возникнуть такая ситуация, если вы уже подключились к устройству через minicom, например.

8. При первом запуске пользователь - administrator, пароль - password.

Подключение с помощью консоли:
параметры 38400N1, отключить контроль потока
Для появления приглашения набрать 3 раза ?, т.е. ???

четверг, 9 декабря 2010 г.

Плагин для nagios check_wh.

Итак, пока помню опишу. Все мы страдаем забывчивостью. За доменом необходимо следить. Серьезно. Никто не погладит по головке, если Ваш домен сначала "заморозят", а потом пометят как удаленный. В моей организации используется Nagios для мониторинга кучи серверов. Филиалы имеют свои внешние домены и пару раз случалась ситуация, когда местная бухгалтерия забывала проплатить за доменное имя. Почему то вчера в голову стукнула идея написать скрипт, который бы мониторил это дело и сообщал когда стоит начать шевелиться. Поискав по просторам интернета, нашел пару скриптов под Nagios - один на Perl, другой на bash, но ни один из мне не понравился, так как не выводил количество дней до deadline. Проанализировав результаты команды `whois DOMAIN` для пары десятков украинских и российских доменов, была выведена тенденция и написан небольшой скрипт.
Немного WIKI: WHOIS — сетевой протокол прикладного уровня, базирующийся на протоколе TCP (порт 43). Основное применение — получение регистрационных данных о владельцах доменных имен, IP-адресов и автономных систем.
Теперь о плагине - ушло 4-5 часов на написание (с учетом всех отрывов от написания) и тестирование. Оказалось все просто, однако, будет работать ТОЛЬКО для записей, имеющих значения в полях Status и expire (что поделать, не все придерживаются одинакового синтаксиса в БД whois).
Внимание счастливым админам, не имеющим записей о времени истечения срока действия ваших доменов. Вам остается либо помнить этот знаменательный день, предварительно уточнив его у провайдера, либо попросить/заставить провайдера внести в БД WHOIS необходимые данные.

Собственно сам скрипт.

#!/bin/bash
# Script for checking whois status
# Usage $0 arg1 warning critical

# аргументы [WARNING_THRESHOLD] [CRITICAL_THRESHOLD] опциональные, если их не передавать - будут использоваться значения по умолчанию - 40 и 25 соот.
if [ $# -lt 1 ]; then
echo "Usage: `basename $0` DOMAIN [WARNING_THRESHOLD] [CRITICAL_THRESHOLD]"
exit 3
fi;

# текущая дата в секундах со времен 1970-01-01 00:00:00 UTC
CUR_DATE=`date +%s`

# проверка на передачу аргументов WARNING и CRITICAL. Если WARN задан и больше CRIT, то использовать заданное значение. Если нет - то принять значение по умолчанию 40 (выставил самостоятельно)
if [ $2 ] && [ $2 -gt $3 ]; then
WH_WARN=$2
else
WH_WARN=40
fi;

if [ $3 ]; then
WH_CRIT=$3
else
WH_CRIT=25
fi;

# вывод для отладки
#echo "WH_CRIT=$WH_CRIT"
#echo "WH_WARN=$WH_WARN"
#echo "CUR_DATE=$CUR_DATE"

# запись в переменную результата
WH_RESULT=`whois $1 2>/dev/null`
#echo "WH_RESULT=$WH_RESULT"

# если в результате есть "No entries found for", то выдать на стандартный вывод сообщение и выйти с кодом 3. Насчет кодов выхода: Nagios plug-in development guidelines говорит использовать код 0 для статуса OK, 1 - WARNING, 2 - CRITICAL, 3 - UNKNOWN. Nagios от плагина получит код возврата и строку на стандартном выводе (код используется для определения состояния службы, а текст как информационное сообщение для отправки в почту, вывода на экран и т.п.)
if [ `echo "$WH_RESULT" | grep "No entries found for" | wc -l` -eq 1 ]; then
echo "Domain $1 not found in WHOIS_DB"
exit 3
fi;

# самая "страшная" часть. Положительный результат команды `whois DOMAIN` парсится на наличие строки status. Если строка найдена (в формате "status: OK-UNTIL 20110914000000"), из неё вырезается последняя часть с 8 цифрами - дата (YYYYMMDD) истечения срока действия домена.
tmp2=`echo "$WH_RESULT" | grep status`
#echo "$tmp"
if [ "$tmp2" ]
then
# собственно здесь последняя часть с 8 цифрами - дата (YYYYMMDD) истечения срока действия домена.
tmp0=`expr substr \`echo "$tmp2" | awk {'print $3'}\` 1 8`
# число секунд от 1970-01-01 00:00:00 UTC до определенной выше даты
WH_DATE=`date --date "$tmp0" +%s`
# echo "WHDATE=$WH_DATE"
else
# Если строка status не найдена - ищется строка expire в формате "Record expires: 2011-03-20"
tmp=`echo "$WH_RESULT" | grep -i expire`
# Если найдена такая строка - вырезается последняя часть, из которой удаляются знаки '-'
if [ "$tmp" ]
then
tmp0=`echo "$tmp" | awk {'print $3'} | tr -d -`
# число секунд от 1970-01-01 00:00:00 UTC до определенной выше даты
WH_DATE=`date --date "$tmp0" +%s`
# echo "WHDATE=$WH_DATE"
fi;

fi;

# если переменная пустая, т.е. НЕ содержит записей о статусе или сроке окончания действия домена - выходм с кодом UNKNOWN
if [ -z "$WH_DATE" ]; then
echo "Unknown data for $1 from whois server."
exit 3
fi;

# вычисление разницы во времени в секундах, а затем деление на 86400 (числосекунд в одном дне)
X=`expr $WH_DATE - $CUR_DATE`
X=`expr $X / 86400`
#echo "X=$X"
if [ $X -gt $WH_WARN ]; then
echo "Whois data is valid for $1. $X days to expire. See http://hostmaster.net.ua/?domadv"
exit 0
fi;
if [ $X -lt $WH_WARN ] && [ $X -ge $WH_CRIT ]; then
echo "Whois data is valid for $1. $X days to expire. See http://hostmaster.net.ua/?domadv"
exit 1
fi;
if [ $X -lt $WH_CRIT ] && [ $X -ge 0 ] ; then
echo "Whois data is steel valid for $1, but will be expired in `echo "$X" | tr -d -` days. See http://hostmaster.net.ua/?domadv"
exit 2
else
echo "Whois data is NOT valid for $1. Was expired for `echo "$X" | tr -d -` days. See http://hostmaster.net.ua/?domadv"
exit 2
fi;

PS: всегда welcome здравая критика и предложения.

Литература:
http://ru.wikipedia.org/wiki/WHOIS
http://jon.netdork.net/2009/03/09/nagios-and-monitoring-whois
http://nagiosplug.sourceforge.net/developer-guidelines.html
http://hostmaster.net.ua/?domadv

суббота, 20 ноября 2010 г.

Настойка 3G модема Huawei E1550 в Fedora14.


Недавно было приобретено для нескольких сотрудников данное устройство (Huawei E1550) для работы из дому. Но, поскольку один из сотрудников уже провел себе кабельный интернет, один из модемов оказался не у дел. Я решил настроить его на своем стареньком домашнем компьютере. Установка будет проходить на Fedora14, думаю на других Redhat-based дистрибутивах не будет сильно отличаться.
Итак, открываем коробочку с модемом и читаем инструкции, из которых убеждаемся в необходимости вставить SIM-карточку для начала работы. Подключаем в USB-разъем компьютера, в трее KDE лезет окошечко с логотипом похожим на CDROM, т.е. Данное устройство было опознано Linux не как модем, а как CD-ROM. Это не удивительно, ведь модем рассчитан на работу в среде Windows, где он автоматически устанавливает программное обеспечение необходимое для его работы. Именно благодаря эмуляции CD-ROM'а и возможна автоматическая установка. Модем виден в папке Windows "Мой компьютер" как CD-ROM и как съемный диск. Виртуальный CD, содержащий Windows программы, бесполезен под Linux и мешает определиться модему, поэтому его необходимо отключить.
Далее даем команду lsusb, убеждаемся что устройство присутствует в системе:
$ lsusb
....
Bus 003 Device 004: ID 12d1:1446 Huawei Technologies Co., Ltd.
....

Отключение эмуляции CD-ROM

Отключение будет проходить в 2 этапа: деактивация cdrom-устройства, дополнительная настройка модема.

Этап 1:
Устанавливаем утилиту usb_modeswitch, предназначенной для дополнительной настройки 3G-модемов под Linux, конкретно она деактивирует cdrom-устройства и активирует модем, поддерживает устройства следующих производителей — Huawei, T-Mobile, Vodafone, Option, ZTE, Novatel.
$ sudo yum -y install usb_modeswitch

Настраиваем файл конфигурации программы usb_modeswitch
cat << EOF >> /etc/usb_modeswitch.conf

DefaultVendor = 0x12d1
DefaultProduct = 0x1446 MessageEndPoint = "0x01"
MessageContent = "55534243000000000000000000000011060000000000000000000000000000"
EOF

Теперь переключаем устройство в режим модема:
$ sudo usb_modeswitch -H -v 12d1 -p 1001

После этого значок CD-ROM пропадает на некоторое время, а через 30-60 секунд снова появляется. Команда отключила эмуляцию CD-ROM, udev распознал собственно модем, а затем снова произошла эмуляция CD-ROM.
Но этого достаточно чтобы в директории /dev появились три новых устройства: ttyUSB0-ttyUSB2.
$ ls -1 /dev/ttyUSB*
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2

Этап 2:
Отключаем эмуляцию CDROM насовсем с помощью minicom. Для начала установим пакет.
$ sudo yum -y install minicom

Затем даем команду:
$ sudo minicom -s
  1. Выбираем пункт «Настройка последовательного порта», далее в строке: "Какую настройку изменить?" печатаем А. Курсор перейдет в верхнюю строку "А - Последовательный порт: /dev/modem". Вместо /dev/modem пишем /dev/ttyUSB0.
  2. нажимаем ENTER, верхнее окно пропадает, и нажимаем ESC чтобы выйти из режима конфигурации.
  3. Появится окошко "Инициализируется модем", затем на экране выведется ответ на команду инициализации.
  4. Введите команду AT и нажмите ENTER. Появится ответ - OK.
  5. Далее нужно ввести команду AT^U2DIAG=0 и нажать ENTER.
  6. Теперь нажимаем CTRL+A потом Z. Выбираем команду "Выход без сброса"- Q и подтверждаем выход.

Чтобы убедиться в этом, вытащим его из гнезда USB, а затем снова включим (лучше в другое гнездо). Если никакого CD-ROM'а не появляется, повторим команду:
$ ls -1 /dev/ttyUSB*
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2

Настройка модемного соединения с Интернет

Настраивать модемное соединение можно двумя основными способами: писать скрипты ррр (Point-to-Point-Protocol), либо использовать программы-посредники. В моем случае дозвон осуществлялся с помощью wvdial. Установим программу:
$ sudo yum -y install wvdial

Настроим конфигурацию в файле /etc/wvdial.conf
[Dialer pin]
Modem = /dev/ttyUSB0
Baud = 9600
Init1 = AT+CPIN="0000"

[Dialer Defaults]
Modem = /dev/ttyUSB0

[Dialer ogo]
Modem = /dev/ttyUSB0
ISDN = off
Modem Type = Analog
Modem Baud = 460800
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","3g.utel.ua"
Init3 =
Phone = *99***1#
Phone1 =
Phone2 =
Dial Prefix =
Dial Attempts = 1
Dial Command = ATDT
Ask Password = off
Password = xxx
Username = xxx
Auto Reconnect = on
Abort on Busy = off
Carrier Check = off
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on

Набираем в консоли следующую команду. Она необходима для введения PIN-кода (по умолчанию на карточке стоит защита PIN-кодом). Если модем упорно не хочет соединяться, можно убрать проверку PIN-кода с помощью мобильного телефона.
$ sudo wvdial pin

--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: AT+CPIN="0000"
AT+CPIN="0000"
OK
--> Modem initialized.
--> Configuration does not specify a valid phone number.
--> Configuration does not specify a valid login name.
--> Configuration does not specify a valid password.

Собственно дозвон.
$ sudo wvdial ogo

ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","3g.utel.ua"
AT+CGDCONT=1,"IP","3g.utel.ua"
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sun Nov 21 17:32:32 2010
--> Pid of pppd: 2222
--> Using interface ppp0

Чтобы прервать соединение, нужно нажать CTRL+C. Если просто закрыть окно терминала, то соединение будет продолжать работать, и чтобы его разорвать придется убивать процесс командой kill.

Нерешенные вопросы:

Запуск wvdial от обычного пользователя.
При попытке запуска от обычного пользователя ругается «Cannot open /dev/ttyUSB0: Device or resource busy».
С помощью strace стало понятно, что необходимы права на запись в каталог /var/lock — добавляем пользователя в группу lock.
Далее pppd вылетает с кодами ошибок err=2 и err=3, что решается изменением прав доступа к файлам /etc/ppp/peers/wvdial, /etc/ppp/*-secrets.
После этого pppd вылетел в ошибкой err=8 (The connect script failed (returned a non-zero exit status).) Пришлось временно отложить разбирательства с pppd.

Литература:

Команды управление режимами устройства:
AT^U2DIAG=0 (устройство в режиме только модем)
AT^U2DIAG=1 (устройство в режиме модем + CD-ROM)
AT^U2DIAG=255 (устройство в режиме модем + CD-ROM + Card Reader)
AT^U2DIAG=256 (устройство в режиме модем + Card Reader).
man wvdial, wvdial.conf, pppd

суббота, 30 октября 2010 г.

Обновление прошивок (firmware) на серверах Dell R200, 2950 под RHEL.


  1. Скачать образ диска с обновлениями Dell Server Updates с сайта support.dell.com (3,5-4 Гб) на сервер
  2. Проверить наличие 32-х битных библиотек compat-libstdc++-33 и compat-libstdc++-296 (именно 32-х битные!)
    1. rpm -qa | grep compat-libstdc
  3. Установить данные библиотеки, если их нет в системе
    1. sudo yum -y install compat-libstdc
  4. Смонтировать образ диска с обновлениями в какую-нибудь папку, например,
    1. sudo mount -o loop OM_6.2.0_SUU.iso /mnt/
  5. Зайти в данную папку
    1. cd /mnt
  6. Запустить в консоли sudo ./suu -c для сравнения текущей версии прошивок и поставляемых на образе
  7. При наличие доступных обновлений запустить sudo ./suu -u
  8. Перегрузить сервер sudo reboot

    Возможные проблемы:
    /var/log/dell/suu/invcolOutput.log (No such file or directory)
    [/DIR/./bin/Linux/invcol]
    Problem reading from inventory output file [/var/log/dell/suu/invcolOutput.log]
    exiting SUU application ...

    Проблемы с запуском invcol. Стоит зайти в указанный каталог и вручную запустить ./invcol. В моем случае ругалось об отсутствии следующих пакетов/файлов:
    - zlib.i686 (libz.so.1)
    - procmail.x86_64 (no lockfile in $PATH) 

четверг, 28 октября 2010 г.

Автосохранение конфигурационного файла маршрутизатора Cisco на tftp-сервер.

Иногда приходится возиться с маршрутизаторами Cisco по роду деятельности. Расскажу о такой приятной возможности как автосохранение конфигурации маршрутизатора на tftp-сервер.

Установка/настройка tftp-сервера

sudo yum -y install tftp-server xinetd

vi /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot -vvvc
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}

- disable поменять с yes на no, тем самым разрешив сервис.
- Опция -c позволяет создавать новые файлы. По умолчанию, tftpd позволит выложить файл, если тот уже существует. По умолчанию, файлы создаются с разрешениями 666 (доступны на чтение/запись всем), пока не установлены опции --permissive или —umask.
- Опция -v позволяет увеличить уровень логгирования tftpd, можно указать несколько раз.
- Опция -s задает корневую директорию при старте.

Запуск сервиса

# запускать сервис на уровнях 3,4,5
sudo /sbin/chkconfig xinetd --level 345 on
# перезапустить сервер xinetd, который является посредником для tftpd
sudo /sbin/service xinetd restart

# создаем необходимые директории для хранения конфигурационных файлов
mkdir -p /var/lib/tftpboot/cisco/{krrog,kiev,poltava}
chmod -R 777 /var/lib/tftpboot/cisco

Для ограничения сервиса использовать либо iptables (tftp-сервер использует порт 69 udp), либо tcp_wrappers (бинарник in.tftpd).

Настройка cisco.

# указываем сервер имен
ip name-server 10.1.11.3
# далее директивы для управления автосохранением
archive
# путь куда будем сохранять конфигурацию
path tftp://mitra.office.com/cisco/vinnitsa/vn-branch-config
# делать сохранение по команде write memory
write-memory
# в некоторых случаях важно явно указать интерфейс, с которого связываться с tftp-сервером, например, в случае использования IPSec.
ip tftp source-interface Vlan1

Теперь, сделав
Cisco2811-Vinnica#wr me
Building configuration...
[OK]!!
Cisco2811-Vinnica#
получаем копию конфига в директории на tftp-сервере.