Summary

У меня дома есть небольшая лаборатория: гипервизор, пара виртуальных машин, NAS, свой сервер звонков и несколько скриптов, которые я пишу под конкретную бытовую проблему. Собрал четыре истории оттуда. Объединяет их одно: каждая началась со слов «это займёт пять минут».

Слои, в которые пришлось заглянуть в домашней лаборатории

«Просто добавлю места на диске»

Мой NAS - это Synology, запущенный в виртуальной машине на Proxmox. В какой-то момент места стало мало, и я подумал, что всё просто: увеличу виртуальный диск в гипервизоре, а система сама заметит.

Система не заметила.

Виртуальный диск стал больше, но раздел внутри остался прежним. Обычный путь - открыть GParted и растянуть раздел - здесь не работает: Synology хранит данные в RAID-массиве, и GParted такие тома не умеет. Пришлось делать руками и по порядку:

  1. parted resizepart - растянуть раздел на новое место;
  2. mdadm --grow - сказать RAID-массиву, что место появилось;
  3. resize2fs или btrfs filesystem resize - растянуть саму файловую систему, в зависимости от того, что на томе.

Каждый шаг короткий. Но порядок важен, и если ошибиться в любом из них - чинить придётся уже не «пять минут».

Tip

Увеличить диск в гипервизоре - это только первая треть работы. Остальные две: раздел и файловая система.

Свои звонки без чужих серверов

Я люблю, когда сервисы работают у меня, а не «где-то». Поэтому у меня поднят собственный Matrix-сервер, и хотелось, чтобы в нём работали звонки.

Звонки в Element работают через компонент LiveKit. И тут выяснилось неприятное: разработчики отключили бесплатный публичный сервер, через который это раньше «просто работало». Теперь при звонке приложение пишет MISSING_MATRIX_RTC_FOCUS. Перевод: «я не знаю, через что тебе звонить».

Решение - поднять собственный LiveKit и правильно выставить порты. Схема такая:

  • сам Matrix живёт на домашнем сервере;
  • звонки идут через сервер с публичным адресом: у домашнего нет такого удобства;
  • в конфигурации Matrix прописано, где искать этот LiveKit.

Звонки при этом заработали, и теперь они идут через мой собственный сервер.

Сканер домашней сети за один вечер

Однажды понадобилось быстро понять, какие адреса в домашней сети заняты, а какие свободны. Готовые сканеры были то слишком тяжёлыми, то слишком скупыми на вывод.

Я попросил ИИ написать небольшой скрипт на Python с батником для запуска. Требования были такие: показывать свободные адреса зелёным, занятые - с открытыми портами и именем хоста, работать в несколько сотен потоков.

Дальше всё шло итерациями, как это и бывает:

  1. Первая версия работала, но ничего не показывала, пока не закончит. Я попросил живой вывод.
  2. Вторая версия показывала живой вывод, но адреса «прыгали» не по порядку: потоки заканчивали в произвольном порядке. Попросил печатать строго по возрастанию адреса.
  3. Третья версия - в батник зашита конкретная команда запуска, чтобы запускать двойным кликом.

Три реплики, и рабочий инструмент. Идеальным он не был, но задачу решал.

Набросок: веб-интерфейс для правил firewall

Ещё одна идея, которая пока осталась наброском. У меня есть bash-скрипт, который собирает правила iptables для сегментации VPN: кто кого видит, что куда пускается. Захотелось поверх него сделать веб-интерфейс.

Я обсуждал с Claude варианты: готовые решения вроде Cockpit с firewalld, доработка существующей панели или собственный лёгкий интерфейс. Остановился на последнем как на наименее инвазивном: небольшой Flask API, простая HTML-страница, шаблоны типовых правил, ключ доступа к API, автоматический бэкап перед каждым изменением и откат, если что-то пошло не так.

Честно: это набросок архитектуры, а не готовый продукт. Но он хорошо показывает, как я подхожу к инструментам: не скрывать сложность, а дать ей интерфейс.

Мелочь: стикеры для Telegram

Побочный проект из серии «вечер с ffmpeg». У Telegram очень конкретные требования к видеостикерам: до трёх секунд, без звука, кодек VP9, не больше 256 килобайт, сторона 512 пикселей. А для эмодзи ещё строже: 100 на 100.

Из одного ролика получились стикер (28,7 КБ) и эмодзи (5,7 КБ). Цифры стоит запомнить или записать, чтобы больше не искать.

Что из этого следует

Самое ценное в домашней лаборатории - не то, что она «работает». А то, что она заставляет разбираться в слоях, которые в обычной жизни спрятаны.

ЗадачаСлой, в который пришлось заглянуть
Расширить дискВиртуальный диск, раздел, RAID, файловая система
Звонки в MatrixСигнализация, медиасервер, порты
Сканер сетиПотоки и порядок вывода
Интерфейс для firewalliptables, бэкапы, откаты
СтикерыКодеки и ограничения платформы

Поэтому домашняя инфраструктура для меня - не про то, чтобы сэкономить на облаке. Это самый дешёвый способ перестать бояться слоёв, о которых обычно не думают.