Doing an unattended install of Windows 8 Pro on the HP MediaSmart Server (Ex470)

September 23, 2012

Recently I’ve wanted to experiment with whether Windows 8 would make a good home server (since there appears to be no future for WHS now, unfortunately).

Rather than buy some nice NAS form factor hardware to test things out, I thought maybe I would try to get Windows 8 to install on my aging Ex470. Its also super cute hardware, so I wanted a reason to run it some more.

Note: My Ex470 has the stock processor, but I have upgraded the RAM. The stock processor meets Win8’s minimum requirements but the stock RAM does not. If you want to run Windows8 you will need to at least upgrade your memory to a sufficient amount for Windows 8 (1GB). There are plenty of guides for how to accomplish this out there.

The problem, though, is that it is a completely headless machine. People out there have built various VGA adapters that you can buy to hook it up to a display, but one of my goals for this experiment was not to spend any excess money on it (I’ve just spent some cash on computer upgrades, and need to give it a rest for a while).

The solution? I decided to try and do a completely unattended install of Windows 8. There are a few challenges to doing this on the Ex470, though:

  1. You can’t see the bios screen to get it to boot off USB.
  2. It does not have a VGA hookup, so Remote Desktop MUST be enabled from the get go, along with the associated user accounts to allow for login.

Point number 1 is not a big deal. Other Ex47x enthusiasts out there have figured out the correct sequence of key presses to get the unit to boot off usb.

Point number 2 is also surmountable by application of some wizardry in the Windows System Image Manager.

So, how do we do it?

Note: What I’m going to describe below involves wiping the system disk in the Media Smart Server. Please make sure anything on that disk is backed up and its best to make sure no other disks are inserted into your server when doing any of the steps to follow. You can reinsert them after Windows 8 is installed.

First, we follow the first part of these directions to get the Windows System Image Manager set up to create our answer file, but there are a lot of settings from the latter part of the document that we do not want, because the purpose of that document is to get the machine to boot into audit mode, so you can mess around and test before putting the machine into OOBE (out of box experience?) mode. We don’t want any of that. We want the machine to boot into a fully usable state, complete with enabled Remote Desktop, A computer name, and an account to log onto.

So, add these components to the configuration passes (the way described in the document). For the ex47X you mostly want components to be prefixed with AMD64. I’m not sure about the newer MSS hardware, you may need to adjust some things to accommodate.

  • Pass: WindowsPE (when you right click the components to add, as described in the document, select this as the pass)
    • amd64_Microsoft-Windows-International-Core
      • Fill out InputLocale, SystemLocale, UILanguage, UserLocale (I set them all to en-US)
    • amd64_Microsoft-Windows-International-Core/SetupUILanguage
      • Fill out UILanguage (Again, I picked en-US, for my case)
      • WillShowUI -> OnError
    • amd64_Microsoft-Windows-Setup/DiskConfiguration/Disk
      • DiskId -> 0
      • WillWipeDisk -> true (Note! This means we are going to wipe the first disk! Make sure nothing important is on it, and best off just have the one disk in the MSS when running this)
    • amd64_Microsoft-Windows-Setup/DiskConfiguration/Disk/CreatePartitions/CreatePartition
      • Extend -> true
      • Order -> 1
      • Type -> Primary
    • amd64_Microsoft-Windows-Setup/DiskConfiguration/Disk/ModifyPartitions/ModifyPartition
      • Active -> true
      • Format -> NTFS
      • Label -> Windows (But you can call it whichever šŸ˜‰ )
      • Letter -> C
      • Order -> 1
      • PartitionId -> 1
    • amd64_Microsoft-Windows-Setup/ImageInstall/OSImage
      • WillShowUI -> OnError
    • amd64_Microsoft-Windows-Setup/ImageInstall/OSImage/InstallTo
      • DiskID -> 0
      • PartitionID -> 1
    • amd64_Microsoft-Windows-Setup/UserData
      • AcceptEula -> true
    • amd64_Microsoft-Windows-Setup/UserData/ProductKey
      • Key -> The windows product key you want to use..
      • WillShowUI -> OnError
  • Pass: Specialize
    • amd64_Microsoft-Windows-Shell-Setup
      • ComputerName -> Whatever you want to call the server (I chose Server8)
      • ProductKey -> The windows product key you want to use.
      • Registered Owner -> Your Name
    • amd64_Microsoft-Windows-Shell-Setup/OEMInformation
      • HelpCustomized -> false
    • amd64_Microsoft-Windows-TerminalServices-LocalSessionManager
      • fDenyTSConnections -> false Ā (this enables RDP)
    • amd64_Microsoft-Windows-TerminalServices-RDP-WinStationExtensions
      • SecurityLayer -> 1
      • UserAuthentication -> 0 (from my understanding, these allow you to Remote in from older versions of Remote Desktop. Check the online doc for more options here).
    • amd64_Networking-MPSSVC-Svc/FirewallGroups/FirewallGroup
      • Active -> true
      • Group -> Remote Desktop
      • Key -> rd1
      • Profile -> all (these settings add an exception to the firewall for Remote Desktop)
  • Pass: auditSystem
    • amd64_Microsoft-Windows-Shell-Setup/UserAccounts/AdministratorPassword
      • Value -> The Administrator password you want.
  • Pass: oobeSystem
    • amd64_Microsoft-Windows-Deployment/Reseal
      • forceShutdownNow -> false
      • Mode -> OOBE
    • amd64_Microsoft-Windows-International-Core
      • InputLocale -> Your input locale (for me, en-US)
      • SystemLocale -> Your system local (for me, en-US)
      • UILanguage -> Your UI language (for me, en-US)
      • UserLocale -> Your User locale (for me. en-US)
    • amd64_Microsoft-Windows-Shell-Setup
      • TimeZone -> your time zone (for me Eastern Standard Time). Search for this setting online for the different options you can put.
    • amd64_Microsoft-Windows-Shell-Setup/OOBE
      • HideEulaPage -> true
      • HideOEMRegistrationScreen -> true
      • HideOnlineAccountScreens -> true
      • HideWirelessSetupInOOBE -> true
      • NetworkLocation -> home
      • ProtectYourPC -> 1
    • amd64_Microsoft-Windows-Shell-Setup/UserAccounts/AdministratorPassword
      • Value -> The administrator password you want to use (note: I think the admin account is still disabled by default though)
    • amd64_Microsoft-Windows-Shell-Setup/LocalAccounts/LocalAccount
      • DisplayName -> your display name
      • Group -> Administrators (for ease of remoting, you can change this later)
      • Name -> the user id
    • amd64_Microsoft-Windows-Shell-Setup/LocalAccounts/LocalAccount/Password
      • Value -> The password for the user account.

