Fuentes web
Entradas
Comentarios

Hace bastante tiempo me apunté a una beta (como suelo hacer habitualmente) de suse studio. Cuando me apunté no tenía ni idea de que iba realmente, pero tenía buena pinta, y tenía que ver con linux.

La semana pasada recibí un correo con la invitación para entrar a suse studio, y entré a ver de que se trataba exactamente. Suse estudio es una herramienta web para crear tu propia distribución de linux con ciertas limitaciones, y bajo mi punto de vista es tremendamente útil para crear aplicaciones basadas en linux. Por ejemplo, en nuestro trabajo hemos creado una para facilitar el proceso de carga de firmware en dispositivos, sin necesidad de instalar linux en el pc (el procedimiento requiere linux).

Para empezar cuentas con 15 gb de espacio para generar tus distribuciones, un asistente de configuración (software, inicio, branding y license agreement) posibilidad de generar live cd instalable imagen de disco duro (normal, vmware, xen, usb). También puedes subir tus propios archivos (configuraciones, scripts, etc), ver todo el arbol de directorios y archivos, y, como plato fuerte, probar insitu en una pantalla en flash la distribución que has creado para terminar de tunearla y ver como funciona sin tener que descargarla. Una vez tenemos nuestra distribución montada, podemos descargarla en varios formatos.

No me voy a extender mucho en explicar como funciona ya que en la página web, aparte de haber creado una wiki con casi cualquier pregunta que se nos ocurra, también hay un screencast sobre como hacerlo.

En general un proyecto muy interesante, que recomiendo encarecidamente.

Djl, el Steam de Linux.

Por aquí Zero y yo somos bastante fans de Steam, cuando no estamos editando alguna entrada pasamos nuestras tardes rodeados de prostitutas francesas en orgías sado-nazis zombies en el L4D.

El problema al que nos enfrentamos es que no podemos instalar Steam en nuestros Linux*.

Así que buscando alguna alternativa decente nos encontramos con Djl.

Djl no llega a los niveles de Steam, pero al menos comparte ese gusto por lo indie, aunque no se si en este caso es obligado.

Para conseguirlo, nada tan facil como entrar en su web, descargarlo, descomprimirlo y ejecutarlo.

La primera vez que lo arranquemos nos pedirá un par de datos para la configuración básica y posteriormente veremos algo como esto:

Feel the Pain!!!!

Feel the Pain!!!!

Basta con que elijamos el juego de la lista que queremos instalar y éste se descargará e instalará automáticamente en nuestra máquina.

La lista de juegos sin ser ni mucho menos asombrosa si está bastante bien seleccionada. Comprende desde juegos amateur, a copias descaradas homenajes de juegos por todos conocidos e incluso algún título comercial (como el que sale en la captura), que si bien tiene un tiempo, siempre es agradable echarle un vistazo en Linux.

Por lo demás pues lo habitual en este tipo de programas. Tenemos nuestro irc, nuestros plugins, posibilidad de importar juegos que tengamos instalados con el innombrable Wine a la lista de juegos instalados de Djl.

La verdad es que el mundo Linux aún anda muy lejos de poder convertirse en una herramienta para la ludopatía y condena de almas adolescentes a base de videojuegos, por lo que propuestas como ésta, se antojan imprescindibles.

*En realidad sí se puede, con Wine, pero Zero tiene aversión y pesadillas con ese programa.


INSTALACIÓN UBUNTU 9.04

Vamos directamente al grano.

Descargamos el archivo desde la web de sourceforce del proyecto de FOG. Por ejemplo descomprimimos el archivo en /usr/src

cd /usr/src
tar zxvf /home/usuario/Escritorio/fog_0.26.tar.gz

Accedemos al directorio bin, y ejecutamos con sudo el script de instalación:

cd /usr/src/fog_0.26/
sudo ./installfog.sh

Seguimos el asistente:
___           ___           ___
/\  \         /\  \         /\  \
/::\  \       /::\  \       /::\  \
/:/\:\  \     /:/\:\  \     /:/\:\  \
/::\-\:\  \   /:/  \:\  \   /:/  \:\  \
/:/\:\ \:\__\ /:/__/ \:\__\ /:/__/_\:\__\
\/__\:\ \/__/ \:\  \ /:/  / \:\  /\ \/__/
\:\__\    \:\  /:/  /   \:\ \:\__\
\/__/     \:\/:/  /     \:\/:/  /
\::/  /       \::/  /
\/__/         \/__/

###########################################
#     Free Computer Imaging Solution      #
#                                         #
#     Created by:                         #
#         Chuck Syperski                  #
#         Jian Zhang                      #
#                                         #
#     GNU GPL Version 3                   #
###########################################

Version: 0.26 Installer/Updater

What version of Linux would you like to run the installtion for?

1) Redhat Based Linux (Fedora, CentOS)
2) Ubuntu Based Linux (Kubuntu, Edubuntu)

Choice: [2]

FOG Server installation modes:
* Normal Server: (Choice N)
This is the typical installation type and
will install all FOG components for you on this
machine.  Pick this option if you are unsure what to pick.

* Storage Node: (Choice S)
This install mode will only install the software required
to make this server act as a node in a storage group

More information:
http://www.fogproject.org/wiki/index.php?title=InstallationModes

What type of installation would you like to do? [N]

La instalación por defecto es la N, que instala el entorno de FOG. La instalación S es para crear un nodo de almacenamiento en la red.

What is the IP address to be used by this FOG Server? []10.100.10.249

Que dirección ip quieres que utilice el servidor FOG? (ip local de la máquina)

Would you like to setup a router address for the DHCP server? [Y/n]

What is the IP address to be used for the router on the DHCP server? [10.100.10.1]

Introducir la ip del router o gateway

Would you like to setup a DNS address for the DHCP server and client boot image? [Y/n]

Queremos disponer de un servidor DNS?

What is the IP address to be used for DNS on the DHCP server and client boot image? [208.67.222.222]

Introducir la ip del servidor DNS que queremos que tengan las máquinas que soliciten una ip al servidor DHCP

Would you like to change the default network interface from eth0?
If you are not sure, select No. [y/N]

Aqui nosotros lo hemos dejado por defecto,

Would you like to use the FOG server for dhcp service? [Y/n]

Quieres utilizar el servidor FOG como servidor dhcp?, aqui la opción por defecto

