El cambio de IP se realiza de forma automática con el script de servidor setserveraddr, a partir de la versión 1.0.6.
Uno de los casos en el que podemos utilizar este script es cuando un servidor tiene varias tarjetas de red y la instalación ha cogido la tarjeta incorrecta.
Formato sudo /opt/opengnsys/bin/setserveraddr Interfaz
ej: sudo ./setserveraddr eth1
Si queremos realizar el cambio de forma manual podemos seguir la siguiente documentación.
Este es un ejemplo de un menú personalizado en html donde seleccionar el arranque de un cliente con Windows 7 y Linux.
Los ejemplos son de la Universidad Autónoma de Barcelona así que podréis encontrar algo de texto en catalán. En el zip encontraréis dos menús, uno para resolución 800x600 y otro para resolución y 1024x768, así como una carpeta con las imágenes usadas.
También encontramos más ejemplos en el foro Menús personalizados, que se ha creado el para compartir los menús que utilizamos.
Para personalizar la postconfiguración de los sistemas operativos se recomienda utilizar el script configureOsCustom.
Cuando el proceso de despliegue de la imagen encuentra esté script lo ejecuta en sustitución al configureOs, que contiene la postconfiguración por mínima necesaria.
La instalación de OpenGnsys contiene una plantilla de este script con algunos ejemplos a partir de la versión 1.0.5.
# Llamar a la postconfiguración por defecto
configureOs "$1" "$2"
# Postconfiguración específica para SO y versión.
OSVERSION=$(ogGetOsVersion $1 $2)
case "$OSVERSION" in
*Windows*)
# PAra sistemas operativos Windows7, Windows8.x y Windows10
DIRMOUNT=$(ogMount $1 $2)
# Ejecutar postconfiguración en el 1er inicio de Windows.
FILECMD=postconf.cmd
[ "${INSTALLOSCLIENT^^}" != "TRUE" ] && ogInstallMiniSetup $1 $2 $FILECMD
# Crear fichero de comandos.
touch "$(ogGetPath $DIRMOUNT/Windows/System32)/$FILECMD"
ogAddCmd $1 $2 $FILECMD '@echo off'
ogAddCmd $1 $2 $FILECMD 'echo "* Activar red"'
ogAddCmd $1 $2 $FILECMD 'net start "Conexiones de red"'
ogAddCmd $1 $2 $FILECMD 'net start "Cliente DHCP"'
ogAddCmd $1 $2 $FILECMD 'echo "* Activar Windows 10"'
# Borra la clave original del sistema operativo
ogAddCmd $1 $2 $FILECMD 'cscript %windir%\system32\slmgr.vbs /upk'
# Establece una clave genérica para la versión del Sistema Operativo, consultar la clave en las NOTAS
# a continuación
ogAddCmd $1 $2 $FILECMD 'cscript %windir%\system32\slmgr.vbs /ipk "Clave IPK" >NUL'
# Establece el servidor KMS
ogAddCmd $1 $2 $FILECMD 'cscript %windir%\system32\slmgr.vbs /skms "Nombre/IP Servidor KMS":1688 >NUL'
# Activa el sistema operativo frente al servido KMS
ogAddCmd $1 $2 $FILECMD 'cscript %windir%\system32\slmgr.vbs /ato'
# Detecta la versión de Office instalada
for i in Office14 Office15 Office16; do
[ -n "$(ogGetPath "$DIRMOUNT/Program Files/Microsoft Office/$i")" ] && OFFICE="$i"
done
if [ -n "$OFFICE" ]; then
ogAddCmd $1 $2 $FILECMD 'echo "* Activar '$OFFICE'"'
ogAddCmd $1 $2 $FILECMD 'cd "C:\Program Files\Microsoft Office\'$OFFICE'"'
ogAddCmd $1 $2 $FILECMD 'cscript ospp.vbs /act'
fi
;;
# Añadir aquí postconfiguración para otros sistemas operativos y otras versiones.
esac
NOTAS:
#/bin/bash
################ Bloque de variables ####################
DISK=1
PART=1
ADMIN=administrador
PASSADMIN=unapassword
USER=alumnos
PASSUSER=
POSTCONF=postconf.cmd
################ Fin bloque de variables ################
## Indicación del proceso (variable $POSTCONF), usuario que lo ejecutará ($ADMIN) y configuración del windows para que arranque con autologin tras la postconfiguración (1 "$USER" "$PASSUSER")
ogInstallMiniSetup $DISK $PART $POSTCONF $ADMIN $PASSADMIN 1 "$USER" "$PASSUSER"
### Reactivación Windows 7
ogAddCmd $DISK $PART $POSTCONF "if exist \"%windir%\system32\slmgr.vbs\" FOR /F \"tokens=5\" %%a in ('cscript \"%windir%\system32\slmgr.vbs\" -xpr') do (set _act=%%a)"
ogAddCmd $DISK $PART $POSTCONF "if \"%_act%\" neq \"activated.\" ("
ogAddCmd $DISK $PART $POSTCONF " cscript \"%windir%\system32\slmgr.vbs\" -ato"
ogAddCmd $DISK $PART $POSTCONF ")"
### Reactivación versiones x86 y x64 de office, visio y project: 2010 y/o 2013
ogAddCmd $DISK $PART $POSTCONF "if exist \"%PROGRAMFILES%\Microsoft Office\Office14\OSPP.VBS\" set _offver2010=%PROGRAMFILES%"
ogAddCmd $DISK $PART $POSTCONF "if exist \"%PROGRAMFILES% (x86)\Microsoft Office\Office14\OSPP.VBS\" set _offver2010=%PROGRAMFILES% (x86)"
ogAddCmd $DISK $PART $POSTCONF "if exist \"%PROGRAMFILES%\Microsoft Office\Office15\OSPP.VBS\" set _offver2013=%PROGRAMFILES%"
ogAddCmd $DISK $PART $POSTCONF "if exist \"%PROGRAMFILES% (x86)\Microsoft Office\Office15\OSPP.VBS\" set _offver2013=%PROGRAMFILES% (x86)"
# arrancamos el servicio "Office Software Protection Platform"
ogAddCmd $DISK $PART $POSTCONF "sc start osppsvc"
# pausa de 5 segundos para asegurarnos que ha arrancado
ogAddCmd $DISK $PART $POSTCONF "ping -n 5 localhost >NUL"
# y reactivamos
ogAddCmd $DISK $PART $POSTCONF "if defined _offver2010 ("
ogAddCmd $DISK $PART $POSTCONF " cscript \"%_offver2010%\Microsoft Office\Office14\OSPP.VBS\" /act"
ogAddCmd $DISK $PART $POSTCONF ")"
ogAddCmd $DISK $PART $POSTCONF "if defined _offver2013 ("
ogAddCmd $DISK $PART $POSTCONF " cscript \"%_offver2013%\Microsoft Office\Office15\OSPP.VBS\" /act"
ogAddCmd $DISK $PART $POSTCONF ")"
### reiniciamos el equipo
ogAddCmd $DISK $PART $POSTCONF "shutdown /r"
Cuando tenemos instalados varios sistemas Windows en un equipo, al arrancar uno de ellos necesitamos que las otras particiones estén ocultas. Para ello podemos modificar el script de inicio de sesión /opt/opengnsys/client/scripts/bootOs incluyendo el siguiente código:
case "$OSTYPE" in
Windows)
# INICIO CAMBIO #############################################
echo "[30] Mostrar y activar particion de Windows $PART."
[ $(ogGetPartitionType $1 $2) == "HNTFS" ] && ogUnhidePartition $1 $2
# Mostrar la partición NTFS del sistema y ocultamos las demas.
for (( i=1; i<=$(ogGetPartitionsNumber $1); i++ )); do
if [ $i == $2 ]; then
[ $(ogGetPartitionType $1 $i) == "HNTFS" ] && ogUnhidePartition $1 $2
#ogSetPartitionActive $1 $2
else
[ "$(ogGetPartitionType $1 $i)" == NTFS ] && ogHidePartition $1 $i
fi
done
# FIN CAMBIO #############################################
...
Este código también ocultaría una partición NTFS que sólo contuviera de datos. En este caso, en vez de detectar el tipo de partición, habría que ver si está instalado el sistema operativo y tardaríamos más tiempo.
Cuando se realiza un particionado sin modificar la partición de windows ni ninguna de las anteriores no se puede iniciar la sesión. Los datos están bien y podemos verlos si listamos el contenido de la partición, pero al iniciar la sesión me da un mensaje de error diciendo que no reconoce el dispositivo de arranque.
Basta configurar de nuevo el sistema operativo, desde línea de comandos en el cliente o desde la consola con "ejecutar script" hay que ejecutar:
configureOs num_disk num_part
Si los sistemas de ficheros de alguna partición del disco está muy deteriorado el cliente de opengnsys en modo usuario no arranca, hemos de pasarlo a modo administración y restaurar la partición. Suele ocurrir cuando una restauración se corta a mitad por algún motivo.
Esto se debe que el primer paso para arrancar el cliente en modo usuario busca dentro de las particiones por si existe una marca para iniciar windows, en algunos casos cuando la partición está corrupta se queda bloqueado. El cliente en modo administración nos permitirá arrancar en este caso pero no podremos iniciar sesión en windows.
En caso de que el disco duro del cliente esté dañado, el proceso de inicio se relentiza y la pantalla del equipo muestra un mensaje de este tipo durante la carga de datos:
/opt/opengnsys/interfaceAdm/getConfiguration: line 1: 727 killed
timeout -k -5s -s KILL -3s $(which parted) "$@"
Este mensaje puede mostrarse varias veces antes de cargar el Browser, el cual solo deberá mostrar la opción de apagado si se usa el menú por defecto.
La solución a este problema es sustituir el disco duro del equipo.
Al restaurar una imagen la velocidad de transferencia va bajando de velocidad y no llega a completarse. El equipo se queda totalmente bloqueado.
Se soluciona desactivando IPv6. En el caso de ubuntu incluimos en /etc/sysctl.conf la línea:
net.ipv6.conf.all.disable_ipv6=1
Reiniciamos el servidor.
Para comprobar que ipv6 está desactivado:
lsmod | grep ipv6
ip a | grep inet6
Para la versión 1.0.4a y anteriores.
Depende de la configuración de la red y los equipos de comunicaciones que se utilicen pueden surgir problemas con la transferencia multicast.
En nuestro caso la CPU de las equipos de comunicación de pone al 100%. Para evitarlo basta poner el TTL (time of Life) mayor que 1, se recomienda ponerlo a 16, que será el valor por defecto que se incluya en la versión 1.0.5.
Ficheros que hay que modificar el OpenGnSys:
/opt/opengnsys/client/lib/engine/bin/Protocol.lib
[...]
SYNTAXSERVER="udp-sender $MBUFFER --nokbd --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS
--fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME --autostart $MAXTIME
--log /tmp/mcast.log"/
[...]
/opt/opengnsys/bin/sendFileMcast
[...]
$OGBIN/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD
--mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS
--max-wait $MAXTIME --file "$FICHIMG"/
[...]
Al crear la imagen nos da el error:
Mounting volume... Windows is hibernated, refused to mount.
A veces aunque la configuración de energía de Windows 10 no permita el inicio rápido nos sigue saliendo esté error. Podemos solucionarlo desde Windows entrando en una consola y utilizando el comando:
powercfg -h off
En caso de que tengáis equipos restaurados y simplemente queráis deshabilitar el servicio del agente (sin instalar una nuevo), podéis usar estos script desde la consola con "ejecutar script" o desde línea de comando:
Windows.
Propuesto por francesc en el foro.
Lo que hace es simplemente poner a 4 (deshabilitado) el estado del servicio "Cliente !OpenGnSys".
chntpw /mnt/sda1/Windows/System32/config/SYSTEM << EOT &> /dev/null
cd ControlSet001\services\Cliente Opengnsys
ed Start
4
q
y
EOT
Linux
Comentamos el inicio del servicio en /etc/rc.local
cd /mnt/sda6/etc
sed s/'\/usr\/sbin\/ogAdmLnxClient'/'\#\/usr\/sbin\/ogAdmLnxClient'/g rc.local
Si queremos que no se vuelva a instalar tras las restauración de los clientes en /opt/opengnsys/client/scripts/configureOs comentamos las líneas:
Windows)
....
#ogInstallMiniSetup $1 $2 postconf.cmd
#ogInstallWindowsClient $1 $2 postconf.cmd
;;
Linux)
...
#ogInstallLinuxClient $1 $2
Windows permite configurar la acción que deben realizar los servicios en caso de error. En vez de hacerlo a mano, desde opengnsys podemos cambiar la clave del registro correspondiente para que en caso de error se reinicie.
El código es el siguiente.
PART=$(ogMount $1 $2)
drbl-chntpw $PART/Windows/System32/config/SYSTEM << EOT
cd \ControlSet001\services\Cliente Opengnsys
ed FailureActions
44
:00000 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00
:00010 14 00 00 00 01 00 00 00 60 EA 00 00 01 00 00 00
:00020 60 EA 00 00 01 00 00 00 00 00 00 00
s
q
y
EOT
Habría que crear un script y darle como parámetros el número de disco y el número de partición
En Windows puede variar el nombre de los archivos y las ramas del registro respecto a las mayúsculas y minúsculas, esto provocaría que fallará. En este caso hay que comprobar si el directorio "/Windows/System32/config/SYSTEM" y la rama del registro "SYSTEM \ControlSet001\services\Cliente Opengnsys" están escritas correctamente.
Para el gestor de arranque remoto de los equipos por PXE utilizamos grub2dos. Se utiliza la última versión pero por compatibilidad con hardware más antiguo también está disponible una versión anterior: grldr-0.4.4.
El archivo grldr-0.4.4 no permite usar variables. Esto afecta al uso de varios ogLives ya que las plantilla PXE utilizan una variable para la información del directorio que contiene el ogLive.
Ejemplo de archivo de configuración PXE de un equipo:
##NO-TOCAR-ESTA-LINEA ogLiveAdmin
default saved
timeout 1
hiddenmenu
fallback 1 2 3
set ISODIR=ogLive-xenial-4.8.0-amd64-r5331
title OpenGnsys-NET
kernel (pd)/%ISODIR%/ogvmlinuz ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogupdateinitrd=true ogtmpfs=15 oglivedir=%ISODIR% LANG=es_ES ip=192.168.2.11:192.168.2.10:192.168.2.1:255.255.255.0:ogClient01:eth0:none group=Sala_Virtual ogrepo=192.168.2.10 oglive=192.168.2.10 oglog=192.168.2.10 ogshare=192.168.2.10 vga=791 ogunit=cdc
initrd (pd)/%ISODIR%/oginitrd.img
boot
title OpenGnsys-NET default
kernel (pd)/ogLive/ogvmlinuz ro boot=oginit irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogupdateinitrd=true #ogtmpfs=15 oglivedir=ogLive LANG=es_ES ip=192.168.2.11:192.168.2.10:192.168.2.1:255.255.255.0:ogClient01:eth0:none group=Sala_Virtual #ogrepo=192.168.2.10 oglive=192.168.2.10 oglog=192.168.2.10 ogshare=192.168.2.10 vga=791 ogunit=cdc
initrd (pd)/ogLive/oginitrd.img
boot
Si se utiliza el grldr-0.4.4 el cliente sólo podrá usar la última línea, que corresponde al ogLive por defecto y no contiene variables.
Para quién tenga equipos antiguos que necesiten usar ese grldr y quiera utilizar varios ogLive tiene varias opciones:
Los archivos de configuración PXE de cada equipo se crean partiendo de una plantilla y añadiendoles información propia del equipo alojada en la base de datos. Para cada ogLive que queramos utilizar necesitaremos una plantilla que contenga el directorio del ogLive.
Para crear la plantilla nos vamos a la zona de administración de la consola a la pestaña de !NetBootAvanzado y pulsamos el botón nuevo.
Nos aparece un formulario pridiendo el nombre d la plantilla y el código de la misma. Podemos partir de la plantilla de modo usuario (pxe) y modificarla sustituyendo la variable por el directorio del ogLive deseado. Por ejemplo mostramos una plantilla para el ogLive ogLive-xenial-4.8.0-amd64-r5331:
Para asignar esta plantilla al cliente OpenGnsys en la Web nos vamos a la unidad Organizativa y en NetBoot Avanzado aparece la nuava columna.
El código completo de l a plantilla sería el siguiente:
##NO-TOCAR-ESTA-LINEA OgLive-xenial
default saved
timeout 1
hiddenmenu
fallback 1 2 3 4
title firsboot
find --set-root --ignore-floppies --ignore-cd /ogboot.me
cmp /ogboot.me /ogboot.firstboot || ls FALLBACK
write /ogboot.firstboot iniciado
chainloader +1
boot
title secondboot
find --set-root --ignore-floppies --ignore-cd /ogboot.me
cmp /ogboot.me /ogboot.secondboot || ls FALLBACK
write /ogboot.secondboot iniciado
chainloader +1
boot
title OpenGnsys-CACHE
find --set-root --ignore-floppies --ignore-cd /boot/ogLive-xenial-4.8.0-amd64-r5331/ogvmlinuz
kernel /boot/ogLive-xenial-4.8.0-amd64-r5331/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogupdateinitrd=true ogtmpfs=15 oglivedir=ogLive-xenial-4.8.0-amd64-r5331 INFOHOST
initrd /boot/ogLive-xenial-4.8.0-amd64-r5331/oginitrd.img
boot
title OpenGnsys-NET
kernel (pd)/ogLive-xenial-4.8.0-amd64-r5331/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogtmpfs=15 oglivedir=ogLive-xenial-4.8.0-amd64-r5331 INFOHOST
initrd (pd)/ogLive-xenial-4.8.0-amd64-r5331/oginitrd.img
boot
Al intalar OpenGnsys viene un ejemplo de configuración dhcp con un grupo de ordenadores, pensado para equipos mac. Podemos utilizar este grupo para los equipos que utilizen el grldr-0.4.4. En nuestro archivo /etc/dhcp/dhcpd.conf tendremos:
ddns-update-style none;
option domain-name "example.org";
log-facility local7;
not-authoritative;
subnet NETIP netmask NETMASK {
option domain-name-servers DNSIP;
option routers ROUTERIP;
option broadcast-address NETBROAD;
default-lease-time 600;
max-lease-time 7200;
next-server SERVERIP;
filename "grldr";
use-host-decl-names on;
# Ejemplo para PC.
# host HOSTNAME1 {
# hardware ethernet HOSTMAC1;
# fixed-address HOSTIP1;
# }
# Ejemplo para Old Host.
group {
option tftp-server-name="SERVERIP";
option bootfile-name "grldr-0.4.4";
# host OLDHOST1 {
# hardware ethernet OLDHOSTMAC1;
# fixed-address OLDHOSTIP1;
# }
}
}