Configuring Source Download During Client Install

A question came up recently about why download errors were being seen during client install. I’ve seen a few questions around this so thought I would provide a bit of detail on how this works and options that will allow the administrator to choose how source download works during client installation.

As a part of the client install there are prerequisites that need to be in place, such as BITS, the Policy Platform and more.  Accordingly as a first step when ccmexec is initiated the install will attempt to locate these supplemental files.  This is done one of three ways. 

1. The client files are local and no additional information is supplied as to management points that should be used or an alternate source location. Essentially this means just running ccmsetup.exe with no command line parameters.
2. The client files are not local but the ‘/mp:’ management point switch is supplied.  This switch provides the location of a management point that can be leveraged for client file download.  In this case the client will attempt to ‘lookup’ the location of the files from the management point.  This requires the client files be available on a distribution point.
3. The client files are not local but are on a network share. In essence it is desired to not have the client ‘lookup’ the content location from the management points but to use the predefined location. This can be done with the ccmsetup ‘/source:’ switch.

There are lots of ccmsetup command line options to give granular control over the setup experience.  They are documentated here.

When the ‘/mp:’ switch is used there may on occasion be content lookup errors.  What is content lookup? As mentioned, content lookup is used to find the files needed for client install and is done against the management point. There are a few common reasons why the files might not be found and client install will fail.

1. The management point is not accessible.
2. There are no distribution points available to the requesting client that have content.
3. The version of the client files available to the requesting system are not truly a match.

There could be other reasons.  The best way to find out is to trace the request and the results.  One of my lab systems showed an error like this. Logs from that system will be used to show the process.  The logs show the problem from my lab but in practice the reason for a specific problem may be different. Regardless, the process for tracing the failure is the same. 

Note: For this tracing to be useful management points MUST be configured for verbose and debug logging. 

Tracing starts in the ccmsetup.log.  The snip here shows the client requesting the location of the supplemental files.  This is the typical exchange when everything works.

Sending message body '<ContentLocationRequest SchemaVersion="1.00"> <--Sending request with all client detail to management point
  <AssignedSite SiteCode="pr1"/>
  <ClientPackage/>
  <ClientLocationInfo LocationType="SMSPACKAGE" DistributeOnDemand="0" UseProtected="0" AllowCaching="0" BranchDPFlags="0" AllowHTTP="1" AllowSMB="0" AllowMulticast="0" UseInternetDP="0">
    <ADSite Name="Default-First-Site-Name"/>
    <Forest Name="tailspintoys.com"/>
    <Domain Name="tailspintoys.com"/>
    <IPAddresses>
<IPAddress SubnetAddress="192.168.2.0" Address="192.168.2.5"/>

<IPAddress SubnetAddress="192.168.0.0" Address="192.168.0.50"/>     </IPAddresses>
  </ClientLocationInfo>
</ContentLocationRequest>
Sending message header '<Msg SchemaVersion="1.1"><ID>{5B8BB130-75DF-4392-9BA2-15F09C59E0B1}</ID><SourceHost>WINDOWS8SEQ</SourceHost><TargetAddress>mp:[http]MP_LocationManager</TargetAddress><ReplyTo>direct:WINDOWS8SEQ:LS_ReplyLocations</ReplyTo><Priority>3</Priority><Timeout>600</Timeout>
<ReqVersion>5931</ReqVersion><TargetHost>192.168.0.11</TargetHost><TargetEndpoint>MP_LocationManager</TargetEndpoint><ReplyMode>Sync
</ReplyMode><Protocol>http</Protocol><SentTime>2014-11-02T22:07:52Z</SentTime><Body Type="ByteRange" Offset="0" Length="1270"/><Hooks><Hook3 Name="zlib-compress"/></Hooks><Payload Type="inline"/></Msg>'

MapNLMCostDataToCCMCost() returning Cost 0x1          
CCM_POST 'https://192.168.0.11/ccm_system/request'
Content boundary is '--aAbBcCdDv1234567890VxXyYzZ'  
Received header '<Msg SchemaVersion="1.1">
                <ID>{80D0A1B7-2AED-46FB-8464-06EE9AD5EE27}</ID>
                <SourceID>GUID:03B9494D-74C5-4379-B8C3-C9AD4138FB94</SourceID>
                <SourceHost>CM12PRISQL</SourceHost>
                <TargetAddress>direct:WINDOWS8SEQ:LS_ReplyLocations</TargetAddress>
                <ReplyTo>MP_LocationManager</ReplyTo>
                <CorrelationID>{00000000-0000-0000-0000-000000000000}</CorrelationID>
                <Priority>3</Priority>
                <Timeout>600</Timeout>
                <Capabilities><Property Name="SSL" Version="1"/></Capabilities><ReplyCapabilities><AllowRegistrationReset>direct:CM12PRISQL:ClientRegistration</AllowRegistrationReset></ReplyCapabilities>
