A few of the lovely people who follow me on Twitter will have seen for the past couple of weeks that I’ve been talking about “Project Awesome”. It’s the code name that I gave to one of the most exciting and creative ways I’ve been able to help people use our products – Window 8, System Center 2012 and Windows Server 2012. Project Awesome is really “Soft Array” a collection of up to 80 Windows 8 devices that work in synchronicity to provide a powerful display experience using Windows 8 apps which you can read more about on this blog post over at MSDN UK. This post is much more about the way and why we used the various products. However if you’ve not seen it yet, this video is SoftArray in action:
Windows 8 Enterprise
There were a few reasons why we chose Windows 8 Enterprise the first and foremost was for sideloading. Sideloading is the process of installing Windows 8 apps without the need to publish those apps to the Windows Store and we chose not to publish to the store during this phase because not everyone has three 10ft wide aluminium frames on which to mount 40 Surface Pro devices. We also knew that giving the developers just 3 weeks to build their apps we would have a number of builds to push out rapidly and there is no way to bet the 4 minute turnaround time I was able to achieve for sideloding using System Center Configuration Manager 2012 SP1. Yes you read that correctly, Windows 8 apps deploy to all devises in just 4 minutes. Using Windows 8 Enterprise simplified my life as the IT Admin for the arrays because I didn’t need to load sideloading product keys to all devices and they could be activated with MAK keys. If you want to learn more about Sideloading using System Center Configuration Manager see my Deployment Sessions videos.
Additionally the devices are joined to a Windows Server 2012 domain and that gives me some added functionality such as Group Policy. Using Group Policy I am able to distribute certificates, change firewall settings, deploy power plans, deploy script and otherwise customize the devise. I was also able to leverage App Locker to control specific apps on the devices preventing them from running or installing, which we thought would be useful with random people approach the Soft Array all day.
Windows Server 2012
At heart of the soft array are some servers which provide a central point of contact for the devices, they check in it’s the server that notifies a device about the devices surrounding it. The physical server that Arcade.cx chose for the project was tiny Shuttle XPC equipped with an Intel Core i7, 16gb RAM and 256gb SSD. On this tiny chassis we are able to run the required servers:
- A Windows Server 2012 Active Directory Domain Controller – this also runs DNS and DHCP.
- A Windows Server 2012 server running System Center Configuration Manager 2012 SP1, which also runs the WDS and WSUS roles for easy deployment of the Windows 8 Enterprise OS for the Soft Array devices.
- 3 Windows Server 2012 application servers each running the Soft Array server application and each serving its own structure.
Obviously the reason we are able to run all these servers on the tiny Shuttle box is that I we use Windows Server 2012 Hyper-V to provide us with enterprise-grade virtualization. At this point I should make it clear that we require this infrastructure to be as resilient as possible which is why we chose Hyper-V as the hypervisor and why made many of the decisions we did around architecture. Without Hyper-V features like Dynamic Memory and the ability to pass 8 cores into our VMs we could not run Soft Array from a single, low power server.
System Center Configuration Manager 2012
Deploying apps in this environment has been a critical task from the get go. With six groups of developers crunching code and creating many builds a day of the apps we needed to be able roll the Windows 8 apps out very quickly – as I said in 4 minutes. To be totally honest 4 minutes is the ideal and it’s not always achievable depending upon what else is currently sitting in the queue for a device to do at any point. Four minutes is however the shortest time that Configuration Manager 2012 can be set to use as an update period.
I have to say that once you totally understand the deployment process for a Windows 8 app the process is flawless. The process is that the developers need to make sure they increase the version number of the app everytime they do a build. Inside of Config Manager it’s then a really simple process to update the app – point to the new Appx package to the app, click update, done!
I also used CM12 to deploy the MSI files to setup the Array Configurator app on the client devices which allows us to set the devices up in the array and have the device notify the server of the devices location, this process again was flawless as you’d expect…that is once I’d remembered back to my Application Packager days and started incrementing the version number on the MSI file…oops.
Deployment of the Windows 8 Enterprise build was also managed through CM12. I simply imported the install.wim file from the Windows 8 Enterprise ISO and created a task sequence for deployment. I also created a driver package for the Surface Pro devices to make sure we had all the required drivers for the devices and set this package to be applied at build time. Each of the two “medium” Soft Array structures also has a pair of ASUS All in One PCs that form part of the array which obviously require different drivers from the Surface Pro. This again was a case of importing the drivers and having the package apply at build time.
Some of the coolest things from an IT management point of view happen with PowerShell v3 on Soft Array. First and foremost is ability to remotely launch the same app simultaneously across all the devices in a structure. This was something that I’ll post a more detailed technical write-up on. That said the essence of what happens is that through a CM12 package a group of scripts are downloaded to each device, an installation PS script then copies the scripts to a trusted location and sets up a scheduled task with no schedule time for each script. The scripts themselves launch one of each of the six Soft Array apps. A second script is also installed on each device but normally is run from the server and it’s purpose is to launch the scheduled tasks. Remotely.
This second script asks the Soft Array app servers for the IP Addresses of the devices in each array, it then does a reverse DNS lookup and displays a simple GUI that allows the operator to select an array app, and hit a Start button. The script then executes PS jobs on each of the devices to start the scheduled task that starts the script on each device. If you think this sounds long winded it is a little but that’s because we needed to work in a way that doesn’t break the security model for Windows 8 apps. The scheduled tasks are able to execute as the currently logged on user, something that even using CredSSP would be impossible remotely. Also it would be impossible on an iPad for many reasons.
PowerShell is also used for a couple of other fixes inside the arrays.
There will be some more technically detailed posts coming on how we built and designed each aspect of the IT Professional side of SoftArray but hopefully you have a flavour for the complexity of this type of project. It might look cooler than your average enterprise deployment but it really is just that, your average enterprise managent story. As a result of using the technologies above we’ve made Soft Array easy to manage and update and I’m not sure another a different platform would have given us the central control that we need.