mirror of
https://github.com/lgcosta/pf-linux-port.git
synced 2026-11-13 04:08:03 -03:00
O problema da primeira serie era a sensacao de 'quadro a quadro': a captura era a saida de um script despejada em blocos. Agora cada video e uma sessao shell de verdade. - record.py: abre um pty, faz SSH no firewall e digita os comandos tecla a tecla (~34 c/s, com jitter). O tty remoto ecoa, o kernel responde ao vivo; a captura e asciicast v2 com timestamps. 'bash --noediting' evita que o editor de linha redesenhe o comando e o tty o repita (a linha aparecia duplicada). - record.py --pace: segura a tela enquanto a voz fala - cada batida dura o trecho de audio que a acompanha, de modo que uma unica captura serve as duas versoes de idioma. - record.py --ensure-pf: garante pf.ko carregado antes de gravar. Sem isso uma fase que roda 'rmmod' (ativacao) pode derrubar o /dev/pf de outra gravacao concorrentes - foi exatamente o que quebrou a fase de roteamento na primeira tentativa. - make_audio.py: geracao da narracao pelo MiniMax TTS, uma voz feminina por idioma (English_ConfidentWoman / Portuguese_ConfidentWoman), um arquivo por segmento. A API devolve o audio em hexadecimal, nao base64. - render_video.py: reproduz a captura por um emulador de terminal e escreve os frames direto no ffmpeg como RGB bruto (um PNG por frame era uma ordem de grandeza mais lento). Desenha o diagrama de rede do lab por cima do terminal nas fases de roteamento e balanceamento, destacando o caminho em discussao, e queima a legenda da narracao. - assemble.py: mixa os segmentos de audio na linha do tempo. - join.py: emenda as fases com crossfade sobre um cartao de capitulo e sincroniza o audio na mesma linha do tempo. - build-all.sh: roda o pipeline inteiro. Arte de fundo e audio vem do MiniMax; a geracao de video do MiniMax nao esta habilitada nesta conta (erro 2068 em todos os modelos), entao as transicoes sao renderizadas localmente com ffmpeg. 16 videos: 7 fases + filme completo, em ingles e portugues, com legenda queimada.
124 lines
5.1 KiB
Markdown
124 lines
5.1 KiB
Markdown
# Screencasts / Videos da demonstracao
|
|
|
|
> PT-BR: [docs/pt-BR/screencast.md](pt-BR/screencast.md) · EN: this page
|
|
|
|
Sete videos por idioma, com **narracao com voz feminina** (MiniMax),
|
|
**legendas queimadas**, **diagrama de rede do lab** e um **filme completo**
|
|
com transicoes entre as fases. 1920x1080 @ 30fps, H.264/MP4 + AAC — prontos
|
|
para subir no YouTube.
|
|
|
|
Cada video e a gravacao de uma **sessao shell real**: uma conexao SSH de
|
|
verdade ao firewall Alpine, com os comandos digitados tecla a tecla e a saida
|
|
do kernel chegando em tempo real. Nada e simulado.
|
|
|
|
## As fases
|
|
|
|
| # | Video | O que mostra |
|
|
|---|-------|--------------|
|
|
| 0 | `00-ambiente.mp4` | O lab: 4 VMs Alpine sob libvirt, as quatro interfaces do firewall, e o diagrama de rede completo |
|
|
| 1 | `01-implementacao.mp4` | A implementacao no kernel: fontes do OpenBSD 8.0 + camada de compatibilidade = `pf.ko` |
|
|
| 2 | `02-ativacao.mp4` | `insmod pf.ko`, `/dev/pf`, `pfctl -e`, `pfctl -s info` |
|
|
| 3 | `03-regras.mp4` | Regras basicas: tabela, anchor, `keep state`, `block drop` (o ping morre) |
|
|
| 4 | `04-roteamento.mp4` | `route-to` e `reply-to`, com o diagrama mostrando o caminho real do pacote |
|
|
| 5 | `05-balanceamento.mp4` | Pool `round-robin`, pool `source-hash` e `dup-to` |
|
|
| 6 | `06-qos.mp4` | Filas `hfsc` do OpenBSD 8.0 e uma transferencia de 2 MB pela classe |
|
|
|
|
Mais `pf-on-linux-full.mp4`: o filme completo, com as sete fases emendadas por
|
|
transicoes (crossfade sobre um cartao de capitulo).
|
|
|
|
## Vozes MiniMax
|
|
|
|
| Idioma | Voz | Id |
|
|
|--------|-----|-----|
|
|
| Ingles (en_US) | Confident Woman | `English_ConfidentWoman` |
|
|
| Portugues (pt_BR) | Confident Woman | `Portuguese_ConfidentWoman` |
|
|
|
|
A audio e gerada pelo MiniMax TTS, **um arquivo por segmento** de fala. Como
|
|
cada segmento corresponde a uma batida da sessao, a voz comeca exatamente
|
|
quando a acao correspondente aparece na tela.
|
|
|
|
## Como regravar
|
|
|
|
```sh
|
|
# tudo: audio -> sessoes -> videos -> filme completo
|
|
./scripts/screencast/build-all.sh
|
|
|
|
# uma fase so
|
|
./scripts/screencast/build-all.sh 04-roteamento
|
|
```
|
|
|
|
Etapas individuais:
|
|
|
|
```sh
|
|
python3 scripts/screencast/make_audio.py --lang pt # audio MiniMax
|
|
python3 scripts/screencast/record.py --plan scripts/screencast/plans/04-roteamento.json \\
|
|
--out out/screencast/caps/04-roteamento.cast --pace
|
|
python3 scripts/screencast/assemble.py --phase 04-roteamento --lang pt
|
|
python3 scripts/screencast/join.py --lang pt
|
|
```
|
|
|
|
### Como o pipeline funciona
|
|
|
|
```
|
|
planos/*.json --record.py--> caps/*.cast --render_video.py--> video mudo
|
|
(comandos) (pty real) (asciicast) (pyte + PIL) |
|
|
|
|
|
narracao/*.json --make_audio.py--> vo/<fase>.<lang>/*.mp3 ----------+
|
|
(MiniMax TTS) |
|
|
assemble.py: mix + legendas
|
|
|
|
|
join.py: transicoes
|
|
```
|
|
|
|
Pontos que importam:
|
|
|
|
* **Sessao real.** `record.py` abre um pty, faz SSH na VM e digita os comandos
|
|
um caractere por vez (~34 c/s, com jitter). O `bash --noediting` evita que o
|
|
editor de linha redesenhe o comando e o tty o repita.
|
|
* **Pacing.** A gravacao segura a tela enquanto a voz fala: cada batida dura
|
|
no maximo o trecho de audio que a acompanha (o maior entre EN e PT), para
|
|
uma unica captura servir as duas versoes.
|
|
* **Legendas.** O texto da narracao e queimado no video, na lingua da trilha.
|
|
* **Diagrama.** Nas fases 0, 4 e 5 o mapa do lab e desenhado sobre o
|
|
terminal, e o caminho em discussao fica destacado (eth1/eth2/eth3).
|
|
|
|
Requisitos: `ffmpeg`, `python3` com `PIL` e `pyte`, a fonte DejaVu, a chave
|
|
`MINIMAX_API_KEY` no ambiente, e o lab de VMs no ar.
|
|
|
|
## Onde ficam os arquivos
|
|
|
|
| Caminho | Conteudo |
|
|
|---------|----------|
|
|
| `out/screencast/en/`, `out/screencast/pt/` | os videos finais |
|
|
| `out/screencast/caps/` | as capturas asciicast das sessoes |
|
|
| `out/screencast/vo/` | o audio gerado pelo MiniMax |
|
|
| `scripts/screencast/plans/` | o roteiro de comandos de cada fase |
|
|
| `scripts/screencast/narration/` | os textos da narracao (EN e PT) |
|
|
|
|
## Texto de descricao (YouTube)
|
|
|
|
```
|
|
PF on Linux - o motor do OpenBSD PF 8.0 dentro do kernel Linux
|
|
|
|
Port completo do Packet Filter do OpenBSD 8.0 para o kernel Linux 7.3.4,
|
|
empacotado como modulo (pf.ko) e controlado pelo pfctl original do OpenBSD
|
|
sobre a ABI de ioctls do /dev/pf.
|
|
|
|
O lab e real: 4 VMs Alpine sob libvirt, kernel compilado do fonte com o
|
|
modulo, trafego real entre cliente, firewall e servidor.
|
|
|
|
Fases:
|
|
0. O ambiente de testes - as 4 VMs e o diagrama de rede
|
|
1. Implementacao no kernel - das fontes OpenBSD ao pf.ko
|
|
2. Ativacao - insmod, /dev/pf, pfctl -e, pfctl -s info
|
|
3. Regras basicas - tabelas, anchors, keep state, block drop
|
|
4. Roteamento - route-to e reply-to, com o caminho real no diagrama
|
|
5. Balanceamento - pools round-robin, source-hash e dup-to
|
|
6. QOS - filas hfsc do OpenBSD 8.0 no caminho de dados
|
|
|
|
Suite automatizada: 15 gates, todos verdes.
|
|
Codigo e documentacao: https://git.labexposed.com/lgcosta/pf-linux-port
|
|
|
|
#linux #kernel #openbsd #pf #firewall #netfilter #screencast
|
|
```
|