LINUX.ORG.RU

Сообщения 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

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

netstat -nalt | grep :80

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

netstat -nalt | grep :443

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

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

 slowloris

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
()

TODO

Существует ли ПО для TODO, отвечающее следующим требованиям.

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

Как можно группировать задачи?

  1. Очевидно что можно разделять по приоритету (важности). Сортируя по этому параметру можно всегда видеть более актуальные задачи. Да, это банальность.
  2. Кроме этого можно разделить задачи по контексту. Например у нас есть контекст закупки еды. Кроме этого есть контекст обслуживания канализации и работ по зарабатыванию денег. Это три независимых контекста, в задачах каждого есть свои приоритеты но между собой они идут параллельно.

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

То есть:

  • Хотелось бы увидеть, условно, несколько полос (контекстов), в которых отображены условные карточки в порядке приоритета.
  • Также хотелось бы чтобы это было веб приложение (не сервис). С разных устройств или из разных мест, ну объяснять не нужно. Опять же, где веб приложение там возможна синхронизация с какими нибудь телефонами, но это тоже вторично.

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

Доп: пример макета https://img-fotki.yandex.ru/get/6719/22277664.3/0_ad836_df41936e_orig

 ,

sin_a
()

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