Unable to use iPXE. The http://localhost/Altiris/iPXE/GetPxeScript.aspx page is not working.

book

Article ID: 200658

calendar_today

Updated On:

Products

Deployment Solution

Issue/Introduction

When a client machine is imaged, the customer gets the following when it boots to iPXE:

When we check the http://localhost:4433/Altiris/iPXE/GetPxeScript.aspx page on their Site Servers (where port 4433 is a custom port used by the customer, but this issue could occur with port 80 and 443 or any other port specified), we get:

"Failed to make request to GetPxeBootInfo.aspx. See the following exception data: One or more errors occurred."

 

The Application event logs show an exception while trying to access the GetPxeScript.aspx page :

Event code: 3006 
Event message: A parser error has occurred. 
Event time: 9/29/2020 5:00:33 PM 
Event time (UTC): 9/29/2020 9:00:33 PM 
Event ID: fe416a31e975482397b81091abe6873f 
Event sequence: 4 
Event occurrence: 1 
Event detail code: 0 
 
Application information: 
    Application domain: /LM/W3SVC/4433/ROOT-1-132458868330296390 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: D:\Program Files\Altiris\Altiris Agent\Agents\Deployment\SBS\ 
    Machine name: SiteServer-01 
 
Process information: 
    Process ID: 43032 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 
 
Exception information: 
    Exception type: HttpParseException 
    Exception message: Could not load type 'Altiris.Deployment.Web.Services.GetPxeScript'.
   at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding)
   at System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath)
   at System.Web.UI.TemplateParser.ParseInternal()
   at System.Web.UI.TemplateParser.Parse()
   at System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType()
   at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider)
   at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()
   at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
   at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
   at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
   at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
   at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Could not load type 'Altiris.Deployment.Web.Services.GetPxeScript'.
   at System.Web.UI.TemplateParser.ProcessException(Exception ex)
   at System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding)
   at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding)

Could not load type 'Altiris.Deployment.Web.Services.GetPxeScript'.
   at System.Web.UI.TemplateParser.GetType(String typeName, Boolean ignoreCase, Boolean throwOnError)
   at System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName, String src, Assembly assembly)
   at System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData)



Request information: 
Request URL: http://localhost:4433/iPXE/GetPxeScript.aspx 
    Request path: /iPXE/GetPxeScript.aspx 
    User host address: 127.0.0.1 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: IIS APPPOOL\DefaultAppPool 

Thread information: 
    Thread ID: 6 
    Thread account name: IIS APPPOOL\DefaultAppPool 
    Is impersonating: False 
    Stack trace:    at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding)
   at System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath)
   at System.Web.UI.TemplateParser.ParseInternal()
   at System.Web.UI.TemplateParser.Parse()
   at System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType()
   at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider)
   at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()
   at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
   at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
   at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
   at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
   at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Cause

As we reviewed this code for "GetPxeScript", it tries to route incoming call to NS server. What it does:
1. It opens agent registry: HKEY_LOCAL_MACHINE\SOFTWARE\Altiris\Altiris Agent\Servers
2. Takes first server web entry from it HKEY_LOCAL_MACHINE\SOFTWARE\Altiris\Altiris Agent\Servers\<sever name>\Web
4. Adds /Deployment/Services/GetPXEBootInfo.aspx
5. Routes call to this server web.

We were able to reach HTTPS://SMPServer.domain.com/Altiris/Deployment/Services/GetPXEBootInfo.aspx

After further troubleshooting, it was found that the SMP Server had TLS 1.0 disabled (and TLS 1.1 and 1.2 enabled) but the Site Servers had enabled TLS 1.0, 1.1, 1.2. 

Environment

ITMS 8.5 RU2-RU4

Resolution

This issue has been reported to Symantec Development team. This issue will be addressed in our ITMS 8.6 release.

A pointfix for 8.5 RU4 customers is available under KB 198337 "CUMULATIVE POST ITMS 8.5 RU4 POINT FIXES"

 

In this particular case, after TLS 1.0 was disabled on the SMP server, the issue started to happen. It is important to keep the same TLS versions enabled thru out  the environment.

In order to workaround this issue:

1. Enable TLS 1.0 on the SMP Server (making sure the proper TLS 1.0 ciphers are also active).

2. Or, disable TLS 1.0 on all Site Servers.

Additional Information

KB 173966 "iPXE boot process stops at GetPxeScript call"

Attachments