<TargetHost>WINDOWS8SEQ</TargetHost><TargetEndpoint>LS_ReplyLocations</TargetEndpoint><ReplyMode>Sync</ReplyMode><Protocol>https</Protocol>
<SentTime>2014-11-02T22:07:52Z</SentTime><Body Type="ByteRange" Offset="0" Length="2462"/><Hooks><Hook3 Name="zlib-compress"/><Hook Name="authenticate"><Property Name="Signature">3082019206092A864886F70D010702A08201833082017F020101310B300906052B0E03021A0500300B06092A864886F70D0107013182015E3082015A02010130373023311330110603550403130A434D313250524953514C310C300A06035504031303534D53021032F3C190D6F78EA145A3337C4B7D7E29300906052B0E03021A0500300D06092A864886F70D01010105000482010094D5365FF437D1D8BB48113B275E561F7C03A8CED2482791AFECC92C3E44A284714DCAE3BF317622EADA60D1AF494F00843BFF82AFEB0F855435DDBB0E328BF4D9B608FF243729330F9496093B9F05A57FE3C6CCC8645635FE09D790CCD90925B56F58C457C307C0FC6BECE7ECAEE8017B83D4FAA5E60F8910BFE2BD994FAD19C452880A8F93F3966D4B8ABDA703B9097E28769318DBBC15E439BE4648EE39128D47D8621213D29B5689070CB188947217B1070B8B426C80194CB2BFE92695A719734A7D27080670D28781C41E38BDB2D74FE69B7AA2CBB7F2447409CB714E8CDD442E5535C3E9C67E52CA9BD474F2E2D35603B843FA91308D2BD911BA34E5A7</Property><Property Name="AuthSenderMachine">CM12PRISQL;cm12prisql.tailspintoys.com;</Property><Property Name="MPSiteCode">PR1</Property></Hook></Hooks><Payload Type="inline"/></Msg>'

Received reply body '<ContentLocationReply SchemaVersion="1.00"><ContentInfo <<<PackageFlags="16777216"><ContentHashValues/></ContentInfo><Sites><Site><MPSite SiteCode="PR1" MasterSiteCode="PR1" SiteLocality="LOCAL" IISPreferedPort="80" IISSSLPreferedPort="443"/><LocationRecords><LocationRecord><URL Name="https://cm12prisql.tailspintoys.com/SMS_DP_SMSPKG$/CAS00003" Signature="https://cm12prisql.tailspintoys.com/SMS_DP_SMSSIG$/CAS00003"/><ADSite Name="Default-First-Site-Name"/><IPSubnets><IPSubnet Address="192.168.0.0"/><IPSubnet Address=""/></IPSubnets><Metric Value=""/><Version>7958</Version><Capabilities SchemaVersion="1.0"><Property Name="SSLState" Value="0"/></Capabilities><ServerRemoteName>cm12prisql.tailspintoys.com</ServerRemoteName><DPType>SERVER</DPType><Windows Trust="1"/><Locality>LOCAL</Locality></LocationRecord></LocationRecords></Site></Sites><ClientPackage FullPackageID="CAS00003" FullPackageVersion="20" FullPackageHash="DB3D5D115FC93F6275817FB9791864D98D4AF6897339B9D4AB1C0DE456C240A8" MinimumClientVersion="5.00.7958.1000" RandomizeMaxDays="1" ProgramEnabled="true" LastModifiedTime="30386525;3525913600" SiteVersionMatch="true" SiteVersion="5.00.7958.1000" EnablePeerCache="true"/><RelatedContentIDs/></ContentLocationReply>'           
Found local location 'https://cm12prisql.tailspintoys.com/SMS_DP_SMSPKG$/CAS00003'  
Discovered 1 local DP locations. <-- Received a response from the lookup and we have one distribution point that has what is needed.

The other side of the conversation is what happens on the management point, documented in MP_Location log.  This is from the working client install.

SMS MP Location Manager started.
MP LM: Load(): MP Assigned Site Code is PR1
MP LM: Message ReplyTo : direct:WINDOWS8SEQ:LS_ReplyLocations <-- This is the client that asked for content locations.
MP LM: Message Timeout : 600 
MP LM: Message Body : <ContentLocationRequest SchemaVersion="1.00">
  <AssignedSite SiteCode="pr1"/>
  <ClientPackage/>
  <ClientLocationInfo LocationType="SMSPACKAGE" DistributeOnDemand="0" UseProtected="0" AllowCaching="0" BranchDPFlags="0" AllowHTTP="1" AllowSMB="0" AllowMulticast="0" UseInternetDP="0">
    <ADSite Name="Default-First-Site-Name"/>
    <Forest Name="tailspintoys.com"/>
    <Domain Name="tailspintoys.com"/>
    <IPAddresses>
<IPAddress SubnetAddress="192.168.2.0" Address="192.168.2.5"/>
<IPAddress SubnetAddress="192.168.0.0" Address="192.168.0.50"/>
    </IPAddresses>
  </ClientLocationInfo>
</ContentLocationRequest>
MP LM: Content Request             
MP LM: Package type is SMSPACKAGE <-- This is what the client is asking for
MP LM: Assigned site code is pr1              
MP LM: AD site name is Default-First-Site-Name
MP LM: Package ID is CAS00003 <-- This is the ID of the client package that was found
MP LM: Package version is 2
UID not found  
MP LM: calling MP_GetLocalSitesFromAssignedSite <-- This is the SQL stored procedure used for the lookup
MP LM: added PR1 to local site list           
MP LM: Added PR1 to site information list            
MP LM: Adding Client's Assigned Site (pr1) as FALLBACK.
MP LM: Quering for Unprotected DPs <-- We are querying for unprotected DP’s using the stored procedure highlighted in the next line.
MP_GetContentDPInfoUnprotected (CAS00003,20,PR1,SMSPACKAGE,00000000,tailspintoys.com,tailspintoys.com,<ClientLocationInfo LocationType="SMSPACKAGE" DistributeOnDemand="0" UseProtected="0" AllowCaching="0" BranchDPFlags="0" AllowHTTP="1" AllowSMB="0" AllowMulticast="0" UseInternetDP="0">
                <ADSite Name="DEFAULT-FIRST-SITE-NAME"/>
                <Forest Name="tailspintoys.com"/>
                <Domain Name="tailspintoys.com"/>
                <IPAddresses>
                                <IPAddress SubnetAddress="192.168.2.0" Address="192.168.2.5"/>
                                <IPAddress SubnetAddress="192.168.0.0" Address="192.168.0.50"/>
                </IPAddresses>
</ClientLocationInfo>)   
WriteContentDPInfo      
UID not found  
MP LM: Reply message body: <-- Here is the reply going back to the client with the available distribution points.
<ContentLocationReply SchemaVersion="1.00"><ContentInfo PackageFlags="16777216"><ContentHashValues/></ContentInfo><Sites><Site><MPSite SiteCode="PR1" MasterSiteCode="PR1" SiteLocality="LOCAL" IISPreferedPort="80" IISSSLPreferedPort="443"/><LocationRecords><LocationRecord><URL Name="https://cm12prisql.tailspintoys.com/SMS_DP_SMSPKG$/CAS00003" Signature="https://cm12prisql.tailspintoys.com/SMS_DP_SMSSIG$/CAS00003"/><ADSite Name="Default-First-Site-Name"/><IPSubnets><IPSubnet Address="192.168.0.0"/><IPSubnet Address=""/></IPSubnets><Metric Value=""/><Version>7958</Version><Capabilities SchemaVersion="1.0"><Property Name="SSLState" Value="0"/></Capabilities><ServerRemoteName>cm12prisql.tailspintoys.com</ServerRemoteName><DPType>SERVER</DPType><Windows Trust="1"/><Locality>LOCAL</Locality></LocationRecord></LocationRecords></Site></Sites><ClientPackage FullPackageID="CAS00003" FullPackageVersion="20" FullPackageHash="DB3D5D115FC93F6275817FB9791864D98D4AF6897339B9D4AB1C0DE456C240A8" MinimumClientVersion="5.00.7958.1000" RandomizeMaxDays="1" ProgramEnabled="true" LastModifiedTime="30386525;3525913600" SiteVersionMatch="true" SiteVersion="5.00.7958.1000" EnablePeerCache="true"/><RelatedContentIDs/></ContentLocationReply>

This next snip is from the MP_Location log for a client where the location request comes back in error.  The location request may also come back empty in other cases.  The process is largely the same until the end where the request indicates the client is on the internet but the management point is not so it drops the request.  In this case the client is not really on the internet but in some scenarios it may appear to be the case in the request.  There are some algorithms around this but since these scenarios can be limited the easiest way is often to just install the client directly without management point involvement for content lookup (either use option 1 or 3 above).  This will get the client installed and then you can make sure the right site code is installed, etc.

SMS MP Location Manager started.         
MP LM: Load(): MP Assigned Site Code is PR1
MP LM: Message ReplyTo : direct:WES7:LS_ReplyLocations
MP LM: Message Timeout : 600 
MP LM: Message Body : <SiteInformationRequest SchemaVersion="1.00"><SiteCode Name="pr1"/></SiteInformationRequest>            
MP LM: SLP Site Info Request     
MP LM: SiteCode is pr1 
MP_GetSiteInfo (pr1)    
MP LM: Reply message body:
<SiteInfoReply SchemaVersion="1.00"><Sites><Site><SiteCode>PR1</SiteCode><Version>5.00.7958.1000</Version><BuildNumber>7958</BuildNumber><ClientOperationalSettings><Version>5.00.7958.1401</Version><SecurityConfiguration><SecurityModeMask>0</SecurityModeMask><SecurityModeMaskEx>480</SecurityModeMaskEx><HTTPPort>80</HTTPPort><HTTPSPort>443</HTTPSPort><CertificateStoreName></CertificateStoreName><CertificateIssuers>CN=tailspintoys-CM12PRIIBCM-CA; DC=tailspintoys; DC=com</CertificateIssuers><CertificateSelectionCriteria></CertificateSelectionCriteria><CertificateSelectFirstFlag>1</CertificateSelectFirstFlag><SiteSigningCert>308202F8308201E0A003020102021059A30F69A85B3FAE478E7D1A783F47B8300D06092A864886F70D01010B05003016311430120603550403130B53697465205365727665723020170D3133313031383232333835335A180F32313133303932353232333835335A3016311430120603550403130B536974652053657276657230820122300D06092A864886F70D01010105000382010F003082010A0282010100D939F3DAF3860CD6336E53F75589E93892B5628A5EE437414BFD9AE86E27F29EC8BA04667F1CD29945317AA8C4B2B0F09266FEBAA49C5FE8740A50E6914803C9E09B30DBE35CE95CE88F4DC6A633FA10A709772B39F0D2275D555A456A42A4FC67A7352E866DCF9333A32D77AB0A1203336C00171E12BE951252E75A1ACB2E40D657B0694D63EF34084BBB1130E065BE7A7D0C1381F2FB21EFD5E479795149B5ACD614464256825249A2F3C11C0CC3B73F712471DDE79B6D0CC521BE5B32ED3E3E8698524F2B9EECE69933AB1B226EF6712F1606B13E5120862B37CFFAF690A9829A941F17E865C35DA2B51ADF5ECA45E16742490F4FA7F3A4B5ECEB0C28050D0203010001A340303E30260603551D11041F301D821B636D313270726973716C2E7461696C7370696E746F79732E636F6D30140603551D25040D300B06092B060104018237650B300D06092A864886F70D01010B050003820101005A1ECF058D6FFC750B0ABF3EE0A1529F9EB559B5498F9A2E19CE08CC3E8897627F5202186DA24C03AAA1FF7C748457570928C23681EEE4B5833DD071A21799E5F08795888B59489D3EE3CB38FB628A0199418917C3BB2ED1C95A801A462DEF348579C55864DAD84F77620E8765B734F012A566BE37C845599CBBAC6C816D976BCDB98A13CF7D52EC455C9488658B00467B931DABB34E41994C93B4386162EB7A39CF3A1533E97FDFE99A6A02692F8C8E5CB558A6F7848B5FB76C54A1A52D9FCEEEE6E4AE9448C4A7D8340BE5F0003455E38DFDAEB4E090A7EE9FB5DCE736223FE0985776B136F921E40E8D8FC12B31932DDC4AFB60E0727744054AC455E85D52</SiteSigningCert></SecurityConfiguration></ClientOperationalSettings><DefaultMP>cm12prisql.tailspintoys.com</DefaultMP><Capabilities SchemaVersion="1.0"/></Site></Sites></SiteInfoReply>
MP LM: Message ReplyTo : direct:WES7:LS_ReplyLocations
MP LM: Message Timeout : 600 
MP LM: Message Body : <ContentLocationRequest SchemaVersion="1.00">
  <AssignedSite SiteCode="pr1"/>
  <ClientPackage/>
  <ClientLocationInfo LocationType="SMSPACKAGE" DistributeOnDemand="0" UseProtected="0" AllowCaching="0" BranchDPFlags="0" AllowHTTP="1" AllowSMB="0" AllowMulticast="0" UseInternetDP="1">
    <ADSite Name=""/>
    <Forest Name=""/>
    <Domain Name=""/>
    <IPAddresses>
<IPAddress SubnetAddress="192.168.0.0" Address="192.168.0.22"/>
    </IPAddresses>
  </ClientLocationInfo>
</ContentLocationRequest>
MP LM: Content Request             
MP LM: Package type is SMSPACKAGE  

Client is on the internet but the MP is not hr, HRESULT=80004005 (e:\nts_sccm_release\sms\mp\locationmgr\tasks.cpp,7888)         
hr, HRESULT=80004005 (e:\nts_sccm_release\sms\mp\locationmgr\locationmgr.cpp,69)
MP LM: Message discarded