RECURA | Программирование & IT
14.6K subscribers
1.52K photos
330 videos
1.57K links
Практические советы, утилиты и обучающие материалы для разработчиков, DevOps-инженеров и системных администраторов. Всё о разработке, Linux и информационной безопасности.

Реклама: @tarabuk1n

РКН: clck.ru/3RnyGw

Биржа: https://telega.in/c/recura_tech
Download Telegram
🧑‍💻 Go может сам находить зависшие дочерние процессы и корректно завершать их

👁 При автоматизации через os/exec обычного cmd.Process.Kill() иногда недостаточно: если запущенная команда породила дочерние процессы, они могут продолжить работу после завершения родителя.

📝 В Unix-системах это можно решить через отдельную process group и завершать её целиком

cmd := exec.Command("bash", "-c", "long_task & wait")

cmd.SysProcAttr = &syscall.SysProcAttr{
Setpgid: true,
}

if err := cmd.Start(); err != nil {
log.Fatal(err)
}

time.Sleep(5 * time.Second)

// Завершаем всю process group
if err := syscall.Kill(-cmd.Process.Pid, syscall.SIGTERM); err != nil {
log.Println(err)
}


📌 Как это работает:

Setpgid: true помещает процесс в отдельную process group.
• Отрицательный PID в syscall.Kill означает отправку сигнала всей группе процессов.
• В результате при остановке автоматизации можно гарантированно завершить не только основной процесс, но и созданные им дочерние процессы.

❗️ Такой приём особенно полезен для CI/CD-агентов, job-runner'ов, автоматических deploy-скриптов и сервисов, которые запускают внешние команды. Он предотвращает ситуацию, когда задача уже считается завершённой, а её дочерние процессы продолжают работать в фоне.

tags: #go #автоматизация #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥2👨‍💻1
🔗 airgorah

👁 Инструмент для аудита безопасности Wi-Fi-сетей, который анализирует беспроводной трафик и обнаруживает подключённые устройства.

Он позволяет проводить проверку сетей с помощью набора инструментов Aircrack-ng, поддерживает захват трафика и анализ защищённости точек доступа. Инструмент использует GTK4 и работает в Linux без постоянного запуска графического интерфейса от root.

❗️ Подойдёт специалистам по информационной безопасности для тестирования собственных Wi-Fi-сетей и поиска уязвимостей.

📱 GitHub

tags: #утилиты #linux #безопасность

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
32👍2👨‍💻1
🤖 magnitude

👁 Автономный ИИ-агент с открытым исходным кодом и локальными моделями, который работает полностью на вашем компьютере.

Все данные и модели остаются локально, а функция «Модели для каждой машины» подбирает оптимальные модели под доступное оборудование. Агент работает сразу после установки без Ollama и отдельного сервера моделей, поддерживает работу с Excel, PDF, Chrome и другими приложениями.

❗️ Подойдёт разработчикам и пользователям, которым нужен приватный ИИ-агент без API-ключей, подписок и оплаты за токены.

Проверить в деле

tags: #утилиты #ии #безопасность

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42👍21
🐳 Docker от основ до продвинутого использования

👁 Видеокурс познакомит с Docker — от принципов контейнеризации и базовых команд до CI/CD, сетей, хранилищ и оптимизации образов.

Вы научитесь создавать Dockerfile, собирать и запускать образы, работать с Docker Compose, Registry и GitLab CI/CD. Отдельно разберёте внутреннее устройство контейнеров, namespaces, cgroups, capabilities, сети, volumes, multistage-сборки и особенности работы с приложениями на Ruby, PHP, Python, Go и Java.

❗️ Подойдёт разработчикам и DevOps-инженерам, которые хотят системно освоить Docker и применять его в реальных проектах.

Изучаем по ссылке

tags: #обучение #docker

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
32👍2🔥1
👨‍💻 Bash может сам гарантировать, что одна и та же задача не запустится дважды

👁 Если скрипт запускается через cron, CI или несколько параллельных job, обычной проверки вроде pgrep недостаточно: между проверкой и запуском остаётся race condition. flock позволяет синхронизировать процессы через файловую блокировку, причём ядро само снимет её после завершения процесса.

📝 Запрещаем параллельный запуск одного скрипта

