LINUX.ORG.RU

Сообщения sin_a

 

Zabbix: отключить уведомления

 

У zabbix есть очень полезная возможность: автообнаружение узлов сети. Сразу появилось много, чего в nagios добавить не доходили руки. Но есть нюанс…

Некоторые устройства иногда начинают исчезать и появляться часто и подолгу. Такие уведомления мешают. Уведомления у меня подключаются при обнаружении и добавлении в группу. Чтобы отключить уведомления я убрал узел из группы рассчитывая сделать новую группу, такую же но без уведомлений, добавленные описания при обнаружении не менялись и я рассчитывал что изменение группы также сохранится. Но при следующем определении zabbix вернул узел в положенную группу.

Есть ли способ подавить повторное добавление в группу? Или подавить уведомления для определённого узла? Отказываться от автообнаружения не хочется.

sin_a
()

Что такое PERC и как найти SMR

 , , , ,

В бюджет входит подержанный DELL PowerEdge R730. С dell я сталкивался только в отзывах на ноутбуки, да и то не помню положительные или отрицательные. Но с серверами, думаю, должно быть более предсказуемо. Вопрос только про perc.

На борту PERC (PowerEdge RAID Controller) S130. Настоящий ли это рейд контроллер или фейк рейд? И если полноценный то как у него с драйверами, надо ли что либо доустанавливать и докомпилировать? Или, если это фейк рейд то можно ли увидеть диски напрямую чтобы не он не давал осложнений?

Если не ошибаюсь, это HBA, то есть можно будет просто увидеть диски напрямую? И аккумулятора и кэша у него нет (они бывают по раздельности или только в паре)?

И, чтоб два раза не вставать, как определить наличие у диска smr? Вот здесь wd рассказывает про свои диски, но статье три года. И какие существуют критерии для выбора ssd? А то вот пример где оказывается что не все ssd одинаково хороши.

Да, после такого: RAID массив на 24 SAS диска с моими вопросами выходить неловко

sin_a
()

Медленный http

 slowloris

На сайт идёт значительное количество обращений в результате чего заметно вырастает load average. Это похоже на атаку медленными http запросами. Перед апачем поставлен nginx, но заметного изменения картины не произошло. По некой рекомендации выполнена команда:

netstat -nalt | grep :80

Вернула большой список подключений через 127.0.0.1 к апачу. Тогда выполнена команда:

netstat -nalt | grep :443

Здесь список был в несколько раз короче.

Насколько я понял, nginx передаёт соединение и затем закрывает по таймауту, но у апача это соединение продолжает висеть. Правильно ли это и если да то как можно обучить nginx говорить апачу что соединение нужно закрыть?

sin_a
()

bash, массивы и кавычки

 

В bash кавычки в некоторых случаях нужны но в некоторых наоборот. В следующем примере мне казалось что если написать «${LIST[@]}» то в цикле будет один элемент.

LIST=({1..10})

for i in "${LIST[@]}" ; do
    echo "${i}"
done

Но этот пример выводит все элементы массива. Почему здесь кавычки не «склеивают» элементы массива?

sin_a
()

Как SVG выравнивает текст?

 

Есть два примера. В одном три тега «текст», в другом в одном теге «текст» три тега «tspan»:

( читать дальше... )

Во втором случае текст «admin» сдвигается влево (так это отображается у меня). Если поменять местами «admin» и «MySQL» то сдвигаться будет «MySQL». Это баг или так было задумано?

sin_a
()

Как сломать nextcloud?

 , ,

Установил в nextcloud дополнение transmission. Но трансмиссию установил на другом компьютере. Задать адрес оказалось возможным в файле /nextcloud/apps/transmission/lib/Controller/TransmissionController.php задав переменную $host. Но случилась ещё одна засада.

У меня дурная привычки не использовать административные привилегии. Но трансмиссия для nc работает только от пользователя состоящего в группе admin. Впрочем в PageController.php (там же) сказано:

    /**
     * CAUTION: the @Stuff turns off security checks; for this page no admin is
     *          required and no CSRF check. If you don't know what CSRF is, read
     *          it up in the docs or you might create a security hole. This is
     *          basically the only required method to add this exemption, don't
     *          add it to any other method if you don't exactly know what it does
     *
     * @NoAdminRequired
     * @NoCSRFRequired
     */

Но не сказано как это сделать. Нет, я конечно попытался раскомментировать @NoAdminRequired, но результат получил ожидаемый.

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

Вот здесь: https://docs.nextcloud.com/server/latest/developer_manual/app_development/tutorial.html и здесь: https://docs.nextcloud.com/server/latest/developer_manual/basics/controllers.html про это упоминают, но как применять не говорят.