#####################################################################

FOG now has everything it needs to setup your server, but please
understand that this script will overwrite any setting you may
have setup for services like DHCP, apache, pxe, tftp, and NFS.

It is not recommended that you install this on a production system
as this script modifies many of your system settings.

This script should be run by the root user on Fedora, or with sudo on Ubuntu.

Here are the settings FOG will use:
Distro: Ubuntu
Installation Type: Normal Server
Server IP Address: 10.100.10.249
DHCP router Address: 10.100.10.1
DHCP DNS Address: 208.67.222.222
Interface: eth0
Using FOG DHCP: 1

Are you sure you wish to continue (Y/N)

Aqui nos hace un resumen de la configuración que se va a aplicar, si estamos de acuerdo, pulsamos Y.

Comienza el proceso de instalación:

Installation Started…

Installing required packages, if this fails
make sure you have an active internet connection.

* Preparing apt-get
* Installing package: apache2
* Installing package: php5
* Installing package: php5-gd
* Installing package: php5-cli
* Installing package: php5-mysql
* Installing package: php5-curl
* Installing package: mysql-server

We are about to install MySQL Server on
this server, if MySQL isn’t installed already
you will be prompted for a root password.  If
you don’t leave it blank you will need to change
it in the config.php file located at:

/var/www/fog/commons/config.php

Press enter to acknowledge this message.

Cuando mysql nos solicite una password para el usuario root de mysql, lo más facil es dejarlo en blanco, así nos evitaremos tener que configurar el archivo config.php en el directorio commons, tal y como indica el mensaje que aparece arriba, pero la seguridad del servidor se verá comprometida. A partir de aqui, veremos como se descargan y se instalan los paquetes necesarios.

El último paso, nos solicita confirmación para enviar la información de la instalación a los servidores de FOG, para notificarles que tienen un usuario más. Esto es completamente voluntario y poner Y o N evidentemente no alterará la configuración o la funcionalidad de la misma de ninguna forma.

Would you like to notify the FOG group about this installation?
* This information is only used to help the FOG group determine
if FOG is being used.  This information helps to let us know
if we should keep improving this product.

Send notification? (Y/N)

Setup complete!

You still need to install/update your database schema.
This can be done by opening a web browser and going to:

http://10.100.10.249/fog/management

Default User:
Username: fog
Password: password

De esta forma finaliza la instalación, el usuario por defecto para acceder al portal http://10.100.10.249/fog/management es fog y la contraseña password.

Continuará…

THE FOG PROJECT

Existen varias soluciones en el mercado que hacen lo mismo que hace FOG, pero bajo desde mi punto de vista FOG tiene algo que no tienen los demás…tiene clase.

FOG es un sistema de clonado de imagenes de PCs, todo se controla a través de un interfaz web, en el que también existe opción móvil (portal para iphone). Como decía, existen otras opciones muy interesantes como clonezilla, que creo que es digna de mención pero no tiene la flexibilidad que puede tener el uso de un interfaz web.

Dos partes muy importantes de FOG, al margen de su funcionalidad, hacen de esta solución algo diferente: La documentación es excelente, y la instalación es absurdamente fácil (incluso han montado una máquina virtual vmware con todo el sistema montado y configurado). Su núcleo es partimage, con toda su potencia. A tráves del interfaz web podemos programar la instalación de sistemas operativos por red a través de multicast/unicast, gestionando los hosts en grupos de máquinas o de forma individual. Adicionalmente cada máquina tiene una imagen de sistema operativo asociada. Contamos con un menú tipo grub a través de PXE, desde el que podemos dar de alta en el sistema un host, añadirlo a un grupo, asignarle una imagen, etc. El registro de hosts en el sistema es la base de la arquitectura que propone FOG y esto se puede hacer a través del menú pxe, o a través del interfaz web.

Una vez tengamos todos los hosts registrados, lo ideal es crear una imagen de un pc tipo con el mismo (o parecido) hardware que el resto de las máquinas a clonar. Esta imagen la copiaremos al servidor, añadiremos todos los hosts que queramos clonar con este sistema operativo al mismo grupo, y directamente crearemos una tarea en el interfaz web para volcar la imagen en todos los equipos. Si los equipos son más de 10, FOG establece una cola. Adicionalmente, si queremos volver a volcar la misma imagen en un único equipo, también puede hacerse a través del menú pxe. En la página web de FOG se han molestado en poner los resultados de sus pruebas a nivel de tiempos y de capacidad de volcado, y la verdad que los resultados son espectaculares.

Hasta el momento todo esto han sido bondades, pero también existen inconvenientes en forma de bugs. y es que hay algunos parametros y detalles que aún falta pulir pero son pocos. Pero vamos por partes, primero, instalación bajo ubuntu 9.04 y configuración de la máquina virtual (incluidos los errores que hemos visto), y segundo, utilización del interfaz web.


MAQUINA VIRTUAL FOG

Vmware es un sistema de administración y creación de máquinas virtuales. Desde la página de descargas de FOG tenemos acceso tanto a la versión para instalar en un sistema operativo, como una máquina virtual ya montada lista para usar con el software de vmware. Nosotros hemos usado vmware server 2.0, pero serviría con el vmware player, que sería el software más básico necesario. Toda la guía se ha elaborado sobre ubuntu 9.04 32 bits.

Tras descargar el .zip, podemos descomprimirlo en nuestra home por ejemplo con:

unzip FOGVM_0.19.zip
Archive:  FOGVM_0.19.zip
creating: FOGVM_0.19/
inflating: FOGVM_0.19/FOGServer.vmdk
extracting: FOGVM_0.19/FOGServer.vmsd
inflating: FOGVM_0.19/FOGServer.vmx
inflating: FOGVM_0.19/nvram

Si tuvieramos instalado vmware player basta con ejecutar el archivo .vmx haciendo doble click sobre él*.

*Nota: si lo añadimos al inventario de un vmware workstation (o vmware server 2.0) tendremos que indicarle cuando nos pregunte que lo hemos copiado, y no que lo hemos movido.

Una vez copiada y arrancada la imagen, nos mostrará esto:

Como se puede ver, el usuario y el password para acceder a la máquina es root/password, sin más complicaciones. Una vez hecho esto, se iniciará un script que automáticamente nos solicitará una serie de datos, en este caso nos dará 3 opciones a elegir:

