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

вівторок, 30 квітня 2013 р.

Очистка почтовой очереди (Postfix)

Посмотреть текущее состояние очереди можно так:
postqueue -p
sendmail -bp
mailq
Очистить всю очередь можно, например, так:
postsuper -d ALL
А вот как можно почистить очередь от конкретного отправителя:
postqueue -p | tail +2 | awk 'BEGIN { RS = "" } $7~/^MAILER-DAEMON$/ { print $1 }' | tr -d '*!' | postsuper -d -
в данном случае мы убрали из очереди все сообщения от MAILER-DAEMON. Если, к примеру, есть желание удалить все сообщения из очереди от чудных отправителей доменов @church.com и @88db.co.id (ага, поймал недавно доверенный клиент вирус) то сделать это можно просто соответствующим образом поменяв регулярное выражение:
postqueue -p | tail +2 | awk 'BEGIN { RS = "" } $7~/\@(church\.com|88db\.co\.id)$/ { print $1 }' | tr -d '*!' | postsuper -d -
Кстати можно использовать вызов и через xargs:
postqueue -p | tail +2 | awk 'BEGIN { RS = "" } $7~/^MAILER-DAEMON$/ { print $1 }' | tr -d '*!' | xargs postsuper -d
но на мой взгляд вариант с "| postsuper -d -" более наглядный, да и в случае с очень-очень большим размером очереди за ним не так скучно наблюдать ;) А вот какой из вариантов работает быстрее - не скажу, не проверял.

середа, 17 квітня 2013 р.

Удаление дубликатов в MySQL

Для удаления дубликатов в таблице MySQL существует довольно оригинальное решение:
ALTER IGNORE TABLE tablename ADD UNIQUE INDEX(field0, field1, field2);
Суть, надеюсь, ясна ;)

пʼятниця, 8 лютого 2013 р.

RegExp - POSIX-классы символов

Не следует путать термин POSIX "класс символов" с тем, что обычно называется "класс символов регулярного выражения". [X-z0-9] пример того, что мы называем "класс символов" а POSIX называет "выражение в квадратных скобках". [:digit:] это класс POSIX символов, он может использоваться внутри выражений в квадратных скобках, например так [xz[:digit:]] . Эти два регулярных выражения эквивалентны: один символ из X , Y , Z, x, y, z или цифры. Имена классов должны быть написаны в нижнем регистре...

Более детально можно почитать тут http://www.regular-expressions.info/posixbrackets.html

POSIXОписаниеASCIIUnicodeСокрещение
(например в Perl и т.п.)
Java
[:alnum:]Алфавитно-цифровые символы[a-zA-Z0-9][\p{L&}\p{Nd}]\p{Alnum}
[:alpha:]Буквы[a-zA-Z]\p{L&}\p{Alpha}
[:ascii:]ASCII символы[\x00-\x7F]\p{InBasicLatin}\p{ASCII}
[:blank:]Пробелы и табуляции[ \t][\p{Zs}\t]\p{Blank}
[:cntrl:]Управляющие символы[\x00-\x1F\x7F]\p{Cc}\p{Cntrl}
[:digit:]DigitsЦифры[0-9]\p{Nd}\d\p{Digit}
[:graph:]Видимые символы (т.е. всё исключая пробелы, управляющие символы и т.д.)[\x21-\x7E][^\p{Z}\p{C}]\p{Graph}
[:lower:]Строчные буквы[a-z]\p{Ll}\p{Lower}
[:print:]Видимые символы и пробелы (т.е. всё исключая управляющие символы и т.д.)[\x20-\x7E]\P{C}\p{Print}
[:punct:]Знаки пунктуации и символы[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~][\p{P}\p{S}]\p{Punct}
[:space:]Все пробельные символы, включая "конец строки"[ \t\r\n\v\f][\p{Z}\t\r\n\v\f]\s\p{Space}
[:upper:]Заглавные буквы[A-Z]\p{Lu}\p{Upper}
[:word:]Символы слова (буквы, цифры и подчёркивание)[A-Za-z0-9_][\p{L}\p{N}\p{Pc}]\w
[:xdigit:]Шестнадцатеричные цифры[A-Fa-f0-9][A-Fa-f0-9]\p{XDigit}

понеділок, 4 лютого 2013 р.

Опус про Децибелы

(автор Игорь Никишин инженер копании IC-Line)

