opengnsys-1.0.6 (#12) - PostConfiguración? – meter equipos de un aula en dominio (#293) - Message List
Hola a todos/as, dentro de mi universidad estamos iniciando las pruebas para poder implantar Opengnsys(v.1.0.6) como herramienta de clonado en las aulas.
Todavía estamos trabajando en un entorno de pruebas y ahora estamos 'peleándonos' con la posibilidad de que, una vez hemos clonado un aula, se puedan meter las máquinas en dominio de manera automática.
¿Sabéis alguna forma de conseguirlo?
Un saludo y gracias!
Rubén
-
Message #657
Hola Rubén. Nosotros en la UPV usamos bastante la integración en dominio después del clonado. Ten en cuenta que lo fundamental es hacer el cambio de SID de la máquina una vez se haya restaurado la imagen y antes de integrarla en el dominio. La opción de Microsoft es realizar un sysprep antes de crear la imagen, pero eso deja el sistema en un estado de "preinstalación" donde vuelve a detectar todo el hardware y regenera cuentas, etc, etc. lo que hace que la restauración pueda tardar hasta el doble de lo normal. Además, muchas veces falla el arranque tras el sysprep y nos deja la imagen literalmente inservible. Por aquí hemos encontrado un programa de un tercero con una licencia bastante asequible que copiamos en el proceso de postconfiguración para que se ejecute en el primer inicio de sesión del sistema. El ejecutable es SIDCHG o SIDCHG64 dependiendo de la arquitectura del Windows y lo puedes descargar para probar en su web http://www.stratesave.com/ junto con las instrucciones de uso. Yo he añadido a la librería de PostConf?.lib la siguiente función para lanzar el programa. Evidentemente los ejecutables deben estar en la ruta /opt/opengnsys/client/lib/ogclient para que la función los copie al sistema de destino. La función distingue si el sistema es de 32 o 64 bit para la copia y configuración y en el parámetro donde pone key=xxxxxxxx hay que meter la licencia del programa (ojo a los caracteres de escape que la licencia los necesitará). Se puede probar con la clave de demo que cambian cada mes.
#/** # ogInstallSidChange int_ndisk int_npartition int_filesys #@brief Instala la aplicación de cambio de SID en operativos Windows. #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición #@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs #@return (nada) #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado. #@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos. #@exception OG_ERR_LOCKED Sistema de archivos bloqueado. #@version 1.0.6 - Primera adaptación para OpenGnSys. #@author Carmelo Cabezuelo, Universidad Politécnica de Valencia #@date 2016-02-2 #*/ ## function ogInstallSidChange () { # Variables locales. local WINVER MNTDIR SIDCHGFILE i SBINDIR ETCDIR RCLOCAL # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \ return fi # Error si no se reciben 3 parámetros. [ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? # Obtener sistema de archvios. MNTDIR=$(ogMount $1 $2) || return $? # Obtener versión de Windows WINVER="$(ogGetOsVersion $1 $2)" # Comprobar si existe el archivo y los directorios destino. if [[ $WINVER =~ "64 bits" ]]; then ogEcho log session "Configurar cambio de SID para Windows 64 bits" SIDCHGFILE=$OGLIB/ogclient/sidchg64.exe else ogEcho log session "Configurar cambio de SID para Windows 32 bits" SIDCHGFILE=$OGLIB/ogclient/sidchg.exe fi [ -f $SIDCHGFILE ] || ogRaiseError $OG_ERR_FOUND "$SIDCHGFILE" || return $? for i in winnt windows; do DIR=$(ogGetPath $MNTDIR/$i) [ -n "$DIR" ] && WINDIR=$DIR done [ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $? # Copiar archivo e incluir en el fichero de configuracion dado que instale el cliente en el arranque. cp -a $SIDCHGFILE "$WINDIR" if [[ $WINVER =~ "64 bits" ]]; then ogAddCmd $1 $2 $3 "sidchg64 /key=XXXXXXXXXXXXX /COMPNAME:$(ogGetHostname)-$2 /F /R" else ogAddCmd $1 $2 $3 "sidchg /key=XXXXXXXXXXXXX /COMPNAME:$(ogGetHostname)-$2 /F /R" fi }
La forma de invocar el cambio de SID es en el configureOS en la sección de Windows mediante:
ogInstallMiniSetup $1 $2 postconf.cmd $ADMIN $PASSADMIN 0 ogInstallWindowsClient $1 $2 postconf.cmd ogEcho log session "Prepara el cambio de SID de Windows"
Hay que pasar nombre y pass de usuario local administrador ya que el cambio de SID necesita de una sesión abierta.
Por otro lado, la función de incluir en el dominio la modificamos ya que el VBS nos daba problemas en nuestro AD y muchas veces no se llegaba a integrar la máquina. La solución fue usar PowerShell? en su lugar ya que las máquinas a clonar ya son todas Windows 7 y con el .Net bastante actualizado. La función la usamos así:
#/** # ogDomainScript int_ndisk int_npartition str_filename str_domain str_user str_password #@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición #@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs #@param str_domain dominio donde se quiere conectar #@param str_user usuario con privilegios para unir al dominio #@param str_password password del usuario con privilegios #@return #@exception OG_ERR_FORMAT Formato incorrecto. #@version 1.0.2 - Nueva función #@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona #@date 2011-06-29 #@version 1.0.4 - Cambios en los parametros de entrada de la funcion #@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona #@date 2012-04-16 #@version 1.0.6 - Se cambia el VisualBasic Script por PowerShell #@author Carmelo Cabezuelo Aguilar - Universidad Politécnica de Valencia #@date 2016-03-12 #*/ ## function ogDomainScript () { local CMDDIR # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" \ "$FUNCNAME int_ndisk int_npartition str_filename str_domain str_user str_password" \ "$FUNCNAME 1 1 filename.cmd domain user password_user" return fi # Error si no se reciben 6 parámetros. [ $# == 6 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) # Punto de montaje MOUNTPOINT="$(ogMount "$1" "$2")" || return $? # Comprobar que existe el directorio de comandos. CMDDIR=$(ogGetPath "$MOUNTPOINT/windows/system32") [ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $? # Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio. ogAddCmd $1 $2 "$3" "powershell.exe -ExecutionPolicy Unrestricted -Command \"C:\Windows\System32\joindomain.ps1\"" # Eliminamos el script porque tiene el usuario de agregar al dominio en claro ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.ps1" # Metemos unas claves de registro para que el dominio salga seleccionado por defecto ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$4\" /f" ogAddCmd $1 $2 "$3" "PAUSE" # Creamos el archivo joindomain.ps1 que nos introduce la maquina en el dominio cat > "$CMDDIR/joindomain.ps1" << EOF \$domain = "$4" \$password = "$6" | ConvertTo-SecureString -asPlainText -Force \$username = "\$domain\\$5" \$credential = New-Object System.Management.Automation.PSCredential(\$username,\$password) Add-Computer -DomainName \$domain -Credential \$credential EOF }
Y la invocamos después del cambio de SID de la siguiente forma:
ogInstallMiniSetup ndisk npart postconf.cmd ADMIN PASSADMIN 0 ogDomainScript ndisk npart postconf.cmd DOMAIN USU PASS
Al igual que antes necesitamos iniciar sesión de usuario local y además a la función para agregar al dominio le pasamos los parámetros de nombre de dominio y usuario y password con permisos para agregar (en concreto en nuestro campus tenemos usuarios en los dominios cuya única potestad es esa)
Espero que te sirva de ayuda. Un saludo.
Carmelo. Universidad Politécnica de Valencia.
ccabezuMar 7, 2017, 10:02:49 AM (8 years ago) -
Message #655
He encontrado una entrada en el foro que ha resuelto mi duda. Gracias!
RubenFeb 16, 2017, 2:53:21 PM (8 years ago)