🛠
Проекты, инструменты, подходы и практики для инженеров, админов и энтузиастов.
🧩 Темы
🧰 Подборки сервисов и утилит
⚙️ Proxmox, Docker, Linux
🤖 AI для кодинга и DevOps
💼 Реальные продукты от идеи до пилота
📚 Навигация
#linux
#linuxthursday
#terminal
#api
#tools
#opensource
#selfhosted
#ai
#n8n
#vibecoding
#db
#vpn
#backup
#security
#docker
#proxmox
#шпаргалка
#полезное
#проекты
#продукт
🚀
🌏 Сайт |💙 ВК | 💬 TG | 📲 МАКС
DeSoft.ru — авторский взгляд на технологии, разработку и автоматизацию.Проекты, инструменты, подходы и практики для инженеров, админов и энтузиастов.
🧩 Темы
🧰 Подборки сервисов и утилит
⚙️ Proxmox, Docker, Linux
🤖 AI для кодинга и DevOps
📚 Навигация
#linux
#linuxthursday
#terminal
#api
#tools
#opensource
#selfhosted
#ai
#n8n
#vibecoding
#db
#vpn
#backup
#security
#docker
#proxmox
#шпаргалка
#полезное
#проекты
#продукт
🚀
DeSoft.ru — технологии, которые реально работают.🌏 Сайт |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1👏1
Для работы в терминале уже долгое время использую мультиплексор
📌 Установка (Debian / Ubuntu)
Установка на другие системы - tmux-wiki-installing
📌 Шпаргалка по основным командам и горячим клавишам
🔹Функциональность
🔹Список доступных плагинов - tmux-plugins-list
#linux #terminal #tmux #шпаргалка
Tmux. Ставлю его практически на всех серверах, с которыми приходится сталкиваться. Основная причина - это конечно продолжение работы сессий даже при отключении / разрыве ssh соединения - переподключились, вернулись в сессию, а все запущенные процессы как работали, так и работают. Сам инструмент во многом удобнее аналогов (например, Screen) и оброс обширной функциональностью за время своего существования.📌 Установка (Debian / Ubuntu)
sudo apt install tmux
Установка на другие системы - tmux-wiki-installing
📌 Шпаргалка по основным командам и горячим клавишам
# создание новой сессии с именем по умолчанию (порядковый номер)
tmux
# создание новой сессии с именем mysession
tmux new -s mysession
# подключиться к последней созданной сессии
tmux attach
# подключиться к сессии mysession
tmux attach -t mysession
# отключиться от сессии
tmux detach
# список сессий
tmux ls
# завершить сессию mysession
tmux kill-session -t mysession
# завершить все сессии
tmux kill-server
# посмотреть полный список команд
tmux list-commands
# префикс
Ctrl + b | префикс, с которого начинаются все команды
# сессии
Ctrl + b d | отключиться от сессии
Ctrl + b s | выбрать сессию
# окна
Ctrl + b c | создать новое окно
Ctrl + b w | посмотреть список окон
Ctrl + b n | переключиться на след окно
Ctrl + b p | переключиться на пред окно
Ctrl + b 0..9 | переключиться на окно по номеру
Ctrl + b x | закрыть окно (требуется подтверждение)
# панели
Ctrl + b " | разделить окно на две панели горизонтально
Ctrl + b % | разделить окно на две панели вертикально
Ctrl + b Arrow key | переключиться между панелями
Ctrl + b + Arrow key | изменить размеры панели
🔹Функциональность
Tmux расширяется с помощью плагинов. Для установки плагинов можно (и рекомендуется) использовать Tmux Plugin Manager.🔹Список доступных плагинов - tmux-plugins-list
#linux #terminal #tmux #шпаргалка
👍3
На одном из проектов для согласования работы нескольких сервисов необходимо было обмениваться сообщениями, подписанными алгоритмом ГОСТ 34.10-2012.
☑️ Формирование сообщений и их подпись производим на сервере на базе Debian 11.
☑️ Для подписи сообщений используем openssl с поддержкой алгоритмов ГОСТ.
➡️ Установка
➡️ Настройка
Ищем установленную ранее библиотеку поддержки ГОСТ
Идем в конфигурационный файл openssl (
➡️ Проверка
Проверяем поддержку установленных алгоритмов
Проверяем подключенный движок gost
Подписываем документ с использованием закрытого ключа
#linux #openssl #gost
☑️ Формирование сообщений и их подпись производим на сервере на базе Debian 11.
☑️ Для подписи сообщений используем openssl с поддержкой алгоритмов ГОСТ.
➡️ Установка
# ставим / обновляем криптографическую библиотеку
sudo apt install openssl
# добавляем поддержку алгоритмов шифрования ГОСТ
sudo apt install libengine-gost-openssl1.1
➡️ Настройка
Ищем установленную ранее библиотеку поддержки ГОСТ
# find / -name gost.so
/usr/lib/x86_64-linux-gnu/engines-1.1/gost.so
Идем в конфигурационный файл openssl (
/etc/ssl/openssl.cnf)# в начале файла находим и меняем конфигурацию,
# которую будет использовать openssl
openssl_conf = openssl_def
# в конец файла добавляем следующие секции
# (в dynamic_path указываем путь до найденной ранее библиотеки gost.so)
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/gost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
➡️ Проверка
Проверяем поддержку установленных алгоритмов
# openssl ciphers | tr ':' '\n' | grep GOST
GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89
Проверяем подключенный движок gost
# openssl engine gost -c -t
(gost) Reference implementation of GOST engine
[gost89, gost89-cnt, gost89-cnt-12, gost89-cbc, grasshopper-ecb, grasshopper-cbc, grasshopper-cfb, grasshopper-ofb, grasshopper-ctr, md_gost94, gost-mac, md_gost12_256, md_gost12_512, gost-mac-12, gost2001, gost-mac, gost2012_256, gost2012_512, gost-mac-12]
[ available ]
Подписываем документ с использованием закрытого ключа
key.pemopenssl dgst -sign key.pem -engine gost test.txt | base64 | tr -d "\n"
#linux #openssl #gost
👍2
В прошлом году для домашнего использования обзавелся
🔷 Для медиасервера поставил
⚠️ Утром следующего дня открываю веб-интерфейс
⁉️ Казалось бы, далее следуют долгие изыскания на тему несанкционированного доступа к
‼️ Помониторив форумы,
◽️https://github.com/qbittorrent/qBittorrent/issues/16529
◽️https://github.com/transmission/transmission/issues/2653
◽️https://community.synology.com/enu/forum/1/post/151239
◽️https://forum.qbittorrent.org/viewtopic.php?t=9643
🔷 Однозначного ответа, как эксплуатируется данная уязвимость на тот момент не нашел, но ряд мер в настройках
✅ Чистим запуски внешних программ
✅ Меняем пароль доступа
✅ Меняем порт веб-интерфейса
✅ Отключаем пропуск аутентификации для localhost и списка разрешенных сетей
✅ Отключаем использование проброса портов через маршрутизатор
#nas #tos #qbittorrent
NAS от TerraMaster, модель F4-423 на 4 диска. Задачи для него типовые - медиасервер, файлообменник, бэкапы, с чем заявленные характеристики справляются без каких-либо проблем. Смотрел разные обзоры, тесты, эксперименты с установкой операционных систем, отличных от родной ToS (например, XPEnology), но без высокой нагрузки, без специфических задач нужды особой в таких манипуляциях не испытал за время использования. Не буду долго расписывать особенности самого устройства, операционной системы и прочее, т.к. суть поста не в этом.🔷 Для медиасервера поставил
Plex и qBittorrent клиента из магазина приложений. Выполнил базовые настройки, проверил, что все функционирует и, как полагается, отложил дальнейшее изучение сего устройства на следующий день.⚠️ Утром следующего дня открываю веб-интерфейс
qBittorrent и обнаруживаю, что там отработали несколько торрентов с неизвестными мне иероглифами в названиях, и благополучно раздаются. Полез в настройки клиента - мои вчерашние установки сброшены, а также прописан скрипт, автоматически запускаемый по окончании загрузки торрента. Первая мысль - кто-то уже успел побывать в приложении за прошедшую ночь.⁉️ Казалось бы, далее следуют долгие изыскания на тему несанкционированного доступа к
NAS или к приложению, однако, далеко ходить не пришлось. В логах qBittorrent зарегистрировались десятки успешных входов с внешних адресов без какой-либо попытки перебора пароля. Пароль от WebUI qBittorrent я пустым не оставлял, и по умолчанию тоже не оставлял, да и NAS крутится только в локальной сети.‼️ Помониторив форумы,
issues в github репе qBittorrent, нашел занятную информацию о некой дыре в безопасности, которая затронула не только qBittorrent, но и другие популярные клиенты, например, Transmission.◽️https://github.com/qbittorrent/qBittorrent/issues/16529
◽️https://github.com/transmission/transmission/issues/2653
◽️https://community.synology.com/enu/forum/1/post/151239
◽️https://forum.qbittorrent.org/viewtopic.php?t=9643
🔷 Однозначного ответа, как эксплуатируется данная уязвимость на тот момент не нашел, но ряд мер в настройках
WebUI помог закрыть любые попытки доступа извне.✅ Чистим запуски внешних программ
✅ Меняем пароль доступа
✅ Меняем порт веб-интерфейса
✅ Отключаем пропуск аутентификации для localhost и списка разрешенных сетей
✅ Отключаем использование проброса портов через маршрутизатор
#nas #tos #qbittorrent
👍2
Существует множество виртуальных досок для рисования схем, макетов, прототипов и т.д. Одна из них -
✅ Устанавливаем расширение для VS Code
✅ Создаем файл с расширением
📌 Важной особенностью является наличие публичной библиотеки визуальных элементов для
📌 Стоит отметить простоту и скорость, с которой можно тут же, среди рабочего пространства, добавить нарисованную от руки схему в виде изображения или привязать ее к документу с описанием в
#vscode #tools #opensource
Excalidraw с открытым исходным кодом. Сам по себе инструмент не обладает какими-то особыми конкурентными преимуществами по сравнению с аналогами, однако, для тех, кто работает в VS Code, есть одноименное расширение, предоставляющее возможность быстрого и удобного рисования прямо в редакторе.✅ Устанавливаем расширение для VS Code
✅ Создаем файл с расширением
.excalidraw (.excalidraw.json, .excalidraw.svg, .excalidraw.png) и сразу попадаем в рабочую область для рисования.📌 Важной особенностью является наличие публичной библиотеки визуальных элементов для
Excalidraw, которые импортируются в локальную базу ресурсов, и становятся доступными для вставки в область рисования.📌 Стоит отметить простоту и скорость, с которой можно тут же, среди рабочего пространства, добавить нарисованную от руки схему в виде изображения или привязать ее к документу с описанием в
markdown разметке (например, так  ). Редактируем схему, в md все также моментально подхватывается.#vscode #tools #opensource
Visualstudio
Excalidraw - Visual Studio Marketplace
Extension for Visual Studio Code - Draw schemas in VS Code using Excalidraw
👍3
Для объединения распределенных устройств в одну виртуальную сеть, будь то организация рабочего пространства связыванием нескольких удаленных машин или целых подразделений компании, или обычный доступ к домашним ресурсам извне как к локальным, существует небезызвестное решение с открытым исходным кодом - ZeroTier.
🔹 В основе построения подобной сети лежит центральный сервер - сетевой контроллер, к которому подключаются связываемые узлы с помощью специального сервиса -
🔹 Кратко опишу общий подход, детальную же инструкцию по установке и настройке можно посмотреть, например, здесь.
Контроллер
▶️ Разработчик
▶️ Разворачиваем контроллер на своем сервере самостоятельно согласно документации и поднимаем веб-интерфейс.
▶️ Приобретаем недорогой
Подключение
✅ В веб интерфейсе контроллера создаем новую частную сеть и настраиваем диапазон адресов. Получаем идентификатор сети.
✅ На пользовательские машины устанавливаем сервис
✅ Возвращаемся в веб-интерфейс контроллера, подтверждаем подключенные узлы и назначаем им
✅ Проверяем успешность установленного соединения между устройствами.
❗️Узким местом с точки зрения безопасности здесь конечно является контроллер, выступающий в роли центра сертификации организуемых виртуальных сетей. Именно поэтому стоит уделить особое внимание месту размещения, а также защите сервера сетевого контроллера от компрометации.
#vpn #zerotier
🔹 В основе построения подобной сети лежит центральный сервер - сетевой контроллер, к которому подключаются связываемые узлы с помощью специального сервиса -
ZeroTier One. Отметим здесь поддержку множества платформ и устройств для подключаемых клиентов.🔹 Кратко опишу общий подход, детальную же инструкцию по установке и настройке можно посмотреть, например, здесь.
Контроллер
▶️ Разработчик
ZeroTier предоставляет ограниченный бесплатный доступ к своему сетевому контроллеру (для экспериментов подойдет, но не более, все-таки сервис то зарубежный).▶️ Разворачиваем контроллер на своем сервере самостоятельно согласно документации и поднимаем веб-интерфейс.
▶️ Приобретаем недорогой
VPS с преднастроенным образом ZeroTier, в состав которого входит и контроллер и веб-интерфейс к нему (нашел такой только у RuVDS, может еще у кого появился за последнее время).Подключение
✅ В веб интерфейсе контроллера создаем новую частную сеть и настраиваем диапазон адресов. Получаем идентификатор сети.
✅ На пользовательские машины устанавливаем сервис
ZeroTier One и присоединяемся к сети по полученному ранее идентификатору.✅ Возвращаемся в веб-интерфейс контроллера, подтверждаем подключенные узлы и назначаем им
ip адреса в нашей виртуальной сети.✅ Проверяем успешность установленного соединения между устройствами.
❗️Узким местом с точки зрения безопасности здесь конечно является контроллер, выступающий в роли центра сертификации организуемых виртуальных сетей. Именно поэтому стоит уделить особое внимание месту размещения, а также защите сервера сетевого контроллера от компрометации.
#vpn #zerotier
ZeroTier
Home
Connect everything, from cloud to IoT, with the next-generation global network solution. Simple, resilient, and secure networking in minutes.
👍2
В продолжение темы про Tmux рассмотрим несколько полезных плагинов.
📌 Для начала установим менеджер плагинов
▫️ В конфигурационный файл
Отметим, что в списке плагинов помимо самого менеджера присутствует плагин tmux-sensible - ряд базовых улучшений на основе опыта работы с
▫️ Подхватим изменения
📌 Плагин для сохранения / восстановления сессий
Как известно, настроенное окружение в
▫️ Добавляем плагин в
▫️ Сохраняем изменения. Для установки и включения плагина выполняем команду
❗️ Как применять
▫️ Подключаемся или создаем новую сессию
▫️ Настраиваем панели, окна, запускаем все требуемые приложения и так далее.
▫️ Комбинацией клавиш
▫️ Уничтожаем сессию или перезагружаемся
▫️ Открываем
▫️ Восстанавливаем сессию комбинацией клавиш
‼️ Интересный момент. В одном из окон при сохранении сессии у меня был открыт
Добавляем в
Таким образом, при восстановлении сессии через
#linux #terminal #tmux
📌 Для начала установим менеджер плагинов
Tmux Plugin Managergit clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
▫️ В конфигурационный файл
tmux (~/.tmux.conf) добавим# список плагинов
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# инициализация Tmux Plugin Manager (оставляем внизу конфигурационного файла)
run '~/.tmux/plugins/tpm/tpm'
Отметим, что в списке плагинов помимо самого менеджера присутствует плагин tmux-sensible - ряд базовых улучшений на основе опыта работы с
tmux - можно использовать на свое усмотрение.▫️ Подхватим изменения
tmux source ~/.tmux.conf
📌 Плагин для сохранения / восстановления сессий
Tmux ResurrectКак известно, настроенное окружение в
Tmux слетает после перезагрузки сервера. Заходишь, заново все перенастраиваешь и так до следующей перезагрузки. Для решения этой проблемы существует плагин Tmux Resurrect, благодаря которому можно сохранить все настроенное окружение Tmux сессий и восстановить в одно сочетаний клавиш.▫️ Добавляем плагин в
~/tmux.confset -g @plugin 'tmux-plugins/tmux-resurrect'
▫️ Сохраняем изменения. Для установки и включения плагина выполняем команду
Ctrl+b I - tmux plugin manager установит плагин и обновит окружение tmux автоматически. Плагин готов к применению.❗️ Как применять
▫️ Подключаемся или создаем новую сессию
tmux new -s session1
▫️ Настраиваем панели, окна, запускаем все требуемые приложения и так далее.
▫️ Комбинацией клавиш
Ctrl + b Ctrl + s сохраняем сессию (в status bar tmux выпадет уведомление об успешном сохранении сессии)▫️ Уничтожаем сессию или перезагружаемся
tmux kill-session -t session1
▫️ Открываем
tmux заново▫️ Восстанавливаем сессию комбинацией клавиш
Ctrl + b Ctrl + r‼️ Интересный момент. В одном из окон при сохранении сессии у меня был открыт
midnight commander. После восстановления окно с ним оказалось пустым, процесс не восстановился, хотя все остальные окна и процессы успешно вернулись в прежнее состояние. Для таких случаев существует возможность задать отдельную конфигурацию для конкретного процесса.Добавляем в
~/tmux.conf следующее правилоset -g @resurrect-processes 'mc'
Таким образом, при восстановлении сессии через
tmux-resurrect mc будет перезапущен (правда вкладки в mc не восстановятся, но уже что-то)#linux #terminal #tmux
Telegram
DeSoft.ru
Для работы в терминале уже долгое время использую мультиплексор Tmux. Ставлю его практически на всех серверах, с которыми приходится сталкиваться. Основная причина - это конечно продолжение работы сессий даже при отключении / разрыве ssh соединения - переподключились…
👍4
Собрал в одну шпаргалку информацию по работе с дисками в
🔹 Информация о подключенных дисках, разделах, точках монтирования
🔹 Создание раздела на диске
В интерактивном режиме выполняем команды
🔹 Форматирование раздела
🔹 Монтирование раздела
🔹 Изменение размера раздела
🔹 Изменение размера раздела LVM
#linux #drive #partitions #volumes #шпаргалка
Linux на примере Ubuntu / Debian. Заметка будет пополняется, так что ссылку на нее на сайте прикладываю.🔹 Информация о подключенных дисках, разделах, точках монтирования
lsblk -f
fdisk -l
parted -l
🔹 Создание раздела на диске
/dev/sdbsudo fdisk /dev/sdb
В интерактивном режиме выполняем команды
fdisk# новый раздел
Command (m for help): n
# тип раздела
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
# номер раздела
Partition number (1-4, default 1): 1
# начало раздела
First sector (2048-31457279, default 2048):
# конец раздела
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31457279, default 31457279):
Created a new partition 1 of type 'Linux' and of size 15 GiB.
# применение изменений
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
🔹 Форматирование раздела
# ext4
sudo mkfs -t ext4 /dev/sdb1
# fat32
sudo mkfs -t vfat /dev/sdb1
# ntfs
sudo mkfs -t ntfs /dev/sdb1
🔹 Монтирование раздела
# создаем точку монтирования
sudo mkdir /mnt/newdisk
# монтируем
sudo mount -t auto /dev/sdb1 /mnt/newdisk
# выдаем права на доступ для пользователей
sudo chown -R :users /mnt/newdisk
sudo chmod -R g+rw /mnt/newdisk
🔹 Изменение размера раздела
# редактор разметки и разделов дисков
parted /dev/sdb
# смотрим таблицу разделов
# изменяем размер раздела 1
resizepart 1
# занимаем всю доступную область памяти
End? [120.1GB]? 100%
🔹 Изменение размера раздела LVM
# проверяем доступное место в группе томов
vgdisplay
# список логических разделов
lvdisplay
# расширяем логический раздел, занимая всю доступную область памяти в группе
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# расширяем фс на расширенную ранее область логического раздела
resize2fs /dev/mapper/ubuntu–vg-ubuntu–lv
#linux #drive #partitions #volumes #шпаргалка
DeSoft.ru
Управление дисками в Linux на примере Ubuntu / Debian
Шпаргалка по работе с дисками, разделами, файловыми системами в Linux. [Пополняется]
👍2
Расскажу про open-source инструмент для управления проектами Planka, который позиционируется как бесплатная альтернатива
Система имеет простой и легкий интерфейс, неперегруженный различными фичами, что можно отнести как к плюсам из-за скорости работы, так и к минусам из-за местами скудной функциональности.
✅ Проект активно развивается и за последний год обзавелся рядом существенных улучшений, которые приблизили его к более зрелым альтернативам. Приведу некоторые из них:
▫️ Уведомления в
▫️ Поддержка
▫️ Также развитие получил проект по API;
▫️ На начальной стадии, но все-таки ведется работа над мобильным приложением;
▫️ Локализация на русский язык в недавних версиях стала значительно приятнее в сравнении с тем, что было еще пол года назад.
❌ Из минусов отмечу:
▫️ Отсутствие шаблонов и повторяющихся задач. Много рутины по выполнению однотипных процессов во время манипуляций с проектами, досками и карточками.
▫️ Не поддерживается какая-либо аналитика (отчеты, диаграммы, сводные данные по трекингу времени и т.д.).
❇️ Демонстрационная версия доступна здесь.
❇️ Если хотите самостоятельно настроить и запустить
❇️ В репозиторий на gitverse выложил пример размещения сервиса за reverse-proxy
В целом,
#management #opensource #selfhosted
Trello.Система имеет простой и легкий интерфейс, неперегруженный различными фичами, что можно отнести как к плюсам из-за скорости работы, так и к минусам из-за местами скудной функциональности.
✅ Проект активно развивается и за последний год обзавелся рядом существенных улучшений, которые приблизили его к более зрелым альтернативам. Приведу некоторые из них:
▫️ Уведомления в
Telegram и Slack;▫️ Поддержка
OpenID Connect;▫️ Также развитие получил проект по API;
▫️ На начальной стадии, но все-таки ведется работа над мобильным приложением;
▫️ Локализация на русский язык в недавних версиях стала значительно приятнее в сравнении с тем, что было еще пол года назад.
❌ Из минусов отмечу:
▫️ Отсутствие шаблонов и повторяющихся задач. Много рутины по выполнению однотипных процессов во время манипуляций с проектами, досками и карточками.
▫️ Не поддерживается какая-либо аналитика (отчеты, диаграммы, сводные данные по трекингу времени и т.д.).
❇️ Демонстрационная версия доступна здесь.
❇️ Если хотите самостоятельно настроить и запустить
Planka на своем сервере, проще всего это сделать с помощью docker. Инструкция из официальной документации.❇️ В репозиторий на gitverse выложил пример размещения сервиса за reverse-proxy
Traefik, благодаря чему можно сразу привязать свой домен, получить сертификат и ходить через https.В целом,
Planka, даже не смотря на ограничения функциональности, подкупает своей простотой и отлично подойдет для небольших команд с базовыми потребностями в управлении задачами.#management #opensource #selfhosted
👍2
Для автоматизации задач сбора информации из каналов, групп, чатов в
Для удобства исходники выложены в репозиторий на gitverse.
📌 Задача
Выгрузить все изображения (документы, аудиофайловы) из открытого Telegram-канала в автоматическом режиме.
📌 Рабочая станция
Виртуальная машина с Debian 12 на борту.
📌 Подготовка
🔹 Для начала получим параметры для доступа к
* Идем в кабинет и авторизовываемся.
* На странице API development tools создаем новое приложение и забираем
🔹 Устанавливаем необходимые для работы пакеты
🔹 Скачиваем демонстрационный проект с
🔹 Создаем виртуальное окружение и подгружаем зависимости
🔹 В скрипте
📌 Использование
🔹 При первом запуске для получения доступа к
В корне создастся файл с расширением
🔹 В качестве примера добавлена обработка трех видов контента - документы, фото и музыка, что соответствует значениям
🔹 Запускаем
#telegram #python #telethon
Telegram, помимо официального API, существуют различного рода и направленности, как платные так и бесплатные, инструменты и библиотеки. В данном цикле заметок рассмотрим примеры работы с популярной Python библиотекой Telethon в контексте извлечения полезных данных из публичных просторов мессенджера.Для удобства исходники выложены в репозиторий на gitverse.
📌 Задача
Выгрузить все изображения (документы, аудиофайловы) из открытого Telegram-канала в автоматическом режиме.
📌 Рабочая станция
Виртуальная машина с Debian 12 на борту.
📌 Подготовка
🔹 Для начала получим параметры для доступа к
API Telegram* Идем в кабинет и авторизовываемся.
* На странице API development tools создаем новое приложение и забираем
App api_id и App api_hash.🔹 Устанавливаем необходимые для работы пакеты
sudo apt install git python3 python3-pip python3-vevn -y
🔹 Скачиваем демонстрационный проект с
gitversegit clone https://gitverse.ru/desoft/telethoner.git
🔹 Создаем виртуальное окружение и подгружаем зависимости
cd telethoner
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
🔹 В скрипте
downloader.py прописываем полученные ранее App api_id и App api_hash в константы API_ID и API_HASH соответственно.📌 Использование
🔹 При первом запуске для получения доступа к
API Telegram необходимо будет войти под своей учетной записью в интерактивном режиме (вводим номер телефона, получаем и заполняем код).Please enter your phone (or bot token): +7...............
Please enter the code you received: 00000
Signed in successfully as <USER>;
В корне создастся файл с расширением
.session, который будет использоваться для автоматической аутентификации при последующих запусках.🔹 В качестве примера добавлена обработка трех видов контента - документы, фото и музыка, что соответствует значениям
document, photo, music параметра content_type.🔹 Запускаем
# скачиваем 10 прикрепленных изображений к последним постам в Telegram-канале Хабра
python3 downloader.py --channel_url=https://t.me/habr_com --content_type=photo --path_data_folder=myfolder --limit=10
#telegram #python #telethon
👍2
На прошлой неделе рассказывал про расширение VS Code Excalidraw для рисования прямо в редакторе. Последовал вопрос от подписчика про наличие
⁉️ Смотрим в репозиторий и сразу отмечаем, что последняя релизная версия
❌ Попытка №1
И.. валимся с ошибками. Что-то про конфликты, отсутствие модулей и т.д. и т.п. Не тратим время и пробуем сразу актуальную
✅ Попытка №2
Контейнер успешно завелся. За
‼️ Впечатления
✖️ Редактор ничем не отличается от того, что предлагает встроенное в VS Code расширение.
✖️ Облачное хранилище / база данных отсутствуют (все хранится в localStorage браузера).
✖️ Проекты, рабочие пространства не поддерживаются.
✖️ Управление сценами отсутствует.
✖️ Совместная работа и публичные ссылки не поддерживаются.
Сказанного выше более чем достаточно, чтобы сделать вывод о том, что текущая self-hosted версия еще довольно сырая. Судя по всему, упор сделали на версию
#tools #opensource #selfhosted
self-hosted версии данного инструмента и поддерживаемой функциональности. Пробуем.⁉️ Смотрим в репозиторий и сразу отмечаем, что последняя релизная версия
v0.17.3 от 09.02.2024, хотя работа активно ведется, судя по частым commits и большому числу свежих pull requests.❌ Попытка №1
# клонируем репозиторий проекта
git clone https://github.com/excalidraw/excalidraw.git
# переходим на релизную версию по тэгу
git checkout tags/v0.17.3
# запускаемся
docker compose up -d
И.. валимся с ошибками. Что-то про конфликты, отсутствие модулей и т.д. и т.п. Не тратим время и пробуем сразу актуальную
dev версию.✅ Попытка №2
git checkout master
docker compose up -d
Контейнер успешно завелся. За
nginx на 3000 порту получаем долгожданный доступ к виртуальной доске.‼️ Впечатления
✖️ Редактор ничем не отличается от того, что предлагает встроенное в VS Code расширение.
✖️ Облачное хранилище / база данных отсутствуют (все хранится в localStorage браузера).
✖️ Проекты, рабочие пространства не поддерживаются.
✖️ Управление сценами отсутствует.
✖️ Совместная работа и публичные ссылки не поддерживаются.
Сказанного выше более чем достаточно, чтобы сделать вывод о том, что текущая self-hosted версия еще довольно сырая. Судя по всему, упор сделали на версию
Excalidraw+ - монетизируемое облачное решение с расширенной функциональностью. У проекта большие планы по развитию, согласно которым не забыли и про self-hosted - заявляется релиз Excalidraw+ для размещения на собственным ресурсах. Обязательно посмотрим.#tools #opensource #selfhosted
GitHub
GitHub - excalidraw/excalidraw: Virtual whiteboard for sketching hand-drawn like diagrams
Virtual whiteboard for sketching hand-drawn like diagrams - excalidraw/excalidraw
👍2🔥2
Дополню начатую ранее коллекцию плагинов для
📌1️⃣ Когда работаешь с большим числом окон и панелей, запускаешь процессы, выполняешь какой-то набор команд, часто возникает необходимость вернуться и просмотреть весь вывод в консоль или просто запомнить историю всех проделанных манипуляций. Тут нам поможет плагин
Основные возможности
▫️ Сохранение всего вывода в консоль в файл от момента начала логирования до его завершения соответствующими командами.
▫️ Текстовый скриншот экрана, т.е. сохранение в файл текущего вывода на экран консоли.
▫️ Запись истории всего происходящего в конкретной панели с момента ее создания.
Установка
В
Сохраняем файл, подключаемся к
Использование
🔹 Запустить / остановить запись логов для текущей панели:
▫️ Формат имени файла:
▫️ Каталог сохранения файла лога:
❗️ Если вы используете терминал с цветовой подсветкой синтаксиса, то полученные логи могут содержать
🔹 Сделать текстовый скриншот экрана:
▫️ Формат имени файла:
▫️ Каталог сохранения файла лога:
🔹 Записать в лог всю историю текущей панели с момента ее создания:
▫️ Формат имени файла:
▫️ Каталог сохранения файла лога:
Естественно, больше команд, чем вмещает в себя буфер
🔹 Очистить историю активной панели:
📌2️⃣ Для представления текущего каталога в виде древовидного списка в отдельной боковой панели существует плагин
Установка
В
Использование
▫️
▫️
#linux #terminal #tmux
Tmux еще несколькими полезными примерами.📌1️⃣ Когда работаешь с большим числом окон и панелей, запускаешь процессы, выполняешь какой-то набор команд, часто возникает необходимость вернуться и просмотреть весь вывод в консоль или просто запомнить историю всех проделанных манипуляций. Тут нам поможет плагин
Tmux Logging.Основные возможности
▫️ Сохранение всего вывода в консоль в файл от момента начала логирования до его завершения соответствующими командами.
▫️ Текстовый скриншот экрана, т.е. сохранение в файл текущего вывода на экран консоли.
▫️ Запись истории всего происходящего в конкретной панели с момента ее создания.
Установка
В
~/.tmux.conf прописываем плагин:set -g @plugin 'tmux-plugins/tmux-logging'
Сохраняем файл, подключаемся к
tmux сессии, если еще не в ней, и устанавливаем плагин комбинацией Ctrl + b I (здесь используется Tmux Plugin Manager для установки плагинов, см. предыдущую заметку).Использование
🔹 Запустить / остановить запись логов для текущей панели:
Ctrl + b Shift + p▫️ Формат имени файла:
tmux-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log▫️ Каталог сохранения файла лога:
$HOME❗️ Если вы используете терминал с цветовой подсветкой синтаксиса, то полученные логи могут содержать
ANSI символы, используемые как раз для цветового сопровождения текста, однако их наличие замусоривает вывод. Чтобы отфильтровать эти символы при записи логов, достаточно установить специализированный пакет ansifilter.sudo apt install ansifilter -y
🔹 Сделать текстовый скриншот экрана:
Ctrl + b Alt + p▫️ Формат имени файла:
tmux-screen-capture-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log▫️ Каталог сохранения файла лога:
$HOME🔹 Записать в лог всю историю текущей панели с момента ее создания:
Ctrl + b Alt + Shift + p▫️ Формат имени файла:
tmux-history-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log▫️ Каталог сохранения файла лога:
$HOMEЕстественно, больше команд, чем вмещает в себя буфер
tmux записать в историю не получится, но можно заранее расширить размер этого буфера в ~.tmux.conf следующим правилом:set -g history-limit 50000
🔹 Очистить историю активной панели:
Ctrl + b Alt + c📌2️⃣ Для представления текущего каталога в виде древовидного списка в отдельной боковой панели существует плагин
Tmux Sidebar (аналог утилиты tree, только вывод происходит в выделенную область, а не прямо в консоль).Установка
В
~/.tmux.conf прописываем плагин и устанавливаем:set -g @plugin 'tmux-plugins/tmux-sidebar'
Использование
▫️
Ctrl + b Tab - открывает боковую панель с деревом каталогов и файлов текущей директории.▫️
Ctrl + b Backspace - также открывает боковую панель, но еще и переносит фокус на нее.#linux #terminal #tmux
Telegram
DeSoft.ru
В продолжение темы про Tmux рассмотрим несколько полезных плагинов.
📌 Для начала установим менеджер плагинов Tmux Plugin Manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
▫️ В конфигурационный файл tmux (~/.tmux.conf) добавим
#…
📌 Для начала установим менеджер плагинов Tmux Plugin Manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
▫️ В конфигурационный файл tmux (~/.tmux.conf) добавим
#…
🔥2
Очередная шпаргалка по работе с файловыми системами в
Файл
🔍 Структура записи /etc/fstab
Каждая запись имеет следующие поля (разделяются пробелом или табуляцией):
📌 Поле
Устройство или файловая система для монтирования. Можно использовать
Примеры:
📌 Поле
Точка монтирования. Каталог, в который будет монтироваться файловая система.
📌 Поле
Тип файловой системы, которую нужно монтировать.
Примеры:
- Локальные диски:
- Сетевые файловые системы:
- Съёмные носители:
- Виртуальные файловые системы:
- Раздел подкачки:
- Автоматическое определение монтируемой файловой системы:
📌 Поле
Параметры монтирования
📌 Поле
Резервное копирование. Определяет, нужно ли использовать утилиту
📌 Поле
Порядок проверки файловой системы утилитой
✏️ Примеры монтирования
🔷 Монтирование физических / виртуальных устройств и разделов
🔷 Монтирование
Установка клиента
Монтирование:
🔷 Монтирование
Установка клиента
Монтирование:
Монтирование с использованием учетных данных из файла:
где
✏️ Полезные команды
#linux #mount #fstab #шпаргалка
Linux. На этот раз зафиксирую вопрос использования конфигурационного файла /etc/fstab для монтирования устройств, разделов, сетевых ресурсов.Файл
/etc/fstab содержит записи о всех файловых системах, которые должны быть смонтированы при загрузке системы. Каждая строка в файле описывает устройство, точку монтирования, тип файловой системы и параметры монтирования.🔍 Структура записи /etc/fstab
Каждая запись имеет следующие поля (разделяются пробелом или табуляцией):
<file system> <mount point> <type> <options> <dump> <pass>
📌 Поле
<file system>Устройство или файловая система для монтирования. Можно использовать
путь к устройству, UUID или LABEL.Примеры:
/dev/sda1, /dev/nvme0n1p1, UUID=1234-5678, LABEL=MyDrive, //192.168.1.135/share.📌 Поле
<mount point>Точка монтирования. Каталог, в который будет монтироваться файловая система.
📌 Поле
<type>Тип файловой системы, которую нужно монтировать.
Примеры:
- Локальные диски:
ext4, ext3, xfs, btrfs- Сетевые файловые системы:
nfs, cifs- Съёмные носители:
vfat, ntfs, exfat- Виртуальные файловые системы:
tmpfs, proc, sysfs- Раздел подкачки:
swap- Автоматическое определение монтируемой файловой системы:
auto📌 Поле
<options>Параметры монтирования
# параметры по умолчанию (`rw, suid, dev, exec, auto, nouser, async`)
defaults
# файловая система монтируется при загрузке автоматически
auto
# файловая система может быть смонтирована только вручную
noauto
# разрешить исполнение бинарных файлов
exec
# запретить исполнение бинарных файлов
noexec
# разрешить монтирование всем пользователям
users
# только суперпользователь может монтировать файловую систему
nouser
# монтировать в режиме только для чтения
ro
# монтировать с правами на запись
rw
# все операции ввода/вывода должны выполняться синхронно
sync
# все операции ввода/вывода должны выполняться асинхронно
async
# отключить обновление времени доступа к файлам
noatime
# отключить обновление времени доступа для каталогов
nodiratime
# запрет создания на монтируемой файловой системе файлов устройств (`/dev`)
nodev
# устанавливает владельца и группу
uid/gid
# игнорировать `suid` и `sgid` биты
nosuid
# для доступа к сетевому ресурсу
username=имя,password=пароль
# ограничение размера памяти для `tmpfs`
size=500M
📌 Поле
<dump>Резервное копирование. Определяет, нужно ли использовать утилиту
dump для резервного копирования файловой системы. 0 — нет, 1 — да.📌 Поле
<pass>Порядок проверки файловой системы утилитой
fsck при загрузке системы. 0 — не проверять, 1 — используется для корневой файловой системы / (только одна запись должна иметь 1), 2 — для остальных файловых систем, которые проверяются после корневой.✏️ Примеры монтирования
🔷 Монтирование физических / виртуальных устройств и разделов
UUID=1234-5678 / ext4 defaults 1 1
/dev/sda2 /home xfs defaults,noatime 0 2
/dev/sda3 none swap sw 0 0
/dev/sdb1 /mnt/usb vfat uid=1000,gid=1000 0 0
tmpfs /tmp tmpfs size=512M 0 0
🔷 Монтирование
NFSУстановка клиента
nfs:sudo apt install nfs-common
Монтирование:
192.168.1.65:/export/nfs /mnt/nfs nfs defaults 0 0
🔷 Монтирование
CIFSУстановка клиента
cifs:sudo apt install cifs-utils
Монтирование:
//192.168.1.135/share /mnt/share cifs username=user,password=pass,uid=1000,gid=1000 0 0
Монтирование с использованием учетных данных из файла:
//192.168.1.135/share /mnt/share cifs credentials=/etc/smbcredentials,uid=1000,gid=1000 0 0
где
/etc/smbcredentials содержитusername=myuser
password=mypassword
✏️ Полезные команды
# после изменения fstab монтируем устройства без перезагрузки
mount -a
# проверка корректности fstab / монтирование с выводом расширенной информации
mount -fav
# информация о блочных устройствах
lsblk
# информация о типах фс и метках устройств
blkid
# информация о смонтированных фс и используемом дисковом пространстве
df - h
#linux #mount #fstab #шпаргалка
DeSoft.ru
Автоматическое монтирование файловых систем в Linux с помощью /etc/fstab
Шпаргалка по использованию /etc/fstab для автоматического монтирования файловых систем.
👍4
Дополняю созданный ранее репозиторий со скриптами для сбора информации из
✏️ На этот раз пробуем выгружать и сохранять списки участников публичных каналов, групп, чатов, где состоит пользователь, учетные данные которого используются для работы с
Приведу здесь фрагменты исходного кода. Полная версия демонстрационного скрипта в репозитории.
❗️ Если у пользователя недостаточно прав на получение информации об участниках какого-либо канала или группы, то будет выброшен
✏️ В предыдущей заметке рассматривал примеры поиска сообщений с определенным содержимым (фото, документы, аудио). В данном варианте представлен сбор информации не только о публичном канале и сообщениях в нем, но и о комментариях к каждому посту.
Также привожу фрагменты исходного кода. Полная версия в репозитории.
#telegram #python #telethon
Telegram еще несколькими примерами.✏️ На этот раз пробуем выгружать и сохранять списки участников публичных каналов, групп, чатов, где состоит пользователь, учетные данные которого используются для работы с
Telegram API.Приведу здесь фрагменты исходного кода. Полная версия демонстрационного скрипта в репозитории.
# получаем список каналов, групп, чатов пользователя
result = await client(GetDialogsRequest(
offset_date=None,
offset_id=0,
offset_peer=InputPeerEmpty(),
limit=100,
hash = 0
))
print(result.chats)
# выгружаем список участников конкретного чата
users = await client.get_participants(chat)
print(users)
❗️ Если у пользователя недостаточно прав на получение информации об участниках какого-либо канала или группы, то будет выброшен
Exception с соответствующей информацией.✏️ В предыдущей заметке рассматривал примеры поиска сообщений с определенным содержимым (фото, документы, аудио). В данном варианте представлен сбор информации не только о публичном канале и сообщениях в нем, но и о комментариях к каждому посту.
Также привожу фрагменты исходного кода. Полная версия в репозитории.
# информация о канале по его адресу или id
channel = await client.get_entity(url)
print(channel)
# выгрузка последних 10 постов канала
async for message in client.iter_messages(channel, limit=10):
# выгрузка всех комментариев к конкретному посту
async for comment in client.iter_messages(channel, reply_to=message.id):
print(comment.text)
#telegram #python #telethon
Telegram
DeSoft.ru
Для автоматизации задач сбора информации из каналов, групп, чатов в Telegram, помимо официального API, существуют различного рода и направленности, как платные так и бесплатные, инструменты и библиотеки. В данном цикле заметок рассмотрим примеры работы с…
🔥3👍1
AFFiNE - opensource платформа для заметок и управления проектами, которая выступает в роли альтернативы популярным сервисам
🔎 Установка
Забираем
⚒️ Настройка
🔹 Сервер развернут. По адресу
🔸 Пора переходить в рабочее пространство, но куда, как? Ссылка? - нет, view на каком-то другом порту? - нет, снова прошелся по админке, поискал в документации - никакой информации.
Заметил наличие клиентских приложений на сайте под различные платформы. Видимо, можно с их помощью подключиться к развернутому серверу и начать работу. Установил,
🔹 Вернулся в развернутую ранее админку. Решил перезайти, мало ли какие-то моменты упустил. Прохожу по первоначальной ссылке
🔹 В рабочем пространстве веб приложения аналогичные десктопному способы авторизации, однако тут уже не высылалось никакое подтверждение на почту, а сразу было предложено ввести пароль. Вводим учетные данные, которые регистрировали при первом входе в админку - синхронизация с собственным сервером успешно настроена.
🚀 Работа
➕ С точки зрения функциональности вопросов по минимуму. Простая и удобная комбинация “лучших” практик использования целого набора инструментов, эдакий швейцарский нож. Здесь тебе kanban, таблицы, текстовые заметки, markdown, календарь, виртуальная доска, внутренние ссылки и тэги, совместная работа, локальное и облачное хранилища и многое другое. Отметим, что это всего лишь
➖
Также обнаружил ряд ограничений - максимум 3 подключенных в рабочее пространство пользователя, 10 гб - объем дискового пространства. Спишем недочеты на молодость проекта. Работа активно ведется.
📝 Инструмент однозначно стоит взять на заметку всем, кто ищет альтернативу с заявленными возможностями, лаконично совмещенными в одном приложении.
#management #tools #opensource #selfhosted
Notion и Miro. Для тех, кто знаком с этими инструментами, переход на новое рабочее пространство будет максимально плавным. Имеется self-hosted версия, поэтому смотрим, проверяем.🔎 Установка
Забираем
compose.yml из репозитория проекта, собираем и запускаем:wget https://raw.githubusercontent.com/toeverything/AFFiNE/refs/heads/canary/.github/deployment/self-host/compose.yaml
docker compose up -d
⚒️ Настройка
🔹 Сервер развернут. По адресу
localhost:3100 меня сразу перебросило в панель администратора. Заходим и создаем пользователя. Набор настроек небольшой и в основном касается параметров доступа к серверу. Останавливаться особо тут не на чем.🔸 Пора переходить в рабочее пространство, но куда, как? Ссылка? - нет, view на каком-то другом порту? - нет, снова прошелся по админке, поискал в документации - никакой информации.
Заметил наличие клиентских приложений на сайте под различные платформы. Видимо, можно с их помощью подключиться к развернутому серверу и начать работу. Установил,
Sign up / Sign in окошко отыскал, вводим почту и.. нет, вылетает ссылка на почту для подтверждения регистрации в облачном сервисе разработчиков. Иных вариантов не предлагается.🔹 Вернулся в развернутую ранее админку. Решил перезайти, мало ли какие-то моменты упустил. Прохожу по первоначальной ссылке
localhost:3100 и меня перебрасывает уже не в админку, а в рабочее пространство. Вот оно как оказалось.🔹 В рабочем пространстве веб приложения аналогичные десктопному способы авторизации, однако тут уже не высылалось никакое подтверждение на почту, а сразу было предложено ввести пароль. Вводим учетные данные, которые регистрировали при первом входе в админку - синхронизация с собственным сервером успешно настроена.
🚀 Работа
➕ С точки зрения функциональности вопросов по минимуму. Простая и удобная комбинация “лучших” практик использования целого набора инструментов, эдакий швейцарский нож. Здесь тебе kanban, таблицы, текстовые заметки, markdown, календарь, виртуальная доска, внутренние ссылки и тэги, совместная работа, локальное и облачное хранилища и многое другое. Отметим, что это всего лишь
версия 0.18.➖
Self-hosted версия, как и клиенты, еще сыроваты. Имеются трудности как с синхронизацией, так и с подключением нескольких пользователей (иногда требуется ручное переподключение к серверу синхронизации, а пользователи просто не могут авторизоваться без объяснения причин).Также обнаружил ряд ограничений - максимум 3 подключенных в рабочее пространство пользователя, 10 гб - объем дискового пространства. Спишем недочеты на молодость проекта. Работа активно ведется.
📝 Инструмент однозначно стоит взять на заметку всем, кто ищет альтернативу с заявленными возможностями, лаконично совмещенными в одном приложении.
#management #tools #opensource #selfhosted
👍4