En primer lugar seleccionaremos la primera opción (valga la redundancia). El arbol de opciones que nos presenta el script en la primera opción es el siguiente:
1. Enter an ip address: Aquí tenemos que poner la ip local que queremos que tenga la máquina. Ejemplo 10.100.10.210
2. Enter a netmask address: Aquí tenemos que facilitar la máscara de red. Ejemplo 255.255.255.0
3. Enter a Gateway address: Aquí la puerta de enlace. 10.100.10.1
4. Enter a DNS address: Introducir la ip de un servidor de nombres de dominio, puede ser uno que esté fuera de la red, o uno que nos hayamos configurado en la red local.

Tras introducir esta información nos aparecerá la siguiente pantalla:

El texto nos informa que, si ya hemos configurado FOG, necesitamos volver a iniciar el script de configuración de FOG para que coja los cambios de las ips que acabamos de introducir. Pulsamos enter para aceptar y continuamos. Ahora volveremos a la pantalla de las opciones y esta vez seleccionamos la opción 2, Run Fog Setup. Veremos lo siguiente:

La mayoría de las opciones que debemos seleccionar estarán indicadas por defecto entre corchetes [ ]. Dado que la máquina virtual viene preconfigurada en ubuntu, la opción 2 nos sirve.

Aclaración: Como se ve en la imagen, la versión es 0.26, que es la última versión en la fecha de la creación de este documento. En cambio, la versión original que está preinstalada en la máquina virtual es la 0.19, así que antes de hacer nada, conviene actualizar FOG a la última versión, de una forma extremadamente sencilla, que explicaré más adelante ya que este instalador es igual en ambas versiones.

Pulsamos enter:

En este caso seleccionaremos la N, porque seria la instalación normal. La opción S, tal y como especifica, es para que esta máquina simplemente actúe como un nodo de almacenamiento en la red. Esta opción no la hemos probado, pero puede ser muy interesante. Continuamos, pulsamos enter. El resto de las opciones podemos ir pulsando enter para dejarlas por defecto, hasta que llegamos a esta pantalla:

Aquí se nos solicita confirmación para continuar con la instalación con los datos que le hemos dado. En nuestro caso hemos configurado los que aparecen en la imagen. Es conveniente no tener más de un servidor DHCP por segmento de red ya que para este tipo de arranques en la configuración dhcp se incluye la ruta al archivo pxelinux.0 como veremos más adelante.

En esta pantalla se observa como el asistente descarga los paquetes necesarios y los instala. Si al instalar mysql escribimos un password para el usuario root, posteriormente será necesario modificar el password del usuario en el archivo config.php, el parámetro en negrita. Para una instalación en producción quizá sea interesante poner password al usuario root de mysql o crear otro, por temas de seguridad.

root@FOGServer:~# cat /var/www/fog/commons/config.php
<?php
/*
*  FOG  is a computer imaging solution.
*  Copyright (C) 2007  Chuck Syperski & Jian Zhang
*
*   This program is free software: you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation, either version 3 of the License, or
*   any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
*
*/

define( “IS_INCLUDED”, true );
define( “TFTP_HOST”, “10.100.10.210″ );
define( “TFTP_FTP_USERNAME”, “fog” );
define( “TFTP_FTP_PASSWORD”, “8fd4df0dc0692c92ee7e24d8ea0c9ab5″ );
define( “TFTP_PXE_CONFIG_DIR”, “/tftpboot/pxelinux.cfg/” );
define( “TFTP_PXE_KERNEL_DIR”, “/tftpboot/fog/kernel/” );
define( “PXE_KERNEL”, “fog/kernel/bzImage” );
define( “PXE_KERNEL_RAMDISK”, 127000 );
define( “USE_SLOPPY_NAME_LOOKUPS”, “1″);
define( “MEMTEST_KERNEL”, “fog/memtest/memtest” );
define( “PXE_IMAGE”,  “fog/images/init.gz” );
define( “PXE_IMAGE_DNSADDRESS”,  “208.67.222.222″ );
define( “STORAGE_HOST”, “10.100.10.210″ );
define( “STORAGE_FTP_USERNAME”, “fog” );
define( “STORAGE_FTP_PASSWORD”, “8fd4df0dc0692c92ee7e24d8ea0c9ab5″ );
define( “STORAGE_DATADIR”, “/images/” );
define( “STORAGE_DATADIR_UPLOAD”, “/images/dev/” );
define( “STORAGE_BANDWIDTHPATH”, “/fog/status/bandwidth.php” );
define( “CLONEMETHOD”, “ntfsclone” );  // valid values partimage, ntfsclone
define( “UPLOADRESIZEPCT”, 5 );
define( “WEB_HOST”, “10.100.10.210″ );
define( “WEB_ROOT”, “/fog/” );
define( “WOL_HOST”, “10.100.10.210″ );
define( “WOL_PATH”, “/fog/wol/wol.php” );
define( “WOL_INTERFACE”, “eth0″ );
define( “SNAPINDIR”, “/opt/fog/snapins/” );
define( “QUEUESIZE”, “10″ );
define( “CHECKIN_TIMEOUT”, 600 );
define( “MYSQL_HOST”, “localhost” );
define( “MYSQL_DATABASE”, “fog” );
define( “MYSQL_USERNAME”, “root” );
define( “MYSQL_PASSWORD”, “” );
define( “USER_MINPASSLENGTH”, 4 );
define( “USER_VALIDPASSCHARS”, “1234567890ABCDEFGHIJKLMNOPQRSTUVWZXYabcdefghijklmnopqrstuvwxyz_hB()^!” );
define( “NFS_ETH_MONITOR”, “eth0″ );
define(“UDPCAST_INTERFACE”,”eth0″);
define(“UDPCAST_STARTINGPORT”, 63100 );                     // Must be an even number! recommended between 49152 to 65535
define(“FOG_MULTICAST_MAX_SESSIONS”, 64 );
define( “FOG_JPGRAPH_VERSION”, “2.3″ );
define( “FOG_REPORT_DIR”, “./reports/” );
define( “FOG_THEME”, “blackeye/blackeye.css” );
define( “FOG_UPLOADIGNOREPAGEHIBER”, “1″ );
define( “FOG_VERSION”, “0.26″ );
define( “FOG_SCHEMA”, 18);
?>

