Summary
У меня дома есть небольшая лаборатория: гипервизор, пара виртуальных машин, NAS, свой сервер звонков и несколько скриптов, которые я пишу под конкретную бытовую проблему. Собрал четыре истории оттуда. Объединяет их одно: каждая началась со слов «это займёт пять минут».
«Просто добавлю места на диске»
Мой NAS - это Synology, запущенный в виртуальной машине на Proxmox. В какой-то момент места стало мало, и я подумал, что всё просто: увеличу виртуальный диск в гипервизоре, а система сама заметит.
Система не заметила.
Виртуальный диск стал больше, но раздел внутри остался прежним. Обычный путь - открыть GParted и растянуть раздел - здесь не работает: Synology хранит данные в RAID-массиве, и GParted такие тома не умеет. Пришлось делать руками и по порядку:
parted resizepart- растянуть раздел на новое место;mdadm --grow- сказать RAID-массиву, что место появилось;resize2fsилиbtrfs filesystem resize- растянуть саму файловую систему, в зависимости от того, что на томе.
Каждый шаг короткий. Но порядок важен, и если ошибиться в любом из них - чинить придётся уже не «пять минут».
Tip
Увеличить диск в гипервизоре - это только первая треть работы. Остальные две: раздел и файловая система.
Свои звонки без чужих серверов
Я люблю, когда сервисы работают у меня, а не «где-то». Поэтому у меня поднят собственный Matrix-сервер, и хотелось, чтобы в нём работали звонки.
Звонки в Element работают через компонент LiveKit. И тут выяснилось неприятное: разработчики отключили бесплатный публичный сервер, через который это раньше «просто работало». Теперь при звонке приложение пишет MISSING_MATRIX_RTC_FOCUS. Перевод: «я не знаю, через что тебе звонить».
Решение - поднять собственный LiveKit и правильно выставить порты. Схема такая:
- сам Matrix живёт на домашнем сервере;
- звонки идут через сервер с публичным адресом: у домашнего нет такого удобства;
- в конфигурации Matrix прописано, где искать этот LiveKit.
Звонки при этом заработали, и теперь они идут через мой собственный сервер.
Сканер домашней сети за один вечер
Однажды понадобилось быстро понять, какие адреса в домашней сети заняты, а какие свободны. Готовые сканеры были то слишком тяжёлыми, то слишком скупыми на вывод.
Я попросил ИИ написать небольшой скрипт на Python с батником для запуска. Требования были такие: показывать свободные адреса зелёным, занятые - с открытыми портами и именем хоста, работать в несколько сотен потоков.
Дальше всё шло итерациями, как это и бывает:
- Первая версия работала, но ничего не показывала, пока не закончит. Я попросил живой вывод.
- Вторая версия показывала живой вывод, но адреса «прыгали» не по порядку: потоки заканчивали в произвольном порядке. Попросил печатать строго по возрастанию адреса.
- Третья версия - в батник зашита конкретная команда запуска, чтобы запускать двойным кликом.
Три реплики, и рабочий инструмент. Идеальным он не был, но задачу решал.
Набросок: веб-интерфейс для правил 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 | Сигнализация, медиасервер, порты |
| Сканер сети | Потоки и порядок вывода |
| Интерфейс для firewall | iptables, бэкапы, откаты |
| Стикеры | Кодеки и ограничения платформы |
Поэтому домашняя инфраструктура для меня - не про то, чтобы сэкономить на облаке. Это самый дешёвый способ перестать бояться слоёв, о которых обычно не думают.