17 сентября 2015 г.

Лопата в руках + puppet (bind)

На виртуалке centos7-2 будем поднимать DNS сервер.

Я долго думал, использовать ли для управления DNS сервером скрипты из PuppetForge (https://forge.puppetlabs.com/)? Или держать на puppet сервере файлы конфигурации bind и рулить удаленным сервером изменяя эти файлы.

Победил второй путь. Я прекрасно умею управлять DNS сервером при помощи его конфигурационых файлов и файлов зон. Учить дополнительную обертку, написанную сторонними компаниями, на неизвестном мне ruby… Зачем так усложнять?

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

Создадим директорию /var/puppet.
# mkdir /var/puppet

В которой будут директории, содержащие конфигурационные файлы для отдельных машин.
# mkdir /var/puppet/centos7-2.test.local
# cd /var/puppet/centos7-2.test.local
# mkdir etc
# mkdir -p var/named/slaves

В новой директории etc разместим файл named.conf. Возьмем стандартный файл и внесем в него некоторые изменения. Не буду приводить тут весь файл, только измененные и добавленные строки.
listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
allow-query     { any; };
dnssec-enable no;
dnssec-validation no;
zone "test.local" IN {
type master;
file "test.local";
allow-update { none; };
allow-query { any; };
allow-transfer { none; };
};
zone "200.168.192.in-addr.arpa" IN {
type master;
file "200.168.192";
allow-update { none; };
allow-query { any; };
allow-transfer { none; };
};

В директории var/named создадим два файла описания зон
# cat var/named/test.local 
$TTL 86400 ; 1 day
test.local. IN SOA post.test.local. artur.test.local. (
2015091701 ; serial
10800      ; refresh (3 hours)
3600       ; retry (1 hour)
604800     ; expire (1 week)
86400      ; minimum (1 day)
)
NS centos7-2.test.local.
MX 10 post.test.local.
TXT "v=spf1 mx -all"
SPF "v=spf1 mx -all"

artur-office A 192.168.200.1
post A 192.168.200.97
centos7-2 A 192.168.200.98
centos7-1 A 192.168.200.99

# cat var/named/200.168.192 
$TTL 86400 ; 1 day
200.168.192.in-addr.arpa. IN SOA post.test.local. artur.test.local. (
2015091701 ; serial
10800      ; refresh (3 hours)
3600       ; retry (1 hour)
604800     ; expire (1 week)
86400      ; minimum (1 day)
)
NS centos7-2.test.local.

99 IN PTR centos7-1.test.local.
98 IN PTR centos7-2.test.local.
97 IN PTR post.test.local.
1 IN PTR artur-office.test.local.

Проверкой синтаксиса мы должны заниматься сами. Поэтому:
# named-checkconf etc/named.conf
# named-checkzone test.local var/named/test.local 
zone test.local/IN: loaded serial 2015091701
OK
 # named-checkzone 200.168.192.in-addr.arpa var/named/200.168.192 
zone 200.168.192.in-addr.arpa/IN: loaded serial 2015091701
OK

Теперь необходимо что бы файловый сервер puppet узнал про нашу директорию с файлами.
# vim /etc/puppet/fileserver.conf
[configs]
        path /var/puppet
        allow *

Перезапустим сервер:
# systemctl restart puppetmaster

Внесем изменения в файл манифест site.pp. Сначала добавим новый класс.
class dns {
# для работы необходим пакет bind
    package { 'bind':
                ensure => installed
    }
    include 'stdlib'
    # Отключим ipv6 у bind.
    # Для этого надо при запуске демона передать ему
    # параметр -4. Добавим соответствующую строку в
    # конфигурационный файл.
    file_line { 'named_no_ipv6':
        path => '/etc/sysconfig/named',
        line => 'OPTIONS="-4"'
    }
    # Конфигурационный файл демона
    file { "/etc/named.conf" :
        ensure => file,
        mode => '0640',
# Путь к файлу на файловом сервере
# Я специально присвоил директории имя такое
        # же как и имя машины.
# Теперь можно пользоваться переменной $fqdn
# И если у нас появится другой DNS сервер,
        # то благодаря этой переменной
# мы спокойно разрулим кому какие конфиги
        # отдавать.
        source => "puppet:///configs/$fqdn/etc/named.conf",
        require => Package["bind"],
# После изменения файла сделаем reload 
        # серверу bind
        notify  => Service["named"]
    }
    file { "/var/named" :
        path => "/var/named",
        mode => '0640',
        group => 'named',
        source => "puppet:///configs/$fqdn/var/named",
# Тут у нас передается содержимое директории
        ensure => directory,
# Говорим, что бы передавались все файлы и
        # поддиректории.
# Вместо remote можно использовать true. 
        # Тогда в целевой директории будут удаляться
        # все файлы, которые отсутствуют в директории
        # шаблоне.
# Поскольку делал по быстрому, пока оставлю
        # так. Но в дальнейшем надо будет привести 
        # все в порядок.
        recurse => remote,
        sourceselect => all,
        require => Package["bind"],
        notify  => Service["named"]
    }
    service { 'named':
        enable => true,
        ensure => running,
        require => Package["bind"]
    }
}

Ну и изменим соответствующую ноду.
node 'centos7-2.test.local' {
    include 'baselinux'
    include 'dns'
}

Пока остановимся. Останется только разрулить правила фаервола.

16 сентября 2015 г.

Лопата в руках + puppet (2)

Посидел, подумал и понял, что ставить пакет ntp только ради его конфигурационного файла... Что то тут не правильно. Тем более, что ntpdate.service из конфигурационного файла берет только имена ntp серверов, осуществляя поиск параметра peer или server.

Поэтому, для ntpdate.service можно оставить простейший файл /etc/ntp.conf следующего содержания:
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
server 3.centos.pool.ntp.org

Итого, нам надо удалить пакет ntp и добавить свой конфигурационный файл /etc/ntp.conf

Удалить пакет можно следующим образом:
package { 'ntp':
ensure => absent
}

Будет удален пакет, его конфигурационные файлы останутся на месте. Нам не надо удалять конфиги. Мы просто поменяем их содержимое.

Дальше надо будет добавить свой конфигурационный файл, убедившись, что пакет ntp не установлен, а ntpdate наоборот установлен.

Изменим класс ntpdate в файле манифеста следующим образом:
class ntpdate {
        package { 'ntpdate':
                ensure => installed
        }
        package { 'ntp':
                ensure => absent,
# Пакет, если он есть, надо удалить до того как
# будет создан файл /etc/ntp.conf
before => File['/etc/ntp.conf']
        }
        # Определяем конфигурационный файл
        file { '/etc/ntp.conf':
                ensure => file,
                owner  => 'root',
                group  => 'root',
                mode   => '0644',
# Для создания файла необходимо наличие
# установленного пакета ntpdate
                require => Package["ntpdate"],
                # Содержимое файла указываем прямо тут
                content => "server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
server 3.centos.pool.ntp.org
"
        }
        service { 'ntpdate':
                enable => true,
                ensure => running,
                require => Package["ntpdate"],
        }
}

Проверим конфиг на ошибки:
# puppet parser validate /etc/puppet/manifests/site.pp

В результате на клиенте:

  • если установлен пакет ntp, он будет удаляться.
  • будет добавлен или изменен файл /etc/ntp.conf
Если в дальнейшем необходимо изменить конфигурационный файл, меняем его содержимое в файле манифеста.

Если конфигурационные файлы большие, включаем файловый сервер puppet или ftp сервер или ... Размещаем конфиги там. Но об этом в другой раз. 

15 сентября 2015 г.

Лопата в руках + puppet

Побегал по собеседованиям и c удивлением обнаружил, что многим работодателям требуется знания по puppet. Решил за одно с разборками по CentOS 7 научиться пользоваться этим чудом автоматизации конфигурации :).

Пока создал две виртуалки:

  • centos7-1.test.local — сервер с puppet сервером на борту. На нем мы будем конфигурировать клиент.
  • centos7-2.test.local — собственно клиент, который будет все данные по своей конфигурации брать с сервера.


При установке клиента и сервера была сразу настроена сеть. DNS сервер пока не поднимался, поэтому в файле /etc/hosts на обеих машинах добавлены строки:
192.168.200.99 centos7-1.test.local  centos7-1
192.168.200.98 centos7-2.test.local  centos7-2

