Solucionando problemas de instalación del servicio IIS

Por Ivanov Cepeda

Los problemas en la instalación o desinstalación de los servicios Web en los sistemas operativos Windows son poco comunes y, en muchos casos, no es trivial llegar a la causa raíz.

La mayoría de problemas se presentan cuando se requiere instalar IIS en un servidor cuyo sistema operativo fue instalado hace mucho tiempo y por alguna razón se desea instalar los servicios de IIS.

Si usted tiene la posibilidad de instalar nuevamente el sistema operativo mi sugerencia es que lo haga, cuando falla la instalación de un servicio del sistema operativo, el servidor ha sido alterado de tal forma que sus permisos no son los requeridos, o algunos componentes se encuentran alterados o faltan, en la mayoría de los casos reinstalar será la opción más rápida y menos costosa en términos de esfuerzo y tiempo y le garantizara un ambiente libre de problemas, pero reconozco que no siempre es una opción viable, o si se trata de un caso donde es un problema que sucede con frecuencia quizá está interesado en encontrar la causa raíz y espero que este artículo lo ayude en ese propósito.

Para entender que impide que un proceso de instalación sea exitoso examinemos primero algunas de las actividades se realizan en el Sistema Operativo al realizar la instalación:

  • Creación de Directorios y copia archivos de sistema.
  • Creación de llaves de registro
  • Configuración de Permisos
  • Creación y registro de Contadores de Rendimiento
  • Configuración inicial del servicio
  • Creación de cuentas de usuario para la administración y uso de los servicios
  • Configuración de otros servicios existentes en el OS

Cuando falla alguna de estas actividades nuestro proceso de instalación seguramente no será exitoso, y por más que se han creado tecnologías para hacer estos procesos de instalación tan transaccionales como sea posible, es decir si falla algo todo debería devolverse al estado original, no siempre se logra este cometido, aunque las mejoras en las tecnologías de instalación en servidores Windows 2008 son indudablemente notables en este sentido.

La metodología de solución a problemas que utilizamos en el equipo de soporte de Latam fue creada por algunos de nuestros ingenieros y está basada en el método científico, donde a partir de un problema se genera una hipótesis, posteriormente se obtienen datos para corroborar o refutar la hipótesis, al analizar los datos podrá corroborar si la hipótesis era correcta y se podrá generar un plan de acción para resolver el problema, de lo contrario descartamos la hipótesis reduciendo las posibles causas, y creamos una nueva para empezar el ciclo nuevamente, usualmente en este punto tenemos más información que nos puede llevar a una mejor hipótesis.

Siguiendo esta metodología lo primero que hacemos es observar el o los mensajes de error que ocurren durante el proceso de instalación para crear nuestra hipótesis ya que sabemos que nuestro problema es que por alguna razón no podemos instalar o desinstalar el servicio, pero para no perder tiempo descartando opciones, que es la metodología más común de troubleshooting (prueba y error), seguiremos nuestra métodologia para generar una hipótesis y obtener la información que necesitamos para confirmar o rechazar la hipótesis.

Revisando el error

Para poder hacer una buena descripción del problema, debemos obtener la mayor cantidad de detalles que lo acompañan y nada mejor que los mensajes de error que se generan al fallar la instalación. Para encontrar los mensajes de error que ocurren en el proceso de instalación, basta con revisar lo siguiente:

  1. Mensaje de error que proviene directamente del instalador en caso de no ser una instalación desatendida y si se genera algún tipo de error.
  2. Mensajes de error grabados en la Log de Eventos de Windows, principalmente los logs de Aplicación y Sistema, en el caso del sistema operativo Windows 2008 también el log de Setup.
  3. Log de instalación de IIS, este log se encuentra en el directorio %SystemRoot% y tiene como nombre IIS6.log para Windows Server 2003 o IIS7.log para Windows Server 2008.
  4. Para servidores Windows 2003 el log setupapi.log que se encuentra en %SystemRoot% tambien puede proveer información de valor.
  5. Para Servidores Windows 2008 podemos revisar tambien 2 Logs adicionales el ServiceManager.Log que se encuentra en %SystemRoot%\Logs Y el log CBS.Log de la nueva tecnología de instalación de módulos, este se encuentra en %SystemRoot%\Logs\CBS

NOTA: Para encontrar los errores en los Logs mencionados en los puntos 3 y 4, ubique primero en el Log la fecha y hora en la que intento realizar la instalación y posteriormente busque la palabra “Fail” o “Error”.

