Categoría: Pildoras

  • Operación MONCLOA.GIT — El Ministerio de las Promesas Imposibles

    Operación MONCLOA.GIT — El Ministerio de las Promesas Imposibles

    Introducción: bienvenidos al ministerio

    El Gobierno de la República de Gitlandia acaba de crear el Ministerio de las Promesas Imposibles, una institución encargada de desarrollar un programa electoral que cambiará constantemente.

    El problema es que cada vez que un político cambia de opinión, los funcionarios sobrescriben los documentos anteriores. Nadie sabe qué prometieron ayer, quién modificó una propuesta o cuándo desapareció una medida electoral.

    El ministro de Tecnología ha decidido contratar a un administrador de sistemas para solucionar el problema: tú.

    Tu misión será poner en funcionamiento un sistema de control de versiones que permita conservar todas las promesas electorales, identificar sus modificaciones, recuperar propuestas anteriores y publicar el programa en Internet.

    A lo largo de la práctica se producirán varios incidentes: promesas incumplidas, presupuestos disparatados, borrados accidentales y hasta un intento de manipulación del programa electoral.

    Toda la actividad es ficticia. La sátira se dirige a situaciones políticas generales, sin necesidad de utilizar partidos o políticos reales.

    Objetivos de aprendizaje

    Al terminar, cada alumno deberá ser capaz de:

    1. Instalar y configurar Git desde la terminal.
    2. Crear e inicializar un repositorio local.
    3. Comprender el directorio de trabajo, el área de preparación (staging) y los commits.
    4. Añadir, modificar, eliminar y recuperar archivos.
    5. Consultar el historial y comparar versiones.
    6. Utilizar .gitignore para excluir determinados archivos.
    7. Crear y utilizar ramas individualmente.
    8. Trabajar con un repositorio remoto en GitHub.
    9. Subir, descargar y sincronizar cambios.
    10. Clonar un repositorio y continuar trabajando sobre él.

    En esta práctica cada estudiante trabaja individualmente. Las colaboraciones, los conflictos entre usuarios y las pull requests quedarán para la segunda práctica.

    Antes de comenzar: comprender Git

    Git es un sistema de control de versiones distribuido. Permite registrar el estado de los archivos de un proyecto en diferentes momentos y recuperar su historial.

    Git no es lo mismo que GitHub: Git funciona localmente y no necesita Internet. GitHub es un servicio que puede alojar repositorios remotos y facilitar el intercambio de proyectos.

    Esquema conceptual simplificado: primero se modifican archivos, después se seleccionan los cambios y finalmente se registran mediante un commit.

    Fase 1. Preparación del entorno

    Paso 1. Comprobar si Git está instalado

    Abre una terminal de tu máquina virtual Ubuntu y ejecuta:

    git --version

    Si está instalado, aparecerá algo parecido a:

    git version 2.x.x

    Si aparece command not found, instala Git:

    sudo apt update
    sudo apt install git -y

    Después, verifica nuevamente su versión.

    Pregunta para el alumno: ¿Por qué crees que Git puede funcionar sin conexión a Internet?

    Paso 2. Configurar nuestra identidad

    Cada vez que realicemos un commit, Git registrará la identidad del autor.

    Configura tu nombre y correo electrónico:

    git config --global user.name "Tu Nombre"
    git config --global user.email "tu-correo@example.com"

    Utiliza un correo propio o el correo privado que GitHub te proporcione para los commits.

    Consulta tu configuración:

    git config --global --list

    Y configura la rama inicial predeterminada:

    git config --global init.defaultBranch main

    Importante: esta configuración es global para tu usuario de Linux. No es necesario repetirla para cada proyecto.

    Paso 3. Crear nuestro espacio de trabajo

    Crearemos una carpeta donde almacenar nuestros proyectos.

    mkdir -p ~/proyectos-git
    cd ~/proyectos-git
    
    mkdir ministerio-promesas
    cd ministerio-promesas

    Comprueba dónde estás:

    pwd

    Visualiza el contenido:

    ls -la

    El directorio debería estar vacío.

    Paso 4. Inicializar un repositorio

    Ejecuta:

    git init -b main

    Acabamos de convertir una carpeta normal en un repositorio Git.

    Compruébalo:

    ls -la

    Verás una carpeta oculta llamada .git.

    Esta carpeta contiene la información necesaria para que Git pueda gestionar el repositorio: objetos, referencias, configuración e historial.

    No es necesario modificar manualmente su contenido.

    Ahora ejecuta:

    git status

    Debería aparecer un mensaje parecido a:

    On branch main
    
    No commits yet
    
    nothing to commit

    Primer reto: ¿Qué sucedería si eliminásemos la carpeta .git? ¿Desaparecerían los archivos de nuestro proyecto? ¿Y el historial?

    Fase 2. Primer programa electoral

    Paso 5. Crear el documento oficial

    El presidente de Gitlandia ha anunciado el primer programa electoral:

    «Prometemos que nadie volverá a quedarse sin batería en el móvil, que todos los lunes serán festivos y que los exámenes se resolverán por votación popular».

    Vamos a escribir estas propuestas en un archivo Markdown.

    Ejecuta:

    nano programa.md

    Introduce el siguiente contenido:

    # Programa Electoral de Gitlandia
    
    ## Elecciones Generales
    
    Presidente: Don Commit Permanente
    
    ## Promesas oficiales
    
    1. WiFi gratis en todo el país.
    2. Los lunes serán festivos.
    3. Cada ciudadano tendrá un robot asistente.
    4. Los exámenes serán voluntarios.
    5. Las impresoras funcionarán siempre.
    
    ## Lema
    
    "Prometemos hasta que se llene el disco duro".

    Guarda con Ctrl + O, pulsa Intro y cierra con Ctrl + X.

    Comprueba el contenido:

    cat programa.md

    Paso 6. Consultar el estado del repositorio

    Ejecuta:

    git status

    Aparecerá el archivo programa.md como archivo no seguido (untracked).

    Esto significa que Git todavía no está controlando sus versiones.

    Ahora ejecuta:

    git add programa.md
    git status

    El archivo aparecerá preparado para incluirse en un commit.

    Acabas de añadirlo al área de preparación, también llamada staging area.

    Paso 7. Registrar el primer commit

    Un commit es un registro de una versión del proyecto, acompañado de información sobre su autor, fecha y mensaje.

    Ejecuta:

    git commit -m "Primer programa electoral de Gitlandia"

    Consulta el historial:

    git log

    Verás una entrada con un identificador, autor, fecha y mensaje.

    También puedes obtener una versión resumida:

    git log --oneline

    Comprobación: el profesor debe poder identificar el primer commit y comprobar que el repositorio está limpio mediante git status.

    Fase 3. Primer escándalo: las promesas cambian

    Paso 8. Modificar una promesa

    El ministro de Economía acaba de descubrir que los lunes festivos son caros.

    El Gobierno ha decidido modificar la segunda promesa:

    Antes: Los lunes serán festivos.

    Después: Los lunes serán festivos únicamente si no hay trabajo pendiente.

    Edita el archivo:

    nano programa.md

    Modifica esa línea, guarda el archivo y ejecuta:

    git diff

    Git mostrará los cambios respecto de la versión preparada o registrada anteriormente.

    Normalmente, las líneas eliminadas aparecen con - y las nuevas con +.

    Ejemplo de comparación

    – 2. Los lunes serán festivos.

    + 2. Los lunes serán festivos únicamente si no hay trabajo pendiente.

    Ahora registra la modificación:

    git add programa.md
    
    git commit -m "Economía limita los lunes festivos"

    Comprueba:

    git log --oneline

    Ya deberías tener dos commits.

    Paso 9. Segunda modificación: llega la oposición

    La oposición acusa al Gobierno de hacer promesas imposibles. El presidente responde anunciando nuevas medidas.

    Añade al final de programa.md:

    ## Nuevas medidas
    
    6. Un unicornio eléctrico para cada familia.
    7. Internet gratuito incluso dentro de los túneles.
    8. Los atascos serán declarados ilegales.
    9. Se eliminarán los errores 404 por decreto.

    Antes de confirmar, ejecuta:

    git status
    git diff

    Añade el archivo al staging:

    git add programa.md

    Ahora observa qué se va a registrar:

    git diff --staged

    Finalmente:

    git commit -m "Ampliación del programa con medidas revolucionarias"

    Reto: interpreta lo que estás viendo

    Responde en tu documentación: ¿qué diferencia existe entre git diff y git diff --staged? ¿Por qué puede interesarnos seleccionar los cambios antes de confirmarlos?

    Fase 4. El presupuesto secreto

    Paso 10. Crear varios documentos

    El Ministerio comienza a tener departamentos.

    Crea la estructura:

    mkdir -p economia comunicacion secretos

    Crea un archivo de presupuesto:

    cat > economia/presupuesto.txt <<'EOF'
    PRESUPUESTO GENERAL DE GITLANDIA
    
    WiFi nacional: 500 millones
    Unicornios eléctricos: 800 millones
    Robot por ciudadano: 2000 millones
    Publicidad institucional: 9000 millones
    
    Total: pendiente de calcular
    EOF

    Ahora un comunicado oficial:

    cat > comunicacion/nota.txt <<'EOF'
    COMUNICADO DEL GOBIERNO
    
    El presupuesto está perfectamente controlado.
    Las calculadoras de la oposición están manipuladas.
    EOF

    Y un documento que no debería publicarse:

    echo "Clave ficticia de demostración: VOTO123" > secretos/claves.txt

    Paso 11. Evitar archivos innecesarios con .gitignore

    Los archivos excluidos por .gitignore no se añadirán automáticamente al control de versiones cuando todavía no están siendo seguidos.

    Crea:

    nano .gitignore

    Introduce:

    # Documentos internos ficticios
    secretos/
    
    # Archivos temporales
    *.tmp
    
    # Copias de seguridad
    *.bak
    
    # Configuraciones locales
    .env

    Comprueba:

    git status

    El archivo dentro de secretos/ no aparecerá como pendiente de seguimiento.

    Puedes verificar la regla:

    git check-ignore -v secretos/claves.txt

    Ahora registra los documentos públicos y las reglas de exclusión:

    git add .gitignore economia/ comunicacion/
    
    git status
    
    git commit -m "Creación de departamentos y presupuesto oficial"

    Advertencia: .gitignore no convierte una contraseña en segura. No debe utilizarse Git para publicar secretos. Si alguna credencial real se ha incluido en un commit, ignorarla posteriormente no elimina el secreto del historial.

    Fase 5. Crisis institucional: recuperar los errores

    Esta fase es especialmente importante: aprenderemos a solucionar problemas sin destruir nuestro trabajo.

    Paso 12. Recuperar un archivo modificado

    Un funcionario decide cambiar el presupuesto utilizando un procedimiento bastante cuestionable:

    echo "TODO EL PRESUPUESTO PARA HELADOS" > economia/presupuesto.txt

    Comprueba el resultado:

    cat economia/presupuesto.txt
    git diff

    El ministro entra en pánico.

    Necesitamos recuperar la última versión confirmada del archivo.

    Ejecuta:

    git restore economia/presupuesto.txt

    Vuelve a comprobar:

    cat economia/presupuesto.txt

    El presupuesto original debería haber regresado.

    git restore ha descartado la modificación no registrada. Si hubiésemos querido conservarla, primero tendríamos que haberla guardado en otro lugar.

    Paso 13. Recuperar un archivo eliminado

    Un nuevo ministro decide que la mejor manera de evitar las críticas es eliminar los comunicados.

    Ejecuta:

    rm comunicacion/nota.txt

    Comprueba:

    git status

    El archivo aparecerá como eliminado.

    Recupéralo:

    git restore comunicacion/nota.txt

    Comprueba que existe nuevamente:

    ls comunicacion/
    cat comunicacion/nota.txt

    Paso 14. Quitar un cambio del staging

    En esta ocasión, el funcionario ha preparado accidentalmente un cambio.

    echo "Impuesto por respirar aire premium" >> economia/presupuesto.txt
    
    git add economia/presupuesto.txt
    git status

    El archivo ya está en staging.

    Para retirarlo sin perder la modificación:

    git restore --staged economia/presupuesto.txt

    Comprueba:

    git status
    cat economia/presupuesto.txt

    La modificación continúa en el archivo, pero ya no está preparada para un commit.

    Finalmente, descarta el experimento:

    git restore economia/presupuesto.txt

    Diferencia esencial

    ComandoResultado
    git restore archivoDescarta los cambios locales no preparados en ese archivo
    git restore --staged archivoLo retira del staging, conservando el contenido
    git add archivoPrepara cambios para el próximo commit
    git commitRegistra un nuevo punto del historial

    Fase 6. La hemeroteca: Git nunca olvida

    Paso 15. Investigar el historial de promesas

    Un periodista solicita el programa electoral original para comprobar qué decía el Gobierno antes de modificar sus promesas.

    Ejecuta:

    git log --oneline

    El resultado será parecido a este (los identificadores serán diferentes):

    e3a45b1 Creación de departamentos y presupuesto oficial
    b729c81 Ampliación del programa con medidas revolucionarias
    a16d729 Economía limita los lunes festivos
    c871a93 Primer programa electoral de Gitlandia

    Cada línea representa un commit.

    Consulta los detalles del último:

    git show HEAD

    HEAD indica el commit actual de nuestra rama.

    Consulta la versión anterior:

    git show HEAD~1

    También podemos investigar los cambios de un archivo:

    git log --oneline -- programa.md

    Y comprobar cómo era en el primer commit. En nuestro caso, hemos realizado cuatro commits, por lo que:

    git show HEAD~3:programa.md

    Atención: HEAD~3 significa retroceder tres commits desde el actual, no necesariamente acceder siempre al primero. En esta práctica funciona si se ha seguido exactamente la secuencia.

    Paso 16. Comparar dos momentos de la historia

    Consulta el historial para localizar los identificadores de dos commits.

    git log --oneline

    Después ejecuta, sustituyendo los identificadores:

    git diff ID_ANTIGUO ID_NUEVO -- programa.md

    Por ejemplo, si los identificadores fueran c871a93 y b729c81:

    git diff c871a93 b729c81 -- programa.md

    Con este procedimiento puedes demostrar que el Gobierno cambió sus promesas.

    Investigación periodística

    Elabora un pequeño informe respondiendo: ¿cuál fue la promesa modificada? ¿En qué commit ocurrió? ¿Qué mensaje acompañaba al cambio? ¿Cómo puedes recuperar el contenido de la versión original sin modificar el proyecto actual?

    Fase 7. El Gobierno comete un error histórico

    Ahora vamos a ver otra de las funciones más útiles de Git: revertir un commit completo.

    Paso 17. Registrar una medida equivocada

    El presidente firma accidentalmente un decreto que establece:

    «Todos los ciudadanos deberán pagar una cuota de 100 euros por utilizar el teclado de su ordenador».

    Añade esta línea al programa electoral:

    echo "10. Impuesto de 100 euros por utilizar el teclado." >> programa.md

    Registra el cambio:

    git add programa.md
    git commit -m "Aprobado nuevo impuesto sobre los teclados"

    La medida provoca una crisis nacional. El Gobierno quiere anularla, pero conservar la evidencia histórica de que fue aprobada.

    Ejecuta:

    git revert --no-edit HEAD

    Observa el historial:

    git log --oneline

    Deberían aparecer tanto el commit que introdujo el impuesto como otro posterior que lo revierte.

    ¿Por qué es importante? Porque Git no ha borrado el commit anterior. Ha registrado una nueva operación que anula su efecto.

    Comprueba que la medida ya no aparece:

    cat programa.md

    Así queda la historia del impuesto

    No confundas git revert con git restore. El primero crea un commit que deshace otro commit; el segundo permite recuperar archivos o quitar cambios del staging sin registrar necesariamente un nuevo commit. git Documentation+1

    Fase 8. Crear una rama: el programa electoral alternativo

    Aunque todavía no vamos a trabajar en equipo, es importante comprender las ramas. Un desarrollador individual puede utilizarlas para experimentar sin modificar su versión principal.

    Paso 18. Crear el programa de la oposición

    El partido de la oposición, llamado Partido del Código Libre (PCL), propone sustituir algunas medidas por otras todavía más absurdas.

    Desde main, crea una rama:

    git switch -c oposicion

    Comprueba:

    git branch

    Debería aparecer:

      main
    * oposicion

    El asterisco identifica la rama actual.

    Ahora crea un archivo nuevo:

    cat > oposicion.md <<'EOF'
    # Programa de la oposición
    
    Partido del Código Libre
    
    1. Prohibir las reuniones que pudieron ser un correo.
    2. Obligar a que todos los políticos usen Linux.
    3. Convertir el Congreso en un servidor de Minecraft.
    4. Que los ministros aprueben un examen de informática.
    5. Sustituir los discursos por mensajes de 140 caracteres.
    EOF

    Registra el documento:

    git add oposicion.md
    
    git commit -m "Programa alternativo de la oposición"

    Comprueba:

    ls
    git log --oneline

    Paso 19. Volver al Gobierno

    Regresa a la rama principal:

    git switch main

    Lista los archivos:

    ls

    Observa que oposicion.md ya no aparece.

    Esto ocurre porque el archivo se creó y se registró en otra rama.

    Vuelve a la oposición:

    git switch oposicion

    El archivo vuelve a aparecer.

    Paso 20. Fusionar la oposición con el Gobierno

    El presidente anuncia un pacto histórico: incorporará las propuestas de la oposición al repositorio oficial.

    Regresa a la rama principal:

    git switch main

    Fusiona la rama de la oposición:

    git merge oposicion

    Comprueba:

    ls
    git log --oneline --graph --all --decorate

    El archivo oposicion.md debe aparecer en la rama principal.

    En esta situación lo normal es que Git pueda realizar una fusión de tipo fast-forward, porque main no tenía nuevos commits desde que se creó la rama.

    No siempre aparece un commit específico de fusión. Es importante que los alumnos entiendan este comportamiento.

    Puedes eliminar la rama individual una vez integrada:

    git branch -d oposicion

    El contenido fusionado no desaparece.

    Fase 9. Llega la revolución: publicar en GitHub

    Hasta este momento hemos trabajado completamente en local. El repositorio existe únicamente dentro de nuestra máquina virtual.

    Ahora vamos a publicarlo en un servicio remoto.

    Paso 21. Crear una cuenta en GitHub

    Entra en GitHub y crea una cuenta si no tienes una.

    Después, crea un nuevo repositorio desde el botón de creación de repositorios.

    Configúralo con estos datos:

    CampoValor
    Repository nameministerio-promesas
    DescriptionPrograma electoral ficticio de Gitlandia
    VisibilidadPúblico, o privado si así lo indica el profesor
    Add READMEDesactivado
    Add .gitignoreDesactivado
    Choose a licenseNinguna por ahora

    Es importante no inicializar el repositorio remoto con archivos, porque ya tenemos un proyecto local con su propio historial. GitHub Docs

    Paso 22. Vincular Git local con GitHub

    Copia la dirección HTTPS del repositorio que acabas de crear.

    Será similar a:

    https://github.com/TU_USUARIO/ministerio-promesas.git

    Vuelve a la terminal, dentro de ministerio-promesas.

    Ejecuta:

    git remote add origin https://github.com/TU_USUARIO/ministerio-promesas.git

    Sustituye TU_USUARIO por tu nombre de usuario de GitHub.

    Consulta los remotos:

    git remote -v

    Verás una dirección de envío (push) y otra de descarga (fetch).

    origin es simplemente el nombre que hemos asignado al repositorio remoto. No es una palabra reservada que tenga que utilizarse obligatoriamente.

    Paso 23. Publicar el primer repositorio

    Ejecuta:

    git push -u origin main

    La opción -u establece la relación de seguimiento entre nuestra rama local main y la rama remota correspondiente.

    A partir de ese momento, los siguientes envíos podrán hacerse simplemente mediante:

    git push

    Importante: autenticación

    GitHub no admite utilizar la contraseña normal de tu cuenta como contraseña de Git para operaciones HTTPS. Tendrás que usar un método de autenticación compatible, como Git Credential Manager, GitHub CLI o un token de acceso personal con los permisos adecuados.

    Una opción especialmente cómoda para un entorno de prácticas es utilizar GitHub CLI:

    gh auth login

    Este comando requiere tener gh instalado. En el asistente selecciona GitHub.com, HTTPS y sigue las instrucciones de autenticación.

    Nunca escribas tokens ni contraseñas reales dentro de los archivos de la práctica.

    Paso 24. Comprobar la publicación

    Vuelve al navegador, abre tu repositorio de GitHub y actualiza la página.

    Deberían aparecer programa.md, oposicion.md, los directorios públicos, .gitignore y el historial.

    Comprueba especialmente que secretos/claves.txt no se ha publicado.

    Paso 25. Crear un README para los visitantes

    Un repositorio debería explicar qué contiene y cómo utilizarlo.

    Crea:

    nano README.md

    Añade:

    # Ministerio de las Promesas Imposibles
    
    Bienvenido al repositorio oficial del Gobierno
    de Gitlandia.
    
    ## Objetivo
    
    Aprender Git mediante un programa electoral
    ficticio que cambia constantemente.
    
    ## Archivos
    
    - programa.md: Programa electoral oficial.
    - oposicion.md: Propuestas de la oposición.
    - economia/: Presupuestos.
    - comunicacion/: Comunicados oficiales.
    
    ## Tecnología
    
    - Linux
    - Git
    - GitHub
    - Markdown
    
    ## Advertencia
    
    Todos los personajes y propuestas son ficticios.
    
    Proyecto educativo individual.

    Registra y publica los cambios:

    git add README.md
    
    git commit -m "Documentación oficial del repositorio"
    
    git push

    Actualiza la página de GitHub.

    El contenido del README debería mostrarse automáticamente en la página del proyecto.

    Fase 10. Sincronización y clonación

    Paso 26. Simular una modificación desde otro ordenador

    Queremos comprobar qué sucede cuando el repositorio remoto tiene cambios que aún no existen en nuestra máquina virtual.

    Abre el archivo README.md directamente en GitHub y utiliza su opción de edición.

    Añade al final:

    ## Comunicado de última hora
    
    El ministro anuncia que se estudiará
    la posibilidad de cumplir alguna promesa.

    Guarda la modificación mediante un commit desde GitHub.

    Acabamos de crear una versión nueva que existe en GitHub, pero todavía no en nuestra máquina virtual.

    Paso 27. Descargar los cambios

    Vuelve a la terminal de Ubuntu.

    Ejecuta:

    git fetch origin

    Este comando descarga información y objetos del repositorio remoto, pero no integra automáticamente los cambios en tu rama local.

    Comprueba las diferencias:

    git log --oneline HEAD..origin/main

    Después ejecuta:

    git pull --ff-only

    En este caso, como no hemos realizado nuevos commits locales después de la publicación, Git debería poder actualizar mediante fast-forward.

    Comprueba el README:

    cat README.md

    La modificación introducida desde GitHub debería estar disponible localmente.

    Pregunta: ¿Qué diferencia existe entre git fetch, git pull y git push?

    Paso 28. Clonar el proyecto en otro directorio

    Vamos a simular que hemos adquirido un nuevo ordenador o que necesitamos restaurar el proyecto después de perder la máquina virtual.

    Sal del directorio de trabajo:

    cd ~/proyectos-git

    Crea un directorio nuevo:

    mkdir ordenador-nuevo
    cd ordenador-nuevo

    Clona tu repositorio:

    git clone https://github.com/TU_USUARIO/ministerio-promesas.git

    Entra en él:

    cd ministerio-promesas

    Comprueba:

    git status
    git remote -v
    git log --oneline
    ls -la

    El repositorio clonado tendrá los archivos publicados y su historial Git.

    No contendrá los archivos locales ignorados que no se subieron a GitHub.

    Última misión

    Desde este nuevo clon, añade a README.md una sección titulada «El Ministerio sobrevive al cambio de ordenador».

    Después:

    git add README.md
    
    git commit -m "El Ministerio sobrevive al cambio de ordenador"
    
    git push

    Regresa al repositorio original:

    cd ~/proyectos-git/ministerio-promesas

    Y actualízalo:

    git pull --ff-only

    Comprueba que el cambio realizado en el nuevo clon aparece también en el original.

    Hemos trabajado sobre el mismo proyecto desde dos directorios diferentes, sin necesitar un trabajo colaborativo entre personas.

    Fase 11. El examen del ministro

    En esta última fase, los alumnos realizarán pequeñas operaciones sin copiar exactamente la secuencia anterior. Deben identificar los comandos necesarios y justificar su elección.

    Misiones finales

    Marca las completadas

    0 de 7 misiones

    0%Crear un archivo ministros.md con tres ministros ficticios y registrar un commit.Añadir una cuarta promesa al programa electoral, identificar el cambio con git diff y registrarlo.Modificar accidentalmente economia/presupuesto.txt y recuperar la versión confirmada.Crear un archivo temporal discurso.tmp y comprobar que Git lo ignora.Crear una rama llamada reforma, añadir una propuesta, registrarla y fusionarla con main.Publicar todos los cambios en GitHub y comprobar que el repositorio local está sincronizado.Mostrar el historial completo con un gráfico de los commits.

    Comandos que deben dominar

    ComandoFunción
    git init -b mainInicializar repositorio
    git statusConsultar estado
    git add archivoPreparar cambios
    git commit -m "mensaje"Registrar versión
    git log --onelineConsultar historial
    git diffComparar cambios
    git show HEADInspeccionar último commit
    git restore archivoRecuperar contenido
    git restore --staged archivoRetirar del staging
    git revert HEADRevertir un commit
    git switch -c ramaCrear y cambiar de rama
    git merge ramaFusionar ramas
    git remote -vConsultar remotos
    git pushEnviar commits
    git fetchDescargar información remota
    git pullDescargar e integrar cambios
    git clone URLClonar repositorio

    Adaptación para Windows

    En Windows pueden instalar Git for Windows y utilizar Git Bash, que permite ejecutar prácticamente todos los comandos Linux de esta práctica.

    Para quienes utilicen PowerShell, las principales diferencias están en los comandos del sistema, no en Git.

    OperaciónBash (Linux y Git Bash)PowerShell
    Directorio actualpwdpwd
    Listar archivosls -laGet-ChildItem -Force
    Crear carpetamkdir proyectomkdir proyecto
    Mostrar archivocat archivo.txtGet-Content archivo.txt
    Eliminar archivorm archivo.txtRemove-Item archivo.txt
    Editar archivonano archivo.txtnotepad archivo.txt
    Consultar Gitgit statusgit status

    Para mantener la práctica sencilla, recomiendo que todos trabajen con la terminal Linux de su máquina virtual, usando Windows solamente como demostración adicional.

    Entrega de la práctica

    Cada alumno deberá entregar un archivo README.md o informe.md con las respuestas a las preguntas, las explicaciones de los incidentes y las capturas necesarias.

    Además, deberá facilitar el enlace de su repositorio en GitHub y demostrar que contiene el historial de commits.

  • Montar Google Drive como una unidad en Ubuntu sin sincronizar archivos

    Montar Google Drive como una unidad en Ubuntu sin sincronizar archivos

    1. Introducción

    En esta práctica vamos a aprender a montar Google Drive en Ubuntu como si fuera una unidad del sistema, pero sin sincronizar todos los archivos en el disco duro.

    Esto significa que podremos acceder a los archivos de Google Drive desde el explorador de archivos de Ubuntu, o desde la terminal, pero los archivos no se descargarán todos automáticamente. Se irán leyendo bajo demanda cuando los abramos o los copiemos.

    Para conseguirlo usaremos una herramienta llamada rclone.


    2. Objetivos de la práctica

    Al finalizar esta práctica, el alumno será capaz de:

    • Instalar rclone en Ubuntu.
    • Configurar una cuenta de Google Drive en rclone.
    • Montar Google Drive como una carpeta local.
    • Acceder a los archivos de Drive desde Ubuntu sin sincronizarlos.
    • Desmontar la unidad cuando sea necesario.
    • Crear un servicio para montar Google Drive automáticamente al iniciar sesión.

    3. Requisitos previos

    Para realizar esta práctica necesitas:

    • Un equipo con Ubuntu instalado.
    • Conexión a Internet.
    • Una cuenta de Google Drive.
    • Acceso a la terminal.
    • Permisos de administrador en el sistema.

    4. ¿Qué es rclone?

    rclone es una herramienta de línea de comandos que permite trabajar con servicios de almacenamiento en la nube como:

    • Google Drive.
    • OneDrive.
    • Dropbox.
    • Mega.
    • Amazon S3.
    • Nextcloud.
    • WebDAV.

    En esta práctica lo usaremos para montar Google Drive como una unidad, no para sincronizarlo.

    La diferencia es importante:

    OpciónQué hace
    SincronizarDescarga y mantiene copias locales de los archivos
    MontarMuestra los archivos como si estuvieran en local, pero se accede a ellos bajo demanda

    5. Instalación de rclone

    Abrimos una terminal y actualizamos la lista de paquetes:

    sudo apt update

    Instalamos rclone y fuse3:

    sudo apt install rclone fuse3

    fuse3 permite que un usuario pueda montar sistemas de archivos virtuales, como en este caso Google Drive.

    Comprobamos que rclone se ha instalado correctamente:

    rclone version

    Deberíamos ver una salida parecida a esta:

    rclone v1.xx.x
    - os/version: ubuntu
    - os/kernel: linux
    - os/type: linux

    6. Configuración de Google Drive en rclone

    Ahora vamos a configurar la conexión con nuestra cuenta de Google Drive.

    Ejecutamos:

    rclone config

    Aparecerá un menú en la terminal.

    Como todavía no tenemos ninguna conexión configurada, elegimos la opción:

    n

    Esta opción significa:

    New remote

    Es decir, crear una nueva conexión remota.


    6.1. Nombre de la conexión

    Cuando pregunte por el nombre, escribimos:

    gdrive

    Podríamos poner otro nombre, pero para esta práctica usaremos gdrive.

    Este nombre será el identificador que usaremos más adelante para referirnos a nuestro Google Drive.


    6.2. Selección del tipo de almacenamiento

    Después aparecerá una lista con muchos servicios de almacenamiento.

    Buscamos la opción correspondiente a:

    Google Drive

    El número puede cambiar según la versión de rclone, así que no copies el número de otra guía sin mirar la lista.

    Escribe el número que corresponda a Google Drive y pulsa Enter.


    6.3. Client ID y Client Secret

    rclone nos preguntará por:

    client_id
    client_secret

    Para una práctica normal podemos dejarlos vacíos pulsando Enter.

    Esto usará la configuración genérica de rclone.

    Si te pregunta algo mas que no sea scope dale a enter.


    6.4. Scope o permisos de acceso

    Cuando pregunte por el tipo de permisos o scope, elegimos la opción que permita acceso completo a Google Drive.

    Normalmente aparece como:

    drive

    Esto permite leer y escribir archivos en Google Drive desde Ubuntu.


    6.5. Configuración avanzada

    Cuando pregunte si queremos configuración avanzada:

    Edit advanced config?

    Respondemos:

    n

    6.6. Autenticación con Google

    Cuando pregunte:

    Use auto config?

    Si estamos en un Ubuntu con entorno gráfico, respondemos:

    y

    Se abrirá el navegador web para iniciar sesión con nuestra cuenta de Google.

    Aceptamos los permisos solicitados por rclone.

    Cuando el proceso termine, volvemos a la terminal.


    6.7. Guardar configuración

    Al final, rclone mostrará un resumen de la configuración.

    Cuando pregunte si queremos guardar la conexión, respondemos:

    y

    Después salimos del menú de configuración con:

    q

    7. Comprobar que la conexión funciona

    Para comprobar que podemos acceder a Google Drive, ejecutamos:

    rclone lsd gdrive:

    Este comando lista las carpetas principales de Google Drive.

    Si todo ha ido bien, veremos algo parecido a:

              -1 2026-05-25 10:30:00        -1 Documentos
    -1 2026-05-25 10:30:00 -1 Copias
    -1 2026-05-25 10:30:00 -1 Fotos

    Si aparece un error de autenticación, probablemente haya que repetir la configuración con:

    rclone config

    8. Crear la carpeta de montaje

    Ahora vamos a crear una carpeta local donde aparecerá Google Drive.

    Ejecutamos:

    mkdir -p ~/GoogleDrive

    Esta carpeta estará en nuestro directorio personal.

    La ruta completa será algo parecido a:

    /home/usuario/GoogleDrive

    Por ejemplo, si el usuario se llama antonio, la ruta será:

    /home/antonio/GoogleDrive

    9. Montar Google Drive como unidad

    Ahora montamos Google Drive dentro de esa carpeta:

    rclone mount gdrive: ~/GoogleDrive \
    --vfs-cache-mode writes \
    --daemon

    Explicación del comando:

    ParteSignificado
    rclone mountMonta un almacenamiento remoto
    gdrive:Nombre de la conexión configurada
    ~/GoogleDriveCarpeta local donde se montará
    --vfs-cache-mode writesUsa caché para operaciones de escritura
    --daemonEjecuta el montaje en segundo plano

    9.1. Comprobar el montaje

    Podemos comprobarlo desde la terminal:

    ls ~/GoogleDrive

    También podemos abrir el explorador de archivos de Ubuntu y entrar en la carpeta:

    GoogleDrive

    Ahí deberían aparecer los archivos y carpetas de nuestra cuenta de Google Drive.


    10. Importante: esto no sincroniza todos los archivos

    Este punto es clave.

    Con este sistema, Google Drive aparece como una carpeta local, pero no se descargan todos los archivos al ordenador.

    Los archivos se consultan cuando se necesitan.

    Por ejemplo:

    • Si abres un documento, se descargará temporalmente para poder leerlo.
    • Si copias un archivo desde Google Drive a otra carpeta local, entonces sí se descargará.
    • Si copias un archivo desde Ubuntu hacia ~/GoogleDrive, se subirá a Google Drive.
    • Si no abres un archivo, no ocupa espacio real en tu disco como una sincronización completa.

    11. Desmontar Google Drive

    Cuando queramos desmontar la unidad, usamos:

    fusermount3 -u ~/GoogleDrive

    Después de esto, la carpeta ~/GoogleDrive seguirá existiendo, pero ya no mostrará el contenido de Google Drive.

    Para comprobarlo:

    ls ~/GoogleDrive

    Si está desmontada, normalmente aparecerá vacía.


    12. Montaje automático al iniciar sesión

    Hasta ahora hemos montado Google Drive manualmente.

    Si queremos que se monte automáticamente al iniciar sesión en Ubuntu, podemos crear un servicio de usuario con systemd.


    12.1. Crear carpeta para servicios de usuario

    Ejecutamos:

    mkdir -p ~/.config/systemd/user

    12.2. Crear el archivo del servicio

    Creamos el archivo:

    nano ~/.config/systemd/user/rclone-gdrive.service

    Pegamos el siguiente contenido.

    Importante: cambia antonio por el nombre real de tu usuario en Ubuntu.

    [Unit]
    Description=Montar Google Drive con rclone
    After=network-online.target

    [Service]
    Type=simple
    ExecStart=/usr/bin/rclone mount gdrive: /home/antonio/GoogleDrive --vfs-cache-mode writes
    ExecStop=/bin/fusermount3 -u /home/antonio/GoogleDrive
    Restart=on-failure
    RestartSec=10

    [Install]
    WantedBy=default.target

    Guardamos el archivo:

    • Ctrl + O
    • Enter
    • Ctrl + X

    12.3. Activar el servicio

    Recargamos los servicios de usuario:

    systemctl --user daemon-reload

    Activamos el servicio para que arranque automáticamente:

    systemctl --user enable rclone-gdrive

    Iniciamos el servicio:

    systemctl --user start rclone-gdrive

    12.4. Comprobar el estado del servicio

    Ejecutamos:

    systemctl --user status rclone-gdrive

    Si todo está bien, deberíamos ver algo parecido a:

    Active: active (running)

    Para salir de la pantalla de estado, pulsamos:

    q

    13. Detener el montaje automático

    Si queremos parar el servicio temporalmente:

    systemctl --user stop rclone-gdrive

    Si queremos desactivarlo para que no arranque automáticamente:

    systemctl --user disable rclone-gdrive

    14. Posibles errores y soluciones

    Error: la carpeta parece vacía

    Primero comprueba si el montaje está activo:

    systemctl --user status rclone-gdrive

    O prueba a montar manualmente:

    rclone mount gdrive: ~/GoogleDrive --vfs-cache-mode writes --daemon

    Error: transport endpoint is not connected

    A veces puede quedarse un montaje bloqueado.

    Solución:

    fusermount3 -u ~/GoogleDrive

    Si no funciona:

    fusermount3 -uz ~/GoogleDrive

    Después vuelve a montar:

    rclone mount gdrive: ~/GoogleDrive --vfs-cache-mode writes --daemon

    Error: command not found

    Si aparece:

    rclone: command not found

    Significa que rclone no está instalado.

    Instálalo con:

    sudo apt install rclone

    Error: fusermount3 no encontrado

    Instala fuse3:

    sudo apt install fuse3

    Error en el servicio por el nombre de usuario

    Si el servicio no arranca, revisa esta parte:

    ExecStart=/usr/bin/rclone mount gdrive: /home/antonio/GoogleDrive --vfs-cache-mode writes
    ExecStop=/bin/fusermount3 -u /home/antonio/GoogleDrive

    Debes cambiar antonio por tu usuario real.

    Puedes saber tu usuario con:

    whoami

    Y tu ruta personal con:

    echo $HOME

    15. Comandos principales de la práctica

    AcciónComando
    Instalar rclonesudo apt install rclone fuse3
    Configurar Google Driverclone config
    Ver carpetas de Driverclone lsd gdrive:
    Crear carpeta de montajemkdir -p ~/GoogleDrive
    Montar Driverclone mount gdrive: ~/GoogleDrive --vfs-cache-mode writes --daemon
    Desmontar Drivefusermount3 -u ~/GoogleDrive
    Ver estado del serviciosystemctl --user status rclone-gdrive
    Iniciar serviciosystemctl --user start rclone-gdrive
    Parar serviciosystemctl --user stop rclone-gdrive

    16. Ejercicio propuesto para el alumno

    Realiza los siguientes pasos y documenta el proceso:

    1. Instala rclone en Ubuntu.
    2. Configura tu cuenta de Google Drive.
    3. Crea la carpeta ~/GoogleDrive.
    4. Monta Google Drive usando rclone mount.
    5. Comprueba que puedes ver tus archivos desde el explorador.
    6. Crea una carpeta de prueba dentro de ~/GoogleDrive.
    7. Comprueba desde la web de Google Drive que la carpeta se ha creado.
    8. Desmonta Google Drive.
    9. Vuelve a montarlo manualmente.
    10. Configura el montaje automático con systemd.

    17. Preguntas de repaso

    1. ¿Qué diferencia hay entre sincronizar Google Drive y montarlo como unidad?
    2. ¿Para qué sirve rclone?
    3. ¿Qué significa gdrive: en los comandos usados?
    4. ¿Dónde se monta Google Drive en esta práctica?
    5. ¿Qué comando se usa para desmontar la unidad?
    6. ¿Qué ventaja tiene usar systemd en esta práctica?
    7. ¿Se descargan todos los archivos de Google Drive al montar la unidad?
    8. ¿Qué ocurre si copiamos un archivo dentro de ~/GoogleDrive?

    18. Conclusión

    En esta práctica hemos montado Google Drive en Ubuntu como una carpeta local usando rclone.

    La ventaja principal de este método es que podemos trabajar con nuestros archivos de Google Drive desde Ubuntu sin tener que sincronizar todo el contenido en el disco duro.

    Esto resulta muy útil en equipos con poco almacenamiento, máquinas virtuales, portátiles o entornos de laboratorio donde necesitamos acceso a archivos en la nube sin ocupar espacio innecesario.

    Además, al configurar el montaje automático mediante systemd, conseguimos que Google Drive esté disponible cada vez que iniciemos sesión en Ubuntu.

  • Instalación y uso de OpenCode en Windows con WSL Ubuntu

    Instalación y uso de OpenCode en Windows con WSL Ubuntu

    1. Introducción

    OpenCode es una herramienta de asistencia al desarrollo mediante inteligencia artificial. Permite trabajar con proyectos de programación desde la terminal, hacer preguntas sobre el código, pedir cambios, generar archivos, revisar errores y trabajar con diferentes proveedores de modelos de IA.

    Aunque OpenCode puede instalarse de varias formas, en Windows la opción más recomendable para trabajar de manera seria es usarlo dentro de WSL, es decir, el Subsistema de Windows para Linux. De esta forma trabajaremos con un entorno Linux real dentro de Windows, algo muy útil para programación, servidores, automatización y administración de sistemas.

    OpenCode está disponible como herramienta de terminal, aplicación de escritorio e incluso extensiones para editores como Visual Studio Code. La versión de escritorio está disponible en beta para Windows x64.


    Objetivos de la práctica

    Al finalizar esta práctica, el alumno será capaz de:

    • Instalar WSL en Windows.
    • Instalar Ubuntu dentro de WSL.
    • Instalar OpenCode en el entorno Linux.
    • Abrir un proyecto con Visual Studio Code usando Remote WSL.
    • Ejecutar OpenCode desde la terminal del proyecto.
    • Conectar OpenCode con un proveedor de IA.
    • Comprender la diferencia entre usar OpenCode en terminal, escritorio o navegador.

    Requisitos previos

    Para realizar esta práctica necesitaremos:

    • Un equipo con Windows 10 o Windows 11.
    • Conexión a Internet.
    • Permisos de administrador en Windows.
    • Visual Studio Code instalado.
    • Una cuenta o clave de acceso para algún proveedor de IA compatible, por ejemplo OpenAI, GitHub Copilot, OpenRouter, Anthropic, Google Gemini u otro proveedor compatible.

    OpenCode necesita un proveedor de modelos de lenguaje para funcionar. La herramienta puede ser gratuita, pero el uso del modelo puede depender del proveedor elegido.


    Paso 1. Instalar WSL en Windows

    Abrimos PowerShell como administrador.

    Para ello:

    1. Pulsamos en el menú de inicio.
    2. Escribimos PowerShell.
    3. Hacemos clic derecho.
    4. Seleccionamos Ejecutar como administrador.

    Después ejecutamos:

    wsl --install

    Este comando instalará WSL y, normalmente, también una distribución Ubuntu por defecto.

    Cuando finalice la instalación, reiniciamos el equipo si Windows lo solicita.


    Paso 2. Comprobar que WSL funciona

    Después del reinicio, abrimos una terminal de Ubuntu desde el menú de inicio.

    Buscamos:

    Ubuntu

    Si no lo vemos, probamos lo siguiente:

    Ejecuta:

    wsl --list --online

    Esto te mostrará las distribuciones disponibles.


    Instala Ubuntu manualmente

    Ejecuta:

    wsl --install -d Ubuntu

    Reinicia el ordenador si te lo pide.

    Si al reinicar aun no aparece, vuelve a poner

    wsl --install -d Ubuntu

    Comprueba qué distribuciones tienes instaladas

    Después abre PowerShell normal y ejecuta:

    wsl -l -v

    Deberías ver algo parecido a:

      NAME      STATE           VERSION
    * Ubuntu Stopped 2

    Si aparece Ubuntu, puedes abrirlo con:

    wsl

    o también:

    ubuntu

    La primera vez que se abra, Ubuntu nos pedirá crear un usuario y una contraseña.

    Por ejemplo:

    Enter new UNIX username: alumno
    New password:
    Retype new password:

    La contraseña no se verá mientras la escribimos. Esto es normal en Linux.


    Paso 3. Actualizar Ubuntu

    Dentro de la terminal de Ubuntu ejecutamos:

    sudo apt update
    sudo apt upgrade -y

    Con esto actualizamos la lista de paquetes y los programas instalados.

    Es importante hacer este paso antes de instalar herramientas de desarrollo.


    Paso 4. Instalar herramientas básicas

    Instalamos algunas herramientas útiles:

    sudo apt install -y curl git unzip

    Estas herramientas nos permitirán descargar archivos, trabajar con repositorios y preparar proyectos.


    Paso 5. Instalar OpenCode dentro de WSL

    La documentación oficial de OpenCode recomienda instalarlo en WSL para trabajar desde Windows. Una vez dentro de la terminal de Ubuntu, ejecutamos el instalador oficial:

    curl -fsSL https://opencode.ai/install | bash

    Cuando termine la instalación, cerramos y volvemos a abrir la terminal de Ubuntu.

    Después comprobamos que OpenCode está instalado:

    opencode --version

    Si aparece una versión, la instalación ha funcionado correctamente.


    Paso 6. Crear una carpeta de trabajo

    Vamos a crear una carpeta para nuestros proyectos dentro del entorno Linux.

    mkdir -p ~/proyectos
    cd ~/proyectos

    Ahora podemos crear un proyecto de prueba:

    mkdir prueba-opencode
    cd prueba-opencode

    Creamos un archivo simple:

    nano index.html

    Pegamos este contenido:

    <!DOCTYPE html>
    <html lang="es">
    <head>
    <meta charset="UTF-8">
    <title>Prueba OpenCode</title>
    </head>
    <body>
    <h1>Hola desde OpenCode</h1>
    <p>Este es mi primer proyecto usando OpenCode en WSL.</p>
    </body>
    </html>

    Guardamos con:

    CTRL + O
    Enter
    CTRL + X

    Paso 7. Ejecutar OpenCode en el proyecto

    Desde la carpeta del proyecto ejecutamos:

    opencode

    OpenCode se iniciará en la terminal.

    La primera vez puede solicitar configuración o conexión con un proveedor de IA.

    Dentro de OpenCode podemos usar comandos como:

    /connect

    Este comando permite conectar OpenCode con un proveedor de modelos de IA.

    Dependiendo del proveedor elegido, puede pedir una clave API, iniciar sesión o configurar una cuenta.


    Paso 8. Primeras pruebas con OpenCode

    Una vez abierto OpenCode dentro del proyecto, podemos pedirle tareas sencillas.

    Por ejemplo:

    Explícame qué hace este proyecto.

    También podemos pedirle mejoras:

    Mejora el archivo index.html añadiendo una estructura básica con cabecera, contenido principal y pie de página.

    O podemos pedirle que cree nuevos archivos:

    Crea un archivo styles.css y enlázalo desde index.html.

    OpenCode puede ayudar a escribir, modificar y revisar código, pero el alumno siempre debe revisar los cambios antes de aceptarlos. La IA puede equivocarse, generar código innecesario o modificar partes que no debería.


    Paso 9. Instalar Visual Studio Code

    Si no lo tenemos instalado, descargamos e instalamos Visual Studio Code desde su página oficial.

    Una vez instalado, abrimos Visual Studio Code.


    Paso 10. Instalar la extensión Remote WSL

    En Visual Studio Code:

    1. Vamos a la sección Extensions.
    2. Buscamos:
    WSL
    1. Instalamos la extensión oficial de Microsoft llamada WSL.

    Esta extensión permite abrir carpetas de Linux/WSL directamente desde Visual Studio Code.


    Paso 11. Abrir el proyecto desde WSL en Visual Studio Code

    Volvemos a la terminal de Ubuntu y nos situamos en nuestro proyecto:

    cd ~/proyectos/prueba-opencode

    Ejecutamos:

    code .

    La primera vez puede tardar un poco, porque Visual Studio Code instalará algunos componentes dentro de WSL.

    Cuando se abra Visual Studio Code, veremos que estamos trabajando dentro del entorno WSL.

    Esto es importante: aunque estamos usando una aplicación gráfica de Windows, el proyecto realmente está dentro de Ubuntu.


    Paso 12. Abrir una terminal integrada en Visual Studio Code

    Dentro de Visual Studio Code:

    1. Vamos al menú Terminal.
    2. Pulsamos New Terminal.
    3. Comprobamos que la terminal abierta es de Ubuntu/WSL.

    Podemos probarlo ejecutando:

    pwd

    Debería aparecer una ruta parecida a:

    /home/alumno/proyectos/prueba-opencode

    Ahora podemos lanzar OpenCode directamente desde la terminal integrada:

    opencode

    Esta forma de trabajar es muy cómoda porque tenemos:

    • El editor Visual Studio Code.
    • El proyecto abierto.
    • La terminal Linux.
    • OpenCode trabajando sobre la carpeta real del proyecto.

    Paso 13. Acceder a proyectos de Windows desde WSL

    Aunque es recomendable guardar los proyectos dentro de Linux, también podemos acceder a carpetas de Windows desde WSL.

    Por ejemplo, el disco C: de Windows aparece en WSL como:

    /mnt/c/

    Ejemplo:

    cd /mnt/c/Users/TuUsuario/Desktop

    El disco D: aparecería como:

    /mnt/d/

    Y así sucesivamente.

    La documentación oficial de OpenCode indica que desde WSL podemos navegar a proyectos de Windows usando rutas como /mnt/c/Users/YourName/project y ejecutar allí opencode.

    Aun así, para proyectos de programación es mejor trabajar dentro de:

    /home/usuario/proyectos

    Suele dar menos problemas de permisos, rendimiento y compatibilidad.


    Paso 14. Usar la versión web de OpenCode desde WSL

    OpenCode también puede ejecutarse como interfaz web en el navegador. La documentación oficial recomienda que, en Windows, se ejecute desde WSL para mantener buen acceso al sistema de archivos y a la terminal.

    Desde la carpeta del proyecto podemos ejecutar:

    opencode web --hostname 0.0.0.0

    OpenCode mostrará una dirección local en la terminal.

    Después podremos abrirla desde el navegador de Windows.

    Normalmente será algo parecido a:

    http://localhost:PUERTO

    donde PUERTO será el número que indique OpenCode.


    Paso 15. Usar la aplicación de escritorio de OpenCode

    OpenCode también tiene una aplicación de escritorio en beta para Windows x64.

    La idea sería:

    1. Instalar OpenCode Desktop para Windows.
    2. Ejecutar el servidor de OpenCode dentro de WSL.
    3. Conectar la aplicación de escritorio al servidor local.

    Desde WSL podemos lanzar el servidor con:

    opencode serve --hostname 0.0.0.0 --port 4096

    Después, desde la aplicación de escritorio, nos conectaríamos a:

    http://localhost:4096

    Si localhost no funciona, podemos obtener la IP de WSL con:

    hostname -I

    Y conectarnos usando una dirección parecida a:

    http://IP-DE-WSL:4096

    La documentación oficial advierte que, si usamos --hostname 0.0.0.0, conviene proteger el servidor con contraseña mediante la variable OPENCODE_SERVER_PASSWORD.

    Ejemplo:

    OPENCODE_SERVER_PASSWORD=clave-segura opencode serve --hostname 0.0.0.0 --port 4096

    Paso 16. Recomendación para clase

    Para esta práctica vamos a trabajar principalmente de esta forma:

    Windows + WSL Ubuntu + Visual Studio Code + OpenCode en terminal

    Es decir:

    1. Usamos Windows como sistema principal.
    2. Usamos Ubuntu mediante WSL como entorno de desarrollo.
    3. Abrimos los proyectos con Visual Studio Code usando Remote WSL.
    4. Ejecutamos OpenCode desde la terminal del proyecto.

    Esta forma de trabajo es muy parecida a un entorno profesional real, porque muchos servidores, herramientas de desarrollo y sistemas de despliegue funcionan sobre Linux.


    Paso 17. Comandos resumen

    Instalar WSL

    wsl --install

    Actualizar Ubuntu

    sudo apt update
    sudo apt upgrade -y

    Instalar herramientas básicas

    sudo apt install -y curl git unzip

    Instalar OpenCode

    curl -fsSL https://opencode.ai/install | bash

    Comprobar versión

    opencode --version

    Crear proyecto

    mkdir -p ~/proyectos/prueba-opencode
    cd ~/proyectos/prueba-opencode

    Abrir Visual Studio Code desde WSL

    code .

    Ejecutar OpenCode

    opencode

    Ejecutar OpenCode Web

    opencode web --hostname 0.0.0.0

    Ejecutar servidor para escritorio

    opencode serve --hostname 0.0.0.0 --port 4096

    Problemas frecuentes

    El comando opencode no se reconoce

    Cerramos y volvemos a abrir la terminal de Ubuntu.

    También podemos probar:

    source ~/.bashrc

    Después:

    opencode --version

    El comando code . no funciona

    Puede deberse a que Visual Studio Code no está instalado correctamente o no está disponible en el PATH.

    Solución:

    1. Abrir Visual Studio Code en Windows.
    2. Instalar la extensión WSL.
    3. Volver a abrir Ubuntu.
    4. Probar de nuevo:
    code .

    OpenCode no puede conectarse al proveedor de IA

    Revisamos:

    • Que tenemos conexión a Internet.
    • Que la clave API es correcta.
    • Que hemos usado el comando /connect.
    • Que el proveedor elegido está disponible.
    • Que la cuenta tiene saldo, suscripción o permisos suficientes.

    Estoy en PowerShell y no en Ubuntu

    OpenCode para esta práctica debe ejecutarse dentro de Ubuntu/WSL.

    Si estamos en PowerShell, veremos algo parecido a:

    PS C:\Users\Alumno>

    Si estamos en Ubuntu/WSL, veremos algo parecido a:

    alumno@equipo:~$

    Para entrar en Ubuntu, abrimos la aplicación Ubuntu desde el menú de inicio.


    Actividad propuesta para el alumno

    Crea un pequeño proyecto web con estos archivos:

    index.html
    styles.css
    script.js

    El proyecto debe tener:

    • Una página principal con título.
    • Un párrafo explicando qué es OpenCode.
    • Un botón creado con HTML.
    • Estilos básicos en CSS.
    • Un pequeño mensaje en JavaScript al pulsar el botón.

    Después abre OpenCode desde la carpeta del proyecto y pídele:

    Revisa este proyecto y propón mejoras sencillas para un alumno que está empezando.

    A continuación, el alumno deberá entregar:

    • Captura de WSL funcionando.
    • Captura de opencode --version.
    • Captura de Visual Studio Code abierto con Remote WSL.
    • Captura de OpenCode ejecutándose en la terminal del proyecto.
    • Breve explicación de qué ventajas tiene trabajar con WSL en Windows.

    Conclusión

    OpenCode puede utilizarse directamente en Windows, pero para un entorno de clase y de desarrollo técnico es más recomendable utilizarlo dentro de WSL con Ubuntu.

    De esta manera conseguimos un entorno más parecido al que encontraremos en servidores reales, con mejor integración con herramientas Linux y con una forma de trabajo muy útil para programación, administración de sistemas, ciberseguridad y automatización.

    La combinación recomendada para el curso será:

    Windows + WSL Ubuntu + Visual Studio Code Remote WSL + OpenCode
  • Pildora – Instalación de programa desde un repositorio.

    Pildora – Instalación de programa desde un repositorio.

    Los alumnos deben instalar y ejecutar FossFLOW en un servidor Ubuntu, probar sus funcionalidades básicas y generar un README.md propio documentando todo el proceso.

    Requisitos del sistema

    El servidor debe tener:

    • Ubuntu 20.04, 22.04 o superior
    • Acceso por terminal
    • Git
    • Node.js + npm
    • (Opcional) Docker + Docker Compose
    • Navegador local o túnel SSH para acceder al servicio web

    1. Actualizar el servidor

    sudo apt update && sudo apt upgrade -y


    2. Instalar Git

    sudo apt install git -y

    3. Instalar Node.js LTS y npm

    Recomendado usar NodeSource:

    curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejs

    Verificar:

    node -v npm -v

    4. Clonar el repositorio FossFLOW

    git clone https://github.com/stan-smith/FossFLOW.git cd FossFLOW

    5. Instalar dependencias del proyecto

    npm install

    6. Construir el proyecto

    npm run build:lib

    7. Ejecutar la aplicación

    La versión de desarrollo suele ser:

    npm run dev

    El servidor quedará escuchando en:

    http://localhost:3000

    En su PC local: IN

    ssh -L 3000:localhost:3000 usuario@IP_DEL_SERVIDOR

    Luego abrir en su navegador local:

    http://localhost:3000

    8. Probar la aplicación

    Cada alumno debe:

    • Crear un diagrama isométrico.
    • Añadir varios elementos.
    • Guardar o exportar el proyecto.
    • Importarlo nuevamente para verificar funcionamiento.

    9. Crear un README.md propio

    README.md

    Debe contener:

    1. Descripción del proyecto
    2. Requisitos del servidor Ubuntu
    3. Instrucciones de instalación paso a paso
    4. Comandos utilizados
    5. Cómo se ejecuta (modo dev o Docker)
    6. Cómo acceder desde el navegador
    7. Problemas encontrados y soluciones
    8. Captura de la prueba realizada (o explicar cómo la realizó)
    9. Conclusiones finales
  • Pildora – ¿Qué problema resuelve Snap?

    Pildora – ¿Qué problema resuelve Snap?

    Snap es un sistema de empaquetado y distribución de software desarrollado por Canonical, la empresa detrás de Ubuntu.
    Su propósito es simplificar la instalación de aplicaciones en Linux y hacer que funcionen igual en cualquier distribución.

    ¿Qué problema resuelve Snap?

    Tradicionalmente, cada distribución Linux usa su propio sistema de paquetes:

    • Ubuntu/Debian usan .deb
    • Fedora usa .rpm
    • Arch usa pacman

    Eso obliga a los desarrolladores a crear versiones distintas del mismo programa para cada sistema.
    Snap elimina esa fragmentación: crea un paquete único y autocontenido, que funciona en cualquier distribución compatible con snapd.

    ¿Qué contiene un paquete snap?

    Un snap no solo trae el programa principal, sino todas sus dependencias: bibliotecas, binarios y configuraciones necesarias para ejecutarlo.
    En cierto modo, se comporta como un mini contenedor, aunque no es Docker: no usa el kernel aislado, pero sí espacios de nombres (namespaces) para mantenerlo separado del sistema principal.


    ¿Cómo se instala y usa?

    Primero se instala el servicio que gestiona los snaps:

    sudo apt install snapd

    Luego puedes instalar aplicaciones desde el Snap Store:

    sudo snap install wekan sudo snap install nextcloud sudo snap install code --classic

    Cada aplicación queda montada en un entorno aislado bajo /snap/ y se actualiza sola en segundo plano.


    ¿Qué ventajas tiene?

    • Compatibilidad: mismo paquete en Ubuntu, Fedora, Arch, etc.
    • Aislamiento: cada app corre en un “sandbox”, más segura.
    • Actualizaciones automáticas: se actualizan sin intervención.
    • Fácil de revertir: puedes volver a una versión anterior.

    Dónde vive todo esto

    • Servicio principal: snapd
    • Paquetes instalados: /snap/
    • Configuraciones: /var/snap/

    Comandos útiles:

    snap list # ver apps instaladas
    snap info wekan # detalles del paquete snap remove wekan 
    snap refresh # actualizar todos

    Snap tiene su propio “repositorio oficial” llamado Snap Store, y ahí hay cientos de aplicaciones empaquetadas.

    Visita:
    👉 https://snapcraft.io/store

    Ahí verás todas las aplicaciones disponibles, clasificadas por categorías:

    • Servidor (Nextcloud, Wekan, Mosquitto, etc.)
    • Desarrollo (VS Code, Postman, Node, etc.)
    • Productividad (LibreOffice, Slack, etc.)
    • Multimedia (OBS Studio, Spotify, VLC, etc.)

    Cada ficha tiene los comandos exactos para instalarla en Ubuntu u otras distribuciones compatibles.

    Desde la terminal

    Una vez instalado snapd, puedes explorar el catálogo directamente.

    Buscar una aplicación concreta:

    snap search wekan

    O algo más genérico:

    snap search editor

    snap search server

    snap search database

    Te mostrará una tabla con:

    Name Version Publisher Notes Summary wekan 7.15 x2visio✓ - The open-source Trello-like kanban


    Ver las aplicaciones ya instaladas:

    snap list

    Información detallada de una app:

    snap info wekan

    TAREA

    Inicia una maquina virtual Ubuntu Server  (Puedes crear una nueva o partir de una clonación que tengas con un server «Limpio»).
    Instala en el servidor Wekan utilizando Snap

    sudo apt update && sudo apt -y upgrade
    sudo apt -y install snapd


    Wekan se distribuye como snap y se instala con un único comando. 

    sudo snap install wekan

    Ese comando descarga e instala Wekan (MongoDB viene gestionado por el propio snap). 

    2) Fijar el puerto y la URL raíz


    Elige un puerto libre (ej. 3001) y fija la ROOT_URL con la IP o dominio de tu servidor:


    sudo snap set wekan port='3001'
    sudo snap set wekan root_url="http://<IP-del-servidor>:3001"

    Wekan necesita un puerto y una URL raíz para construir correctamente enlaces y callbacks. 

    3) Reiniciar servicios del snap


    sudo systemctl restart snap.wekan.mongodb
    sudo systemctl restart snap.wekan.wekan


    Wekan usa MongoDB bajo el capó en el snap; al cambiar ajustes conviene reiniciar ambos servicios. 


    4) Abrir el firewall (si usas UFW)

    sudo ufw allow 3001/tcp
    sudo ufw reload

    5) Comprobaciones rápidas

    # Ver estado de los servicios
    systemctl status snap.wekan.wekan --no-pager
    systemctl status snap.wekan.mongodb --no-pager
    # Comprobar que el puerto está escuchando
    ss -tunelp | grep 3001

    6) Primer acceso y creación de usuario


    Entra desde un navegador:

    http://<IP-del-servidor>:3001