• Почему postgresql создаёт ещё одну директорию?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что внутри образа postgres:13.3 анонсируется том /var/lib/postgresql/data. Поскольку он никак не описан при создании контейнера, создаётся анонимный том в стандартном хранилище и монтируется в контейнер. То, что в манифесте также объявлен ещё один том, никак не влияет на автосоздание вот этого. В итоге у нас два тома, один описан явно и смонтирован в /app/app/database/pgdata, другой описан в образе и смонтирован в /var/lib/postgresql/data.

    Правильно монтировать свой том в /var/lib/postgresql/data, именно там образ будет хранить базу.

    Посмотреть, что думает образ, можно командой docker inspect postgres:13.3
    Ответ написан
    Комментировать
  • Как правильно спарсить характеристики с сайта и записать в отдельные колонки эксель?

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

    Другой вариант: разные категории помещать на разные листы (в случае с csv писать в разные файлы, ну или перейти на xlsxwriter). В этом случае таблица будет не такой разреженной, что в некоторых случаях может быть более удобно удобно.
    Ответ написан
    Комментировать
  • Как исправить ошибку Email rejected per DMARC policy?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Чтобы отправлять почту, в наше время нужно выполнить много условий?

    1. Нужна PTR-запись для IP отправителя, и должна существовать соответствующая A-запись (например, 111.22.33.44 указывает на mail.site.ru, должна существовать A-запись для mail.site.ru, необязательно на тот же IP).

    2. Нужно описать SPF (TXT-запись с v=spf1 у домена site.ru), по которому данный IP должен быть доверенным для отправки почты.

    3. Нужно настроить DKIM и подписывать письма ключом, публичная часть которого описана в DNS.

    4. Должна быть описана политика DMARC в TXT-записи _dmarc.site.ru. При этом если там указано p=reject, то получателю предписывается полностью отвергать почту от недоверенных отправителей.

    Вот вероятнее всего что-то из этого сделано не так.

    Полезно также использовать https://mxtoolbox.com/DMARC.aspx и другие инструменты на том же сайте (отдельная благодарность paran0id за напоминание).
    Ответ написан
    5 комментариев
  • Как посмотреть где находится файл в Кали линукс?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Набираем locate имя_файла. Если ругается что такой команды нет - ставим то что предлагает (думаю, в кали такой же подсказыватель, как в убунте) - и команда появится. При установке вроде даже должен сразу и базу создать, если нет - запустить updatedb из-под root.

    locate ищет не на диске, а в индексе, который обновляется ежедневно из cron. Поэтому свежесозданных файлов он не найдёт. Но зато он ищет очень быстро.
    Ответ написан
    Комментировать
  • Как создать пост в Whatsapp с последовательным чередованием изображение\текст?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак. Контент в WhatsApp - это либо текст, либо изображение или несколько (возможно, с сопроводительным текстом), а не текст с картинками в качестве сопровождения. Так что только отправлять несколько сообщений по очереди.
    Ответ написан
    Комментировать
  • Почему сумма ряда Тейлора не верна?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Формула Тейлора имеет смысл лишь в небольшой окрестности рассматриваемой точки, и чем меньше окрестность, тем выше точность величины, которая рождает формула. Естественно, x=20 находится в очень даже большой, просто огромной окрестности точки x=0, в которой было взято разложение исходного квадратного косинуса.

    Можно улучшить точность, если перевести аргумент в интервал периодичности значения (0,2pi), затем в (0,pi) с учётом знака, затем в (0,pi/2) с учётом симметрии относительно pi/2, затем в (0,pi/4) с заменой синуса на косинус, если аргумент превышает pi/4. Это уже будет намного лучше, но если аргумент заметно отличается от нуля, то точность просядет очень быстро.
    Ответ написан
    Комментировать
  • Как ботом подписаться на канал?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Боты не могут подписываться на каналы, их может добавлять в список подписчиков канала только владелец/админ канала. На каналы могут подписываться только живые пользователи. Соответственно, придётся пересмотреть концепцию. Например, объяснить пользователю в картинках, как ему добавить бота в канал вручную. Или, в конце концов, вместо бота использовать юзербота.
    Ответ написан
    Комментировать
  • Какой протокол лучше выбрать для шифрованного обмена файлами?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Универсальный шифрованный канал для любых задач легко обеспечивается любым VPN с шифрованием. Можно openvpn/wireguard/ipsec или что ещё душе угодно. Как вариант, можно использовать stunnel для превращения нешифрованного tcp-соединения в шифрованное, это для некоторых задач может быть проще.

    Для синхронизации удобно использовать rsync (поверх ssh, то есть он сразу шифрованный).

    Готовые решения постоянной синхронизации: lsyncd (обёртка над rsync, синхронизирует в одну сторону; важно ни в коем-случае не запускать два экземпляра в обе стороны, так как риск синхронизации не в ту сторону крайне высок!), https://github.com/stephenh/mirror (неплохо работает и умеет синхронизировать в обе стороны, но в моих экспериментах всё же случались синхронизации не в ту сторону, хоть и очень редко), syncthing (тоже умеет в обе стороны, не тестировал). Но в целом можно просто запускать rsync по планировщику.
    Ответ написан
    Комментировать
  • Как исправить эту ошибку docker-compose?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Идём сюда: archive.ubuntu.com/ubuntu/dists и видим, что там нет релиза hirsute. Зато он есть тут: https://old-releases.ubuntu.com/ubuntu/dists/ , так что меняем archive.ubuntu.com на old-releases.ubuntu.com. Ещё лучше, конечно, обновить Dockerfile на более новую версию убунты, но может потребоваться разобраться в разных нюансах (какой-нить пакет иначе называется, какие-то конфиги в другом месте лежат и всякое такое).
    Ответ написан
    4 комментария
  • Как перебрать всех пользователей, и узнать создателя беседы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Telegram Bot API не предоставляет возможности получить список участников чата. Это можно сделать только с помощью клиентского API (его реализует, например, библиотека telethon).

    Однако если id пользователя известен (можно, например, отслеживать ботом сообщения о вступлениях в чат, запоминая всех, кто вошёл в чат после бота), можно проверить его роль в чате с помощь метода get_chat_member. Но основатель чата, очевидно, будет в нём всегда самым первым пользователем до любого бота.
    Ответ написан
    Комментировать
  • Как сделать единую точку входа в nginx через auth_basic?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, http auth помнит авторизацию только для конкретного сайта/домена. Придётся перейти на общий домен, смириться с двумя авторизациями или отказаться от http auth вообще. К слову, её в интернетах вообще используют исчезающе редко, так как она сильно неудобна для пользователя не только по причине отсутствия кроссдоменности.
    Ответ написан
    7 комментариев
  • Как сгруппировать ip по /24?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ошибка в том, что не надо в процессе итерации по списку удалять из него элементы. Результат может быть непредсказуем.

    И вообще, код какой-то безумный. Задачу можно решить в один цикл, примерно так:

    mask_dict = {}
    
    for i in test:
        mask = IPv4Network('{}/24'.format(i), strict = False)
        if mask in mask_dict:
            mask_dict[mask].append(i)
        else: 
            mask_dict[mask] = [i]
    Ответ написан
    2 комментария
  • Как настроить передачу с формы на заказчика т.г?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Токен не даёт полного доступа к аккаунту, только возможность отправлять/принимать сообщения от имени бота. Так что это вполне нормально передавать токен бота для интеграции. В конце концов, владелец бота может через BotFather поменять токен и тем самым быстро отключить ранее выданный.
    Ответ написан
    3 комментария
  • Как сделать телеграмм бота, который когда его отметили дает выбор какое отправить аудио?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это не "отметили", а так называемый inline mode. Нужно включить этот режим в настройках бота, а затем в коде реализовать обработчик inline_handler. Примерно так:

    @bot.inline_handler(lambda query: len(query.query) > 0)
    def query_text(inline_query):
        keyboard = []
        for code in ['foo', 'bar']:
            keyboard.append(telebot.types.InlineQueryResultArticle(code, f'>>> {code} <<<', telebot.types.InputTextMessageContent(f'<<<{code}>>>')))
        bot.answer_inline_query(inline_query.id, keyboard, is_personal=True)


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

    ЗЫ
    Мне в одном боте пришлось из-за этого реализовать концепцию inline policy: в зависимости от настроек чата бот может игнорировать или даже удалять сообщения, оставленные пользователями с помощью inline mode ботов из чёрного списка.
    Ответ написан
    Комментировать
  • Есть ли payload в телеграм кнопках?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для обычных (не inline) кнопок текст на кнопке означает обычный текст, передаваемый боту при нажатии на кнопку. Никакого другого способа определить нажатую кнопку нет.
    Ответ написан
    Комментировать
  • Как получить id?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, средствами Bot API это невозможно. Тем более что у пользователя может вообще не быть username.

    Конечно, его можно получить в событии от пользователя в поле Update.from.id, но для этого пользователь должен сделать какое-то действие в сторону бота (или, например, в сторону группы, в которой он состоит).
    Ответ написан
    Комментировать
  • Сколько всего ip адресов в глобальном интернете?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если ipconfig показывает адрес с префиксом fe80::, то это Link Local address, аналог 169.254.* в IPv4, такие адреса в Internet не маршрутизируются.
    Ответ написан
    Комментировать
  • Как узнать количество уникальных результатов random.shuffle?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Число перестановок списка длины n - это n! (факториал: n!=1*2*3*...*n). Это основы комбинаторики.

    Так что если надо просто число различных вариантов, то:

    math.factorial(len(our_list))
    Ответ написан
    Комментировать
  • Что за папка /root/mdb103/?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сделай из под root

    lsof -n | grep root/mdb103

    при запущенной mariadb. Если найдёт запущенные процессы mariadb, использующие файлы в этом каталоге, значит да, файлы там нужны.

    В каталоге лежат deb-пакеты, они после установки не нужны. В подкаталоге лежат исходники сервера скомпилированные. В зависимости от того, как они установлены, они могут быть также не нужны. Если их ставили через make install без префикса в /root, то сервер должен, скорее всего, стоять в /usr/local. Если через сборку пакетов с помощью debian/rules (при этом готовые пакеты кладутся в вышестоящий каталог, что весьма логично), то тоже не нужны - они должны быть затем установлены в систему.

    В конце концов, необязательно файлы сразу удалять. Можно попробовать переименовать этот каталог, перезагрузить базу или даже весь сервер и убедиться, что всё работает.
    Ответ написан
    1 комментарий
  • Где взять бесплатную музыку для коммерческого использования?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например, можно посмотреть на проекты Кевина Маклауда:
    https://incompetech.com/ требует только упоминания автора
    https://freepd.com/ музыка, перешедшая в общественное достояние (public domain)

    А вообще искать музыку royalty free, под public domain или под лицензиями Creative Commons (внимательно смотреть на конкретный тип, некоторые разрешают коммерческое использование, а некоторые нет).
    Ответ написан
    Комментировать