====== 2026/08/26 ====== ===== Previa ===== * Descargar este modelo * wget -O gemma-3-1b-it-Q4_K_M.gguf "https://huggingface.co/ggml-org/gemma-3-1b-it-GGUF/resolve/main/gemma-3-1b-it-Q4_K_M.gguf" ===== Script Python ===== * Monitorear errores del sistema: * #!/usr/bin/env python3 import subprocess import re from datetime import datetime def get_system_errors(): """Extrae errores del sistema usando journalctl.""" result = subprocess.run( ['journalctl', '-p', 'err', '-b', '--no-pager'], capture_output=True, text=True ) lines = result.stdout.splitlines() # Filtrar líneas relevantes errors = [line for line in lines if 'error' in line.lower()] return errors def main(): errors = get_system_errors() if not errors: print("✅ No se encontraron errores en el sistema.") return print(f"⚠️ Se encontraron {len(errors)} errores.") # Mostrar los 5 primeros for err in errors[:5]: print(f" - {err[:100]}...") if __name__ == "__main__": main() * Crear una carpeta mkdir scripts/ && cd scripts/ * Copiar el archivo monitor.py dentro de esta carpeta. * Ejecutar: * python3 monitor.py ===== Script Python IA ===== * Descargar un archivo monitor-ia.py * import subprocess import json import sys def get_errors(): """ Obtiene los errores del sistema desde el journal (systemd). Retorna una lista de líneas de error (hasta 50). """ try: # Opción 1: journalctl (mejor para sistemas con systemd) # -p 3 : solo errores (priority err) # -b : desde el último arranque # -n 50: últimas 50 líneas result = subprocess.run( ['journalctl', '-p', '3', '-b', '-n', '50', '--no-pager'], capture_output=True, text=True, check=True ) lines = result.stdout.strip().splitlines() # Filtra líneas vacías errors = [line for line in lines if line.strip()] if errors: return errors else: # Si no hay errores en journal, probar con dmesg return get_errors_dmesg() except (subprocess.CalledProcessError, FileNotFoundError): # Si journalctl no está disponible, usar dmesg return get_errors_dmesg() def get_errors_dmesg(): """Fallback: obtener errores del buffer de kernel con dmesg.""" try: result = subprocess.run( ['dmesg', '-T', '--level=err', '--color=never'], capture_output=True, text=True, check=True ) lines = result.stdout.strip().splitlines() # Tomar últimas 30 líneas return lines[-30:] if lines else [] except (subprocess.CalledProcessError, FileNotFoundError): # Si nada funciona, retornar lista vacía return [] def analyze_with_llama(errors): """Envía los errores a llama.cpp para análisis.""" if not errors: return "No hay errores que analizar." # Limitamos a los primeros 10 para no exceder el contexto error_text = "\n".join(errors[:10]) prompt = f""" Eres un experto en administración de sistemas Linux. Analiza los siguientes errores del sistema y sugiere soluciones concretas: {error_text} Sugerencias (en español, concisas): """ try: # Ajusta la ruta del modelo si es necesario result = subprocess.run( [ 'llama-cli', '-m', '/home/jared/llamacpp/gemma-3-1b-it-Q4_K_M.gguf', '-p', prompt, '-n', '200', '--temp', '0.3' ], capture_output=True, text=True, check=True ) return result.stdout except subprocess.CalledProcessError as e: return f"Error al ejecutar llama-cli: {e.stderr}" except FileNotFoundError: return "Error: No se encontró 'llama-cli'. Asegúrate de que esté instalado y en el PATH." def main(): errors = get_errors() if not errors: print("✅ Sistema limpio. No se encontraron errores recientes.") return print("🧠 Analizando errores con IA...") suggestions = analyze_with_llama(errors) print("\n💡 Sugerencias:") print(suggestions) if __name__ == "__main__": main() * Agregar el PATH con los binarios de llamacpp. * Editar el archivo .baschrc * Agregar al final la siguiente linea y guardar los cambios * nano .bashrc * export PATH="$HOME/llamacpp/llama-b10615:$PATH" * Recarga de los parámetros * source .bashrc ===== Portainer docker ===== - Crear la carpeta portainer/ y dentro docker-compose.yml - mkdir ~/portainer && cd ~/portainer - Archivo docker-compose.yml - services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: unless-stopped ports: - "9000:9000" # Puerto HTTP (interfaz web) - "9443:9443" # Puerto HTTPS (si usas SSL) volumes: - /var/run/docker.sock:/var/run/docker.sock # Acceso al motor Docker - portainer_data:/data # Persistencia de datos environment: - TZ=America/La_Paz # Ajusta tu zona horaria (opcional) volumes: portainer_data: - Crear y ejecutar el contenedor - docker compose up -d - Proceso inicial del usuario admin - Ingresar a http://localhost:9000 - Solicita token-setup: Se debe buscar en logs del contenedor. - docker compose logs - Buscar el texto setup_token=859a22b49a17d7cdf05c565ee94aa3ce1881b05035b86c51a2ecfb8b45dab343 ===== Backups ===== * Carpeta destino para respaldar. * Crear la carpeta /opt/backups/ * sudo mkdir /opt/backups * Cambiar el dueño de la carpeta * sudo chown -R su_usuario:su_usuario /opt/backups/ * Comando para respaldar los datos de la carpeta Docuemtos. * rsync -av Documentos/ /opt/backups/ * Automatizar los backups * Editanto crontab crontab -e * Solicitara que editor se utilizara por defecto. ej nano * Agrega el proce cada 5 minutos * 5 * * * * rsync -av ~/Documentos/ /opt/backups/ * Listamos el cambio * crontab -l ===== Terminal wave ===== * https://www.waveterm.dev/