utility-belt/README.md

257 lines
25 KiB
Markdown
Raw Normal View History

2023-03-20 13:45:23 +03:00
---
gitea: none
include_toc: true
---
2023-03-20 13:40:03 +03:00
# my utility belt
2023-03-20 12:44:02 +03:00
2023-03-20 13:58:07 +03:00
Набор различных полезных инструментов и утилит, которые могут пригодиться в повседневной работе и которые помогают лично мне. Описанное здесь обычно не присутствует публично где-то еще (т.е. это не список вида "https://regex101.com - полезный сайт для теста регулярок"), но это пока - позже я и внешние полезные инструменты накидаю. Список будет дополняться по мере необходимости. Актуально для RetailCRM.
2023-03-20 13:40:03 +03:00
2023-03-20 13:46:50 +03:00
Выше основного заголовка есть навигация по файлу - надпись `Table of Contents` со стрелочкой слева. Она _кликабельна_, по клику на нее развернется список заголовков в файле. Пользуйтесь ею.
2023-03-20 13:45:23 +03:00
2023-03-20 13:53:10 +03:00
## Зеркало GitHub компании на случай непредвиденных обстоятельств
2023-03-20 13:40:03 +03:00
Зеркало публичных репозиториев компании на GitHub. Содержит ТОЛЬКО публичные репозитории, обновляется автоматически. Может помочь если GitHub лежит или если GitHub начнет банить аккаунты, которые ему не нравятся.
- [Ссылка](https://gitea.neur0tx.site/RetailCRM)
2023-03-20 13:53:10 +03:00
## Быстрое меню для упрощения работы с техподдержкой
2023-03-20 13:40:03 +03:00
Простейший скрипт на 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`
2023-11-13 23:56:28 +03:00
Дополнительные зависимости (без них связанные пункты меню просто ничего не делают - их можно просто удалить):
2023-03-20 13:40:03 +03:00
- `flameshot`
- `peek`
- `simplescreenrecorder`
2024-02-28 14:24:54 +03:00
- `com.github.rajsolai.textsnatcher` (flatpak)
2023-03-20 13:40:03 +03:00
- `wmctrl`
- `xdotool`
2023-11-13 23:56:28 +03:00
- `xrandr`
2023-03-20 13:40:03 +03:00
2023-03-20 13:53:10 +03:00
В секции "Логин техподдержки" нажмите "Обновить" чтобы в списке появились все почты для входа в системы техподдержки. По клику на почту произойдет копирование ее в буфер обмена. "Пароль техподдержки" позволяет удобно хранить пароль техподдержки и в любой момент скопировать его в буфер обмена. "Доступы в тестовую CRM" тоже позволяют удобно хранить и использовать данные тестовой системы; нажмите "Обновить" чтобы заполнить эти данные. Остальные пункты просто позволяют быстро сделать скриншот или запись экрана, что, опять же, полезно при работе с техподдержкой.
2023-03-20 13:40:03 +03:00
Код скрипта страшноват т.к. мне достаточно было чтобы оно просто как-то работало.
2024-02-28 14:24:54 +03:00
## TextSnatcher - аналог Live Text из macOS
Спасает в случаях когда нужно скопировать много текста со скриншота ([github](https://github.com/RajSolai/TextSnatcher), [flathub](https://flathub.org/apps/com.github.rajsolai.textsnatcher)). При запуске позволяет снять скриншот и сразу копирует в буфер обмена текст со скриншота. Иногда путается в символах вида l / I / 1 - будьте аккуратны.
2023-03-20 13:53:10 +03:00
## Раскукоживатель скриншотеров - переходим по прямой ссылке на картинку скриншот-сервиса
2023-03-20 13:40:03 +03:00
Автоматически редиректит ссылки нескольких популярных скриншот-сервисов на прямую ссылку на картинку. Ставится через [Violentmonkey](https://violentmonkey.github.io) или любое другое расширение для юзерскриптов. Поддерживает Joxi, Monosnap, Nimbus, Lightshot, ibb.co, scr.sh. Цель проста - не видеть рекламу и прочую бесполезную шелуху на странице скриншот-сервисов.
- [Ссылка на установку](/Neur0toxine/utility-belt/raw/branch/master/screenshot-unwrap.user.js)
2023-03-20 13:53:10 +03:00
## Редирект ссылок Mattermost в приложение вместо открытия в браузере
2023-03-20 13:40:03 +03:00
Mattermost может "забывать" о том, что ссылки нужно редиректить в приложение. В таком случае вместо перехода в приложение открывается страница с кнопкой SSO или сам Mattermost в браузере (если уже залогинены). Юзерскрипт автоматически редиректит такие ссылки в приложение. Ставится через [Violentmonkey](https://violentmonkey.github.io) или любое другое расширение для юзерскриптов.
2023-03-22 16:42:28 +03:00
- [Ссылка на установку](/Neur0toxine/utility-belt/raw/branch/master/mattermost-deeplinking.user.js)
2023-03-20 13:40:03 +03:00
В дистрибутивах Linux может сразу не работать. Лечится так:
```sh
# mattermost-desktop.desktop должен лежать в /usr/share/applications и содержать строчку MimeType=x-scheme-handler/mattermost;
xdg-mime default mattermost-desktop.desktop x-scheme-handler/mattermost
```
2024-02-28 14:24:54 +03:00
Mattermost из Flatpak ранее не работал с этим решением. Сейчас уже работает.
2023-03-20 13:40:03 +03:00
## Выключаем оповещения от Mattermost во внерабочее время (Android)
В Slack имеется настройка, которая позволяет указать в какое время уведомления будут доставляться. Аналога в Mattermost нет. На домашнем ПК можно просто не ставить Mattermost или закрыть его после работы, а вот на телефоне так не выйдет - там ведь push-уведомления приходят, которые просто так не скрыть. Однако, проблема решаема:
2023-03-23 09:32:50 +03:00
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 и прочие производители с изуродованным андроидом! Инструкции для вашего аппарата можно найти в гугле. Если этого не сделать, приложение может работать криво.
2023-03-20 13:53:10 +03:00
## Используем RNNoise (нейронковый шумодав) в Linux - убирает посторонние звуки в созвонах
2023-03-20 13:40:03 +03:00
ВНИМАНИЕ: нижеуказанные действия могут оставить вашу систему **без звука**, будьте ПРЕДЕЛЬНО аккуратны.
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 переходим на "Вход" > "Эффекты" > "Добавить эффекты". Отсюда добавляем "Подавление шума" и "Эхоподавление".
2024-02-28 14:24:54 +03:00
После этих действий для подавления шума будет использоваться RNNoise и качества звука улучшится _значительно_. Не забудьте отключить шумодав в Zoom!
2023-03-20 13:40:03 +03:00
2023-03-20 13:53:10 +03:00
## pock - мокаем http-запросы в PHP (PSR-18!)
2023-03-20 13:40:03 +03:00
Маленькая библиотека на 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)
2023-03-20 13:53:10 +03:00
## Локальный мок-сервер для метрик Zabbix - смотрим на свои метрики локально без установки Zabbix Server
2023-03-20 13:40:03 +03:00
Простейший мок 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)
2023-03-20 13:53:10 +03:00
## Локальная альтернатива webhook.site - смотрим в http-запросы в stdout
2023-03-20 13:40:03 +03:00
Приложение собирается через go build. Запускается с адресом для прослушивания примерно так:
```sh
./main ":8080"
```
Любой входящий http-запрос выведется в stdout с цветами и всем содержимым.
- [Код на GitHub](https://github.com/Neur0toxine/whprintf)
В дальнейшем работать с этой штукой будет попроще.
2023-03-20 13:53:10 +03:00
## Образы Go с дополнительными утилитами
2023-03-20 13:40:03 +03:00
2023-03-20 13:45:23 +03:00
Используются в транспортах и содержат ряд полезных утилит. Обновляются автоматически каждую неделю.
2023-03-20 13:40:03 +03:00
- [Ссылка](https://hub.docker.com/r/neur0toxine/golang-alpine)
- [Код на GitHub](https://github.com/Neur0toxine/docker-golang-alpine)
2023-03-20 13:53:10 +03:00
## Образы NodeJS с дополнительными утилитами
2023-03-20 13:40:03 +03:00
2023-03-20 13:45:23 +03:00
Основаны на [этих образах](https://hub.docker.com/r/timbru31/node-alpine-git). Добавлены зависимости, которые позволяют проще собирать бинарники в CI и локально (например, помогает с sass). Обновляются автоматически каждую неделю.
2023-03-20 13:40:03 +03:00
- [Ссылка](https://hub.docker.com/r/neur0toxine/node-alpine-git-gyp)
- [Код на GitHub](https://github.com/Neur0toxine/docker-node-alpine-git-gyp)
2023-11-13 23:56:28 +03:00
## Мой прокси
См. [здесь](https://neur0tx.site/proxy_ru.html). Можно использовать как фолбэк если у вас есть доступ к этому сервису.
## Ускоряем реверс-прокси сайтов через ssh при работе через Wireguard VPN
2023-11-17 22:26:23 +03:00
Ускорение достигается за счет правки таблицы маршрутизации в момент подключения и отключения VPN. Мы пускаем все подключения к реверс-прокси не через VPN - это позволяет ускорить работу реверс-прокси.
Инструкция подходит к любому прокси чей IP не меняется (актуально для моего прокси и `proxy.retailcrm.tech`) и актуальна для Linux и iproute2. Выполняем следующее:
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.
2023-11-13 23:56:28 +03:00
## Обход блокировок сайтов
### Профиль 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` нужно периодически обновлять.
2023-03-20 13:40:03 +03:00
## Для транспортов
2023-03-20 13:41:46 +03:00
### Вспомогательное приложение для отчетов & пакетных операций для транспортов
2023-03-20 13:40:03 +03:00
Приложение содержит набор команд, которые позволяют выполнять пакетные операции навроде:
- генерации отчетов с верификацией систем / API-ключей / etc;
- пакетной смены настроек соединений или аккаунтов.
Предоставляется только в виде кода т.к. часто требуется добавить какую-нибудь свою команду для обработки данных или массовых операций. Приложение предоставляет небольшой "фреймворк" для облегчения этого действия, в частности, для простого написания генераторов отчетов из исходных csv-данных. Отчеты при этом генерируются конкуррентным образом (по возможности в несколько потоков).
Абсолютно все команды можно увидеть запустив приложение без аргументов. Любая команда с аргументом `help` опишет зачем она нужна и как ей пользоваться. Приложение собирается через `make` (нужен Go 1.18 и выше локально).
2023-03-20 13:45:23 +03:00
- [Код на GitHub](https://github.com/Neur0toxine/transport-reports), но сначала получите доступ [у меня](https://t.me/neur0tx).
2023-03-20 13:40:03 +03:00
### Простейший мок-сервер для 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)