Aqui también hay una serie de parámetros interesantes que describiré en la parte de administración y configuración de FOG. Con ese último paso finalizaría la instalación, y nos mostraría en pantalla el siguiente mensaje:

Would you like to notify the FOG group about this installation?
* This information is only used to help the FOG group determine
if FOG is being used.  This information helps to let us know
if we should keep improving this product.

Send notification? (Y/N)y
* Thank you, sending notification…Done



Setup complete!

You still need to install/update your database schema.
This can be done by opening a web browser and going to:

http://10.100.10.249/fog/management

Default User:
Username: fog
Password: password

Por último accedemos al portal de administrador con el usuario “fog” y contraseña “password” en la url http://10.100.10.249/fog/management

Hasta aquí la primera parte.

ADMINISTRACIÓN BÁSICA Y CONFIGURACIÓN DE FOG

En este apartado, asumo que, de una manera o de otra (vmware o instalación en host) hemos llegado al portal de administración, alojado en http://<ipdelhost>/fog/management.

Lo primero que vemos es esta pantalla:

En esta pantalla, pulsamos sobre install/Upgrade Now para acceder a la pantalla de login y finalizar la creación de la base de datos. Escribimos usuario fog y contraseña password y accedemos a la sección home.
Desde aqui tenemos una visión global, usuario, ips del servidor web y del servidor tftp, actividad del sistema información del espacio en disco, y gráficas de uso por fecha y máquinas clonadas. Pasamos la sección user.
En esta sección podemos llevar a cabo la gestión de usuarios y contraseñas de acceso al sistema, incluso podemos habilitar usuarios para que únicamente puedan acceder al portal web móvil, y realizar operaciones básicas.
Lo que haremos aqui es hacer click en modify y resetear la password del usuario fog. Saldremos de la aplicación, y volveremos a entrar con el nuevo password.
Antes de ir a la sección hosts, en la que podemos registrar máquinas manualmente, pienso que es más cómodo registrar los hosts por pxe. El proceso de registro es muy importante, ya que la gestión de todo el resto de funcionalidades se basa en ello. FOG nos da varias posibilidades de cargar hosts en la BBDD de la aplicación, manualmente en la web, a través de PXE, y con un archivo CSV (esto último no lo hemos probado). En el laboratorio de pruebas hemos montado una máquina virtual con Windows XP y hemos arrancado la máquina por PXE, el menú que vemos es el siguiente:
Existen varias opciones, pero la que nos interesa ahora mismo es Quick Host Registration and Inventory. Con esta opción arrancaremos la máquina virtual y la registraremos en nuestro servidor. Tras pulsar enter mientras esta opción está seleccionada, arrancaremos la máquina y veremos el proceso de registro rápido y envío de esta información al servidor FOG. Una vez finalizado este proceso, la máquina se reiniciará.
Ahora vamos a crear en la sección imágenes un nombre de archivo e imagen para poder asignarla a nuestro host, de tal manera que siempre se usará esta imagen para volcar en este host.

En la sección imagen vamos a definir el nombre de la imagen, una breve descripción del estado de la misma si queremos, el grupo de almacenamiento, que en nuestro caso es local, default, el nombre del archivo que queramos y el tipo de imagen. Esta última seleccion no es trivial, ya que dependiendo de que sistema operativo vayamos a clonar o el layout de particiones del disco duro de la máquina que vayamos a clonar, será una u otra. En nuestro caso es un Windows XP Profesional, así que seleccionaremos del desplegable image type la opción Single Partition (NTFS only resizable). Luego pulsamos en add.

Ahora sí, vamos a la sección de hosts, y pulsamos sobre list all hosts. En la lista aparecerá la máquina que acabamos de registrar a través del menú PXE, en nuestro caso, nuestra máquina virtual con Windows xp instalado.

Pulsamos edit, seleccionamos la imagen que hemos creado anteriormente, y el tipo de sistema operativo. El resto de opciones las dejamos por defecto y pulsamos sobre update.

Hecho esto, ya podemos empezar a jugar con la funcionalidad principal de FOG, el clonado y volcado de imagenes*.
*Nota: Es posible crear grupos de hosts, esto puede ser útil para hacer un volcado por multicast a un grupo determinado de máquinas al mismo tiempo. Por ejemplo pueden agruparse por sistema operativo o hardware en funcion de lo que nos interese.

En esta misma pantalla, tras pulsar el botón update, pulsamos dentro del grupo host menu en el margen izquierdo, la opción Basic tasks:

Dentro de estas tareas básicas contamos con la subida o copia de imagen al servidor, y el volcado de la imagen alojada en el servidor.En este caso pulsaremos en upload. Esto genera una tarea asociada al host que al arrancar realiza la tarea seleccionada. Al iniciar la máquina virtual en nuestro caso, y arrancar por PXE, no tendremos un menu, sino que directamente se ejecutará la tarea programada. En el arranque, el equipo se identificará en el servidor FOG, y posteriormente procederá a ejecutar el proceso de subida de la imagen.

En nuestras pruebas, subir una imagen de 3.07 gb tarda unos 5 minutos aproximadamente, y en volcarla en el mismo equipo, unos 2 y medio.

El proceso de identificación tiene el siguiente aspecto:

Y el proceso de subida de la imagen propiamente dicho muestra lo siguiente:
Esta imagen se ha tomado de un equipo vmware con 400 MB de ram y 8 gb de disco, enviandola a un servidor FOG en virtualbox con 400 mb de ram y 8 gb de disco, bajo un host con 1 gb de ram y un procesador pentium 4 a 3 ghz*.
*NOTA:Los resultados comentados anteriormente se han conseguido en máquinas algo más potentes, para más detalles sobre benchmarks, en la página de FOG se han molestado en publicar unos resultados muy interesantes sobre pruebas de rendimiento.

