Skip to content

Commit fed2dcf

Browse files
Migracao para Go: o Python sai, a v5 e um binario
Fase 6, e o fim da migracao. O cliente deixa de ser um .pyz de 54 KB que exigia Python instalado e passa a ser um executavel de 13 MB que nao exige nada. O que sumiu do repositorio, e nao e pouco: sysmon.py, os sete modulos em tools/, a suite de testes deles, os lancadores sysmon.vbs, sysmon.bat e sysmon.sh, o diagnostico.bat, o requirements.txt e o lancador nativo que tinha sido escrito em Go so para achar o Python. Nada disso existia por merito proprio - tudo era consequencia de o cliente precisar de um interpretador. O instalar-autostart.ps1 encolheu junto. Ele procurava o Python no PATH, conferia se AQUELE Python tinha Tkinter (o da Microsoft Store nao tem) e instalava dois pacotes do pip para o icone de bandeja. Nenhuma dessas perguntas existe mais. A versao passou a morar num arquivo VERSAO. Eram oito literais e um script conferindo se concordavam; com o cliente recebendo o numero por -ldflags, guardar o numero e mais simples que conferir copias. Sobraram tres lugares, e o checar-versao.sh continua exigindo que concordem. Uma decisao que vale registrar: o cliente sai so em amd64. A janela no Linux exige CGO, e cross-compilar isso para arm64 pediria uma toolchain cruzada inteira - custo alto para desktop Linux em ARM, que e raro. O AGENTE continua saindo em arm64, porque e ele que roda nos hosts, onde Raspberry Pi e comum. As checagens estaticas dos scripts do Windows foram portadas para Go em vez de aposentadas junto com a suite Python. Elas pegaram bugs reais - a colisao entre $inicializar e o parametro [switch]$Inicializar derrubava o instalador inteiro - e nao ha PowerShell na maquina de build, entao sem elas esses erros voltariam a aparecer so na maquina do usuario. Ganharam uma irma: nenhuma instrucao viva pode mencionar Python, porque mandar alguem instalar o que nao e mais preciso faz desistir na primeira tentativa. E o empacotar.sh ganhou uma checagem que so o duplo clique pegaria: o binario do Windows tem que sair com subsistema GUI. Compilado como console, ele abriria uma janela preta junto - exatamente o que a migracao veio eliminar. Noventa e nove testes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 85b8151 commit fed2dcf

36 files changed

Lines changed: 403 additions & 7796 deletions

.github/workflows/ci.yml

Lines changed: 18 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -90,36 +90,10 @@ jobs:
9090
go build -ldflags "-s -w -H windowsgui" -o /tmp/sysmon.exe ./cmd/sysmon
9191
ls -lh /tmp/sysmon.exe
9292
93-
clientes:
94-
name: clientes (Python ${{ matrix.python }})
95-
runs-on: ubuntu-latest
96-
strategy:
97-
fail-fast: false
98-
matrix:
99-
# O piso e o que o README promete; o topo e o que a maioria tem hoje.
100-
python: ['3.9', '3.13']
101-
steps:
102-
- uses: actions/checkout@v7
103-
104-
- uses: actions/setup-python@v7
105-
with:
106-
python-version: ${{ matrix.python }}
107-
108-
# sysmon_win importa tkinter no topo do modulo, entao o import precisa
109-
# funcionar mesmo sem display (os testes nao abrem janela).
110-
- name: Bibliotecas do Tk
111-
run: |
112-
sudo apt-get update -qq
113-
sudo apt-get install -y --no-install-recommends tk
114-
python -c "import tkinter; print('tkinter', tkinter.TkVersion)"
115-
116-
- name: Testes
117-
run: python -m unittest discover -s tools -t tools -v
118-
11993
pacote:
12094
name: pacote
12195
runs-on: ubuntu-latest
122-
needs: [versao, agente, clientes]
96+
needs: [versao, agente, cliente-go]
12397
steps:
12498
- uses: actions/checkout@v7
12599

