Шукати в цьому блозі

вівторок, 18 лютого 2014 р.

Установка nodejs в Debian Wheezy

Стоит ли говорить о том, что в базовом дистрибутиве Debian Wheezy пакета nodejs нет? Это нормально, в этом весь Debian. Зато пакет nodejs есть в репозитории backports для Wheezy.
Давайте его (backports) подключим. Создаём файл настроек /etc/apt/sources.list.d/wheezy-backports.list следующего содержания:
deb http://ftp.us.debian.org/debian wheezy-backports main contrib non-free
после чего делаем
sudo aptitude update
Если вдруг, по каким-либо причинам, увидим ошибку GPG с предупреждением об NO_PUBKEY то выполняем простой сценарий:
KEY=0123456789ABCDEF; gpg --keyserver keys.gnupg.net --recv-keys $KEY; gpg --armor --export $KEY | sudo apt-key add -
после чего опять выполняем
sudo aptitude update
и замечаем, что ошибка исчезла. После этого запросим список пакетов nodejs и убедимся, что они есть:
aptitude search ^nodejs
Установить нужные пакеты можно, например, так:
aptitude install nodejs nodejs-dev


четвер, 6 лютого 2014 р.

Перепрошивка D-Link DIR-300 с DD-WRT на Wive-NG-RTNL

Перед прошивкой обязательно убедитесь, что в вашем маршрутизаторе 32мб DRAM, так как в противном случае прошивка Wive-NG-RTNL не будет работать. В прошивке DD-WRT это можно узнать на закладке status/sys-info.
Необходимо скопировать прошивку в маршрутизатор с помощью tftp, ftp или wget (скачал Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin.zip, распаковал его и выложил Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin к на web-сервер). Прошивка типа 2T2R необходима для работы с чипсетом Ralink 3052 и 1T1R для чипсета Ralink 3050.
Далее заходим на свой dd-wrt маршрутизатор по ssh и выполняем следующие не хитрые команды:
root@DD-WRT:~# cd /tmp
root@DD-WRT:~# wget http:/url/Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin
root@DD-WRT:~# mtd erase linux
root@DD-WRT:~# mtd -f write Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin linux
root@DD-WRT:~# reboot
После перезагрузки точка загрузится с новой прошивкой. Логин и пароль изменятся на стандартные для Wive-NG: Admin/Admin (да, да, именно с большой буквы).

Вернуть dd-wrt прошивку обратно можно, например, так:
cd /tmp
wget ftp://login:password@ip/ddwrtconsole.bin 
mtd_write erase Kernel_RootFS
mtd_write write ddwrtconsole.bin Kernel_RootFS

Для смены MAC адреса на WAN порту необходимо ввести команды:
nvram_set 2860 CHECKMAC NO
nvram_set 2860 WAN_MAC_ADDR 00:xx:xx:xx:xx:xx 
reboot

середа, 25 грудня 2013 р.

Обновление прошивки ExtremeXOS

Давно не обновлял прошивки в Extreme-Networks Summit X450a, а тут пришлось вспомнить. Поэтому публикую заметку на будущую память. Смотрим текущую прошивку:
sf102z-1 # sh version 
Switch      : 800189-00-05 0832G-81174 Rev 5.0 BootROM: 1.0.3.1    IMG: 12.4.2.17 
XGM2-1      : N/A          N/A         Rev 0.0

Image   : ExtremeXOS version 12.4.2.17 v1242b17-patch1-10 by release-manager
          on Wed Jan 5 17:18:37 PST 2011
BootROM : 1.0.3.1
sf102z-1 # show switch 

SysName:          sf102z-1
SysLocation:      KIEV
SysContact:       hostmaster
System MAC:       00:04:96:35:4A:77
System Type:      X450a-24xdc

SysHealth check:  Enabled (Normal)
Recovery Mode:    All
System Watchdog:  Enabled