Или я чего-то не понимаю и ограничение на администратора в этом приложении задано иначе?

Да, я понимаю что использовать от простого пользователя свою трансмиссию в своём некстклауде крайне небезопасно. Но я готов пойти на этот риск.

sin_a
()

Мониторинг клиентов в астериск

 

Есть желание мониторить состояние клиентов астериска. Для этого можно раз в минуту выполнять команду

asterisk -rx 'sip show peers'

Но это кажется не очень красивым решением. Можно непрерывно читать логи и искать нужные записи, но кажется что было бы естественнее если бы астериск на таких событиях сам вносил изменение например в БД.

Может ли астериск выполнять произвольный скрипт при регистрации и потере клиента?

sin_a
()

Как добавить память в HP MicroServer G7?

 , ,

Чтобы добавить память нужно вытащить материнскую плату. А чтобы её вытащить нужно отсоединить разъёмы. Но есть один разъём, который не получается отсоединить.

На этой фотографии он в правом нижнем углу под элементом питания. Похож на SATA и с похожим фиксатором но немного больше. Возможно это дисковая корзина. На видео с ютуба его просто отсоединяют. Когда я тяну он не движется и кажется что добавив усилие можно оторвать его с куском платы.

Кто нибудь вынимал такой разъём?

sin_a
()

Cacti vs Zabbix

 , ,

Есть работающие системы мониторинга (nagios) и статистики (cacti). Неудобно то, что это две раздельные системы. Кроме того, периодически с cacti бывают некоторые проблемы.

Насколько мне известно, zabbix сочетает в себе и мониторинг и статистику. И кроме того, насколько я понимаю, довольно активно развивается. Но мне не совсем понятно что у него с графиками.

За какой интервал в zabbix по умолчанию хранятся данные для статистики? И если за короткий, то сильно ли вырастет база если увеличить до года или двух? Можно ли хранить усреднённые значения для старых данных (как в rrd у cacti)? Или там графики это второстепенный инструмент и таких как в cacti можно не ожидать?

sin_a
()

iptables и зеркалирование loopback интерфейса

 ,

Есть легаси система, которую я сопровождаю и до некоторой степени упорядочиваю. И есть потребность передать внутренний обмен (по loopback) на другой хост.

Для зеркалирования трафика можно использовать TEE как-то так:

iptables -t mangle -A POSTROUTING ${OPTIONS} -j TEE --gateway "${IP}"

Если сделать следующее правило и пинговать заданный адрес то на целевой машине появляются пакеты:

iptables -t mangle -A POSTROUTING -o eth0 -d 8.8.8.8 -j TEE --gateway 192.168.1.2

Но когда я пробую подставить в условия интерфейс lo то на целевой машине ничего не получаю (пинг на 127.0.0.1 виден в tcpdump на локальной машине и не виден на целевой):

iptables -t mangle -A POSTROUTING -o lo -j TEE --gateway 192.168.1.2

Пробовал на POST/PREROUTING, FORWARD, INPUT, OUTPUT. Это я что-то делаю не так и трафик локалхоста идёт другим путём или его принципиально невозможно зеркалировать?

Со следующим правилом пинг идти перестал, то есть трафик похоже идёт как в других случаях:

iptables -t mangle -A POSTROUTING -p icmp --icmp-type any -o lo -j DROP

В man iptables есть только одно упоминание loopback: «except loopback traffic, which involves both INPUT and OUTPUT chains».

sin_a
()

bind перестаёт резолвить произвольные домены

 , ,

Время от времени bind перестаёт резолвить некий произвольный домен. Вернее догадываюсь что их может быть много, но замечается один. Если не заметить (мониторинг проверяет ya.ru) то в течении 10 минут восстанавливается. Если просто перечитать конфиг: systemctl reload named то этого оказывается достаточно чтобы исправить.

Вот как это показывает dig:

$ dig @10.1.1.40 open.ru

; <<>> DiG 9.10.8-P1 <<>> @10.1.1.40 open.ru
; (1 server found)   
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 37756
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION: 
;open.ru.                       IN      A

;; Query time: 36 msec
;; SERVER: 10.1.1.40#53(10.1.1.40)
;; WHEN: Wed Apr 15 13:22:13 +04 2020
;; MSG SIZE  rcvd: 36

$

При этом если сделать +trace то результат правильный.

Как можно такое попытаться диагностировать? В логах вроде всё как обычно.

sin_a
()

Nextcloud Talk и качество связи

 , ,