Para ilustrar este proceso voy a reproducir un problema con el que me encontré hace un tiempo trabajando con un cliente premier, en ese caso en particular, el cliente intento instalar IIS 6.0 en uno de sus servidores Windows 2003, la instalación no reporto ningún error, pero los servicios de IIS 6.0 no iniciaban, revisamos los servicios instalados y notamos que el World Wide Web Publishing Service no estaba registrado, como recién se había instalado el servidor era fácil crear una hipótesis de que el problema provenía de la instalación así que empezamos a buscar errores en los logs de instalación, el log iis6.Log se veía de la siguiente forma:

[5/2/2011 19:0:6] OC_COMPLETE_INSTALLATION:iis_www:...ProcessEntry:100=6...

[5/2/2011 19:0:6] OC_COMPLETE_INSTALLATION:iis_www:Calling InstallInfSection:Create_Service_W3SVC6:Start.

[5/2/2011 19:0:6] OC_COMPLETE_INSTALLATION:iis_www:InstallInfSection_NoFiles:(Create_Service_W3SVC6)Start.

[5/2/2011 19:0:7] OC_COMPLETE_INSTALLATION:iis_www:SetupInstallServicesFromInfSection failed.Ret=5.

[5/2/2011 19:0:7] OC_COMPLETE_INSTALLATION:iis_www:InstallInfSection_NoFiles.[Create_Service_W3SVC6].End.Ret=1.

[5/2/2011 19:0:7] OC_COMPLETE_INSTALLATION:iis_www:Calling InstallInfSection:Create_Service_W3SVC6:End.

...

[5/2/2011 19:0:59] OC_CLEANUP:Executing PostInstall for the WWW component...

[5/2/2011 19:0:59] OC_CLEANUP:Calling RunMofCompOnIISFiles

[5/2/2011 19:0:59] OC_CLEANUP:InetStartService():ServiceName=W3SVC unable to start WARNING. Err=0x424.

[5/2/2011 19:0:59] OC_CLEANUP :!FAIL!

[5/2/2011 19:0:59] OC_CLEANUP:PostInstall of Component 'iis_www' FAILED

[5/2/2011 19:0:59] OC_CLEANUP:Executing PostInstall for the FTP component...

[5/2/2011 19:1:0] OC_CLEANUP:InetStartService():ServiceName=MSFTPSVC success.

[5/2/2011 19:1:0] OC_CLEANUP:Action of [iis_inetmgr] = AT_INSTALL_FRESH. Original=0, Current=1.

[5/2/2011 19:1:0] OC_CLEANUP:ProcessSection.[register_iis_inetmgr_1].Start.

Del log de IIS podemos ver que un paso de la instalación falló retornando el error 5, sin embargo el instalador continuó y posteriormente cuando intenta subir el servicio W3SVC recibe el error 0x424, sin más detalles es imposible saber que paso pero nuestra hipótesis de que algo fallo en la instalación cobra fuerza, ahora bien, para saber que significan los códigos de error podríamos utilizar la herramienta err.exe y obtener una mejor descripción del error:

C:\Err>Err 5

# for hex 0x5 / decimal 5 :

BTH_ERROR_AUTHENTICATION_FAILURE bthdef.h

... <Lineas suprimidas para ahorrar espacio> ...

ERROR_ACCESS_DENIED winerror.h

# Access is denied.

LDAP_COMPARE_FALSE winldap.h

SNMP_ERROR_GENERR winsnmp.h

# 44 matches found for "5"

C:\Err>err 424

# for hex 0x424 / decimal 1060 :

RMON_RESTYPE_BAD_TABLE clusvmsg.h

SQL_1060_severity_15 sql_err

# The number of rows in the TOP clause must be an integer.

ERROR_SERVICE_DOES_NOT_EXIST winerror.h

# The specified service does not exist as an installed

# service.

# 3 matches found for "424"

Ahora sabemos que hubo un problema de acceso negado, continuamos revisando los logs de instalación y ahora vemos el log SetupAPI.log:

[2011/05/02 19:35:59 7880.7]

#-198 Command line processed: "C:\WINDOWS\system32\sysocmgr.exe" /y /i:C:\WINDOWS\system32\sysoc.inf

#-035 Processing service Add/Delete section [Create_Service_W3SVC6].

#E008 Setting registry value HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost\iissvcs

#E033 Error 5: Access is denied.

#E065 Parsing AddReg section [Create_Service_W3SVC6_values] in "C:\WINDOWS\INF\iis.inf" failed. Error 5: Access is denied.