Самый простой вариант — заблокировать специальный файл через файловый дескриптор. Второй экземпляр сразу завершится, если первый ещё работает.

#!/usr/bin/env bash

exec 9>/run/myapp-sync.lock

if ! flock -n 9; then
echo "Задача уже выполняется" >&2
exit 1
fi

echo "Начинаем синхронизацию..."
sleep 30
echo "Синхронизация завершена"


📝 Делаем отдельные блокировки для разных задач

Блокировка может быть не общей для всего скрипта. Например, несколько задач разрешено выполнять одновременно, но один и тот же сервер нельзя обрабатывать параллельно. Теперь deploy server-01 и deploy server-02 могут работать одновременно, а два процесса для server-01 не пересекутся.

#!/usr/bin/env bash

host="$1"
lock="/run/myapp-${host}.lock"

exec 9>"$lock"

if ! flock -n 9; then
echo "$host уже обрабатывается" >&2
exit 2
fi

echo "Deploy: $host"

ssh "$host" "deploy.sh"

echo "Done: $host"


📝 Ждём освобождения блокировки вместо ошибки

flock умеет не только мгновенно отказываться от занятого ресурса. Можно заставить процесс ждать определённое время, что удобно для очередей фоновых задач.

#!/usr/bin/env bash

exec 9>/run/report.lock

if ! flock -w 60 9; then
echo "Не удалось получить блокировку за 60 секунд" >&2
exit 1
fi

echo "Получили lock, выполняем задачу"
./generate-report.sh


❗️ flock даёт Bash нормальную межпроцессную синхронизацию без ps, pgrep, PID-файлов и ручной обработки «зависших» lock-файлов. Особенно полезно для cron-задач, deploy-скриптов, миграций, backup и любых job, которые не должны выполняться одновременно.

tags: #bash #автоматизация #devops

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍6🔥2👨‍💻1
🔒 Kudu

👁 Бесплатная программа с открытым исходным кодом для очистки системы и проверки безопасности на Windows, macOS и Linux.

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

❗️ Подойдёт пользователям Windows, macOS и Linux, которым нужен прозрачный инструмент для очистки и обслуживания системы.

📱 GitHub

tags: #утилиты #безопасность #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥6👍42
harnessrouter

👁 Self-hosted инфраструктура для запуска Codex, Claude Code, Hermes и других ИИ-агентов через единый API и Docker-контейнер.

Он реализует Unified Harness Protocol и объединяет разные агентские среды под единым интерфейсом с поддержкой сессий, потоковой передачи, файлов, артефактов и отмены задач. Можно переключаться между разными harness и моделями, сохраняя собственную инфраструктуру и API-ключи.

❗️ Подойдёт разработчикам, которые создают продукты на базе ИИ-агентов и хотят работать с разными агентскими средами через единый протокол.

Проверить в деле

tags: #утилиты #ии #docker

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍53🔥1
👨‍💻 Оптимизация Go на уровне BigTech

👁 Курс погружает в низкоуровневую оптимизацию Go и фундаментальные принципы Computer Science, необходимые для работы с высокопроизводительными системами.

Вы разберётесь, как код проходит путь от синтаксиса до машинных инструкций, изучите устройство ОС, calling convention, syscall и ассемблер в Go. Также освоите unsafe, runtime, reflect, debug и профилирование CPU, памяти и блокировок для поиска узких мест.

❗️ Подойдёт Go-разработчикам, которые хотят глубже понимать работу языка и научиться оптимизировать высоконагруженный код.

Изучаем по ссылке

tags:
#обучение #go #оптимизация

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥3👍2👨‍💻1
🛞 Kubernetes может запускать Pod только на узле с нужным локальным условием

👁 Обычно планировщик Kubernetes смотрит на CPU, память, taint'ы и affinity. Но через nodeAffinity можно привязать Pod к собственным меткам узлов и использовать их как механизм автоматического размещения: например, отправлять тяжёлые задачи только на машины с NVMe, определённым типом сети или специальным системным ПО.

📝 Размечаем узлы под реальные возможности

Вместо жёсткой привязки к имени конкретного сервера добавляем метку, описывающую его возможность. Если узлы изменятся, Pod продолжит работать без изменения манифеста.

kubectl label node worker-01 storage.nvme=true
kubectl label node worker-02 storage.nvme=true
kubectl label node worker-03 storage.nvme=false