Попробовал видеотелефонию через Nextcloud Talk: https://github.com/nextcloud/spreed. Звук с сильными шумами, но это возможно решается гарнитурой. Но если включить видео то картина хуже. Само видео идёт с паузами и при этом в звуке начинаются потери. Если включить трансляцию экрана то звук также ухудшается. Как можно понять с чем это связано и есть ли возможность исправить?

На сервере nextcloud в это время был трафик 200-300 килобит, в пиках до 500-700. Это значит что видео и голос шли через него?

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

sin_a
()

Найти источник спама

 , ,

Есть почтовый сервер на котором периодически происходят вспышки спама. Ранее я смотрел от какой учётной записи это отправляется и блокировал её, этого было достаточно. Сейчас идёт выход спама, но когда я отключил учётную запись из поля from спам не прекратился. Более того, в логах записи о письмах с тем же значением в from. Но я не могу понять как найти кто авторизуется для отправки. Куда стоит смотреть?

sin_a
()

phpPgAdmin и кодировка в поле «Комментарий»

 

Обновил версию phpPgAdmin до 5.6.0 и получил странный эффект. При отображении в поле «Комментарий» битая кодировка. Сам phpPgAdmin по русски говорит нормально, содержимое таблиц также отображается по русски нормально а в поле «комментарий» мусор.

При этом, если смотреть список таблиц то комментарий к ним битый а если мы смотрим содержимое таблицы то описание таблицы (отображается вверху) уже нормальное (а описание полей битое). То есть, кодировка сломана в определённом месте отображаемой таблицы.

Тёма до некоторой степени декодирует и утверждает что выполнил «CP1252 -> UTF-8». Можно предположить что браузер получив уникод превращает его в какую-то разновидность cp1251. Причём получив несколько строк отображает их по разному (это какая-то диверсия пользователей виндовс?).

Как можно понять куда смотреть: в конфиг phpPgAdmin, в php.ini или ешё куда нибудь?

sin_a
()

Преобразовать строку в словарь

 

Имеется строка приблизительно следующего вида:

NAME1 = {NAME2 = {Test.Sample.One = 11;Test.Sample.Two = 12;Test.Sample.Three = 13;};};

Есть желание её разобрать но нет желания делать это вручную. Попробовал питон: модули json и ast не понимают такую структуру:

>>> string = 'NAME1 = {NAME2 = {Test.Sample.One = 11;Test.Sample.Two = 12;Test.Sample.Three = 13;};};'
>>> print string
NAME1 = {NAME2 = {Test.Sample.One = 11;Test.Sample.Two = 12;Test.Sample.Three = 13;};};
>>> import json
>>> json.loads(string)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.6/json/decoder.py", line 338, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
>>> import ast
>>> ast.literal_eval(string)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/ast.py", line 49, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/lib64/python2.6/ast.py", line 37, in parse
    return compile(expr, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
    NAME1 = {NAME2 = {Test.Sample.One = 11;Test.Sample.Two = 12;Test.Sample.Three = 13;};};
          ^
SyntaxError: invalid syntax

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

sin_a
()

Перенос системы из контейнера VZ в KVM

 ,

Есть необходимость перенести систему их контейнера VZ в KVM. Существуют описания; например здесь https://lintut.com/how-to-migrate-openvz-to-kvmvmware/ так и говорится «Trust me.. it works!».

У меня ситуация гораздо лучше чем у автора статьи: есть возможность остановить исходную систему. Монтирую контейнер и делаю архив корня исходной системы. Затем монтирую образ рабочей (остановленной) виртуальной машины, создаю подкаталог default.system/ и переношу туда текущее содержимое, после чего разворачиваю в корень архив.

Сначала меняю только fstab, сразу пробую запустить но grub падает в grub shell. В общем ожидаемо. Останавливаю, заменяю /boot на исходный (из default.system/). Может было бы достаточно только конфига но системы вроде полностью идентичны (centos 6) поэтому заменяю весь каталог. В описании сказано что нужно поставить пакет mingetty, но он вроде уже установлен. Там же рекомендуется добавить в inittab соотв. вызовы, но в заготовке (куда копируется) этого нет: добавил.

Система загружается, но логин не работает: набираешь текст, ввод, снова текст — просто всё выводится на экран без видимого результата.

Также, нет IP адреса который должен подняться. Но логи в смонтированной ФС из образа показывают что система вроде жива. Общаюсь с ней через crontab, создаю задание и смотрю результат. Результат показывает что сетевая карта существует

00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
Но сетевой интерфейс — нет:
Device eth0 does not seem to be present, delaying initialization.

Как можно понять что мешает сети и логину?

sin_a
()

Старое оборудование Ubiquiti

 ,

Сопровождаю небольшой wifi на Ubiquiti. В наличии контроллер ещё четвёртой версии, к которому подключено несколько точек. И кроме этого есть ещё две точки работавшие сами по себе, контроллер их не видит (сброс не помог).

Есть необходимость перенести контроллер на другой хост и есть желание использовать отдельные точки в нём же.

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

Две отдельные точки в свою очередь не видны новым контроллером так же как старым. Люди пишут что можно задать контроллер командой set-inform но в них такой команды нет (syswrapper.sh тоже нет). В их собственном веб интерфейсе доступных обновлений они не видят.

Вопросы:

  • Как можно узнать работают ли пользователи через точки, не выезжая на место?
  • Можно ли обновлять точки (не будут ли они потеряны) и имеет ли это смысл (появится ли информация о клиентах)?
  • Если ли возможность подключить две оставшиеся точки также к контоллеру?
sin_a
()

gpt и fdisk

 ,

Установил накопитель более 2T. Оказалось что mbr такой размер не понимает, но fdisk смог разметить в gpt. Но после начала использования обнаружил что «It understands GPT (experimental for now),».

Нужно ли об этом беспокоиться если создан всего один раздел или лучше удалить таблицу разделов и создать заново при помощи gdisk или parted?

sin_a
()

SNMP, VLAN и немного python

 ,

Хочу получить с коммутатора информацию по портам, вланам и их взаимоотношениям. Телнет не хочу.

Успешно получаю данные по портам и некоторые данные по вланам. Но пока не получил связь: в каком порту какие вланы. По этой связи нашёл OIDы: https://iphostmonitor.com/mib/oids/Q-BRIDGE-MIB/dot1qVlanStaticEgressPorts.html https://iphostmonitor.com/mib/oids/Q-BRIDGE-MIB/dot1qVlanCurrentEgressPorts.html , правда не очень понял чем они различаются и какой из них надо использовать. И ещё одна неприятность, они возвращают Hex-STRING.

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

И ещё дополнительный вопрос. Питон немного странно получает некоторые данные:

import netsnmp

session = netsnmp.Session(Version = 2, DestHost = '1.2.3.4', Community = 'CommunityName')

print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('ifIndex',),
                                             netsnmp.Varbind('ifDescr',))))

