refs #477 Adds daemon conf and nginx conf template
parent
d3c4b34f7e
commit
c2d43334a8
|
@ -0,0 +1,85 @@
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
import logging
|
||||||
|
import stat
|
||||||
|
|
||||||
|
# Configuración de logging
|
||||||
|
logging.basicConfig(level=logging.INFO, filename='/var/log/oglive_daemon.log', filemode='a', format='%(asctime)s - %(levelname)s - %(message)s')
|
||||||
|
|
||||||
|
def handle_command(command):
|
||||||
|
action = command.get('action')
|
||||||
|
args = command.get('args', [])
|
||||||
|
cleaned_args = [arg.strip('\'"') for arg in args]
|
||||||
|
logging.info(f'Handling command: {action} with args: {cleaned_args}')
|
||||||
|
|
||||||
|
try:
|
||||||
|
if action in ['config', 'install', 'download', 'show', 'check', 'uninstall', 'disk_usage','list_installed_oglives','get_info','get_default','set_default','check_services_status']:
|
||||||
|
command_to_run = ['sudo', '/opt/ogboot/bin/oglivecli', action] + cleaned_args
|
||||||
|
logging.info(f'Running command: {" ".join(command_to_run)}')
|
||||||
|
process = subprocess.Popen(command_to_run, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||||||
|
stdout, stderr = process.communicate()
|
||||||
|
logging.info(f'Command stdout: {stdout}')
|
||||||
|
logging.error(f'Command stderr: {stderr}')
|
||||||
|
|
||||||
|
# Asumimos que `stdout` contendrá el JSON válido
|
||||||
|
try:
|
||||||
|
json_output = json.loads(stdout)
|
||||||
|
return {"success": True, "output": json_output}
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
logging.error(f'Error parsing JSON: {e} - Raw output: {stdout}')
|
||||||
|
return {"success": False, "error": f'Error parsing JSON: {str(e)} - Raw output: {stdout}'}
|
||||||
|
|
||||||
|
else:
|
||||||
|
return {"success": False, "error": "Unknown command"}
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f'Error handling command {action}: {e}')
|
||||||
|
return {"success": False, "error": str(e)}
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Crea el directorio si no existe
|
||||||
|
if not os.path.exists('/var/run/oglive'):
|
||||||
|
os.makedirs('/var/run/oglive', exist_ok=True)
|
||||||
|
|
||||||
|
socket_path = '/var/run/oglive/oglive_daemon.sock'
|
||||||
|
|
||||||
|
# Elimina el socket si existe
|
||||||
|
if os.path.exists(socket_path):
|
||||||
|
os.remove(socket_path)
|
||||||
|
|
||||||
|
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
server.bind(socket_path)
|
||||||
|
|
||||||
|
# Establece los permisos del socket
|
||||||
|
os.chmod(socket_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) # Permisos para todos los usuarios
|
||||||
|
|
||||||
|
server.listen()
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
logging.info('Daemon ready to accept connections')
|
||||||
|
conn, _ = server.accept()
|
||||||
|
with conn:
|
||||||
|
logging.info('Accepted connection')
|
||||||
|
data = conn.recv(1024)
|
||||||
|
if not data:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
command = json.loads(data.decode('utf-8'))
|
||||||
|
logging.info(f'Received command: {command}')
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
logging.error('Failed to decode JSON')
|
||||||
|
conn.sendall(json.dumps({"success": False, "error": "Invalid JSON"}).encode('utf-8'))
|
||||||
|
continue
|
||||||
|
|
||||||
|
response = handle_command(command)
|
||||||
|
conn.sendall(json.dumps(response).encode('utf-8'))
|
||||||
|
finally:
|
||||||
|
server.close()
|
||||||
|
if os.path.exists(socket_path):
|
||||||
|
os.remove(socket_path)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name __SERVERIP__; # IP del servidor
|
||||||
|
|
||||||
|
# Raíz del documento para el proyecto Symfony
|
||||||
|
root /opt/ogboot/public;
|
||||||
|
|
||||||
|
# Bloque para manejar las solicitudes a /ogboot
|
||||||
|
location /ogboot {
|
||||||
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
|
# Aumentar el tiempo de espera por el install oglive
|
||||||
|
proxy_read_timeout 600;
|
||||||
|
proxy_connect_timeout 600;
|
||||||
|
proxy_send_timeout 600;
|
||||||
|
send_timeout 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bloque para manejar las solicitudes a index.php
|
||||||
|
location ~ ^/index.php(/|$) {
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_pass unix:/run/php/php7.2-fpm.sock; # Asegúrate de que esto sea correcto
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(/.*)$;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||||
|
internal;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bloque para devolver 404 en cualquier solicitud a archivos PHP que no sean index.php
|
||||||
|
location ~ \.php$ {
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Logs de error y acceso para el proyecto Symfony
|
||||||
|
error_log /var/log/nginx/ogboot_error.log;
|
||||||
|
access_log /var/log/nginx/ogboot_access.log;
|
||||||
|
|
||||||
|
# Ruta base para servir archivos de TFTP
|
||||||
|
location /tftpboot {
|
||||||
|
alias /opt/ogboot/tftpboot;
|
||||||
|
autoindex on; # Permitir listado de directorios
|
||||||
|
try_files $uri $uri/ =404; # Intentar servir archivos, si no se encuentra devolver 404
|
||||||
|
|
||||||
|
# Seguridad
|
||||||
|
location ~ \.php$ {
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Logs de error y acceso para tftpboot
|
||||||
|
error_log /var/log/nginx/tftpboot_error.log;
|
||||||
|
access_log /var/log/nginx/tftpboot_access.log;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
[Unit]
|
||||||
|
Description=oglive Daemon Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/bin/python3 /opt/ogboot/bin/oglive_daemon.py
|
||||||
|
Restart=always
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in New Issue