23 декабря 2015 г.

Отпуск!

По давно сложившейся традиции за неделю до конца года беру недельку отпуска.
Работа - встретимся в следующем году :)

18 декабря 2015 г.

CentOS 7.2 and VirtualBox 5

Обновился до 7.2, перестал работать VirtualBox. Не собираются модули ядра.

Есть официальный тикет по этому поводу. Патч добавлен в текущую тестовую версию ВиртуалБокса.

Проблема решается сносом стабильного бокса и установки тестовой версии вот от сюда.

Надеюсь новый стабильный билд выйдет достаточно быстро.

4 декабря 2015 г.

Память

В гости приезжала мама. Привезла старые фотографии. Сидели, разбирали, вспоминали.

Это мой дедушка по материнской линии, Плетнёв Иван Сергеевич. Закончил войну в Будапеште, ранен. После войны гонял всякую недобитую шваль по Одесской области.

Брат бабушки (двоюродный дед) Владимир Степанович Кандиболоцкий, прошел всю войну солдатом. Полный кавелер Ордена Красной Звезды.

Бабушка с сестрой во время войны жила под Одессой в Люстдорфе (одесситы знают где это :). Пережила румынскую оккупацию, кое что про это время рассказывала.
На фото, бабушка Мария Степановна с моим прадедом Степаном Георгиевичем Кандиболоцким.

Жаль, что по линии отца фоток не осталось :(

24 ноября 2015 г.

Рабочая станция

Ндя... После Unity и Ubuntu рабочая станция на CentOS не торт. Куча настроек руками.
В KDE работать не смог, не оно. Третий Гном приятнее, но иконки на рабочий стол приходится ставить руками в консоли.

16 ноября 2015 г.

майдан головного мозга.

Уроды. Сначала они переименовали мою родную ул. Якира в Ицхака Рабина. Учитывая, что это Рабин ни разу не был в Одессе, иврейцы прогнулись.
Теперь они хотят 25 Чапаевской дивизии переименовать в улицу атамана сирко (хто это вообще такой?).
И если в детстве, садясь в такси мама назвала адрес: Якира угол Чапаевской. То теперь это будет звучать как: Рабина угол Сирко. Зашибись!

http://timer-odessa.net/news/hroniki_dekommunizatsii_ulitsu_geroev_stalingrada_hotyat_nazvat_v_chest_filippa_orlika_a_aleksandrovskiy_prospekt_v_chest_nebesn.html

12 ноября 2015 г.

Заставить работать wine в centos 7

Это блин жестокий квест...

По умолчанию пакет wine в centos собран как 64 битный. А большинство приложений для винды 32-х битные. Вот оне и не запускаются.
Производитель дистрибутива (не будет тыкать в него пальцем, но все понимают, что это RedHat) отказывается поставлять 32-х битный wine. Принципиально.

И вот тем, кто решил использовать в качестве рабочего стола CentOS 7 придется пройти квест по сборке и установке 32-х битного wine, описанный вот тут. Я как раз сейчас этим занимаюсь.

Апдейт.
Ну да, в руководстве был показан верный вектор. Но как всегда - "дьявол кроется в деталях".
Из-за того, что сейчас на сайте находится более свежая версия wine, чем показана в мануале, у нее малость другой spec файл. Поэтому, для версии wine-1.7.53-1.el7.src.rpm diff будет выглядеть следующим образом:

# diff wine.spec wine.spec.2 
372,373c372,373
< Requires:       wine-core = %{version}-%{release}
< Requires:       wine-common = %{version}-%{release}
---
> #Requires:       wine-core = %{version}-%{release}
> #Requires:       wine-common = %{version}-%{release}
375a376
> Requires: wine-core(x86-32) = %{version}-%{release}
702c703

---
> sed -i '/winegcc/s/-o /-m32 &/' tools/makedep.c

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

11 ноября 2015 г.

5 ноября 2015 г.

Android 6

Удобно иметь во владении устройство от Google. Сколько живет девайс, столько времени приходят апдейты системы, в отличии от...
Вот и сейчас тихо пришел 6-й андроид. Встал на девайс, работает.
Аналогично, поступает и Ежевичка. Телефон на последней версии BB too.

Ubuntu продолжает "радовать"

В Тандерберде нажимаешь кнопку ответить и... падает X сервер.
Миленько так.

27 октября 2015 г.

Первый глюк новой Ubuntu

Меня спрашивали, почему я Ubuntu тока на рабочей станции держу.
Да вот по этому самому :0) Обновился, гарантированно получил глюки. Вот и сейчас, ничего не изменилось. Хотя, конечно это не LTS, но все равно не приятно.
Оно мне надо? В RedHat (CentOS) я обновляюсь спокойно :)

26 октября 2015 г.

Осень.

Пришла пора менять работу.
Резюме тут.

Update

Рабочая машинка тихо апдейтится до 15.10. 

WooCommerce

Намедни шурин попросил поднять ему инет магазин. Давненько я такой фигней не занимался :)
Огромное мерси Ване Никитину и его сотрудникам за наводку на wordpress и woocommerce (я то наивный сначала хотел на Джумле делать) и дальнейшие консультации. В результате, раз, два и магазин бижутерии для КостаРики, на испанском языке работает :)


З.Ы. Испанский язык такой прикольный :).

22 октября 2015 г.

Фанаты, они такие!

Коллега, фанат футбола.
Не, не так. ФАНАТ ФУТБОЛА!
Уже 3-й раз подряд точно предсказывает результаты матчей наших команд в забугорных играх. Мы все в шоке. Если еще раз попадет, пойду ставки делать :)

