VirtualBox guest running IIS and supplying code via vBox sharedFolder

Update:  I would note that we ultimately abandoned this process in favour of running a copy task inside the VM.  To start we're using "robocopy dir1 dir2 /MIR /MT:8 /XD .vs" running every minute, but eventually we'll do something w. NTFS filesystem triggers.
------------------------------------
You might have ended up with an error like this:
Filename: \\?\C:\path\web.config
Error: Cannot read configuration file
This is because IIS doesn't like the fact that it's attempting to access something that's been symlinked (IIRC, check google for specifics).  So, we need to trick it!!

I do not take credit for this, just posting up a script that should help.  This guy pointed me/others in the right direction: http://stackoverflow.com/questions/22636106/iis-application-using-shared-folder-in-virtualbox-vm

I would note that we use an array for the IIS stuff because re-using code from other scripts is fun (bad practice, too!).  It was the fastest way for me to get this task done.  Also note that we run the IIS init script earlier, but since you can't init a new site without a physical path, but at that time there is no vBox sharedFolder, this script comes in later on to fix that up.

Host is Win7 running VirtualBox 5.0.12/Vagrant.  Guest is Server 2012R2 running IIS/MSSQL.


<#
Script that remaps all of the IIS physical paths
Why?
Because VirtualBox sharing doesn't work for IIS

How does it work?
Mapped drive inception hides the fact that this is a Vbox shared folder
1. Host: Shared folder via Virtualbox as usual
2. Guest: mklink /d c:\code \\vboxsvr\code
3. Guest: Add sharing to the new symlink (code) so you can now access:\\localhost\code
4. Guest: In IIS, set all physical paths to \\localhost\code\siteName
#>
Import-Module WebAdministration
$name = "Code"
$local = "C:\$name"
$share = "\\VBOXSVR\$name"
$rootPath = "\\localhost\$name"
$domain = "domain.local"
if (!(Test-Path $share)) {
    Write-Host "VirtualBox shared folder is missing!  Please fix that and re-run this script..."
    Exit 1  
}
if (Get-SmbShare -Name $name) {
    Write-Host "SMB share present! Assuming we're good..." -ForegroundColor Green
}
else {
    cmd /c mklink /d $local $share
    New-SmbShare -Name $name -Path $local -Description 'Shared folder inception' -FullAccess Everyone
    Write-Host "Created new symlink and SMB share for folder inception..." -ForegroundColor Green
}
$siteArray = @()
$siteArray += @(
    ("$domain","$rootPath\appName","$domain"),
)
ForEach ($site in $siteArray) {
    $siteName = $site[0]
    $sitePath = $site[1]
    $siteHeader = $site[2]
    Write-Host "Setting physicalPath value..." -ForegroundColor Cyan
    Set-ItemProperty IIS:\Sites\$siteName -name physicalPath -value $sitePath
    Write-Host "...physicalPath value set!" -ForegroundColor Green
}

Comments

Popular posts from this blog

DFSR - eventid 4312 - replication just won't work

Fixing duplicate SPNs (service principal name)

Logstash to Nagios - alerting based on Windows Event ID