«Что такое децибел (dB), с чем его едят, чем он отличается от dBm и зачем вообще все это нужно?», -такие вопросы задают очень часто, и, чтобы не начинать каждый раз сначала, напишем эту краткую памятку.
Итак, есть сигнал. Он существует, его детектируют. Для численного понятия сигнала (ну, описать-то его как-то надо) ввели понятие мощности сигнала. Мощность измеряется в ваттах (Вт). И все бы было хорошо, да вот только неудобно! Неудобно почему? Потому, что непонятно, хороша ли мощность, или, может, она мала и все плохо? Поэтому умные люди уже достаточно долгое время оперируют понятием «Децибел».
Что есть децибел? Децибел – это отношение. Отношение чего к чему? Отношение мощности измеренного сигнала к базовой мощности. Для удобства пользования в формуле, которая будет представлена чуть ниже, существуют еще некие множители (10) и логарифм (обычный десятичный логарифм, он же логарифм по основанию 10). Зачем так усложнять? А для того, чтобы в результате несложных вычислений стало понятно, ниже или выше (или, может быть, равен) полученный (и измеренный) сигнал, чем сигнал базовый.
, где А – сигнал измеренный, А0 – сигнал базовый. 
В современных сетевых технологиях (надеюсь, не секрет ни для кого) используются лазеры и светодиоды. Они светят (светом!) в волокно, на противоположной стороне этот свет принимается. Свет можно измерить. Измеряют свет всякими хитрыми приборами, которые выдают значения в некоторых единицах.  Вот на столе у автора лежит прибор MT1113C, который умеет измерять в Ваттах (ВТ), Децибелах (dB) и непонятных (пока еще) dBm’ах. С Ваттами мы разобрались – непонятно, много или мало величина, например, 0.05 Вт. С децибелами тоже сложновато – необходимо знать точные значения светового сигнала «до» и «после» прохождения волокна, что не всегда бывает удобно (надеюсь, понятно, что съездить за 80 км и померять там, чтобы потом вернуться и померять тут – как минимум накладно). Вот и ввели те же (а может, и другие) умные люди этот самый dBm.
dBm – это тот же Децибел, только в качестве базового сигнала берется сигнал мощностью 1 (один!) милливатт (мВт). Теперь все стало понятно! И считать удобнее (взял логарифм от мощности сигнала, умножил на 10 – вуаля!), и опорный уровень, относительно которого все измеряется, ВСЕГДА один и тот же – 1мВт.
,где А – измеренная мощность сигнала в МИЛЛИВАТТАХ.
Идем дальше. Есть модуль SFP WDM 1550/1310 20km. Ну есть он и хорошо. Измерим его. А прибор показывает -6dbm. «Ого! Да это же МИНУС! Плохо-плохо!», - скажут неподготовленные люди. И скажут неправильно. Почему? Да потому, что -6dBm – это примерно 0,25Вт.
Расчет такой - берем формулу выше,  двигаемся по ней в обратном направлении:
  • 10lg X == -6;
  • lg X == -6/10;
  • lg X == -0.6;
  • X == 10^-0.6;
  • X == 0.25.
Ну вот, не так уж все и плохо! И «минусы» куда-то исчезли.
Для того, чтобы не заморачивать себе голову, приняли (в очередной раз!) умные люди решение сделать небольшую табличку. И пусть она не такая точная, как формула, но помогает быстро разобраться, откуда ноги растут:
Таблица перехода от децибелов к разам
dB
40dB
20dB
10dB
6dB
3dB
1dB
0dB
-1dB
-3dB
-6dB
-10dB
20dB
-40dB
разы
10000
100раз
10раз
4раза
2раза
1,26
1
0,79
0,5
0,25
0,1раз
0,01
0,0001


Последний штрих: почему такая низкая мощность? А потому, что свет, на самом деле, штука опасная, и лазером в 500мВт можно сбивать самолеты (и это правда, во многих странах такие «игрушки» запрещены к свободному использованию законодательно). А волокно – оно же тонкое, и греется. И может ведь обжечь кого, или расплавить свою и без того тонкую броню.
И всё же, как быть? А быть нужно настойчивее, и узнавать не только про мощность лазерного/светодиодного передатчика, но и про чувствительность приемника, оптический бюджет и затухания в различных типах волокна на разных длинах волн. Но об этом в других сериях.    
Это вопрос часто приходится объяснять при расчете ПОН.
Если есть делитель 1х2, то есть световой поток делится на 2 равных луча, уменьшается в 2 раза,
то затухание при этом получается 3dB. Далее получается.

Делитель 1х2 - 3dB
Делитель 1х4 - 6dB
Делитель 1х8 - 9dB
Делитель 1х16 - 12dB
Делитель 1х32 - 15dB
Делитель 1х64 - 18dB
Делитель 1х128 - 21dB
Делитель 1х256 - 24dB

четвер, 31 січня 2013 р.

Заметки: QEMU, KVM

Для удобства управления виртуальными машинами можно поставить пакет aqemu. Но если это лениво или по каким-либо причинам недопустимо то следующие заметки, так сказать, "на память".

Создаём диск:
qemu-img create -f raw Knoppix_HDA.img 4G

Запускаем загрузку с LifeCD:
kvm -no-acpi -m 384 -cdrom KNOPPIX_V7.0.3CD-2012-06-25-EN.iso -hda Knoppix_HDA.img -boot d
или так:
kvm -monitor stdio -enable-kvm -m 1024 -localtime -cdrom KNOPPIX_V7.0.3CD-2012-06-25-EN.iso -hda Knoppix_HDA.img -boot order=dc,menu=on -net nic,vlan=0 -net user,vlan=0 -name "Knoppix" -vnc :10

Можно сконвертировать образ, если необходимо:
qemu-img convert -f raw Knoppix_HDA.img -O qcow2 Knoppix_QCOW2.img

Приоритет загрузки CD-ROM, затем HDD:
kvm -monitor stdio -enable-kvm -m 512 -localtime -hda Knoppix_HDA.img -boot order=dc,menu=on -net nic,vlan=0 -net user,vlan=0 -name "Knoppix" -vnc :10

Приоритет загрузки HDD, затем CD-ROM:
kvm -monitor stdio -enable-kvm -m 512 -localtime -hda Knoppix_HDA.img -boot order=cd,menu=on -net nic,vlan=0 -net user,vlan=0 -name "Knoppix" -vnc :10

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

Для начала, как и в статье про сеть в VirtualBox, установим все необходимые для этого пакеты:
sudo aptitude install uml-utilities
не забываем добавить нашего пользователя, для которого будет разрешено использовать сеть в виртуальной машине, в группу uml-net:
sudo adduser olden uml-net

Далее в /etc/network/interfaces пропишем настройки для нашего tap-интерфейса, который будет подвязан к виртуальной машине:
auto tap2
iface tap2 inet static
        address 172.16.24.5
        network 172.16.24.4
        netmask 255.255.255.252
        broadcast 172.16.24.7
        tunctl_user username

Собственно после этого можно запустить виртуальную машину и указать ей использовать только что построенный интерфейс:
kvm -monitor stdio -enable-kvm -m 512 -localtime -hda Knoppix_HDA.img -boot order=cd,menu=on -net nic,vlan=0 -net tap,vlan=0,ifname=tap2 -name "Knoppix" -vnc :10
Безусловно, что настроить сетевые настройки на интерфейсе гостевой системы придётся вручную.

середа, 30 січня 2013 р.

Ограничение входа по SSH с конкретных IP адресов

Многие используют вход по ssh с использованием ключей авторизации (в блоге немного рассказывалось об этом), но мало кто знает о том, что при этом можно ограничить вход с заведомо доверенных ip-адресов.
В принципе если есть права администратора то подобные ограничения легко и просто вносятся при помощи незабвенного iptables-а. Однако если прав администратора нет, а ограничение ввести надо то на помощь может прийти нижеследующий механизм.
Для введения ограничений доступа с конкретного ip, как и для авторизации по ключу, используется .ssh/authorized_keys. Например если мы хотим чтобы доступ с конкретным ключом авторизации осуществлялся только лишь с ip-адреса 1.2.3.4 то в начало соответствующей ключу строки файла .ssh/authorized_keys необходимо добавить значение from:
from="1.2.3.4" ssh-rsa  ....
Если хочется чтобы таких адресов было несколько или это была сеть то перечисляем нужные значения:
from="1.2.3.0/24,44.55.66.77" ssh-rsa ...
Таким-же образом можно ввести и другие ограничения, например:
from="1.2.3.4",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa ...
это ограничит agent-forwarding, port-forwarding и т.д., оставив только интерактивный вход в систему. ssh можно ограничить ещё больше, например запретив интерактивный вход, заставив выполнить заданную команду:
command="/usr/local/bin/my-prog" ssh-rsa ..
Это может быть полезным для организации удалённого резервного копирования rsync + ssh, когда будет запущен строго определённый скрипт и ничего более.

середа, 23 січня 2013 р.

Bonding - резервирование каналов на Layer 2

Устанавливаем пакеты согласно Debian Wiki.


Типы агрегации (объединения) интерфейсов в Linux

mode=0 (balance-rr)
Этот режим используется по-умолчанию, если в настройках не указано другое. balance-rr обеспечивает балансировку нагрузки и отказоустойчивость. В данном режиме пакеты отправляются "по кругу" от первого интерфейса к последнему и сначала. Если выходит из строя один из интерфейсов, пакеты отправляются на остальные оставшиеся.При подключении портов к разным коммутаторам, требует их настройки.

mode=1 (active-backup)
При active-backup один интерфейс работает в активном режиме, остальные в ожидающем. Если активный падает, управление передается одному из ожидающих. Не требует поддержки данной функциональности от коммутатора.

mode=2 (balance-xor)
Передача пакетов распределяется между объединенными интерфейсами по формуле ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.

mode=3 (broadcast)
Происходит передача во все объединенные интерфейсы, обеспечивая отказоустойчивость.

mode=4 (802.3ad)
Это динамическое объединение портов. В данном режиме можно получить значительное увеличение пропускной способности как входящего так и исходящего трафика, используя все объединенные интерфейсы. Требует поддержки режима от коммутатора, а так же (иногда) дополнительную настройку коммутатора.

mode=5 (balance-tlb)
Адаптивная балансировка нагрузки. При balance-tlb входящий трафик получается только активным интерфейсом, исходящий - распределяется в зависимости от текущей загрузки каждого интерфейса. Обеспечивается отказоустойчивость и распределение нагрузки исходящего трафика. Не требует специальной поддержки коммутатора.

mode=6 (balance-alb)
Адаптивная балансировка нагрузки (более совершенная). Обеспечивает балансировку нагрузки как исходящего (TLB, transmit load balancing), так и входящего трафика (для IPv4 через ARP). Не требует специальной поддержки коммутатором, но требует возможности изменять MAC-адрес устройства.