@@ -128,31 +102,33 @@ jobs:
128102
go-version-file: linux-agent/go.mod
129103
cache: false
130104

131-
- uses: actions/setup-python@v7
132-
with:
133-
python-version: '3.13'
134-
135-
- name: Bibliotecas do Tk
105+
# O empacotar compila o cliente Linux, e a janela la exige CGO.
106+
- name: Bibliotecas de janela
136107
run: |
137108
sudo apt-get update -qq
138-
sudo apt-get install -y --no-install-recommends tk
109+
sudo apt-get install -y -qq --no-install-recommends \
110+
pkg-config libx11-dev libx11-xcb-dev libxkbcommon-dev \
111+
libxkbcommon-x11-dev libwayland-dev libvulkan-dev \
112+
libgles2-mesa-dev libegl1-mesa-dev libxcursor-dev libxfixes-dev
139113
140-
# Sem argumento, o empacotar.sh tira a versao do main.go - que e
141-
# exatamente o que queremos conferir aqui.
114+
# Sem argumento, o empacotar.sh tira a versao do arquivo VERSAO - que
115+
# e exatamente o que queremos conferir aqui.
142116
- name: Empacota
143117
run: ./empacotar.sh
144118

145-
# O auto-update baixa o .pyz e confere contra o SHA256SUMS. Se um dos
146-
# dois sumir do pacote, o cliente instalado recusa a atualizacao.
119+
# O auto-update baixa o binario e o confere contra o SHA256SUMS. Se um
120+
# dos dois sumir do release, o cliente instalado recusa a atualizacao -
121+
# e fica preso na versao que tem, sem saber por que.
147122
- name: Confere o que o auto-update precisa
148123
run: |
149-
test -f dist/sysmon.pyz
150-
grep -q ' sysmon.pyz$' dist/SHA256SUMS
124+
test -f dist/sysmon-windows-amd64.exe
125+
test -f dist/sysmon-linux-amd64
126+
grep -q ' sysmon-windows-amd64.exe$' dist/SHA256SUMS
151127
( cd dist && sha256sum -c SHA256SUMS )
152128
153-
# Roda o bundle de verdade: um .pyz que nao abre nao serve de nada.
154-
- name: Fuma o .pyz
155-
run: python dist/sysmon.pyz --help
129+
# Roda o binario de verdade: um cliente que nao abre nao serve de nada.
130+
- name: Fuma o cliente
131+
run: ./dist/sysmon-linux-amd64 --version
156132

157133
- uses: actions/upload-artifact@v7
158134
with:

.github/workflows/release.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,13 @@ jobs:
2929
go-version-file: linux-agent/go.mod
3030
cache: false
3131

32-
- uses: actions/setup-python@v7
33-
with:
34-
python-version: '3.13'
35-
36-
- name: Bibliotecas do Tk
32+
- name: Bibliotecas de janela
3733
run: |
3834
sudo apt-get update -qq
39-
sudo apt-get install -y --no-install-recommends tk
35+
sudo apt-get install -y -qq --no-install-recommends \
36+
pkg-config libx11-dev libx11-xcb-dev libxkbcommon-dev \
37+
libxkbcommon-x11-dev libwayland-dev libvulkan-dev \
38+
libgles2-mesa-dev libegl1-mesa-dev libxcursor-dev libxfixes-dev
4039
4140
# A tag e a fonte da verdade do numero, mas cada modulo carrega a sua
4241
# versao dentro dele. Divergir aqui significa um agente que responde
@@ -59,10 +58,10 @@ jobs:
5958

