DmitryandClaude Sonnet 5 1f27756afd
lint / yamllint + ansible-lint + syntax-check (push) Canceled after 0s
fix(openvpn-phone): switch from static key to TLS peer-fingerprint
The Android client ships OpenVPN 2.7, which refuses a --secret config
("Options error: No tls-client or tls-server option"; 2.8 drops it
entirely). Rework the phone instance to a CA-less TLS point-to-point:
two self-signed EC keypairs generated on ru-vps (server.* / client.*),
each side pins the other by SHA256 with peer-fingerprint, data-ciphers
AES-256-GCM. Everything else unchanged (tcp/9444, tun2, 10.80.0.0/30,
NAT via tun0, systemd unit, shared homelab_vpn_client_routes).

Verified on ru-vps 2026-09-03: openvpn 2.6.19 starts clean ("Using
certificate fingerprint to verify peer"), listens on 9444, tun2 up,
make openvpn-phone idempotent (changed=0 on rerun), make lint green.
The regenerated ansible/generated/ada-phone.ovpn (self-contained
cert+key, gitignored) was handed to the operator.

openvpn-laptop.yml is left on static key — not deployed; needs the same
TLS treatment when someone actually uses it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KbuZrUoevfBgCpf5DCF4DG
2026-09-03 09:44:19 +03:00
2026-08-26 22:09:59 +03:00

HomeLab Infrastructure

Активная инфраструктура домашней лаборатории управляется через Ansible. Каноничные инструкции для людей и агентов — в AGENTS.md. Стабильный архитектурный контекст и риски — в docs/ai/.

Быстрый старт

Окружение собрано в Nix, venv не нужен:

nix develop                 # или один раз: direnv allow

# Один раз на клон
ansible-galaxy collection install -r ansible/requirements.yml -p ansible/collections

Всё управление — через make из ansible/:

cd ansible
make help                   # список целей, начинать отсюда
make check                  # связность и ожидаемые IP
make status                 # read-only сводка по всей инфраструктуре
make lint                   # ansible-lint + yamllint

Деплой и обновления:

make dry-gitea              # предпросмотр (--check --diff)
make deploy-gitea           # применить
make update-gitea           # бэкап -> обновление -> health-check

Секреты лежат в .env в корне репозитория.gitignore); его подхватывают и Ansible, и OpenTofu. Опасные цели требуют CONFIRM=1.

SSH руками

ansible/ssh_config — единый источник правды по SSH и для Ansible, и для терминала. Добавь в ~/.ssh/config, чтобы заработал ssh gitea:

Include /home/ada/Documents/Projects/HomeLab/infras/ansible/ssh_config

Структура

  • ansible/ — control plane: Makefile, inventory/, playbooks/, roles/, ssh_config
  • ansible/inventory/group_vars/all/services.yml — реестр сервисов (VMID, IP, порты, домены, образы)
  • flake.nix — dev-окружение
  • .gitea/workflows/lint.yml — CI: yamllint, ansible-lint, syntax-check
  • docs/ai/ — архитектура, stack, edge cases и legacy boundaries для агентов
  • archive/2026-07-proxmox-migration/ — исторические NixOS/Docker конфиги, только как справка

Grimmory MCP

tools/grimmory-mcp/ содержит read-only интеграцию с Grimmory API для OpenCode. Явно вызываемые sync tools записывают сгенерированные заметки и обложки в Obsidian.

npm install --prefix tools/grimmory-mcp
npm run configure --prefix tools/grimmory-mcp
npm test --prefix tools/grimmory-mcp

Глобальная регистрация MCP в OpenCode выполняется вне этого репозитория. После настройки используй /grimmory-sync для обновления заметок книг в 90 Library/Books и обложек в 99 System/Export/Grimmory/Covers.

S
Description
No description provided
Readme
1.7 MiB
Languages
HCL 25%
Jinja 24.4%
JavaScript 22.3%
Makefile 9.7%
Nix 6.7%
Other 11.9%