You can now validate (Tools -> Validate Answer File) and then save the answer file as Autounattend.xml. Then, make a bootable usb of the windows 8 install and put that xml file in the root of the key. Then:

  1. Make sure you backup anything useful on the system drive of the server, because its going to be wiped!
  2. Hook up that system drive to another machine and delete any partitions on it (the answer file we created above doesn’t seem to accomplish this, although you could probably add the relevant setting in there somewhere)
  3. You will have to repeat number 2 if something goes wrong and the install stops halfway.
  4. Put JUST the system drive into the Media Smart Server.
  5. Start with the server off.
  6. Insert the usb key with the windows 8 install and the Autounattend.xml file into the bottom usb port on the back of the server.
  7. Plug a usb keyboard into a different port on the server.
  8. Turn the server on and immediately start jamming the f12 key. Continue this until the rightmost led is a steady blue.
  9. Hit the down arrow 7 times and then hit enter.
  10. Windows 8 should now be installing. It will take a little while.
  11. If you can log onto your router, do so and keep refreshing the dhcp clients list, if you have a network cable hooked up to the MSS, eventually you should see the ComputerName that you recorded above show up. At this point you should be able to Remote Desktop into the machine using theĀ credentialsĀ for the User Account that you created in the answer file above.

If your USB has an activity indicator light, you can make your job a bit easier by watching the indicator light to see that it starts buzzing away after you hit enter in step 9. This should confirm that the install has indeed started.

Good luck! Hopefully I haven’t missed a setting in what I have described above. Let me know if it works for you.


Microsoft removes beating heart from WHS, crushes it.

November 23, 2010

Extremely irritating news today. Microsoft is taking a product I love and killing it. First the news came that the new version of Drive Extender would be neutered of its ability to have its disks read without the need of WHS (an important disaster recovery option, IMO), and now it seems that the Drive Extender “feature” will be removed entirely. I say “feature” because I (and most other WHS users, I would assume) consider Drive Extender to be the whole thing that WHS is, not some feature to be discarded. This simply amounts to Microsoft tactfully killing the product.

Years ago I examined all the options and came to the conclusion that RAID was just too much trouble in terms of a way to achieve redundancy in file storage. I was considering software raid options, but then lo and behold, I stumbled upon Windows Home Server, which provided a dead simple solution for extending and creating redundant storage without the need to match disk sizes and without the worry of needing to replace a controller with an identical version should it fail. I was completely sold.

Now I just feel left in the cold. Microsoft, if you plan to kill this product, please at least just have the decency to look me in the eye and tell me.

If you feel passionately about this please visit this connect link also.

Windows Home Server v2 (VAIL), my initial reaction