Para realizar el volcado de imagen, o bien seleccionamos quick image en el menú PXE (lo que identificará primero el equipo y solicitará un usuario para que en el siguiente reinicio realice la tarea), o bien programamos el volcado a través del interfaz web (en el menú basic tasks, deploy) que directamente realizará la tarea en el primer arranque y no será necesario reiniciar.
Una vez realizado el volcado, la máquina reiniciará.
-                                -
-                               -
Con esto queda cubierto el funcionamiento básico de la herramienta. Esperamos que os hay sido de utilidad. Por nuestra parte pretendemos, si nuestro asistente social trabajo nos lo permite, poder publicar una guía avanzada.
Al realizar esta guía no hemos hecho mas que reafirmarnos en nuestra opinión de que a día de hoy, Fog, es la mejor herramienta posible para entornos de enseñanza, pymes, o departamentos con recursos limitados en empresas, por lo que evidentemente, recomendamos y animamos a probarlo.
-            -
Como vereis, nuestros dos proyectos iniciales han tratado sobre programas de software libre. No es este el sitio (o al menos no por ahora) para hacer una apología para este tipo de licencias, no obstante, si queremos destacar que tanto por el apoyo de la comunidad, como por la calidad de los productos comentados, estas herramientas pueden mirarse a la cara (sino pisotear miserablemente por encima) a cualquier solución de pago.
- -
Intentaremos seguir esta linea, aunque no vamos a desmerecer a ninguna herramienta que no sea de código libre que nos llame la atención.
- – - – -
Seguimos investigando.

Ahora que ya tenemos nuestras máquinas listas es el momento de instalar  la herramienta TcosMonitor.

TcosMonitor es una herramienta usada para administrar los terminales de la red a partir del servidor o a partir de un terminal. Nosotros, dado el entorno que propusimos, la instalaremos en el servidor.

En este entorno de enseñanza, el profesor controlaría tendría control absoluto del terminal del alumno a través de TcosMonitor.

Ahora desarrollaremos algo mas, pero algunas de las cosas que podemos hacer con Tcosmonitor son:

  • Reiniciar/apagar los terminales.

  • Bloquear o desbloquear la pantalla, teclado y ratón de los terminales.

  • Controlar un terminal mediante VNC.

  • Hacer una captura de pantalla de los terminales.

  • Cerrar la sesión gráfica de los usuarios.

  • Ejecutar una aplicación en el terminal.

  • Enviar mensajes a los usuarios conectados.

  • Visualizar/cerrar las aplicaciones que están siendo ejecutadas por los usuarios.

Para instalar TcosMonitor solo hemos de teclear esto como root:

#apt-get install tcosmonitor

Ya está instalado, pero de momento vamos a dejarlo aparcado.

Nos centramos por un momento en nuestro terminales.

Encendemos nuestros terminales*

*Para poder realizar las capturas, hemos activado dos terminales en sendas máquinas virtuales.

Pantallazo19

En esta imagen se pueden observar dos terminales.

Uno de ellos tenía un arranque transparente, el usuario encendió el equipo y le salió directamente la pantalla para loguearse.

En el terminal inferior está habilitado el menú de arranque por texto.

Se pueden observar las diferentes opciones, elegiremos la primera, que es la que nos interesa para este entorno.

Pantallazo23

Aquí podemos observar la pantalla de carga*.

*Esta pantalla es editable, como pudimos observar durante la creación de la imagen con TcosConfig. Puede que en algunos se quiera cambiar por el logo de la escuela, academia, empresa…etc.

Una vez arrancadas las máquinas,  hemos accedido con nuestros respectivos usuarios.

Ahora volvemos a nuestra máquina servidor.

Vamos a Sistema –> Administración –> TcosMonitor

La pantalla inicial es un Acerca de…

Aquí nos ofrecen información Acerca del Proyecto Tcos, Licencia, Autores, Traductore y un apartado de Donaciones

Pantallazo30

Cerramos esta ventana y se nos muestra la aplicación.

Pantallazo31

Pulsamos en actualizar.

Pantallazo20

Vemos como ahora nos muestra los usuarios activos que tenemos en nuestra red y un breve resumen de sus características.

Podemos interactuar individualmente con cada uno de los usuarios o de manera colectiva.

Pulsamos con el botón derecho sobre un usuario.

Pantallazo21

Se nos despliegan las diferentes opciones de interacción con el usuario.

No creemos que este blog sea el sitio para adentrarse en una explicación pormenorizada de todas y cada, por lo que nos limitaremos a mostrar las que a nuestro juicio nos han parecido mas interesantes.

Por ejemplo podemos enviar mensajes de texto a un usuario.

Pantallazo28

Por supuesto podemos cumplir nuestra amenaza pulsando en Bloquear Pantalla.

Pantallazo22

Si le bloqueamos el equipo al usuario éste no podrá hace absolutamente nada puesto que también se desactiva el teclado y el ratón.

Podemos, por ejemplo, lanzarle una aplicación. Bien escribiendolo en el cuadro de texto o arrastrado un lanzador al cuadradito correspondiente.

Pantallazo27

También se pueden ver los procesos que tiene abiertos el usuario.

Pantallazo24

Como se puede observar en la captura, podemos matar el proceso que queramos.

También podemos enviar audio o vídeo desde nuestro servidor a los terminales.

Cuando estemos enviando audio o vídeo podemos bloquear el teclado y ratón de los equipos para que no se pueda manipular la reproducción.

Pantallazo25

Pantallazo29

El vídeo se reproduce en tiempo real en los terminales que designemos.

Creemos que con esto es suficiente para percatarse de la versatilidad de la herrmienta.

Como con casi todas las herramientas de este tipo, lo mejor es jugar con ella y adecuar el uso a nuestras necesidades de entorno.

Pues bien, hasta aquí esta serie de post relaccionados con este magnífico Proyecto Tcos.

Nos encontramos en pleno proceso de elaboración de otro proyecto que creemos será complementario a este. Si el tiempo y nuestro trabajo nos lo permite esperamos tener el inicio publicado durante esta semana.

Echar un vistazo a la lista de agradecimientos puesto que sin ellos esto hubiera sido imposible.

Un saludo.


A continuación tenéis una lista de agradecimientos y páginas de consulta.

http://wiki.tcosproject.org

http://argentina.tcosproject.org/

A Furia por prestarnos el terminal.

Y a J.P.F, por dejarnos frikear desarrollar el proyecto sin darnos caña.


#apt-get install tcosmonitor

Una vez hemos configurado el entorno hay que crear la imagen que los terminales van a recibir

TCOSCONFIG

TcosConfig es una herramienta gráfica usada para configurar y compilar imágenes del Kernel del sistema operativo que va a ser compartido con los terminales.

Vamos a Aplicaciones -> Herramientas del Sistema -> TcosConfig

