SharePoint 2010 : Setting-Up A Clean And Recoverable Development VM
The following software will be installed and integrated for this setup: Team Foundation Server 2010 SP1, SQL Server 2008 R2 x64 SP1, Windows Server 2008 R2 SP1 x64, Visual Studio 2010 Ultimate SP1, Windows 7 Ultimate x64, SharePoint Server 2010, SharePoint Designer 2010, and Oracle VirtualBox.
My own way of setting-up a SharePoint development virtual machine wherein I wanted to have it clean and recoverable anytime just in case I made a mess trying out something. No unnecessary configuration or additional installation have been done to make sure SharePoint will be open to future changes and will have testing results that are not affected by these unnecessary configurations. Additional changes are done on the differencing disks and can conveniently be removed after testing purposes.
Note that I will not use images in these steps because they are pretty straight forward and I urge you to check with Google first before doing the steps that are not clear to you so you avoid making any mistake in configuration that you will have no choice but to rollback to previous snapshot with some of your earlier changes lost. The steps will provide a way for you to recover from these mistakes by using snapshots, but it is still better to avoid them in the first place by double checking from Google.
Finally we are going to network three laptops (one server, two client) to verify the connectivity and security setup.
Background
Update for SharePoint 2013 Preview: I wrote and tested this article about eight months ago and made some minor updates. Although some sections of this article are specifically for Sharepoint 2010, most of the steps fared well with Sharepoint 2013 Preview setup. I will soon add to this article the steps that needs to be changed for SharePoint 2013 Preview setup.
Steps
I. Preparation
A. Please review the Required Hardware And Software For SharePoint 2010. This is a necessary read as the following steps will eventually fail if you do not comply with SharePoint's requirements.
http://technet.microsoft.com/en-us/library/cc262485.aspx
II. Setup Host
A. Setup Common Laptop Host. I use "Windows 7 Ultimate x64" for this purpose but you can use any other host operating system as long as it supports the requirements of the virtualization software we are going to use.
B. Install Virtualization Software
- Install on the Host: Oracle VirtualBox from https://www.virtualbox.org/
- Create VM:
- We will name our VM as SP2010DEV.
- Set the VM type to VDI, memory to 4GB, storage capacity to 80GB, disk type to Dynamic.
- Also install the latest Oracle VM VirtualBox Extensions.
- Note: Do not make any non-essential configuration changes unless it is a pre-requisite of subsequent required installation.
- When all installations has been performed, we will begin making snapshots so we can recover from any mistakes or errors in configuration.
- We will then baseline the finalized configuration before we do a differencing disk that we can freely use for any development purposes to our heart's content.
III. Install VM Guest
A. Install "Windows Server 2008 R2 SP1 x64". [Update for SP2013 Preview: Change this to "Windows Server 2012 Standard". Use the DataCenter version if you want to but I chose Standard as the DataCenter wouldn't make sense for my development the fact they are essentially the same.]
- Set the password to any Setup Account you use in development.
- When the installation and SP1 update has been completed, perform the following:
- Install Guest Additions by going to Devices\Install Guest Additions. This will make the host and guest operating system integration seamless as possible.
- Install with default components only and set to always trustcomponents from Oracle. Reboot the guest.
- Modify the Machine\Settings
- If you want your DEV VM to be accessible from Remote Desktop:
- Set the Display\Remote Display
- Check "Enable Server" with Authentication Method as "External"
- Create a new Host\Windows User Account such as "VirtualBox User" with Administrator rights. This is the account to use for RDP access so this user should also be a member of the Remote Desktop Users group.
- If you want your DEV VM to have permanent access to its Host Drive:
- Set the Shared Folders\Add Share
- Set the folder path to "C:\" with name "HOST_ROOT" as Auto-mount and Make Permanent
- Turn Off Internet Explorer Enhanced Security
- Go to Server Manager
- Click the top item in the tree to the left "Server Manager"
- On the page that appears, go to "Security Information"
- Look for "Configure IE ESC" on the right.
- Set IE ESC to "Off" for Administrators (supposing you are using Administrator account).
- If you want to have a useful development environment, set the following:
- Go to Windows Explorer\Tools\Folder Options.
- Disable: Hide Empty Drives In The Computer Folder
- Disable: Hide Extensions For Known File Types
- Disable: Hide Protected Operating System Files
- Enable: Launch Folder Windows In A Separate Process
IV. Install SQL Server 2008 R2 x64
A. Select All Features With Defaults for installation.
B. Note the following settings for domain-configured server to avoid system errors:
- [LOCAL] SYSTEM: SQL Server, SQL Server Agent, SSAS, SSRS
- LOCAL SERVICE: SQL Full-text Filter, SSIS, SQL Server Browser
C. Add your administrator account for administrative users.
D. Install the SharePoint integrated mode default configuration for the report server.
V. Install Active Directory Domain Services
A. Use "dcpromo" on the Guest OS.
B. The goal for this installation is to have an Active Directory to be used with SharePoint Server 2010. This is a common corporate scenario.
VI. Install SharePoint Server 2010
A. Install SP2010 Pre-requisites.
B. Install SP2010 Enterprise. SharePoint Server 2010 includes SharePoint Foundation by default.
C. Configure SP2010 using Server Farm Configuration Wizard.
- Provide the machine name of the Guest OS to search for SQL Server default installation.
- Create a separate Guest\Windows Administrator User Account for SP1020-to-MSSQL connectivity purposes.
VII. Install Visual Studio 2010 Ultimate
A. Remove option "Itanium Compilers and Tools" if you will not be deploying on Itanium.
B. Remove option "MS SQL Server 2008 Express Service". We have already installed SQL Server.
C. Make sure option "MS SharePoint Developer Tools" is installed.
VIII. Install Team Foundation Server 2010
A. Make sure TCP/IP in SQL Server is enabled before installing TFS. This will guarantee a SharePoint site can be created for the team project collection.
B. Use Advanced Configuration in order to configure reporting and team project portal.
C. Reporting Services:
- You need to configure Reporting Services to be able to supply both Report Server URL and Report Manager URL.
- Create a Domain User account (non-administrator like sp2010dev\reports_user) with minimal rights to be a Report Reader account.
D. SharePoint: Specify to create a new site collection. Name it "tfs".
E. Readiness Checks:
- Resolve SID conflict by typing on windows command prompt:
sqlcmd -E -S "<MACHINE>" -Q "ALTER LOGIN [<MACHINE>\Administrator] WITH NAME = [SP2010DEV\Administrator]"
Run the Readiness Check to easily get the command.
- You will have to create a new Reporting Database that will be usable for TFS. The existing configured database is only accessible through SharePoint (Integrated Mode) so unless you already need exclusive reporting from SharePoint, set it to Native Mode instead.
- For issues regarding readiness checks, please refer to this useful blog created by bhardister: http://agilescmtalk.com/node/45
F. Do not install TFS Explorer 2010. This is already in the Visual Studio 2010 Ultimate Edition we have already installed.
IX. Install Developer Tools and Updates
A. Microsoft SharePoint Designer 2010 (64-bit).
B. Windows Server 2008 R2 SP1 x64 updates from Windows Update.
C. SQL Server 2008 R2 x64 to SP1.
D. SharePoint Server 2010.
E. Visual Studio 2010 Ultimate to SP1.
F. Team Foundation Server 2010 to SP1.
G. VirtualBox
X. Baseline
A. Make sure to install Guest OS updates using Windows Update. Restart the Guest OS for baselining purposes.
B. Perform Disk Check and Defragment System Files.
C. Create Clone VDIs "SP2010DEV Clone 1", "SP2010DEV Clone 2", and "SP2010DEV RPG". This is my backup and multi-user approach but you are free to devise your own. I have stated this approach however, because this way you will learn how to work around the Virtual Box UUID sync issue.
- Test "SP2010DEV RPG" clone and then shut it down. Make a duplicate copy of its files first, except the large *.vdi file. You will need these duplicate files when you want to attach "SP2010DEV RPG". Then remove (detach) it. Do not remove the files because you just need to detach it for re-attachment test where there is actually an issue on Virtual Box.
- Test Clone 1 and Clone 2 VDIs and then detach them. I suggest that you backup these two on separate hard drives for recoverability.
- Now try to Add (attach) "SP2010DEV RPG" VDI. You will get an error "Could not find an open hard disk with UUID...". If you have the duplicate files before you detach it, you can overwrite the original files before attaching it again. This will avoid the issue so you can re-attach it without much of the problem below. However in case you have not duplicated it you have to do the step below. This is the reason and what you have to do:
- Every time Virtual Box runs/stops a VM it seems to generate a new UUID for the same device (e.g., the main hard disk of the Host OS) and updates the configuration of all attached VMs with this UUID. If a VM has been detached after an attached VM has been ran/stopped, then the detached VM will not have the updated UUID and once the detached VM is attempted to be reattached it will inform that it cannot find that device anymore even if it is still existing.
- Take note of the UUID of the missing device. Using notepad, or better yet and xml file editor, open the VDI "SP2010DEV RPG" file on path "...\VirtualBox VMs\SP2010DEV RPG\SP2010DEV RPG.vbox". Find the line where the UUID is declared and take note of the device that is using that UUID.
- Open the original VDI "SP2010DEV" file on path "...\VirtualBox VMs\SP2010DEV\SP2010DEV.vbox" where you used to build the VM. Find the same line where the same device is declared and copy its UUID. Replace the wrong UUID in "SP2010DEV RPG.vbox" with the updated UUID. Close both the files.
- Now again try to Add (attach) "SP2010DEV RPG" VDI. You will not get any error and the VM will run successfully as usual. Although I still suggest you duplicate the files because if you don't, you won't be able to make a snapshot as you will encounter later.
- Now the reason why this is important is that you will have to do the same thing when you need to attach your clone VMs.
XI. Network Two/Three Laptops and Enable RDP Access
A. There are different approaches that you can do to enable this, but since you can do them all I will just explain it to you in sequence (because that's what I did). Note that there are serious security implications involved in these approaches. This is DEFINITELY not a recommended approach if you will implement this kind of connectivity in a workplace environment, moreso a public exposed network. However if you know what you are doing and you know the "gates" where your network will be accessed, then it is logical to make your network "insecure from the inside", but "secure from the outside". This means that bytes can freely roam within your network especially if it is a home network or air-gapped, but make sure you have only a single point of exposure to the outside world (gateway) that is highly secured and outside devices cannot connect to your network. And here is how to do it.
B. First, make sure that your single point of connection to the Internet is defined. This can either be a wireless router in my case or any other gateway. Configure this gateway in such that connections coming from the Internet cannot be established going inside the network, and that connections coming from the network are filtered going to the Internet. If you can maintain this model, it doesn't matter if your network devices are not secure themselves.
C. Supposing we have "Laptop A" with Windows 7 Ultimate 32bit, "Laptop B" with Windows 7 Ultimate 64bit, and "Laptop C" with Windows XP 32bit laptops. Obviously the SP2010DEV VM that we want to access is located in Laptop B but we want the Laptop A (Windows 7 x32) and Laptop C (Windows XP) to be able to access SP2010DEV in Laptop B.
D. If we don't have a wireless router, or worse, even a wired router, for example when we are on the move, what we can do is to setup network cables. I won't go into the details because there are many approaches to this. In cases that you don't have any router what you can do is to make a Laptop see the other laptop as a gateway so that they will be able to communicate with each other (device-gateway relationship). Another way is to "Bridge" but I prefer the former approach since it is faster. With this setup you can have a network with two laptops (no router involved) connected to each other. I will have this topic separately on "Connecting Two Laptops Using A Network Cable", but there are already lots of topic available about this.
UPDATE: I have a separate topic "Internet Connection Sharing (ICS) from a Laptop-Connected Internet USB Dongle to Multiple Devices using ordinary Wireless Router without setting-up a DNS" which provides the option of enabling SP2010DEV to be accessed by more devices PLUS an available Internet from a single (cheap/free) source.
E. Second thing we do is to setup Windows 7 homegroup so that the two Windows 7 laptops can trust each other as part of a single home network. This will make the connection much smoother not only for the RDP Access. As for the Windows XP laptop, configure the Workgroup of the three laptops as one. Placing all the laptops into one workgroup has many advantages which I will not explain here since it's out of topic.
F. Configure VirtualBox VRDP
- Install the latest Oracle VirtualBox Extension Pack that is compatible with the version of VirtualBox you have installed. The Extension Pack will contain the VRDP server that is not part of the VirtualBox installer.
- On the VirtualBox Manager right click on the SP2010DEV VM and select Settings. On the Display section click on the Remote Display tab. Take note that we have already configured this early in this setup guide. However since we are on a development platform and would like to avoid unnecessary security hurdles we will make the Authentication Method as "Null" instead to make it work first. We will also Allow Multiple Connections for this purpose so we can connect from two laptops simulatenously (there are time this will get funny/annoying when two people are using it). Click OK.
- Our goal right now is to enable development, not to implement unnecessary security. I will have another article that will cover configuration of security so you can access your development environment from the Internet.
G. Use Microsoft Terminal Services Console (MSTSC.EXE a.k.a. Remote Desktop Client) to connect using RDP.
- First test the connection using Laptop B by entering on the Remote Desktop 127.0.0.2:3389 where 127.0.0.2 is a loopback address and 3389 is the default port assigned to the VM. To verify if this is your port number: while SP2010DEV VM is running, on the Machine Menu select the Session Information and view the Remote Desktop Server Port. Test if the connection does not require login and if it successfully connects to the VM. Do not close the connection yet.
- Now connect using Laptop A and Laptop C simultaneously by entering on the Remote Desktop [Laptop B Static IP Address]:[SP2010DEV VM VRDP Port]. Where Laptop B Static IP Address is the IP address of the "Host" OS, since this is where RDP client will connect to, and not on the Guest OS. Use IPCONFIG on the host windows console. For DHCP check your router's assigned IP address.
- Once you have confirmed that all three laptops can connect to the VM using RDP you can close them all. This means you can now access your SP2010DEV from any laptop that is part of your local network.
XII. Use Snapshots to further Configure and Optimize you development VM. Create a full clone of this VM and perform backup if you want to
A. Configure and Test Integration of SP, SQL, TFS, & VS.
B. Install All Updates & Patches.
A. Install PowerPivot for SharePoint (http://msdn.microsoft.com/en-us/library/ee210616.aspx)
XIII. Finally, make the an immutable VM of your "finalized" clone by creating a Linked Clone. At this point you now have created a single stable, recoverable, and revertable VM in your laptop with a full-blown and fully-integrated SharePoint 2010 development platform.
There you have it! A Clean And Recoverable SharePoint 2010 Development VM. Thanks for reading and making this your reference. Good luck and happy development! :)