April 30, 2010
  1. Please bring back some way to read the files on a disk from a non-VAIL machine! This is an important disaster recovery technique and a major selling point of V1 (ConnectĀ Link – Please Vote)
  2. Please consider adding the option for a second authentication factor to the remote access site login. (Whether it be MS or 3rd party provided through add-ins) (Connect Link – Please Vote)

I’ll tally some more detailed feedback as I look more into the changes. As it stands though, I’m a bit too disappointed with the changes in Drive Extender to install the Preview in its current state. I hope Microsoft reconsiders its deprecation of major features that contributed to the platform being attractive in the first place.

Dead PS3. A case for cloud storage for save games.

April 26, 2010

My PS3 unceremoniously died last night, making me sad. The fact that its out of warranty and I need to pay to fix it makes me sad. The fact that I’ll likely have to wait 6 weeks makes me even sadder. But what makes me most sad is that all my save games will not survive the process. There is an easy and useful mechanism for backing up save games for the PS3, but I cannot use this if I cannot get into the system’s OS (it’s that broken).

I cannot take the hdd out and extract the save games because the drive is heavily protected and encrypted. This is understandable because having user modifiable save games would introduce an attack vector that Sony would rather not have to worry about, but it does present some rather ugly usability issues. Above and beyond the fact that I’m now unable to extract my save games, even if I had had the foresight to do this, some games do not allow their saves to be transferred to a different system than which originally hosted them.

I believe this must be to prevent some sort of cheating or abuse of the trophy system. Apparently some games can be transitioned between systems, but then disable certain features, such as trophies, for that save file. So, this brings me to my point. Sony is researching ways to monetize PSN by all rumors, so here’s an easy one:

I would pay a small recurring sum to have my save games automatically synchronized with PSN and associated with my account so that I could use them from any PS3 associated with my account. This would be a really nice value add. It would certainly make sense especially for games that you can play on both the PSP and the PS3 (ps1 classics), imagine automatically sharing a save file for a game you were playing on both devices? So, a nice feature for disaster scenarios AND a value add to the platform. Sounds good? Now to wait 6 weeks before having to replay the games I was in progress of completing.

Proper pattern for defining collection type Dependency Properties?

April 23, 2010

I’ll relate a query that I recently posted on the Silverlight forums here, in case someone reading this has a good answer:

So, we all know that when creating a Dependency Property that has a collection type that setting a new collection instance as the default value in the metadata does not have the desired effect as that instance will be shared between all instances of the class as the default value of that property. So the correct solution is to initialize the collection instance in the constructor, seeĀ

But what if you want to set a value for this collection via a style? Or set its default value in the default style? For an example, see the Palette property on the Silverlight Toolkit chart. If we provide a value locally in the constructor, this will take precedence over the value provided in the style correct? Or if we avoid initializing the collection in the constructor, as in the Palette example, then this will not work:

   <CollectionItem />
   <CollectionItem />

only this will:

       <CollectionItem />
       <CollectionItem />

So, if you need a collection property to be stylable you can avoid setting it in the constructor and document that when used in xaml it needs a new collection instance to be instantiated. But what happens when tools like blend blithely create the former xml snippet when you use their collection editor?

Does anyone know a good pattern that allows for all these behaviors?

Windows Phone + Silverlight/XNA = Awesome

March 5, 2010

Awesome šŸ™‚

The problem with HDMI handshaking

August 29, 2009

I had the most difficult time last night trying to upgrade to OSX Snow Leopard. I performed the upgrade and was presented with a blank screen when my mac mini rebooted. I assumed that my resolution had been changed to some mode my television didn’t support so I tried all sorts of things to try and right the situation, but even booting into safe mode resulted in a black screen.

After hours of trying to work out a way to force the mac mini to use a more sane default resolution on boot I finally thought to pull out the hdmi switch I was using and connect the mini directly to the tv. And low and behold, I had video. My tv was obviously broadcasting that it was capable of 1080p, but either a bad switch or cable was reducing the hdmi bandwidth to the point that the resulotion was not actually possible.

So, the HDMI handshaking process seems pretty flawed to me, there should be some way the source can test different modes, and the destination should be able to report success or failure of different modes. A simple capabilities list simply isn’t cutting it. That and its pretty deplorable that apple often makes things WAY TO HARD by making them so simple. Why should SAFE MODE try to probe for capabilities of the destination device instead of picking a SAFE resolution to display in, and why should an OS upgrade try to pick a new resolution than the one I had manually selected? (1080p is a bit hard to read on my TV).

The other unexplained mystery is why my pc (and osx 10.5) could display 1080p content to the tv through this same switching hardware but snow leopard can’t? A bit boggling, to be honest.