Se nos abrirá la siguiente ventana

figura 1

figura 1

Pulsamos en Adelante

figura 2

figura 2

Aquí podemos elegir entre algunas configuraciones por defecto. Tcos nos ofrece distintas plantillas basadas en la potencia de nuestros terminales.

No vamos a entrar demasiado aquí puesto iremos pasando por cada una de las opciones con el fin de editarlas o explicarlas. Así que elegimos la configuración por defecto.

* En nuestro caso solo ha funcionado TcosConfig si elegimos la configuración por defecto y luego cambiamos las opciones a nuestro antojo. Si elegimos otra configuración nos da un error al generar el Kernel.

Pulsamos en Adelante

Pantallazo3

En esta figura podemos ver la configuración de Xorg. En esta ventana podemos activar la interfaz gráfica en los terminales, incluir los drivers de la placa de video, configurar el mapa y el model del teclado, la resolución y el tipo de sesión gráfica.

Como podeis comprobar, nosotros hemos activado todas las opciones puesto que nuestros terminales (físicos o virtuales) tienen la suficiente capacidad para aceptarlo. Si disponeis de terminales especialmente antiguos o simplemente no quereis sesión gráfica podeis configurarlo aquí.

figura 4

figura 4

Aquí podemos definir la configuración de sonido de nuestro terminales.

  • Habilitar el sonido en los terminales, marcando la opción Habilitar el sonido.
  • Definir el volumen por defecto de los terminales.
  • Incluir los módulos de la placa de sonido ISA, si es necesario.
  • Usar el servidor de sonido PulseAudio, para compartir el sonido emitido por el servidor en los terminales (dando preferencia a éste)
figura 5

figura 5

Aquí decidimos la aplicación que va a ser utilizada para acceder remotamente a los terminales, para acceder a las tareas administrativas.

Hemos optado por X11VNC, no obstante también están disponibles FreeNX y rDesktop.

figura 6

figura 6

Aquí podemos definir los siguientes elementos:

  • Podemos habilitar (o no) el soporte wi-fi de los terminales.
  • Activar los módulos de la placa de red.
  • Definir el tipo de criptografía para la transmisión de datos entre el servidor y los terminales.
  • Definir la llave WEP/WPA que compartiremos con los terminales.

* Aún no hemos podido probar estas opciones. En cuanto tengamos unas pruebas realizadas lo añadiremos en la sección correspondiente.

figura 7

figura 7

Aquí definimos el usuario y contraseña de administrador así como el número de consolas tty que puede tener abiertas el terminal.

figura 8

figura 8

Aquí podemos activar/desactivar las siguientes opciones:

  • Depurar la compilación de imágenes. Esto básicamente quiere decir que durante la compilación del Kernel se nos mostrará la lista de acciones que están siendo realizadas, así como los errores y consejos para corregirlos. Dejar SIEMPRE activada esta opción.
  • Incluir las herramientas de depuración utilizadas para (valga la redundancia) depurar el Kernel. Dejar esta opción SIEMPRE activada.
  • Soporte para Squashfs.
  • Descarga del archivo Squashfs externo. Por defecto, esta opción viene activada, permitiendo que el terminal obtenga el archivo a partir del servidor.
  • Definir el límite de memoria RAM que va a ser usado por el terminal, en el caso de que la inicialización ocurra vía NFS. Por defecto viene (y lo hemos dejado) a 38 MB.
  • Deshabilitar el soporte de los módulos: ACPID (Avanced Configuration and Power Interface), permite una gestión de energía inteligente y consulta los estados de la batería. Así mismo habilita el RAID. Esto puede ser interesante para ganar en seguridad y velocidad de acceso.
figura 9

figura 9

Aquí habilitamos diferentes servicios y demonios.

  • TcosMonitor: el interfaz gráfico que utilizaremos para tener controlados los terminales.
  • Inetd: que gestionará las conexiones y demonios.
  • SSH
  • Tcosinstaller: el instalador del TCOS
  • ACPID
  • Soporte para impresora (no se ha probado)
  • Sistema de archivos remoto (solo probado con LTSP)
  • Activación del soporte WakeonLan (no disponíamos de ninguna placa que permitiese el encendido remoto por lo que evidentemente lo hemos dejado sin marcar)
figura 10

figura 10

Aquí configuramos básicamente la pantalla inicial que se verá en los terminales.

  • La opción por defecto (sin menú), es ideal para un inicio transparente.
  • Las siguientes opciones varían el tipo de menú. Mostrando o no, las diferentes opciones del mismo. Dependiendo de los terminales y las necesidades propias de la instalación deberán activarse unos u otros.
  • En la última opción podemos cambiar el Usplash (la pantallita que nos saldrá durante el inicio).
figura 11

figura 11

Aquí seleccionamos la versión de Kernel que vamos a utilizar. Dependiendo de la potencia de los terminales puede interesarnos utilizar otro distinto al del propio host.

Por otra parte podemos habilitar/deshabilitar los dispositivos y el soporte USB e IDE.

figura 12

figura 12

No hemos probado ninguna de estas opcioines, por lo que las hemos dejado desactivadas.

En principio solo deberías activarla si vas a utilizar alguno de los modelos de terminal que aparecen en la lista.

figura 13

figura 13

Aquí podemos habilitar el navegador WEB local de los terminales.

En principio y para el entorno de enseñanza que pretendemos, creemos que es mejor desactivar esta opción. Los terminales tendrán navegador pero será el del host. Pudiendosé habilitar o deshabilitar éste en tiempo real con la herramienta TcosMonitor.

figura 14

figura 14

Aquí elegimos el método de arranque.

Solo hemos podido probarlo con el arranque PXE, que por otra parte, nos parece el mas rápido y fiable para el proyecto elegido.

En cualquier caso se puede elegir entre:

  • PXE
  • Disquette Etherboot
  • CDROM
  • Arranque NFS

Pulsamos en Adelante

figura 15

figura 15

Esta es la pantalla previa a la creación de imagen.

Podemos revisar nuestra configuración pulsando Atrás o si estamos seguros pulsar en Comenzar.

figura 16

figura 16

Aquí vemos el comienzo del proceso.

figura 17

figura 17

Como se puede observar, durante el proceso de creación se va generando un log. Conviene revisarlo por si algún paso ha dado error, con el fin de poder subsanarlo.