#E033 Error 5: Access is denied.

#E275 Error while installing services. Error 5: Access is denied.

Ahora podemos ver que nuestro problema obedece a que tenemos un Acceso Denegado en la llave HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost\ pero desconocemos el usuario que debería tener permisos en esta llave, sin embargo nuestra hipótesis ya tiene forma.

En este ejemplo no utilizamos el Application Event Log, ni el system event log, sin embargo estos logs contienen información adicional que podrían proporcionar más evidencias de que algo está mal con el servicio W3SVC, en nuestro ejemplo particular los errores registrados no conducen fácilmente a ver que hubo un problema con la instalación.

Una vez encontrado el o los mensajes de error, tendremos en el mejor de los casos una descripción suficiente de lo que causa el problema, un código de error en la mayoría de los casos, y podremos generar nuestras primeras hipótesis a partir de este mensaje.

Si el proceso de instalación tiene un Hang y no arroja un mensaje de error, sino simplemente se queda atorado en algún paso le recomiendo utilizar una herramienta como Process Monitor para revisar en que paso se queda atorado y en el peor de los casos tomar un dump para revisar la causa del Hang. Para ello lo más recomendable es que pida asistencia al servicio de soporte de Microsoft.

Generando la Hipótesis

La primera parte de nuestra metodología es la definición del problema, después de revisar y entender mejor el error, deberíamos tener suficiente información para poder generar una buena definición y deberíamos saber lo que tenemos que conseguir para superar el problema, para generar las hipótesis de las posibles causas podemos revisar el mensaje de error obtenido anteriormente y asociarlo con alguna de las tareas que hace el instalador, de esta manera podríamos generar hipótesis como: No se puede instalar el servicio de IIS satisfactoriamente debido a que:

No se puede copiar un archivo, no se puede acceder a una llave del registro, no se puede crear una llave en el registro, no se puede ejecutar un comando, no se puede ejecutar una aplicación iniciada por el instalador, falla un servicio iniciado por el instalador, no se pueden crear los contadores de performance, etcétera.

En el problema que utilizamos como ejemplo podríamos definir como hipótesis: el usuario que realiza la configuración de los servicios no tiene permisos para escribir en la siguiente llave del registro HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost\.

Tenga en cuenta que cualquiera que sea la falla, en algunos casos no es una razón obvia.

Si aun revisando el mensaje de error o los datos que ha podido capturar con respecto a las evidencias que deja el proceso de instalación no le ayudan a crear una buena hipótesis o tal vez el mensaje de error no tiene mucho sentido, no se preocupe ni se desanime, hay que reconocer que en algunas ocasiones los mensajes de error son demasiado genéricos, o proveerán una descripción que quizá no es muy detallada, así que si no se puede generar solo una hipótesis, trate de crear algunas hipótesis, no se detenga, y continúe con el siguiente paso para obtener información que le ayude a corroborar o desechar cada una de ellas.

Buscando las Evidencias

El siguiente paso consiste en conseguir datos que nos ayuden a corroborar nuestra hipótesis. La primera fuente de información debería ser la base de conocimiento como el KB de Microsoft, si cuenta con una suscripción de Technet esta le podrá brindar no solo artículos sino casos solucionados que coinciden con la descripción, si no cuenta con una suscripción y no hay nada en el KB de Microsoft puede intentar consultar en internet y ver si alguien ha tenido el mismo problema y si hay alguna solución, este paso aunque obvio vale la pena mencionarlo porque muchas veces estamos tan concentrados en encontrar la causa nosotros mismos que perdemos tiempo valioso cuando hay personas que ya han resuelto el problema, además debo mencionarlo por otras 2 razones, la primera es porque la mayoría de las personas no revisa todos los logs generados por el instalador y tener el mensaje de error del log de instalación podrá ayudar bastante a encontrar la solución, la segunda razón es porque muchos de los problemas de instalación se deben a configuraciones inesperadas en el servidor como una librería que no está bien registrada, un cambio en los permisos de algún directorio o de llaves en el registro, falta de privilegios del usuario que realiza la instalación etc., y estos problemas en algunas ocasiones llevan a mensajes de errores y soluciones no triviales.

Si la búsqueda del error no rinde frutos podemos seguir indagando las causas con las siguientes herramientas:

Process Monitor

Si la hipótesis está relacionada con un acceso denegado, un problema con un archivo o directorio, un problema de permisos, un problema relacionado con el registro de Windows, esta herramienta será de bastante utilidad para obtener la causa raíz del problema.