📝 Требуем нужную характеристику при планировании

requiredDuringSchedulingIgnoredDuringExecution превращает метку в обязательное условие планирования. Kubernetes не разместит Pod на узле, который ему не соответствует.

apiVersion: v1
kind: Pod
metadata:
name: fast-worker
spec:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: storage.nvme
operator: In
values:
- "true"

containers:
- name: worker
image: my-worker:latest


📝 Добавляем несколько вариантов размещения

Можно описать несколько допустимых условий. Например, Pod может работать либо на узле с NVMe, либо на узле с локальным SSD. Это позволяет сохранить гибкость кластера, не привязывая workload к конкретному железу.

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: storage.nvme
operator: In
values: ["true"]

- matchExpressions:
- key: storage.local
operator: In
values: ["true"]


❗️ Метки узлов можно использовать как слой абстракции над инфраструктурой: Kubernetes работает не с конкретными серверами, а с их возможностями. Это особенно полезно для кластеров с разным железом, GPU, быстрым локальным хранилищем, особой сетью и специализированными worker-узлами.

tags: #k8s #devops #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥21👨‍💻1
🔒 hetty

👁 Открытый HTTP-инструментарий для исследований в области информационной безопасности и анализа веб-трафика.

Он работает как MITM-прокси с журналами и расширенным поиском, позволяет перехватывать, редактировать и повторно отправлять HTTP-запросы. Встроенный HTTP-клиент, поддержка областей и проектное хранение данных упрощают ручное тестирование и анализ запросов.

❗️ Подойдёт специалистам по информационной безопасности, пентестерам и исследователям веб-приложений.

📱 GitHub

tags: #утилиты #безопасность #сети

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍21🔥1
🤖 CyberStrikeAI

👁 Платформа для автоматизации авторизованных операций по кибербезопасности с помощью ИИ-агентов, Eino и базы знаний RAG.

Она преобразует запросы на естественном языке в управляемые и проверяемые действия, объединяя агентов, MCP-инструменты, визуальные рабочие процессы и аудит операций. Платформа поддерживает роли и права доступа, ручное подтверждение действий, журналирование и управление уязвимостями.

❗️ Подойдёт специалистам по информационной безопасности для автоматизации и контроля авторизованных задач тестирования.

Изучаем по ссылке

tags: #утилиты #ии #безопасность

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
43🔥3👍1
🐧 Разработка и программирование ядра Linux

👁 Курс посвящён разработке модулей ядра Linux и работе с ключевыми механизмами операционной системы на низком уровне.

Вы научитесь работать с алгоритмами и структурами данных, синхронизировать процессы и потоки, обрабатывать прерывания и управлять памятью ядра. Полученные навыки помогут участвовать в проектах, связанных с разработкой и развитием Linux.

❗️ Подойдёт разработчикам, которые хотят углубиться в устройство Linux и низкоуровневое программирование.

Изучаем по ссылке

tags: #обучение #linux #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥2👨‍💻1
🐍 Python может превратить SQLite в надёжную локальную очередь для автоматизации

👁 Если автоматизатор должен переживать перезапуски, падения и временную недоступность внешнего сервиса, хранить задачи только в памяти рискованно.

📝 SQLite позволяет сделать небольшую персистентную очередь без Redis или отдельного брокера

import sqlite3
import time

db = sqlite3.connect("jobs.db", isolation_level=None)

db.execute("""
CREATE TABLE IF NOT EXISTS jobs (
id INTEGER PRIMARY KEY,
payload TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
created_at REAL NOT NULL
)
""")

db.execute("""
INSERT INTO jobs (payload, created_at)
VALUES (?, ?)
""", ("deploy server-01", time.time()))

while True:
with db:
job = db.execute("""
SELECT id, payload
FROM jobs
WHERE status = 'pending'
ORDER BY id
LIMIT 1
""").fetchone()

if not job:
break

db.execute(
"UPDATE jobs SET status = 'running' WHERE id = ?",
(job[0],)
)

try:
print(f"Выполняем: {job[1]}")
# здесь выполняется реальная задача
time.sleep(2)

db.execute(
"UPDATE jobs SET status = 'done' WHERE id = ?",
(job[0],)
)
except Exception:
db.execute(
"UPDATE jobs SET status = 'failed' WHERE id = ?",
(job[0],)
)