Pusamos en Adelante

figura 18

figura 18

En esta pantalla se nos informa de la finalización del proceso. No nos queda mas que pulsar en Terminar y Guardar.

Ahora solo hemos de iniciar los terminales.

Si todo ha ido bien debería arrancar un flamante Ubuntu 8.04 en vuestros terminales.

Y ya esta? Ya hemos terminado?

En absoluto joven padawan joven amigo geek.

Nos queda lo mejor. Instalar TcosConfig para controlar todos nuestros terminales desde el host.

<–Ir a Proyecto Tcos 3/5 (Configuración del entorno)

Vale, pues empieza lo duro…

Comenzamos logeándonos como root en nuestra consola de ubuntu

(evidentemente en el host)

$ sudo su

Tecleamos nuestra contraseña de root.

Ahora que estamos logeados hemos de obtener la llave pública de Mario Izquierdo, el desarrollador de la Herramienta.Tecleamos:

# wget http://www.tcosproject.org/mariodebian-pub.key

Añadimos la llave al APT

# apt-key add mariodebian-pub.key

Ahora hemos de añadir el repositorio a nuestro sources.list. Para ello tecleamos:

# nano /etc/apt/sources.list

Vamos hasta la última linea y añadimos esto

# deb http://www.tcosproject.org/ hardy main

(Esto es en el caso de que lo estemos haciendo con un Ubuntu 8.04. Si nuestra distribución es distinta debemos asegurarnos de que existen repositorios para ella. Para esto debemos visitar http://www.tcosproject.org/packages.html)

Cerramos nano y actualizamos nuestra lista de paquetes con

# apt-get update

Instalamos Tcos y su conjunto de herramientas con

# apt-get install tcos

Nos vamos al raiz de nuestro sistema y tecleamos

# ls /

Comprobamos si existe un directorio llamado /tftpboot. Si no existe tecleamos

# mkdir /tftpboot

Ahora reconfiguramos la instalación con

# dpkg-reconfigure initramfs-tools-tcos

* En el caso de que no estemos utilizando Ubuntu ahora habría otro paso mas. Tendríamos que instalar los módulos unionfs y squashfs.

Para hacerlo tecleamos

# apt-get install tcos-extra-modules-versión_del_kernel

A continuación instalamos la herrmienta Tcos Config para poder configurar y crear las imágenes de Kernel que serán compartidas en la red y creadas en los terminales. Para ello tecleamos

# apt-get install tcosconfig

CONFIGURACION DEL ADMINISTRADOR DE VENTANAS CONFIGURACION GDM

En el caso de que nuestro administrador de ventanas vaya a ser GNOME es necesario configurar el Gnome Display Manager, el administrador de login que usa GNOME. Para configurarlo editamos el archivo /etc/gdm/gdm.conf y editamos las siguentes etiquetas

# nano /etc/gdm/gdm.conf

una vez dentro editamos

[daemon]

TimedLoginEnable=true

TimedLogin=/usr/sbin/tcos-gdm-autologin|

TimedLoginDelay=10

[security]

AllowRemoteAutoLogin=true

DisallowTCP=false

[xdmcp]

Enable=true

Ahora reiniciamos el servicio GDM

#/etc/init.d/gdm restart

* Si bien Tcos admite la configuración para KDE3 y KDE4, nosotros aún no hemos podido probarlo. En cuanto lo hagamos lo añadiremos en su apartado correspondiente.

CONFIGURACIÓN DHCP

El servicio DHCP permite que los terminales reciban su configuración de red automáticamente. Así evitamos la configuración manual de cada uno de ellos. Hemos optado por esta opción puesto que nos parece la mas sencilla y resultará óptima para la mayoría de los proyectos en los que se utilice Tcos. Si nuestro host tiene mas de una tarjeta de red hemos de especificar a cual de ellas serán dirigidas las peticiones DHCP de los terminales. Para ello, editamos el archivo dhcp3-server.

#nano /etc/default/dhcp3-server

Una vez dentro especificamos la interfaz de red que va a ser utilizada para nuestros fines en la linea INTERFACES, por ejemplo:

#INTERFACES=”eth0″

o

#INTERFACES=”eth1″

Ahora hemos de configuar el servidor DHCP. Esta configuración puede ser hecha para ofrecer IPs dinámicas o estáticas Como ya comentamos antes, nos hemos decantado por las dinámicas. Para configurarlo tecleamos

# nano /etc/dhcp3/dhcpd.conf

Ahora os mostramos un ejemplo de configuración (podeis copiarlo y pegarlo sustituyendo los valores en negrita por los de vuestra propia red).

allow booting;

allow bootp;

ddns-update-style none;

default-lease-time 21600;

max-lease-time 21600;


# parametros por defecto

option subnet-mask 255.255.255.0;

#mascara de red de nuestra red

option broadcast-address 192.168.0.255;

#direccion de broadcast de nuestra red

option routers 192.168.0.1;

#dirección de nuestra puerta de enlace

option domain-name-servers 192.168.0.1;

#servidor de dominio que tengamos, o dns, ya sea local o publica

option domain-name “tcos-domain.org“;

option option-128 code 128 = string;

option option-129 code 129 = text;

#option root-path “192.168.0.1:/tftpboot“;


get-lease-hostnames true;

#Proporcionar nombres de hosts a los terminales

#next-server 192.168.0.1;

#shared-network THINCLIENTS {

#Esto podemos comentarlo

subnet 192.168.0.0 netmask 255.255.255.0 {

#subred a la que pertenecen los hosts a los que queremos dar ips por dhcp

#rango de ips donde queremos

range dynamic-bootp 192.168.0.2 192.168.0.254;

if substring (option vendor-class-identifier, 0, 9) = “PXEClient” {


#abajo se define la ruta relativa a pxelinux.0 (se obvia tftpboot)

filename “/tcos/pxelinux.0“;

}


else{

#Aquí hemos de poner nuestro Kernel

filename “/tftpboot/tcos/vmlinuz-2.6.24-19-generic“;

}

}

}

Reiniciamos el servicio con

# /etc/init.d/dhcp3-server restart

Un ejemplo de configuración válida es este:

/etc/dhcp3/dhcpd.conf

# dhcpd.conf
# from: http://www.ubuntu-es.org/node/20079

