USBETL

De WikiEtl
Saltar a: navegación, buscar
Logo USBETL.png

Ficheros del USBETL

Se encuentran en /users/misc/etl/usbetl_final/ en violin, en el HOME de la cuenta etl.

Desarrollo

Esta paranoia surgió de la mezcla de una tarde de aburrimiento y la pérdida de un pendrive por parte de algún alumno en aulas. Si eso además lo juntas con un becario que se pica con tonterías como estas... el resultado es el USBETL. La idea era utilizar una distribución Linux ligera como Slax y el cargador Syslinux, para intentar automatizar el proceso de restauración de los clientes recién clonados con Ghost. De paso, se le añadieron más funcionalidades útiles para la administración de equipos. Básicamente esa era la primera versión. En la segunda versión se le añadió la posibilidad de tener 2 cargadores de sistema más; con la idea de hacerlo más ampliable y escalable. Versiones:

  • USBETLv1: con Syslinux se conseguía:
- Restaurador de Linux v1.0
- MultiGhost v8
- Hiren's Boot CD
- Slax Live
- Memtest86+
  • USBETLv2: se integra lo de la versión 1 y se añade:
- Cargador Grub2 con soporte para ISOS.
- Cargador Grub4Dos con soporte para Windows.
- Instalación Ubuntu 9.10 desde ISO.
- Instalación Debian 5.0 desde red.
- WinPE 2.0
  • USBETLv2.5: algunas mejoras
- Solucionar el tema de UDEV y el nombre de los interfaces... -> Restaurador de Linux v2.0
- Script para "clonar" Pendrives
- Instalación de Windows XP desde USB -> No se consiguió hacerlo "fiable" para su uso en despachos.
- Actualizaciones: Ubuntu 10.04, Hirens Boot 10.6


Making Off

Asumo que ni dios le volverá a meter a mano esto, como si lo viese... De todas formas intentaré explicar cómo se hicieron algunas partes importantes y sobretodo, las fuentes de las que partí para hacerlo. Y también algún comentario por si eres un futuro becario al que le ha tocado pringar...

Restaurador de Linux

Scripts para descargar: [Scripts Restauración de Linux]

Fue la idea principal por la que empecé a desarrollar todo esto. Básicamente es un shell script de Bash en el que se hacen de forma automática todos los pasos del procedimiento de [restauración de Linux], que antiguamente se venía realizando de forma "manual" e individual, por cada uno de los equipos clonados en aulas. Es decir, que sirve para ahorrarte tiempo en las clonaciones.