📌 Как это работает:

• Задача сначала записывается на диск, поэтому перезапуск процесса не уничтожает очередь.
• Состояния pending, running, done и failed позволяют восстановить состояние автоматизации после сбоя.
• SQLite поддерживает транзакции, блокировки и WAL, поэтому для небольших локальных job-очередей отдельный брокер сообщений может быть избыточен.

❗️ Такой подход особенно полезен для CLI-автоматизации, локальных агентов, deploy-утилит и фоновых обработчиков, которым нужна надёжная очередь без дополнительной инфраструктуры.

tags: #python #автоматизация #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥543👨‍💻2👍1
🤖 Podroid

👁 Инструмент для запуска полноценного Linux-окружения и контейнеров на Android-смартфонах без root-доступа.

В комплекте есть Podman, Docker и LXC, полноценная виртуальная машина Alpine Linux через QEMU и аппаратное ускорение на совместимых устройствах. Также доступны графический X11-рабочий стол, встроенный терминал, SSH, проброс портов и USB, общий доступ к папке загрузок и резервное копирование контейнеров.

❗️ Подойдёт разработчикам и энтузиастам, которые хотят использовать Android-смартфон как Linux-окружение для разработки и экспериментов.

📱 GitHub

tags: #утилиты #android #linux

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍421
🤖 My-Brain-Is-Full-Crew

👁 Набор из 8 ИИ-агентов и 14 навыков для автоматизации работы с хранилищем Obsidian.

Агенты помогают структурировать заметки, искать и связывать информацию, обрабатывать записи встреч, управлять почтой и календарём. Диспетчер автоматически выбирает подходящего агента или навык под задачу, а собственных агентов можно создавать под конкретные рабочие процессы.

❗️ Подойдёт пользователям Obsidian, которые хотят автоматизировать организацию знаний и повседневных задач с помощью ИИ.

Изучаем по ссылке

tags: #утилиты #ии #obsidian

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍42🔥1
👨‍💻 SQL от основ до продвинутых запросов

👁 Курс охватывает SQL на всём пути — от базовых запросов и работы с таблицами до оконных функций, CTE и продвинутых возможностей PostgreSQL и MySQL.

Вы освоите SELECT, фильтрацию, группировку, JOIN, подзапросы, DDL и DML, а также функции для работы с текстом, числами и датами. Отдельно разберёте оконные функции, представления, триггеры, нормализацию и применение SQL на бизнес-кейсах и тестовых заданиях.

❗️ Подойдёт начинающим разработчикам и аналитикам, а также тем, кто хочет систематизировать знания SQL.

Изучаем по ссылке

tags: #обучение #sql

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥2👍1👨‍💻1
🐧 Linux может безопасно открывать файлы внутри каталога без классических проверок путей

👁 Обычная проверка realpath() → сравнение префикса → open() имеет race condition: между проверкой и открытием путь может измениться через symlink. Системный вызов openat2() позволяет передать ядру правила разрешения пути и выполнить проверку непосредственно во время открытия.

📝 Запрещаем выход из рабочего каталога

RESOLVE_BENEATH не позволяет разрешённому пути выбраться выше переданного directory FD через ../. Это полезно для архиваторов, файловых API, sandbox'ов и серверов, которые принимают путь от пользователя.

#define _GNU_SOURCE
#include <linux/openat2.h>
#include <sys/syscall.h>
#include <fcntl.h>
#include <unistd.h>

struct open_how how = {
.flags = O_RDONLY,
.resolve = RESOLVE_BENEATH,
};

int root = open("/srv/data", O_PATH | O_DIRECTORY);

int fd = syscall(
SYS_openat2,
root,
"reports/2026/result.json",
&how,
sizeof(how)
);


📝 Полностью запрещаем symlink

RESOLVE_NO_SYMLINKS заставляет ядро отклонять symlink на любом участке пути. Это намного надёжнее ручной проверки отдельных компонентов пути.

struct open_how how = {
.flags = O_RDONLY,
.resolve = RESOLVE_BENEATH | RESOLVE_NO_SYMLINKS,
};

int fd = syscall(
SYS_openat2,
root,
"uploads/user/file.txt",
&how,
sizeof(how)
);


