“We argued with Steve a bunch [about putting iTunes on Windows], and he said no,” Rubenstein recalls. “Finally, Phil Schiller and I said ‘we’re going to do it.’ And Steve said, ‘F#@k you guys, do whatever you want. You’re responsible.’ And he stormed out of the room.”
If Phil and Jon hadn’t had the self confidence to push forward regardless, where would Apple be today?
After getting the separate network segment set up yesterday and installing Active Directory, it was time to configure DHCP server to hand out leases for that subnet and automatically update DNS. On the Windows 2012 Server, install the DHCP role and management tools. Launch the DHCP management tool and configure a new scope that includes the following:
Set the scope to a range on vmnet2 that doesn’t include the router VM and the Domain Controller.
Set the options for DNS Server (the IP address of the Domain Controller), the Router (the IP address of the Router VM), and the domain suffix for the Active Directory
Right click on the scope and select Properties. Under the DNS tab, make sure the settings allow DHCP to update DNS records.
As you build out your CentOS VMs, use vmnet2 (Host-only) as their network adapter and, provided the router and Domain Controller VMs are up, they should receive the appropriate IP information and be able to route to the internet for software updates. However, by default CentOS will not forward it’s hostname to the DHCP server for the DNS update. To enable that, on each VM edit the /etc/sysconfig/network-scripts/ifcfg-<interface> and add the following line:
When building a test Active Directory environment in VMware workstation, it’s a good idea to have the environment on an isolated network segment with a single VM serving as a proxy to the internet (for updates and software installs). I typically use CentOS for this role since it is lightweight and does not expire after 180 days.
First of all, create a non-DHCP enabled Host-Only network in the Virtual Network Editor. This will allow you to use Windows DHCP for automatic DNS enrollment on this subnet (among other things). In the screen shot below, this is labeled vmnet2 and is on the network 192.168.6.0:
Next, create a CentOS VM with two network interfaces – the primary one should be ‘Bridged’ and the secondary one should be the Host-only one you just created. Install CentOS (a minimal install is all that is required):
Once CentOS is installed, you’ll need to modify the scripts to bring up the network interfaces. These are the settings I’ve had success with:
After this, you’ll need to configure IP NAT and forwarding in CentOS – first, edit the following line in /etc/sysctl.conf: net.ipv4.ip_forward = 1 and run the following command to reconfigure the currently booted install: echo 1 > /proc/sys/net/ipv4/ip_forward
Next, you’ll need to configure iptables to masquerade the connections across eth1. This will drop the current iptables configuration and is not the most secure configuration, but it works well (and can be later tightened down once it is functionally working):
Finally, create a Windows VM with a single interface on vmnet2. After it is installed, statically define the network interface with the information from vmnet2 using the CentOS’s eth1 interface as the gateway. This should allow you to get online from the network segment for updates and license authorizations.
Fairly recently, I inherited the support responsibilities for quite a few PHP and WordPress on Windows installs across the server population. After creating the initial documentation, I started automating as much of PHP maintenance as possible, including the ability to perform side-by-side PHP upgrades with the ability to roll back to previous runtimes via Microsoft’s excellent PHP manager. The script is out on GitHub, but I wanted to offer a bit of instruction here as well.
Download the required version of PHP from windows.php.net. Make sure to use the non-thread-safe version, and pick the zip file rather than the installer. Unzip the contents to a consistent directory accessible from the PowerShell script (for example, php-5.4.19).
Modify the following PowerShell variable to point to the location from step 1: $phpInstallMedia
Modify the following PowerShell variable to indicate the PHP version: $php_version
Modify the following PowerShell variables to install PHP and configure logs and temp folders for your environment: $php_install, $php_log, $php_temp
Download the appropriate version of PHP Manager from http://phpmanager.codeplex.com. Unzip it to a consistent directory accessible from the PowerShell script.
Modify the following PowerShell variable to indicate where the PHP Manager MSI is placed: $phpmgrInstallMedia
Modify the following PowerShell variables to configure default folders for IIS in your environment: $web_root, $web_log
After those variables are set to match your environment, the script should install PHP, WinCache, and reconfigure the default WWW root and WWW log folders. If you get an error about execution policy, using set-executionpolicy in PowerShell to adjust the security parameters should resolve that easily.
Periodically reviewing thresholds in VCOPS is a good idea to make sure the reporting matches what is seen in production – as platform changes occur in your environment, thresholds in VCOPS may become outdated. This can increase the cost of your environment since “idle” VMs may go unreported – especially if new software is rolled out across the entire environment such as security or monitoring software. It is a good idea to maintain a single VM with nothing other than what is considered standard platform to gauge what thresholds should be set to find truly “idle” VMs.
This is a very quick and dirty powershell script I wrote to scan documents via WIA and send them straight to Evernote after converting them to JPGs (and deleting the original BMP scan). This assumes that the utility bmp2jpg.exe is in the same folder the script. I will get it up on GitHub in a few days and update this post in case someone wants to clean it up and extend it – it met my initial need of scanning in a bunch of receipts quickly.