LINUX.ORG.RU

Сообщения selivan

 

именование устройств и прочая магия dmsetup

Форум — Admin

Сегодня я делал странное: ставил ubuntu 12.04 рядом с 10.04 на софтовый рейд, который работает через device mapper. Не (только) потому, что я извращенец, а потому что оно тестовый стенд и доложно эмулировать реально существующие сервера. Про mdadm знаю.

10.04 на рейд поставилось. Установщик 12.04 все разделы на рейд увидел, но писать на них не смог. В /dev/mapper при этом был только isw_blablabla_Volume0, а его томов - *Volume01, *Volume02, ... - не было. За отсутствием partprobe в debian installer я не мог сделать что нужно руками, пропустив этап partition disks.

В итоге поставил через debootstrap + chroot. При попытке загрузится обнаружил, что device mapper из ubuntu 10.04 создаёт тома вида isw_blablabla_Volume01, а из ubuntu 12.04 - isw_blablabla_Volume0p1. Поэтому автосгенерённый конфиг grub из 10.04 12-ю загрузить не смог, неправильный параметр root. Сделал как надо в grub.d/40_custom, взлетело.

Собственно, вопрос: откуда dmsetup берёт имена для томов software RAID? Оно прописывается где-то в суперблоке(хотя где там суперблок, это же не mdadm) или как-то вычисляется на основе серийников дисков и фазы луны?

И почему установщик 12.04 увидел, но не смог писать в рейд? Я бы ещё понял, если бы он их не увидел вообще.

В гугле искал, но меня явно забанили, не находит.

 ,

selivan
()

Ansible - не работает conditional для local facts

Форум — Admin

Есть local fact, который выдаёт следующие значения:

ansible gw79 -m setup -a "filter=ansible_local"
gw79 | success >> {
    "ansible_facts": {
        "ansible_local": {
            "ipmi": {
                "lan_1": {
                    "AuthTypeEnable": "Callback:MD2MD5PASSWORD", 
                    "AuthTypeSupport": "NONEMD2MD5PASSWORD", 
                    "BMCARPControl": "ARPResponsesEnabled,GratuitousARPDisabled", 
                    "BackupGatewayIP": "0.0.0.0", 
                    "BackupGatewayMAC": "00:00:00:00:00:00", 
                    "CipherSuitePrivMax": "aaaaXXaaaXXaaXX", 
                    "DefaultGatewayIP": "0.0.0.0", 
                    "DefaultGatewayMAC": "00:00:00:00:00:00", 
                    "IPAddress": "10.10.10.100", 
                    "IPAddressSource": "StaticAddress", 
                    "IPHeader": "TTL=0x00Flags=0x00Precedence=0x00TOS=0x00", 
                    "MACAddress": "00:25:90:9e:ca:c7", 
                    "RMCP+CipherSuites": "1,2,3,6,7,8,11,12", 
                    "SNMPCommunityString": "public", 
                    "SetinProgress": "SetComplete", 
                    "SubnetMask": "255.255.255.0", 
                    "qVLANID": "7", 
                    "qVLANPriority": "0"
                }
            }
        }
    }, 
    "changed": false
}

Задачи из роли:

- name: set ipmi vlan
  command: ipmitool lan set 1 vlan id "{{ ipmi.vlan }}"
  when: ansible_local.ipmi.lan_1.qVLANID != ipmi.vlan
- name: set ipmi address
  command: ipmitool lan set 1 ipaddr "{{ ipmi.address }}"
  when: ansible_local.ipmi.lan_1.IPAddress != ipmi.address
- name: set ipmi netmask
  command: ipmitool lan set 1 netmask "{{ ipmi.netmask }}"
  when: ansible_local.ipmi.lan_1.SubnetMask != ipmi.netmask
- name: set ipmi gateway
  command: ipmitool lan set 1 defgw ipaddr "{{ ipmi.gw }}"
  when: ansible_local.ipmi.lan_1.DefaultGatewayIP != ipmi.gw

- name: debug
  debug: msg="{{ ansible_local.ipmi.lan_1.qVLANID }}"_"{{ ipmi.vlan }}"_"{{ ansible_local.ipmi.lan_1.IPAddress }}"_"{{ ipmi.address }}"_"{{ ansible_local.ipmi.lan_1.SubnetMask }}"_"{{ ipmi.netmask }}"_"{{ ansible_local.ipmi.lan_1.DefaultGatewayIP }}"_"{{ ipmi.gw }}"