📝 Фиксируем корень файловой системы для операции

С RESOLVE_IN_ROOT переданный directory FD становится виртуальным корнем именно для этого открытия. Даже абсолютный путь внутри операции интерпретируется относительно него.

struct open_how how = {
.flags = O_RDONLY,
.resolve = RESOLVE_IN_ROOT | RESOLVE_NO_SYMLINKS,
};

int root = open("/srv/app", O_PATH | O_DIRECTORY);

int fd = syscall(
SYS_openat2,
root,
"/config/settings.json",
&how,
sizeof(how)
);


❗️ openat2() переносит контроль безопасности путей из пользовательского кода прямо в ядро. Для файловых сервисов и sandbox'ов это позволяет избавиться от хрупких комбинаций realpath(), проверок ../ и борьбы с symlink race.

tags: #linux #безопасность #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥3👨‍💻1
🍑 zabbix-network-topology

👁 Интерфейсный модуль для Zabbix 7.0 LTS и 7.4, который превращает данные мониторинга в интерактивную карту сети.

Модуль показывает связи между хостами, проблемы, трафик, состояние работоспособности и географические данные, используя обнаруженные через LLDP/CDP соединения. Всё работает непосредственно внутри Zabbix без дополнительного сервера, а одни и те же данные можно использовать для карт, графиков, таблиц и информационных панелей.

❗️ Подойдёт DevOps-инженерам и администраторам Zabbix, которым нужна визуализация топологии и взаимосвязей сетевой инфраструктуры.

📱 GitHub

tags: #утилиты #zabbix #мониторинг

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
44👍2🔥1
🤖 ssh-mcp

👁 MCP-сервер, который предоставляет ИИ-помощникам ограниченный SSH-доступ к удалённым серверам через единый протокол.

Он поддерживает выполнение команд, передачу файлов по SFTP, синхронизацию каталогов, переадресацию портов и сбор сведений о состоянии системы. Для контроля доступа используются белые и чёрные списки команд, ограничения локальных и удалённых путей, а секреты передаются через переменные окружения.

❗️ Подойдёт DevOps-инженерам и разработчикам, которые используют MCP-совместимых ИИ-помощников для работы с удалённой инфраструктурой.

Изучаем по ссылке

tags: #утилиты #ии #ssh

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥21
🐧 Linux-администратор от основ до отказоустойчивой инфраструктуры

👁 Курс охватывает три уровня администрирования Linux — от управления системами и сетями до проектирования сложной инфраструктуры.

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

❗️ Подойдёт системным администраторам и специалистам, которые хотят развивать навыки работы с Linux-инфраструктурой.

Изучаем по ссылке

tags: #обучение #linux #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4👍2👨‍💻1
🐳 Docker может запускать контейнеры с отдельным PID 1 без собственного init-процесса

👁 У контейнера есть особая проблема: первый процесс становится PID 1 и получает специальные правила обработки сигналов. Для приложений, которые порождают дочерние процессы, это может приводить к зомби-процессам и некорректному завершению. Docker умеет решить это через встроенный init.

📝 Включаем init для отдельного контейнера

Флаг --init добавляет небольшой init-процесс внутрь контейнера. Он становится PID 1, принимает сигналы и собирает завершившиеся дочерние процессы.

docker run --init \
--name worker \
my-worker:latest


📝 Используем init в Compose

Для сервисов, которые запускают subprocess'ы, эту настройку можно закрепить непосредственно в compose.yaml. Тогда поведение не зависит от того, кто и как запускает контейнер.

services:
worker:
image: my-worker:latest
init: true
stop_grace_period: 30s


📝 Проверяем, кто действительно является PID 1

После запуска можно посмотреть дерево процессов внутри контейнера. Это особенно полезно при отладке graceful shutdown и приложений, которые запускают внешние команды.

docker exec worker ps -eo pid,ppid,stat,cmd

docker stop --time 30 worker


❗️ --init полезен не только для «красивого завершения» контейнера. Если приложение создаёт дочерние процессы, встроенный init берёт на себя обязанности PID 1 и помогает корректно обрабатывать сигналы и reaping дочерних процессов без установки полноценного systemd внутри контейнера.

tags: #docker #devops #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
5🐳3🔥2👍1