Initial commit
This commit is contained in:
42
tools/build.sh
Executable file
42
tools/build.sh
Executable file
@@ -0,0 +1,42 @@
|
||||
# Definir diretórios (Relativos à raiz do projeto, assumindo execução via ./tools/build.sh)
|
||||
# Mas vamos garantir que o script rode da raiz
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
echo "[BUILD] Limpando builds anteriores..."
|
||||
rm -rf dist build release_production.zip
|
||||
|
||||
# Definir diretórios
|
||||
STAGE_DIR="dist/ipv0-olt-api"
|
||||
RELEASE_DIR="dist/release"
|
||||
mkdir -p $STAGE_DIR
|
||||
mkdir -p $RELEASE_DIR
|
||||
|
||||
echo "[BUILD] Iniciando Obfuscação Pyarmor (Modo Full)..."
|
||||
# Usando Pyarmor para proteger todo o código fonte
|
||||
# O comando gen irá usar a configuração existente em .pyarmor se houver, ou criar uma nova.
|
||||
# --outer: Permite usar chave de licença externa (license.key via outer_keyname=license.key)
|
||||
./venv/bin/pyarmor gen --outer -O $STAGE_DIR app.py drivers/ utils/ config.py
|
||||
|
||||
|
||||
echo "[BUILD] Copiando arquivos estáticos..."
|
||||
cp hosts.json $STAGE_DIR/
|
||||
cp requirements.txt $STAGE_DIR/
|
||||
cp README.md $STAGE_DIR/
|
||||
cp tools/debug.py $STAGE_DIR/
|
||||
cp tools/service/install.sh $STAGE_DIR/
|
||||
cp tools/service/ipv0-olt-api.service $STAGE_DIR/
|
||||
chmod +x $STAGE_DIR/install.sh
|
||||
|
||||
echo "[BUILD] Criando arquivo ZIP (via Python)..."
|
||||
# Usar Python para zipar o CONTEÚDO do diretório de staging para dentro do zip
|
||||
# O zip final ficará em dist/release/ipv0-olt-api.zip
|
||||
# Estando em dist/ipv0-olt-api, ../release aponta para dist/release
|
||||
cd $STAGE_DIR
|
||||
../../venv/bin/python3 -c "import shutil; shutil.make_archive('../release/ipv0-olt-api', 'zip', '.')"
|
||||
cd ../..
|
||||
|
||||
echo "✅ Build Process Complete!"
|
||||
echo "Artifacts:"
|
||||
echo " - Staging: $STAGE_DIR"
|
||||
echo " - Release: $RELEASE_DIR/ipv0-olt-api.zip"
|
||||
ls -F $RELEASE_DIR/
|
||||
51
tools/debug.py
Normal file
51
tools/debug.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import time
|
||||
import urllib.request
|
||||
import json
|
||||
|
||||
def print_header(msg):
|
||||
print(f"\n{'='*40}\n {msg}\n{'='*40}")
|
||||
|
||||
import glob
|
||||
|
||||
def check_pyarmor_binding():
|
||||
print_header("Hardware & License (Machine ID)")
|
||||
|
||||
try:
|
||||
# Usar ferramenta oficial do Pyarmor CLI para HD Info
|
||||
subprocess.run([sys.executable, "-m", "pyarmor.cli.hdinfo"], check=False)
|
||||
except Exception as e:
|
||||
print(f"Erro ao consultar HD Info: {e}")
|
||||
|
||||
def check_service_status():
|
||||
print_header("Service Status (systemd)")
|
||||
ret = subprocess.run(["systemctl", "status", "ipv0-olt-api", "--no-pager"], capture_output=False)
|
||||
if ret.returncode != 0:
|
||||
print("⚠️ Serviço parece estar parado ou com erro.")
|
||||
|
||||
def check_api_health():
|
||||
print_header("API Health Check")
|
||||
url = "http://localhost:5050/health"
|
||||
try:
|
||||
print(f"Connecting to {url}...")
|
||||
with urllib.request.urlopen(url, timeout=5) as response:
|
||||
if response.status == 200:
|
||||
data = json.loads(response.read().decode())
|
||||
print(f"✅ API Online! Status: {data}")
|
||||
else:
|
||||
print(f"❌ API retornou status code: {response.status}")
|
||||
except Exception as e:
|
||||
print(f"❌ Falha na conexão com API: {e}")
|
||||
print("Verifique se o serviço está rodando e se a licença é válida.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("IPv0 OLT API - Debug Tool (v3.1)")
|
||||
|
||||
check_service_status()
|
||||
check_pyarmor_binding()
|
||||
check_api_health()
|
||||
|
||||
print("\nLogs recentes:")
|
||||
subprocess.run(["journalctl", "-u", "ipv0-olt-api", "-n", "10", "--no-pager"], check=False)
|
||||
87
tools/gen_license.sh
Executable file
87
tools/gen_license.sh
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Ensure we are in project root
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# Configuration
|
||||
OUTPUT_BASE="dist/licenses"
|
||||
PYARMOR="./venv/bin/pyarmor"
|
||||
|
||||
# Colors (only if terminal supports it, otherwise empty)
|
||||
if [ -t 1 ]; then
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
else
|
||||
RED=''
|
||||
GREEN=''
|
||||
BLUE=''
|
||||
NC=''
|
||||
fi
|
||||
|
||||
echo "${BLUE}=== Gerador de Licenças IPv0 OLT API ===${NC}"
|
||||
|
||||
# 1. Solicitar Nome do Cliente
|
||||
echo "Nome do Cliente (sem espaços, ex: ProvedorX): "
|
||||
read CLIENT_NAME
|
||||
if [ -z "$CLIENT_NAME" ]; then
|
||||
echo "${RED}Erro: Nome do cliente é obrigatório.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DEST_DIR="$OUTPUT_BASE/$CLIENT_NAME"
|
||||
mkdir -p "$DEST_DIR"
|
||||
|
||||
# 2. Escolher Tipo de Licença
|
||||
echo ""
|
||||
echo "Tipo de Licença:"
|
||||
echo "1) Data de Expiração (Trial/PoC)"
|
||||
echo "2) Hardware (Produção/Machine ID)"
|
||||
echo "Opção [1/2]: "
|
||||
read OPTION
|
||||
|
||||
if [ "$OPTION" = "1" ]; then
|
||||
# Licença por Data
|
||||
echo "Data de Vencimento (YYYY-MM-DD): "
|
||||
read EXPIRE_DATE
|
||||
# Validação simples de formato YYYY-MM-DD
|
||||
if ! echo "$EXPIRE_DATE" | grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'; then
|
||||
echo "${RED}Erro: Formato de data inválido.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Gerando licença Trial para ${GREEN}$CLIENT_NAME${NC} até ${GREEN}$EXPIRE_DATE${NC}..."
|
||||
$PYARMOR gen key -e "$EXPIRE_DATE"
|
||||
|
||||
elif [ "$OPTION" = "2" ]; then
|
||||
# Licença por Hardware
|
||||
echo "Machine ID do Cliente: "
|
||||
read MACHINE_ID
|
||||
if [ -z "$MACHINE_ID" ]; then
|
||||
echo "${RED}Erro: Machine ID é obrigatório.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Gerando licença Permanente para ${GREEN}$CLIENT_NAME${NC} (ID: $MACHINE_ID)..."
|
||||
$PYARMOR gen key --bind-device "$MACHINE_ID"
|
||||
|
||||
else
|
||||
echo "${RED}Opção inválida.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. Mover e Verifica
|
||||
# Por padrão, o pyarmor gera em dist/license.key (conforme config outer_keyname)
|
||||
GENERATED_FILE="dist/license.key"
|
||||
|
||||
if [ -f "$GENERATED_FILE" ]; then
|
||||
mv "$GENERATED_FILE" "$DEST_DIR/"
|
||||
echo ""
|
||||
echo "${GREEN}✅ Licença gerada com sucesso!${NC}"
|
||||
echo "Arquivo: ${BLUE}$DEST_DIR/license.key${NC}"
|
||||
echo "Envie este arquivo para o cliente."
|
||||
else
|
||||
echo "${RED}❌ Erro: O arquivo de licença não foi gerado.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
60
tools/service/install.sh
Normal file
60
tools/service/install.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
|
||||
# IPv0 OLT API Installer
|
||||
# Usage: sudo ./install.sh
|
||||
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Please run as root (sudo ./install.sh)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DEST_DIR="/opt/ipv0-olt-api"
|
||||
|
||||
echo "[INSTALL] Installing dependencies..."
|
||||
apt-get update
|
||||
apt-get install -y python3-venv python3-pip unzip
|
||||
|
||||
echo "[INSTALL] Setting up directory..."
|
||||
mkdir -p $DEST_DIR
|
||||
# Copiar arquivos do diretório atual para o destino (se não estiver lá)
|
||||
if [ "$PWD" != "$DEST_DIR" ]; then
|
||||
cp -r * $DEST_DIR/
|
||||
fi
|
||||
|
||||
cd $DEST_DIR
|
||||
|
||||
echo "[INSTALL] Creating virtual environment..."
|
||||
python3 -m venv venv
|
||||
./venv/bin/pip install -r requirements.txt
|
||||
|
||||
echo "[INSTALL] Configuring Service..."
|
||||
cp ipv0-olt-api.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
# Não habilitar/iniciar automaticamente, pois falta a licença
|
||||
# systemctl enable ipv0-olt-api
|
||||
# systemctl start ipv0-olt-api
|
||||
|
||||
echo ""
|
||||
echo "[INSTALL] Dependencies installed!"
|
||||
|
||||
# Obter Machine ID de forma limpa
|
||||
MACHINE_ID=$(./venv/bin/python3 -m pyarmor.cli.hdinfo 2>/dev/null | grep "Machine ID" | cut -d: -f2 | xargs)
|
||||
|
||||
# Cores
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo ""
|
||||
echo "Serviço 'ipv0-olt-api' configurado mas não iniciado - ${RED}PRECISA SER LICENCIADO${NC}."
|
||||
echo ""
|
||||
echo -e "Machine ID: ${YELLOW}${MACHINE_ID}${NC}"
|
||||
echo ""
|
||||
|
||||
echo "NEXT STEPS:"
|
||||
echo "1. Solicite sua licença."
|
||||
echo "2. Copie a licença 'license.key' para /opt/ipv0-olt-api/"
|
||||
echo "3. Inicialize o serviço: sudo systemctl enable --now ipv0-olt-api"
|
||||
echo "4. Após licenciar e inicializar o serviço, verifique se a api está funcionando com:"
|
||||
echo " curl http://localhost:5050/health"
|
||||
14
tools/service/ipv0-olt-api.service
Normal file
14
tools/service/ipv0-olt-api.service
Normal file
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=IPv0 OLT API (Zabbix Integration)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
Group=root
|
||||
WorkingDirectory=/opt/ipv0-olt-api
|
||||
ExecStart=/opt/ipv0-olt-api/venv/bin/python3 app.py
|
||||
Restart=always
|
||||
Environment=PYTHONUNBUFFERED=1
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user