Neur0toxine
5bbd7c8b96
All checks were successful
continuous-integration/drone/push Build is passing
252 lines
25 KiB
Markdown
252 lines
25 KiB
Markdown
---
|
||
gitea: none
|
||
include_toc: true
|
||
---
|
||
|
||
# my utility belt
|
||
|
||
Набор различных полезных инструментов и утилит, которые могут пригодиться в повседневной работе и которые помогают лично мне. Описанное здесь обычно не присутствует публично где-то еще (т.е. это не список вида "https://regex101.com - полезный сайт для теста регулярок"), но это пока - позже я и внешние полезные инструменты накидаю. Список будет дополняться по мере необходимости. Актуально для RetailCRM.
|
||
|
||
Выше основного заголовка есть навигация по файлу - надпись `Table of Contents` со стрелочкой слева. Она _кликабельна_, по клику на нее развернется список заголовков в файле. Пользуйтесь ею.
|
||
|
||
## Зеркало GitHub компании на случай непредвиденных обстоятельств
|
||
|
||
Зеркало публичных репозиториев компании на GitHub. Содержит ТОЛЬКО публичные репозитории, обновляется автоматически. Может помочь если GitHub лежит или если GitHub начнет банить аккаунты, которые ему не нравятся.
|
||
- [Ссылка](https://gitea.neur0tx.site/RetailCRM)
|
||
|
||
## Быстрое меню для упрощения работы с техподдержкой
|
||
|
||
Простейший скрипт на bash, который позволяет вывести удобную менюшку для повседневных действий вроде копирования пароля техподдержки или перехода в свою тестовую систему. Совместимо с Argos в Gnome, можно допилить и для работы в macOS с xbar (у меня пока руки не дошли, к сожалению).
|
||
Установка:
|
||
1. Устанавливаем [Argos](https://extensions.gnome.org/extension/1176/argos/). Иногда он не работает и нужно ставить с github версию.
|
||
2.
|
||
```sh
|
||
mkdir -p ~/.config/argos && curl -o ~/.config/argos/menu.+.sh https://gitea.neur0tx.site/Neur0toxine/utility-belt/raw/branch/master/menu.+.sh
|
||
```
|
||
|
||
Обязательные зависимости: `jq zenity`, `xclip` или `wl-copy`, `xargs inotify curl jq bash`
|
||
Дополнительные зависимости (без них связанные пункты меню просто ничего не делают - их можно просто удалить):
|
||
- `flameshot`
|
||
- `peek`
|
||
- `simplescreenrecorder`
|
||
- `wmctrl`
|
||
- `xdotool`
|
||
- `xrandr`
|
||
|
||
В секции "Логин техподдержки" нажмите "Обновить" чтобы в списке появились все почты для входа в системы техподдержки. По клику на почту произойдет копирование ее в буфер обмена. "Пароль техподдержки" позволяет удобно хранить пароль техподдержки и в любой момент скопировать его в буфер обмена. "Доступы в тестовую CRM" тоже позволяют удобно хранить и использовать данные тестовой системы; нажмите "Обновить" чтобы заполнить эти данные. Остальные пункты просто позволяют быстро сделать скриншот или запись экрана, что, опять же, полезно при работе с техподдержкой.
|
||
|
||
Код скрипта страшноват т.к. мне достаточно было чтобы оно просто как-то работало.
|
||
|
||
## Раскукоживатель скриншотеров - переходим по прямой ссылке на картинку скриншот-сервиса
|
||
|
||
Автоматически редиректит ссылки нескольких популярных скриншот-сервисов на прямую ссылку на картинку. Ставится через [Violentmonkey](https://violentmonkey.github.io) или любое другое расширение для юзерскриптов. Поддерживает Joxi, Monosnap, Nimbus, Lightshot, ibb.co, scr.sh. Цель проста - не видеть рекламу и прочую бесполезную шелуху на странице скриншот-сервисов.
|
||
- [Ссылка на установку](/Neur0toxine/utility-belt/raw/branch/master/screenshot-unwrap.user.js)
|
||
|
||
## Редирект ссылок Mattermost в приложение вместо открытия в браузере
|
||
|
||
Mattermost может "забывать" о том, что ссылки нужно редиректить в приложение. В таком случае вместо перехода в приложение открывается страница с кнопкой SSO или сам Mattermost в браузере (если уже залогинены). Юзерскрипт автоматически редиректит такие ссылки в приложение. Ставится через [Violentmonkey](https://violentmonkey.github.io) или любое другое расширение для юзерскриптов.
|
||
- [Ссылка на установку](/Neur0toxine/utility-belt/raw/branch/master/mattermost-deeplinking.user.js)
|
||
|
||
В дистрибутивах Linux может сразу не работать. Лечится так:
|
||
```sh
|
||
# mattermost-desktop.desktop должен лежать в /usr/share/applications и содержать строчку MimeType=x-scheme-handler/mattermost;
|
||
xdg-mime default mattermost-desktop.desktop x-scheme-handler/mattermost
|
||
```
|
||
|
||
Если Mattermost ставили из Flatpak - удаляйте и ставьте нативный. Flatpak-версия работает кривовато т.к. толком не поддерживается и собирается энтузиастами.
|
||
|
||
## Выключаем оповещения от Mattermost во внерабочее время (Android)
|
||
|
||
В Slack имеется настройка, которая позволяет указать в какое время уведомления будут доставляться. Аналога в Mattermost нет. На домашнем ПК можно просто не ставить Mattermost или закрыть его после работы, а вот на телефоне так не выйдет - там ведь push-уведомления приходят, которые просто так не скрыть. Однако, проблема решаема:
|
||
1. ~~Покупаем приложение [Buzzkill](https://play.google.com/store/apps/details?id=com.samruston.buzzkill) в GPlay~~ ах да, гугель ведь не даст нам это сделать. Для покупки приложений нужно совершить кучу танцев с бубном, при этом результат не гарантирован.
|
||
|
||
Есть другой (🏴☠️) путь:
|
||
1. __Пиратим Buzzkill__ т.к. другого варианта банально нет (нормального аналога приложению я пока не нашел). В том же гугель-поиске пишите `buzzkill app apk`, первая ссылка содержит то, что вам нужно. Птичка напела что-то про `mod` и `yolo`, к чему бы это...
|
||
2. Открываем приложение и даем ему все доступы, которые оно просит.
|
||
3. Настраиваем правило как вам угодно. Я сделал как на картинке ниже. Для интервалов нерабочих часов в будние дни указывайте время так: `18:00 - 9:00`, а чтобы правило действовало весь день выбирайте `00:00 - 23:59` (для субботы и воскресенья подойдет).
|
||
|
||
![Уведомления Mattermost во внерабочее время](buzzkill-rule-mattermost.jpg)
|
||
|
||
В моем случае все уведомления с 6 вечера до 9 утра будут собираться в кучу, а появятся они только в 9 утра. На iOS используйте Focus Mode - менее гибко, но работает.
|
||
|
||
**Важно:** отключите для приложения всякие оптимизации батареи, отключения разрешений и прочую мишуру, которую любят вшивать Samsung, Xiaomi, oppo, Vivo, Nokia и прочие производители с изуродованным андроидом! Инструкции для вашего аппарата можно найти в гугле. Если этого не сделать, приложение может работать криво.
|
||
|
||
## Используем RNNoise (нейронковый шумодав) в Linux - убирает посторонние звуки в созвонах
|
||
|
||
ВНИМАНИЕ: нижеуказанные действия могут оставить вашу систему **без звука**, будьте ПРЕДЕЛЬНО аккуратны.
|
||
|
||
1. Удаляем PulseAudio по инструкции для вашего дистрибутива. Этот шаг пропускаем если уже используется Pipewire (если в выводе `ps aux | grep pipewire` есть `/usr/bin/pipewire`). Устанавливаем PipeWire по инструкции вашего дистрибутива. [Инструкция для Ubuntu / Debian](https://pipewire-debian.github.io/pipewire-debian/).
|
||
2. Ставим [EasyEffects](https://github.com/wwmm/easyeffects) из репозиториев вашего дистрибутива или Flatpak ([инструкция](https://ubuntuhandbook.org/index.php/2021/09/easyeffects-audio-effects-to-pipewire/)). Перезагружаемся.
|
||
3. В EasyEffects переходим на "Вход" > "Эффекты" > "Добавить эффекты". Отсюда добавляем "Подавление шума" и "Эхоподавление".
|
||
|
||
После этих действий для подавления шума будет использоваться RNNoise и качества звука улучшится _значительно_.
|
||
|
||
## pock - мокаем http-запросы в PHP (PSR-18!)
|
||
|
||
Маленькая библиотека на PHP, которая позволяет мокать запросы, сделанные из API-клиентов, использующих PSR-18 совместимый http-клиент. Похожа на [gock](https://github.com/h2non/gock) (аналог для ноды - [nook](https://github.com/node-nock/nock) и для питона [pook](https://github.com/h2non/pook)). Код простой и очень сильно покрыт тестами. Используется в некоторых боевых проектах в тестах т.к. [api-client-php](https://github.com/retailcrm/api-client-php) использует PSR-18.
|
||
- [Ссылка](https://packagist.org/packages/neur0toxine/pock)
|
||
- [Код на GitHub](https://github.com/Neur0toxine/pock)
|
||
|
||
## Локальный мок-сервер для метрик Zabbix - смотрим на свои метрики локально без установки Zabbix Server
|
||
|
||
Простейший мок Zabbix Server, который принимает Zabbix-пакет с метриками и выводит их содержимое. Пока что размер пакета ограничен кибибайтом (попозже поправлю это если понадобится, PR приветствуются). Используется очень просто в докеризированных приложениях:
|
||
```yaml
|
||
# Представим, что это docker-compose.yml
|
||
services:
|
||
zabbix:
|
||
image: "neur0toxine/zabbix-metrics-mock:latest"
|
||
```
|
||
после чего можно смело указывать `zabbix` как хост Zabbix Server и наблюдать метрики в stdout.
|
||
|
||
- [Ссылка](https://hub.docker.com/r/neur0toxine/zabbix-metrics-mock)
|
||
- [Код на GitHub](https://github.com/Neur0toxine/zabbix-metrics-mock)
|
||
|
||
## Локальная альтернатива webhook.site - смотрим в http-запросы в stdout
|
||
|
||
Приложение собирается через go build. Запускается с адресом для прослушивания примерно так:
|
||
```sh
|
||
./main ":8080"
|
||
```
|
||
Любой входящий http-запрос выведется в stdout с цветами и всем содержимым.
|
||
- [Код на GitHub](https://github.com/Neur0toxine/whprintf)
|
||
|
||
В дальнейшем работать с этой штукой будет попроще.
|
||
|
||
## Образы Go с дополнительными утилитами
|
||
|
||
Используются в транспортах и содержат ряд полезных утилит. Обновляются автоматически каждую неделю.
|
||
- [Ссылка](https://hub.docker.com/r/neur0toxine/golang-alpine)
|
||
- [Код на GitHub](https://github.com/Neur0toxine/docker-golang-alpine)
|
||
|
||
## Образы NodeJS с дополнительными утилитами
|
||
|
||
Основаны на [этих образах](https://hub.docker.com/r/timbru31/node-alpine-git). Добавлены зависимости, которые позволяют проще собирать бинарники в CI и локально (например, помогает с sass). Обновляются автоматически каждую неделю.
|
||
- [Ссылка](https://hub.docker.com/r/neur0toxine/node-alpine-git-gyp)
|
||
- [Код на GitHub](https://github.com/Neur0toxine/docker-node-alpine-git-gyp)
|
||
|
||
## Мой прокси
|
||
|
||
См. [здесь](https://neur0tx.site/proxy_ru.html). Можно использовать как фолбэк если у вас есть доступ к этому сервису.
|
||
|
||
## Ускоряем реверс-прокси сайтов через ssh при работе через Wireguard VPN
|
||
|
||
Ускорение достигается за счет правки таблицы маршрутизации в момент подключения и отключения VPN. Мы пускаем все подключения к реверс-прокси не через VPN - это позволяет
|
||
сильно ускорить работу реверс-прокси. Инструкция подходит к любому прокси чей IP не меняется (актуально для моего прокси и `proxy.retailcrm.tech`). Выполняем следующее:
|
||
1. Отключаем свой VPN.
|
||
2. Выполняем команду:
|
||
```sh
|
||
ip route | grep default | awk '{print $3;}'
|
||
```
|
||
3. Копируем полученный IP.
|
||
4. Теперь подготавливаем записи `PreUp` и `PostDown`, которые будем указывать в нашем VPN-профиле. Используем следующий шаблон:
|
||
```ini
|
||
PreUp = ip route add IP_прокси/32 via IP_из_шага_2
|
||
PostDown = ip route del IP_прокси/32 via IP_из_шага_2
|
||
```
|
||
5. Если нужно добавить сразу несколько IP в список - дублируем команды через `;` вот так:
|
||
```ini
|
||
PreUp = ip route add IP_первого_прокси/32 via IP_из_шага_2; ip route add IP_второго_прокси/32 via IP_из_шага_2
|
||
PostDown = ip route del IP_первого_прокси/32 via IP_из_шага_2; ip route del IP_второго_прокси/32 via IP_из_шага_2
|
||
```
|
||
Пример с default gateway = `192.168.1.1` и настройкой для `proxy.retailcrm.tech` (IP `proxy.retailcrm.tech` может быть неактуален - проверяйте!):
|
||
```ini
|
||
PreUp = ip route add 136.243.39.221/32 via 192.168.1.1
|
||
PostDown = ip route del 136.243.39.221/32 via 192.168.1.1
|
||
```
|
||
6. Открываем профиль VPN (лежит в `/etc/wireguard` с расширением `conf`, для редактирования нужен рут) и добавляем `PreUp` и `PostDown` чтобы получилось примерно так:
|
||
```ini
|
||
[Interface]
|
||
PrivateKey = MTcwMDI0ODQxMXJnbGZya2puZnduamxyd2VscnJscmZrcmwsZgo=
|
||
Address = 10.2.3.4/32
|
||
DNS = 10.2.3.5
|
||
PreUp = ip route add 136.243.39.221/32 via 192.168.1.1
|
||
PostDown = ip route del 136.243.39.221/32 via 192.168.1.1
|
||
|
||
[Peer]
|
||
PublicKey = MTcwMDI0ODQyOHJnbGZya2puZnduamxyd2VscnJscmZrcmwsZgo=
|
||
AllowedIPs = 0.0.0.0/0
|
||
Endpoint = 1.2.3.4:51820
|
||
```
|
||
|
||
Настройка для IPv6 тоже возможна:
|
||
- Все команды `ip` для IPv6 требуют аргумента `-6`. Пример: `ip -6 route | grep default | awk '{print $3;}'`
|
||
- Размер IP в IPv6 - 128 бит. Поэтому в CIDR указываем размер блока не `/32`, а `/128`.
|
||
|
||
По идее этого должно быть достаточно, но я настройку для IPv6 не пробовал по причине отсутствия необходимости. Аналогичную конфигурацию без привязки к Linux и iproute2 можно реализовать с помощью [AllowedIPs Calculator](https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/), но в моем случае попытка использования этого инструмента оканчивалась нерабочим Интернетом после правки профиля VPN.
|
||
|
||
## Обход блокировок сайтов
|
||
|
||
### Профиль Wireguard VPN под Linux
|
||
|
||
Есть два способа:
|
||
- Через `wg-quick`. Подключение работает стабильно, но индикаторов и интеграции с окружением нет.
|
||
- Через `NetworkManager`. Интегрируется с окружением, но могут быть проблемы с подключением.
|
||
|
||
#### Через wg-quick
|
||
|
||
1. Скачиваете файл профиля (например, `work.conf`).
|
||
2. `sudo mkdir -p /etc/wireguard && sudo mv work.conf /etc/wireguard/`
|
||
3. Использование
|
||
- Запустить VPN: `wg-quick up work`
|
||
- Остановить VPN: `wg-quick down work`
|
||
|
||
#### Через NetworkManager
|
||
|
||
1. Скачиваете файл профиля (например, `work.conf`).
|
||
2. `sudo nmcli conn import type wireguard file work.conf`
|
||
3. Откройте `nm-connection-editor` и отключите автоподключение свежедобавленного VPN-профиля.
|
||
4. Можно подключать / отключать VPN из списка соединений вашей ОС.
|
||
|
||
**Внимание**: с NetworkManager могут быть проблемы. Чаще всего встречаются эти:
|
||
|
||
_Проблема:_ в списке соединений Wireguard-соединение не отображается
|
||
_Причина:_ старая версия окружения (под стандартной Ubuntu это Gnome).
|
||
_Решение:_ обновить Gnome до последней версии. Но лучше не трогать.
|
||
|
||
_Проблема:_ VPN подключается при старте системы.
|
||
_Причина:_ по умолчанию соединение активируется автоматически.
|
||
_Решение:_ отключите автоподключение - см. выше.
|
||
|
||
_Проблема:_ после подключения VPN Интернет пропадает / трафик идет напрямую (как без VPN).
|
||
_Причина:_ обычно вызвано проблемой с маршрутами или DNS.
|
||
_Решение:_ используйте `wg-quick` (под Gnome для удобства можно поставить и настроить расширение [Wireguard Indicator](https://extensions.gnome.org//extension/3612/wireguard-indicator/)).
|
||
|
||
### Публичные расширения & прокси
|
||
|
||
Наиболее приемлемы эти:
|
||
- [Обход блокировок Рунета](https://github.com/anticensority/runet-censorship-bypass)
|
||
- [Censor Tracker](https://censortracker.org/)
|
||
- [Антизапрет](https://antizapret.prostovpn.org/)
|
||
|
||
Первое расширение использует сервера Антизапрета и pac-файл от них же. Поэтому проксируются только заблокированные сайты - все остальное идет напрямую.
|
||
**Важно:** установка system-wide pac-файла от Антизапрета вовсе не означает, что приложения обязательно будут использовать прокси. В отличие от VPN приложения могут просто не поддерживать автоконфигурацию прокси и идти в Сеть напрямую.
|
||
|
||
### Настройка селективного обхода блокировки со своим прокси / приватным прокси
|
||
|
||
1. Установите Nekoray и добавьте в него свой прокси.
|
||
2. Следуйте [этой инструкции](https://gitea.neur0tx.site/xray-addons/geoip-geosite-with-ru-blocklist/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-Nekoray-&-Docker-&-Terminal-%D0%B4%D0%BB%D1%8F-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8).
|
||
3. `geoip.dat` и `geosite.dat` нужно периодически обновлять.
|
||
|
||
## Для транспортов
|
||
|
||
### Вспомогательное приложение для отчетов & пакетных операций для транспортов
|
||
|
||
Приложение содержит набор команд, которые позволяют выполнять пакетные операции навроде:
|
||
- генерации отчетов с верификацией систем / API-ключей / etc;
|
||
- пакетной смены настроек соединений или аккаунтов.
|
||
Предоставляется только в виде кода т.к. часто требуется добавить какую-нибудь свою команду для обработки данных или массовых операций. Приложение предоставляет небольшой "фреймворк" для облегчения этого действия, в частности, для простого написания генераторов отчетов из исходных csv-данных. Отчеты при этом генерируются конкуррентным образом (по возможности в несколько потоков).
|
||
|
||
Абсолютно все команды можно увидеть запустив приложение без аргументов. Любая команда с аргументом `help` опишет зачем она нужна и как ей пользоваться. Приложение собирается через `make` (нужен Go 1.18 и выше локально).
|
||
|
||
- [Код на GitHub](https://github.com/Neur0toxine/transport-reports), но сначала получите доступ [у меня](https://t.me/neur0tx).
|
||
|
||
### Простейший мок-сервер для WhatsApp On-Premises API
|
||
|
||
Умеет принимать вебхук с сообщением и слать статус доставки в ответ. Настраивается через маршрут `/mock`. Требует сборки и запуска локально. Удобной обвязки нет, понять как настроить можно по `server.go`.
|
||
- [Код на GitHub](https://github.com/Neur0toxine/waba-coreapp-mock)
|
||
|
||
### Бот для тестов быстрых ответов в транспортах
|
||
|
||
Инструкция по сборке в readme. Бот сам регается в системе. При запуске бинарник укажет обязательные переменные окружения, необязательные можно посмотреть в `main.go`.
|
||
|
||
- [Код на GitHub](https://github.com/Neur0toxine/simla-bot-quickreplies-test) |