Вывод ansible-playbook:

ansible-playbook playbook/site.yml --tags ipmi  

PLAY [gw-region] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [gw79]

TASK: [ipmi | set ipmi vlan] ************************************************** 
changed: [gw79]

TASK: [ipmi | set ipmi address] *********************************************** 
changed: [gw79]

TASK: [ipmi | set ipmi netmask] *********************************************** 
skipping: [gw79]

TASK: [ipmi | set ipmi gateway] *********************************************** 
skipping: [gw79]

TASK: [ipmi | debug] ********************************************************** 
ok: [gw79] => {
    "item": "", 
    "msg": "7_7_10.10.10.100_10.10.10.100_255.255.255.0_255.255.255.0_0.0.0.0_0.0.0.0"
}

PLAY RECAP ******************************************************************** 
gw79                       : ok=4    changed=2    unreachable=0    failed=0   

То есть для двух заданий - netmask и gateway - conditional работает как надо, а для других двух - не работает, и они выполняются всегда. Хотя из вывода debug явно видно, что значения одинаковые.

Где я не прав?

Традиционно, sudo cast val-amart

З.Ы. А можно ли как-нибудь запихивать на хост local fact, а только потом делать GATHERING FACTS? Или хотя бы принудительно их получение перезапускать?

 ,

selivan
()

ansible - итерация через list of lists

Форум — Admin

Есть некоторый набор пар [src, dest]. Я хочу пройтись по структуре вида:

- [ src1, dest1 ]
- [ src2, dest2 ]
- [ src3, dest3 ]
и сделать для каждой пары copy: src="{{ item.0 }}" dest="{{ item.1 }}". Но при использовании with_items оно просто выдаёт их как единый массив, и из каждой строки выделяет первую и вторую буквы. Сейчас я вышел из положения так:
with_together:
- [ src1, src2, src3 ]
- [ dest1, dest2, dest3 ]
Можно ли как-то сделать как в первом варианте?

 ,

selivan
()

Нытьё про cтандартный конфигуратор

Форум — Talks

Почему для *nix не прижился какой-нибудь стандартный конфигуратор софта:

$ conf get sshd.tcpkeepalive
no
$ conf get-default sshd.tcpkeepalive
yes
$ conf show sshd.tcpkeepalive
# Specifies whether the system should send TCP keepalive
# messages to the other side.  If they are sent, death of
# the connection or crash of one of the machines will be
# properly noticed.
sshd.tcpkeepalive=no
$ conf set sshd.tcpkeepalive=yes
$ conf get sshd.tcpkeepalive
yes

$ conf add ssh custom_var --type dir --comment "blalala"
$ conf add ssh custom_var.subwar1 --type string --comment "blalala path"
$ conf add ssh custom_var.subwar2 --type int --comment "blalala magic number"

Все известные мне конфиги в такую схему укладываются. Права на изменение раздавать стандартным способом на каталоги, которые и будут лежать где-нибудь в /conf.

За количество человеко-лет, потраченных на автоматический разбор/написание всяческих конфигов, можно было:

  • допилить Hurd
  • решить в иксах проблемы с тирингом
  • запилить в ванильное ядро MPLS
  • основать колонию на Марсе

Update:

Почему это не реестр:

  • Коменты
  • Это не единый файл БД, а набор файлов, просто со стандартным API и command-line tools для работы. Поддаётся синхронизации с удалённым источником, ручной правке с помощью regexp и какой-то там матери, вобщем всё как с обычными файлами, но единообразно для всех программ.
  • Один каталог верхнего уровня для каждой программы, в менеджере пакетов по ним информация. Каталоги, не относящиеся ни к какому пакету, можно легко выявить и удалить.

 ,

selivan
()

Английский IT-сленг

Форум — Talks

Как сказать «велосипед» или «костыль», но по-английски? Сохранив эмоциональную нагрзку

 

selivan
()

Puppet: подставить параметр в имя факта

Форум — Admin

Вот custom fact:

require 'etc'

Etc.passwd do |user|
    Facter.add("homedir_#{user.name}".intern) do
        setcode { user.dir }
    end
end

Взят с ask.puppetlabs.com. Теперь делаем defined type:

