Professional Documents
Culture Documents
NDICE
NDICE..........................................................................................................................2
MANUAL DE ADMINISTRACIN DEL SERVIDOR .....................................................9
CAPTULO 1: Instalacin del servidor REMBO .....................................................................10
1.1.- Conceptos y requisitos ..............................................................................................10
1.1.1.- Cmo funciona?..............................................................................................10
1.1.2.- Requisitos del Servidor .....................................................................................10
1.1.2.1.- Servidor DHCP .........................................................................................10
1.1.2.2.- Servidor REMBO ......................................................................................11
1.2.- Configuracin del servidor DHCP .............................................................................11
1.2.1.- Servidor DHCP y REMBO en equipos diferentes.............................................11
1.2.2.- Servidor DHCP y REMBO en el mismo equipo ................................................11
1.2.2.1.- Aadiendo la opcin 60 al servidor DHCP de WinNT 4 ...........................11
1.2.2.2.- Aadiendo la opcin 60 al servidor DHCP de Win2000 ...........................12
1.2.2.3.- Aadiendo la opcin 60 a un host con servidor ISC
DHCP ..........12
1.2.3.- Aadiendo REMBO a una infraestructura con Boot Discovery existente.........12
1.3.- Instalacin de REMBO en Windows NT / 2000 ........................................................12
1.3.1.- Instalacin .........................................................................................................13
1.3.2.- Configuracin mnima .......................................................................................13
1.3.3.- Comprobando la configuracin .........................................................................13
1.3.4.- Solucin de problemas con el servicio NT........................................................13
1.4.- Instalacin de REMBO en Unix.................................................................................14
1.4.1.- Instalacin .........................................................................................................14
1.4.2.- Configuracin mnima .......................................................................................14
1.4.3.- Instalando los ficheros del servidor...................................................................15
1.4.4.- Comprobando la configuracin .........................................................................15
1.4.5.- Opciones de lnea de comandos del servidor REMBO ....................................16
1.5.- Solucin de problemas..............................................................................................16
1.5.1.- Rom de arranque PXE no detectada ................................................................16
1.5.1.1.- Descripcin del problema .........................................................................16
1.5.1.2.- Resolucin del problema ..........................................................................16
1.5.2.- En el arranque aparece DHCP... y un mensaje de error ..................................17
1.5.2.1.- Descripcin del problema .........................................................................17
1.5.2.2.- Resolucin del problema ..........................................................................17
1.5.3.- En el arranque aparece MTFTP... y un mensaje de error ................................18
1.5.3.1.- Descripcin del problema .........................................................................18
1.5.3.2.- Resolucin del problema ..........................................................................18
CAPTULO 2: Configuracin del servidor REMBO ................................................................19
2.1.- Conceptos .................................................................................................................19
2.1.1.- Configuracin basada en ficheros vs basada en registro.................................19
2.1.2.- Organizacin de parmetros.............................................................................20
2.1.3.- Configuracin mnima .......................................................................................21
CAPTULO 2 : El lenguaje......................................................................................................87
2.1.- Estructura de un programa Rembo-C .......................................................................87
2.2.- Declaraciones de variables y tipos............................................................................87
2.3.- Declaracin de funciones ..........................................................................................88
2.4.- Expresiones...............................................................................................................88
2.5.- Sentencias de control................................................................................................89
2.6.- Hilos ( threads ) .........................................................................................................89
2.7.- Manejo de excepciones ............................................................................................89
2.8.- Programacin orientada a objetos ............................................................................90
2.9.- Directivas pragma .....................................................................................................90
2.10.- Palabras reservadas ...............................................................................................90
2.11.- Resumen de diferencias entre C y Rembo-C .........................................................91
CAPTULO 3 : Bibliotecas de funciones.................................................................................92
3.1.- Cadenas ....................................................................................................................92
3.2.- Objetos binarios ........................................................................................................93
3.3.- Tablas y estructuras ..................................................................................................93
3.4.- Directorios .................................................................................................................93
3.5.- Ficheros.....................................................................................................................94
3.6.- Contenido de un fichero ............................................................................................94
3.7.- Interfaz de usuario.....................................................................................................95
3.8.- Primitivas relacionadas con la evaluacin ................................................................95
3.9.- Variables persistentes ...............................................................................................96
3.10.- Primitivas relacionadas con la red ..........................................................................96
3.11.- Primitivas del sistema .............................................................................................97
Pgina 10
Pgina 11
DHCP
Si est usando el servidor ISC DHCP 2.0, es posible aadir la opcin 60 a un grupo de hosts
o a un nico host aadiendo la sentencia option dhcp-class-identifier "PXEClient"; a una de las
secciones del fichero de configuracin. Si est usando la opcin 43 (vendor-encapsulatedoptions) para BPBatch, elimnela para servidores REMBO.
Las modificaciones a realizar para un servidor ISC DHCP 3.0 son las mismas, pero los
nombres varan:
Pgina 12
1.3.1.- Instalacin
Para instalar el servidor REMBO, ejecute el programa que recibi cuando compr REMBO.
Este ejecutable instalar REMBO en un directorio de su eleccin, y realizar tareas bsicas de
instalacin.
Una vez la instalacin haya acabado, usted debera tener los siguientes ficheros y directorios
en su directorio de instalacin REMBO:
Pgina 13
Mire en el visor de eventos de NT. El servidor REMBO registra los mensajes fatales de
error en el manejador de eventos de NT.
Si el servicio no comienza, ejecute rembo.exe desde la lnea de comandos con las
siguientes opciones: rembo -d -v 4. Esto ejecutar Rembo como una operacin de
consola, redireccionando todos los mensajes a la consola. Puede incrementar el nivel
de depuracin hasta 6.
Si el servicio funciona pero quiere informacin de depuracin, ponga la opcin
avanzada llamada GlobalDebugLevel a un valor entre 2 y 6 con la consola del
servidor.
1.4.1.- Instalacin
Elija el directorio donde quiere instalar el servidor REMBO (por ejemplo /usr/local/rembo).
Extraiga el contenido del paquete de distribucin REMBO a este directorio. Entonces debera
ver:
Un programa llamado rembo (el servidor);
Un fichero de texto llamado rembo.conf (el fichero de configuracin del servidor);
Un fichero de texto llamado srvfiles.nc (el paquete de ficheros bsico del servidor);
Un subdirectorio llamado misc, con varios ficheros que puede necesitar mas tarde;
Pgina 14
Si obtiene alguna advertencia, detenga el servidor e intente arreglarlo. Una vez el servidor
est ejecutndose correctamente, conecte un cliente. Despus de unos segundos, REMBO
debera estar funcionando.
Pgina 15
0 : sin salida.
1 : slo mensajes de error.
2 : slo mensajes de error y advertencias.
3 : mensajes de error, advertencias y mensajes de informacin.
4 : igual que 3, pero tambin mensajes de notificacin.
5 : igual que 4, con salida de depuracin.
6 : igual que 5, con trace de red.
Pgina 16
Si todos estos pasos fallan, intente obtener una actualizacin para la memoria flash de su
tarjeta de red, y actualice la rom de la tarjeta de red con dicha actualizacin. Si el proceso de
flash falla, posiblemente no exista chip de arranque remoto en la tarjeta de red.
Si an as no ve los mensajes PXE, pregunte al fabricante de su tarjeta de red.
Pgina 17
Pgina 18
2.1.- Conceptos
2.1.1.- Configuracin basada en ficheros vs basada en registro
En un servidor Windows 2000/NT todos los parmetros se almacenan en el registro de
sistema. En los servidores Unix se almacenar en ficheros. El siguiente ejemplo muestra un
archivo de configuracin. Estn incluidos todos los parmetros, pero aquellos que no
corresponden a la configuracin mnima han sido comentados:
----------------- rembo.conf -----------------# Ejemplo de configuracin de servidor Rembo
################################
### PARMETROS GLOBALES
###
################################
#
- PARMETROS COMUNES -
Basedir "/usr/local/rembo"
NetPassword "Por favor, introduzca aqu una clave"
# Nota: la opcin Interfaces es parte de la configuracin mnima si usa
# mltiples servidores o conexiones a servidores.
Interfaces 192.168.1.4
#
#
#
#
#
- PARMETROS PXE - #
DisableDHCPProxy
BootNoMulticastDiscovery
BootDiscoveryAddress 232.2.0.1
BootDiscoveryPort 4011
#
#
#
#
MTFTPPort 4015
MTFTPClients 231.1.0.1:8500
MTFTPStartDelay 2
MTFTPMCastTTL 1
- PARMETROS DE REMBO -
# NBPServerPort 4012
#
#
#
#
#
#
#
#
DataDir "files"
FileServerPort 4013
FileMCastAddress 239.2.0.1:10000
FileMCastTTL 1
MCASTEncrypt
FASTEncrypt
FASTPort 4025
- PARMETROS DE TOLERANCIA A FALLOS -
# BootReplyDelay 1
# Backup 192.168.1.8
#####################################
### AUTENTIFICACIN DE DOMINIOS ###
#####################################
Pgina 19
- DOMINIO LOCAL -
# AuthLocalDomain lcltest {
# Usergroup "rembo"
# }
#
#
#
#
#
#
#
#
#
#
- DOMINIO NT -
AuthNTDomain ntatest {
AuthServerName "company-pdc"
Usergroup "rembo"
}
- DOMINIO RADIUS -
AuthRadiusDomain radtest {
AuthServerAddress 192.168.1.15
RadiusSecret "testing123"
}
###############################
### GRUPOS DE SERVIDORES
###
###############################
#
Group Default {
Options admin
}
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
- Grupo de ejemplo -
Group TestGroup {
FileServer 192.168.10.10
Options admin
Lockout mouse
AuthDomain "lcltest"
StartPage "net://global/mypage.html"
RemoteConsole 192.168.1.10
Host
192.168.1.118
Host
192.168.1.119 {
StartPage "net://global/special.html"
}
Host
00:10:4b:12:12:12
HostRange 192.168.2.1 -> 192.168.2.254
HostRange 192.168.3.1 -> 192.168.3.254 {
AuthDomain "nttest"
}
}
Pgina 20
Basedir "cadena" : Especifica el directorio base para el servidor. Todos los paths
incluidos en la configuracin son relativos a este directorio. Este parmetro es
obligatorio, y no tiene valor por defecto.
NetPassword "cadena" : REMBO utiliza este password para proteger sus archivos de
acceso remoto no autorizado. Si usas netclnt, tendrs que aadir este password como
opcin del comando open para poder acceder a los archivos del servidor remotamente.
Si usas la consola del servidor, tendrs que introducir el password solo si aades un
servidor en el modo de servidor remoto. Si el servidor es local, o un servidor Windows
NT remoto, la consola toma este password del registro (leer el manual para ms
informacin).
MaxLogSize nmero : Este parmetro se usa para limitar el tamao de los ficheros de
log que genera el servidor REMBO. El tamao mximo se especifica en bytes, y se
aplica a todos los ficheros de log generados por el servidor (file,nbp y boot). Si no se
especifica, o el lmite es 0, no hay lmite de tamao (leer el manual para ms
informacin).
Interfaces "cadena" : Este parmetro especifica la lista de interfaces de red usados por
el servidor cuando recibe y enva paquetes a los clientes REMBO. Si no se indica, el
servidor usar el interfaz de red correspondiente al hostname del servidor (leer el
manual para ms informacin).
El resto de parmetro globales se usan para definir parmetros avanzados, relacionados con
el comportamiento PXE del servidor REMBO, y parmetros especficos de REMBO.
Pgina 21
El servidor PXE enva una respuesta PXE para descubrir el DHCP (DHCP Proxy).K
Si el servidor DHCP y el PXE estn en diferentes mquinas, el servidor PXE puede ser
configurado para responder a una peticin DHCP (DHCPDISCOVER). De este modo el
cliente recibir 2 paquetes de respuesta: el primero enviado por el servidor DHCP
(DHCPOFFER) que contiene su direccin IP y los parmetros de red asociados al
arranque remoto, y el segundo enviado por el servidor PXE conteniendo las opciones
especficas PXE.
Nota: Si tienes mltiples servidores REMBO en una la misma subred puedes implementar
balance de carga y tolerancia a fallos habilitando DHCPProxy en todos los servidores y
definiendo los clientes en todos ellos.
Gua de referencia rpida de parmetros PXE
Otra parte importante del soporte PXE implementado en REMBO es el servicio MTFTP
(Multicast Trivial File Transfer Protocol). Se utiliza para cargar la parte inicial de REMBO en el
cliente. Una vez hecho esto, los protocolos propietarios son usados para proporcionar un
servicio ms eficiente y seguro. El servicio MTFTP implementado en REMBO es una
implementacin parcial de la especificacin del protocolo, orientada al cliente. Los siguientes
parmetros permiten configurarlo, aunque sus valores por defecto funcionan habitualmente:
Pgina 22
MTFTPPort puerto : Puerto usado por el servidor para escuchar peticiones MTFTP
(leer el manual para ms informacin).
MTFTPClients puerto [:puerto-cliente] : Direccin IP destino y puerto usado por el
servidor para mandar datagramas MTFTP multicast a los clientes(leer el manual para
ms informacin).
MTFTPStartDelay segundos : Retraso en el cliente antes de mandar la primera
peticin MTFTP (leer el manual para ms informacin).
MTFTPMCastTTL ttl : Define el Time-To-Live (TTL) o etiqueta temporal asociado a los
paquetes multicast (leer el manual para ms informacin).
NBPServerPort puerto : puerto UDP por el que se reciben las peticiones NBP de los
clientes. Se recomienda no modificar su valor (leer el manual para ms informacin).
DataDir "ruta" : Directorio que contiene los ficheros internos del servidor (leer el
manual para ms informacin).
FileServerPort puerto : Puerto UDP usado por el servidor para recibir peticiones
NETfs, MCAST y FAST (leer el manual para ms informacin).
FileMCASTAddress direccin_ip:puerto
(y FileMCASTAddrCount) : Direccin
IP:puerto destino usados por el servidor REMBO cuando se envan datagramas
multicast para el protocolo MCAST (leer el manual para ms informacin).
FileMCASTTTL ttl : Time-To-Live asignado a los datagramas multicast enviados por el
servidor a los clientes cuando se usa el protocolo MCAST. (leer el manual para ms
informacin).
FileMCASTEncrypt : Encripta todos los datagramas enviados con el protocolo MCAST
(leer el manual para ms informacin).
FastEncrypt : Encripta todos los datagramas enviados con el protocolo FAST (leer el
manual para ms informacin).
FastPort puerto : Puerto usado por el servidor cuando los clientes usan el protocolo
FAST para enviar paquetes al servidor (leer el manual para ms informacin).
Pgina 23
En Windows NT un usuario puede identificarse con la base de datos local o con una
base de datos remota (tambin ubicada en un servidor NT).
En Unix el usuario se identifica con las funciones de la base de usuarios estndar, que
puede configurarse para usar ficheros locales, NIS o NIS+.
En ambas plataformas, el servidor REMBO puede usar la autentificacin estndar de
Radius con un dispositivo que soporte el protocolo Radius, o con una puerta de enlace
(gateway) Radius para Netware (NDS) por ejemplo.
Nota: bajo Windows NT la autentificacin solo puede hacerse si el usuario que ejecuta
REMBO tiene el permiso Actuar como parte del Sistema Operativo. Por defecto, la cuenta de
usuario utilizada para los servicios lo tiene (cuenta System).
Si ests usando una configuracin basada en ficheros (p.e. Unix), debe aadir los dominios
de autentificacin al fichero de configuracin. Cada dominio comienza con AuthLocalDomain,
AuthNTDomain (en Windows NT solamente), o AuthRadiusDomain, seguidos por el nombre
que quieres atribuir al dominio. El nombre del dominio puede ser usado en grupos y as unir
grupos de autentificacin y grupos de usuarios. Un ejemplo con las 3 formas de autentificacin:
AuthLocalDomain lcltest {
UserGroup "rembo"
}
AuthNTDomain ntatest {
AuthServerName "company-pdc"
Usergroup "rembo"
}
AuthRadiusDomain radtest {
AuthServerAddress 192.168.1.15
RadiusSecret "testing123"
}
Pgina 24
Nota: para los clientes puedes usar dominios de autentificacin con los asistentes (wizards) o
con las funciones LogonUser y Logon de REMBO-C.
2.4.-Tneles TCP
Un Tnel TCP es una forma de proveer conectividad TCP en clientes REMBO. Un tnel TCP
define un nombre de servidor y un puerto que se hace accesible para clientes REMBO a travs
de clientes especficos Rembo-C.
Los tneles TCP pueden usarse para proveer de un amplio rango de interesantes
aplicaciones por parte del cliente. Algunos ejemplos:
Si trabajas en una configuracin basada en ficheros debes aadir los tneles TCP al principio
del fichero de configuracin, antes del primer grupo del servidor. La definicin del tnel TCP se
hace como sigue:
TCPTunnel Identificador (palabra que usarn los clientes para identificar el tnel).
Ejemplo: un tnel TCP llamado sendmail que permite el envo de correo electrnico a la World
Wide Web:
TCPTunnel sendmail {
RemoteHost mail.company.com
RemotePort 25
}
Si usa configuracin basada en registros puede crear los tneles TCP desde la consola del
servidor. Elija Aadir tnel en el men pinchando con el botn derecho en el rbol del servidor.
Introduzca su identificador, un nombre de servidor (o direccin IP) y un puerto.
Gua de referencia rpida para los tneles TCP:
RemoteHost es una cadena que representa el host remoto (nombre o direccin IP)
TCP con el cul contactar cuando el cliente Rembo abre este tnel TCP. Si trabajamos
en un servidor basado en ficheros, el nombre o IP del host debe ir entre comillas.
Pgina 25
Nota: El cliente accede a los tneles TCP mediante las funciones: TCPConnect, TCPRead
TCPWrite y TCPClose.
Fileserver direccin_ip : Direccin IP del servidor que suministra los protocolos NTEfs,
FAST y MCAST (leer el manual para ms informacin).
RemoteConsole dir_ip:puerto : Direccin IP y puerto para la consola remota de
aplicacin, y ordena al Rembo que contacte con la consola remota al prximo arranque
(leer el manual para ms informacin).
Options [admin][, autoboot][, novesa][, unicast] : estos parmetros definen el modo de
operacin de REMBO (leer el manual para ms informacin).
Lockout [none][, poweroff][, reset][, mouse][, keys][, screen][, all] : pueden usarse para
bloquear algn perifrico determinado durante el tiempo que REMBO est activo en el
cliente (leer el manual para ms informacin).
AuthDomain dominio : Este es el dominio de autentificacin cuando uno de los
grupos de servidor necesita comprobar la identidad de un usuario (leer el manual para
ms informacin).
Pgina 26
StartPage ruta : Pgina de inicio del cliente (leer el manual para ms informacin).
Host direccin_ip y Host direccin_hardware : Valores de cada servidor en la lista de
servidores (leer el manual para ms informacin).
HostRange startip->endip : Rango de servidores (leer el manual para ms
informacin).
Pgina 27
CAPTULO 3 :
servidor REMBO
Herramientas
administrativas
del
Las dos herramientas utilizadas para administrar el servidor REMBO son : NetClnt, una
utilidad de lnea de comando para acceder a los ficheros del servidor, y la Consola del
Servidor, una aplicacin de Windows para administrar todos los aspectos del servidor REMBO
con Windows NT.
3.1.- Netclnt
NetClnt es una utilidad de lnea de comando disponible para Windows, Linux y Solaris. Se
usa para acceder remotamente a los ficheros del servidor REMBO.
Algunas de las caractersticas de NetClnt son:
Pgina 28
que tener en cuenta que si quiere enviar un fichero al servidor ste debe existir en tu ordenador
local en el directorio actual (para cambiar el directorio actual local se utiliza lcd).
deltree path
Borra un directorio remoto y todos sus subdirectorios. Este directorio no tiene que
estar vaco pero USA ESTE COMANDO CON PRECAUCIN.
Pgina 29
pwd
Muestra el directorio remoto actual.
lcd path
Cambia el directorio actual del ordenador local. Este comando no tiene efectos sobre
el servidor. Slo modifica el directorio actual del ordenador que arranca NetClnt.
!localcommand
Ejecuta un comando en el ordenador local. Por ejemplo, !dir muestra el contenido del
directorio actual del ordenador local. !edit myfile edita el fichero myfile con el editor de
MS-DOS.
wake hardware-address
Enva un paquete wake a la direccin hardware especificada. El ordenador al que se le
enva dicho paquete debe encontrarse en la misma red que el ordenador en el que se
est ejecutando NetClnt. Tambin, dicho ordenador debe permitir wake-on-lan desde
la tarjeta de red. La direccin hardware no debe tener ningn delimitador. Por ejemplo,
la direccin hardware 00:10:4B:12:34:56 debe ser puesta en el comando wake como
00104B123456.
Pgina 30
sleep sleeptime
Espera sleeptime segundos. No se ejecuta ningn comando durante este tiempo. Este
comando es utilizado en los batch scripts.
3.2.1.- Introduccin
SConsole es una poderosa aplicacin para administrar el servidor REMBO. Puede ser usado
para:
Todas estas operaciones pueden ser ejecutadas sobre un servidor REMBO local, o sobre un
servidor remoto.
La consola del servidor debe ser ejecutada como un administrador local o como un usuario
con suficientes privilegios para acceder al registro en modo lectura / escritura.
3.2.2.- La interfaz
La interfaz de la consola del REMBO es similar al explorador de Windows. A la izquierda
podrs ver a los servidores y temas de configuracin (parmetros, ficheros...) y a la derecha
vers todos los elementos correspondientes al tema activado en el panel de la izquierda. Cada
nivel de jerarqua tiene sus propios elementos y sus propias acciones. Puedes usar el botn
de la derecha para mostrar un men contextual basado en la localizacin actual que tiene en la
jerarqua.
Pgina 31
SConsole soporta tres tipos diferentes de servidores: servidor local, servidor remoto NT y
servidor remoto no-NT.
Pgina 32
Podemos cambiar cualquiera de estos parmetros haciendo click sobre estos nombres con el
botn derecho del ratn sobre la ventana derecha y seleccionando Modify en el men
contextual.
Pgina 33
Para acceder a las variables locales a un grupo especfico de hosts, haz click en el icono
Variables debajo del icono de grupo que quieres modificar en el rbol de directorios. El resto es
como se ha indicado para las variables globales.
Las variables locales a un host son accesibles en el icono Variables bajo el icono de host de
la entrada de host que se quiera modificar.
Boot Log, el cual contiene informacin acerca del servicio PXE Proxy, del servicio
PXE Boot Discovery y del servicio MTFTP.
NBP log, el cual contiene informacin acerca de los parmetros de grupo y host, de
autentificacin y del dominio NT.
File log, el cual contiene informacin acerca de todos los ficheros multicast y unicast
transferidos entre el REMBO y el servidor.
Para mirar un fichero log debemos hacer doble click sobre el nombre del fichero en el panel
derecho. El contenido del fichero ser mostrado con el editor Rembo Quick. Los ficheros log
son de slo lectura.
Pgina 34
A nivel fsico, teniendo fuentes de alimentacin redundantes (si todos los servidores
REMBO se quedan sin energa elctrica a la vez, la tolerancia a fallos a nivel REMBO
es intil);
A nivel de red, teniendo enlaces de red de respaldo, y elementos activos de copia de
seguridad (el servidor de copias de seguridad debe ser capaz de alcanzar a los clientes
de arranque remoto);
A nivel de sistema operativo de red, teniendo mltiples dominios de red, o teniendo
servidores REMBO funcionando fuera de su arquitectura de dominios (p.e. los
servidores REMBO nunca deberan estar todos enlazados al mismo PDC NT, o al
mismo servidor NFS);
A nivel DHCP, teniendo mltiples servidores DHCP en la misma subred;
A nivel REMBO, implementando las instrucciones de tolerancia a fallos encontradas en
este captulo;
Finalmente, a nivel de sistema operativo. Si REMBO es capaz de sobrevivir a un
problema severo, pero el sistema operativo no es capaz de encontrar su servidor de
red, la tolerancia a fallos es intil.
Aqu veremos como implementar la tolerancia a fallos a niveles DHCP y REMBO. Los otros
niveles estn fuera del mbito de este documento.
Pgina 35
Cuando un cliente remoto ha seleccionado una oferta vlida, contesta al servidor desde donde
se origin el paquete broadcast. Este paquete es recibido por todos los hosts conectados a la
subred local, incluyendo los servidores DHCP. Este paquete es usado por los servidores DHCP
para saber si sus ofertas han sido aceptadas o rechazadas por el cliente remoto. Si la oferta ha
sido aceptada, la direccin IP es bloqueada en la base de datos del servidor DHCP, y el
proceso DHCP puede continuar en modo unicast entre el cliente remoto y el servidor DHCP. Si
la respuesta es para otra oferta, el servidor liberar la direccin IP que ofreci, y bloquear la
direccin IP enviada en la contestacin de la oferta, para marcar la direccin IP como usada en
la subred local.
Usted puede adems implementar tolerancia a fallos configurando mltiples servidores DHCP
para la misma subred. Si los servidores DHCP estn configurados de manera idntica,
entonces los clientes remotos siempre seleccionarn la primera oferta, o sea, la que venga del
servidor ms rpido. Esto puede ser usado para implementar balanceo de carga a la vez que
tolerancia a fallos: el servidor ms rpido siempre es seleccionado, y si el servidor ms rpido
se sobrecarga, ser otro el que enve las ofertas ms rpido, y llegar a ser el servidor ms
rpido.
El cliente remoto debe ser conocido por el servidor (siendo miembro de un grupo en la
configuracin del servidor, o si la configuracin contiene un grupo por defecto);
El servidor no contestar inmediatamente si el parmetro BootReplyDelay est puesto.
Pgina 36
cliente cambiar del servidor primario al de respaldo en mitad de una transferencia de ficheros.
Sin embargo, esto solo funciona bajo las siguientes consideraciones:
Los ficheros abiertos en modo escritura (subidos al servidor) no pueden ser cambiados
a un servidor de respaldo. Esto puede ocasionar corrupcin de datos en el servidor,
porque una parte del fichero puede ser escrito en el servidor primario, y la otra parte en
el servidor de respaldo;
La estructura del sistema de ficheros en los servidores primarios y de respaldo debe
ser estrictamente idntica (p.e. el mismo contenido bajo el directorio files del servidor).
Sugerimos usar servidores de respaldo a nivel REMBO (con el parmetro Backup) cuando
haya estabilizado su sistema (imgenes de disco duro realizadas, scripts listos). Una vez todo
est estabilizado en el servidor principal, copie el directorio files del servidor primario al servidor
de respaldo, y ajuste el parmetro Backup en el servidor principal.
Pgina 37
1.1.- Qu es Rembo?
Rembo es un programa de arranque remoto PXE. Este tipo de programas se diferencia de
cualquier otro por varias razones:
Se le llama durante el arranque del ordenador, antes que a ningn sistema operativo o
administrador de arranque de disco.
Depende de la presencia de un chip especial en la tarjeta de red, la Boot Rom.
Es capaz de usar la red gracias a una interfaz facilitada por la boot rom. PXE es el
estndar de facto para este tipo de interfaz.
Se baja de un servidor especial de arranque, y no depende de ningn dispositivo de
almacenamiento local. Puede trabajar en ordenadores sin disco duro o sin unidad de
disquete. Si los tiene puede usarlos, pero el arranque no fallar si estos dispositivos s
lo hacen.
Consigue sus parmetros (direccin IP y otros parmetros de arranque) de un servidor
DHCP.
Una vez comenzado se comporta como un mini-Sistema Operativo. Puede ejecutar varias
operaciones, que pueden ser divididas en cuatro categoras: Operaciones de fichero, de red, de
interfaz de usuario y de sistema. Algunas de las operaciones ms tiles son:
Autentificacin de usuarios.
Acceso a ficheros independientemente del SO : Rembo puede acceder a sistema
de ficheros NTFS, FAT, EXT2.
Interfaz HTML.
Imgenes de disco : esta caracterstica se puede usar para clonar sistemas
operativos o para restaurar sistemas inestables.
Sistema de fichero de red : el servidor de Rembo es un poderoso software multitarea
con su propio sistema de archivos. Los ficheros del servidor pueden ser cargados por
el cliente ejecutando Rembo.
Agrupar ordenadores : los ordenadores se pueden agrupar en el fichero de
configuracin del servidor para compartir las mismas opciones de arranque. Cada
ordenador o grupo de ordenadores pueden tener sus propias opciones.
Pgina 40
El servidor Rembo debe estar siempre disponible para el cliente, pero para el caso de graves
fallos en la red, los clientes Rembo se pueden configurar para trabajar en modo off-line, es
decir, sin acceso a la red.
Pgina 41
Pgina 42
SetPrimaryPartitions(0,FAT16:200000);
Este comando cambiar la tabla de particiones, y crear una nica particin FAT16 de
200 MB. Solo cambia la tabla, no formatea.
HDClean(0.0);
Este comando limpia el master boot record (MBR) del primer disco duro.
HDClean(0,1);
Hace un formateo rpido de la primera particin del primer disco duro. En este caso
crear una particin vaca de 200MB con FAT16
CreateTextFile(disk://0:1/greetings.txt,From Rembo);
Este comando crea un fichero de texto llamado greetings.txt en el directorio raz de la
particin recin formateada. El nombre del fichero se da en formato URL.
CreateDir(disk://0:1/temp);
Crea un nuevo directorio llamado temp.
FloppyBoot();
Permite al ordenador arrancar desde un disquete, por ejemplo, para instalar un sistema
operativo manualmente o para verificar que Rembo ha hecho realmente lo que se
supone que hace.
Por supuesto, el objetivo de Rembo no es formatear los discos duros y/o reinstalar un sistema
operativo manualmente. En la seccin 3.4 aprenderemos a usar imgenes de disco para
automatizar la instalacin de sistemas operativos y cmo configurarlo automticamente.
Pgina 43
Pgina 44
NETfs
Pgina 45
Todos los clientes participantes tienen una lista de ficheros para bajarse y el mismo
nombre de sesin metacast.
Todos los clientes de una misma sesin, acuerdan el nmero de clientes que tienen
que estar presentes antes de que comience a transferirse el primer fichero, o un
timeout global desde que el primer cliente se una a la sesin y el primer fichero sea
transferido (sincronizacin al comienzo de la transferencia).
Una vez que el nmero requerido de clientes han alcanzado el punto de sincronizacin
o ha terminado el tiempo de espera, el servidor enva el primer fichero. Todos los
clientes reciben el fichero y esperan a que el ltimo cliente lo termine de recibir
(sincronizacin al final de la transferencia).
Cuando todos los clientes han completado la transferencia, se programa el siguiente
fichero a transferir. Todos los clientes comienzan a descargarlo en el momento fijado
(transferencias programadas).
Pgina 46
Estas variables pueden ser de tipo simple(escalar) o complejo, Se soportan los siguientes
tipos:
Pgina 47
MS-DOS.
Windows 95 / 98.
Windows NT4 / 2000.
Linux.
Pgina 48
Las imgenes de disco se pueden editar para borrar ficheros o directorios que no se
quieran en el proceso de restauracin.
Puede sincronizar ms que clonar : los ficheros ya instalados en el ordenador destino
que sean idnticos al de referencia, no se copian.
Una vez creada la imagen, puedes bajrtela a la particin cach local y mirar su contenido
con la siguiente secuencia de comandos:
OpenArchive(testarch,cache://global/win98);
FileMan(arch://testarch/);
Usa CloseArchive para cerrar el archivo abierto y liberar recursos del sistema.
Nota : Si el tercer parmetro de la funcin BuildDiskImage es un fichero de disco existente,
REMBO actualizar esta imagen con el nuevo contenido de la particin a la que se hace
referencia en lugar de copiar la particin de forma ntegra. Esto es til si slo aades unos
pocos ficheros a tu particin de referencia y te gustara actualizar la imagen de disco para que
reflejara los cambios. Sin embargo, si quieres crear una imagen de disco nueva, entonces
debes borrarla antes de crearla de nuevo.
Cree particiones antes de restaurar la imagen de disco. Utilice un tipo de particin que
sea compatible con los datos almacenados en la imagen de disco.
Pgina 49
Ejemplo : este ejemplo muestra una secuencia de comandos REMBO necesarios para
preparar una particin destino y restaurar una imagen de disco creada con BuildDiskImage.
En este ejemplo, la imagen se restaurar en la primera particin del primer disco duro. El
tamao del disco duro es de 2 Gb, y se quiere mantener 500 Mb para la particin cach :
Observe que esta funcin realiza un formateo rpido de la particin antes de restaurar
la imagen.
En resumen:
SetPrimaryPartitions(0,FAT16:1500000);
RestoreDiskImage(0,1,cache://global/win98);
/* Para arrancar la imagen de disco resultante */
HDBoot(0,1);
Pgina 50
En modo por defecto, el proceso de sincronizacin restaurar slo los ficheros en los
que el tamao, la fecha o los atributos del fichero hayan cambiado. Esto es similar a
una herramienta estndar de backup/restore.
En modo seguro, el proceso de sincronizacin restaurar todos los ficheros cuyo
contenido haya cambiado.
En modo compatible, el proceso de sincronizacin restaurar todos los ficheros,
emulando a una herramienta estndar de clonacin.
Adems, puede trabajar en uno de los siguientes tres modos a la hora de decidir qu hacer
con los ficheros nuevos (ficheros que estn en la imagen pero no en la particin destino) y con
los ficheros antiguos (ficheros que estn en la particin destino pero que no estn en la
imagen):
Escuelas y Universidades
Ciber-Cafs
Grandes compaas
es equivalente a
Synchronize (disk://0:1/,cache://global/test,);
y
RestoreDiskImage(0,1,cache://global/test);
es equivalente a
HDClean(0,1);
Synchronize(cache://global/test,disk://0:1/,b);
Pgina 51
Pgina 52
Synchronize(link://testimage/,cache://global/ntimage,);
Ejemplo : a continuacin mostramos una secuencia tpica de comandos usados para crear
una imagen virtual desde una particin de referencia, usando imgenes virtuales para borrar
ficheros:
CreateVirtualImage(winimage,disk://0:1/);
UnLinkTree(link://winimage/windows/win386.swp);
Synchronize(link://winimage/,cache://global/winimage,);
FreeVirtualImage(winimage);
Pgina 53
En la mayora de los casos, necesitars filtrar registros fuera de la comparacin. Para hacer
esto, debes borrar los registros tanto en la particin de referencia como en la imagen base, de
tal forma que los registros no sean ni un fichero nuevo ni un fichero borrado. Las imgenes
virtuales se deben usar para conseguir esto:
// 1. Borrar loas registros backups
de la particin
RemoveFile(disk://0:1/windows/system.da0);
RemoveFile(disk://0:1/windows/user.da0);
//2. Filtrar los registros con una imagen virtual
CreateVirtualImage(source,disk://0:1/);
UnLinkTree(link://source/windows/system.dat);
UnLinkTree(link://source/windows/user.dat);
//3. Filtrar registros en la imagen de disco
OpenArchive(destarch,cache://global/win98base);
CreateVirtualImage(dest,arch://destarch/);
UnLinkTree(link://dest/windows/system.dat);
UnLinkTree(link://dest/windows/user.dat);
//4. Comparar imgenes virtuales para crear una imagen incremental
Synchronize(link://source/,link://dest/,>cache://global/msoffice);
//5. Liberar recursos
FreeVirtualImage(dest);
FreeVirtualImage(source);
CloseArchive(destarch);
Pgina 54
Nosotros recomendamos usar la segunda alternativa, porque ofrece mejores prestaciones que
la primera
Pgina 55
Los dos tipos de conversin de particiones que podras querer hacer cuando restauras un
archivo son:
Limpiar la particin destino para asegurarte de tener un sector de arranque con los
parmetros de tamao correctos.
Restaurar un sector de arranque de cualquier archivo que tengas que coincida con el
tipo de la particin destino.
Restaurar todos los ficheros que quieres tener en la particin.
Pgina 56
Pgina 57
3.6.1.1, despus de probar todas las configuraciones y ver que el sistema puede arrancar bien
sin red. Es recomendable crear un script autoload que determinar el comportamiento al
arrancar.
Usaremos a continuacin la funcin CreateRemboCDRom para crear un CD ISO
autoarrancable con todas las imgenes y los scripts necesarios para arrancar.
Una vez hecho esto podremos copiar esta imagen ISO a un CD y utilizarlo para arrancar
cualquier mquina de la red.
Los parmetros IP pueden ser dados mediante un servidor DHCP o de forma directa. La
direccin del servidor REMBO primario estar especificada en la funcin SetIPInfo.
Estas llamadas se hacen desde el archivo autoload de la configuracin desconectada. As un
disquete de arranque REMBO podra conectarse automticamente a un servidor REMBO
predefinido.
Si es necesario podemos detectar si una mquina esta corriendo en modo desconectado o no
comprobando si tiene direccin IP de la siguiente forma:
If ((int)NetInfo.IPAddress = 0 ) {
//en linea
}
Pgina 58
Abrimos un canal TCP que dirige las consultas del cliente a un enlace ODBC instalado
en la mquina que corre como servidor REMBO. Seguidamente este la manda al
manejador ODBC y este finalmente manda la consulta a la base de datos. La respuesta
sigue el mismo camino de vuelta hasta el cliente.
El enlace ODBC est en el directorio ODBC de la distribucin empresarial, para
instalarlo como un servicio WindowsNT ser necesario ejecutar dbgw i; para quitarlo
dbgw u.
El enlace entre TCP y la puerta de enlace solo contesta peticiones de localhost
(127.0.0.1). Esto se hace para prevenir que otras mquinas distintas del servidor
REMBO puedan acceder a la base de datos a travs del enlace. (RemoteHost
127.0.0.1 y RemotePort 2020).
Pgina 59
Pgina 60
Pgina 61
Recomendamos que use la funcin NetFile para ajustar sus hosts. La funcin NetFile primero
comprueba si el fichero existe en el nivel net://host/, entonces intenta el nivel net://group/ y
finalmente usa net://global/ si el fichero no existe ni en el mbito de host ni de grupo. El uso de
NetFile hace posible aadir comportamientos definidos para un grupo de hosts o un solo host
simplemente aadiendo la rembo.bat.ref en el lugar apropiado del servidor.
PatchFile puede tambin ser usado para modificar un fichero de sistema, por ejemplo un
fichero de configuracin usada por su pila MS-DOS TCP/IP. Puede usar REMBO para insertar
la informacin de red apropiada (nombre de host, direccin IP, ...) en el fichero de
configuracin. Vea la seccion 3.3 para una lista de variables disponibles.
Pgina 62
Pgina 63
Pgina 64
Para usar el script anterior, gurdelo en un archivo aparte, copie el fichero en el servidor y
escriba Exec(net://global/scriptname); (sustituya scriptname con el nombre de su script).
Para ejecutar el script automticamente, cree una pgina HTML conteniendo un mensaje de
bienvenida y una seccin <SCRIPT>, como la que hay en el fichero rembo.shtml. Aada la
llamada a la funcin Exec en la seccin script de su pgina HTML, o simplemente copie y
pegue el contenido del script. Entonces, cambie el parmetro del servidor StartPage para sus
hosts de prueba al URL REMBO de pgina HTML que acaba de crear.
Puede ajustar el script a sus necesidades. Si quiere crear dos particiones, una para el sistema
y otra para los datos, simplemente aada una entrada BIGDOS:xxx en la cadena de
particiones, y no olvide hacer un formateo rpido a esta particin al menos una vez con
HDClean :
SetPrimaryPartitions(0,BIGDOS:500000 BIGDOS:500000);
HDClean(0,2);
Puede usar una variable persistente para determinar si es la primera vez que ejecuta este
script, y as ejecutar HDClean una sola vez.
Si quiere usar particiones FAT32 en lugar de FAT16, use entradas FAT32:xxx en la cadena de
particiones. Sin embargo, tenga cuidado de que FAT16 y FAT32 no usen el mismo sector de
arranque. Por consiguiente, si restaura una imagen FAT16 en una particin FAT32 (o
viceversa), el sector de arranque no ser restaurado y el disco no ser botable. Lea la seccin
3.5.4. para instrucciones de cmo restaurar una imagen en un tipo de particin diferente del
tipo para el que fue creado.
Pgina 65
// Limpiar particin
HDClean (0,1);
// Esperar 2 segundos
delay(200);
// Reiniciar equipo en modo seguro
Reboot();
}
// Sincronizar:
with (SyncErrorHandler) try {
Synchronice(cache://global/hdimages/win9x/baseimage.img,
disk://0:1,b);
}
Log(Restauracin exitosa<br>);
4.2.5.- Personalizando
El tratamiento personalizado del ordenador cliente es una fase importante en el proceso de
clonado. En esta fase se establecen parmetros especficos en los ficheros de configuracin de
Windows 9x para prevenir conflictos provocados por el hecho de que todos los ordenadores
clonados tengan el mismo nombre. Asimismo se hacen cambios especficos al host o
especficos al hardware.
Dado que Windows 9x est basado en MS-DOS, algunas configuraciones se almacenan en
ficheros, aunque la mayor parte de ella se almacena en registros. Las funciones de
modificacin de registro de REMBO Profesional y REMBO Enterprise funcionan solamente en
el registro de sistema de Windows 2000/NT. No obstante podemos usar el programa regedit
para parchear el registro antes de cargar Windows aadiendo la lnea correspondiente al
autoexec.bat. Basta con ejecutar un script con REMBO y configurar un parcheado automtico
del registro al arrancar (hecho en 4.2.3).
Si desea modificar alguna entrada especfica del registro use el siguiente procedimiento
genrico, que resulta ms elegante que escribir directamente sobre le registro como vimos en
la seccin anterior:
Bajo Windows 95/98 ejecutar regedit y localizar los parmetros que desea cambiar.
Los ajustes del equipo estn almacenados en HKLM/system/CurrentControl (o usar
bsqueda).
Seleccione el trozo que quiere parametrizar y use la funcin Exportar en el men para
salvarlo (con la extensin .reg).
Edite el fichero de texto resultante y reemplace los valores deseados.
Suba el fichero modificado al servidor usando netclnt en la consola del servidor.
Aada una lnea a su script de restauracin para generar un parche de registro
especfico del host en el disco, basada en el fichero genrico que ya habamos subido
al servidor.
Pgina 66
Nota: Si usa REMBO Classic o no quiere crear imgenes virtuales puede hacer la
sincronizacin en 2 pasos (ms lento):
// 1. Restaurar la imagen base, borrando todos los dems ficheros
Synchronize(cache://global/hdimages/win9x/baseimage.img,
disk://0:1,b);
Pgina 67
Aqu estn los detalles para la creacin de la imagen incremental para ficheros y registros:
Cuando su software est instalado (punto 2 del procedimiento), inicie REMBO y ejecute
el siguiente script. Este script usa una imagen virtual para cortar los ficheros de registro
segn la comparacin entre el contenido del disco y la imagen base. La imagen
incremental resultante no contendr los ficheros de registro :
// 1. Crear una imagen virtual del disco
CreateVirtualImage(win9x,disk://0:1);
// 2. Cortar los ficheros de registro
RemoveFile(link://win9x/windows/user.dat);
RemoveFile(link://win9x/windows/system.dat);
// 3. Crear la imagen incremental
Synchronize(link://win9x,
cache://global/hdimages/win9x/baseimage.img,
>cache://global/hdimages/win9x/mysoft.diff);
// 4. Liberar recursos
FreeVirtualImage(win9x);
Este script crea la imagen incremental solo para ficheros. Para aplicar los correspondientes
cambios al registro debe crear manualmente un parche del registro comparando el registro de
la imagen base con el registro modificado. Se puede hacer siguiendo este procedimiento:
Pgina 68
Crear una imagen virtual para unir la imagen base con la incremental por ficheros.
Restaurar la imagen virtual.
Instalar el parche del registro.
Los pasos 1 y 3 pueden cambiarse para unir ms de una imagen incremental. Una vez ha
entendido cmo funciona para una imagen, puede copiar las sentencias de Rembo-C para
otras imgenes incrementales para crear un script ms complejo.
Aqu vemos un ejemplo completo de restauracin paso a paso:
// 1. Abrir los archivos de disco
OpenArchive(base,cache://global/hdimages/win9x/baseimage.img);
OpenArchive(diff1,cache://global/hdimages/win9x/mysoft.diff);
// 1b. Crear la imagen virtual en la imagen base
CreateVirtualImage(win9x,arch://base);
// 1c. Unir el archivo incremental con la imagen virtual
LinkTree(link://win9x,arch://diff1);
// 2. Restaurar los ficheros
// Esto restaurar los ficheros de registro de la imagen base en el
// estado inicial.
Synchronize(link://win9x,disk://0:1,b);
// 2b. Liberar recursos
CloseArchive(diff1);
FreeVirtualImage(win9x);
CloseArchive(base);
// 3a. Configurar todos los parches de registro
str regcmd = c:\\windows\\regedit
/L:c:\\windows\\system.dat
/R:c:\\windows\\user.dat;
CreateTextFile(disk://0:1/rembo.bat,
regcmd + c:\\rembo.reg\n +
regcmd + c:\\mysoft.reg\n);
// 3b. Instalar el parche de registro del servidor
PatchFile(cache://global/hdimages/win9x/baseimage.reg,
disk://0:1/rembo.reg);
// 3c. Instalar el parche de registro del software
PatchFile(cache://global/hdimages/win9x/baseimage.reg,
disk://0:1/mysoft.reg);
Si necesita mezclar ms de una imagen incremental con la imagen base, debe hacer los
siguientes cambios al script anterior:
Extienda el paso 1 y repita el paso 1c para las otras imgenes incrementales (para
mezclar todas las imgenes incrementales en una imagen virtual). No olvide cerrar los
archivos abiertos despus de la sentencia Synchronize.
Extienda el paso 3 y repita el paso 3c para los otros parches de registro (para aplicar
secuencialmente todos los parches de registro).
Pgina 69
Pgina 70
Pgina 71
Arranque REMBO, configure las particiones con los asistentes (no olvide dejar algo de
espacio al final del disco duro para la particin cach). Entonces restaure su imagen Windows
NT con el siguiente comando:
RestoreDiskImage(0,1,cache://global/hdimages/winnt/baseimage.img);
Para usar el script anterior, gurdelo en un archivo separado, cpielo en el servidor y ejecute
Exec(net://global/scriptname); (sustituya scriptname con el nombre de su script).
Para ejecutar el script automticamente, cree una pgina HTML conteniendo un mensaje de
bienvenida y una seccin <SCRIPT>, como la que hay en el fichero rembo.shtml. Aada la
llamada a la funcin Exec en la seccin script de su pgina HTML, o simplemente copie y
pegue el contenido del script. Entonces, cambie el parmetro del servidor StartPage para sus
hosts de prueba al URL REMBO de la pgina HTML que acaba de crear.
Puede ajustar el script a sus necesidades. Si quiere crear dos particiones NTFS, una para el
sistema y otra para los datos, simplemente aada una entrada NTFS:xxx en la cadena de
particiones, y no olvide hacer un formateo rpido a esta particin al menos una vez con
HDClean:
Pgina 72
SetPrimaryPartitions(0,"NTFS:1500000 NTFS:3500000");
HDClean(0,2);
...
Puede usar una variable persistente para determinar si es la primera vez que se ejecuta este
script, y as ejecutar HDClean una sola vez.
Ver la pgina de sincronizacin del manual para ms informacin acerca de los diferente
modos de sincronizacin.
Si la particin est corrupta porque Windows NT se ha apagado correctamente el modo de
sincronizacin del REMBO debe fallar porque los ficheros estn corruptos. Se puede
implementar una restauracin fail-safe formateando el disco duro si la sincronizacin falla al
restaurar la imagen.
Ejemplo :
Var SyncErrorHandler(var exc)
{
Log(Error en la restauracin. Reiniciando <br>);
// Limpiamos la particin
HDClean(0,1);
// Esperamos 2 seg
delay(200);
// Reiniciamos el ordenador para comenzar en un estado seguro
Reboot();
}
//Synchronize:
with (SyncErrorHandler) try {
Synchronize(cache://global/hdimages/winnt/baseimage.img,
disk://0:1,b);
Log(Restauracin correcta<br>);
Pgina 73
4.3.5.- Personalizando
El tratamiento personalizado del ordenador cliente es una fase muy importante en el proceso
clonado. Esta fase permite personalizar parmetros en la estacin de trabajo Windows NT para
prevenir conflictos provocados por el hecho de que todos los ordenadores clonados tengan el
mismo nombre o direccin IP.
En Windows NT, todos los parmetros residen en el registro de Windows NT. Prcticamente,
el registro est cargado en varios ficheros : SAM, SOFTWARE, SYSTEM, SECURITY y
DEFAULT. Estos ficheros se encuentran en el directorio /WINNT/system32/config.
Para cambiar el hostname al ordenador puedes usar una de las funciones de alto nivel del
Rembo-C como NTSetNetbiosName. Ver la seccin 5.4 en el manual de referencia de scripts
de Rembo-C para ms informacin.
Si quieres modificar una entrada especfica del registro usa el siguiente procedimiento:
Bajo Windows NT, ejecuta REGEDIT32 y localiza el parmetro que deseas cambiar. La
configuracin del ordenador est almacenada en HKLM/System/ControlSet001.
Determinar en que fichero est localizado el parmetro a modificar. Las entradas
HKLM/Software estn cargadas en SOFTWARE, las entradas HKLM/System estn
cargadas en SYSTEM, las entradas HKLM/Security estn cargadas en SECURITY, las
entradas HKLM/SAM estn cargadas en SAM y el perfil de usuario por defecto est
cargada en DEFAULT.
Crear un script que abra el fichero de registro, modificar el valor como se describe en el
reg:pgina del manual URL y cerramos el registro.
Un ejemplo para cambiar el nombre de usuario mostrado en el dilogo del Windows NT sera
el siguiente:
//
La
clave
winlogon
est
en
el
registro
de
software
OpenRegistry(soft,disk://0:1/winnt/system32/config/software);
// Almacena el valor ( cadena unicode ) en la clave DefaultUserName.
// La cadena se extiende por varias lneas debido a limitaciones de
// escritura.
// Puedes escribir el mismo commando en una nica lnea
CreateUnicodeFile(reg://soft/Microsoft/
Windows NT/CurrentVersion/
Winlogon/DefaultUserName,
Miusuario);
// Cerrar el registro para realizar los cambios
CloseRegistry(soft);
Pgina 74
y la imagen virtual
Si ests usando REMBO Classic, o si deseas usar imgenes virtuales, puedes conseguir un
resultado similar haciendo:
// 1. Restaurar la imagen bsica
Synchronize(cache://global/hdimages/winnt/baseimage.imag,
disk://0:1,b);
// 2. Restaurar la imagen incremental (non-destructive)
Synchronize(cache://global/hdimages/winnt/baseimage.deff,
disk://0:1,b+);
Pgina 75
Este script crea la imagen incremetal para los ficheros. Si queremos crear las imgenes
incrementales para los ficheros de registro debe seguir las siguientes instrucciones para cada
una de los cinco ficheros de registros. Este script crea una imagen incremental entre el estado
original del fichero del registro y el estado actual (estado final). Remplaza la palabra SYSTEM
por SOFTWARE, SAM, SECURITY y DEFAULT para crear las otras cuatro imgenes
incrementales. No hay que olvidar que hay que cargar esas cinco imgenes en cinco ficheros
diferentes sobre el servidor (cambiar la extensin del tercer argumento en Synchronize).
//1. Abrir la imagen bsica para obtener el fichero de registro original
OpenArchive(base,cache://global/hdimages/winnt/baseimage.img);
//2. Abrir el registro en la imagen bsica (estado inicial)
OpenRegistry(initial,arch://base/winnt/system32/config/SYSTEM);
//3. Abrir el registro sobre el disco(estado final)
OpenRegistry(final,disk://0:1/winnt/system32/config/SYSTEM);
//4. Crear la imagen incremental
Synchronize(reg://final,reg://initial,
?>cache://global/hdimages/winnt/mysoft.sys);
//5. Liberar recursos
CloseRegistry(final);
CloseRegistry(initial);
CloseArchive(base);
Crear una imagen virtual para combinar la imagen bsica con la imagen incremental
para los ficheros.
Restaurar la imagen virtual.
Aplicar las imgenes incrementales de registros.
Pgina 76
CreateVirtualImage(nt,arch://base);
// 1c.Combinar el archivo incremental en la imagen virtual.
LinkTree(link://nt,arch://diff1);
// 2a.Restaurar los ficheros.
// Esto restaurar los ficheros del registro desde la imagen bsica en
//el estado inicial
Synchronize(link://nt,disk://0:1,b);
// 2b.Liberar recursos
CloseArchive(diff1);
FreeVirtualImage(nt);
CloseArchive(base);
// 3a.Abrir el fichero del registro
OpenRegistry(openreg,disk://0:1/winnt/system32/config/SYSTEM);
// 3b.Aadir la imagen incremental del registro
Synchronize(cache://global/hdimages/winnt/mysoft.sys,reg://openret,
+-);
// 3c.Cierra el fichero del registro
CloseRegistry(openreg);
Como se puede observar el ejemplo est incompleto, los pasos 3a, 3b y 3c deben repetirse
para cada uno de los cinco ficheros del registro (remplazar SYSTEM y .sys).
Si deseas combinar ms de una imagen incremental debes realizar las siguientes
modificaciones en el script:
Ampliar el paso 1a y repetir el paso 1c para cada imagen incremental (combinar todas
las imgenes incrementales en una imagen virtual). No olvide cerrar los archivos
abiertos despus de Synchronize.
Repetir el paso 3b para las dems imgenes incrementales y para cada fichero del
registro.
Pgina 77
2. Generar para este host un nico SID o usar el SID cargado en el fichero net://host/SID.
Cargar este nuevo fichero en la variable binaria newsid.
var newsid;
if (!FileExists(net://host/SID)) {
//no carga SID
newsid=GenerateSID(oldsid);
//generar
CreateHexFile(net://host/SID,newsid);
//carga
}else{
//usa el SID cargado
mewsid=LoadHexFile(net://host/SID);
Pgina 78
Crear una imagen de la distribucin completa. Hay que tener en cuenta que la
restauracin de la imagen toma su tiempo.
Copiar distintas partes de la distribucin ( p.e. /usr ) a un servidor NFS y quitar estas
partes de la particin principal. De esta forma creamos imgenes ms pequeas, pero
a costa de reducir el rendimiento de la mquina debido a que debe acceder al servidor
NFS en tiempo de ejecucin.
Cuando tu mquina modelo est lista ejecuta el siguiente script para crear la imagen. Si
tenemos varias particiones tendremos que ejecutarlo en cada particin.
// Creacin de una imagen de la particin 1 (/dev/hda1)
BuildDiskImage (0,1,cache://global/hdimages/linux/baseimage.base);
Si tenemos varias particiones y queremos crear una imagen que las contenga a todas
debemos utilizar una imagen virtual para fusionar todas las particiones en un sistema de
archivos virtual. El siguiente ejemplo asume que la particin raz es /dev/hda1, /usr es
/dev/hda5 y /home es /dev/hda6 :
// 1. Crear una imagen virtual con la particin raz (hda1)
CreateVirtualImage(linux,disk://0:1);
// 2. Aadir /usr a la imagen virtual (hda5)
LinkTree(link://linux/usr,disk://0:5);
// 3. Aadir /home a la imagen virtual (hda6)
LinkTree(link://linux/home,disk://0:6);
// 4. Crear una imagen en disco de la imagen virtual
Synchronize(link://linux,
cache://global/hdimages/linux/baseimage.base, );
No es necesario crear una imagen para la particin de intercambio, ya que no contiene datos
importantes y REMBO la crea automticamente al arrancar.
Pgina 79
Para poder utilizar LXBoot debemos extraer el kernel de nuestro disco duro. Para ello
podemos utilizar los asistentes o hacerlo manualmente copiando el archivo del ncleo al
servidor ( con CopyFile ). Las imgenes de los ncleos suelen estar guardadas en /boot. P.e.:
CopyFile(disk://0:1/boot/vmlinuz,
cache://global/hdimages/linux/basekernel.krn);
Para arrancar la imagen del ncleo desde el sistema de archivos raz instalado en /dev/hda1 :
LXBoot(cache://global/hdimages/linux/basekernel.krn,
,root=/dev/hda1);
Pgina 80
Si hemos optado por la sincronizacin en vez de una restauracin completa, debemos tener
en cuenta que si la particin se corrompe Synchronize fallara al restaurar la imagen. Para
solventar esta situacin podemos utilizar un manejador de excepciones que capture los errores
generados por Synchronize. Si ocurre un error simplemente formatearamos la particin
destino y reiniciaramos. Esto devolver a REMBO a un estado seguro y Synchronize ser
capaz de restaurar todos los archivos.
A continuacin mostramos un ejemplo de script de sincronizacin a prueba de fallos :
// Manejador de excepciones
var SyncErrorHandler ( var exc )
{
Log( Se ha producido un error. Reiniciando ... <br>);
// Formatea la particin destino
HDClean(0,1);
// Espera 2 segundos
delay(200);
//Reinicia
Reboot();
}
// Sincronizacin
with(SyncErrorHandler) try {
Synchronize(cache://global/hdimages/linux/baseimage.base,
disk://0:1,b);
}
Para restaurar esta imagen incremental debemos utilizar una imagen virtual para fusionar la
imagen base con la imagen incremental.
Ejemplo :
// 1. Abrir los archivos del disco
OpenArchive(base,cache://global/hdimages/linux/baseimage.base);
OpenArchive(diff,cache://global/hdimages/linux/mysoft.diff);
// 2. Creacin de una imagen virtual sobre la imagen base
CreateVirtualImage(lx,arch://base);
// 3. Fusionar la imagen incremental en la imagen virtual
LinkTree(link://lx,arch://diff);
// 4. Sincronizar la imagen virtual al disco
Synchronize(link://lx,disk://0:1,b);
// 5. Liberar recursos
FreeVirtualImage(lx);
CloseArchive(diff);
CloseArchive(base);
Pgina 81
Pgina 82
Para que un script sea ejecutado por REMBO es necesario declararlo de tipo text/rembo-c,
como sigue:
<script type=text/rembo-c>
cdigo del script
</script>
Pgina 85
Pgina 86
CAPTULO 2 : El lenguaje
2.1.- Estructura de un programa Rembo-C
La sintaxis del lenguaje Rembo-C es muy similar a la del lenguaje C. Destacamos las
siguientes caractersticas :
Los tipos definidos por el usuario son dos: el tipo enumerado y las estructuras. Pueden
ligarse a un nombre para usarse posteriormente o declarar inmediatamente una o ms
variables.
La sintaxis del tipo enumerado es la siguiente :
enum [nombre]{
elementos
} [lista de variables];
Pgina 87
2.4.- Expresiones
Las tenemos de cuatro tipos : numricas, booleanas, cadena y variable.
La comprobacin de tipos para las 3 primeras es rgida. La de las variables se realiza en
tiempo de ejecucin, permitiendo un cierto grado de polimorfismo.
Rembo-C le asigna mayor prioridad a las operaciones a nivel de bit que a las de comparacin.
En Rembo-C no se permite la evaluacin en cortocircuito de expresiones booleanas ni
condicionales : se comprueba la expresin completa aunque la evaluacin de la primera ya
resuelva el valor de la expresin entera.
Los constructores de tablas son los siguientes:
Pgina 88
Las expresiones de la sentencia case pueden ser expresiones de cualquier tipo compatible
con la expresin del switch correspondiente.
Pgina 89
El argumento de dicha funcin es una estructura que nos indica el tipo de excepcin que se
ha producido.
Si se produce una excepcin dentro de un manejador se eliminan ambos.
Es posible provocar una excepcin con la orden RaiseError.
Pgina 90
Sintaxis
1.
2.
3.
4.
5.
Operadores
1.
2.
3.
4.
5.
6.
Se pueden usar los operadores +, <, <=, >=, >, ==, != con cadenas.
Los operadores a nivel de bit tienen mayor prioridad que los relacionales.
Los operadores booleanos y condicionales no ejecutan evaluacin en cortocircuito.
Aparecen dos nuevos operadores ( <=> y := ) para manipular variables.
El operador [ ] proporciona comprobacin automtica de rangos.
El operador sizeof nos da el nmero de elementos de una tabla o estructura, la
longitud de una cadena u objeto binario, o 1 en caso de valores atmicos.
7. El operador typeof nos devuelve el nombre del tipo de cualquier objeto.
Variables
1.
2.
3.
4.
5.
6.
7.
8.
9.
Pgina 91
Cadenas.
Objetos binarios.
Tablas y estructuras.
Directorios.
Ficheros.
Contenido de un fichero.
Interfaz de usuario.
Primitivas relacionadas con la evaluacin.
Variables persistentes.
Primitivas relacionadas con la red.
Primitivas del sistema.
Con este documento no pretendemos resumir una por una todas las funciones incluidas en las
libreras: solo destacaremos las que nos han parecido ms tiles.
Para informarse detalladamente de su uso y ver otras que pueden ser tiles en determinadas
circunstancias es recomendable consultar el manual de referencia del lenguaje. .
3.1.- Cadenas
Nombre
StrCopy
Prototipo
Descripcin
Pgina
Nombre
StrCompare
Prototipo
Descripcin
Pgina
Pgina 92
StrToUpper / StrToLower
Prototipo
Descripcin
Pgina
BinCreate
Prototipo
Descripcin
Pgina
Crea un nuevo objeto binario de tam bytes y los inicializa con valor_inicial.
365
DeepCopy
Prototipo
Descripcin
Pgina
Nombre
DeepFreeze
Prototipo
Descripcin
Pgina
3.4.- Directorios
Nombre
CreateDir / Mkdir
Prototipo
Descripcin
Pgina
Pgina 93
RemoveDir / RmDir
Prototipo
Descripcin
Pgina
Nombre
CopyTree / MoveTree
Prototipo
Descripcin
Pgina
Nombre
ChDir
Prototipo
Descripcin
Pgina
3.5.- Ficheros
Nombre
CopyFile / FileCopy
Prototipo
Descripcin
Pgina
FileOpen
Prototipo
Descripcin
Pgina
Nombre
FileRead
Prototipo
int FileRead ( var fich, var obj, int pos_inic, int long );
Descripcin
Lee long bytes del fichero indicado por el descriptor de fichero fich a partir de
la posicin actual del puntero y los almacena en el buffer binario obj en la
posicin pos_inic.
431
Pgina
Pgina 94
Nombre
FileWrite
Prototipo
int FileWrite ( var fich, var obj, int pos_inic, int long );
Descripcin
Pgina
Nombre
FileClose
Prototipo
Descripcin
Pgina
OpenWindow
Prototipo
var OpenWindow ( str win, int izq, int arr, int der, int abajo );
Descripcin
Pgina
Abre una nueva ventana con las coordenadas de las esquinas indicadas en
% con respecto al tamao de la ventana. Le asocia el nombre indicado con
win.
440
Nombre
Prototipo
Descripcin
Pgina
Exec
Prototipo
Descripcin
Pgina
Pgina 95
Eval
Prototipo
Descripcin
Pgina
Nombre
KillThread
Prototipo
Descripcin
Pgina
Nombre
RaiseError
Prototipo
Descripcin
Eleva una excepcin. Ver pgs. 468 / 469 / 470 y 471 para ms detalles
sobre las excepciones existentes.
468
Pgina
Export
Prototipo
Descripcin
Pgina
Nombre
UnExport
Prototipo
Descripcin
Pgina
SysLog
Prototipo
Descripcin
Pgina
Pgina 96
ShowConsole / HideConsole
Prototipo
Descripcin
Pgina
Nombre
Print / Printf
Prototipo
Descripcin
Pgina
Nombre
Keyb
Prototipo
Descripcin
Pgina
Nombre
CodePage
Prototipo
Descripcin
Pgina
Pgina 97
Edite el contenido del fichero rembo.conf indicando al menos el directorio base de instalacin
de Rembo (Basedir) y el password que utilizar (NetPassword).
El fichero de texto srvfiles.nc contiene un conjunto mnimo de ficheros que REMBO necesita
para arrancar. Llegado a este punto deber arrancar Rembo por primera vez. Arranque el
servidor escribiendo rembo d v 4 en la lnea de comandos. Durante esta primera ejecucin
tardar un poco ms de tiempo para generar una clave criptogrfica aleatoria.
Con el servidor en ejecucin edite el fichero srvfiles.nc y sustituya la lnea open 127.0.0.1
install con open 127.0.0.1 xxxx donde xxxx es la clave que ha utilizado como NetPassword en
el fichero rembo.conf.
Ya puede ejecutar el comando misc/netclnt srvfiles.nc en el directorio de instalacin del
servidor. Se transferirn varios ficheros al servidor y NetClnt volver a la lnea de comandos
despus de transferir el ltimo fichero.
Su servidor Rembo ya est instalado y listo para recibir peticiones de arranque remoto.
Pgina 100
En primer lugar, no ocupe ms particiones primarias de las necesarias. Dado que linux puede
instalarse en una particin lgica es recomendable hacerlo as. Asimismo tenga en cuenta un
pequeo conflicto existente entre Windows 2000 y 98, que no permitir al Windows 2000
arrancar correctamente si no ocupa la primera particin, en lugar del Windows 98.
Pgina 101
El arranque de Windows 2000 se efecta con un simple HDBoot(0,1); en nuestro caso, disco
0, particin 1.
Pgina 102
Como puede verse no es ms que transferir el fstab adecuado. Puede ver el script completo
en nuestro men.
En el arranque de Linux deberemos especificarle dnde est ubicado el kernell. En nuestro
caso puede arrancarse con la orden:
LXBoot("cache://global/hdimages/linux/linuxbase.krn","","root=/dev/hda5");
Pgina 103
Para cada una de las opciones que queremos que aparezca colocamos una nueva rama con
el ttulo que queremos que muestre, el icono, y la funcin que se ejecutar si se selecciona la
opcin.
En donde para cada rama le indicamos que funcin queremos llamar y que mensaje
aparecer el men
Si lo que queremos es que no aparezca nada, pues nada, no le indicamos ninguna rama y ya
est. Quedara entonces como sigue :
SaveText(<html>
<select menu style="color: navy;">
</select>
</html>,"display://root/menu/SELF");
De este modo al pulsar la tecla inicio de Windows no nos aparece nada en el men
desplegable.
Nota : Parece que no es posible eliminar este men completamente, puesto que es parte del
copyright de Rembo.
Pgina 106
de
Ingeniera
en
"<tr><td><tr><td><td><br><br> Usuario: "
"<td><br><br><input name=username size=16>"
"<tr><td><tr><td><td> Password: "
"<td><input name=password size=16 "
"type=password
onsubmit='TryLogon(username,password);'>"
"<tr><td><tr><td><td colspan=2 text=blue>"
"<tr><td><td colspan=2><br><center>"
"<button onmouseup='TryLogon(username,password);'>"
" Aceptar </button> "
Pgina 107
"<button onmouseup='CloseWindow(\"authwin\");'>"
" Cancelar </button>"
"</center></table>",
"display://authwin/SELF");
// Esto es para hacer que la ventana se ajuste al contenido
// Pero solo al que hay dentro, y no al titulo :(
// AutoResizeWindow("authwin",true,true);
// Wait for the window to close
while(FileExists("display://authwin"))
delay(20);
return AuthInfo.Success && !LogonCanceled;
}
Con este cdigo creamos una pantalla de autentificacin que no se puede mover ni
redimensionar.
De esta forma no es necesario tener nuestra pgina de inicio repleta de funciones o cdigo.
Este comando es posible utilizarlo tambin dentro de nuestro propios scripts.
Pgina 108
Los nombres de usuario y password los hemos tomado de la mquina Linux que acta como
servidora. Es posible tambin que la autentificacin se realice mediante dominio NT o Radius (
ver Manual del Servidor de Rembo para ms detalles ).
Como ejemplo mostramos el cdigo que hemos utilizado en nuestra pgina de inicio
personalizada:
bool aut = false;
while (!aut)
{
aut = Autentificar();
if(!aut)
{
OpenMessage("auten","Nombre de usuario o contrasea incorrectos");
delay(300);
CloseWindow("auten");
}
}
Pgina 109
Este script se puede ejecutar al crear toda la estructura de particiones del disco duro y de esta
forma se evita el uso del equipo si no se ha autentificado previamente.
Nota : Es evidente que si por cualquier motivo la red o el servidor de autentificacin deja de
funcionar el ordenador queda totalmente inutilizado.
Ratn
Teclado
Reset
Power off
Pantalla
Todo
->
->
->
->
->
->
Lockout
Lockout
Lockout
Lockout
Lockout
Lockout
mouse
keys
reset
poweroff
screen
all
Este bloqueo se mantiene mientras Rembo est activo, y se desbloquean al darle el control al
sistema operativo con HDBoot, LXBoot, RDBoot o DeviceBoot.
El bloqueo se ejecuta para todos los hosts pertenecientes al grupo.
Otra posibilidad es usar en los scripts las funciones LockKeyboard, LockMouse o
LockScreen, que permite bloquear el teclado, el ratn o la pantalla del ordenador local. Esta
opcin es la que hemos utilizado para evitar que el usuario toque nada mientras se restaura un
sistema operativo.
Pgina 110
Men de ejemplo
MEN DE EJEMPLO
Para terminar este documento, queremos mostrar un ejemplo de pgina de inicio que hemos
creado para usarla durante las prcticas. Puede servir de base para su propia pgina si as lo
desea. Con un poco de imaginacin y algo de conocimientos de programacin (sobre todo,
HTML) es posible conseguir algunas cosas sorprendentes.
Ejemplo : practicas.shtml
<!-- prueba1.shtml - Probando Scripts de Rembo...
--->
<script type="text/rembo-c">
// Compatibilidad con versiones anteriores a la 0.99.
if(FileExists("cache://global/plugins/rembo099.rbx"))
{
join(Exec("plugins/rembo099.rbx"));
}
// Cargando utils.rbx
if(FileExists("cache://global/plugins/utils.rbx"))
{
join(Exec("plugins/utils.rbx"));
}
// Para declarar los modos por defecto
str DefVideoMode;
str DefKeyMap;
str DefCodeMap;
// Para parchear W98
str Hostname;
var BasicErrorHandler(var exc) { return exc; }
with(BasicErrorHandler) try
{
// Obligamos modo 800x600 y teclado en espaol
Settings.VideoMode = "800x600";
Keyb("es");
if(DefCodeMap != "")
CodePage((int)DefCodeMap);
}
/* Cdigo para cambiar la pantalla de autentificacin de usuario */
bool Autentificar(void)
{
if (Offline())
{
Log("Modo sin red: ignorando peticion de
autentificacion<br>");
return false;
}
// Ventana de autentificacin
// Siempre arriba, no se puede mover ni redimensionar
var win = OpenWindow("authwin",20,20,80,60);
win.alwaysOnTop = true;
win.movable = false;
win.resizable = false;
LogonCanceled = true; // Si se cierra la ventana,
//se cancela la autentificacin
SaveText("<title>Escuela Tcnica Superior de Ingeniera en
Informtica</title>"
"<table>"
"<td text=navy face='sans-serif'>"
"<tr><td><tr><td><td><br><br> Usuario: "
"<td><br><br><input name=username size=16>"
Pgina 112
Men de ejemplo
<tr><td><tr><td><td> Password: "
<td><input name=password size=16 "
"type=password onsubmit='TryLogon(username,password);'>"
"<tr><td><tr><td><td colspan=2 text=blue>"
"<tr><td><td colspan=2><br><center>"
"<button onmouseup='TryLogon(username,password);'>"
" Aceptar </button> "
"<button onmouseup='CloseWindow(\"authwin\");'>"
" Cancelar </button>"
</center></table>",
display://authwin/SELF");
// Esto es para hacer que la ventana se ajuste al contenido
// Pero solo al que hay dentro, y no al titulo :(
// AutoResizeWindow("authwin",true,true);
// Wait for the window to close
while(FileExists("display://authwin"))
delay(20);
return AuthInfo.Success && !LogonCanceled;
}
void LimpiarHD (void)
{
/* Las particiones que vamos a utilizar son las siguientes :
* Particin 1:
* Particin 2:
* Particin 3:
* Particin 4:
* Libres para cach_
*/
NTFS
FAT32
EXT2
LINUX-SWAP
:
1 Gb
500 Mb
1,5 Gb
256 Mb
+900 Mb
HideWindow("Menuppal");
OpenMessage("limphd","Limpiando HD ...");
delay(200);
CloseWindow("limphd");
SetPrimaryPartitions(0, "NTFS:1000000 FAT32:500000 EXT2:1500000
LINUX-SWAP:256000");
HDClean(0,1);
HDClean(0,2);
HDClean(0,3);
HDClean(0,4);
// Lo siguiente es para impedir que se salten el arranque remoto
// dandole al escape
OpenMessage("limphd","Limpiando MBR ...");
delay(200);
CloseWindow("limphd");
SaveText("Solo se puede arrancar en red:D",
"disk://0:0/BootMessage");
HDClean(0,0);
SetBootablePartition(0,0);
OpenMessage("finlimphd","Fin de limpieza");
delay(300);
CloseWindow("finlimphd");
ShowWindow("Menuppal");
}
void ArrancarW2K (void)
{
CloseWindow("Menuppal");
OpenMessage("aw2k","Arrancando Windows 2000 ...");
delay(300);
CloseWindow("aw2k");
HDBoot(0,1);
}
Pgina 113
Men de ejemplo
Pgina 114
Men de ejemplo
SaveText(<html>
<select menu style="color: navy;">
</select>
</html>,"display://root/menu/SELF");
// Para indicar el color de fondo
w.widgets.color="#CCCC99";
// Y, por ltimo, los mens
Pgina 115
Men de ejemplo
Pgina 116