Fajre's avatar
Fajre
npub1dykm...fysu
Se eu sumir dos relays públicos, a verdade continua aqui: ws://oxz6arhmx7dxrgxveqccafilm4lbkaqegxvgrufw4tbzrdkg22bnt7id.onion BTC: bc1qf9e9exc957y7spgpm6tc6gcv0d98adg55820tp XMR: 85UMFQfR6AhUBV6ed5hP5b5E668yBU9KfKJGtQ1YkRf1NLSbNpoBrydBQaJuFcPo5LgainWyqkpr6ARTtob2KGnW6rN8jo8
Fajre's avatar
fajre 2 months ago
alguem explica oq rolou com o gato do nostr? ele vai voltar?
Fajre's avatar
fajre 2 months ago
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:
Fajre's avatar
fajre 2 months ago
quer ver q isso ai vai ser normalizado vao rastrea quem escrever 83105.53105 image
Fajre's avatar
fajre 3 months ago
Estou rodando meu próprio relay Nostr (um na LAN em nostr.home e outro exposto via .onion (é o mesmo, só botei em .onion pra ter algo exposto onde possa salvar e hospedar, alem de aprender mais sobre os hidden services)), estou tentando usar o Nostr de forma mais “soberana”, sem depender de grandes relays públicos ou indexadores centralizados. Meu relay está funcionando corretamente, eu já verifiquei pelos logs que os eventos estão sendo escritos e armazenados corretamente tanto pelo desktop quanto pelo celular. No Android eu uso o Amethyst, e ele lê/escreve diretamente no meu relay .onion (ele ja tem um suporte em background e consegue enviar direto pelo .onion (sem a necessidade de usar tor ou orbot)). O problema começa nos clientes web de navegador ou no desktop. Alguns clientes (como o Primal) parecem depender de infraestrutura centralizada de cache/indexador. Então mesmo quando o evento está no banco do meu relay, ele não aparece na interface se o backend deles não consegue enxergar meu relay. Isso vai contra o propósito de rodar meu próprio relay. O que eu estou procurando: - Um cliente web (no navegador) - Que conecte diretamente aos relays que eu configurar manualmente (sem dependência de indexador central) - Que suporte totalmente relays customizados, incluindo .onion - Que respeite exatamente as configurações de Read/Write - Que não dependa silenciosamente de infraestrutura de fallback No momento q escrevo to usando o Coracle pelo librewolf no meu pc. O Coracle funciona perfeitamente, mas a UX é horrivel. Eu gostei muito da UX do Primal. Alguem conhece algum cliente web pra pc que tenha isso que quero? se alguem conseguiu entender (se n manda um comentario q explico melhor) (de preferencia UX parecida com a do Primal)
Fajre's avatar
fajre 3 months ago
Boa noite clazinho! Duvida: como vcs se organizam para conversar? estilo grupo de whatsapp assim mesmo. Simplex? vi vcs falando (ja tinha ouvido falar, mas me surpreendi com a arquitetura e a forma q trabalha isso) Usam alguma outra coisa? Tipo tenho varias ideias de dev usando nostr e outras coisas assim e gostaria de compartilhar e ver oq vcs achar sabe? Obrigado!