Boa noite guys.
Gostaria de compartilhar um pedaco dos ultimos dias do meu JOURNAL.md do meu Homelab. (leia de tras pra frente os dias).
---
## 2026-03-10
**Status:** ✅ Sucesso (Integração End-to-End).
**Foco:** Implementação do Client (Sparrow Wallet), Supply Chain Security e Hardening de Privacidade.
### A Batalha do Supply Chain (Confiança Matemática)
- **Risco:** Instalar softwares financeiros (Carteiras) via repositórios mantidos por terceiros (AUR por exemplo) abre vetor para injeção de malware roubador de chaves.
- **Defesa (PGP):** Antes da instalação, a chave pública do desenvolvedor principal (Craig Raw) foi importada via Keybase e seu *fingerprint* validado (`D4D0 D320 2FC0 6849 A257 B38D E946 1833 4C67 4B40`). O comando `yay` foi instruído a validar o `.tar.gz` assinado antes da descompactação.
### Hardening de Privacidade (A Armadilha do Mempool.space)
- **O Problema:** Por padrão, o Sparrow Wallet "vaza" a identidade de rede. Ele usa o `mempool.space` público para consultar o preço das taxas de rede e visualizar blocos, vinculando o IP físico da operadora (ISP) ao interesse na blockchain.
- **Solução:** Nas configurações gerais do Sparrow (`File -> Preferences`), a fonte de taxas (Fee Rates Source) foi alterada para `Server` (apontando as consultas para a própria VM `OrangeShadow`). O *Block Explorer* foi silenciado. Consultas FIAT (Coingecko) foram mantidas por não transmitirem dados criptográficos de conta.
### Conexão e O "Aperto de Mão"
- A conexão `Private Electrum` foi estabelecida sem TLS (visto que a rede local VLAN 20 -> VLAN 30 já é um conduíte confiável) na porta `50001`.
- **Telemetria:** O Sparrow retornou `Batched RPC enabled` e conectou ao `electrs 0.11.1`. Os blocos da mempool exibidos na aba de envio agora são alimentados em tempo real pelo meu próprio hardware.
### Criação da Sandbox (Arquitetura de Cofres)
- **Escala de Paranoia:** Foi definido que a carteira criada hoje (Software Wallet nativa) operará como uma **Sandbox (Hot Wallet)** para aprendizado. Em cenários de produção futuros para reserva de valor, será exigida a implementação de Airgapped Cold Storage (ex: SeedSigner) ou uso amnésico via Tails OS.
- **Protocolo de Criação:** A semente BIP39 de 24 palavras foi gerada off-screen e registrada/armazenada de forma segura.
- **Resultado Final:** A carteira importou o `xpub` (Master Public Key) e o nó `OrangeShadow` varreu os 750GB de disco em milissegundos via índice RocksDB, confirmando a inexistência histórica de UTXOs atrelados à chave. Soberania alcançada.
## 2026-03-09
**Status:** ✅ Sucesso (Nó Público Onion e Indexação em Andamento).
**Foco:** Abertura do Perímetro Tor (Inbound) e Engenharia de Compilação do Electrs (Fase 2).
### O Risco do "Erro Fatal do GitHub" (Segurança P2P)
- **O Dilema:** Para o nó do Bitcoin ser um cidadão útil e validar/enviar blocos, ele precisa aceitar conexões (Inbound). O padrão da comunidade é definir o parâmetro `externalip=xyz.onion` no `bitcoin.conf`.
- **A Falha de OPSEC:** Como minha infraestrutura segue o paradigma *Infrastructure as Code* (GitOps), commitar um arquivo com o endereço onion exato no GitHub vincularia imediatamente minha identidade digital (DevOps) ao nó na Darknet, quebrando o princípio básico de anonimato.
- **A Solução (Tor Control API):**
- Habilitei as diretrizes `ControlPort 9051` e `CookieAuthentication 1` no `/etc/tor/torrc`.
- Inseri o usuário do sistema (`fajre`) no grupo `debian-tor` para permitir a leitura do cookie criptográfico.
- No `bitcoin.conf`, apliquei `listen=1`, `listenonion=1` e `discover=1`.
- **Resultado:** O Bitcoin Core conversou com o Daemon do Tor, negociou a criação de um *Hidden Service* em background, e publicou-se na rede. O comando `bitcoin-cli getnetworkinfo` retornou o endereço `.onion` na porta 8333 com sucesso absoluto. Zero rastros no Git.
### Compilação (Electrs vs Debian Trixie)
- **Necessidade:** O Bitcoin Core armazena blocos, mas não é um banco de dados pesquisável por endereços. O Electrs (Rust) atua como tradutor para a carteira Sparrow. A exigência de segurança (Supply Chain) forçou a compilação local (sem binários pré-compilados de terceiros).
- **Incidente 1 (Crash de API JSON):** A versão estável (tag `v0.10.4`) do Electrs compilou perfeitamente em ~8 minutos. Porém, ao iniciar, entrou em *Crash Loop* (Erro: `JSON error: invalid type: sequence, expected a string`).
- *Causa Raiz:* O Bitcoin `v28.1` (Bleeding Edge) alterou a estrutura da resposta do RPC `localaddresses` de string para array (sequence). O Electrs legado quebrou.
- *Roll-Forward:* Mudei a branch git do Electrs para a `master` para pegar as atualizações de API mais recentes.
- **Incidente 2 (O labirinto do Clang/LLVM):** Durante a recompilação da `master`, o script falhou criticamente no pacote `rust-rocksdb` (Erro: `couldn't find any valid shared libraries matching: ['libclang.so']`).
- *Causa Raiz:* O script do Rust não encontrou o caminho da biblioteca dinâmica C++ no Debian Testing (que a instala como `libclang-19-dev` em diretórios específicos versionados).
- *Solução:* Instalação forçada do pacote base e injeção do caminho correto via variável de ambiente antes da compilação: `export LIBCLANG_PATH=$(llvm-config-19 --libdir)`.
- **Vitória:** O binário otimizado da versão `0.11.1` foi gerado (3m 18s).
- **Ignição:** O serviço `electrs.service` foi iniciado (com colete de força `MemoryMax=10G`). Os logs mostraram que a comunicação com o Bitcoin via `.cookie` funcionou perfeitamente e o Electrs começou a engolir os blocos da rede a velocidades extremas. A indexação completa no SSD SATA vai durar a madrugada.
## 2026-03-08 (Parte 2)
**Status:** ✅ Sucesso (IBD Concluído e Camuflagem).
**Foco:** Finalização da Sincronização do Bitcoin e Transição para a Rede Tor.
### A Matemática do Sucesso (Benchmark do IBD)
- O *Initial Block Download* (IBD) processou toda a história do Bitcoin (de 2009 até o bloco 939.920) em aproximadamente **21 horas**.
- **Fatores de Êxito:** A estratégia de utilizar um SSD com cache DRAM (Samsung 870 EVO) aliado à alocação de 11GB de RAM (`dbcache=11000`) foi impecável. No pico, o nó segurou mais de 63 milhões de UTXOs em ~8.6 GB de RAM antes de consolidar no disco, evitando o *thrashing* da controladora SATA.
### O Grande Flush e a Transição (Fase 2)
- Executei o `systemctl stop bitcoind`. O tempo de *flush* dos dados da RAM para o disco levou vários minutos, validando a necessidade do parâmetro `TimeoutStopSec=600` que configurei no Systemd ontem para evitar corrupção por encerramento forçado.
- **Redução de Pegada:** Com o banco de dados atualizado, o nó não precisa mais devorar a memória do servidor. O `dbcache` foi estrangulado para `512` (MB), devolvendo mais de 10GB de RAM para o Sistema Operacional (que serão usados pelo Electrs).
### Camuflagem (Tor)
- O pacote `tor` já havia sido instalado no Debian. O teste via `curl --socks5` confirmou a saída anônima.
- O `bitcoin.conf` foi alterado para operar **estritamente via Tor** (`onlynet=onion`). A máquina sumiu da Clearnet.
- **Validação:** Ao reiniciar, os logs reportaram `Leaving InitialBlockDownload` e as novas conexões `block-relay-only` passaram a ocorrer perfeitamente através de *peers* Onion (v2/v3). O motor base está concluído.
## 2026-03-08
**Status:** ✅ Sucesso (IBD Iniciado).
**Foco:** Ignição do Nó Bitcoin (OrangeShadow - VM 107), Engenharia de Throttling e Correção de Backup.
### Desilusões Arquiteturais e Realismo Físico
- **O Mito do "All-in-One":** Descartei a ideia de rodar Mempool.space e Lightning Network no servidor. A memória RAM (8GB alvo para produção) não comporta Redis e MariaDB operando simultaneamente com o motor do Monero e Bitcoin sem causar *starvation*. A LN exige *inbound liquidity* e *clearnet* de baixa latência, incompatíveis com roteamento Tor. O servidor será estritamente uma caixa-forte *On-Chain*.
- **A Armadilha da Hot Wallet (`wallet.dat`):** O plano original previa backupear a carteira no Backblaze B2. Inaceitável. O Bitcoin Core foi reconfigurado com `disablewallet=1`. O nó é agora um validador cego. A seed será gerada offline (Tails OS) e o client (Sparrow no Arch Linux) terá apenas a chave pública (xpub).
### Blindagem de Hypervisor (Proxmox Cgroups)
Para impedir que a validação matemática intensa (ECDSA/Schnorr) cause um ataque DoS contra os nós críticos (DockerHost, OPNsense), apliquei limites diretamente no metal via CLI:
- **CPU:** `qm set 107 --cpuunits 512` (reduz o peso no scheduler do Proxmox à metade do padrão) e `--cores 4` (teto físico).
- **I/O de Disco:** `qm set 107 --scsi1 file=/dev/disk/by-id/[...],iothread=1,mbps_wr=250,mbps_rd=400,aio=threads,discard=on,backup=0`. Limitou-se a escrita a 250 MB/s para que a controladora da placa-mãe não trave os SSDs NVMe do pool ZFS principal.
### Erros, Falhas e Soluções (Post-Mortem do Setup)
- **Erro de Traffic Shaping (Network):** Ao tentar limitar a rede a 15MB/s (`rate=15` no `net0`), o Kernel do Proxmox disparou alertas do algoritmo *sch_htb* (`quantum of class 10001 is big`). Limitar a placa virtual L2 estrangulou a comunicação com o Gateway e DNS. **Solução:** Removi o limite físico (`qm set 107 --net0 virtio=...,bridge=vmbr0,tag=30`) e deleguei o controle de rede à aplicação (`maxconnections=40` no `bitcoin.conf`).
- **Engano de Hot-Plug de SCSI:** Tentei injetar os parâmetros assíncronos (`aio=threads`) com a VM rodando. O Proxmox registrou a mudança em laranja (Pending Change), pois KVM não altera o pipeline de disco root a quente. **Solução:** Foi necessário o ciclo elétrico bruto (`qm stop 107` seguido de `qm start 107`). Um simples reboot via Linux não injetaria a alteração do Hypervisor.
- **Erro Estratégico de P2P:** Iniciei com `listen=1`. Isso permitiu conexões de entrada. A máquina começou a ler do disco e servir blocos históricos para outros nós, gastando I/O que deveria ser da própria validação. **Solução:** Alterado para `listen=0` (Modo Parasita) temporariamente até o fim do IBD.
### Validação de FS e Instalação
- Verifiquei o `/etc/fstab` e constatei que o disco do blockchain já havia sido montado com a diretriz `noatime`. Isso evitou a escrita contínua de metadados (*Access Time*) cada vez que um bloco de 2MB é lido, salvando ciclos cruciais de IOPS.
- Instalação via binários pré-compilados (`v28.1`) verificados por `sha256sum`.
### Correção Crítica de Backups (Restic)
O arquivo `setup_backup.yml` do Ansible instruía o backup da pasta blockchain inteira e do `wallet.dat`. Isso subiria 700GB de dados públicos inúteis para a nuvem e, pior, poderia vazar chaves privadas. **Solução:** O Restic na OrangeShadow foi reescrito para fazer o backup **estritamente** da inteligência do nó (`bitcoin.conf`, `bitcoind.service`), ignorando `/opt/blockchain`.
Documentação completa do homelab em:
https://github.com/fajremvp/homelab