Current Time:     Wed Dec 25 09:23:44 2013
Timezone:         [Auto DST Enabled] GMT Offset: 120 minutes, name is EET.
                  DST of 60 minutes is currently not in effect, name is EEST.
                  DST begins every fourth Sunday March at 3:00
                  DST ends every fourth Sunday October at 3:00

Boot Time:        Wed Dec 25 09:14:28 2013
Boot Count:       276
Next Reboot:      None scheduled
System UpTime:    9 minutes 15 seconds 

Current State:    OPERATIONAL             
Image Selected:   secondary               
Image Booted:     secondary               
Primary ver:      11.6.3.5                
Secondary ver:    12.4.2.17               

Config Selected:  primary.cfg                                          
Config Booted:    primary.cfg                                          

primary.cfg       Created by ExtremeXOS version 12.4.2.17
                  157152 bytes saved on Wed Dec 25 09:20:55 2013

Видим, что коммутатор загружен из secondary профиля; что на коммутаторе первый профиль имеет прошивку 11.6.3.5, а второй 12.4.2.17.
Так как у нас на сети за рабочую принята прошивка 15.2.1.5 то нам придётся залить её. Так как текущий загруженный профиль secondary то заливать прошивку будем в primary чтобы в случае чего иметь возможность откатиться:
sf102z-1 # download image 10.10.10.10 summitX-c_15.2.1.5.xos vr "VR-Default" primary 
Debug information files are present in internal-memory.
These files will be removed if you continue with download.
Do you want to continue with download and remove existing files from internal-memory? (y/N) Yes
Do you want to install image after downloading? (y - yes, n - no,  - cancel) Yes

Downloading to Switch...  8< skip 8< ...
Installing to primary partition!

Installing to Switch... 8< skip 8< ...
Image installed successfully
This image will be used only after rebooting the switch!

Говорим о том, что собираемся использовать primary профиль и перегружаемся:
sf102z-1 # use image primary 
sf102z-1 # reboot
Are you sure you want to reboot the switch? (y/N) Yes

Заходим на коммутатор и смотрим версию прошивки:
sf102z-1 # sh version 
Switch      : 800189-00-05 0832G-81174 Rev 5.0 BootROM: 1.0.3.1    IMG: 15.2.1.5  
XGM2-1      :

Image   : ExtremeXOS version 15.2.1.5 v1521b5 by release-manager
          on Fri Aug 17 17:23:25 EDT 2012
BootROM : 1.0.3.1
sf102z-1 # sh switch 

SysName:          sf102z-1
SysLocation:      KIEV
SysContact:       hostmaster
System MAC:       00:04:96:35:4A:77
System Type:      X450a-24xdc

SysHealth check:  Enabled (Normal)
Recovery Mode:    All
System Watchdog:  Enabled

Current Time:     Wed Dec 25 09:35:27 2013
Timezone:         [Auto DST Enabled] GMT Offset: 120 minutes, name is EET.
                  DST of 60 minutes is currently not in effect, name is EEST.
                  DST begins every fourth Sunday March at 3:00
                  DST ends every fourth Sunday October at 3:00

Boot Time:        Wed Dec 25 09:32:21 2013
Boot Count:       277
Next Reboot:      None scheduled
System UpTime:    3 minutes 5 seconds 

Current State:    OPERATIONAL             
Image Selected:   primary                 
Image Booted:     primary                 
Primary ver:      15.2.1.5                
Secondary ver:    12.4.2.17   

Config Selected:  primary.cfg                                          
Config Booted:    primary.cfg                                          

primary.cfg       Created by ExtremeXOS version 12.4.2.17
                  157152 bytes saved on Wed Dec 25 09:20:55 2013

Всё как в аптеке: текущая прошивка 15.2.1.5 - идём пить кофе.

субота, 21 грудня 2013 р.

SpamAssassin + MySQL + Roundcube