6059
- name: Confere o que o auto-update precisa
6160
run: |
62-
test -f dist/sysmon.pyz
63-
grep -q ' sysmon.pyz$' dist/SHA256SUMS
61+
test -f dist/sysmon-windows-amd64.exe
62+
grep -q ' sysmon-windows-amd64.exe$' dist/SHA256SUMS
6463
( cd dist && sha256sum -c SHA256SUMS )
65-
python dist/sysmon.pyz --help >/dev/null
64+
./dist/sysmon-linux-amd64 --version >/dev/null
6665
6766
# Titulo = primeira linha da mensagem da tag; notas = o resto. Tag sem
6867
# mensagem (leve) cai no changelog automatico do proprio GitHub.
@@ -101,7 +100,8 @@ jobs:
101100
run: |
102101
NOMES=$(gh release view "$GITHUB_REF_NAME" --json assets --jq '.assets[].name')
103102
echo "$NOMES"
104-
echo "$NOMES" | grep -qx 'sysmon.pyz'
103+
echo "$NOMES" | grep -qx 'sysmon-windows-amd64.exe'
104+
echo "$NOMES" | grep -qx 'sysmon-linux-amd64'
105105
echo "$NOMES" | grep -qx 'SHA256SUMS'
106106
echo "$NOMES" | grep -qx "sysmon-agent-$VERSAO-linux-amd64.tar.gz"
107107
echo "$NOMES" | grep -qx "sysmon-agent-$VERSAO-linux-arm64.tar.gz"

Makefile

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
# Atalhos do projeto inteiro. O build do agente fica em linux-agent/Makefile.
22

3-
.PHONY: ajuda teste teste-go teste-py versao build dist lancador bundle pacote limpar
3+
.PHONY: ajuda teste teste-go teste-cliente versao build dist cliente pacote limpar
44

55
ajuda:
6-
@echo "make teste - roda todos os testes (agente Go + clientes Python)"
6+
@echo "make teste - roda todos os testes (agente + cliente)"
77
@echo "make versao - confere se todo modulo declara a mesma versao"
88
@echo "make build - compila o agente para esta arquitetura"
99
@echo "make dist - compila o agente para amd64 e arm64"
10-
@echo "make lancador - compila o sysmon.exe (lancador do Windows)"
11-
@echo "make bundle - gera o dist/sysmon.pyz (cliente em arquivo unico)"
10+
@echo "make cliente - compila o cliente para Windows e Linux"
1211
@echo "make pacote - gera os tarballs de distribuicao em dist/"
1312
@echo "make limpar - remove os binarios e pacotes"
1413

15-
teste: teste-go teste-py
14+
teste: teste-go teste-cliente
1615

1716
teste-go:
1817
@echo "== agente (Go) =="
1918
@$(MAKE) -C linux-agent checagem
2019

21-
teste-py:
22-
@echo "== clientes (Python: nucleo, terminal e bandeja) =="
23-
@python3 -m unittest discover -s tools -t tools
20+
teste-cliente:
21+
@echo "== cliente (Go) =="
22+
@cd cliente && go vet ./... && go test ./...
2423

2524
versao:
2625
@./checar-versao.sh
@@ -31,14 +30,14 @@ build:
3130
dist:
3231
@$(MAKE) -C linux-agent dist
3332

34-
# Cross-compila do Linux: nenhuma maquina Windows envolvida.
35-
lancador:
36-
@cd windows-lancador && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
37-
go build -trimpath -ldflags "-s -w -H windowsgui" -o ../dist/sysmon.exe .
38-
@ls -lh dist/sysmon.exe
39-
40-
bundle: pacote
41-
@ls -lh dist/sysmon.pyz
33+
# Cross-compila o cliente do Linux: nenhuma maquina Windows envolvida.
34+
cliente:
35+
@mkdir -p dist
36+
@cd cliente && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
37+
go build -trimpath -ldflags "-s -w -H windowsgui" \
38+
-o ../dist/sysmon-windows-amd64.exe ./cmd/sysmon
39+
@cd cliente && go build -trimpath -o ../dist/sysmon-linux-amd64 ./cmd/sysmon
40+
@ls -lh dist/sysmon-*
4241

4342
# Testa antes de empacotar: pacote quebrado nao chega no host de ninguem.
4443
# A versao vem primeiro por ser instantanea - nao faz sentido rodar a bateria

0 commit comments

Comments
 (0)