ddns-update-style ad-hoc;

option subnet-mask 255.255.255.0;
option broadcast-address 10.100.10.255;
option routers 10.100.10.1;
option domain-name-servers 208.67.222.222;
#option domain-name “tcos-domain.org“;
option option-128 code 128 = string;
option option-129 code 129 = text;

get-lease-hostnames true;


# REPLACE WITH YOUR SERVER IP (192.168.0.3 is an example)
#next-server 192.168.0.3;
#option root-path “192.168.0.3:/var/lib/tcos”;


shared-network WORKSTATIONS {
subnet 10.100.10.0 netmask 255.255.255.0 {

range dynamic-bootp 10.100.10.200 10.100.10.250;
filename “/tcos/pxelinux.0″;

# All thin clients boot from PXE (floppy or NIC BIOS)

# (we can add static addresses here too)
#host host01 {
#  hardware ethernet     00:E0:06:E8:00:84;
#  fixed-address         192.168.0.101;
#}
}
}

CONFIGURACIÓN ATFTPD

Ahora comprobamos la configuración tftp con:

# cat /etc/default/atftpd

Nos tiene que salir (si hemos seguido los pasos) EXACTAMENTE esto:

# USE_INETD=true

OPTIONS=”–daemon –port 69 –tftpd-timeout 300 –retry-timeout 5     –mcast-port 1758 –mcast-addr 239.239.239.0-255 –mcast-ttl 1 –maxthread 100 –verbose=5  /tftpboot”

Esto se queda por defecto, para probar el correcto funcionamiento del servidor tftp podemos hacer lo siguiente:

# touch /tftpboot/prueba

# tftp localhost

# get prueba

# quit

# ls  -la

si no nos ha dado error de timeout o de que no encuentra el archivo, el servidor tftp esta funcionando correctamente, tambien podemos ver que está ocurriendo en todo momento con el siguiente comando:

# cat /var/log/syslog

Con este comando vemos los eventos del servidor, por ejemplo, si falla es una buena manera de saber por qué.

RESOLUCION DE NOMBRES DE LOS TERMINALES

Los terminales de nuestra Red deben tener las direcciones IPs asociadas a los respectivos nombres. El motivo es sencillo, poder controlarlos posteriormente con el tcos-monitor, que es una herramienta muy potente de control de los terminales, a todos los niveles como luego veremos. Para ello, debemos editar el archivo /etc/hosts:


# cat /etc/hosts

127.0.0.1    localhost
127.0.1.1    ubuntupxe
10.100.10.250    vmware
10.100.10.245   vmware2
10.100.10.244   vmware3
10.100.10.242   vmware4
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts


En este caso hemos añadido 4 maquinas al archivo. Cuando la maquina arranque el servidor dhcp le otorgará una ip y gracias a este archivo le proporcionará un nombre de host. Si no llevamos a cabo este paso, los clientes no arrancarán y únicamente llegaremos a ver una consola (busybox).

Ya hemos configurado completamente el entorno.

Ahora solo nos queda crear la imagen con Tcos.

Ir a Proyecto Tcos 4/5 (creación de imagen del Kernel)–>

<–Ir a Proyecto 2/5 (Preparación del entorno)

El entorno con el que vamos a trabajar es el siguiente:

Como host contamos con:

  • Intel e6750
  • 4 GB
  • Tarjeta de red de 100 MB
  • Ubuntu 8.04 (x32)

Como terminales “tontos” (o thinclient) y gracias a la colaboración de Furia, contamos con un Artigo A100 muy mono

Dan ganas de adoptarlo...

Dan ganas de adoptarlo...

Las características de esta pornografía geek cucada son:

  • VIA VX700 Unified Digital Media IGP Chipset
  • 1GB
  • 4 puertos USB
  • 1 10/100Mbps RJ-45 LAN port
  • salida VGA

Como podéis comprobar carece de HD o de cualquier tipo de almacenamiento.

Para el resto de la red y para poder simular en mayor medida un entorno de enseñanza o difusión utilizaremos máquinas virtuales realizadas con VmWare Workstation.

Estas máquinas virtuales se componen simplemente de 128 MB y una tarjeta de red y se encuentran alojadas en una máquina de similares características a la primera.

Todas ellas conectadas a través de un switch.

Lo primero que debemos saber con certeza es que nuestras máquinas (la de host no hace falta) sin capaces de arrancar por pxe. Con un simple vistazo a Bios será suficiente.

Una vez confirmado que poseemos todos los elementos para el entorno empezaremos con la configuracion.

Ir a Proyecto Tcos 3/5 (Configuración del entorno)–>

<—Ir a Proyecto Tcos 1/5 (Introducción)

Para nuestro primer post y con el fin de crear una linea editorial idea definida de lo que pretendemos que sea este blog, hemos decidido empezar con un “manual” o experiencia compartida acerca del montaje y administración de un proyecto basado en Tcos.

Tcos es un proyecto de Software Libre que permite la utilización y gestión de terminales “tontos” conectados a un servidor de red. Mediante este método se comparte el mismo sisttma operativo así como otros recursos tecnológicos (impresora, internet…etc).

Para entenderlo un poco basta con imaginar un entorno educativo y diez alumnos con sus respectivos ordenadores aprendiendo las distintas bondades que nos ofrece el mundo de internet, la offimática, o los sistemas operativos.

En un entorno normal cada alumno contaría con un máquina que tendría que tener disco duro, DVD, RAM como para arrancar el sistema operativo…etc. A parte de los costes y del poco control que tendría el profesor sobre lo que están haciendo sus alumnos hay que sumar las posibles averías por el mal uso del sistema operativo…etc

Con Tcos esto queda solucionado.

Una sola máquina actúa de servidor de sistemas operativos, estos arrancarían mediante PXE conectándose a esa máquina (host) e iniciando un S.O basado en Linux desde el cual el usuario dispondrá de todas las aportaciones de la máquina host (RAM, disco duro, potencia del procesador..). Con este sistema al usuario le bastaría un “terminal tonto”, es decir, una máquina que solo tendría disponer de un procesador equivalente a PII, tarjeta de red, y 64 MB.

La bestia...

La bestia...

Ahora que tenemos claro lo que vamos a hacer preparemos el entorno.

Ir a Proyecto Tcos 2/5 (Preparación del entorno)

Entradas antiguas »