Цель это статьи пошагово описать процесс настройки SpamAssassin на работу с базой MySQL и установить плагин для Roundcube.
Преамбула такова, уже имеется настроенная связка Exim4 + SpamAssassin + MySQL + Roundcube, всё это великолепно работает. Хочется чтобы SpamAssassin научился работать с MySQL.
Приступим.
SpamAssassin установлен из репозитория, поэтому не мудрствуя лукаво переходим в /usr/share/doc/spamassassin/sql и смотрим, что тут у нас есть. А оказывается тут есть и инструкция в README и заготовки для создания таблиц.

Создадим в MySQL БД и пользователя:
mysql> create database spamassassin;
mysql> grant usage on *.* to 'spamassassin'@'localhost' identified by 'passw0rd';
mysql> grant all privileges on spamassassin.* to 'spamassassin'@'localhost';
mysql> flush privileges;
Теперь заливаем дампы таблиц из /usr/share/doc/spamassassin/sql:
mysql -uspamassassin -ppassw0rd spamassassin < /usr/share/doc/spamassassin/sql/userpref_mysql.sql
mysql -uspamassassin -ppassw0rd spamassassin < /usr/share/doc/spamassassin/sql/bayes_mysql.sql
mysql -uspamassassin -ppassw0rd spamassassin < /usr/share/doc/spamassassin/sql/awl_mysql.sql
БД и таблицы в ней созданы, теперь научи SpamAssassin как достучаться к MySQL. Создадим конфигурационный файл, скажем, /etc/spamassassin/sql.cf:
user_scores_dsn DBI:mysql:spamassassin:localhost:3306
user_scores_sql_username spamassassin
user_scores_sql_password passw0rd

auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList

user_awl_dsn DBI:mysql:spamassassin:localhost:3306
user_awl_sql_username spamassassin
user_awl_sql_password passw0rd

bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:localhost:3306
bayes_sql_username spamassassin
bayes_sql_password passw0rd
В файле /etc/default/spamassassin отыскиваем опцию OPTIONS и добавляем ключи --sql-config и -u debian-spamd. Рестартуем сервис:
$ sudo service spamassassin restart
Теперь переходим в директорию Roundcube, далее в ${roundcube_dir}/plugins/sauserprefs на основании имеющегося шаблона создаём config.inc.php где указываем адреса, явки, пароли:
$rcmail_config['sauserprefs_db_dsnw'] = 'mysql://spamassassin:passw0rd@localhost/spamassassin';
Включаем плагин sauserprefs в ${roundcube_dir}/config/main.inc.php
Заходим в Roundcube, переходим в "Настройки", видим "Спам фильтр", радуемся!

Посмотреть пользовательскую конфигурацию в SQL БД можно, например, так:
mysql> select username,preference,value from userpref WHERE (username='$GLOBAL' OR username LIKE '%@mydomain.com' OR username='user@mydomain2.com') ORDER by username ASC;
Глобальные настройки можно перенести и/или переопределить в таблице userperf, для username значение "$GLOBAL":
+------------------+-------------------------+------------------------+
| username         | preference              | value                  |
+------------------+-------------------------+------------------------+
| $GLOBAL          | required_hits           | 5.00                   |
| $GLOBAL          | subject_tag             | [SPAM-_HITS_]-         |
| $GLOBAL          | score USER_IN_WHITELIST | -10                    |
| $GLOBAL          | whitelist_from          | *@whitedomain.com      |
| $GLOBAL          | score USER_IN_BLACKLIST | 10                     |
| $GLOBAL          | report_safe             | 0                      |
| $GLOBAL          | use_razor2              | 1                      |
| $GLOBAL          | use_pyzor               | 1                      |
| $GLOBAL          | use_dcc                 | 1                      |
| $GLOBAL          | skip_rbl_checks         | 1                      |
| $GLOBAL          | use_bayes               | 1                      |
| $GLOBAL          | ok_locales              | en                     |
| $GLOBAL          | ok_languages            | en                     |
| $GLOBAL          | whitelist_from          | *@nai.com              |
| $GLOBAL          | use_auto_whitelist      | 1                      |
| $GLOBAL          | rewrite_header Subject  | [SPAM-_HITS_]-         |
+------------------+-------------------------+------------------------+

