opengnsys-1.0.6 (#12) - PostConfiguración? – meter equipos de un aula en dominio (#293) - Message List

PostConfiguración? – meter equipos de un aula en dominio
 unsolved

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 #655

    He encontrado una entrada en el foro que ha resuelto mi duda. Gracias!

    http://www.opengnsys.es/discussion/message/576#576

    • 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.

Attachments

No attachments created.