20 октября 2015 г.

Microsoft Edge

Послушал ребят из Микрософт, решил дать шанс укорениться на моей машине их браузеру.
Запустил, попробовал импортировать закладки из Хрома. Эйдж их импортировал, только в обратном порядке :) Приколисты.
Ну и еще, папки из меню показываются только в правой всплывающей закладке,там где настройки. Жутко не удобно.
Строка ввода url появляется не сразу, Дико раздражает.

Вообщем закопал его как в свое время IE. Не получается у них делать браузеры.

19 октября 2015 г.

Какая гадость...

В очередной раз убедился, что 1С документооборот редкостная кокашка. Подробностей не будет, бо низзя... но если есть возможность, берите другую систему документооборота.

Статистика

На днях просматривал статистику посещений блога. Самая популярная тема Mikrotik + IPTV + IGMP + WiFi.

Лично я давно отказался от мысли тянуть realtime видео (особенно HD) по Wi-Fi. Основная причина: забитые каналы. Даже 5GHz не решает проблемы :(. Думал, что ac поможет... не помогло.
Так что, провода рулят и будут еще долго оставаться основной средой для передачи качественного видео по сети.

1 октября 2015 г.

Mikrotik VPLS

Пытался построить VPLS на микротике (Cloud Hosted Router) в VirtualBox. Не получилось, есть подозрение, что Virtual Box малость неправильно эмулирует ethernet интерфейсы.

Собрал сетку на живых 450G устройствах. Все заработало на ура. L2 VPN фунциклирует как часы.

На выходных попробую в vmware повторить эксперимент.

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

Vbox и Cloud Hosted Router

Что то  Cloud Hosted Router в Virtual Box странно работает.
Сетевые интерфейсы через раз поднимаются :(
Надо будет в vmware попробовать его погонять.

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

MUM Москва

Вчера побывал на MUM в Москве.

Было (по заявлению Микротик) ~750 участников.

Узнал, что Mirotik сделал специальный образ для виртуальных машин Cloud Hosted Router, на который не надо покупать лицензию. Правда с вшитым ограничением скорости на интерфейсе. Для снятия ограничения лицензию таки придется покупать, но они обещают, что цена на нее будет меньше. Теперь крутить RouterOS в виртуалках будет проще.

Слушал все выступления. В каждом было что то интересное.

Вообщем походом удовлетворен.

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

Puppet

Puppet прикольный. Если разворачивать однотипные конфигурации на большом количестве серверов, его использование дает ощутимый профит. Я думаю, что для разруливания основных вопросов вполне можно обойтись без скриптописания на ruby. Во всяком случае я пока не нашел для чего бы мне понадобилось написание пупет скриптов. Хотя... если их кто то пишет  - значит это кому то нужно :).
Но это жутко опасная штука. Очень опасная.

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

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

После настройки DNS надо подумать о настройке fierwall на серверах.

Точно так же, как и с DNS, существуют модули puppet, предназначенные для управления fierwall. Исходя из соображения, зачем использовать сторонние обёртки, когда iptables сам по себе крут и админ должен знать его на Ять, я не буду использовать эти модули.

Что будем делать:

  • Удалим firewalld, поставим классический iptables-service.
  • Создадим файл с конфигурацией фаервола, в стиле /etc/sysconfig/iptables.
  • На клиенте запустим скрипт, который применит правила fierwall.

На puppet сервере, создадим файл с конфигурацией firewall для машины с dns:
# cd /var/puppet/centos7-2.test.local/etc/
# mkdir sysconfig
# vim sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
COMMIT

В файле site.pp добавляем новый класс.
class minimal-iptables {
# Удаляем firewalld
package { 'firewalld':
ensure => absent,
  before => Package['iptables-services']
}
# Перед удалением firewalld останавливаем соответствующий
# сервис и делаем ему disable.
service { 'firewalld':
name => "firewalld",
enable => false,
ensure => stopped,
before => Package['firewalld']
}
# Устанавливаем iptables-services
package { 'iptables-services' :
ensure => installed
}
service { 'iptables':
  enable => true,
ensure => running,
  require => Package["iptables-services"]
 }
# Определяем файл, в котором будем описывать
# правила firewall
file { '/etc/sysconfig/iptables':
ensure => file,
mode => '0600',
owner => 'root',
# Для каждой машины предполагается свой файл
source => "puppet:///configs/$fqdn/etc/sysconfig/iptables",
require => Package["iptables-services"]
}
# Описываем программу, которая будет выполняться
# на машине для поднятия правил fierwall
exec { 'firewall':
# «Подписываемся» на файл
subscribe => File["/etc/sysconfig/iptables"],
# Устанавливаем правила фаервола из файла.
command => "/usr/bin/cat /etc/sysconfig/iptables | /usr/sbin/iptables-restore ",
# Говорим, что программа будет выполняться
# только если файл, на который мы подписаны,
# изменился.
refreshonly => true
}
}

Вносим изменения в node.
node 'centos7-2.test.local' {
include 'baselinux'
include 'minimal-iptables'
include 'dns'
}

Проверяем файл манифеста.
# puppet parser validate /etc/puppet/manifests/site.pp

У данного способа есть недостаток - при исполнении скрипта будут рваться сессии. Это можно обойти, используя вместо файла /etc/sysconfig/iptables самописанный скрипт.

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 по автомату не подставляет имя хоста.