[{"content":"REGISTRO DE DOMINIO OVH → dominio comprado: thebytepathchronicles.es thebytepathchronicles.com\nDNS AUTORITATIVO Cloudflare → gestión actual de DNS → redirecciones → capa de seguridad / proxy\nDOMINIO PRINCIPAL (WEB) www.thebytepathchronicles.es → Firebase Hosting → sitio principal (relato)\nthebytepathchronicles.es → redirige a www (301)\nBLOG TÉCNICO blog.thebytepathchronicles.es → Firebase Hosting (proyecto separado) → contenido independiente\nCI/CD (DEPLOY) GitHub → repositorios de proyectos\nGitHub Actions → build + deploy automático a Firebase\nENTORNO LOCAL DE TRABAJO Máquina local (desarrollo) → edición de sitios (Hugo / static / etc.) → preparación antes de push a GitHub\nINFRAESTRUCTURA LEGACY VPS OVH (inactivo actualmente) → antiguo hosting / pruebas → actualmente no en producción\nEDGE / CDN Cloudflare → cache global → protección DDoS → proxy inverso hacia Firebase\nFUENTES DE VERDAD Código → GitHub Deploy → GitHub Actions + Firebase Producción → dominios en Cloudflare Hosting Firebase ","permalink":"https://blog.thebytepathchronicles.es/posts/infraestructura_thebytepathchronicles/","summary":"\u003ch2 id=\"registro-de-dominio\"\u003eREGISTRO DE DOMINIO\u003c/h2\u003e\n\u003cp\u003eOVH\n→ dominio comprado: thebytepathchronicles.es\nthebytepathchronicles.com\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"dns-autoritativo\"\u003eDNS AUTORITATIVO\u003c/h2\u003e\n\u003cp\u003eCloudflare\n→ gestión actual de DNS\n→ redirecciones\n→ capa de seguridad / proxy\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"dominio-principal-web\"\u003eDOMINIO PRINCIPAL (WEB)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://www.thebytepathchronicles.es\"\u003ewww.thebytepathchronicles.es\u003c/a\u003e\n→ Firebase Hosting\n→ sitio principal (relato)\u003c/p\u003e\n\u003cp\u003ethebytepathchronicles.es\n→ redirige a www (301)\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"blog-técnico\"\u003eBLOG TÉCNICO\u003c/h2\u003e\n\u003cp\u003eblog.thebytepathchronicles.es\n→ Firebase Hosting (proyecto separado)\n→ contenido independiente\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"cicd-deploy\"\u003eCI/CD (DEPLOY)\u003c/h2\u003e\n\u003cp\u003eGitHub\n→ repositorios de proyectos\u003c/p\u003e\n\u003cp\u003eGitHub Actions\n→ build + deploy automático a Firebase\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"entorno-local-de-trabajo\"\u003eENTORNO LOCAL DE TRABAJO\u003c/h2\u003e\n\u003cp\u003eMáquina local (desarrollo)\n→ edición de sitios (Hugo / static / etc.)\n→ preparación antes de push a GitHub\u003c/p\u003e","title":"Infraestructura de TheBytePathchronicles"},{"content":"103.1 Trabajar en la línea de comandos Navegación y básicos pwd Muestra ruta actual cdCambia de directorio ls, ls -l, ls -a, ls -lh Lista contenido file \u0026lt;archivo\u0026gt; Identifica tipo de archivo type, whitch, command -V Muestra información sobre comandos Ayuda man, man -k, man section commando info help 103.2 Procesar texto con filtros Visualización cat, tac nl Numerar líneas less, more head, tail, tail -f Selección y manipulación cut -d -f sort, sort -n, sort -r uniq, uniq -c, uniq -d tr, tr A-Z a-z, tr -d wc, wc -l, wc -w Búsqueda grep, grep -i, grep -r, grep -E sed 's/old/new/' awk '{print $1} 103.3 Gestión básica de archivos cp, cp -r, cp -a mv rm, rm -r, rm -f mkdir, mkdir -p rmdir touch ln, ln -s 103.4 Usar streams, pipelines y redirecciones Redirecciones \u0026gt; Sobreescribe \u0026gt;\u0026gt; Añade \u0026lt; Entrada desde archivo \u0026lt;\u0026lt;EOF Here-doc \u0026lt;\u0026lt;EOF \u0026quot;texto\u0026quot; Here-string Pipelines comando1 | comando2 Stderr 2\u0026gt; error.log 2\u0026gt;\u0026amp;1 Unir stdout y stderr 103.5 Crear, monitorizar y eliminar procesos ps, ps aux, ps -ef top, htop jobs bg, fg kill, kill -9, killall nice, renice watch comando 103.6 Modificar prioridades de los procesos nice -n 10 coamndo Iniciar con prioridad renice -n +5 -p PID Cambia prioridad existente 103.7 Buscar archivos find /path -name \u0026quot;*.txt\u0026quot; find -type f, -type d find -mtime, -size, -user find -exec comando {} \\; locate, updatedb 103.8 Manipulación básica de archivos file gzip, gunzip bzip2, bunzip2 xz, unxz tar -cvf, tar -xvf, tar -tvf dd if=... of=... bs=... split, csplit strings 103.9 Usar editores de texto básicos nano \u0026hellip;\nvi/vim - mínimos obligatorios Entrar en modo edición i Guardar :w Salir :q Forzar :qw! Buscar /texto Reemplazar línea :s/viejo/nuevo/ Navegación h j k l ","permalink":"https://blog.thebytepathchronicles.es/posts/tema_103_comandos_gnu_y_unix/","summary":"\u003ch2 id=\"1031-trabajar-en-la-línea-de-comandos\"\u003e103.1 Trabajar en la línea de comandos\u003c/h2\u003e\n\u003ch3 id=\"navegación-y-básicos\"\u003eNavegación y básicos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epwd\u003c/code\u003e Muestra ruta actual\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecd\u003c/code\u003eCambia de directorio\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003els\u003c/code\u003e, \u003ccode\u003els -l\u003c/code\u003e, \u003ccode\u003els -a\u003c/code\u003e, \u003ccode\u003els -lh\u003c/code\u003e  Lista contenido\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efile \u0026lt;archivo\u0026gt;\u003c/code\u003e Identifica tipo de archivo\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etype\u003c/code\u003e, \u003ccode\u003ewhitch\u003c/code\u003e, \u003ccode\u003ecommand -V\u003c/code\u003e Muestra información sobre comandos\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"ayuda\"\u003eAyuda\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eman\u003c/code\u003e, \u003ccode\u003eman -k\u003c/code\u003e, \u003ccode\u003eman section commando\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einfo\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ehelp\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1032-procesar-texto-con-filtros\"\u003e103.2 Procesar texto con filtros\u003c/h2\u003e\n\u003ch3 id=\"visualización\"\u003eVisualización\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecat\u003c/code\u003e, \u003ccode\u003etac\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enl\u003c/code\u003e Numerar líneas\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eless\u003c/code\u003e, \u003ccode\u003emore\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ehead\u003c/code\u003e, \u003ccode\u003etail\u003c/code\u003e, \u003ccode\u003etail -f\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"selección-y-manipulación\"\u003eSelección y manipulación\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecut -d -f\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esort\u003c/code\u003e, \u003ccode\u003esort -n\u003c/code\u003e, \u003ccode\u003esort -r\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003euniq\u003c/code\u003e, \u003ccode\u003euniq -c\u003c/code\u003e, \u003ccode\u003euniq -d\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etr\u003c/code\u003e, \u003ccode\u003etr A-Z a-z\u003c/code\u003e, \u003ccode\u003etr -d\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewc\u003c/code\u003e, \u003ccode\u003ewc -l\u003c/code\u003e, \u003ccode\u003ewc -w\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"búsqueda\"\u003eBúsqueda\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003egrep\u003c/code\u003e, \u003ccode\u003egrep -i\u003c/code\u003e, \u003ccode\u003egrep -r\u003c/code\u003e, \u003ccode\u003egrep -E\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esed 's/old/new/'\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eawk '{print $1}\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1033-gestión-básica-de-archivos\"\u003e103.3 Gestión básica de archivos\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecp\u003c/code\u003e, \u003ccode\u003ecp -r\u003c/code\u003e, \u003ccode\u003ecp -a\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emv\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erm\u003c/code\u003e, \u003ccode\u003erm -r\u003c/code\u003e, \u003ccode\u003erm -f\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emkdir\u003c/code\u003e, \u003ccode\u003emkdir -p\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ermdir\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etouch\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eln\u003c/code\u003e, \u003ccode\u003eln -s\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1034-usar-streams-pipelines-y-redirecciones\"\u003e103.4 Usar streams, pipelines y redirecciones\u003c/h2\u003e\n\u003ch3 id=\"redirecciones\"\u003eRedirecciones\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e\u0026gt;\u003c/code\u003e Sobreescribe\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u003c/code\u003e Añade\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;\u003c/code\u003e Entrada desde archivo\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;\u0026lt;EOF\u003c/code\u003e Here-doc\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;\u0026lt;EOF \u0026quot;texto\u0026quot;\u003c/code\u003e Here-string\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"pipelines\"\u003ePipelines\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecomando1 | comando2\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"stderr\"\u003eStderr\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e2\u0026gt; error.log\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e2\u0026gt;\u0026amp;1\u003c/code\u003e Unir stdout y stderr\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1035-crear-monitorizar-y-eliminar-procesos\"\u003e103.5 Crear, monitorizar y eliminar procesos\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eps\u003c/code\u003e, \u003ccode\u003eps aux\u003c/code\u003e, \u003ccode\u003eps -ef\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etop\u003c/code\u003e, \u003ccode\u003ehtop\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejobs\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebg\u003c/code\u003e, \u003ccode\u003efg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ekill\u003c/code\u003e, \u003ccode\u003ekill -9\u003c/code\u003e, \u003ccode\u003ekillall\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enice\u003c/code\u003e, \u003ccode\u003erenice\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewatch comando\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1036-modificar-prioridades-de-los-procesos\"\u003e103.6 Modificar prioridades de los procesos\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003enice -n 10 coamndo\u003c/code\u003e Iniciar con prioridad\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erenice -n +5 -p PID\u003c/code\u003e Cambia prioridad existente\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1037-buscar-archivos\"\u003e103.7 Buscar archivos\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efind /path -name \u0026quot;*.txt\u0026quot;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efind -type f\u003c/code\u003e, \u003ccode\u003e-type d\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efind -mtime\u003c/code\u003e, \u003ccode\u003e-size\u003c/code\u003e, \u003ccode\u003e-user\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efind -exec comando {} \\;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elocate\u003c/code\u003e, \u003ccode\u003eupdatedb\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1038-manipulación-básica-de-archivos\"\u003e103.8 Manipulación básica de archivos\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efile\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egzip\u003c/code\u003e, \u003ccode\u003egunzip\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebzip2\u003c/code\u003e, \u003ccode\u003ebunzip2\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003exz\u003c/code\u003e, \u003ccode\u003eunxz\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etar -cvf\u003c/code\u003e, \u003ccode\u003etar -xvf\u003c/code\u003e, \u003ccode\u003etar -tvf\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edd if=... of=... bs=...\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esplit\u003c/code\u003e, \u003ccode\u003ecsplit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estrings\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"1039-usar-editores-de-texto-básicos\"\u003e103.9 Usar editores de texto básicos\u003c/h2\u003e\n\u003ch3 id=\"nano\"\u003enano\u003c/h3\u003e\n\u003cp\u003e\u0026hellip;\u003c/p\u003e","title":"LPIC-1 Tema 103 Comandos Gnu y Unix"},{"content":"102.1 Diseño del esquema de particionado del disco Objetivo: Comprender como se organizan los discos y particiones en Linux y como esto afecta a la instalación. (Este tema ya se ha cubierto suficiente en el anterior tema)\n102.2 Instalar un gestor de arranque Objetivo Conocer los gestores de arranque mas comunes y como se configuran. (También se ha tratado suficiente en el eanterior tema).\n102.3 Gestión de librerías compartidas Objetivo: Entender como Linux gestiona librerías compartidas y cómo hacer que el sistema las encuentre.\nLibrerías dinámicas vs estáticas: Estáticas: se copian la binario Dinámicas: se cargan en tiempo de ejecución Comandos impotantes: ldd \u0026lt;pograma\u0026gt; \u0026ndash;\u0026gt; lista librerías compartidas requeridas ldconfig \u0026ndash;\u0026gt; actualiza cache de librerías /etc/ld.so.cache Rutas: /lib, /usr/lib, /lib64, /usr/lib64 \u0026ndash;\u0026gt; librerías estandard /etc/ld.so.conf \u0026ndash;\u0026gt; rutas adicionales Variables de entorno LD_LIBRARY_PATH \u0026ndash;\u0026gt; añadir rutas temporales para librerías. 102.4 Gestión de paquetes Debian Objetivo: Manejar paquetes en sistemas basados en Debian (dpkg y apt).\nHerramientas\ndpkg Instalar: dpkg -i paquete.deb Quitar: dpkg -r paquete Ver estado: dpkg -l | grep paquete Listar contenido: dpkg -L paquete APT(Advanced Package Tool) Instalar:apt install paquete Actualizar índices: apt update Actualizar paquetes: apt upgrade Quitar: apt remove paquete/ apr purge paquete Buscar: apt search paquete Información: apt show paquete Repositorios Configuración: /etc/apt/sources.listy /etc/apt/sources.list.d/ Paquetes pueden ser main, contrib, non-free 102.5 Gestión de paquetes RPM y YUM Objetivo: Manejar paquetes en distribuciones basadas en Red Hat (RHEL, CentOS, Fedora) Herramientas:\nrpm(bajo nivel) Instalar: rpm -i paquete.rpm Actualizar: rpm -U paquete.rpm Quitar: rpm -e paquete Ver: rpm -q paquete Listar archivos: rpm -ql paquete Comprobar integridad: rpm -V paquete yum/dnf(alto nivel) Instalar: yum install paquete Actualizar: yum update Quitar: yum remove paquete Buscar: yum search paquete Mostrar info: yum info paquete Repositorios Configuración: /etc/yum.repos.d/*.repo 102.6 Linux como sistema virtualizado Objetivo: Conocer las formas de virtualización y conceptos básicos para LPIC Tipos:\nFull virtualization/hypervisor Paravirtualization Containers ","permalink":"https://blog.thebytepathchronicles.es/posts/tema_102_instalaci%C3%B3n_de_linux_y_gestion_de_paquetes/","summary":"\u003ch2 id=\"1021-diseño-del-esquema-de-particionado-del-disco\"\u003e102.1 Diseño del esquema de particionado del disco\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eObjetivo\u003c/strong\u003e: Comprender como se organizan los discos y particiones en Linux y como esto afecta a la instalación. (Este tema ya se ha cubierto suficiente en el anterior tema)\u003c/p\u003e\n\u003ch2 id=\"1022-instalar-un-gestor-de-arranque\"\u003e102.2 Instalar un gestor de arranque\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eObjetivo\u003c/strong\u003e Conocer los gestores de arranque mas comunes y como se configuran.\n(También se ha tratado suficiente en el eanterior tema).\u003c/p\u003e\n\u003ch2 id=\"1023-gestión-de-librerías-compartidas\"\u003e102.3 Gestión de librerías compartidas\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eObjetivo\u003c/strong\u003e: Entender como Linux gestiona librerías compartidas y cómo hacer que el sistema las encuentre.\u003c/p\u003e","title":"LPIC-1 Tema 102 Instalación de Linux y gestión de paquetes"},{"content":"101.1 Determinar y configurar los ajustes del hardware Comandos básicos:\nlspci \u0026ndash;\u0026gt; Lista dispositivos P?CI.\n-v detallado, -k drivers usados y disponibles. lsusb \u0026ndash;\u0026gt; Lista dispositivos USB.\nlsmod \u0026ndash;\u0026gt; Muestra módulos del kernel cargados. !! Lee de /proc/modules\nmodinfo \u0026lt;mod\u0026gt; \u0026ndash;\u0026gt; Información del módulo.\nmodprobe \u0026lt;mod\u0026gt; \u0026ndash;\u0026gt;Carga un módulo y sus dependencias.\nmodprobe -r \u0026lt;mod\u0026gt; \u0026ndash;\u0026gt; Descarga un módulo.\ninsmod \u0026lt;archivo.ko\u0026gt; \u0026ndash;\u0026gt; Carga módulo sin dependencias.\nrmod \u0026lt;mod\u0026gt;\u0026ndash;\u0026gt; Descarga módulo sin resolver dependencias.\nArchivos del sistema\n/proc \u0026ndash;\u0026gt; info dinámica del kernel\n/proc/cpuinfo, /proc/meminfo, /proc/interrupts, /proc/modules, /proc/ioports, /proc/scsi/. -/sys\u0026ndash;\u0026gt; sysinfo, info y control en tiempo real sobre dispositivos. Control de módulos persistente\n/etc/modprobe.d/*.conf blacklist modulox \u0026ndash;\u0026gt; evita que cargue. En lugar de elilminar un módulo lo bloqueamos. options modulox key=value configura opciones dmesg\ndmesg \u0026ndash;\u0026gt; mensajes del kernel dmesg | grep usb 101.2 Arranque del sistema Etapas del arranque\n1 BIOS/UEFI Inicialilza hardware Busca dispositivo de arranque Carga MBR/EFI 2 MBR (BIOS) 512 bytes Contiene tabla de particiones + bootloader stage 1 Limite: solo 4 particiones primarias 3 UEFI Usa la EFI System Partition(ESP) Ruta típica en linux : /boot/efi/EFI/\u0026lt;distro\u0026gt;/grubx64.efi 4 Bootloader/GRUB2) Carga kernel + initrd Presenta menú 5 Kernel Lanza rootfs Lanza init (systemd) Archivos importantes de GRUB2\nConfiguración principal generado: BIOS: /boot/grub/grub.cfg UEFI: /boot/efi/EFI/\u0026lt;distro\u0026gt;/grub.cfg Archivo donde se editan opciones: -/etc/default/grub Scripts usados al generar menu: /etc/grub.d/ Regenerar menú: grub-mkconfig -o /boot/grub2/grub.cg # también update-grub en debian y derivadas grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL y derivadas Opciones del kernel\nEn /etc/default/grub: GRUB_CMDLINE_LINUX\u0026ndash;\u0026gt; Opciones siempre para linux. GRUB_CMDLINE_LINUX_DEFAULTOpciones solo para arranque normal. initrd/initrmfs\nContiene módulos necesarios para montar el sistema raiz. update-initramfs -u en Debian 101.3 Cambiar niveles de ejecución/systemd targets Runlevels tradicionales (SysV)\n0 \u0026ndash;\u0026gt; Halt 1 \u0026ndash;\u0026gt; Single-user 2 \u0026ndash;\u0026gt; Multi-user (sin red) 3 \u0026ndash;\u0026gt; Multi-user (con red) 5 \u0026ndash;\u0026gt; Multi-user + GUI 6 \u0026ndash;\u0026gt; Reboot systemd targets equivalentes\nrunlevel 1 \u0026ndash;\u0026gt; rescue.target runlevel 3 \u0026ndash;\u0026gt; multi-user.target runlevel 5 \u0026ndash;\u0026gt; graphical.target emergency.target \u0026ndash;\u0026gt; mas restringido que rescue. Comandos systemd esenciales\nVer target actual systemctl get-default Cambiar target permanente systemctl set-default Cambiar target para sesión systemctlk isolate Ver equivalencias systemctl list-units --type=target Acceso a modo de rescate desde GRUB En el menú pulsar e y modificar la linea del kernel añadiendo:\nsingle o systemd.unit=rescue.target o systemd.unit=emergency.target ","permalink":"https://blog.thebytepathchronicles.es/posts/tema_101_arquitectura_del_sistema/","summary":"\u003ch2 id=\"1011-determinar-y-configurar-los-ajustes-del-hardware\"\u003e101.1 Determinar y configurar los ajustes del hardware\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"Arquitectura del Sistema\" loading=\"lazy\" src=\"/img/LPIC-1/Tema_101_Arquitectura_del_Sistema.webp\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eComandos básicos\u003c/strong\u003e:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003elspci\u003c/code\u003e \u0026ndash;\u0026gt; Lista dispositivos P?CI.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e-v\u003c/code\u003e detallado, \u003ccode\u003e-k\u003c/code\u003e drivers usados y disponibles.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003elsusb\u003c/code\u003e \u0026ndash;\u0026gt; Lista dispositivos USB.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003elsmod\u003c/code\u003e \u0026ndash;\u0026gt; Muestra módulos del kernel cargados. !! Lee de \u003ccode\u003e/proc/modules\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emodinfo \u0026lt;mod\u0026gt;\u003c/code\u003e \u0026ndash;\u0026gt; Información del módulo.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emodprobe \u0026lt;mod\u0026gt;\u003c/code\u003e \u0026ndash;\u0026gt;Carga un módulo y sus dependencias.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emodprobe -r \u0026lt;mod\u0026gt;\u003c/code\u003e \u0026ndash;\u0026gt; Descarga un módulo.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003einsmod \u0026lt;archivo.ko\u0026gt;\u003c/code\u003e \u0026ndash;\u0026gt; Carga módulo sin dependencias.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ermod \u0026lt;mod\u0026gt;\u003c/code\u003e\u0026ndash;\u0026gt; Descarga módulo sin resolver dependencias.\u003c/p\u003e","title":"LPIC-1 Tema 101 Arquitectura del sistema"},{"content":"Puntos de montaje El punto de montaje debe existir antes de montar el sistema de archivos.\n/media donde se montan automáticamente los disositivos extraibles. /mnt donde montaremos manualmente un sistema de archivos. Puede montarse un sistema de archivos en cualquier directorio pero la buena práctica es hacerlo en /mnt. Particiones separadas (recomendado) /boot En /boot se monta la partición de arranque que contiene archivos utilizados por el gestor de arranque. La partición de arranque es la primera del disco ocupa 1024 cilindros (528 MB.\n/boot/efi La partición del sistema EFI (ESP) almacena cargadores de arranque e imágenes del núcleo.\n/home Directorio de inicio de los usuarios del sistema.\n/var Contiene datos variables\nSWAP Se utiliza para intercambiar páginas de memoria de RAM a disco según sea necesario.\nEsta partición no puede montarse como las demás.\n\u0026lt;2GB de RAM \u0026ndash;\u0026gt; 2x cantidad de RAM en swap // x3 en hibernación. 2-8 GB de RAM \u0026ndash;\u0026gt; mismo tamaño de RAM en swap // x2 en hibernación. 8-64 GB de RAM \u0026ndash;\u0026gt; 4GB de RAM //x1.5 en hibernación. +64GB de RAM \u0026ndash;\u0026gt; 4GB de RAM // No recomendado para hibernación. LVM Facilita la gestión de las necesidades de almacenamiento.\nPV \u0026ndash;\u0026gt; Physical Volume es la unidad básica y se agrupan en VG \u0026ndash;\u0026gt; Grupos de volúmenes.\nCada volumen dentro de un grupo de volumenes se subdivide en extents \u0026ndash;\u0026gt; Physical Extends(PE).\nLos grupos de volumenes pueden subdividirse en volúmenes lógicos \u0026ndash;\u0026gt; LV.\nSi necesitamos aumentar un Volumen Lógico basta con añadir más extensiones al Grupo de Volumenes.\nTras crear un VL el sistema lo ve como un dispositivo de bloque normal en (/dev/VGNAME/LVNAME) y podrán formatearse y montarse como cualquier otro dispositivo.\n","permalink":"https://blog.thebytepathchronicles.es/posts/lpic1-102.1_particionado-del_disco_duro/","summary":"\u003ch2 id=\"puntos-de-montaje\"\u003ePuntos de montaje\u003c/h2\u003e\n\u003cp\u003eEl punto de montaje debe existir antes de montar el sistema de archivos.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e/media donde se montan automáticamente los disositivos extraibles.\u003c/li\u003e\n\u003cli\u003e/mnt donde montaremos manualmente un sistema de archivos.\u003c/li\u003e\n\u003cli\u003ePuede montarse un sistema de archivos en cualquier directorio pero la buena práctica es hacerlo en /mnt.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"particiones-separadas-recomendado\"\u003eParticiones separadas (recomendado)\u003c/h2\u003e\n\u003ch3 id=\"boot\"\u003e/boot\u003c/h3\u003e\n\u003cp\u003eEn /boot se monta la partición de arranque que contiene archivos utilizados por el gestor de arranque.\nLa partición de arranque es la primera del disco  ocupa 1024 cilindros (528 MB.\u003c/p\u003e","title":"LPIC-1(101) Particionado del disco duro"},{"content":"Despliegue Automatizado de Blog Hugo 1. Introducción: Centralización y Flujo de Despliegue He decidido centralizar mis notas y artículos técnicos en un blog alojado en mi VPS de OVHCloud. Para agilizar la publicación de mis notas en Markdown, elegí el compilador estático Hugo por su agilidad.\nMi curiosidad por la forma en que se realizan los despliegues profesionales me llevó a migrar de un flujo de trabajo manual (basado en rsync desde mi PC) a un flujo automatizado \u0026ldquo;Push-to-Deploy\u0026rdquo;. En este documento recopilaré las decisiones de arquitectura que he tomado, así como la resolución de errores.\n2. Comparación de Flujos de Despliegue El nuevo flujo de trabajo utiliza GitHub como la única Fuente de Verdad para el código fuente y el VPS como el Punto de Control de Despliegue, invirtiendo la lógica del proceso anterior.\nCaracterística Flujo Antiguo (Manual) Flujo Nuevo (Automatizado) Punto de Control PC Local (Requiere ejecutar hugo y rsync). Servidor VPS (Requiere solo un push + ejecución del script). Gestión de Permisos Sin problemas de permisos durante la copia inicial con rsync. La corrección de permisos y otros fixes están integrados en el script como medida de robustez y control total en el servidor. Evolución Flujo de desarrollo personal. Arquitectura SysOps: Listo para la automatización con Webhooks. 3. Flujo de Trabajo Final \u0026ldquo;Push-to-Deploy\u0026rdquo; La idea es que, después de editar o crear un nuevo documento y subir los cambios (git push) a GitHub, se ejecute el script en el VPS. Esto asegura que la compilación (build) y los ajustes de permisos se realicen en el propio entorno de producción.\nActualización: Ejecutar git pull origin main para sincronizar el código fuente. Compilación: Ejecutar hugo con la configuración y el tema asignados. Despliegue Atómico: Ejecutar rsync para actualizar el sitio web (/var/www/blog_hugo), manteniendo el sitio en un estado consistente. Robustez: Aplicar permisos (chown/chmod) para garantizar el Principio de Mínimo Privilegio y que Apache pueda leer el contenido sin riesgo. 4. El Script: deploy.sh #!/bin/bash # --- SCRIPT DE DESPLIEGUE AUTOMATIZADO --- # Creado para el proyecto Hugo/VPS/Git # 1. Variables de entorno REPO_ROOT=\u0026#34;/opt/hugo-source/hugo-blog-source\u0026#34; # Ruta del directorio desde donde arranca el script WEB_ROOT=\u0026#34;/var/www/blog_hugo\u0026#34; # Ruta del sitio web HUGO_BIN=\u0026#34;/usr/local/bin/hugo\u0026#34; # el path donde se instaló hugo # 2. Navega al directorio del repositorio cd \u0026#34;$REPO_ROOT\u0026#34; # 3. Pull: Obtiene la última versión del código fuente desde GitHub echo \u0026#34;Paso 1: Obteniendo la última versión del código desde GitHub...\u0026#34; git pull origin main if [ $? -ne 0 ]; then echo \u0026#34;ERROR: Falló el git pull. Verifique la conexión SSH y el Deploy Key.\u0026#34; exit 1 fi # 4. Build: Compila el sitio con Hugo (genera la carpeta \u0026#39;public\u0026#39;) echo \u0026#34;Paso 2: Compilando el sitio con Hugo...\u0026#34; \u0026#34;$HUGO_BIN\u0026#34; --config hugo.yaml --buildDrafts if [ $? -ne 0 ]; then echo \u0026#34;ERROR: Falló la compilación de Hugo. Revise el código fuente.\u0026#34; exit 1 fi # 5. Deploy: Sincroniza los archivos compilados con la carpeta de producción # El comando \u0026#39;rsync -avz --delete\u0026#39; borra todo lo que no esté en la carpeta \u0026#39;public/\u0026#39; echo \u0026#34;Paso 3: Sincronizando los archivos a la carpeta de producción ($WEB_ROOT)...\u0026#34; rsync -avz --delete public/ \u0026#34;$WEB_ROOT\u0026#34; # 5b. ¡FIX DE PERMISOS! Asigna el propietario y grupo al servidor web para garantizar lectura. echo \u0026#34;Paso 3b: Aplicando permisos de servidor web...\u0026#34; sudo chown -R debian:www-data \u0026#34;$WEB_ROOT\u0026#34; # Aseguramos que el grupo (www-data) pueda leer y atravesar directorios. sudo chmod -R g+rX \u0026#34;$WEB_ROOT\u0026#34; echo \u0026#34;Despliegue completado con éxito.\u0026#34; 5. Más Automatización: Evolución a Webhooks El plan de automatización se orienta a un verdadero flujo de Integración Continua (CI).\nEl script deploy.sh actualmente se ejecuta de forma manual, pero el siguiente paso es la migración a un activador basado en Webhooks. Esto permitirá a GitHub avisar al servidor VPS inmediatamente después de un git push, logrando un despliegue en tiempo real y eliminando la necesidad de tareas programadas (cron).\n6. Relación de Problemas Resueltos # Problema Detectado Causa Raíz Solución Implementada Lección Clave 1. Paquetes Sugeridos (27GB) apt install hugo intentó descargar dependencias innecesarias (Recommends). Descarga e instalación manual del binario de Hugo (.tar.gz) en /usr/local/bin/. Evitar dependencias excesivas de los package managers. 2. Riesgo de Clave SSH del VPS Preocupación por usar la clave SSH personal para autenticación de Git. Uso de una Deploy Key de Solo Lectura registrada solo en el repositorio de GitHub. Aplicación del Principio del Menor Privilegio para acceso de máquina a máquina. 3. Fallo de Robustez del Script El script dependía de su ubicación (path relativo) para ejecutarse correctamente. Uso de Rutas Absolutas Fijas (REPO_ROOT=\u0026quot;/opt/...\u0026quot;) para garantizar la portabilidad. Diseñar scripts para que sean autónomos y robustos. 4. Error de Compilación (Layout) Hugo no encontraba el tema ni los layouts. Se forzó la lectura de la configuración (--config hugo.yaml) y se detectó el problema de la carpeta del tema. Diagnóstico de Configuración y Sensibilidad a Dependencias. 5. Fallo del Tema en el git pull La carpeta themes/PaperMod estaba vacía porque fue marcada como un Submódulo Huérfano por Git. Eliminación del .git interno en el entorno local y se forzó el git add/commit/push completo. Dominio de la gestión de submódulos y la limpieza de referencias internas de Git. ","permalink":"https://blog.thebytepathchronicles.es/posts/despliegue_automatizado_blog/","summary":"\u003ch1 id=\"despliegue-automatizado-de-blog-hugo\"\u003eDespliegue Automatizado de Blog Hugo\u003c/h1\u003e\n\u003ch2 id=\"1-introducción-centralización-y-flujo-de-despliegue\"\u003e1. Introducción: Centralización y Flujo de Despliegue\u003c/h2\u003e\n\u003cp\u003eHe decidido centralizar mis notas y artículos técnicos en un blog alojado en mi \u003cstrong\u003eVPS de OVHCloud\u003c/strong\u003e. Para agilizar la publicación de mis notas en \u003cstrong\u003eMarkdown\u003c/strong\u003e, elegí el \u003cstrong\u003ecompilador estático Hugo por su agilidad\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eMi curiosidad por la forma en que se realizan los despliegues profesionales me llevó a migrar de un flujo de trabajo manual (basado en \u003ccode\u003ersync\u003c/code\u003e desde mi PC) a un \u003cstrong\u003eflujo automatizado \u0026ldquo;Push-to-Deploy\u0026rdquo;\u003c/strong\u003e. En este documento recopilaré las decisiones de arquitectura que he tomado, así como la resolución de errores.\u003c/p\u003e","title":"Despliegue automatizado del blog"},{"content":"Descripción rápida Con el uso diario del sistema suelen instalarse paquetes que a la larga no se van a usar más o que solo fueron pruebas puntuales. Tener esos paquetes y sus repositorios especiales, si fue necesario añadirlos alarga el proceso del update, a veces, mostrando errores si fueron instalaciones fallidas. En este apunte detallaré los pasos para eliminar algunos de estos paquetes y sus dependencias, además de los repositorios que se usaron para su instalación que no pertenecían al sistema debian por efecto.\nComprobar repositorios existentes En esta ocasión tengo claro algunos programas que quiero desinstalar: steam, lutris y wineHQ. Steam lo tengo instalado como flatpak y usa proton para compatibilidad con juegos .exe , por tanto no necesito ni Steam (paquete apt), Lutris o nada relacionado con wine. La versión Flatpak de Steam, no tiene ninguna relación con los paquetes apt, ya que se encuentra en su propio contenedor gestionado por Flatpak.\nls -l /etc/apt/sources.list.d/ -rw-r--r-- 1 root root 163 jul 24 09:10 azure-cli.sources -rw-r--r-- 1 root root 153 jul 16 08:11 extrepo_librewolf.sources -rw-r--r-- 1 root root 190 ago 1 22:19 google-chrome.list -rw-r--r-- 1 root root 134 ago 1 23:06 lutris.list -rw-r--r-- 1 root root 138 jun 15 2023 microsoft-prod.list -rw-r--r-- 1 root root 296 abr 24 2025 steam-beta.list -rw-r--r-- 1 root root 228 abr 24 2025 steam-stable.list -rw-r--r-- 1 root root 278 oct 17 15:32 vscode.sources -rw-r--r-- 1 root root 166 jun 4 23:23 winehq-bookworm.sources -rw-r--r-- 1 root root 163 jun 30 12:08 zabbix.list -rw-r--r-- 1 root root 179 jun 30 12:08 zabbix-release.list -rw-r--r-- 1 root root 179 jun 30 12:08 zabbix-tools.list -rw-r--r-- 1 root root 173 jun 30 12:08 zabbix-unstable.list Comprobamos que no hemos agregado ninguna linea con repositorios extras en /etc/apt/sources.list\nsudo nano /etc/apt/sources.list #deb cdrom:[Debian GNU/Linux 12.5.0 _Bookworm_ - Official amd64 NETINST with firmware 20240210-11:27]/ bookworm contrib main non-free-firmware deb http://deb.debian.org/debian/ bookworm main non-free-firmware deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware deb http://security.debian.org/debian-security bookworm-security main non-free-firmware deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware # bookworm-updates, to get updates before a point release is made; # see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware deb-src http://deb.debian.org/debian/ bookworm-updates main non-free-firmware # This system was installed using small removable media # (e.g. netinst, live or single CD). The matching \u0026#34;deb cdrom\u0026#34; # entries were disabled at the end of the installation process. # For information about how to configure apt package sources, # see the sources.list(5) manual. Eliminar paquetes Ya hemos comprobado los repositorios que no vamos a necesitar tras desinstalar los paquetes que no necesito. Voy a usar dpkg para encontrar todos los paquetes relacionados con los programas a desinstalar.\n-wineHQ\ndpkg -l | grep -i wine ii fonts-wine 8.0~repack-4 all Windows API implementation - fonts ii libwine:amd64 8.0~repack-4 amd64 Windows API implementation - library ii wine-stable 10.0.0.0~bookworm-1 amd64 WINE Is Not An Emulator - runs MS Windows programs ii wine-stable-amd64 10.0.0.0~bookworm-1 amd64 WINE Is Not An Emulator - runs MS Windows programs ii wine-stable-i386:i386 10.0.0.0~bookworm-1 i386 WINE Is Not An Emulator - runs MS Windows programs ii winehq-stable 10.0.0.0~bookworm-1 amd64 WINE Is Not An Emulator - runs MS Windows programs Y ahora desinstalo cada uno de los paquetes\nsudo apt purge winehq-stable wine-stable wine-stable-amd64 wine-stable-i386 libwine fonts-wine Leyendo lista de paquetes... Hecho Creando árbol de dependencias... Hecho Leyendo la información de estado... Hecho Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios. gstreamer1.0-plugins-base:i386 i965-va-driver:i386 intel-media-va-driver:i386 libabsl20220623:i386 libaom3:i386 libasound2:i386 .... .... linux-headers-6.1.0-39-amd64 linux-headers-6.1.0-39-common linux-image-6.1.0-39-amd64 mesa-va-drivers:i386 mesa-vdpau-drivers:i386 ocl-icd-libopencl1:i386 sane-airscan:i386 va-driver-all:i386 vdpau-driver-all:i386 Utilice «sudo apt autoremove» para eliminarlos. Los siguientes paquetes se ELIMINARÁN: fonts-wine* libwine* wine-stable* wine-stable-amd64* wine-stable-i386:i386* winehq-stable* 0 actualizados, 0 nuevos se instalarán, 6 para eliminar y 0 no actualizados. Se liberarán 2.185 MB después de esta operación. ¿Desea continuar? [S/n] S (Leyendo la base de datos ... 285733 ficheros o directorios instalados actualmente.) Desinstalando fonts-wine (8.0~repack-4) ... ... ... sudo apt autoremove Leyendo lista de paquetes... Hecho Creando árbol de dependencias... Hecho Leyendo la información de estado... Hecho Los siguientes paquetes se ELIMINARÁN: gstreamer1.0-plugins-base:i386 i965-va-driver:i386 intel-media-va-driver:i386 libabsl20220623:i386 libaom3:i386 libasound2:i386 ... ... 0 actualizados, 0 nuevos se instalarán, 184 para eliminar y 0 no actualizados. Se liberarán 758 MB después de esta operación. ¿Desea continuar? [S/n] S (Leyendo la base de datos ... 281930 ficheros o directorios instalados actualmente.) Desinstalando gstreamer1.0-plugins-base:i386 (1.22.0-3+deb12u5) ... ... ... Opcionalmente podemos limpiar un prefijo que instala wine en nuestro home\nrm -rf ~/.wine -Lutris\nLos mismos pasos para Lutris.\ndpkg -l | grep -i lutris ii lutris 0.5.18 all video game preservation platform Localizado el paquete a desinstalar lo purgamos\nsudo apt purge lutris Leyendo lista de paquetes... Hecho Creando árbol de dependencias... Hecho Leyendo la información de estado... Hecho Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios. python3-protobuf python3-setproctitle python3-yaml qsynth qt6-gtk-platformtheme qt6-qpa-plugins qt6-translations-l10n vulkan-tools Utilice «sudo apt autoremove» para eliminarlos. Los siguientes paquetes se ELIMINARÁN: lutris* 0 actualizados, 0 nuevos se instalarán, 1 para eliminar y 0 no actualizados. Se liberarán 4.882 kB después de esta operación. ¿Desea continuar? [S/n] S (Leyendo la base de datos ... 259029 ficheros o directorios instalados actualmente.) Desinstalando lutris (0.5.18) ... Procesando disparadores para hicolor-icon-theme (0.17-2) ... ... ... sudo apt autoremove Se liberarán 52,9 MB después de esta operación. ¿Desea continuar? [S/n] S (Leyendo la base de datos ... 258656 ficheros o directorios instalados actualmente.) Desinstalando cabextract (1.9-3) ... ... ... También podemos limpiar la configuración local de Lutris\nrm -rf ~/.config/lutris rm -rf ~/.local/share/lutris -Steam(APT)\ndpkg -l | grep -i steam rc steam-launcher 1:1.0.0.83 amd64 Launcher for the Steam software distribution service sudo apt purge steam-launcher Leyendo lista de paquetes... Hecho Creando árbol de dependencias... 50% Creando árbol de dependencias... Hecho Leyendo la información de estado... Hecho Los siguientes paquetes se ELIMINARÁN: steam-launcher* 0 actualizados, 0 nuevos se instalarán, 1 para eliminar y 0 no actualizados. Se utilizarán 0 B de espacio de disco adicional después de esta operación. (Leyendo la base de datos ... 257940 ficheros o directorios instalados actualmente.) Purgando ficheros de configuración de steam-launcher (1:1.0.0.83) ... dpkg: atención: al desinstalar steam-launcher, el directorio «/usr/lib/steam/steam_launcher» no está vacío, por lo que no se borra sudo apt autoremove Leyendo lista de paquetes... Hecho Creando árbol de dependencias... Hecho Leyendo la información de estado... Hecho 0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 0 no actualizados. Steam creó algunos directorios que ya no necesitamos\nls -l /usr/lib/steam/steam_launcher total 4 drwxr-xr-x 2 root root 4096 ago 6 18:31 __pycache__ sudo rm -rf /usr/lib/steam/ Limpiar los repositorios sudo rm /etc/apt/sources.list.d/winehq-bookworm.sources sudo rm /etc/apt/sources.list.d/lutris.list sudo rm /etc/apt/sources.list.d/steam-beta.list sudo rm /etc/apt/sources.list.d/steam-stable.list Ahora podemos actualizar los repositorios.\nsudo apt update ","permalink":"https://blog.thebytepathchronicles.es/posts/desinstalar_limpiar_debian12/","summary":"\u003ch2 id=\"descripción-rápida\"\u003eDescripción rápida\u003c/h2\u003e\n\u003cp\u003eCon el uso diario del sistema suelen instalarse paquetes que a la larga no se van a usar más o que solo fueron pruebas puntuales. Tener esos paquetes y sus repositorios especiales, si fue necesario añadirlos alarga el proceso del update, a veces, mostrando errores si fueron instalaciones fallidas.\nEn este apunte detallaré los pasos para eliminar algunos de estos paquetes y sus dependencias, además de los repositorios que se usaron para su instalación que no pertenecían al sistema debian por efecto.\u003c/p\u003e","title":"Desinstalación de paquetes APT"},{"content":"Uso de pv para comprimir Fecha: 20-10-2025\nDescripción general Cuando se comprime un archivo muy grande es útil usar pv que nos muestra un seguimiento del proceso.\nComandos utilizados sudo apt update sudo apt install pv # Puede ser que ya esté instalado en el sistema Al usar este comando junto con tar y la compresión la sintaxis cambia, ya no debemos poner la opción -f habitual porqeu vamos a redireccionar a pv de esta manera.\ntar -cJ [fichero_origen] | pv \u0026gt; [fichero_destino.tar.xz] Nos aparecerá el volumen comprimido, velocidad de compresión y una marca que se mueve que nos indica que no se ha quedado \u0026lsquo;colgado\u0026rsquo; el proceso.\nAlgo así:\n3,91GiB 0:30:03 [2,46 MiB/s] [ \u0026lt;=\u0026gt; ] ","permalink":"https://blog.thebytepathchronicles.es/posts/pv_para_comprimir/","summary":"\u003ch1 id=\"uso-de-pv-para-comprimir\"\u003eUso de pv para comprimir\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eFecha:\u003c/strong\u003e 20-10-2025\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"descripción-general\"\u003eDescripción general\u003c/h2\u003e\n\u003cp\u003eCuando se comprime un archivo muy grande es útil usar pv que nos muestra un seguimiento del proceso.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"comandos-utilizados\"\u003eComandos utilizados\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install pv \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Puede ser que ya esté instalado en el sistema\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAl usar este comando junto con tar y la compresión la sintaxis cambia, ya no debemos poner la opción -f habitual porqeu vamos a redireccionar a pv de esta manera.\u003c/p\u003e","title":"Uso de pv para comprimir"},{"content":"1. Copias de seguridad Antes de cualquier cambio, realizamos backups completos:\nArchivos de Nextcloud: sudo tar -czvf nextcloud-files-backup.tar.gz /var/www/nextcloud Base de datos (MariaDB/MySQL): mysqldump -u nextcloud_user -p nextcloud \u0026gt; nextcloud-db-backup.sql Archivos de configuración importantes: sudo cp /var/www/nextcloud/config/config.php ~/backup_config.php Advertencia: Siempre verificamos que los permisos y propietarios sean correctos antes de cualquier restauración.\n2. Activar modo mantenimiento sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on 3. Descargar nueva versión Descargamos la versión ZIP desde el sitio oficial de Nextcloud a nuestro PC local. Subimos el archivo comprimido al servidor vía scp o SFTP. scp Descargas/nextcloud-32.0.1.tar.bz2 usuario@ip/nombre-servidor:/tmp/ nextcloud-32.0.1.tar.bz2 100% 257MB 2.1MB/s 02:03 Descomprimimos en un directorio temporal: tar -xjf nextcloud-32.0.1.tar.bz2 4. Preparación de la actualización manual Movemos la instalación actual a -old: sudo mv /var/www/nextcloud /var/www/nextcloud-old Movemos la nueva versión a /var/www/nextcloud: sudo mv /tmp/nextcloud /var/www/nextcloud Copiamos la carpeta config y data de la versión anterior a la nueva: sudo cp -a /var/www/nextcloud-old/config /var/www/nextcloud/ sudo cp -a /var/www/nextcloud-old/data /var/www/nextcloud/ Ajustamos permisos: sudo chown -R www-data:www-data /var/www/nextcloud sudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \\; sudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \\; 5. Actualización de la base de datos y apps Accedemos al actualizador desde el dashboard o usamos: Advertencia: Recordar: Apache debe estar detenido antes de ejecutar el updater. sudo -u www-data php /var/www/nextcloud/occ upgrade Levantamos apache2 sudo systemctl start apache2 Durante la actualización, Nextcloud crea versiones -old_* de las carpetas de apps si es necesario. Se verifican y actualizan todas las apps instaladas. Eventuales errores menores se resolvieron revisando permisos o moviendo manualmente archivos faltantes. 6. Finalización Desactivamos modo mantenimiento( si se ha actualizado desde el dashboard, el instalador lo desactivará automáticaente) sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off Verificamos acceso al dashboard y que todas las apps funcionen correctamente. Revisión final de logs: sudo tail -f /var/www/nextcloud/updater-*/updater.log sudo tail -f /var/www/nextcloud/nextcloud.log Advertencia: Siempre conservar las carpetas *-old y .bakups hasta verificar que todo funciona, luego pueden eliminarse.\n","permalink":"https://blog.thebytepathchronicles.es/posts/actualizaci%C3%B3n_manual_nextcloud/","summary":"\u003ch2 id=\"1-copias-de-seguridad\"\u003e1. Copias de seguridad\u003c/h2\u003e\n\u003cp\u003eAntes de cualquier cambio, realizamos backups completos:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eArchivos de Nextcloud:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo tar -czvf nextcloud-files-backup.tar.gz /var/www/nextcloud\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eBase de datos (MariaDB/MySQL):\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003emysqldump -u nextcloud_user -p nextcloud \u0026gt; nextcloud-db-backup.sql\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eArchivos de configuración importantes:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo cp /var/www/nextcloud/config/config.php ~/backup_config.php\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAdvertencia: Siempre verificamos que los permisos y propietarios sean correctos antes de cualquier restauración.\u003c/p\u003e\n\u003ch2 id=\"2-activar-modo-mantenimiento\"\u003e2. Activar modo mantenimiento\u003c/h2\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"3-descargar-nueva-versión\"\u003e3. Descargar nueva versión\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDescargamos la versión ZIP desde el sitio oficial de Nextcloud a nuestro PC local.\u003c/li\u003e\n\u003cli\u003eSubimos el archivo comprimido al servidor vía scp o SFTP.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003escp Descargas/nextcloud-32.0.1.tar.bz2 usuario@ip/nombre-servidor:/tmp/\nnextcloud-32.0.1.tar.bz2                      100%  257MB   2.1MB/s   02:03\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eDescomprimimos en un directorio temporal:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003etar -xjf nextcloud-32.0.1.tar.bz2\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"4-preparación-de-la-actualización-manual\"\u003e4. Preparación de la actualización manual\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMovemos la instalación actual a -old:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo mv /var/www/nextcloud /var/www/nextcloud-old\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eMovemos la nueva versión a /var/www/nextcloud:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo mv /tmp/nextcloud /var/www/nextcloud\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eCopiamos la carpeta config y data de la versión anterior a la nueva:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo cp -a /var/www/nextcloud-old/config /var/www/nextcloud/\nsudo cp -a /var/www/nextcloud-old/data /var/www/nextcloud/\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eAjustamos permisos:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo chown -R www-data:www-data /var/www/nextcloud\nsudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \\;\nsudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \\;\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"5-actualización-de-la-base-de-datos-y-apps\"\u003e5. Actualización de la base de datos y apps\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccedemos al actualizador desde el dashboard o usamos:\nAdvertencia: Recordar: Apache debe estar detenido antes de ejecutar el updater.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo -u www-data php /var/www/nextcloud/occ upgrade\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eLevantamos apache2\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo systemctl start apache2\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eDurante la actualización, Nextcloud crea versiones -old_* de las carpetas de apps si es necesario.\u003c/li\u003e\n\u003cli\u003eSe verifican y actualizan todas las apps instaladas.\u003c/li\u003e\n\u003cli\u003eEventuales errores menores se resolvieron revisando permisos o moviendo manualmente archivos faltantes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"6-finalización\"\u003e6. Finalización\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDesactivamos modo mantenimiento( si se ha actualizado desde el dashboard, el instalador lo desactivará automáticaente)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eVerificamos acceso al dashboard y que todas las apps funcionen correctamente.\u003c/li\u003e\n\u003cli\u003eRevisión final de logs:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo tail -f /var/www/nextcloud/updater-*/updater.log\nsudo tail -f /var/www/nextcloud/nextcloud.log\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAdvertencia: Siempre conservar las carpetas *-old  y .bakups hasta verificar que todo funciona, luego pueden eliminarse.\u003c/p\u003e","title":"Actualización manual de Nextcloud"},{"content":"Descripción rápida Útil para transferir archivos entre maquinas virtuales que no tienen carpeta compartida o portapapeles activado.\nComandos usados ip a # Para conocer la ip de la máquina virtual receptora. sudo scp # Transferencia segura Averiguamos la ip de la maquina a la que queremos transferir los archivos:\n$ ip a 1: lo:..... ......... 2: enp1s0 ..... ...... ...... inet clave_privada/24 .... Desde la máquina de la que queremos enviar los archivos ejecutamos:\n$ sudo scp path_del_archivo_a_enviar usuario@ip_receptor:path_donde_guardar_el_archivo Se nos pedirá la pass del usuario remoto. Si es la primera vez nos aparecerá un mensaje que debemos aceptar:\nThis key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes # Introducimos la contraseña htop-3.4.1-2.mga10.x86_64.rpm 100% 173KB 45.5MB/s 00:00 Desde la máquina receptora podemos comprobar que se ha recibido el archivo\n","permalink":"https://blog.thebytepathchronicles.es/posts/comando_scp/","summary":"\u003ch2 id=\"descripción-rápida\"\u003eDescripción rápida\u003c/h2\u003e\n\u003cp\u003eÚtil para transferir archivos entre maquinas virtuales que no tienen carpeta compartida o portapapeles activado.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"comandos-usados\"\u003eComandos usados\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eip a \u003cspan class=\"c1\"\u003e# Para conocer la ip de la máquina virtual receptora.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo scp \u003cspan class=\"c1\"\u003e# Transferencia segura\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAveriguamos la ip de la maquina a la que queremos transferir los archivos:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ ip a\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1: lo:.....\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  .........\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2: enp1s0 .....\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ......\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ......\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  inet clave_privada/24\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ....\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eDesde la máquina de la que queremos enviar los archivos ejecutamos:\u003c/p\u003e","title":"El comando scp"},{"content":"Inicio Para verificar que todo está listo antes de empezar a trabajar ssh -T git@github.com Hi [usuario]! You\u0026#39;ve succesfully authenticated... Antes de usar los comandos git debe añadirse la clave SSH al agente (una vez por sesion). ssh-add ~/.ssh/[id de la clave privada] Si la clave tiene contraseña, deberá introducirse aqui una sola vez. Crear y guardar el archivo en el directorio original del proyecto en local. Para sincronizar con GitHub: git add . git commit -m \u0026#34;Mensaje descriptivo de los cambios realizados\u0026#34; git push origin main --- Gracias a la autenticación SSH todo funciona sin pedir usuario/contraseña. ## Ventajas de la configuración actual. - **Seguridad** : Uso de claves SSH en lugar de contraseñas. - **Comodidad** : Gnome gestiona el agente SSH, solo se debe añadir la clave al agente al iniciar sesion en la terminal - **Sin conflictos con VSCode** : VSCode usa su propio sistema de autenticación con GitHub en caso de necesitar usarlo. Si quiero usar la terminal con comandos git y editores sencillos, la terminal tiene su propia autenticación. --- ## Ejemplo de uso ```bash ssh-add ~/.ssh/[id dela clave] # Una vez por sessión cd [path al directorio local del repositorio] nano nueva-nota.md # Crear o editar archivos # Sincronizar con GitHub git add . git commit -m \u0026#34;Comentario\u0026#34; git push origin main ","permalink":"https://blog.thebytepathchronicles.es/posts/flujo-local-github/","summary":"\u003ch2 id=\"inicio\"\u003eInicio\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePara verificar que todo está listo antes de empezar a trabajar\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e ssh -T git@github.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e Hi \u003cspan class=\"o\"\u003e[\u003c/span\u003eusuario\u003cspan class=\"o\"\u003e]\u003c/span\u003e! You\u003cspan class=\"err\"\u003e\u0026#39;\u003c/span\u003eve succesfully authenticated...\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003eAntes de usar los comandos git debe añadirse la clave SSH al agente (una vez por sesion).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh-add ~/.ssh/\u003cspan class=\"o\"\u003e[\u003c/span\u003eid de la clave privada\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003eSi la clave tiene contraseña, deberá introducirse aqui una sola vez.\u003c/li\u003e\n\u003cli\u003eCrear y guardar el archivo en el directorio original del proyecto en local.\u003c/li\u003e\n\u003cli\u003ePara sincronizar con GitHub:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e git add .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e git commit -m \u003cspan class=\"s2\"\u003e\u0026#34;Mensaje descriptivo de los cambios realizados\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e git push origin main\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e ---\n Gracias a la autenticación SSH todo funciona sin pedir usuario/contraseña.\n \n## Ventajas de la configuración actual.\n \n - **Seguridad** : Uso de claves SSH en lugar de contraseñas.\n - **Comodidad** : Gnome gestiona el agente SSH, solo se debe añadir la clave al agente al iniciar sesion en la terminal\n - **Sin conflictos con VSCode** : VSCode usa su propio sistema de autenticación con GitHub en caso de necesitar usarlo. Si quiero usar la terminal con comandos git y editores sencillos, la terminal tiene su propia autenticación.\n \n ---\n \n## Ejemplo de uso\n```bash\n ssh-add ~/.ssh/[id dela clave] # Una vez por sessión\n cd [path al directorio local del repositorio]\n nano nueva-nota.md # Crear o editar archivos\n # Sincronizar con GitHub\n git add .\n git commit -m \u0026#34;Comentario\u0026#34;\n git push origin main\n\u003c/code\u003e\u003c/pre\u003e","title":"Flujo de trabajo local-github"},{"content":"Cambiar fuente de TTY en sistemas RHEL Fecha: 2025-10-14\nTema: Personalización de TTY\nDescripción rápida Al instalar Rocky 10 sin entorno de escritorio, en largas sesiones de trabajo o estudio se hace agotador leer la TTY. Pueden cambiarse la fuente y el tamaño que vienen por defecto.\nComandos usados sudo setfont solar24x32.psfu.gz # Para probar fuentes sudo nano /etc/vconsole.conf # Editar el archivo vconsole.conf sudo dracut -f \u0026amp;\u0026amp; sudo reboot # Configurar la fuente elegida por defecto Ruta a las fuentes de consola En sistemas derivados de RHEL, la localización de las fuentes de la consola es diferente que en los sistemas basados en Debian. Las podemos ver en formato comprimido en /usr/lib/kbd/consolefonts/\nLos archivos que usaré son los .psfu.gz ya que los psf.gz no interpretan muchos caracteres. Podemos probarlas con este comando\nsetfont solar24x32.psfu.gz No es necesario poner la ruta completa\nUna vez que hemos decidido la fuente y su tamaño podemos asignarla por defecto en nuestro sistema editando el archivo /etc/vconsole.conf\nEl nombre simple, sin extensiones\nTras guardar los cambios ejecutamos:\nsudo dracut -f \u0026amp;\u0026amp; sudo reboot Cuando se reinicie el sistema ya estará asignada por defecto la fuente seleccionada\n","permalink":"https://blog.thebytepathchronicles.es/posts/rocky10_cambiar_fuentes/","summary":"\u003ch1 id=\"cambiar-fuente-de-tty-en-sistemas-rhel\"\u003eCambiar fuente de TTY en sistemas RHEL\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eFecha:\u003c/strong\u003e 2025-10-14\u003cbr\u003e\n\u003cstrong\u003eTema:\u003c/strong\u003e\nPersonalización de TTY\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"descripción-rápida\"\u003eDescripción rápida\u003c/h2\u003e\n\u003cp\u003eAl instalar Rocky 10 sin entorno de escritorio, en largas sesiones de trabajo o estudio se hace agotador leer la TTY. Pueden cambiarse la fuente y el tamaño que vienen por defecto.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"comandos-usados\"\u003eComandos usados\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo setfont solar24x32.psfu.gz \u003cspan class=\"c1\"\u003e# Para probar fuentes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo nano /etc/vconsole.conf \u003cspan class=\"c1\"\u003e# Editar el archivo vconsole.conf\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo dracut -f \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e sudo reboot \u003cspan class=\"c1\"\u003e# Configurar la fuente elegida por defecto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"ruta-a-las-fuentes-de-consola\"\u003eRuta a las fuentes de consola\u003c/h2\u003e\n\u003cp\u003eEn sistemas derivados de RHEL, la localización de las fuentes de la consola es diferente que en los sistemas basados en Debian.\nLas podemos ver en formato comprimido en /usr/lib/kbd/consolefonts/\u003c/p\u003e","title":"Cambiar las fuentes de la TTY en Rocky Linux"},{"content":"Ollama en Manjaro Persistente y VS Code (con GPU AMD) Tras los dos intentos previos (Debian 12 sin éxito, y Manjaro en Live USB con errores de espacio), se abordó una tercera estrategia: instalar Manjaro XFCE de forma persistente en un pendrive de 32 GB, utilizándolo como un disco duro real para ejecutar modelos LLM con aceleración GPU en local.\nInstalación de Manjaro en el Pendrive (Modo Persistente) La clave para obtener persistencia real no era simplemente flashear la ISO, sino realizar una instalación completa del sistema en el pendrive:\nSe flasheó la ISO de Manjaro XFCE en un segundo pendrive para crear un Live USB de instalación. Se arrancó el PC desde ese Live USB e inició el instalador Calamares. Se seleccionó cuidadosamente el pendrive de 32 GB como disco de destino, exactamente como se haría con un disco interno. Resultado: Un entorno Manjaro funcional y persistente, con acceso total al almacenamiento, drivers modernos y todos los recursos del sistema, eliminando así las limitaciones del modo Live.\nOllama con Aceleración GPU Ya con Manjaro persistente corriendo, se instalaron los paquetes necesarios:\ncurl, lm_sensors, radeontop Ollama (curl -fsSL https://ollama.com/install.sh | sh) Al ejecutar ollama run phi3:mini, se detectó por fin el stack ROCm activo, habilitando el uso de la Radeon RX Vega 56 como motor de inferencia. Herramientas como radeontop y el comportamiento de los ventiladores confirmaron que la GPU se estaba usando efectivamente.\nStatus: ¡Éxito! Ollama funcionando con aceleración GPU AMD en entorno local.\nIntegración en VS Code: Chat con LLM en local Con el modelo funcionando en terminal, el siguiente objetivo fué integrarlo en el entorno de desarrollo:\nPrimer intento fallido: La extensión \u0026ldquo;CodeGPT\u0026rdquo; estaba orientada a servicios en la nube y requería autenticación en Google/GitHub. Solución adecuada: Se identificó e instaló la extensión \u0026ldquo;Continue\u0026rdquo;, compatible con servidores Ollama locales. Una vez instalada, la extensión detectó el modelo local (llama3) y pidió confirmación para usarlo. No fue necesario descargar nada más, y el chat se habilitó correctamente dentro de VS Code.\nResultado final: Chat de Llama 3 operativo en el lateral de VS Code, listo para asistir en tareas de programación.\nConclusiones Este tercer intento validó que es completamente viable ejecutar Ollama + LLM con GPU AMD en un entorno local si se cumplen ciertas condiciones:\nUtilizar una distro Linux actualizada (como Manjaro). Evitar los entornos Live para tareas pesadas y optar por instalaciones persistentes. Instalar la extensión correcta en VS Code (como Continue) que se comunique con Ollama local. Asegurar que el stack ROCm esté soportado por la tarjeta gráfica y el kernel/distribución elegida. Próximos Pasos Con Ollama y el modelo llama3 ya operativos, el siguiente paso será evaluar sus capacidades en tareas concretas: generación de código, sugerencias, refactorización ligera y análisis sintáctico, midiendo su utilidad real en proyectos web (HTML/CSS/JS).\nAdemás, se plantea explorar otros modelos más ligeros o específicos (como codegemma o starcoder) y refinar la instalación para que funcione desde SSD o incluso contenedor portátil.\n","permalink":"https://blog.thebytepathchronicles.es/posts/ollama_vs_code_manjaro_persistente/","summary":"\u003ch1 id=\"ollama-en-manjaro-persistente-y-vs-code-con-gpu-amd\"\u003eOllama en Manjaro Persistente y VS Code (con GPU AMD)\u003c/h1\u003e\n\u003cp\u003eTras los dos intentos previos (Debian 12 sin éxito, y Manjaro en Live USB con errores de espacio), se abordó una tercera estrategia: instalar \u003cstrong\u003eManjaro XFCE de forma persistente en un pendrive de 32 GB\u003c/strong\u003e, utilizándolo como un disco duro real para ejecutar modelos LLM con \u003cstrong\u003eaceleración GPU\u003c/strong\u003e en local.\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"instalación-de-manjaro-en-el-pendrive-modo-persistente\"\u003eInstalación de Manjaro en el Pendrive (Modo Persistente)\u003c/h3\u003e\n\u003cp\u003eLa clave para obtener persistencia real no era simplemente flashear la ISO, sino realizar una instalación completa del sistema en el pendrive:\u003c/p\u003e","title":"Ollama en Manjaro"},{"content":"Integrar Ollama y Modelos LLM en VS Code (con GPU AMD) En la era actual de la inteligencia artificial, integrar grandes modelos de lenguaje (LLM) directamente en el entorno de desarrollo es una capacidad cada vez más deseada. Herramientas como Ollama permiten ejecutar estos modelos de forma local, aprovechando la potencia de nuestras GPU. Sin embargo, la implementación de esta solución no siempre es un camino de rosas, especialmente cuando se trabaja con hardware AMD y distribuciones Linux específicas. Este artículo documenta los desafíos encontrados al intentar integrar Ollama y un LLM para asistencia en la codificación en VS Code, utilizando una GPU AMD Radeon RX Vega 56, en dos entornos Linux diferentes: Debian 12 y Manjaro Live USB.\nIntento 1: Debian 12 El primer intento se centró en la distribución principal: Debian 12 \u0026ldquo;Bookworm\u0026rdquo;. La instalación de Ollama en Debian es teóricamente sencilla, siguiendo los pasos oficiales.\nPasos Intentados:\nInstalación de curl: sudo apt install curl Instalación de Ollama: curl -fsSL https://ollama.com/install.sh | sh Intento de descarga y ejecución del modelo Llama 3: ollama run llama3 Problemas Encontrados:\nDurante la ejecución de ollama run llama3, el proceso fallaba con errores relacionados con la incapacidad de Ollama para detectar y utilizar correctamente la GPU AMD Radeon RX Vega 56. A pesar de que la GPU era reconocida por el sistema y los drivers amdgpu estaban cargados, Ollama requería el stack de software de ROCm (Radeon Open Compute platform) para el cómputo GPGPU (General-Purpose computing on Graphics Processing Units).\nDiagnóstico del Problema con ROCm en Debian 12:\nDrivers AMDGPU desactualizados: Debian 12, al ser una distribución de ciclo de lanzamiento \u0026ldquo;stable\u0026rdquo;, prioriza la estabilidad sobre las versiones más recientes de software. Esto se traduce en que los drivers amdgpu y el firmware asociado, aunque funcionales para el uso gráfico general, no eran lo suficientemente nuevos o completos para proporcionar el soporte de ROCm que Ollama necesita para la Vega 56. Problemas de monitoreo: Se observó que herramientas como sensors reportaban RPM de ventiladores inactivos (ej. 1300 RPM) incluso cuando los ventiladores de la GPU estaban parados, indicando una comunicación incompleta o incorrecta entre el driver y el hardware a un nivel profundo, probablemente relacionado con la falta de un stack ROCm completo. Ausencia del bundle de ROCm: Ollama no lograba descargar ni configurar el \u0026ldquo;Linux ROCm amd64 bundle\u0026rdquo; necesario, confirmando que el entorno de Debian 12 no presentaba las condiciones o dependencias que Ollama esperaba para habilitar la aceleración por GPU. Conclusión del Intento 1: La versión de ROCm y los drivers AMDGPU disponibles de forma nativa en Debian 12 no son suficientes o compatibles para el funcionamiento de Ollama con la Radeon RX Vega 56 sin una configuración manual compleja que va más allá de lo \u0026ldquo;plug-and-play\u0026rdquo;.\nIntento 2: Manjaro Live USB Dada la necesidad de un stack ROCm más reciente, se decidió probar un entorno Linux de tipo \u0026ldquo;rolling release\u0026rdquo;, como Manjaro, conocido por sus paquetes actualizados. El objetivo era verificar si la GPU funcionaría correctamente con Ollama en un Live USB antes de considerar una instalación permanente.\nPasos Intentados:\nPreparación del Live USB: Se formateó un pendrive de 32 GB con una tabla de particiones GPT en Debian 12 para asegurar una limpieza completa. Flasheo de la ISO de Manjaro (GNOME, versión mínima) al pendrive. Arranque del sistema desde el Live USB de Manjaro. Actualización de paquetes (sudo pacman -Syu) e instalación de curl, lm_sensors, radeontop. Instalación de Ollama: curl -fsSL https://ollama.com/install.sh | sh Intento de descarga y ejecución de un modelo pequeño (ollama run tinyllama o ollama run phi3:mini) para conservar espacio. Problemas Encontrados:\nDurante la instalación de Ollama (específicamente durante la descarga del \u0026ldquo;Linux ROCm amd64 bundle\u0026rdquo;), el sistema se congeló y, en un intento posterior, reportó errores de falta de espacio en disco, a pesar de que el pendrive era de 32 GB y herramientas como GParted indicaban que aún quedaban aproximadamente 27 GB sin usar.\nPosibles Causas del Error de \u0026ldquo;Falta de Espacio\u0026rdquo; en un Live USB con Espacio Suficiente:\nEste comportamiento, aparentemente contradictorio, es común en los entornos Live USB y se debe a cómo gestionan el espacio de escritura:\nSistema de Archivos iso9660 y overlayfs: Las imágenes ISO flasheadas en USB suelen crear un sistema de archivos iso9660 (de solo lectura, como un CD/DVD) para el sistema operativo base. Cualquier cambio o archivo nuevo (como la instalación de Ollama y el bundle de ROCm) se escribe en una capa de \u0026ldquo;overlay filesystem\u0026rdquo; (conocida como overlayfs). Esta capa utiliza un espacio temporal en la RAM (tmpfs) y/o una sección del USB no particionada o dedicada como un scratchpad o área de escritura. Limitaciones del overlayfs: Aunque el pendrive físico tenga mucho espacio, el tamaño de la capa de overlayfs (o el espacio de escritura disponible para el usuario) puede ser limitado. No siempre utiliza la totalidad del espacio \u0026ldquo;no asignado\u0026rdquo; del pendrive de manera directa y transparente para el usuario. Es posible que Manjaro Live haya asignado solo una cantidad fija para esta capa de escritura, que no fue suficiente para el bundle de ROCm (que puede ser de varios GB). Saturación de RAM: La instalación de paquetes grandes y complejos, como el bundle de ROCm, es una operación intensiva que requiere mucha RAM para la descompresión y procesamiento de archivos. Aunque el sistema contara con 16 GB de RAM física, el entorno Live USB, junto con aplicaciones abiertas, puede haber agotado la RAM disponible para la capa de overlayfs antes de poder volcar los datos finales al USB, lo que llevó al congelamiento y al error de espacio. La falta de un archivo/partición de swap persistente y eficiente en el Live USB agrava este problema. Fragmentación o gestión interna: Aunque GParted muestre \u0026ldquo;espacio libre\u0026rdquo;, la forma en que el Live USB gestiona internamente ese espacio o posibles fragmentaciones lógicas (aunque sea un USB recién formateado) podría haber contribuido al fallo. Conclusión del Intento 2: Aunque Manjaro mostró la capacidad de iniciar la instalación de ROCm, el entorno limitado de un Live USB (específicamente la gestión de la RAM y el espacio de escritura temporal) resultó ser un cuello de botella para la instalación de componentes tan grandes como el bundle de ROCm.\nReflexión Final Esta serie de intentos para integrar Ollama con una GPU AMD en Linux reveló varias lecciones clave:\nDrivers y ROCm: Para el machine learning y las capacidades GPGPU de las tarjetas AMD Radeon, es fundamental utilizar una distribución Linux que ofrezca drivers AMDGPU y versiones de ROCm lo suficientemente recientes y completas. Las distribuciones rolling release (como Manjaro, Arch) o aquellas con acceso a repositorios de hardware más actualizados (como Ubuntu LTS ), son preferibles a las stable como Debian 12 para estas tareas. Limitaciones de los Live USB: Los entornos Live son excelentes para probar una distribución o para tareas de rescate. Sin embargo, no son adecuados para instalaciones de software grandes y complejas que requieren mucho espacio de disco persistente o un uso intensivo de RAM, debido a cómo gestionan su espacio de escritura temporal. Prioridad del Objetivo: Aunque la tecnología de IA local es fascinante, es crucial evaluar si la funcionalidad es realmente indispensable para el propio flujo de trabajo. La estabilidad y fiabilidad de una distribución como Debian a menudo superan la necesidad de las últimas características de IA integrada en IDEs. Próximo Intento: Instalación persistente en USB Como siguiente paso, se planifica realizar una instalación completa y persistente de Manjaro (o una distribución similar) directamente en el pendrive USB de 32 GB, en lugar de usar un entorno Live USB. Esta configuración permitirá un sistema funcional con persistencia total de datos, gestión completa del espacio en disco y acceso nativo a los drivers y frameworks necesarios, facilitando la instalación y uso de Ollama con soporte para GPU AMD. Este intento se documentará en detalle una vez realizado.(como adelanto, con éste tercer intento se consigió integrar un modelo en VSCode y se llego a probar como asistente en codificación html y css ).\n","permalink":"https://blog.thebytepathchronicles.es/posts/ollama_gpu_vs_code/","summary":"\u003ch1 id=\"integrar-ollama-y-modelos-llm-en-vs-code-con-gpu-amd\"\u003eIntegrar Ollama y Modelos LLM en VS Code (con GPU AMD)\u003c/h1\u003e\n\u003cp\u003eEn la era actual de la inteligencia artificial, integrar grandes modelos de lenguaje (LLM) directamente en el entorno de desarrollo es una capacidad cada vez más deseada. Herramientas como Ollama permiten ejecutar estos modelos de forma local, aprovechando la potencia de nuestras GPU. Sin embargo, la implementación de esta solución no siempre es un camino de rosas, especialmente cuando se trabaja con hardware AMD y distribuciones Linux específicas. Este artículo documenta los desafíos encontrados al intentar integrar Ollama y un LLM para asistencia en la codificación en VS Code, utilizando una GPU AMD Radeon RX Vega 56, en dos entornos Linux diferentes: Debian 12 y Manjaro Live USB.\u003c/p\u003e","title":"Integración de un modelo LLM con VSCode en Linux"},{"content":"Estructura del directorio del proyecto local Servidor_Byte_Path/ ├── articulos_html ├── articulos_md │ ├── cap01_preparacion_entorno.md │ ├── cap02_seguridad_basica.md │ ├── cap03_servidor_web_apache.md │ ├── cap04_contenido_web_estatico.md │ ├── cap05_organizacion_y_multimedia.md │ ├── cap06_automatizacion_basica.md │ ├── cap07_seguridad_y_logs.md │ ├── cap08_despliegue_en_la_nube.md │ └── cap09_mantenimiento_y_respaldo.md ├── control │ └── control_imagenes.ods ├── documentacion │ ├── bitacora.md │ └── emojis.md ├── herramientas ├── imagenes │ ├── optimizadas │ └── originales │ └── bit-01.png ├── logs └── portada Nota: En principio preparé esta estructura para organizarme mejor ya que se usan capturas de pantalla que hay que redimensionar y optimizar a webp, algunos scripts para automatizar algunas tareas y pensando en que segun aumentasen los articulos y archivos podría ser dificil encontrar muchas cosas. Esta estructura la usé al principio en mi entorno local, luego hice algunas pruebas en un servidor web Apache2 en Debian 12, instalados en un mini pc con bajos recursos con el que cuento en casa, así iba ensayando y probando el despliegue de la web en ese servidor. En este servidor ya no usé algunas carpetas, me centré en las que se utilizaban exclusivamente para la web. Más adelante me atreví con un servidor privado virtual en OVHCloud. En este punto había decidido optimizar el rendimiento de la web usando muy pocas imágenes, exclusivamente las portadas de cada capítulo, alguna miniatura y logo con lo que se simplificó aun más la estructura del directorio en /var/www/bytepath . Simplemente colgaban del directorio raiz los archivos html y css con una carpeta para imágenes de portadas (con sus dimensiones para diseño responsivo).\nbytepath │ ├── README.md │ ├── apache2-seg.html │ ├── apache2.html │ ├── bitacora.html │ ├── estilos.css │ ├── imagenes │ │ ├── portadas │ │ │ ├── A1C0N00-background-1200px.webp │ │ │ ├── A1C0N00-background-1800px.webp ............ │ │ │ ├── portada_index_800px.webp │ │ │ └── redimensionar_portadas.sh │ │ └── varios │ │ ├── candado_verde.svg │ │ ├── cuadrado_verde.svg │ │ ├── escudo_azul.ico │ │ └── escudo_azul.svg │ ├── index.html │ ├── instalacion_servidor.html │ ├── intro.html │ ├── proyecto.html │ └── seguridad_basica.html ├── bytepath_chronicles_backup_20250618.tar.gz ├── bytepath_chronicles_backup_20250619.tar.gz ├── bytepath_chronicles_backup_20250621.tar.gz ├── crear_copia_seguridad.sh ...... Nota: Cuento con un script para redimensionar y convertir las portadas y otro para realizar copias comprimidas manualmente. Trabajar con SSHFS, montando este directorio en un directorio local y poder usar cualquier herramienta gráfica para editar archivos que están en un servidor web remoto sin entorno de escritorio me ha facilitado mucho el trabajo. En el momento de editar esta parte estoy descubriendo Github y seguramente termine adaptándome a otros flujos de trabajo más abiertos a colaboraciones y trabajo en equipo.\nInstalación de Debian 12 Usaré un mini-PC para el entorno de pruebas, una vez todo funciones correctamente se migrará a una instancia virtual en la nube, GCP o AWS.\nLa instalación del sistema se realizó desde un USB, con Debian 12 sin entorno de escritorio. Una vez completada, lo primero fue poner el entorno en marcha:\nActualización inicial del sistema. root@1-bytepath:~# apt update root@1-bytepath:~# apt upgrade Instalación de sudo y adición del usuario rubenrv al grupo de administradores: root@1-bytepath:~# apt install sudo root@1-bytepath:~# usermod -aG sudo rubenrv Tras reiniciar, verifiqué con id rubenrv que el cambio se aplicó correctamente. root@1-bytepath:~# id rubenrv uid=1000(rubenrv) gid=1000(rubenrv) grupos=1000(rubenrv),24(cdrom),25(floppy),27(sudo)... Luego instalé el servidor SSH (openssh-server) y comprobé que estuviera activo y funcionando. rubenrv@1-bytepath:~$ sudo apt install ssh-server rubenrv@1-bytepath:~$ sudo systemctl status ssh ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled) Active: active (running) since Wed 2025-06-25 23:25:44 CEST; 14min ago ...... Todo listo para administrar el sistema de forma remota.\nUsuario, hostname y red Hostname: 1-bytepath Usuario: rubenrv IP: 192.168.8.150/24 Red Local 192.168.8.0/24\nAcceso remoto con SSH Una vez verificado que el servicio SSH está activo y permite conexiones, es momento de reforzar la seguridad del sistema. Para ello, configuraremos el acceso únicamente mediante clave pública y desactivaremos el acceso por contraseña.\nGenerar clave SSH (desde el cliente) rubenrv@debian:~$ ssh-keygen -t ed25519 -C \u0026#34;rubenrv@bytepath\u0026#34; -t ed25519: indica que se usará el algoritmo de clave ed25519. -C \u0026ldquo;rubenrv@bytepath\u0026rdquo;: es un comentario opcional para ayudar a identificar la clave. Este comando creará dos archivos, la clave privada que no se compartirá nunca y la pública que copiaremos en el servidor.\nCopiar la clave pública en el servidor rubenrv@debian:~$ ssh-copy-id rubenrv@192.168.8.150 Esto creará el archivo ~/.ssh/authorized_keys en el servidor (si no existe) y añadirá la clave pública.\nComprobar el acceso con la clave y sin pass. rubenrv@debian:~$ ssh rubenrv@192.168.8.150 Linux 1-bytepath 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Jun 25 23:38:34 2025 from 192.168.8.149 rubenrv@1-bytepath:~$ Eliminar acceso al servidor con contraseña. rubenrv@1-bytepath:~$ sudo nano /etc/ssh/sshd_config # CONTENIDO DEL ARCHIVO /etc/ssh/sshd_config (solo las partes relevantes) # [...] otras configuraciones [...] # Authentication: #LoginGraceTime 2m #PermitRootLogin prohibit-password #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 # To disable tunneled clear text passwords, change to no here! PasswordAuthentication no # \u0026lt;-- CAMBIAR DE \u0026#39;yes\u0026#39; A \u0026#39;no\u0026#39;, O AÑADIR ESTA LÍNEA #PermitEmptyPasswords no # [...] más configuraciones [...] Con esta configuración evitamos que se nadie pueda intentar conectarse con una pass. La única opción válida es usar el equipo qeu tenga la clave privada.\nPor último reiniciamos el servicio ssh y comprobamos el estado del servicio.\nrubenrv@1-bytepath:~$ sudo systemctl restart ssh rubenrv@1-bytepath:~$ sudo systemctl status ssh [sudo] contraseña para rubenrv: ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled) Active: active (running) since Wed 2025-06-25 23:25:44 CEST; 32min ago Docs: man:sshd(8) ..... Nota: En Debian y derivados, el servicio del servidor SSH se llama ssh. Sin embargo, sshd también funciona como alias y ambos comandos reinician el servicio correctamente:\nrubenrv@1-bytepath:~$ sudo systemctl restart ssh rubenrv@1-bytepath:~$ sudo systemctl restart sshd Esto puede variar en otras distribuciones, donde sshd suele ser el nombre más común del servicio.\nPaquetes básicos Una vez completada la instalación de Debian 12 y configurado el usuario principal, se procede a instalar una serie de herramientas esenciales que facilitarán la administración del servidor y prepararán el entorno para tareas futuras. Algunas herramientas ya se han utilizado antes como sudo u openssh-server.\nActualización del sistema rubenrv@1-bytepath:~$ sudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y Paquetes de administración rubenrv@1-bytepath:~$ sudo apt install sudo net-tools curl wget htop bash-completion sudo: para otorgar permisos administrativos. net-tools: utilidades como ifconfig. curl y wget: herramientas para descargar archivos desde la terminal. htop: monitor interactivo de procesos. bash-completion: autocompletado útil en terminal. lm-sensors: útil para monitorear la salud del equipo. fancontrol: permite controlar la velocidad de los ventiladores. strace: rastrea las llamadas al sistema realizadas por un proceso.\nAcceso remoto por SSH rubenrv@1-bytepath:~$sudo apt install openssh-server rubenrv@1-bytepath:~$sudo systemctl enable ssh rubenrv@1-bytepath:~$sudo systemctl start ssh rubenrv@1-bytepath:~$sudo systemctl status ssh Servidor web Apache (instalación) rubenrv@1-bytepath:~$sudo apt install apache2 La configuración del servidor web se tratará en el **Capitulo 03-Servidor Web Apache.\nCierre del capítulo Resumen rápido\nInstalación mínima de Debian 12 sin entorno gráfico. Configuración de acceso remoto vía SSH con autenticación con clave. Estructuración del entorno de trabajo y directorios del proyecto. Instalación de herramientas administrativas básicas para monitorización y gestión del sistema. Estado actual del entorno El servidor local está operativo, accesible por SSH, con un entorno organizado y preparado para comenzar con la configuración de seguridad.\n¿Y ahora qué? En el próximo capítulo se abordarán las medidas básicas de protección como configurar cortafuegos.\n","permalink":"https://blog.thebytepathchronicles.es/posts/cap01_preparacion_entorno/","summary":"\u003ch2 id=\"estructura-del-directorio-del-proyecto-local\"\u003eEstructura del directorio del proyecto local\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-plaintext\" data-lang=\"plaintext\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eServidor_Byte_Path/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── articulos_html\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── articulos_md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap01_preparacion_entorno.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap02_seguridad_basica.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap03_servidor_web_apache.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap04_contenido_web_estatico.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap05_organizacion_y_multimedia.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap06_automatizacion_basica.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap07_seguridad_y_logs.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cap08_despliegue_en_la_nube.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── cap09_mantenimiento_y_respaldo.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── control\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── control_imagenes.ods\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── documentacion\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── bitacora.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── emojis.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── herramientas\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── imagenes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── optimizadas\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── originales\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│       └── bit-01.png\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── logs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── portada\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eNota:\u003c/strong\u003e\nEn principio preparé esta estructura para organizarme mejor ya que se usan capturas de pantalla que hay que redimensionar y optimizar a webp, algunos scripts para automatizar algunas tareas y pensando en que segun aumentasen los articulos y archivos podría ser dificil encontrar muchas cosas. Esta estructura la usé al principio en mi entorno local, luego hice algunas pruebas en un servidor web Apache2 en Debian 12, instalados en un mini pc con bajos recursos con el que cuento en casa, así iba ensayando y probando el despliegue de la web en ese servidor. En este servidor ya no usé algunas carpetas, me centré en las que se utilizaban exclusivamente para la web. Más adelante me atreví con un servidor privado virtual en OVHCloud. En este punto había decidido optimizar el rendimiento de la web usando muy pocas imágenes, exclusivamente las portadas de cada capítulo, alguna miniatura y logo con lo que se simplificó aun más la estructura del directorio en /var/www/bytepath . Simplemente colgaban del directorio raiz los archivos html y css con una carpeta para imágenes de portadas (con sus dimensiones para diseño responsivo).\u003c/p\u003e","title":"Preparación del entorno del servidor web"},{"content":"Introducción a la Seguridad en Servidores Web Cuando se trata de configurar un servidor web, la seguridad es uno de los aspectos más importantes a considerar. Un servidor web expuesto a internet puede ser vulnerable a diversos tipos de ataques, como intrusiones, denegación de servicio, robo de información, entre otros. Por lo tanto, es crucial implementar medidas de seguridad sólidas desde el inicio para proteger nuestra infraestructura y los datos que aloja.\nActualización del sistema operativo y software: Fundamental para corregir vulnerabilidades conocidas y evitar que sean explotadas por atacantes. Confguración segura del servidor web: Ajustar permisos de archivos, puertos abiertos y módulos habilitados puede ayudar a reducir la superficie de ataque. Gestión de cuentas y permisos: Establecer políticas de contraseñas seguras, limitar el acceso a cuentas privilegiadas y otorgar permisos mínimos a los usuarios para prevenir accesos no autorizados. Monitorización y registro de actividad: Configurar un sistema de registro eficaz y monitorizar regularmente los registros puede ayudarnos a detectar y responder a posibles incidentes de seguridad. Uso de herramientas de seguridad: Firewalls, IDS y herramientas de escaneo de vulnerabilidades pueden complementar nuestra seguridad. En este capítulo, nos enfocaremos en la instalación y configuración de UFW(Uncomplicated Firewall) que nos ayudará a establecer reglas de seguridad básica para el servidor web.\nUFW Instalación de UFW Actualizamos el sistema e instalamos ufw. Habilitamos UFW Tal como nos advierte la salilda del comando, corremos el riesgo de que el firewall deniegue nuestra actual conexión ssh, lo que nos dejaría sin posibilidad de acceder remotamene al equipo. Antes de habilitar UFW debemos asegurarnos de que el puerto 22 esté abierto. Y ahora si, lo habilitamos. Y podemos comprobar que el puerto 22 está escuchando mi conexión. Reglas mínimas Es el momento de configura unas reglas mínimas. Permitiré el acceso remoto ssh, que ya configuramos para que solo permita conectarse con mi clave privada, permitiremos el 80 para HTTP y 443 para HTTPS. También necesito el sevicio SFTP para transmitir archivos pero usa el mismo puerto de SSH. Con netstat podemos ver los puertos abiertos actualmente. Verificación del estado Estado general de firewall Reglas específicas Fail2ban Introducción a Fail2ban Fail2ban es una herramienta que actúa como sistema de detección y prevención de intrusiones protegiendo nuestro servidor contra:\nAtaques de fuerza bruta contra SSH. Scans maliciosos. Intentos de explotación de vulnerabilidades. Instalación básica Configuración personalizada Este paso es importante hacerlo para que cuando se actualice Fail2ban no se sobreescriba nuestra configuración. Creando el fichero jail.local, fail2ban tendrá preferencia por esta configuración en lugar de jail.conf\nTuve problemas porque no tuve en cuenta que Debian 12 no guarda los log de ssh como espera fail2ban que sería en /var/log/auth.log sino que Debian usa systemd-journald como sistema de logs por defecto. Esto provocaba errores y hay que configurarlo especialmente tal como mostraré en las siguientes secciones. Aquí lo personalizamos para SSH, podemos crear nuevas Jails para otros servicios como apache2.\nHabilitar y arrancar el servicio Verificar que la jail sshd está activa Protección para Apache Si nuestro servidor web tiene un sitio público, Apache está constantemente recibiendo tráfico como:\nBots maliciosos. Scanners automáticos. Fuerza bruta contra formularios de login. Exploits conocidos contra rutas como /phpmyadmin, /wp-login.php, etc. Aunque de momento estamos en una red local, voy a ir preparándome para estar listo en el momento de migrar a internet.\nCrearé tres jails para apache en mi archivo jail.local.\n🔹 apache-auth Detecta múltiples errores de autenticación HTTP. Protege paneles admin protegidos por .htaccess, por ejemplo. 🔹 apache-noscript Detecta intentos de acceder a scripts no permitidos (común en ataques automáticos). 🔹 apache-badbots Detecta bots que usan User-Agents sospechosos conocidos por comportamiento malicioso. Monitorización y gestión Monitoreo básico de UFW Monitoreo básico de Fail2ban Pruebas de funcionamiento Tengo una maquina virtual Kali que usaré para intentar loguearme repetidas veces hasta que Fail2ban la bloquee. Con esto comprobaremos que no pueden hacer intentos indefinidos de logeo a mi servidor.\nSobre la protección a Apache2, de momento no voy a hacer más pruebas porque siendo una web estática sin formularios y logins, no tiene sentido probar protecciones a esas características. Sin embargo habría que añadir alguna configuración más a la seguridad básica.\nEliminar o sustituir página por defecto de Apache Configurar Apache para que no muestre info de su versión Habilitar esta configuración sudo a2enconf security.conf Notas para producción Cuando migre el servidor web a la nube debería cambiar el puerto 22 por defecto para ssh por otro. Debo recordar que GCP tiene su propio firewal(finalmente acabé contratando con OVHCloud un Servidor Privado Virtual), deberé informarme a fondo de esto pues podría bloquearme sin querer. En entornos Cloud añadir mi IP pública a ignoreip y configurar optimizaciones. De momento no he configurado Apache para generar tráfico cifrado HTTPS\nCierre del capítulo Resumen rápido\nImplementamos UFW como cortafuegos básico para el servidor. Configuramos reglas mínimas de seguridad (SSH, HTTP, HTTPS). Verificamos el estado del firewall y puertos abiertos. Aprendimos sobre consideraciones clave para entornos de producción. Instalamos y configuramos Fail2ban y comprobamos su funcionamiento. Estado actual del entorno El servidor ahora tiene:\nFirewall básico activado (UFW) con puertos esenciales abiertos. Fail2ban instalado y configurado. SSH configurado solo con autenticación por clave pública. Servicios web (HTTP/HTTPS) accesibles pero protegidos. ¿Y ahora qué? En el próximo capítulo nos enfocaremos en la configuración de apache2.\n","permalink":"https://blog.thebytepathchronicles.es/posts/cap02_seguridad_basica/","summary":"\u003ch2 id=\"introducción-a-la-seguridad-en-servidores-web\"\u003eIntroducción a la Seguridad en Servidores Web\u003c/h2\u003e\n\u003cp\u003eCuando se trata de configurar un servidor web, la seguridad es uno de los aspectos más importantes a considerar. Un servidor web expuesto a internet puede ser vulnerable a diversos tipos de ataques, como intrusiones, denegación de servicio, robo de información, entre otros. Por lo tanto, es crucial implementar medidas de seguridad sólidas desde el inicio para proteger nuestra infraestructura y los datos que aloja.\u003c/p\u003e","title":"Seguridad básica"}]