En nuestro problema de ejemplo podemos utilizar procmon para capturar los datos mientras reproducimos el problema, esto generara un log de todas las actividades relacionadas con acceso a disco, al registro de windows y a la red, como la mayoría de actividades del instalador están relacionadas con este tipo de actividades Process monitor es una herramienta ideal para obtener más datos del problema.

Auditoria de Eventos de Windows

Muchos problemas se deben a la falta de permisos o privilegios para realizar actividades, el sistema operativo trae en la política de seguridad local plantillas que le permiten habilitar el registro de intentos fallidos de diferentes operaciones, como acceso a objetos, directorios, o la falta de privilegios para realizar acciones, usted puede utilizar la auditoria de eventos para ver información detallada del tipo de acceso que está intentando hacer el instalador y cuál es el permiso que requiere para funcionar o el privilegio que necesita para poder hacer la actividad que falla, para más información de cómo configurar la Auditoria de eventos de Windows puede ver https://technet.microsoft.com/en-us/library/cc776394(WS.10).aspx.

Analizando los Datos

Una vez colectados los datos que nos brindaran la evidencia para corroborar o refutar nuestra hipótesis necesitaremos analizarlos, cuando utilizamos procmon, la información que usualmente revisaremos, que Operación estaba intentando hacer el instalador y el resultado. También usualmente se puede revisar bajo que usuario se está ejecutando la tarea para ver que privilegios tiene ese usuario.

En nuestro caso de ejemplo podemos ver en la siguiente imagen que estábamos intentando crear una llave de registro ya que la operación era RegCreateKey, y aunque en la imagen no se ve se puede agregar la columna Usuario y corroborar que el usuario que está intentando hacer esta actividad es el usuario que inicio sesión en el servidor y que tiene privilegios de administrador para poder hacer la instalación.

image

Podríamos concluir que en esta llave de registro necesitamos privilegios de lectura y escritura para el grupo de Administradores del equipo.

En este punto deberíamos haber podido identificar la causa del problema, y podríamos proporcionar una solución, sin embargo muchas veces surge la pregunta de cómo llegamos a este estado? Que causo que el sistema no tenga este permiso o este grupo no tenga X o Y privilegio? Desafortunadamente llegar a la causa raíz que produjo el problema es un proceso mucho más complicado y no hace parte de este artículo, en muchos casos no es posible determinar que origino el problema, pero al menos sabemos por qué no funciona la instalación y podremos hacer los ajustes necesarios para que funcione.

Generando el Plan de Acción

Parece fácil poder sugerir, para nuestro problema de ejemplo, que agreguemos el permiso y problema solucionado, pero lo mejor siempre será verificar el impacto de las acciones que vamos a tomar, tener un plan B si nuestras acciones implican un riesgo y siempre estar seguros de lo que vamos a hacer.

Considere generar un Backup del sistema o de las configuraciones que va a cambiar antes de realizar un cambio.

Verifique que utiliza las herramientas adecuadas para realizar los cambios que necesita hacer.

Consulte y asegúrese de que está haciendo lo correcto, para el caso de problemas de instalación relacionados con problemas de permisos, privilegios o problemas en el registro de Windows, busque corroborar los cambios con un sistema operativo en donde no se produzca el problema.

En nuestro caso de ejemplo el plan de acción que se realizo fue el siguiente:

  1. Generar una copia de respaldo del sistema o verificar la existencia de una copia reciente que se pueda utilizar en caso de ser necesario.
  2. Desinstalar el servicio de IIS en el servidor
  3. Verificación de los permisos que requiere el sistema operativo en la llave del registro HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost
  4. Generación de una copia de seguridad de la llave a modificar
  5. Modificación de los permisos para que regresen a su estado normal
  6. Instalación de IIS y verificación de que no se presente el mismo problema.

Después de aplicar este plan de acción y restaurar los permisos la instalación se pudo realizar de forma exitosa, también tuvimos la fortuna de que el administrador del servidor recordó que se había implementado una política de dominio que había cambiado los permisos sobre esta llave en algunos servidores debido a un problema de seguridad y posteriormente no se había deshabilitado esta política en forma apropiada.

Entre algunos de los casos que he tenido la oportunidad de solucionar he encontrado problemas relacionados con llaves del registro que faltan en algunos componentes de OLE, librerías que han sido removidas y no se encuentran en el sistema y se requieren para la instalación, como MSXML, y falta de permisos en llaves del registro utilizadas en el proceso de instalación.