Introducción a REMBO
Introducción a Rembo Es un sistema de arranque remoto que permite arrancar / clonar máquinas usando recursos de un servidor remoto. Aumenta la seguridad del sistema. Página oficial de Rembo: www.rembo.com Página oficial Sourceforge (Asistentes): http://rembowiz.sourceforge.net/
Requisitos del cliente Sistema Operativo: MS-DOS, Windows 9x, Windows NT/2000/XP, Linux. Tarjeta de red con boot ROM PXE. Caché en disco local con tamaño adecuado para almacenar las imágenes (opcional, recomendado). El resto de los pcs donde vayamos a descargar las imágenes deben ser idénticos al pc modelo
Requisitos del servidor Sistema Operativo: Windows NT/2000, Linux (x86), Solaris (Para máquinas SUN Sparc). Servidor DHCP funcionando (ya sea en la misma máquina o en otra distinta). Espacio en disco para almacenar imágenes.
Arquitectura PXE Permiten realizar arranque remoto. PETICION DHCP RESPUESTA DHCP Cliente con PXE Servidor DHCP
Secuencia de arranque Encender el ordenador. Cargar ROM de la tarjeta de red. Descubrir dirección IP. Descubrir servidor de arranque. Conexión NBP (Network Boot Program). Configuración de arranque (Pre-os). Arrancar el SO.
Aplicaciones de Rembo Reducir costes y acelerar la instalación y el mantenimiento del software. Conmutar entre diversos SO sin tener que recargar el software. Restaurar rápidamente SO corruptos.
Creación y Restauración de una Imagen Básica CREACION:Clonación de una de las particiones del disco de ordenador de referencia w2k.base Servidor Cliente 1 Cliente 2 Cliente 3 W2K W2K W2K
Creación y Restauración de una Imagen Incremental Básica Imagen incremental: diferencia entre dos sistemas de ficheros w2k.base winzip.diff Servidor w2k.base winzip.diff winzip.diff Cliente 1 Cliente 2 Cliente 3 W2K W2K W2K + Winzip + winzip + winzip
Creación y Restauración de una Imagen Incremental Avanzada Imagen incremental avanzada: fusión de una imagen base con dos o mas imágenes incrementales w2k.base winzip.diff norton.diff Servidor norton.diff Cliente 1 Cliente 2 Cliente 3 W2K W2K W2K + Norton + winzip + norton + winzip
Acceso a ficheros mediante Rembo disk floppy cdrom net cache reg arch link Disco duro local Unidad de disco floppy local Disco cd-rom Fichero remoto accedido a traves de NETfs Fichero remoto accedido a traves de la partición cache local Registro Windows NT Archivo de imagen de disco de Rembo(solo lectura) Sistema de archivos virtual Rembo
Instalando el DHCP
Instalación del servidor DHCP En el momento de la instalación del SO: Elegimos instalar el demonio DHCP Al arrancar el SO se cargará el demonio Crearemos el archivo /etc/dhcpd.conf Creamos una configuración personalizada editándolo Reiniciamos el demonio DHCP con el comando service dhcpd restart
Instalación del servidor DHCP En un sistema ya instalado: Instalamos el paquete dhcp-3.0.1-40_fc3.rpm: rpm Uhv dhcp-3.0.1-40_fc3.rpm Copiamos dhcpd.conf.sample que está en el directorio /usr/share/doc/dhcp-3.0.1-40_fc3 a /etc/dhcpd.conf Editamos el dhcpd.conf y creamos una configuración personalizada Para cargar el servicio cuando arranque la máquina, ejecutamos: chkconfig --add dhcpd
Instalación del servidor DHCP Para que se inicie el servicio, reiniciamos o ejecutamos: service dhpcd start Comprobamos que el servicio está activo: ps ef grep dhcpd
Configuración del servidor DHCP y Rembo en máquinas distintas Servidor Rembo Eliminar opciones 43 y 60 del servidor DHCP. Servidor DHCP
Configuración del servidor DHCP y Rembo en la misma máquina Eliminar opción 43 si está en el servidor DHCP. Colocar la opción 60 a PXEClient. Servidores DHCP y Rembo en la misma máquina
Configuración del servidor en Linux (I) Servidor ISC DHCP 3.0 : deny unknown-clients; not authoritative; ddns-update-style ad-hoc; subnet 10.1.24.0 netmask 255.255.252.0 { next-server 10.1.25.142; option vendor-class-identifier "PXEClient"; option routers 10.1.24.1; option subnet-mask 255.255.252.0; #pc curso rembo } host pcsic2-cr135 { hardware ethernet 00:0C:76:29:05:C6; fixed-address 10.1.25.135; option host-name "pcsic2-cr135"; }
Configuración de los clientes para usar DHCP (II) En Fedora Core 3: Abrir una consola de comandos. Ejecutar netconfig. Indicar que se quiere utilizar DHCP para tomar los parámetros de arranque.
Configuración de los clientes para usar DHCP (III)
Instalación de REMBO
Instalación de Rembo en Linux Extraemos el contenido del paquete LinuxRembo-Toolkit- Install-v2-0-5.tar.gz al directorio /usr/local: tar xzvf LinuxRembo-Toolkit-Install-v2-0-5.tar.gz Creamos un enlace simbólico del directorio de instalación rembo-2.0 a rembo: ln -s rembo-2.0 rembo Copiamos la clave de registro rembo-v2.key al directorio de Rembo y la renombramos como rembo.key.
Instalación de Rembo en Linux (II) Realizamos una configuración mínima del servidor: # Directorio base de rembo BaseDir "/usr/local/rembo" # Contraseña de acceso al servicio rembo NetPassword "cursorembo" # IP del servidor rembo Interfaces 10.1.25.117 GROUP cursorembo { StartPage "cache://global/rembo.shtml" Options unicast Host 10.1.25.135 } NOTA: Es importantísimo eliminar el grupo default para evitar que pcs no definidos en nuestro servidor se incluyan en dicho grupo.
Instalación de Rembo en Linux (III) Arrancamos Rembo : rembo d v 4 Editamos el fichero srvfiles.nc que está en el directorio de rembo: open 127.0.0.1 cursorembo Tranferimos los archivos del servidor:./misc/netclnt srvfiles.nc
Instalación de Rembo en Linux (IV) Comprobamos la configuración ejecutando rembo d v 2 Para arrancar Rembo automáticamente copiamos: /misc/initd a /etc/rc.d/init.d/rembo Ejecutamos chkconfig para añadir el servicio: chkconfig --add rembo Arrancamos el servicio REMBO: service rembo start Comprobamos que el servicio REMBO está activo: ps -ef grep rembo
Trabajando con los diferentes Sistemas Operativos
Consideraciones Generales Elección de una o varias máquinas que sirvan de modelo para nuestros equipos. Estudio del tamaño necesario para las distintas particiones. Dejar espacio sin particionar para la partición cache (opcional, recomendable). Dar valores a los parámetros de red: obtención de IP mediante DHCP, nombre del equipo, grupo de trabajo, dominio, etc...
Página de Inicio (Creando Imágenes de Windows 2000) <script type="text/rembo-c"> // Creamos la imagen a partir de la Imagen Virtual Synchronize("link://nt", void Crear_windows (void) { // Salvamos el sector de arranque en el servidor var bootsect = DevReadBootSects("disk://0:0"); "cache://global/hdimages/windows.base",""); // Liberamos la Imagen Virtual FreeVirtualImage("nt"); SaveFile(bootsect,"cache://global/hdimages/windows.mbr"); } // Creamos Imagen Virtual de la partición de Windows CreateVirtualImage("nt","disk://0:1"); // Eliminamos ficheros innecesarios de la Imagen Virtual if (FileExists("link://nt/pagefile.sys")) RemoveFile("link://nt/pagefile.sys"); // Eliminamos versiones antiguas de la Imagen if(fileexists("cache://global/hdimages/windows.base")) RemoveFile("cache://global/hdimages/windows.base");
Página de Inicio (Restaurando Imágenes de Windows 2000) void Restaurar_windows (void) { // Establecemos las particiones del disco duro SetPrimaryPartitions(0,"NTFS:10000000 EXT2:10000000 LINUX-SWAP:512000 EMPTY:0"); // Restauramos el MBR usando el fichero que hemos guardado en el servidor cuando creamos la imagen DevWriteBootSects("disk://0:0",LoadFile("cache://global/hdimages/windows.mbr")); // Establecemos la particion activa SetBootablePartition(0,1); // Formateamos la particion var devinfo = DeviceGetInfo("cache://global/hdimages/windows.base"); if (typeof(devinfo)!= "nil") else DeviceCleanEx("disk://0:1",devinfo); HDClean(0,1); // Restauramos la imagen en la particion correspondiente // Establecemos opciones del sistema operativo NTLocation = "disk://0:1"; NTDetect(); // Actualizamos informacion real sobre las particiones y registro de disco duro join(exec("cache://global/plugins/ata.rbx")); Win2KRegisterHDD(false); Win2KRegisterParts(); // Cambiamos el nombre del pc var ipa = StrParse(NetInfo.IPAddress,"."); str hostname = "PC-"+ipa[3]; NTChangeName(hostname); // Arrancamos w2000 HDBoot(0,1); } Synchronize("cache://global/hdimages/windows.base","disk://0:1","b");
Página de Inicio (Creando Imágenes de Linux) void Crear_Linux (void) { // Salvamos el sector de arranque en el servidor var bootsect = DevReadBootSects("disk://0:0"); SaveFile(bootsect,"cache://global/hdimages/linux/linux.mbr"); // Eliminamos versiones antiguas de la imagen if (FileExists("cache://global/hdimages/linux.base")) RemoveFile("cache://global/hdimages/linux.base"); // Creamos la imagen de la partición de linux BuildDiskImage(0,2,"cache://global/hdimages/linux/linux.base"); // Copiamos el kernel y el fichero fstab al servidor CopyFile("disk://0:2/boot/vmlinuz-2.4.18-3","cache://global/hdimages/linux.krn"); CopyFile("disk://0:2/etc/fstab","cache://global/hdimages/linux.fstab"); }
Página de Inicio (Restaurando Imágenes de Linux) void Restaurar_Linux (void) { // Particionamos SetPrimaryPartitions(0,"NTFS:10000000 EXT2:10000000 LINUX-SWAP:512000 EMPTY:0"); // Restauramos el sector de arranque DevWriteBootSects("disk://0:0",LoadFile("cache://global/hdimages/linux.mbr")); // Restauramos la imagen de linux Synchronize("cache://global/hdimages/linux.base","disk://0:2","b"); // Arrancamos desde la partición de linux LXBoot("cache://global/hdimages/linux.krn","","root=/dev/hda2 ); } // establecemos la partición activa SetBootablePartition(0,2); // Formateamos la partición var devinfo = DeviceGetInfo("cache://global/hdimages/linux.base"); if (typeof(devinfo)!= "nil") DeviceCleanEx("disk://0:2",devinfo); else HDClean(0,2);
Página de Inicio (Arrancando Windows 2000 y Linux) void Arrancar_windows (void) { // Arrancamos desde la partición de Windows HDBoot(0,1); } void Arrancar_Linux (void) { // Formateamos la partición de swap HDClean(0,3); // Arrancamos desde la partición de linux LXBoot("cache://global/hdimages/linux.krn","","root=/dev/hda2 ); }
Página de Inicio (Creando Imágenes Incremetales de Windows 2000 y Linux) voidcrear_inc_windows (void) { // Creamos el fichero de log para la incremental TextDiff("disk://0:1", "cache://global/hdimages/windows.base", "cache://global/hdimages/winzip/winzip.log",true); // Creamos la imagen incremental voidcrear_inc_linux (void) { // Creamos la imagen incremental Synchronize("disk://0:2, "cache://global/hdimages/linux.base", ">cache://global/hdimages/openoffice.diff); } MakeDiffFromText( "disk://0:1", "cache://global/hdimages/windows.base", "cache://global/hdimages/winzip/winzip.log", "cache://global/hdimages/winzip/winzip",true); }
Página de Inicio (Restaurando Imágenes Incremetales de Windows 2000 y Linux) void Restaurar_inc_windows (void){ // Restauramos la imagen incremental ApplyDiff ("cache://global/hdimages/winzip/winzip","disk://0:1",true); } void Restaurar_inc_Linux (void){ // Abrimos los archivos de imágenes OpenArchive("base","cache://global/hdimages/linux.base"); OpenArchive("diff","cache://global/hdimages/openoffice.diff"); // Creamos una imagen virtual de la imagen base CreateVirtualImage("lx","arch://base"); // Unimos la imagen incremental y la imagen virtual LinkTree("link://lx","arch://diff"); // Sincronizamos la imagen virtual con el disco Synchronize("link://lx","disk://0:2","b"); // Liberamos recursos FreeVirtualImage("lx"); CloseArchive("diff"); CloseArchive("base"); }
Página de Inicio (Definiciones) // Definicion del teclado Keyb("es"); // Cargar libreria utiles Exec("net://global/plugins/utils.rbx"); // Opcion administrador por hosts if (FileExists ("net://host/admin")) { Log (NetInfo.MACAddress + " entra en modo administrador.<br>"); join(exec("net://global/plugins/admin.rbx")); } // Opcion administrador por grupos if (FileExists ("net://group/admin")) { Log (NetInfo.MACAddress + " entra en modo administrador.<br>"); join(exec("net://global/plugins/admin.rbx")); } // Teclado, vídeo, mapa caracteres... SaveText("white", "display://root/color"); str DefVideoMode; str DefKeyMap; str DefCodeMap; var BasicErrorHandler(var exc) { return exc; } with(basicerrorhandler) try { // Aplicar la configuración por defecto de los asistentes if(defvideomode!= "") Settings.VideoMode = DefVideoMode; else Settings.VideoMode = "800x600"; if(defkeymap!= "") Keyb(DefKeyMap); if(defcodemap!= "") CodePage((int)DefCodeMap); }
Página de Inicio (Menú de Inicio) // Menú de Inicio var ventana = OpenMenu("menu",40,15, "<title>menu de Imagenes</title>" "<style>b {font-weight: normal; color: navy}</style>" "<base href='net://global/images'>", { {"<br><b>arrancar con W2000</b><br>","win2000.pcx","Arrancar_windows();"}, {"<br><b>instalar Windows 2000</b><br>","win2000.pcx","Restaurar_windows();"}, {"<br><b>arrancar con Linux</b><br>","linux.pcx","Arrancar_Linux();"}, {"<br><b>instalar Linux</b><br>","linux.pcx","Restaurar_Linux();"} } ); </script> <body> </body>