пʼятниця, 22 листопада 2013 р.

BGP: Практика использования unsuppress-map

Возникла следующая задача. На пограничном маршрутизаторе, где суммируются сети автономной сети возникла необходимость включить клиента и исключить его подсеть /30 из суммарных маршрутов, и проанонсить отдельно вовнутрь AS как отдельный маршрут.
Решение:
neighbor IBGP unsuppress-map unsupp-adv

route-map unsupp-adv permit 5
 match ip address 88

access-list 88 permit 212.xxx.xxx.xxx 0.0.0.3
В итоге сеть 212.xxx.xxx.xxx/30 нормально, отдельным маршрутом, проанонсилась во внутрь AS.

вівторок, 19 листопада 2013 р.

AnyEvent::SNMP

Понадобилось опросить по SNMP одно устройство, но так как в своё время разбирался с механизмом AnyEvent в perl то захотелось и в этом случае его использовать. К счастью модуль AnyEvent::SNMP в связке с Net::SNMP даёт такую возможность.
Собственно вот небольшой пример как эту связку использовать:
use AnyEvent::SNMP;
use Net::SNMP;

...

sub snmp {
    my @hosts = ('host10', 'host11');
    my @oids = (
        '.1.3.6.1.4.1.476.1.42.3.4.1.3.3.1.3.1',        # EnvTemperatureMeasurementDegC
        '.1.3.6.1.4.1.476.1.42.3.4.3.1.0'               # EnvStateSystem
    );
    my $community = "community";

    foreach my $host (@hosts) {

        printf("HOST: %s", $host);

        my $cv = AnyEvent->condvar;

        # Set timer 50 sec.
        my $w = AnyEvent->timer (after => 50, cb => sub { $cv->send("Timeout"); });

        Net::SNMP->session( -hostname => $host, -community => $community, -version => 'snmpv2c', -nonblocking => 1 )->get_request(
            -callback => sub {
                my $snmpSess = shift;
                my %oidsret;
                if ( defined $snmpSess->var_bind_list() ) {
                    foreach my $oid (@oids) { $oidsret{$oid} = $snmpSess->var_bind_list()->{$oid}; }
                }

                undef $w;
                $cv->send (\%oidsret);
            },
            -varbindlist => \@oids
        );
        my @result = $cv->recv;


        if (defined $result[0]) {
            foreach my $oid (@oids) {
                printf(" %s", $result[0]->{$oid});
            }
        } else {
            printf(" SNMP error");
        }

        printf("\n");
    }

}
Собственно всё как всегда, для AnyEvent - обёртка, callback, результат!
Для критиков. Безусловно, что вышеприведённый пример можно "оптимизировать". Например, получая результат $cv->recv за циклом обхода хостов, а через $cv->send передавать в результат более сложную структуру, которая бы содержала и имя хоста. Затем всю эту кухню разбирать. Но пример на то и пример чтобы над такими вещами не заморачиваться.

вівторок, 24 вересня 2013 р.

UIRD (Ukrainian Index of Retail Deposit Rates) - Український індекс ставок за депозитами фізичних осіб

UIRD (Ukrainian Index of Retail Deposit Rates) або Український індекс ставок за депозитами фізичних осіб – це індикативна ставка, що розраховується о 15:00 за Київським часом кожного Банківського дня в системі Thomson Reuters на основі номінальних ставок по строкових депозитах фізичних осіб у гривні на строк в 12 місяців з виплатою процентів після закінчення строку дії депозитного договору, що діють в 20 найбільших українських банках за розміром депозитного портфелю фізичних осіб.
Більш детальна інформація про Український індекс ставок за депозитами фізичних осіб  знаходиться на офіційному Інтернет-представництві – сайті Національного Банку України на вказаних нижче Інтернет-сторінках: