Sitecore 9 was announced at the recently held Sitecore Symposium 2017 and it comes with lots of new features and improvements. One of the major change to the platform is the way you install Sitecore on a server or local machine. The standard .exe installer has been replaced with a Windows PowerShell module which is called Sitecore Installation Framework (SIF). The SIF comes with Sitecore related pre-built tasks and configuration files to facilitate installation of Sitecore.
As a Sitecore enthusiast, I wanted to get my hands dirty with this new SIF module. After reading the official guide, I found out there were few pre-requites that were required even before running the SIF module. The 2 main ones were SQL Server 2016 and SOLR 6.6.1. In addition, the Solr instance must be running over https to make sure all the communication is secured.
The details of the installation process is given in the official guide but I will just mention few high level steps for local install:
Step 1: Configure and Install SOLR
So lets install Solr, sounds easy as I have done it few times before and I am sure you would have too. However, installing the secure certificate was bit tricky on localhost, but thanks to the Sitecore community, this SSL script from Kam’s blog worked like a charm and I had Solr 6.6.1 running over https in no time.
Step 2: Install SQL Server 2016
I had multiple versions of SQL Server (2012,2014) running side by side on my machine and installation of SQL Server 2016 Express wasn’t a problem as well. I ran the standard SQL Server 2016 installer and it was installed as expected (or I thought so).
Step 3 : Install Sitecore via SIF
As per the installation guide, I registered the SIF module via PowerShell and ran the following script: (I just added -Verbose at the end of each command so I can see the debug information during install)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define parameters | |
$prefix = "xp0" | |
$PSScriptRoot = "C:\Resources" | |
$XConnectCollectionService = "$prefix.xconnect" | |
$sitecoreSiteName = "$prefix.sc" | |
$SolrUrl = "https://localhost:8989/solr" | |
$SolrRoot = "C:\data\Solr-6.6.1" | |
$SolrService = "Solr-6.6.1" | |
$SqlServer = "MYCOMPUTERNAME\SQLEXPRESS2016" | |
$SqlAdminUser = "sitecoreUser" | |
$SqlAdminPassword="mysupersecretpassword" | |
#install client certificate for xconnect | |
$certParams = @{ | |
Path = "$PSScriptRoot\xconnect-createcert.json" | |
CertificateName = "$prefix.xconnect_client" | |
} | |
Install-SitecoreConfiguration @certParams –Verbose | |
#install solr cores for xdb | |
$solrParams = @{ | |
Path = "$PSScriptRoot\xconnect-solr.json" | |
SolrUrl = $SolrUrl | |
SolrRoot = $SolrRoot | |
SolrService = $SolrService | |
CorePrefix = $prefix | |
} | |
Install-SitecoreConfiguration @solrParams –Verbose | |
#deploy xconnect instance | |
$xconnectParams = @{ | |
Path = "$PSScriptRoot\xconnect-xp0.json" | |
Package = "$PSScriptRoot\Sitecore 9.0.0 rev. 171002 (OnPrem)_xp0xconnect.scwdp.zip" | |
LicenseFile = "$PSScriptRoot\license.xml" | |
Sitename = $XConnectCollectionService | |
XConnectCert = $certParams.CertificateName | |
SqlDbPrefix = $prefix | |
SqlServer = $SqlServer | |
SqlAdminUser = $SqlAdminUser | |
SqlAdminPassword = $SqlAdminPassword | |
SolrCorePrefix = $prefix | |
SolrURL = $SolrUrl | |
} | |
Install-SitecoreConfiguration @xconnectParams –Verbose | |
#install solr cores for sitecore | |
$solrParams = @{ | |
Path = "$PSScriptRoot\sitecore-solr.json" | |
SolrUrl = $SolrUrl | |
SolrRoot = $SolrRoot | |
SolrService = $SolrService | |
CorePrefix = $prefix | |
} | |
Install-SitecoreConfiguration @solrParams –Verbose | |
#install sitecore instance | |
$xconnectHostName = "$prefix.xconnect" | |
$sitecoreParams = @{ | |
Path = "$PSScriptRoot\sitecore-XP0.json" | |
Package = "$PSScriptRoot\Sitecore 9.0.0 rev. 171002 (OnPrem)_single.scwdp.zip" | |
LicenseFile = "$PSScriptRoot\license.xml" | |
SqlDbPrefix = $prefix | |
SqlServer = $SqlServer | |
SqlAdminUser = $SqlAdminUser | |
SqlAdminPassword = $SqlAdminPassword | |
SolrCorePrefix = $prefix | |
SolrUrl = $SolrUrl | |
XConnectCert = $certParams.CertificateName | |
Sitename = $sitecoreSiteName | |
XConnectCollectionService = "https://$XConnectCollectionService" | |
} | |
Install-SitecoreConfiguration @sitecoreParams –Verbose |
I was expecting it to install Sitecore 9, but after the first run I got this error:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[WebDeploy]:[Path] C:\Program Files\iis\Microsoft Web Deploy V3\msdeploy.exe | |
Error Code: ERROR_SCRIPTDOM_NEEDED_FOR_SQL_PROVIDER | |
More Information: The SQL provider cannot run because of a missing dependency. Please make sure that Microsoft SQL Server Transact–SQL ScriptDom is installed. Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_SCRIPTDOM_NEEDED_FOR_SQL_PROVIDER. | |
********************** | |
Command start time: 20171023170201 | |
********************** | |
PS>TerminatingError(Invoke-CommandTask): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Command C:\Program Files\iis\Microsoft Web Deploy V3\msdeploy.exe returned a non-zero exit code – (-1)" | |
>> TerminatingError(Invoke-CommandTask): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Command C:\Program Files\iis\Microsoft Web Deploy V3\msdeploy.exe returned a non-zero exit code – (-1)" | |
>> TerminatingError(Invoke-CommandTask): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Command C:\Program Files\iis\Microsoft Web Deploy V3\msdeploy.exe returned a non-zero exit code – (-1)" | |
Install-SitecoreConfiguration : Command C:\Program Files\iis\Microsoft Web Deploy V3\msdeploy.exe returned a non–zero | |
exit code – (-1) | |
At line:1 char:1 | |
+ Install-SitecoreConfiguration –Path "C:\\resources\\sitecore-xp0.json" | |
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
+ CategoryInfo : NotSpecified: (:) [Write–Error], WriteErrorException | |
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-SitecoreConfiguration | |
Install-SitecoreConfiguration : Command C:\Program Files\iis\Microsoft Web Deploy V3\msdeploy.exe returned a non–zero exit code – (-1) | |
At line:1 char:1 | |
+ Install-SitecoreConfiguration –Path "C:\\resources\\sitecore-xp0.json" | |
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
+ CategoryInfo : NotSpecified: (:) [Write–Error], WriteErrorException | |
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-SitecoreConfiguration |
The error suggested that I have to install additional SQL server modules for Web Deploy to work, as given on the Microsoft’s website
DacFxNeededForSQLProvider,
ERROR_SCRIPTDOM_NEEDED_FOR_SQL_PROVIDER,
ERROR_SQLCLRTYPES_NEEDED_FOR_SQL_PROVIDER
The group of 3 errors listed above share the following diagnosis and resolution:
Diagnosis: SQL DAC and its dependencies are not installed.
Resolution: Use Web Platform Installer to install:
- Microsoft SQL Server 2012 Data-Tier Application Framework
- SQL Server 2012 Transact-SQL ScriptDom
- SQL Server System CLR Types 11.0
I installed the above dependencies and ran the script. It failed again with the same error message.
I was sure that my SQL server installation is correct and I have installed module related to ScriptDom but what is wrong with Web Deploy ?
Then I found this article on Sitecore KB https://kb.sitecore.net/articles/019579 for Sitecore Azure Toolkit 1.1 which mentioned to add registry values for the Web Deploy for DAC dependencies path.
I was bit skeptical at first but decided to go ahead with this approach. I added the 2 registry values via regedit. For one of the values, I have to point the path to the recently installed SQL Server 2016 SDK folder. For the second registry value, I have to point the path towards VS 2015 DAC folder. I do want to mention here I also had multiple versions of VS (2013, 2015 and 2017) installed on my local machine.
The registry values were:
DacFxDependenciesPath : C:\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies DacFxPath : C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130
The actual screen shot of the registry values for Web Deploy:
Ran the script again and BOOM! it worked.
So it turns out since I had multiple version of SQL servers and also multiple versions of VS installed on my local machine, the Web Deploy 3.6 was not able to figure out what is the path for the SQL dependency dlls to install the SQL DAC packages for Sitecore 9.
By the way, if you are installing Sitecore 9 for the first time, Do check out the following posts:
How to Install Sitecore 9 with the Sitecore Install Framework
Gotchas while installing Sitecore 9 using the Sitecore installation framework
The lazy developer’s way to install Sitecore 9
Introducing SIF-less for Easy Sitecore 9 Installation
Low-effort SOLR Installs
I hope this blog will help any other developer facing the same error.
Happy Sitecoring 🙂