Маршрут по умолчанию на сервере, через хост машину. Маршрут по умолчанию на клиенте, через сервер.
Fierwall на сервере настроен. Удален fierwalld, настроен маскарадинг и доступ по ssh. На клиенте все по умолчанию.
При установке клиента выбрана минимальная конфигурация сервера.

Puppet будем конфигурить исходя из того, что у нас везде CentOS 7. Т.е. пока не будем заморачиваться с многоплатформенностью.

Установка puppet на сервер.

# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
# yum install puppet-server

Поскольку лениво руками возиться c сертификатами, включим автоматическое подписывание сертификатов. В реальной жизни так делать низзя.
# vim /etc/puppet/puppet.conf
[main]
    …
    autosign = true

Создадим манифест файл заглушку. По мере понимания системы, будем его расширять.
# vim /etc/puppet/manifests/site.pp
package {
  'mc':
    ensure => installed;
}
Собственно тут говориться, что надо поставить пакет mc, если его еще нет.

Запускаем сервер:

# systemctl start puppetmaster.service
# systemctl enable puppetmaster.service
# systemctl status puppetmaster

Проверяем наличие открытого порта 8140 в fierwall:
# iptables -L INPUT -n --line-numbers

Если порт не открыт, добавляем:
# iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 8140 -j ACCEPT
# service iptables save

Установка puppet клиента на centos7-2.

# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
# yum install puppet

Указываем сервер, куда буем ходить:
# vim /etc/puppet/puppet.conf
[agent]
    server=centos7-1.test.local
    certname=centos7-2-cl.test.local

Подключаемся агентом, заодно генерируя и подписывая сертификаты:
# puppet agent --test 

Если ошибок не показало, запускаем сервис:
# systemctl start puppet.service
# systemctl enable puppet.service
# systemctl status puppet

Кстати, пакет mc уже установился, программой можно пользоваться.

Переходим на сервер.

На всякий пожарный ставим средство для работы с конфигами. Чувствую, что оно нам пригодится.
# yum install augeas

Ставим библиотеку, необходимую для работы со строками.
# puppet module install puppetlabs-stdlib

Создадим манифест файл puppet, в котором опишем пакеты и параметры, которые будут использованы на всех серверах.

Мне понадобятся: ssh, ntp, mc, vim (мой любимый редактор), net-tools (ip ставиться по умолчанию, но я привык к стандартному ifconfig и route), traceroute, tzdata (с обязательным обновлением до последней версии, а вдруг, не дай бог, опять дадут порулить «Повелителю Времени»?).
Так же я люблю кастомную строку приглашения.

Итого файл будет выглядеть следующим образом:
# vim /etc/puppet/manifests/site.pp

class sshd {
    # долен быть установлен пакет
    package { 'openssh-server':
ensure => latest
    }
    # сервис должен быть запущен
    service { 'sshd':
name => "sshd",
enable => true,
ensure => running
    }
}

# Сервер ntpd поднимать не будем, ограничимся ntpdate, благо в
# CentOS 7 проверку можно запускать как сервис.
# для ее работы потребуется конфигурационный файл /etc/ntpd.conf
# который находится в пакете ntp
class ntpdate {
    # ставим пакет ntp. Ntpdate будет поставлен по зависимости.
    package { 'ntp':
ensure => installed
    }
    # запускаем соотвествующий сервис.
    service { 'ntpdate':
enable => true,
ensure => running
    }
}

# создаем базовый класс, для всех машин
class baselinux {
    package { 'mc': ensure => installed }
    package { 'vim-enhanced': ensure => installed }
    package { 'net-tools': ensure => installed }
    package { 'traceroute': ensure => installed }
    package { 'tzdata': ensure => latest }
    include 'sshd'
    include 'ntpdate'
    # необходимо для работы file_line
    include 'stdlib'
    # Добавляем переменную PS1 в конец /etc/bashrc, если ее в этом файле еще нет.
    # Точнее говоря, PS1 там уже есть, мы контролируем наличие именно такой строки
    # и если ее нет, то добавляем в конец файла.
    file_line { 'ps1_rule':
        path => '/etc/bashrc',
        # line пишем одной строкой
        line => 'PS1=\'\[\e[44;36m\]\t:[\w]\[\e[0;0m\]\n\[\e[0;31;04m\]\u\[\e[0;0m\]@\[\e[0;32m\]\h\[\e[0;0m\] \$ \''
    }
}
# node по умолчанию, используется в том случае, если нет явного
# нода для конкретной машины.
node default {
    include 'baselinux'
}

# node для клиента.
node 'centos7-2.test.local' {
    include 'baselinux'
}

Node для клиента пока идентичен ноду по умолчанию. Но я буду его потихоньку добавлять.

Если лениво ждать пока на клиенте включатся наши изменения, на нем можно запустить:
# puppet agent --test 

На клиенте будут установлены все необходимые пакеты и запустятся (если ещё не были запущены) указанные нами сервисы.

Пока как то так.

14 сентября 2015 г.

Копаю CentOS 7

Пришла пора разбираться с тем, что RedHat накрутил в 7-ке.

Первое, что надо сделать - отключить fierwalld :)

# systemctl disable firewalld
# systemctl stop firewalld
# yum install iptables-services
# touch /etc/sysconfig/iptables
# touch /etc/sysconfig/ip6tables
# systemctl start iptables
# systemctl enable iptables
# iptables -L -n

Получаем iptables правила по умолчанию, обычные для CentOS.

Второе - придется таки изучить systemd :( Если его выковырять - то это будет Slackware с системой инициализации System V. Что в принципе неплохо, но при большом количестве инсталляций будет трудноуправляемо.

24 июля 2015 г.

Девочка на поводке

Как же достали эти журналисты. Из всякой фигни им нужно сделать информационный повод. Потом этот повод курить, долго курить. Как будто в мире нет ничего более интересного.
Вот и в этот раз, какой то молодой человек запечатлел на своем телефоне девочку на поводке, выложил это в инет и... началось!
LifeNews: "СК проверяет видео с женщиной, выгуливающей ребенка на поводке"
Взгляд, Россия- 24 и прочие, прочие, прочие.
Подтянулась прокуратура, супер чел Павел Астахов.
Все с умным видом рассуждают от том как надо наказать мать (позже выясниться, что это была бабушка). В студию приглашают психологов и бла, бла, бла.
Боже! Ну включи же им мозги!

А всего то: ребенок решил поиграть в собачку.
У меня дочке 6 лет, она регулярно играет в кошечек и собачек. Она начинает копировать их поведение. Например, на детской площадке лазит по горке как кошка, на четвереньках и мяукает. Может обвязать вокруг пояса ремень или веревку изображая поводок и попросить прогуляться с собачкой.
Да, мне взрослому становиться немного не по себе, но эту "собачку" проще поводить по комнате, чем отобрать у нее пояс. Детишки они такие, настойчивые. Очень трудно их в чем то переубедить.
И что? Теперь меня тоже надо привлекать?!

Такое ощущение, что у этих "икспердов" либо не было детей, либо они забыли как это бывает. И льется с экрана и со страниц газет и сайтов потоки дичайшего бреда.

И вы знаете? Я не удивлюсь,если эти перцы из прокуратуры возбудят уголовное дело супротив бабушки. А Астахов с умнейшим видом будет вещать про то как были нарушены права ребенка. Нарушены права на что? На игру? Имбицилы!

22 июля 2015 г.

Thunderbird, sendmail и dh key too small

Обновился Тандерберд до версии 31.8.0 и перестал работать SSL при отправке почты на моем сервере.
При проверке сертификата на сервере, получаю ошибку
openssl s_client -connect smtp.local.local:25 -starttls smtp
...
140195198617232:error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small:s3_clnt.c:3339:
...

Да, я лопух, не позаботился о закрытии дырки в SSL. Впрочем, кому нужно ломать SSL при отправке почты через этот сервер, учитывая, что аутентификация клиентов идет не по сертификатам?
Ну да ладно.
В новой версии библиотеки nss, жестко ограничили длину:

  • The minimum modulus size for RSA keys is now 512 bits
  • The minimum modulus size for DSA keys is now 1023 bits
  • The minimum modulus size for Diffie-Hellman keys is now 1023 bits


Решение для sendmail.
Генерируем DH файл параметров.
openssl dhparam -out /etc/pki/tls/certs/dhparams.pem 2048

Важно! Длинна должна быть не меньше, чем 1024, но на всякий пожарный я выбрал 2048. А вдруг они потом изменят свое решение в сторону увеличения?

Поскольку для тонкой настройки SSL (выбора чиперов) нет макросов m4, в файле sendmail.mc, в самом конце добавляем секцию LOCAL_CONFIG и в ней пишем соответствующие параметры:

LOCAL_CONFIG
O CipherList=HIGH:!ADH
O DHParameters=/etc/pki/tls/certs/dhparams.pem

Собственно используем тока эти чиперы:
# openssl ciphers -v 'HIGH,!ADH'

18 марта 2015 г.

Каменный век (21-я налоговая Москва)

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

А тут дела завели в Московскую налоговою №21. И... это каменный век! Электронной очереди для физиков нет, ни одного консультанта на входе, который бы пояснил в какой кабинет мне обратиться. Чудом нашел кабинет, куда мне вроде бы надо попасть. В узеньком коридорчике вдоль стенок толпится человек 20 горемык, регулярно выясняющих кто за кем стоит. Посмотрел на это дело и ушел. Пусть сами меня теперь ищут.

20 февраля 2015 г.

sendmail + dovecot

Как говориться: "давно не брал я в руки шашку"

Намедни скрещивал sendmail c dovecot.
Раньше между MDA и dovecot была прослойка антиспама DSPAM. Но производитель перестал осуществлять поддержку и пришлось с этой прогой попрощаться. Причем у довекота свое хитрое хранилище почты, никоим образом не пересекающееся с домашними директориями пользователей. База пользователей хранится в LDAP, поиск пользователя по uid без домена.  Т.е. они там просто vasia, petia, а не vasia@domen.com и т.п.
По этой причине стандартные "быстрые" howto не подошли.
Пример из официального руководства http://wiki2.dovecot.org/LDA/Sendmail не работал. После преобразования имен sendmail упорно выдавал пользователя с доменом локальной машины. Т.е. на входе преобразования petia@virt.domain.com, на выходе petia@host.com
Проблема решается путем удаления флага h и замены правила EnvToSMTP на PseudoToReal.

В результате получился вот такой m4

######################################################################
# to user = user@domain.com  use  F=DFMPhnu95l
# to user = user   use  F=DFMPnu95l
Mdovecot,   P=/usr/libexec/dovecot/dovecot-lda, 

            F=DFMPnu95l,
            S=EnvFromSMTP/HdrFromSMTP,

            R=PseudoToReal/HdrFromSMTP,
            T=DNS/RFC822/X-Unix,
            A=/usr/libexec/dovecot/dovecot-lda -d $u


sendmail.mc содержит:

define(`confLOCAL_MAILER',`dovecot')dnl
MAILER(dovecot)dnl

И самое смешное, после того как все это начало работать, я подумал: " а зачем так сложно?" и прикрутил sendmail к dovecot через LMTP :) Тем более что в howto было написано: Best solution is to use LMTP instead :) Но к сожалению эта фраза попалась мне только после окончания прикручивания своего мейлера :(

FEATURE(`local_lmtp',`[IPC]',`FILE /var/run/dovecot/lmtp')dnl
MAILER(local)dnl

Майлер local по автомату не подставляет имя хоста.

7 июля 2014 г.

fail2ban sendmail

Фильтр для sendmail

 [Definition]
failregex = \[<HOST>\] .*to MTA
            \[<HOST>\] .* Mailbox disabled for this recipient
            \[<HOST>\], reject.*\.\.\. Relaying denied
            (User unknown)\n* \[<HOST>\]
            badlogin: .* \[<HOST>\] plaintext .* SASL


Отличная штука этот fail2ban :)

18 июля 2013 г.

Полезное дело однако

Хорошие знакомые собирают деньги на выпуск документального исторического фильма. Рекомендую вместо покупки пары бутылок пива вложиться в полезное начинание :) http://start.planeta.ru/campaigns/1381

14 мая 2013 г.

Выключили свет, включили свет.

Вчера дома вырубили свет, потом включили. В результате я составил хейт рейтинг интернет провайдеров и не только. Оценки по старой доброй 5-ти бальной системе.
  1. МТС мобильный интернет - 0. Не работал.
  2. Искрателеком домашний интернет - 0. Не работал, служба поддержки после 3-х часов общения вызывает стойкий рвотный рефлекс. Сегодня пойду разрывать контракт и забирать свои деньги.
  3. Beeline мобильный интернет - 4. Тут правда билайн не виноват, но я понял почему Нокия в перде.
  4. Beeline домашний инет - 2. Служба поддержки работает как часы, но оплатить инет по кредитке не удалось. Совет дня: "найдите ближайший терминал оплаты и через него, через него..." это в пол двенадцатого ночи? Поэтому - 2.
  5. МГТС - 2. Телефон работает, но при попытке набора номера поддержки билайна 8 800ххххххх - отвечает, что такого номера в природе не существует. Олд скул, он всегда - олд скул.
В итоге: Никогда не куплю нокию. Вчера телефон выжил тока потому, что я кинул его в диван, если бы попал в стенку...Буду брать только телефоны со стандартными симками, поскольку в единственный телефон с андроидом можно было вставить тока микросим, а оно у меня тока от МТС :(Дома надо иметь резервный канал, потому что... они все такие провайдеры шо пипец.

30 апреля 2013 г.

Как получить DN текущего пользователя на Windows компьютере.

Сижу на вин компе подключенном к домену. Доступа к контроллеру домена нет. Надо получить dn текущего пользователя.

Решение:
Пишем vbs файл

Set objSysInfo = CreateObject("ADSystemInfo")
Wscript.Echo objSysInfo.UserName

Запускаем, смотрим.
Возможно есть более простой способ, но по быстрому получилось вот так.

Да. Иногда приходится заниматься и вот такой вот фигней.

27 февраля 2013 г.

Mikrotik - Wi-Fi bridge Ethernet - 100% CPU load

Микротик в прошивке 5.24 починил баг, связанный со 100% загрузкой процессора при объединении мостом Wi-Fi и Ethernet чипа.
Так что обновляемся.

6 февраля 2013 г.

Мода движется по кругу.

Оконные менеджеры в UNIX ругали за минималистский интерфейс. Плоско, без бантиков.
Смотрю на интерфейс Windows 8 и новых программ от MS, что то это мне напоминает. Квадратиш, практиш гуд :) Плоское, квадратное, без рюшечек ...
Мне кажется пойдет новая волна критики интерфейсов в UNIX - мол у вас там все не квадратное, не плоское, полупрозрачное, с тенями, границы окон гнуться, фигня вобщем :)

4 декабря 2012 г.

nxserver, ubuntu, не отображается меню

Настраивал тут nxserver товарищу, нарвался на то, что при входе пользователя не рисуется рабочий стол. Как я и подозревал, во всем виноват compiz :) нечего 3D плюшки по сети гонять! Вот nx и не гоняет. В результате у пользователя нет рабочего стола.

Решение проблемы простое, запускать сессию пользователя в 2D режиме. Ищем файл node.cfg, изменяем параметр.

CommandStartGnome = "/usr/bin/gnome-session --session=ubuntu-2d"

Все довольны.

16 ноября 2012 г.

Предчувствие gentoo.

Предчувствую, что gentoo станет моим любимым дистрибутивом. Причина вот в этом: Команда Gentoo Linux планирует совершить форк проекта udev.

Прямо как в любимом фильме: "я такую неприязнь испытываю к systemd, что аж кушать не могу" :)

29 октября 2012 г.

Beeline vs Искрателеком.

Испытания показали, что "Билайн домашний интернет" в моем доме работает хуже чем "Искрателеком". Билайн, отключен. Искра продолжает получать свои/мои деньги.

23 октября 2012 г.

Стих... японский

Давно не держал в руках долляровые купюры. Все как то разноцветные фантики: рублики, еврики, иногда гривны. А вот сегодня в банке дали парочку дестибаксовых купюр. И я удивился. Их печатают на желтой бумаге. О как. По этому поводу родился стих в японских тонах:

Доллар как лист. Был зеленым.
Осенью желтым стал.
Скоро зима.


З.Ы. Вторая книга про самураев наверное оказалась лишней.

17 октября 2012 г.

Mikrotik и BeeLine

У моего старого домашнего провайдера начались проблемы. Причем эти проблемы приобрели регулярность. Решил попробовать домашний итернет от пчелайна.
Из-за особенностей организации сети пчелайна и фич микротика, подружить их между собой достаточно тяжело. Добрые люди написали толковый мануал, огромно спасибо им за это. Но, как обычно, в жизни не все так как в мануале :) Учитывая, что старый провайдер пока от микротика не отключается, провод пчелайна был засунут в отключенный от общего свича интерфейс (ether5), появились маленькие тонкости.

1. Сначала подключитесь виндовым клиентом напрямую к сети  пчелок и запишите ip адреса DNS и VPN серверов пчелайна.

2. Почему то пчелайн DHCP сервер не отдает микротиковскому клиенту маршрут по умолчанию. Виндовому клиенту дает, микротику не дает. Поэтому приходится прописывать маршруты к сетям где находятся DNS и VPN серверам руками. Да и вообще, какой то странный их DHCP, выдал кучу всяких маршрутов, кроме вышеуказанных! Ну и по поводу его странности, см. следующий пункт.

3. Пчелайн редкосные бяки, их DHCP сервер выдает вот такой вот маршрут:
#      DST-ADDRESS  PREF-SRC  GATEWAY    DISTANCE
1 ADS  10.0.0.0/8             10.89.48.1 1
У моего старого провайдера внутренняя сеть тоже 10, но с маской /16. Т.е. старый провайдер честно дает маршрут на часть сети. Благо там pppoe подключение и можно не получать IP на интерфейс. Но пчелайн своим чудо маршрутом, просто заставил меня отказаться от использования внутренней сети старого провайдера. А там есть разные вкусности.

4. Вводить руками скрипт из мануала, занятие не для слабонервных. Поэтому, для тех кто пользуется winbox, привожу скрипты в нормальном виде.

corbina-l2tp_refresh
:local interface "BeeLine-l2tp"
:local vpnserver "tp.internet.beeline.ru"
:log debug message="Hard resolv script run"
/ip dns cache flush
:local "current-ip" [:resolve $vpnserver]
:local "old-ip" [/interface l2tp-client get [/interface l2tp-client find name="$interface"] connect-to]
:if ($"current-ip" != $"old-ip") do= {
:log info "VPN Server changed IP address from $"old-ip" to $"current-ip""
/interface l2tp-client set [/interface l2tp-client find name="$interface"] connect-to=$"current-ip"
}


corbina-l2tp_soft_refresh
:local interface "BeeLine-l2tp"
:local vpnserver "tp.internet.beeline.ru"
#:log debug message="Soft resolv script run"
:if ([/interface l2tp-client get $interface running] = false) do={
 :log info message="VPN down. Refreshing"
 /ip dns cache flush
 :local "current-ip" [:resolve $vpnserver]
 :local "old-ip" [/interface l2tp-client get [/interface l2tp-client find name="$interface"] connect-to]
 :if ($"current-ip" != $"old-ip") do= {
 :log info "VPN Server changed IP address from $"old-ip" to $"current-ip""
 /interface l2tp-client set [/interface l2tp-client find name="$interface"] connect-to=$"current-ip"
 }
}

Разумеется вместо BeeLine-l2tp вы подставите свое имя l2tp интерфейса.

З.Ы. Очень понравились возможности микротика в части управления чипа свича! Для начала сформировал два интерфейса в отдельный свитч (смотрите параметр Master Port на интерфейсе). В один воткнул шнур от пчелок, в другой шнур идущий на кухню. Таким образом смог подключить ноут на прямую в сеть пчелок. Записал все необходимые параметры, вернул интерфейс в старый свич. Если бы этой возможности не было, пришлось бы на табуретке сидеть в коридоре :)

10 октября 2012 г.

Ай да mikrotik, а да сукин сын.

Ну ребята, таки mikrotik меня удивил. Нда, я давно так не удивлялся. Такое ощущение, как будто съел кучу васаби и тебе сразу прочистило все дыхательные пути.

Итак: есть как бы роутер на микротик, у него два интерфейса:
  1. eth1 192.168.0.100
  2. eth2 192.168.1.100
Маршрут по умолчанию через eth1 на другой роутер.
И микротик и роутер двумя интерфейсами подключены к обеим сетям: 192.168.0.0/24 и 192.168.1.0/24
Причем у микротика eth2 - это было временное подключение, только на стадии первичной конфигурации, так как рабочая станция с которой он первоначально конфигурился была в сети 1.0.

А теперь вопрос: если на микротике из интерфейса eth2 вытащить шнурок, сможете ли вы с машины, находящейся в сети 192.168.1.0/24 попасть на 192.168.0.100?
Или немного другой вариант вопроса: можете ли вы, находясь на микротике попасть в сетку 192.168.1.0/24 согласно его маршрута по умолчанию?

Ответ простой - нет!

Как оказалось, у RouterOS есть забавная фишка. У нее маршруты к сетям, подключенным к интерфейсу, при отключении линка из таблицы маршрутизации автоматически не удаляются! О как! В Linux удаляются (кстати все маршруты проходящие через этот интерфейс), в Windows удаляются, а в RouterOS нет!

И вот, три дня я нем мог понять, почему с упорством маньяка RouterOS пытается отсылать пакеты в интерфейс, на котором нет линка?

Слава богу служба поддержки Микротика работает отлично и они меня просветлили (именно просветлили, прямо таки карму почистили).

Для того, что бы интерфейс начал работать в привычном, например для меня, режиме. Нужно добавить небольшой фильтр.

[admin@MikroTik] > /routing filter print
Flags: X - disabled
 0   chain=connected-in prefix=192.168.1.0/24 scope=200 invert-match=no
     action=reject set-bgp-prepend-path=""

Принцип работы этого фильтра: если есть лик, значение scope=10, если линк down - то scope=200.

Немного поработав с mikrotik девайсами я догадываюсь почему у них так устроено :) но все равно - это было очень неожиданно.

Небольшой апдейт. Достаточно удалить ip адрес из списка и маршрут будет удален. Но если его не удалить руками, то да - пишем фильтр.

5 октября 2012 г.

Mikrotik 1100AHx2

Однако он меня напрягает. Отказывается нормально поднимать bonding :( Хотя то же RouterOS на Х86 девайсе с bonding работает нормально.
Залили на него 6.0rc1, так в режиме бондинга вобще все сетевые интерфейсы отрубаются. Вернуть девайс в рабочий режим можно только путем разборки корпуса и и замыкания жесточайшего reset на плате :(
Оставили девайс в покое до среды. То ли мы че то не так, то ли они как то не очень.

Mikrotik + IPTV + IGMP + WiFi

Ух, ну и задачка была. Вроде ничего сложного, пропустить IPTV через mikrotik по wifi на комп. Перевернул кучу мануалов, не помогает. Но все равно добил вопрос до конца. Ладно, давайте по порядку.

Ставим пакет multicast.

По умолчанию он у меня не стоял.

Включаем igmp-proxy.

/routing igmp-proxy print              
              quick-leave: yes
           query-interval: 1m
  query-response-interval: 10s
/routing igmp-proxy interface print detail
Flags: X - disabled, I - inactive, D - dynamic, U - upstream
0 U interface=ether1-gateway threshold=1 alternative-subnets=0.0.0.0/0 upstream=yes
1 interface=bridge-local threshold=1 alternative-subnets="" upstream=no
На что следует обратить внимание?
  1. На alternative-subnets=0.0.0.0/0. Эта фишка позволяет ловить трафик с сетей к которым у вас нет обратного роутинга.
  2. interface=ether1-gateway - это тот интерфейс на который к вам будет приходить мультикаст трафик. Например у моего провайдера (Искрателеком) он приходит на локальный ethernet интерфейс, а не на pppoe интерфейс.
  3. quick-leave=yes. Позволяет быстро переключаться между каналами.

Разрешаем в фаерволе igmp и udp

Это нужно делать на цепочке input того интерфейса, который подключен к провайдеру и являющемся upstream.

И самое главное

Во всех мануалах на этом заканчивается настройка и все вроде должно работать. Но! если у вас Wi-Fi то по нему приходит маленький пушной зверек. Мультикаст пакеты начинаю тупо валить ваш беспроводной интерфейс! Упс.
В Инете рекомендуют дропать мультикаст трафик на Wi-Fi (при этом никакого ТВ там не будет) или выкинуть микротик и купить супер дупер девайсы :)
На самом деле проблема решается просто, очень просто.

Тадаааамммм!!!! Фанфары!!!

Включаем multicast-helper=full
Этот маленький пунктик заставляет ваш микротик отправлять мультикаст пакеты по индивидуальным MAC-ам тех девайсов, которые зарегистрированы  на Wi-Fi.

Все, вы можете смотреть ТВ на девайсе, подключенном к микротику по Wi-Fi.

З.Ы. Проверено на Искрателеком.

Апдейт раз. Пункт multicast-helper доступен в окне настройки wifi интерфейса после нажатия кнопки advanced. Ну или явно в командной строке после set.

Апдейт два. Не рекомендуется быстро переключать каналы. Особенность igmp proxy заключается в том, что при переключении на новый канал, старый трафик некоторое время продолжает транслироваться. Переключив быстро 4-5 каналов, вы превысите пропускную способность wifi канала и начнутся дикие тормоза. Конечно через минуту трансляция ненужных каналов отвалится и все станет нормально. Но все же...

3 октября 2012 г.

HP Printer & SNMP

Оказывается, если количество напечатанных страниц (9.1.1) превышает максимальное количество страниц картриджа (8.1.1), принтер возвращает oid 1.3.6.1.2.1.43.11.1.1.9.1.1 = 0. Странно. Пришлось переписывать правила в мониторинге.

26 сентября 2012 г.

DUDE контроль картриджей HP Printers

Начал щупать программку сетевого монитора Dude. Что сказать? Прикольно, удобно, управляет девайсами mikrotik на прямую, на шару, работает :)

Возникла задача контролировать картриджи в принтерах HP. Получилось.

1. Создал функцию:
Имя: HPCartrige
Описание: Выдает % использования картриджа
Код: oid("1.3.6.1.2.1.43.11.1.1.9.1.1") * 100 / oid("1.3.6.1.2.1.43.11.1.1.8.1.1")


2. Создал пробу:
Имя: HP pages
Тип: Functions
Агент: по умолчанию
Доступно: if(oid("1.3.6.1.2.1.43.11.1.1.8.1.1")>2000,1,-1)
Ошибка: if(HPCartrige()<95,"","Картридж смени!")
Значение: HPCartrige()
Единица измерения: %


3. Подключил пробу к принтерам HP.

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

Апдейт. Конечно приятно самому докопаться до проблемы,  но... таки надо читать мануалы и спец форумы. Оказывается - все уже придумано :) тыц вот тут.

22 сентября 2012 г.

MUM в Москве.

 В пятницу посетил http://mum.mikrotik.com/2012/RU/info/RU. Забавная компания из Литвы делает недорогие, интересные решения. В том числе свою ОС, по сути свой дистрибутив с закрытой оболочкой над Linux (кстати, на вопрос, а где исходники ядра и прочего, они слегка стушевались и сказали, что ядро стандартное, берите с kernel.org, а софт наш и не под свободной лицензией). Вобщем забавная и удобная штука, мы даже начали использовать кое что из их решений.

Задумался как применить девайсы этого производителя дома. В плане центральный девайс  4 Ethernet + 4POE + Wi-Fi и по Ethernet 5-ти портовому коммутатору на комнату. В итоге всего один шнур питания, ляпота.

И вот тут нарвался на засаду, точнее на две. У них POE нестандартное 24 вольта :) и девайс, который может раздавать питание только 100М Ethernet :) Упс. Покупать отдельные блоки питания и модули для POE (они у них есть)? Так у меня станет больше проводов чем сейчас. Или возвращаться на 100Mb с 1Gb :) Вобщем обидно. А всего то надо сделать вот этот девайс RB750UP с гигабитными интерфейсами. Так что, пока оставлю дома инфраструктуру на старом добром netgear.

29 августа 2012 г.

Склероз.

Че то стал одолевать склероз. Поэтому оставлю заметку для себя.
Артур, запомни, если ставишь sendmail на пустой сервер, обязательно поставь пакет cyrus-sasl-plain. И все у тебя будет хорошо. И сохранишь себе пару месяцев здоровья.

3 августа 2012 г.

Так вот откуда они взялись!


Урок о сокращениях.
Это примерный пересказ поста Роба Пайка в его Г+. Я плохой переводчик, поэтому никогда не называют такие тексты «переводом»
Давным давно, когда был разработан дизайн файловой системы Unix, были придуманы записи . и .., для облегчения навигации. Я не уверен, но кажется .. появился при переписывании Версии 2, когда в файловой системе появилась иерархия (до этого структура была совсем другой). Когда кто-то набирал ls эти записи показывались на экране, поэтому Кен или Деннис добавили простую проверку в программу. Тогда всё писалось на ассемблере, но код был примерно эквивалентен чему-то вроде этого:
if (name[0] == '.') continue; 
Этот код был слегка короче, чем должен, потому что правильно было написать
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue; 
но блин, это же было проще.
Результатом были две вещи.
Во-первых, был создан неприятный прецедент. Толпы других ленивых программистов порождали баги, используя то же самое упрощение. Настоящие файлы начинающиеся со знака точки часто пропускались, даже в тех случаях, когда должны были быть учтены.
Во-вторых, и это намного хуже, появилась идея «скрытых» файлов или «файлов с точкой». Как следствие, толпы других ленивых программистов1 стали разбрасывать файлы в домашних каталогах. У меня не так много всего установлено на машине, в которую я сейчас набираю этот текст, но мой домашний каталог содержит около сотни файлов с точкой, и я даже не знаю, что в большинстве из них и нужны ли они вообще. И каждое дополнительное имя файла в домашней папке замедляет работу машины, пусть не намного, но это же накапливается.
Я совершенно уверен, что концепция скрытых файлов была непреднамеренной оплошностью. Это просто была ошибка.
К какому количеству багов, потраченных циклов CPU и случаев человеческого разочарования (не говоря уже о плохом дизайне) привело одно маленькое упущение, случившееся 40 лет назад.
Задумайтесь об этом в следующий раз, когда захотите «срезать угол» в вашем коде.
(Я не спорю с теми, кто говорит, что скрытые файлы служат определенной цели, но это цели служат файлы, а не соглашение об их наименовании. Их легко можно было складывать в $HOME/cfg или в $HOME/lib, как мы и сделали в Plan 9, где нет файлов с точкой. Выводы были сделаны)
Роб Пайк. 3 августа 2012.

Перевод взят тут.

Инструкция.

Сегодня меня метро порадовало. Вобщем все как обычно: еду, стою, сплю. Передо мной сидит тетечка, такая вся богомольная (худая, болезненно бледная, такая никакая), читает брошюрку. Глаз цепляется за название главы: Рай.
Интересно, фокусирую зрение (правда без очков трудно получается) :) Глава начинается со слов: "Когда вы попали в рай, надо помнить о том, что...." Ухтышка какая. Я еще больше просыпаюсь :)
Фокусирую зрение вверху страницы, где обычно печатают название книги. Название меня окончательно проснуло: Инструкция для бессмертных!!!
Все, настроение поднялось, я готов к работе :)

6 июля 2012 г.

Два пароля у учетной записи... Чудеса Windows

Коллега выложил видео. Смотреть тут: http://video.lisa-alisa.ru/password2.html

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

4 июля 2012 г.

Толстый клиент 1С 8.3

Вообщем толстый клиент 1С 8.3 удалось запустить под linux. Но с бубном поплясал от души.
На RedHat и производные установить не удалось.
На Ubuntu LTS 12.04, после допиливания его напильником все встало.

Тепереча бум пробовать его в работе

27 июня 2012 г.

Прогулка за батоном.

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

P.S. надеюсь в дальнейшем ссылку на это видео не признают как ссылку на экстремистский материал, а то могу попасть на большие бабки :)

6 июня 2012 г.

Замечательный комментарий к очередной статье, вышедшей из под пера сострудника кадрового агентства

Комментарий (с) Evgeniy Kuznetsov, к статье. Взято из FB
1. Почему вы выбрали именно нашу компанию?
- Вы идиот? Я направил резюме в десяток мест. Где устроюсь быстрее и выгоднее - там и хорошо.

2. Как вы считаете, почему мы должны выбрать именно вас?
- Вам работники вообще нужны? Ну вот он я. Работник. Именно меня стоит выбрать хотя бы потому, что я явно умнее всех тех, кто заливал на эти вопросы стандартную чушь. И умнее вас, между прочим, потому что я никогда таких дурацких вопросов бы не задал.

3. Какую зарплату вы хотели бы получать?
- 2,5 млн. $ в год, как президент США. Что за вопрос? Естественно, я хочу получать настолько высокую зарплату, насколько вы сможете мне заплатить. Только ведь вы всё равно не заплатите. Тогда нечего и выпендриваться. Всё равно выбор за мной: вы говорите цену, я говорю - согласен или нет.

4. Почему вы ушли с предыдущего места работы?
- Предположим, отвечу честно: маленькая зарплата или отсутствие карьерного роста, или бесперспективность, или не сошелся с коллективом, или не понравился собаке начальника. И что? Вы же не знаете, сойдусь ли я с вашим начальником, коллективом и их собакой. И не узнаете, пока не попробуете.

5. Кем вы видите себя через 5 лет в нашей компании?
- Вот вам встречный вопрос: какие планы компании на ближайшие 5 лет? Нет таких? Так если вы сами не знаете, что с вами будет через 20 лет, будет ли компания и какую нишу она намеревается занять, то мне-то откуда это знать?

6. Какие у вас были достижения на предыдущем месте работы?
- А резюме недостаточно, значит. Ну хорошо. Я отлично работал и великолепно справлялся со своими обязанностями. Вот это - достижение! Я вас разочарую: при правильном руководстве и хорошей работе никаких достижений быть не должно! Работать надо, а не ерундой маяться и достижения достигать!

7. Каким бы вы хотели видеть своего начальника?
- Я бы хотел его не видеть. Серьезно, мне нет разницы как он выглядит. Главное, чтобы он был начальником: тем, кто может нормально и внятно сформулировать задачи. А в остальном, пусть хоть в красных труселях на белой капибаре разъезжает по офису.

8. Какие у вас есть достоинства?
- На гуслях я умею играть и плеваться на 15 метров в длину. Если вам нужна моя квалификация, то она указана в резюме. Если вам что-то нужно еще - то об этом и спросите. А если вы сами не знаете, чего вы хотите и что вам нужно, то тут, извините, ничем помочь не могу. Формулировать скрытые и неясные желания - это вам к психиатру нужно.

9. Каковы ваши недостатки?
- Хорошо тенором пою, соседи жалуются, а в консерватории сказали - талант. Вот еще: когда ем суп, зачерпываю ложкой к себе, а не от себя!

23 мая 2012 г.

roundcube - LDAP(AD) - фотография контактов

Сразу оговорюсь, у нас в AD включена поддержка unix services for windows. (кстати, очень сильно облегчает интеграцию с Linux машинами, без поднятия Samba&winbind).

Адресная книга, полученная из LDAP в roundcube интегрируется легко. Достаточно посмотреть закомментированный пример в конфигурационном файле. Но вот про получение фотографии из LDAP в конфиге примеров нет :(

Эта проблема решается следующим образом. Предположим что в LDAP за фото отвечает атрибут jpegPhoto. (хотя в AD есть еще и thumbnailPhoto)

В main.inc.php пишем:
'fieldmap' => array(
// Roundcube  => LDAP
...
'photo' => 'jpegPhoto',
...
),
Разумеется, вместо ... подразумеваются строки с другими параметрами.

З.Ы. А вот как брать фото в thunderbird я так и не нашел :(пичалька):

19 апреля 2012 г.

Microtik и VLAN

Столкнулся с проблемой, настраиваю VLAN а они не работают :( Причина была в slave интерфейсах.

interface ethernet print

Смотрим, что бы в столбце MASTER-PORT было значение none. Если там находится имя интерфейса, то нужно у этих интерфейсов установить его на none:

interface ethernet set ether3,ether4,ether5 master-port=none

12 апреля 2012 г.

Скобочки, кавычки :)

Тока сегодня понял для чего в шел скрипте есть два варианта запуска внешней программы: `` и $()
`prog -p `param 1, param2` | prog 3`
Будет ругаться. А вот так нет:
$(prog -p `param 1, param2` | prog 3)
Век живи, век учись :)

11 апреля 2012 г.

shared folder in dovecot

Никогда бы не подумал, что расшаривание INBOX пользователя в режиме ro другим  пользователям в довекоте сделано через такую #ОПУ!
Пришлось сильно выкручиваться, что бы эту папку увидели Thunderbird и Roundcube.

21 марта 2012 г.

Вот такое вот мероприятие.

Вот такое мероприятие ожидается в Апреле в Ульяновске.

Я консерватор.

Реально не понимаю - зачем вносить изменения в то, что и так хорошо работает? При чем, изменения ну ни капельки не улучшает того что уже есть. Это "камень" в огород RedHat, ну и "самосвал булыжников" в огород Федоры.
Сижу копаю CentOS 6 и опять приходится переучиваться. Простейшая фигня, аутентификация на LDAP сервере. Раньше (RedHat <= 5) был один пакет с одним конфигом. Теперь (RedHat 6): два пакета, дополнительный демон и три конфига. Ну нафига это было делать? Что там у федоры творится, даже смотреть не стал.

З.Ы. После просмотра 16-й Федоры, этот дистрибутив у меня вычеркнут из списков используемых.
З.З.Ы. Чувствую, еще пара таких "улучшений" и вернусь на Slackware.

18 марта 2012 г.

Чет MTT начинает напрягать.

Чет IP телефония от MTT козлит последнее время. Регулярные ошибки (ip код 500 и 480) и невозможность позвонить. Вообщем правильно я оставил проводной телефон от МГТС. Если МТТ и дальше будет себя так вести - придется отказаться от их услуг.

15 марта 2012 г.

Proxmox

Proxmox оказался вполне достойной системой управления виртуализацией в Linux. Покупка RedHat откладывается :)

Мелочи

Из-за этой строки (точнее её отсутствия) потерял полдня при настройке сервера :(

ServerParameters        "--deliver=innocent,spam"

Вывод: mcedit - зло, vim рулит.

28 января 2012 г.

Суббота удалась

Таки да, суббота удалась.

Сначала мне, совершенно случайно, досталось приглашение на органный концерт по абонементам в Московский Дом Музыки. "В органном королевстве" Федор Строганов.
Я сразу заявил свои веские права на единственное приглашение :), выменяв его на контрамарку в Малый Театр у подруги жены.
Да, орган - это сила! Сидел на концерте и тихо кайфовал.
Учитывая, что это серия концертов для детей, она носит скорее познавательный характер. В один день были показаны разные направления в органной музыке. Было очень интересно. Я не надеялся (честно признаюсь, брал приглашение не глядя в программу, понадеялся на то, что к таким органам всяких халтурщиков не пускают :), но мне повезло - токкату и фугу ре минор Баха, Федор исполнил :) Вау, дух захватывает.


После окончания концерта, судьба преподнесла еще один сюрприз. Подруга жены, которой досталась моя контрамарка, простудила шею. И я вечером таки попал еще и в Малый Театр :).
Если от органа я получил удовольствие, то от посещения Малого Театра остался какой то осадок :(. Ну что вы обычно ожидаете от Малого Театра? Ага, олд скул театр, Станиславский, "Не верю", "Чайка" и прочее. Вобщем ожидается такой старый добрый театр.
Ндя, когда подняли занавес и началось действие, я не поверил своим глазам - актеры работали с петличками (микрофоны такие)!!! На сцене Малого Театра!!! А потом актеры запели! И я понял - мать твою - это же мюзикл! В Малом! О Боги! Куда я попал?! Дон Жуан, А. Толстой, музыкальная драма (мюзикл с печальным концом).
Зря я не провентилировал вопрос заранее :( может бы поменялся с кем нибудь еще :)
Сам спектакль так себе, я потихоньку засыпал. На антракте мы с женой посмотрели друг на друга и спросили себя: "Пойдем сейчас или таки досмотрим это?". Решили досмотреть. Правильно, что остались. Когда появилась статуя командора, мурашки побежали по телу.

Вот так я провел субботу, забавно.

5 января 2012 г.

Gigaset C610A IP

Вобщем настал момент, когда я решил объединить в одном девайсе стандартную проводную телефонию от МГТС и IP телефонию.

Раньше проводной телефон был отдельно (DECT Philips с парой трубок) и IP телефония от МТТ через шлюз Planet (со вторым noname DECT телефоном).
Выбирал недорогой IP телефон с возможностью подключения аналоговой проводной линии. Выбирал между Panasonic и Gigaset. В итоге выбрал Gigaset. Основной причиной была возможность подключения простых DECT трубок, у Панаса подключаются только специализированные трубки.
Вчерась привезли девайс, распаковал, включил. Настройка (включая обновление прошивки) заняла минут 10. Трубку от Phillips подключил сразу. К сожалению подключил только одну трубку, на второй ребенок раздавил экран и я не смог банально выбрать меню ввода кода базы :).

Что хотелось бы получить в итоге.
  1. Все исходящие на 495, 499, 812 и межгород делать через МТТ.
  2. Исходящие на мобилы и спец службы (112, 01, 02, 03), через МГТС. (Номер МГТС приходится оставлять, потому как многочисленная родня и знакомые жены и тестя знают только его. В перспективе перейду на самый дешевый повременной план.)
  3. Все входящие отображать на всех трубках, подключенных к девайсу.
На какие неприятности наткнулся:
  1. Если на простом DECT при поднятии трубки сразу выдается сигнал линии МГТС и ты можешь набирать номер "на слух" (это особенно важно при наборе через "8, пауза, код, номер телефона"). То тут все наоборот, сначала набираешь номер, потом телефон немного думает, подключает линию и начинает набирать номер. Поэтому приходится при наборе номера после 8-ки явно ставить символ паузы (R или P, зависит от производителя телефона). А зная качество связи МГТС, телефон после 8-ки может не дождаться ответа станции и продолжить набирать номер :(
  2. Настройка плана звонков в Gigaset-е убогая до безобразия. Рассчитана только на IP телефонию. Простой пример, хочу все звонки на код 916 МТС завернуть на телефон от МГТС. Т.е. все телефоны, номер которых начинается на 8P916 или 8R916, пускать на соответствующую линию. Ага, бананас! Gigaset не понимает символы паузы в номере! Вау! Т.е. если я хочу отловить номера мобилы я должен писать 8916, но см. пункт 1. Без паузы на МГТС не набрать такой номер! Обалденная засада! Слава Богу, на родной гигасетовской трубке можно выбрать линию, через которую придется делать звонок, но вот с другой трубой это сделать не получится. Поэтому пришлось жестко привязать все звонки с Филипса на МГТС :(, абидно.
  3. Сервисные службы, предоставляемые порталом Gigaset либо не работают, ли бо все через опу. Да и для отображения почты и прочая, производитель забыл поставить русские шрифты в трубку :) или кодировки не понимает :) Так что отключил я всю эту фигню. Тем более, что на не родных трубках это по определению не работает.
  4. WEB морда торомозиииит :). Но это не критично, потому как настраиваешь один раз, и забываешь про ее существование.
В итоге план звонков выглядит печально:
Трубка Philips жестко привязана к МГТС.
На гигасете установлен выбор линии при наборе номера.

01 -> МГТС
02 -> МГТС
03 -> МГТС
112 -> МГТС
8495 -> МТТ
8499 -> МТТ
8812 -> МТТ
Жене сказано, что все звонки по межгороду только через трубу Гигасет :) (а шо? тоже план звоков, ага :)

Единственно радует, что если номер из плана звонков, то срабатывает линия, указанная в плане. Т.е при наборе на филипсе номера 8495ххххххх набор будет через МТТ. А вот если набирать 8P495ххххххх - соединение пойдет через МГТС.

Теперь вот сижу и думаю, как я это все объясню своей жене?! Чувствую придется таки докупать вторую трубу от гигасета :)

14 декабря 2011 г.

очистка истории сообщений в openfire

Предупреждаю сразу - сам еще не попробовал, надо дождаться выходных, когда люди спать будут :)

Вобщем всем хорош модуль Monitoring в openfire, но есть один боооольшой недостаток, нет возможности в WEB интерфейсе почистить историю сообщений. Тупо хранит все.
У друзей возникла задача, оставлять только свежие сообщения. Т.е. удалять все, что древнее одного месяца.
Полазив по базе openfire обнаружил табличку:

mysql> describe ofMessageArchive;
+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| conversationID | bigint(20)   | NO   | MUL | NULL    |       |
| fromJID        | varchar(255) | NO   |     | NULL    |       |
| toJID          | varchar(255) | NO   |     | NULL    |       |
| sentDate       | bigint(20)   | NO   |     | NULL    |       |
| body           | text         | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+
Как видно из таблицы, все будет крутиться вокруг sentDate.
В результате появилась вот такая вот командочка:

delete from ofMessageArchive where sentDate/1000 < unix_timestamp(now())-2629743

По идее должно почистить табличку.
Погуглив по имени таблицы, нашел вот это: http://community.igniterealtime.org/docs/DOC-2199
В выходные проверю.

9 декабря 2011 г.

SIP


Товарищи / други, подскажите - какой SIP оператор сейчас актуален для звонков за кордон (Украину) и по Москве? По старинке пользуюсь sipnet.ru, может есть более лучшие предложения на рынке?

Кнопки реальные или виртуальные

В очередной раз убедился, что реальные кнопки на телефоне гораздо лучше сенсорных кнопок. У андроида используется 3-4 кнопки для управления. На моем Десаере они выполнены как натуральные кнопки + джойстик, у жены эти кнопки сенсорные.
Сенсорные не удобны, палец регулярно залазит в область кнопок и происходит непроизвольное нажатие.
Так что старайтесь выбирать телефоны с настоящими кнопками, они дороже но оно того стоит.

8 декабря 2011 г.

Еще мысли


Постановка ФоксНьюз про протесты в России с кадрами из Греции, рассчитана на западного зрителя. Ну скажите, кто из наших смотрит этот порноканал? В отличии от Ливии, где было важно заглушить общественное мнение на западе, что бы не дай бог в ОНН чего не ляпнули, в нашем случае у нас всем по барабану, что выдумают монтажеры фокса.
С другой стороны митинг - это способ спустить пар у толпы. Если наши чудо руководители не смогут его правильно разыграть (а мне почему то кажется, что не смогут) - то будет жестокое махание палками ОМОН-ом и куча озлобленных граждан.
Я бы на месте власти выделили под митинг аэродром. Организовал бы туалеты, чай, булочки. Что бы все могли высказаться, спустить пар. И разойтись. Ни в коем случае нельзя организовать давку, прессинг. Вот если толпа пойдет за пределы, тогда да, аккуратненько разбиваем толпу на части (ОМОН это умеет) и вежливо, под ручки в душ остыть.
Но я боюсь, что власть опять начнет быковать и тупо будет бить правых и левых. И в результате может случиться, снежная революция! Так что нефиг ругать тех, кто хочет пойти на митинг, они имеют право высказаться. Попросите своих любимых правителей с умом подойти к делу, а не отмахнуться от народа в очередной раз.
Кстати, тот же Путин может на этом примере показать, какой он мудрый правитель, а не тупо рассуждать, что ЕР - это не очень его дело.

мысли

 Жалко, но я не могу вспомнить кто говорил, что народу надо давать спускать пар. Ведь все знают, что если перекрыть клапан на глухо, у котла сносит крышу.

Почему власти не стравили пар? Ведь всего делов то - устроить пару показательных расследований с деятельностью избирательных комиссий. Согласиться стем, что вон они гады все накрутили! Но мы с этим боремся! Ну потеряют при этом пару процентов, но ведь в результате у них все равно будет большинство (ЕР+Жирик+Справороссы) и народ поутихнет.

Не понимаю, зачем было доводить до кипения? Зачем быковать? Причем заранее зная, что редиски забугорные спят и видят как бы у нас протащить цветную революцию.

Теперь власти придется натравливать ОМОН на свой же народ и репутация подмочена. Вон даже Путин говорит, я к Едру имею так себе отношение - вот народный фронт!!!

Апдейт:
О, власти таки послушали умных людей :) Не можешь запретить, возглавь :) Счаз потихоньку весь накал на тормозах спустят и не будет ни какой революции и мордобоя. Позитивно.
http://www.lenta.ru/news/2011/12/08/freedom/

Выборы закончились, можно жечь.

Выборы закончились, можно жечь.
Get Adobe Flash player

29 ноября 2011 г.

cyrus-imap ipurge

После какого-то обновления (честно говоря не уследил какого), cyrus-imap перестал нормально отрабатывать скрипты в разделе EVENTS.

Например, у пользователей чистятся папки с карантином. Раньше работало вот так:
purgespam cmd="ipurge -f -d 5 user.*.quarantine" at=0100
Но теперь программа стала "выборочно" очищать папки, некоторые просто игнорирует.

Есть подозрение, что изменили таймаут, по которому прекращается выполнение ipurge.
Пока не разобрался в причине, пришлось выкручиваться вот таким смешным образом:

purgespam cmd="ipurge -f -d 5 user.a*.quarantine" at=0100
purgespam cmd="ipurge -f -d 5 user.b*.quarantine" at=0110
и так далее, по всему алфавиту :)

23 ноября 2011 г.

Несколько админов в openldap, или каждому своя ветка

Как при большом количестве контейнеров в openldap разрешить конкретным пользователям работать с конкретными контейнерами?

Исходные данные:
корень зла: dc=test,dc=com
организация раз: o=org1,dc=test,dc=com
организация два: o=org2,dc=test,dc=com

Необходимо пользователю uid=admin1,o=org1,dc=test,dc=com дать возможность управлять (добавлять, удалять, редактировать) записи в org1. Пользователю uid=admin2,o=org2,dc=test,dc=com, аналогичные права на org1 и org2.

Мы не будем жестко прописывать в acl пользователей. Каждый раз менять sldap.conf или динамический cn=config при изменении администратора контейнера не очень удобно. Для разгарничения доступа будем использовать objectclass: groupOfNames. По сути своей - это группа, которую, в отличии от posixGroup, openldap умеет использовать в acl.

Создадим две группы: cn=admins1,dc=test,dc=com и cn=admins2,dc=test,dc=com. В первую будем добавлять пользователей, которые будут рулить org1, во вторую, пользователей управляющих org2. Обратите внимание на то, что эти группы в иерархии находятся на одном уровне с org1 и org2, это сделано для того, чтобы добавлять/удалять пользователей в эти группы мог только суперадмин.

Создать группы можно при помощи ldif файла, пример которого показан ниже. Или при помощи любого клиента ldap, например phpLDAPadmin

dn: cn=admins1,dc=test,dc=com
cn: admins1
member: uid=admin1,o=org1,dc=test,dc=com
member: uid=admin2,o=org2,dc=test,dc=com
objectclass: groupOfNames
objectclass: top

dn: cn=admins2,dc=test,dc=com
cn: admins2
member: uid=admin2,o=org2,dc=test,dc=com
objectclass: groupOfNames
objectclass: top

Теперь займемся sldap.conf. За основу был взят файл из пакета в OpenSuSE. От оригинала остались только первые два правила.

access to attrs=userPassword,userPKCS12
        by self write
        by * auth
access to attrs=shadowLastChange
        by self write
        by * read
#=====================================
access to dn.subtree="o=org1,dc=test,dc=com"
        by self write
        by group.exact="cn=admins1,dc=test,dc=com" write
        by anonymous auth
        by * read
#======================================
access to dn.subtree="o=org2,dc=test,dc=com"
        by self write
        by group.exact="cn=admins2,dc=test,dc=com" write
        by anonymous auth
        by * read
#=======================================
access to dn.base="dc=test,dc=com"
        by * read
access to dn.one="dc=test,dc=com"
        by * read
access to dn.base=""
        by * read
access to dn.base="cn=Subschema"
        by * read
access to *
        by * none

Рассмотрим подробнее этот файл. Как я уже говорил, первые два правила отсались от оригинала.
Правило доступа к контейнеру o=org1,dc=test,dc=com

access to dn.subtree="o=org1,dc=test,dc=com"
        by self write
        by group.exact="cn=admins1,dc=test,dc=com" write
        by anonymous auth
        by * read
  • dn.subtree - доступ ко всем объектам контейнера, включая все дочерние контейнеры.
  • by self write - любой пользователь должен иметь возможность изменять свои данные.
  • by group.exact="cn=admins1,dc=test,dc=com" write - а вот собственно и группа админов, членам которой можно изменять все.
  • by anonymous auth - открываем возможность аутентификации пользователям.
  • by * read - тут вопрос спорный - выдавать информацию о записях или нет всем остальным? В принципе я бы поставил none, или более подробно расписал какие атрибуты можно или нельзя читать. В конце концов, что разрешать остальным - решать вам :)

Аналогично описан доступ ко второму контейнеру.

access to dn.base="dc=test,dc=com"
        by * read
access to dn.one="dc=test,dc=com"
        by * read
access to dn.base=""
        by * read
Эти правила добавил для того, чтобы программы типа phpLDAPadmin могли отображать информацию о корневых контейнерах.

access to dn.base="cn=Subschema"
        by * read
Это запись для удобства. В phpLDAPadmin можно смотреть схемы, описания атрибутов, при условии, что ldap сервер такую информацию отдаёт.

access to *
        by * none
Традиционное правило по умолчанию.

Вот пожалуй и все. В результате, если поменялся администратор контейнера не надо рестартовать сервер (в случае статической конфигурации) или возится с ldif файлами (в случае динамической конфигурации). В любом клиенте ldap заходим суперадмином и меняем членов групп admins1 и admins2.

22 ноября 2011 г.

phpLDAPadmin не работает шаблон PosixGroup

Решил обновить свои познания в openLDAP. В процессе подготовки столкнулся с небольшой проблемкой в phpLDAPadmin: если ставить по умолчанию openldap, в phpLDAPadmin перестаёт работать шаблон по созданию PosixGroup.
При первом входе в phpLDAPadmin выводятся предупреждения типа таких:
Posix Group: cn removed from template as it is not defined by an ObjectClass
И в дальнейшем шаблон добавления группы не работает :(

Лечится это просто, в sldap.conf необходимо заменить схему rfc2307bis.schema на nis.schema. Перезапустить ldap сервер. В интерфейсе phpLDAPadmin-на очистить кеш (там есть соответствующая ссылочка). После этого шаблон создания группы будет доступен.

17 октября 2011 г.

14 октября 2011 г.

SLES 11

Жизнь заставила вернуться к SLES.
Заказчик попросил  прикрутить к kerberos аутентификацию по карточкам. Задача вообщем не сложная, но как оказалось на на SLES+SLED. Модуль pkinit в krb5 не хочет настраиваться.
Решил посмотреть подробные логи модуля, но для этого необходимо пересобрать его исходники (во как!). Опять же не сложно, но не в SLES :) У этих гадов по умолчанию на диске не поставляются -devel пакеты! Они доступны только из сетевого репозитория, который, в свою очередь, доступен только после регистрации продукта :)
Пришлось демо ключик брать. Сижу, качаю апдейты, день пропал :(

11 октября 2011 г.

Вышла новая версия alfresco

Вышла новая версия alfresco. Только мне кажется, что ребята занимаются какими то фантиками-бантиками, вместо нормального допиливания продукта до кондиции?
http://www.opennet.ru/opennews/art.shtml?num=31996
Новый сервис для публикации контента и обновления статуса в социальных сетях и на сайтах, таких как YouTube, Facebook, LinkedIn, Twitter, Flickr и SlideShare. Сервис публикации в социальных сетях теперь является частью рабочего процесса управления контентом предприятия. Для контроля публикации на внешних ресурсах предусмотрена специальная система рецензирования материалов перед их публикацией;

29 сентября 2011 г.

Купил вот пианино...

С детства мечтал научиться играть на пианино. Но, то денег на муз школу в семье не было, то студентом был, то работал как вол. И вот все обстоятельства сошлись в кучку :) и время появилось и желание и пенёнзы.
Прикупил пианину Casio Privia PX-330. Вчерась вот привезли. Распаковал, проверил нажатие всех клавиш, расписался в получении. Как и положено, пошел гаммы шпарить, И вот тут то Casio проявило себя. При сильном нажатии и удержании соль второй октавы, при нажатии на клавиши рядом перестает работать контроль силы нажатия, и ноты играются в максимальной громкости и в другой тональности. Стоит соль отпустить и все играет как нужно.
Так обидно блин. Причем видно, что проблема на уровне программы, а не механики. Ну я тут же облазил весь инет по поводу перепрошивки девайса и ничего по этому поводу не нашел :( В casio предложили везти пианину в сервисный центр.
У меня сложилось ощущение, что какую бы сложную технику я ни купил, обязательно будут подляны с поездкой в сервисные центры (сейчас у меня моноблок HP ждет, когда мне надоест бороться с его DVD приводом :) ). 
Но тут меня удивили в интерент магазине, где я покупал пианину. Предложили сами отвезти его в сервис и после перепрошивки завести его обратно, причем бесплатно. Вау! Бывают же чудеса. Сегодня заедут забирать. Ну и ладно, все равно моя учитель музыки пока в отпуске. Надеюсь, что к ее приезду у пианины мозги поправят.