print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.2',),
                                             netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.3',))))
даёт следующий результат:
('1', 'Ethernet1/0/1', '2', 'Ethernet1/0/2')
('default', 'default', 'vlanname1', 'vlanname1')
При этом раздельное обращение:
print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.2',),)))
print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.3',),)))
даёт нормальный результат:
('default', 'vlanname1')
('37', '20')
В принципе можно конечно перебирать, но может быть кто нибудь знает что это: баг (чей?) или так было задумано?

И ещё по питону. Он получает не совсем Hex:

print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::mib-2.17.7.1.4.2.1.4',),)))
возвращает
('\xff\xfa\xf7\xf8\x0cO\xf0', '?JF \x00C\xf0')
Это нужно как то декодировать?

sin_a
()

python, snmp и типы данных

 

Хочу получить с коммутатора информацию по портам, вланам и их взаимоотношениям. Телнет не хочу.

Начинаю так:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#

import netsnmp

host = '1.2.3.4'
community = 'CommunityName'

def getlist(a,b,request):
    vars = netsnmp.VarList(netsnmp.Varbind('ifIndex',),netsnmp.Varbind('ifDescr',),netsnmp.Varbind('ifOperStatus',))
    print vars
    print type(vars)
    print session.getbulk(a, b, (vars))

session = netsnmp.Session(Version   = 2,
                          DestHost  = host,
                          Community = community)

getlist (0,5,('ifIndex','ifDescr','ifOperStatus'))

Внутри функции getlist хочу составить netsnmp.VarList из полученного параметра. Но не знаю как. Выполнение в таком виде возвращает:

[<netsnmp.client.Varbind object at 0x7ffbd9d21390>, <netsnmp.client.Varbind object at 0x7ffbd9d21410>, <netsnmp.client.Varbind object at 0x7ffbd9d21450>]
<class 'netsnmp.client.VarList'>
('1', 'Ethernet1/0/1', '1', '2', 'Ethernet1/0/2', '1', '3', 'Ethernet1/0/3', '1', '4', 'Ethernet1/0/4', '1', '5', 'Ethernet1/0/5', '1')

То есть, type говорит что var это class. Попытался сделать append, но внезапно не вышло.

Хотелось бы перебрать request и добавить элементы в var. Как это следует делать?

sin_a
()

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