Puede que haya un bug en el script y sobre un punto según el entorno shell que se utiliza (está Justo debajo de "Configurar lilo" "./$0" => "/$S0 --Rbravo 16:06 6 sep 2011 (UTC)


El script se llama restoreLinux.sh y se encuentra en /slax/changes/root dentro del USBETL. A su vez depende de otros 4 ficheros:

  • udev.sh: pequeño script que se encarga de configurar el fichero de interfaces de red para UDEV.
  • iplist: fichero de texto con todas las IP's públicas utilizadas en los clientes de los laboratorios (reutilizado del ipStart de Windows 2000).
  • macs: fichero de texto con los ID's de los fabricantes de tarjetas Ethernet usados en los clientes.
  • 70-persistent-net.bak: plantilla del fichero de reglas para interfaces de red del UDEV

El script principal se encarga de realizar los cambios necesarios para restaurar el equipo, en función del nombre de la máquina solicitado al usuario. Éste será la clave usada para buscar la dirección IP correspondiente en el fichero "iplist". Por su parte, el script "udev.sh" será llamado por el script principal "restoreLinux.sh". Dicho script utiliza de plantilla el fichero "70-persistent-net.bak", del cual irá modificando sus palabras clave (maceX, macaY...) en función de las tarjetas Ethernet detectadas. Para dicha detección usará la lista de ID de vendedores que hay en el fichero "macs".

  • NOTA DE DESARROLLO: el "restoreLinux.sh" tiene una "idea feliz" que conviene ser explicada. Y es que al final del script, te puedes encontrar un pequeño "subscript" llamado "Entorno del chroot". Y aquí viene la explicación del por qué la inclusión de esta parte. Uno de los pasos de la restauración es ejecutar el cargador Lilo desde la partición /dev/sda6. Para ello deberemos cambiar el directorio desde donde se ejecuta el propio script (creo que es /root) al de la propia partición. Es por ello que este paso se ejecuta dentro de ese pequeño "subscript" final.

FUTURAS ACTUALIZACIONES

Básicamente, si se quiere añadir algún paso extra a la restauración (por ejemplo, la eliminación de algún módulo problemático) se tendrá que añadir en el script principal "restoreLinux.sh". Otro caso que probablemente también se de, es el querer añadir alguna dirección IP nueva a usar o algún tipo nuevo de tarjeta Ethernet (los 24 primeros bits de la MAC). Para ello tendremos que modificar los ficheros "iplist" y "macs" correspondientes.


Actualización 05/09/2011 para equipos Intel I3 Dell

He actualizado la imagen slax a porteux 1.0 (desaparece slax.org) en el USB, la carpeta pasa a ser /porteus en vez de /slax, he añadido un fichero con "009-changes.xzm" con los scripts para que se arranquen. Utilizar dir2xzm y xzm2dir para hacer el contenedor con los cambios de los ficheros. También existe save-changes, pero realizada demasiadas cosas (copia todos los ficheros creados en el arranque)


--Rbravo 16:05 6 sep 2011 (UTC)

Multighost

El programa de clonaciones Ghost en su versión 8.0 (la que usamos a día de hoy en los laboratorios), permite crear CD's autoarrancables con el programa cliente. Pero hay un problema, ya que para cada marca de tarjeta Ethernet, se debe crear un CD distinto. Y es que por defecto, el Ghost sólo deja integrar un driver NIC (Network Interface Card) por CD. Existe la posibilidad de utilizar una especie de paquete recopilatorio de drivers, pero no funciona correctamente.

Por ello la idea del Multighost, no es más que un cliente Ghost en CD, con todos los drivers NIC integrados que se usan en los laboratorios a día de hoy. Para ello, modifiqué los scripts de Batch del propio Ghost, de tal forma que ahora solicita al usuario el driver de red a utilizar (en el manual de usuario del USBETL viene mejor explicada esta parte).

Modelo Tarjeta Ethernet Código de Vendedor Código de Dispositivo
3Com 10B7 9055 / 9050
Realtek 10EC 8139
Intel Pro 100 8086 1050
Intel Pro 1000 8086 10CE / 108B
VIA Rhine II 1106 3065
Marvell 11AB 4362


Instalador del USBETL

El script para replicar el USBETL está basado en los scripts de instalación propios del proyecto MultiBoot Live USB. Básicamente detecta los dispositivos USB conectados al PC, mostrándolos en una lista. El usuario indica el dispositivo a utilizar como base y después lo formateará y copiará los archivos del USBETL. Por último, instalará grub2 en el MBR del propio pendrive. El instalador hace uso de un archivo externo llamado "mbr.bin" y de una carpeta llamada "data" que contendrá todos los archivos del USBETL.

Sistemas Operativos en ISO

Una de las ventajas de utilizar la versión 2 del Grub, es que permite de forma nativa el poder cargar imágenes ISO de sistemas operativos. Por ejemplo, en el caso del USBETL, la imagen de Ubuntu 10.04; que se encuentra en el directorio /isos del USBETL. La idea de esto, es que cuando salga la nueva versión de Ubuntu, bastará con sustituir el fichero .iso de dicho directorio (ubuntu.iso), por el de la imagen nueva (renómbralo también a "ubuntu.iso"). De hecho, esto mismo se ha probado desde la versión 9.10 a la 10.04 sin obtener ningún problema. No obstante, esto no quiere decir que en algún momento salga alguna versión para la que se necesite realizar algún cambio en el fichero grub.cfg del directorio "/boot/grub". Las isos soportadas por el proyecto están aquí: Isos compatibles con MultiBoot




ANEXO 1: FUENTES Y REFERENCIAS

  • Boot-Land: foros de desarrollo relacionados con todo aquello que sean cargadores de sistema y dispositivos autoarrancables. De aquí puedes obtener modificaciones no oficiales de los multicargadores, con nuevas e interesantes funcionalidades.
  • Multiboot LiveUSB: proyecto francés de un Multi Live USB, basado en scripts que se ejecutan desde Ubuntu. Es la base del USBETL a partir de la versión 2.0. Utilizando su interfaz gráfica, resulta trivial añadir nuevas distribuciones al USBETL; ya que sólo tendrás que pasarle una ISO soportada y el programa automáticamente, configurará el cargador de sistema adecuado para dicha ISO.
  • BartPE (Bart's Preinstalled Environment): entorno de preinstalación basado en Windows XP. Para el USBETL se constituyó una imagen básica del BartPE. Pero existen numerosos scripts para poder añadir más aplicaciones al entorno y darle nuevas funcionalidades.
  • MSFN: de los mejores foros de debate sobre todo lo relacionado con Windows. Desde instalaciones desatendidas hasta multicargadores o versiones "live".


ANEXO 2: MULTICARGADORES

Un cargador de arranque (boot loader en inglés) es un programa sencillo (que no tiene la totalidad de las funcionalidades de un sistema operativo) diseñado exclusivamente para preparar todo lo que necesita el sistema operativo para funcionar. Normalmente se utilizan los cargadores de arranque multietapas, en los que varios programas pequeños se suman los unos a los otros, hasta que el último de ellos carga el sistema operativo.


SYSLINUX

El Proyecto SYSLINUX abarca un conjunto de gestores de arranque ligeros, para arrancar ordenadores en el sistema operativo Linux.

Componentes:

  • El SYSLINUX original, usado para arrancar desde sistemas de archivos FAT (normalmente discos flexibles).
  • ISOLINUX, usado para arrancar desde sistemas de archivos ISO 9660 CD-ROM.
  • PXELINUX, usado para arrancar desde un servidor de red con el sistema Entorno de ejecución de Pre-arranque (PXE).
  • EXTLINUX, usado para arrancar desde los sistemas de archivos de Linux ext2/ext3.
  • MEMDISK, usado para arrancar sistemas operativos más antiguos como MS-DOS desde memoria.
  • Dos sistemas de menús separados.
  • Un entorno de desarrollo para módulos adicionales.

ISOLINUX se utiliza generalmente para LiveCDs de Linux o CDs de arranque instalables.

WikiSyslinux


GRUB2

GRUB (GRand Unifier Bootloader) es un gestor de arranque: es lo primero que se carga cuando se inicia la computadora. Permite tener diferentes sistemas operativos, y diferentes versiones de ellos, en el mismo disco duro. Por ejemplo podemos tener Windows y GNU/Linux en la misma computadora, GRUB se cargará antes que cualquiera de éstos permitiéndonos elegir cuál iniciar.

Características:

  • Modo de rescate : permite acceder a una interfaz de comandos sin necesidad de reiniciar en caso de que sea imposible iniciar el sistema con la configuración existente.
  • Inicio gráfico : La primera generación de GRUB permite poner un fondo de pantalla a un menu de selección basado en texto. GRUB 2 es completamente gráfico. Hasta ahora se sabe que Ubuntu no incluirá un menú gráfico por omisión, pero no tardarán en aparecer los artistas de siempre.
  • Iniciar desde una imagen ISO : Permite iniciar el sistema desde una imagen ISO guardada en el disco. Con esta característica ya no será necesario grabar un CD/DVD o utilizar un disco USB para iniciar otro sistema operativo. Sólo bastará con guardar el archivo ISO en el disco duro y decirle a GRUB que inicie desde allí.
  • Scripting : GRUB 2 no sólo interpretará lineas de configuración de inicio, sino que también podrá ejecutar sencillos scripts.
  • Sistemas de archivos:
    • ext2/ext3/ext4 (Grub2) usado por los sistemas UNIX y su variante libre GNU/Linux.
    • ReiserFS.
    • XFS de SGI (aunque puede provocar problemas).
    • UFS.
    • VFAT, como FAT16 y FAT32 usados por Windows 9.x
    • NTFS usado por los sistemas Windows NT (a partir de Windows NT v.3.51).
    • JFS de IBM.
    • HFS de Apple Inc.

WikiGrub2


GRUB4DOS

GRUB4DOS es un multicargador universal basado en GNU GRUB. Puede cargar sistemas Windows y Linux u otros multicargadores(syslinux/lilo). Puede ser empotrado en sistemas removables.

La diferencia entre GRUB y GRUB4Dos es que GRUB utiliza tres etapas de ficheros para cargar el sistema, mientras que GRUB4Dos se basa en uno sólo, llamado grldr. Además el cargador se encuntra en otro fichero llamado grldr.mbr, el cual puede ser instalado en el MBR del disco duro o en el sector de arranque de una partición. Al iniciarse, el código de arranque grldr.mbr escaneará dinámicamente los directorios raíz de cada partición local para el grldr, y carga la primera que encuentra.

Además,GRUB4DOS puede ser cargado de varias maneras: grldr o mediante el propio gestor de Windows. GRUB4DOS extiende la funcionalidad del GRUB. La más significativo viene de la mano del comando map. Este comando puede ser usado para crear discos duros virtuales y disquetes para desde ISO. Estos dispositivos virtuales pueden ser accedidos incluso después de que DOS empiece.

WikiGrub4Dos



Version 3.0

En esta ultima version, basicamente lo que se ha hecho es adaptar el codigo del fichero udev.sh para que funcionase sobre los nuevos ordenadores (Jbit101 a jbit 128) que tienen ambas tarjetas, la integrada y la de practicas, de la misma marca. Ademas se han eliminado los cargadores de GRUB y SYSLINUX dejando solamente el de GRUB4DOS en el que se han incluido las funciones de estos dos anteriores, con objeto de simplificar el funcionamiento del USBETL.

Intentare explicar un poco las modificaciones que se han realizado.

UDEV ---> Udev.sh es el nombre del fichero responsable de la configuracion de las tarjetas de red, basicamente es el fichero responsable de la deteccion de las tarjetas, la identificacion de las mismas, y el encargado de ordenar correctamente las diferentes interfaces. La informacion que obtiene el fichero udev.sh es basicamente la que se utilizara para confeccionar el fichero 70-persistent-net.rules.

Este fichero consta basicamente de 3 partes. Voy a dar unas indicaciones basicas para poder moverse por el fichero e identificar las funciones de cada una de las partes.

En el fichero udev.sh encontramos varios comentarios del autor, que pueden servirnos como referencia. La primera parte, que cito abajo, esta indicada con el comentario -->#Primer bucle que recorre las interfaces del equipo.

La segunda parte del fichero que menciono mas abajo esta indicada por el comentario -->#Averiguamos el nombre del equipo.

La tercera parte del fichero no esta indicada por nignun comentario, asi que copiare parte del codigo aqui para que podamos localizarla facilmente, ademas, como es la que mas explicaciones requiere aprovechare para dar algunas pistas sobre como alterarla.


i=0;

int=1; while [ $i -lt ${#VENDS[*]} ];do Este bucle se ejecutara tantas veces como interfaces existan en el equipo, es decir, una vez por tarjeta de red instalada.

#echo -e "${VENDS[$i]}";

#echo -e "$i";


case "${VENDS[$i]}" in Este switch es el que hace la distincion del tipo de tarjeta que tenemos, comprobara caso por caso hasta que encuentre el tipo de tarjeta a la que pertenece,entonces entrara en ese caso y ejecutara las instrucciones pertinentes.

via)

echo -e " \E[1;31m>\033[0m Configurada interfaz ${VENDS[$i]} (\E[1;36meth0\033[0m)";

cat /root/70-persistent-net.rules | sed s/mace0/`ifconfig -a | grep HW | awk '{print tolower($5)}' FS=" " | sed -n "$(expr $i + 1)"p`/ > /root/70-persistent-net.rules;

echo -e " MAC: `ifconfig -a | grep HW | awk '{print tolower($5)}' FS=" " | sed -n "$(expr $i + 1)"p`";

let i++;;


Vamos a tratar dos cosas mas referentes a este switch

Las variables que utilizamos: la variable i se incrementa cada vez que seleccionamos una tarjeta de red, mientras que la variable int, se incrementa cada vez que recorremos el bucle completo. La linea que empieza por cat /root/70- .... tiene varias partes importantes. Donde pone mace0 encontramos en el fichero que puede poner mace0 (como en este extracto) o mace1 o maca0. mace0 indica que la interfaz de la que estamos hablando se creara con eth0 mace1 indica que la interfaz de la que estamos hablando se creara con eth1 maca0 indica que la interfaz de la que estamos hablando se creara con ath0 Como podemos observar, lo importante es la ultima letra y el numero, que hace referencia a como la interfaz sera configurada. Por ultimo destacar que utilizamos la variable i para escribir el numero de la interfaz eth0, o eth1 el 0 y el 1 estan extraidos de la variable i. Esta asignacion se encuentra en la misma linea, mas adelante, donde dice --> sed -n "$(expr $i + 1)"p.


En la primera parte, encontramos un bucle que busca todas las tarjetas de red que tenemos instaladas en el equipo (siempre que el equipo las reconozca). Este bucle identifica la tarjeta de red por el numero de vendedor, de forma que al terminar el bucle sabemos cuantas tarjetas tenemos y de que marca son. Para reconocer la marca de cada tarjeta, el udev.sh se sirve de un fichero llamado macs, en el que constan los numeros de vendedor y las marcas de todas las tarjetas. (De todas las tarjetas que tenemos, no de todas todas :D)

La segunda parte es muy basica, pero es importante para la tercera asi que la menciono igualmente. En esta parte lo que tratamos es de averiguar el nombre del equipo en el que estamos ejecutando el restaurar, para ello nos servimos del fichero hostname en el que figura el nombre. (Nombre que acabamos de insertar al restaurar el quipo).

La tercera y ultima parte es la mas extensa. En ella encontraremos un swith (Para aquellos que no saben ingles...(viene a ser cambiar),y para los que no saben programacion, es basicamente una forma de tratar una misma pregunta con varias respuestas posibles, de forma que podemos gestionar las diferentes respuestas a la misma pregunta, preguntanto una sola vez). En dicho switch la pregunta es ¿Que nombre tiene el equipo? y las respuestas posibles en la actualidad son Dit, Doc, It, Jbit y Lm, en funcion de la respuesta que obtenga, cambiara la accion a realizar.

Cada uno de los tipos de ordenador que tenemos, tiene unas caracteristicas comunes a los de su mismo tipo, el numero de tarjetas de red, el orden de las mismas, la marca, el modelo, etc... De forma que una vez que sabemos el modelo de ordenador, sabemos que la tarjeta que tiene que ser la eth0 es una REALTECK y que la tarjeta que tiene que ser ETH1 es una 3COM, asi que el fichero actua en consecuencia, y busca las tarjetas, averigua a que marca pertenecen y les asigna las interfaces apropiadas. El ordenador busca y encuentra las tarjetas de red aleatoriamente, por lo que a veces encuentra la integrada antes que la de practicas, y a veces al contrario, de forma lo que necesitamos ahora es... Otro switch!! :D en el que la pregunta es: ¿Que tarjeta has encontrado? y dependiendo de la marca, de la tarjeta, la pondremos como eth0 o eth1.

El fichero tambien tiene en cuenta las tarjetas wifi, a las que les asigna el nombre de interfaz de ath*. Aunque como todos los equipos llevan una solamente, no da problemas de ninguna clase y se asigna automaticamente como ath0. De hecho, durante el proceso de modificacion que se ha hecho, es lo unico que ha funcionado incondicionalmente XD

Yo solamente he modificado la parte que corresponde a los Jbit, que daba problemas debido a que ambas tarjetas, la integrada (eth0) y la tarjeta de practicas (eth1) pertenecen a la marca de REALTECK por lo tanto el fichero asignaba ambas a la interfaz eth0 pisando la primera con la segunda. Ahora el fichero reconoce la tarjeta integrada como una realteck y le asigna la interfaz eth0, y la segunda tarjeta la reconoce como generica (Digamos que aun que sabe que es una realteck, la trata como si no lo fuera) y por tanto lo asigna la interfac eth1.

Ademas de esto, he añadido al final del fichero udev.sh un comando cat, que nos muestra el contenido del fichero 70-persistent-net.rules para que podamos asegurarnos de que esta todo correcto.


--Miguel 07:44 23 abr 2010 (UTC)

USBETL: Manual de usuario


Actualizar el USBETL

Para poder realizar los cambios necesarios al USBETL, como actualizar las macs, el udev o el restoreLinux se necesitan dos scripts:

--> xzm2dir y dir2xzm, ambos se encuentran en:

   etl@violin:~/scripts/

Una vez descargados ambos en el equipo se deben usar los siguientes comandos:

dit103:~> sudo mount -o remount,rw /usr/local
dit103:~> sudo install $RUTADELSCRIPT/xzm2dir /usr/local/bin/xzm2dir
dit103:~> sudo install $RUTADELSCRIPT/dir2xzm /usr/local/bin/dir2xzm
dit103:~> sudo mount -o remount,ro /usr/local

Conectar el pendrive al ordenador en el que se esté trabajando y cuando esté montado, normalmente en /media/USBETL, habrá que descomprimir el módulo changes de la siguiente forma:

dit103:~> cd /media/USBETL/porteus/base

Estando en ese directorio vemos los módulos xzm que carga el pendrive al entrar a porteus y, por lo tanto, cuando hace la restauración. Ahora hay que descomprimir el módulo 009CHANGES.xzm, por ejemplo en /tmp, y después se hace una copia de la antigua versión.

dit103:/media/USBETL/porteus/base> mkdir /tmp/usb
dit103:/media/USBETL/porteus/base> xzm2dir 009CHANGES.xzm /tmp/usb
dit103:/media/USBETL/porteus/base> mv 009CHANGES.xzm 009CHANGES.xzm.bak

Hecho esto ya tenemos descomprimido el módulo en /tmp/usr, ahora podemos modificar con libertad los archivos necesarios de la carpeta root que habrá aparecido allí. Cuando estén modificados habrá que volver a comprimir todo a otro módulo xzm de la siguiente forma.

dit103:/tmp> dir2xzm usb /media/USBETL/porteus/base/009CHANGES.xzm

Y con esto se habría actualizado todo correctamente.


Lucia a 17/09/2014