Previously on Art of the DBA, I walked you through a basic install and setup of Windows 2008 Server Core. Now that we have our server setup with an OS, a name, and an IP, it’s time to prep it so we can install SQL 2012. Let’s get started, shall we?
Left-Right-Left-Right-A-B-Select-Start
Before we get too far, I have a cheat I confess to. A lot of these commands I am going to run are saved in scripts to spare myself from typing commands. As I’ve mentioned previously, I’m lazy and the beauty of automation is having scripts. So the first thing I’ll do is open up the firewall so I can copy my scripts down:
netsh firewall set service fileandprint enable
This command enables file and print sharing. Now, normally this will be off (and I tend to turn it off when I’m done), but for the initial setup I want to be able to get at the machines local drives and put my scripts there.
The second thing to do is to activate Windows. Just because we’re using Server Core doesn’t mean Microsoft doesn’t care about us registering the OS, even if they make it harder. Go ahead and run:
SLMgr.vbs -ipk <<Serial Key>> SLMgr.vbs –ato
The first command will load your serial key into the machine, the second command will communicate with Microsoft to validate your key and activate your machine.
Great, with all that out of the way, let’s get to the fun stuff.
Configuring your Console
Full disclosure, I’m still pretty new to Powershell. Oh, I’m no stranger to scripting (VB scripts as well as Korn/Bash are in my repertoire) and, as we’ve discussed, I love the command line. But I’m still getting used to the syntax and all the different calls. This means that I want to make sure Powershell is loaded and set as my default shell for my Server Core installation. To do this, I’ll run the following script:
REM Install base packages REM install .Net start /w ocsetup NetFx2-ServerCore REM Install powershell and modules start /w ocsetup MicrosoftWindowsPowerShell start /w ocsetup ServerManager-PSH-Cmdlets
The comments explain what’s going on, but let’s touch on a couple of things. First is ocsetup, which is a command line utility to install Windows components. What I am using it here for is to first install my basic .Net libraries, then Powershell and Powershell’s ServerManager commandlets. Once that’s all installed, I restart the machine and then fire up powershell itself (by typing ‘powershell’ and the command prompt) so I can wrap up the rest of the configuration.
Finishing touches
With powershell running, we can start on our final steps. First, I will set my script execution policy so I can run scripts (and save myself some effort):
set-executionpoilicy remotesigned
For more on what this means, here’s a link. With this in place, I can now execute my final steps, using the following script:
#Run from Powershell, configure powershell import-module ServerManager enable-psremoting #configure powershell as default shell set-itemproperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\WinLogon" shell 'powershell.exe -noexit -command "import-module ServerManager"'
This script will go ahead and import the ServerManager commandlets for the current session (commandlets are not loaded automatically). This makes our life easier for setup. The next command then allows for remote powershell script execution. While I don’t use it for this job, it’s nice to have. Finally, I make a registry key change so that when I log on in the future, it will use Powershell as my default shell.
Finally, we configure our Windows features and firewall:
#Install x64 components Get-WindowsFeature WoW64-NetFx*,WoW64-Powershell | Add-WindowsFeature #update firewall netsh advfirewall set currentprofile settings remotemanagement enable netsh advfirewall firewall add rule name="SQL Server(1433)" dir=in action=allow protocol=TCP localport=1433
With this, I add all the necessary .Net and Powershell libraries I’ll want for future use. Then I enable the remote management settings in the firewall, along with opening up port 1433 for SQL Server.
And with that, we’re ready to actually install SQL 2012, which I will cover in the next post! Stay tuned!