define ssh_keys::key ($user) {

$home = $::homedir_#{user}
#$home = $::homedir_root

if $home != undef {

file { "$home/.ssh/":
    ensure => directory,
}

file { "$home/.ssh/authorized_keys":
    ensure => file,
    source => "puppet:///modules/ssh_keys/$user",
    }
}

В виде $::homedir_#{user} не работает. Если задать в явном виде $::homedir_root, то всё ОК. Где я не прав? Куда копать?

 ,

selivan
()

PostgreSQL не хватает студентов на Google Summer of Code

Форум — Talks

http://habrahabr.ru/post/216137/

Оставлю здесь, вдруг кому пригодится

 ,

selivan
()

Bareos - бета-релиз 14.1

Новости — Open Source
Группа Open Source

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

Новые возможности:

  • Director и Storage Daemon для Windows
  • интерфейс плагинов на Python
  • бекэнд для облачных хранилищ и кластерных файловых систем. На данный момент поддерживаются Gluster, Ceph and Amazon S3. Подробнее
  • поддержка разного blocksize для разных pool. Подробнее

Скачать: бинарные пакеты, исходный код.

Релиз ещё не является стабильным, требуется тестирование.

>>> Подробности

 , , ,

selivan
()

SSD, fstrim и mount -o discard

Форум — General

Используется SSD. Ядро 3.5.0-36.

/home: ФС ext4, смонтирована с опциями relatime,discard,commit=30.

sudo fstrim -v /home
/home: 44191338496 bytes were trimmed

То есть около 40Гб. В прошлый раз, когда я запускал fstrim, оно тоже показало ненулевое значение, но тогда я это списал на то, что при создании и первоначальном использовании /home оно монтировалось без discard. Сейчас такая отмазка уже не катит.

discard не работает или я чего-то не понимаю?

 

selivan
()

Перезапуск Openvpn при появлении интерфейса

Форум — Admin

Есть openvpn-клиент, в нём стоит local X.X.X.X, потому что работать он должен только через одного провайдера из двух. При опускании этого интерейса биндинг к адресу отваливается и openvpn умирает, соответственно при поднятии обратно не запускается.

Можно ли как-то сделать, чтобы он не умирал, а продолжал пытаться прибиндиться до победного конца?

Обходные способы знаю - post-up в interfaces или перезапуск в cron, но хочется чтобы работало именно так.

 ,

selivan
()

Отношение к спортсменам

Форум — Talks

Выделил в отдельный топик из этого, тема ИМХО заслуживает отдельного обсуждения и холивара.

Одна из причин поражений наших спортсменов - злость и нетерпимость болельшиков. Если спортсмен(или команда) не выиграли нам медалей - всё: мудаки, уроды, п*дорасы, все их ненавидят. Это при том, что конкуренция в спорте высоких достижений высочайшая, и гарантированно выдавать высший результат практически невозможно. Плющенко пропустил катание из-за травмы - и его усиленно поливают г*вном те самые люди, которые столько раз восхищались его золотыми выступлениями.

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

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

Неужели нельзя просто хорошо относится к людям, которые бьются за честь страны, независимо от того, получилось у них взять награду или нет?

 , ,

selivan
()

Apache mod_authnz_ldap Error 500

Форум — Admin

Ubuntu 12.04 LTS
Apache/2.2.22

Для http://server/lightsquid/ выдаёт окно запроса пользователя/пароля, после чего «500 Internal Server Error». Ошибка появляется независимо от того, правильный пароль введён или нет. Если убрать Require valid-user, то работает нормально, то есть проблема именно в mod_authnz_ldap.

Модуль mod_authnz_ldap включен. Конфиг апача:

        Alias           /lightsquid /usr/lib/cgi-bin/lightsquid
        <Directory "/usr/lib/cgi-bin/lightsquid">
                AddHandler cgi-script .cgi
                Options +ExecCGI
                Order allow,deny
                Allow from all

                AuthType Basic
                AuthName "USE YOUR WINDOWS ACCOUNT"
                AuthBasicProvider ldap
                AuthzLDAPAuthoritative on
                #AuthzLDAPAuthoritative off
                #AuthUserFile /dev/null

                AuthLDAPBindDN "CN=squid_auth,DC=domain,DC=ru"
                AuthLDAPBindPassword "*****************"
                AuthLDAPURL "ldap://dc2.domain.ru/dc=domain,dc=ru?sAMAccountName?sub?(objectClass=*)"
                Require valid-user

        </Directory>

Менять

AuthzLDAPAuthoritative off
на
AuthzLDAPAuthoritative 
AuthUserFile /dev/null
не помогает.

LogLevel стоит debug.

В error.log по поводу ошибки нет вообще ничего, в access.log появляется

192.168.0.1 - selivanov [15/Feb/2014:11:51:00 +0400] "GET /lightsquid/index.cgi HTTP/1.1" 500 814 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0"

Куда копать? Как его заставить хотя бы показать внятную диагностику проблемы?

 ,

selivan
()

Bacula RIP. Long live Bareos

Форум — Admin

https://www.bareos.org/en/faq/items/why_fork.html

Для Ъ:

- бакула игнорирует сторонние патчи
- с 2012 года платная версия стала закрытой, AGPL код перемешан с проприетарным
- новые фичи включаются только в платную закрытую версию
- Одна фича даже была убрана из открытой версии и перенесена в закрытую. А именно - ограничение используемой ширины канала
- активность сообщества начала падать

Marco van Wieringen, активно контрибутивший в бакулу с 2008 года, сделал форк под названием Bareos. Новые возможности:

- passive clients - для клиентов в ограниченной сети, например DMZ, все соединения с клиентами инициируются со стороны director и sd
- Fastzlib для ускорения сжатия
- поддержка NDMP
- ограничение используемой ширины канала
- ещё куча всего https://www.bareos.org/en/whats_new.html, лень переводить дальше

Миграция с бакулы возможна, bareos-fd обратно совместим с bacula-fd.

З.Ы. Модераторм: очень хотелось бы сделать новость, потому что важно и полезно. Но событие произошло давно, так что пока положил в Admin. Это никак не подойдёт по формату для новости?

 , ,

selivan
()

Автоответ на неграмотные вопросы в технических форумах

Форум — Linux-org-ru

www.linux.org.ru/forum/general/10143021 и прочие... тысячи их. ИМХО очень засоряют форум, потому что помочь человеку, из которого по чайной ложке в час приходится выковыривать диагностику его проблемы - очень трудно и геморройно.

Предлагаю: дать звездатым пользователям(например, начиная с ★★★) специальную кнопку «Некорректно сформулированный вопрос». По её нажатию вопрос перемещается в специальный форум «Работа над ошибками». В качестве ответа постится стандартная плашка - ссылка на статью «Как правильно задавать вопросы в технических форумах» (http://www.opennet.ru/docs/RUS/smart_question/) и краткая выжимка из неё, потому что большинство новопришедших - Ъ и по ссылке не пойдут. И обязательно ссылка на pastebin.com, чтобы напугавщийся новичок не запостил в простыню весь find /etc -type f -exec cat \{\} \;

После исправления поста автор может нажать кнопку «Исправлено», и вопрос опять попадёт в технический форум. С пятой итерации автор переводится в read-only на пару недель, ибо безнадёжен.

Со второго раза должна появляться кнопка «Пожаловаться на необоснованный перенос вопроса», потому что фича даёт звездатым большой простор для троллинга.

ИМХО это и поможет новичкам быстрее получить нормальные ответы, и почистит форум от такой нездоровой ерунды.

З.Ы. Я имею в виду именно вопросы с заголовком «Помагите сламался астериск» и содержанием «ОС - убунту, вчера работало, а сегодня не пашет». При обсуждении нормально сформулированного вопроса, к которому потребовалась дополнительная информация, кнопку наживать не надо

З.З.Ы. Talks и Job предложение не касается

selivan
()

Раздача велосипедов - 2: тонкий клиент

Форум — Admin

https://github.com/selivan/thinclient

Набор для построения Ubuntu/Debian-based тонкого клиента, который не монтирует корневую ФС по NFS/iSCSI/SMB/..., а работает целиком из памяти.

Плюсы по сравнению с традиционным( https://help.ubuntu.com/community/DisklessUbuntuHowto ) подходм:

* не нагружает сервер
* спокойно переживает даунтайм сервера

Плюсы по ставнению с thinstation и прочими wtware:

* это честная Ubuntu/Debian, куда можно поставить всё что угодно: софт для работы с камерой, браузер, яву, хоть ioquake и tuxrace

Полезности

* умеет overlays, то есть сверху корневой ФС можно примонтировать сколько угодно архивов. Таким образом можно распространять дополнительный софт/конфги для определённых рабочих станций, не переделывая основной образ
* умеет монтировать домашний каталог по NFS, пользователь может вносить постоянные изменения. Небезопасно, но в некоторых случаях приемлимо.

Изначально делался efim-ом( https://github.com/efim-a-efim, на ЛОРе присутствует мало и только в анонимном виде ), потом сильно допиливался мной.

Надеюсь, кому-нибудь пригодится

 ,

selivan
()

Заставить Openvpn убрать роуты, если соединения не установлено

Форум — Admin

Можно ли с помощью какой-либо магии сделать, чтобы OpenVPN поднимал роуты из конфига, только когда соединение установлено(в логе «Initialization Sequence Completed»), и убирал их если соединения порвалось по keepalive timeout? Служба при этом, разумеется, всё время запущена

 ,

selivan
()

Кому велосипед

Форум — Admin

Очередной раз столкнувшись с задачей «2 провайдера, надо периодически тестировать канал и переключаться на живого», решил вместо по-быстрому втыкаемых костылей запилить немного более обобщённое решение. Для Debian/Ubuntu, если кто добавит подержку redhat-овских networking-scripts - скажу спасибо. Тыц: https://github.com/selivan/inet-failover

Умеет:
- переключаться на второго провайдера при падении первого
- сервер доступен снаружи с обоих адресов
- минимальная конфигурация: все сетевые параметры берутся из interfaces, ни один параметр не надо описывать несколько раз в нескольких скриптах, поэтому меньше вероятность ошибки
- Если использовать ifup/ifdown вперемешку с ручным ifconfig/ip addr, скрипты всё равно стараются выдать правильные таблицы и правила роутинга
- Файл состояния, показывающий используемый в данный момент основной интерфейс. Мониторинг рулит
- Аккуратный лог-файл. Мониторятся оба соединения, даже если используется только одно

Не умеет:
- Двух провайдеров, настроенных на алиасах одного интерфейса: eth0:0 eth0:1
- Балансировку нагрузки вида «nexthop via $IP1 dev $IFACE1 weight 1 nexthop via $IP2 dev $IFACE2 weight 1»

 , ,

selivan
()

dhclient применяет параметры, которые он не запрашивал в request

Форум — Admin

Система: виртуалка Debian Wheezy на Virtualbox

dhclient --version
isc-dhclient-4.2.2

К сетевому адаптеру присобачен NAT и настроен Port Forwarding для ssh - очень удобно, можно раздавать виртуалке инет и одновременно работать с ней по ssh. В отличие от вариантов с bridge, неважно, каким образом интернет приходит на хост - виртуалка его всё равно получит.

Эта виртуалка не должна получать default route по DHCP. Я исключил в dhclient.conf из request параметр routers. Но встроенная реализация DHCP в VirtualBox очень простая, она отдаёт фиксированный набор параметров независимо от того, что клиент запрашивал. И dhclient применяет полученные routeres, хотя он их не запрашивал! Проверил процесс получения пакетов Wireshark-ом - действительно, routers не запрашиваются, но прилетают.

Это баг или фича? Может я чего-то не понимаю?

З.Ы. Кому интересно - есть такое обходное решение:

auto eth0
iface eth0 inet dhcp
metric 255
post-up ip route del default dev eth0

metric нужен, чтобы оно не заменило имеющийся default route. Но меня волнует не решение, а странное поведение dhclient

 ,

selivan
()

Эллиптического тренажёра выбора тред

Форум — Talks

Из-за проблем с голеностопом лыжи/вел и прочие радости жизни мне некоторое время будут недоступны :( Решил купить сабж, ибо здоровье, да и пузо убрать стоит, не хочу быть слишком солидным :)

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

Два вопроса обладателям сабжей:

- длина шага критична? 36см для 174см роста пойдёт?
- http://www.sportmaster.ru/catalog/trenazhery_i_fitnes/kardiotrenazhery/ellipt... - что скажете?

 ,

selivan
()

Изменить метрику существующего маршрута

Форум — Admin

Можно ли сделать это с помощью какой-нибудь особой, уличной магии? Удалить и тут же добавить не считается

 

selivan
()

RSS подписка на новые темы