LINUX.ORG.RU

Сообщения selivan

 

Не работает overlayfs внутри initrd

Внутри полностью загруженной системы такое работает нормально:

mkdir /tmp/ovl1 /tmp/ovl2 /tmp/merged
mount -t overlay none -o lowerdir=/tmp/ovl1:/tmp/ovl2 /tmp/merged

Это read-only вариант, без upperdir и workdir.

Причём в busybox sh это работает тоже - там внутренняя реализация mount.

Отдельных модулей для overlayfs не существует, оно вкомпилено в ядро.

Внутри initrd работать не хочет: каталоги успешно создались, mount выдаёт ошибку:

mount: mounting none on /tmp/merged failed: No such device

-o ro и -t overlayfs не помогают, та же ошибка.

Ядро то же самое, разумеется.

Вот список уже смонтированных ФС в initrd:

rootfs on / type rootfs (...)
sysfs on /sys type sysfs (...)
proc on /proc type proc (...)
udev on /dev type devtmpfs (...)
devpts on /dev/pts type devpts (...)
tmpfs on /run type tmpfs (...)

Не пойму, куда дальше копать :(

P.S. Сейчас я использую AUFS, но его не приняли в mainline kernel, и советуют переходить на overlayfs.

 , , ,

selivan
()

Хорошие пособия по английской грамматике

ЛОР образовательный, посоветуй, по какой книжке освоить инглиш граммер? Хочется краткое и внятное пособие + упражнения на закрепление, желательно отдельным разделом.

 

selivan
()

Как пиарить технобложег(ин инглиш)?

Я недавно поборол лень, осилил github-pages и начал туда изредка скидывать всякое мелкополезное, типа такого: Zabbix: user parameter command non-zero exit code silently breaks triggers Redis replication: prevent split-brain (additional master) in case of network partition

Но никто это не читает и не пишет комменты, ощущение что говоришь с пустотой :(( А хочется чтобы оно кому-то наносило пользу.

На реддит закидывал - немного растёт реддитовская карма, и этим эффект ограничивается. ЛОР, подскажи, что делать? slashadot, quora, Яндекс.Директ? Рекламный дирижабль над городом? Дефейс serverfault.com с редиректом?

 

selivan
()

Хороший модуль iptables_raw для ansible

http://blog.nordeus.com/dev-ops/managing-iptables-with-ansible-the-easy-way.htm

Очень годный модуль iptables_raw для ansible. В отличие от унылого iptables, который появился в 2.0:

- сохраняет правила на диск для загрузки после ребута хоста
- умеет rule priorities, то есть можно добавлять правила из разных ролей и всё будет нормально работать, независимо от порядка выполнения ролей
- понимает чистый синтаксис iptables, а не пытается имитировать все возможные опции на YAML

Кому нравится - отпишитесь в PullRequest на гитхабе, чтобы его приняли в ansible: https://github.com/ansible/ansible-modules-extras/pull/2531

 , ,

selivan
()

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

... если имеются долго работающие проверки. Недавно столкнулся и пришлось некоторое время покопать, пока понял как оно работает: https://selivan.github.io/2016/06/14/zabbix-server-agent-wrong-default-timeou... Может пригодится всем, кто ставил zaiibx давно и оставил в конфигах дефолтные значения.

 

selivan
()

Zabbix: добавление items вида net.tcp.port[<ip>,3128] приводит к «zabbix-agent not available on <hostname>»

Zabbix: 3.0.3 (zabbix-server-mysql)
OS: Ubuntu 14.04 Trusty, одинаково для сервер и наблюдаемых хостов.
Number of hosts (enabled/disabled/templates): 28 / 0 / 57
Number of items (enabled/disabled/not supported): 1349 / 161 / 47
Number of triggers (enabled/disabled): 902 / 39
Required server performance, new values per second: 22.86

Конфиг zabbix server:

StartPollers=5
StartPollersUnreachable=2
StartTrappers=5
StartDiscoverers=3
StartHTTPPollers=5


Есть шаблон с тремя элементами вида net.tcp.port[<IP>,3128]. Он применяется к 10 серверам. Тип элементов: Zabbix Agent.

На наблюдаемых хостах zabbix-agent запускает процессы: 3 listener, 1 collector и 1 active check.

После включения элементов в шаблоне, на этих хостах начинаются периодические сообщения вида «zabbix-agent on <hostname> is not available for 2 minutes».

На самом деле агенты на хостах в этот момент доступны, проверяется nc -vz <hostname> 10050

На графике «Zabbix Server Preformance» значение zabbix[wcache,values] резко уходит вниз с 19-19.5 до 16-17. zabbix[queue] на том же графике остаётся в нуле.

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

Сервер не нагружен по I/O или процу, памяти хватает. Непохоже на проблемы производительности. В логах сервера или агентов никаких ошибок не наблюдается.

Пробовал увеличить ulimit -n для процессов zabbix_server до 10240 (soft и hard) - не помогло. Пробовал увеличить StartPollers до 10 и до 15 - тоже ничего не поменялось.

zabbix_get -s <host> -t net.tcp.port[<IP>,3128] отрабатывает мгновенно для элементов, возвращающих 1(успешное соединение), и порядка 3 секунд для элементов, возвращающих 0(не удалось соединиться).

Экспериментальным путём установил, что если оставить только айтемы, возвращающие 1(успешное соединение), то проблема не возникает.

 

selivan
()

Открытое письмо к github - стоит поддержать

https://github.com/dear-github/dear-github

Авторы просят внести некоторые изменения в работу github issues для более удобного сопровождения больших проектов:

* кастомные поля, возможно требующие обязательного заполнения. Для обязательного указания версии, шагов воспроизведения и т. д.
* система голосования за тикеты, чтобы избавиться от малополезных комментариев вида «+1», «<палец_вверх>»
* шаблон для Pull Request, используемый при создании нового запроса. CONTRIBUTING.md никто не читает

За письмо можно голосовать в Google Forms, достаточно указать своё имя и ник на github. Плюс можно поставить звёздочку репозиторию.

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

 

selivan
()

apt - установка правильных версий для строго заданных зависимостей (libxx=1.2.3)

Вопреки логике, даже если зависимость прописана строго '=', а не '>=', apt-get ставит самую высокую доступную версию.

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

Я запилил утилитку, которая честно резолвит все эти зависимости, и соответственно дёргает apt-get: https://github.com/selivan/apt-strict Там же есть модуль для ansible.

Существует ли менее костыленасыщенный способ решения проблемы?

Ну и если кому надо - забирайте.

 ,

selivan
()

Мегасложные вопросы на вакансию вконтакте

https://vk.com/jobs?w=job36&bar=1
Если нажать «подать заявку» - появятся сверхмегасложные вопросы.

По просьбам телезрителей выкладываю для Ъ:

  • Назовите команду вывода текущей директории в консоли Linux
  • Назовите самые распространённые интерфейсы подключения жёстких дисков
  • Известно, что файл, принадлежащий пользователю user и группе group, имеет права доступа 740. Какие пользователи могут его исполнять: nginx из группы www, root, user, test из группы group?
  • Какой из протоколов следит за целостностью отправляемых данных при потере пакетов: TCP, UDP, IP, IPv6?
  • Как удалить непустой каталог в консоли Linux?

Сама вакансия

Обязанности

    Поддержка работоспособности всех сервисов ВКонтакте
    Запуск и мониторинг новых сервисов, масштабирование уже существующих
    Обслуживание серверов и автоматизация их работы
    Работа с сетевой инфраструктурой и оборудованием
    Эффективное взаимодействие с командой разработчиков


Требования

    Опыт администрирования Linux
    Опыт администрирования серверных open source технологий (веб-серверы, базы данных, почтовые серверы и другие)
    Владение скриптовыми языками (bash, perl)
    Понимание принципов работы TCP/IP, UDP и HTTP/HTTPS
    Понимание работы высоконагруженных сервисов
    Навыки программирования на PHP или Python будут плюсом
    Приветствуется опыт работы с сетями, оборудованием Cisco, Juniper и других производителей

Для сравнения - предварительный вопросы в Яндекс: http://company.yandex.ru/job/vacancies/adv_technology_admin.xml

 ,

selivan
()

Скриптег для бекапа монги

https://github.com/selivan/mongodb-backup-simple - для случая, когда бекап-сервер гоняет hidden secondaries для всех replica set, а сервер конфигов можно бекапить через mongodump.

Тупо маленький скриптег, зато отлаженный и работает. Логи, мониторинг. Прикопаю здесь на всякий случай, вдруг кому надо.

 

selivan
()

Использование чужого $SSH_AUTH_SOCK

Есть некоторый хост, я и другой пользователь ходит туда под рутом, авторизуясь ssh-ключами, используемыми через ssh-agent. Соответственнго, появляются два сокета вида /tmp/ssh-XXXXX/agent.num, ведущие к моему агенту и к его. На права пофиг, оба root, оба можем всё. Сможет ли за счёт подмены SSH_AUTH_SOCK он логинится на другой хост с моим ключом или я с его?

 

selivan
()

Открыл для себя RemoteFS, жутко доволен

В новостях когда-то проскакивало(Вышла remotefs 1.0), но я не заметил.

Простая сетевая ФС. Минимальный набор возможностей, вида «необходимо и достаточно»:
- аутентификация по ip/хосту или пользователь/пароль
- работа от имени фиксированного пользователя, права на файлы в шаре соответствуют правам пользователя на локальные файлы.
- работа в режиме «логин для аутентификации». Пользователи и группы на серверах должны быть синхронизтрованны. Позволяет chmod/chown. Для логина используется не системная база паролей, а отдельный файл rfs-passwd.

Идеально подходит для задач вида «внутри доверенной сети расшарить каталог нескольким клиентам без заморочек».

vs sshfs: быстрее.
vs samba: проще. Самба - огромный комбайн, обеспечивающий совместимость с виндой. Для простой задачи тащить с собой всю эту фигню бессмысленно.
vs nfs: гораздо проще. Сервер слушает один TCP порт, клиент к нему коннектится. Никаких RPC, никакой кучи сервисов. Никаких хитрых ошибок, лечение которых напоминает ректальную вазэктомию.

Спасибо надо говорить aleksey_tulinov.

З.Ы. Хотел написать в /admin, но оттуда наверное потрут, поэтому в толкс.

 ,

selivan
()

ipv6 autoconf vs ip6tables

Если в INPUT стоит

-P INPUT DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT

то ipv6 autoconfiguration ломается нафиг, и чинится разрешением -p icmpv6, а точнее, router solicitation и router advertisement.

Впорос: почему conntrack не прочухал, что ответ на router solicitation - это ESTABLISHED,RELATED? Это баг или я чего-то не разумею?

 ,

selivan
()

Конфиг в /etc - локальная отладка

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

Сейчас для удобства отладки я сделал так: скрипт в project/usr/bin, конфиг в project/etc/config, и он читает конфиг из пути ../../etc/config, предварительно сделав os.chdir(os.path.dirname(os.path.realpath(__file__))).

Есть ли какой-то способ сделать, чтобы он при отладке брал файлик своей папки, а в продакшене - из другой? Без таких вот ужасных костылей

 ,

selivan
()

Перевод слов из субтайтлов

Хочется не переключаться в окно словаря и набирать, а щёлк мышой по нужному слову - посмотрел перевод - поехали дальше. Есть для этого какие-нибудь готовые решения? Или более разумные идеи, чем городить собственный плагин к smplayer?

Например, на ororo.tv так сделано.

 , ,

selivan
()

Куда пойти, куда податься

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

Умею linux и сети, ну и традиционно всё остальное по мелочи. Разве только с ERP-системами дело не имел. Если интересны подробности: тыц и тыц. Расти предполагаю в том же направлении: highload linux(интереснее) и сети(вторично).

Сейчас я ищу работу, которая позволит мне это сделать. То есть, там должны быть:

  • интересные задачи по теме
  • адекватный рабочий процесс, позволяющий значительную часть рабочего времени тратить на решение этих задач, а не на борьбу с пользователями/идиотизмом начальства/нереальными сроками.
  • достаточно узкая специализация. То есть я занимаюсь своей областью, а не выполняю все подряд задачи, хоть как-то связанные с IT.

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

Живу в Воронеже, готов переехать в Нерезиновую или ещё куда поблизости, R<=500 км. В Питер не готов, тамошний климат меня убьёт.

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

sudo cast val-amart. Ты дядька серьёзный, подскажи что-нибудь умное.

З.Ы. В Talks, потому что это не объявление о поиске работы, а обсуждение пригодных для работы мест. Если модераторы не согласны, можно переносить в Job.

 

selivan
()

Keepass2 не запускается на ubuntu 14.04

ОС: Ubuntu 14.04, все обновления.

Установлены: keepass2, mono-runtime, mono-utils, libmono-winforms2.0-cil libmono-windowsbase4.0-cil libmono-windowsbase3.0-cil

/usr/bin/keepass2:

#!/bin/sh
exec /usr/bin/cli /usr/lib/keepass2/KeePass.exe "$@"

Запускается, висит в процессах, окно не появляется, проц не грузит.

Пробовал перебирать разные опции из man cli: --llvm, --nollvm, --aot, --desktop - никакого эффекта.

Попробовал скачать keepass не из пакета, а с оф. сайта и скормить экзешник mono - то же самое.

Поставил для проверки bless - написаный на mono hexeditor - работает, то есть mono работоспособно.

Куда копать? KeePassX не предлагайте, нужен именно KeePass2.

 ,

selivan
()

Отзывы о Fujitsu GDC в Казани

Думаю уехать в Казань работать там, с HR пообщался, собеседование сейчас прошёл. Кто нибудь там работает или имел с ними дело? Что расскажете?

selivan
()

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

Сегодня я делал странное: ставил 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

Есть 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
()

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