Sep 23 2009

Windows 7 64-bit on an Aluminium Macbook Pro

There are many people who have had problems installing install Windows 7 64-bit on many older EFI based machines like the Aluminium Macbook Pro. The problem manifests itself in Vista SP1 64-bit.

There are a few articles around detailing why this is and many more showing how to solve it.

The problem is around the fact that the Windows Bootloader doesn’t seem to treat ISO9660 file version numbers correctly. To make a disc work and boot in EFI mode on these machines, you need to rebuild the ISO with ISO9660 version numbers suppressed.

However, all of these solutions required running Windows utilities to recreate the ISO. As I recently installed a new harddrive in my Macbook Pro I didn’t have a version of Windows installed that I could rebuild the ISO with.

I decided to find if I could create a compatible bootable Windows 7 DVD using only tools that are runnable under Mac OS X.

I used an article from jowie.com as a reference. It describes how to recreate the ISO with the fix using a 3rd-party Windows utility “Imgburn”.

I downloaded the latest version of “cdrecord” (formerly “cdrtools“) which includes the latest version of “mkisofs“, a *nix utility for creating ISO files with advanced options.

I managed to find the correct set of arguments to create a bootable DVD. DVD-RWs are my friend, although it only took 4 or 5 tries.

My machine is running Mac OS X Snow Leopard but I don’t see anything that won’t work on Leopard. These steps require the Mac OS X Developer Tools to be installed.

If you’re at this post, you may have already burned a copy of the Windows 7 DVD ISO (or a copy of Windows 7 Retail). I did, so I got the files for recreating the ISO from the DVD, you may choose to simply extract the contents of the ISO to a folder on your harddrive instead.

If you choose to use a folder, replace occurances of “/Volumes/GRC1CULXFRER_EN_DVD” with the folder you extracted the DVD to.

Here are the steps I took:

  1. Put the Windows 7 DVD in the drive or extract the ISO.
  2. Download the latest version of cdrecord from:
    http://freshmeat.net/projects/cdrecord/
  3. Extract the archive and run the following from Terminal:
    make
    make install
  4. Once again from Terminal:
    cd /opt/schily/bin/
    ./mkisofs -N -UDF -iso-level 4 -no-hfs -U -V GRC1CULXFRER_EN_DVD -no-emul-boot -b efi/bcd -c boot.catalog -o windows7rc.iso /Volumes/GRC1CULXFRER_EN_DVD

  5. Now burn the new ISO to a disc. You can use Disk Utility, Toast or any other ISO burning tool to do the job
  6. If you haven’t already, make sure you have either free unpartitioned space or a spare partition to install Windows on to.
  7. Reboot your machine, hold down Option to bring up the boot menu
  8. Insert the DVD into the drive (if it isn’t in there aleady).
  9. Select the Windows CD, Windows 7 should now boot without problems
  10. That is it.

    Once Windows 7 is installed, insert a Snow Leopard disc to install the 64-bit Boot Camp drivers. If you don’t have Snow Leopard, you can download the latest Boot Camp drivers from Apple’s download section.


Apr 11 2009

Caller ID laziness

At my house, we have a VoIP line provided by Xnet. In my house, I have a small QoS router that has two POTS plug that allow my to plug my normal phones into the VoIP line. What is even better is that the Caller ID that comes with the line also gets displayed on the phones I have.

As I’m incredibly lazy, I set about finding a way for my computer to tell me who was calling when the phone rang instead of having to find the cordless phone (or run to the corded one if it was flat) to check who was calling. I have set an option in the control panel at Xnet that sends me an email whenever someone rings my home, which includes the Caller ID but alas, it still takes the email about 30 seconds to arrive in my inbox (I check my email every 1 minute) so it didn’t really help to know who it was before I picked it up.

It turns out that the router’s status page displays the state of the VoIP line and also the last number that called it. Bingo! I whipped up a little PHP CLI script that polled the router’s status page for when the status was “Ringing” and captured the phone number displayed there.

I then added a piece of AppleScript that interfaces with Address Book on MacOS X which could translate a phone number into a name if that number was in the Address Book.

The last piece of the puzzle was to utilise the command line program called growlnotify to send out a Growl notification and made it send out to the two laptops in the house.

I placed this script on the Mac Mini I have connected in the lounge and set it running. A few bug fixes later and I now have Growl alerts show up on my laptop screen within about 3 seconds of my home phone ringing saying exactly who is ringing.

All in the name of laziness.

If anyone is interested, I can post the utility. The VoIP router I designed it for is the Linksys SPA-2102.


Oct 18 2008

Migrating Servers

Tom and I have decided to move all of our sites from our hosting at StartLogic to something a little more reliable. We decided to give MediaTemple‘s Grid-Service a go. I’ve been trying to get all our sites migrated over but because we want as little disruption as possible we needed everything that was running currently documented.

So far it has been fun, this site has been running from the new system for a couple of weeks now and I haven’t noticed anything that isn’t working and the control panel is great for a pseudo-shared-hosting control panel.

My workplace Evos has been using MediaTemple for over a year now and we’ve only had great customer service and awesome uptimes so we didn’t have any qualms about switching over.


Jun 28 2008

Network Topology

Last Thursday afternoon, a close friend of mine gave me a call to ask whether a discounted price he had seen for an iPod Touch was a good deal or not. He was pretty keen on getting an iPod Touch even though the iPhone 2.0 is released in a couple of weeks but he seemed pretty set and doesn’t have a need for another cellphone as his work supplies one for his use.

They don’t currently have a wireless network at their house and seeing as the iPod Touch has wi-fi capability we ended up discussing that I was interesting in selling my current Airport Express Wireless G base-station to upgrade my infrastructure to Wireless-N.

The main reason I wanted to upgrade was actually to have an Airport Extreme Base Station which would allow me to share both printers and also a couple of hard-drives over the wireless. The Airport Express only supports one printer and no hard-drives so I have had to switch USB cables around to print to the other printer in the past.

So, knowing that he was keen for that deal, I went out and purchased a new Airport Extreme Base Stations with Wireless-N and Gigabit ethernet. I also picked up a new Wireless-N capable Airport Express so that I could once again stream music to our downstairs speakers.

My next mission was obviously to map out how I wanted to set up the network and the devices. I love setting up network infrastructure, I don’t purport to say I’m any good at it at all but I find it a hell of a lot of fun.

I plan to sprinkle this blog post with diagrams of the old set-up and the new set-up but my laptop is currently at the shop getting its iSight looked at and I’m using a user-account on Aimee‘s laptop which doesn’t have anything that I can easily draw diagrams in. For now I’ll add a textual description.

My network consisted of:

  • An ADSL Modem/Router for internet connectivity
  • A LinkSys VOIP to POTS adapter, for use with our Xnet Fusion VOIP account
  • An Apple Mac Mini, connected in the lounge for entertainment purposes
  • Two Apple MacBook Pro Laptops
  • An Apple Airport Express, currently in use only as a base station since we moved to our new house

Then I added:

  • An Apple Airport Extreme Base Station
  • A new Apple Airport Express

And I’ve packed up the old Airport Express.

I wanted to add to the network

There are a couple of restrictions this placed on the network. For internal network QoS, the Linksys VOIP Adapter needs to be placed between the router and the network so that voice traffic gets injected right at the router. This also means that our cordless phone and corded phone need to be connected within a few meters of that adapter.

The RAID enclosure isn’t network capable so it needs to be connected  with a meter or so of the Airport Extreme Base Station. As do the printers.

Also, the only two locations in the entire house with a phone plug are the kitchen/dining area and the master bedroom.

So I went ahead and picked out a possible solution. It all works pretty well.

I went the whole hog and set up my Wireless-N network on the 5GHz frequency using wide-channels to get maximum possible throughput. We don’t have any 802.11b or g devices in the house (or so I thought) and I doubt anyone in our close proximity has a 5GHz network set up so all was well.

I have the router in the master bedroom and an ethernet cable running from that into our work room. In there is the Base Station, the hard-drives, the printers and the VOIP adapter attached to the cordless phone base.

Downstairs I have the Airport Express and the Mac Mini. As I eluded to above, it turns out that the Mac Mini isn’t Wireless-N capable as I thought it was, it only supports 802.11b and 802.11g so it ended up being connected via gigabit to the new Airport Express as they’re right next to each other anyway. The Express is currently connected to the Base Station using WDS.

I had a fun time setting up the printers. I decided to stretch USB to the limits and see how far away I could keep the printers from the base station. It turns out it is 7 meters keeping to the skirting board to the first printer and another 3 meters to the second where they are placed quite conveniently now. There is a maximum length of 5 meters between devices  so I pulled out an old USB Active Extension cable, then plugged in a  2 meters of USB extension, followed by a USB hub and then plugged the first printer in using a short cable and used a 3 meter cable to reach to the other printer.

I thought I had all my numbers worked out but for some reason, the base stations wasn’t recognising either of the printers! I played around a little and found that the base station didn’t like the active extension cable plugged into it, but it didn’t mind having a hub first and then the active extension so I went down that road. Turns out I would have had to add that initial hub anyway to plug in the hard drives next to the base station so all is well.

I wasn’t particularly pleased with the file transfer throughput so I ended up playing around with WDS, wide-channels, different frequencies and even forcing the base station down to wireless-g to see if I could find out what was happening.

I’m just finishing up testing the network performance using the various settings which I’ll post about at a later stage.


Jun 22 2008

Hosting Woes

Tom and I have had a hosting account with Startlogic for a few years now, it was very competitively priced and we wanted a cheap VPS. We haven’t had too many problems up until now, the uptime is good and the problems faced so far have only been with slow response times to online tickets and email.

This post gets into technical details of the DNS system and what went wrong so unless you’re interested in reading technical details, you may want to skip down to the end of this post. [skip]

In terms of DNS, our server runs named (BIND) so it can be a nameserver for any domains we host. This really isn’t a very good option for so many reasons. Two of these reasons are:

  1. You should use two separate name servers which are geographically dispersed.

    Using a single server for a nameserver means there is a single point of failure.

  2. Downtime on the VPS account will mean that after a while, the DNS records cease to exist on the internet.

    One effect this has is that if the VPS account goes down or needs to be rebuilt and it is down for longer than the Expiry time on our domains, mail sent to those domains will be bounced and not be resent automatically.

There are plenty of references for this information on the internet.

StartLogic set us up by putting our primary domain name’s DNS record on their geographically dispersed name servers meaning it would be quite resilient to network failures.

They then told us that if we wanted additional domains pointed, we could just email them. This is what we did for about 2 years.

Tom actually forgot this and has a few of our client’s domains pointing to ns1 and ns2.yigg.net (as Startlogic suggest now).

Anyway, at some stage, they accidently signed us up for an additional account, a standard hosting account, under our primary domain name. This hadn’t caused any problems at the time because they didn’t touch the DNS records.

What happened was that they recently upgraded all standard hosting accounts to a new platform. This meant the erroneous account was moved onto a new server. Last week they completed the migration and changed the DNS record.

Suddenly, I couldn’t get to our control panel*. Yigg.net was resolving to a completely different IP. So I figure there as been a problem and phone through to them.

Now I must mention here that earlier this year we received an email from a representative at IPowerWeb, the parent company (?) for StartLogic saying that he was our point of contact if we needed anything, we could call him.

So, I rang through and discussed somethings and then got put through to a technician. After a while he figured out what had gone wrong after I explained the situation and he found out VPS account and said he’d get those DNS records corrected and pointed back to our VPS account. He said he would also delete the erroneous standard hosting account.

Only the latter got done, probably a mistake, the guy I spoke to seemed really helpful and the extra hosting account got deleted quick smart. The account switched to a holding page instead of the “VDeck Default” page it was showing before. So I waited to see if their servers would update and start announcing the correct IP again.

You need to wait up to 48 hours for a DNS change to reach everyone in the world (worst-case) but there is a trick to finding out if the change has started propagating. On Mac OS (and most *nix machines) you can query a DNS server directly for what it thinks the IP address is for a domain. Because I knew the name of the authoritative server with the record on it, I could ask it directly and see whether it was announcing a the correct IP.


# dig yigg.net @ns1.startlogic.com

; < <>> DiG 9.4.1-P1 < <>> yigg.net @ns1.startlogic.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 53630
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yigg.net.			IN	A

;; ANSWER SECTION:
yigg.net.		3600	IN	A	66.96.134.55

;; Query time: 291 msec
;; SERVER: 66.96.142.100#53(66.96.142.100)
;; WHEN: Sat Jun 21 23:35:01 2008
;; MSG SIZE  rcvd: 42

It wasn’t.

I actually forgot about it until lunch time the next day when I Tom got an email from a client saying his email was no longer coming through. Turns out, his name servers were set to ns1. and ns2.yigg.net which now resolved to Startlogic’s standard hosting account, not to BIND running on our VPS account.

So I wrote a support ticket explaining the situation and then phoned America to get them to sort it out as soon as practically possible. The support representative said a technician was looking at it right then. So I hang up and waited… and waited. No change.

The next day I updated the ticket again trying to clarify what needed to be done, point yigg.net back to our VPS’s IP address and away from the IP it was incorrectly set to previously.

Today, later I rang them again to see what was going on. The representative then proceeded to tell me that what I wanted wasn’t possible any more and that I needed to set up name servers myself. I got quite confused as to what she was asking me to do because she said that I wouldn’t need to sign up with a DNS provider, I could do it all through the registrars control panel.

The main problem with that, is that I didn’t know where that was, as we registered the domain with StartLogic, they had taken care of registering it, setting up the contact information and adding their name servers to the records. I realised when she told me the URL to go to that I had been there before, to update my contact details when I was told I had to. She couldn’t tell me the username and password so I had to figure that out myself, which I did without too much trouble.

What I couldn’t figure out was what she was asking me to do. She said I needed to “create a name server” for my domain name. Now, in normal domain name management talk, that means setting up a box running BIND and telling the registrar to hold a glue record pointing to this box. It turns out that she was simply asking me to add glue records at the registry level for our VPS (which is running BIND already).

There is a difference between creating a name server and simply pointing A records at a registry level at it.

If anyone from Startlogic reads this blog post. Please reconsider this policy, the way it worked for the last two years was much more reliable and didn’t require a user to go into that unbranded OpenSRS management console to try and decipher fairly non-standard terms.

In terms of customer service, they get a low score. I got it resolved in the end, if it hadn’t I would have called my contact at IPowerWeb and got put through to someone who may’ve been more helpful, I’m not sure though.


* I could still get to our control panel as I just needed to access the correct at our IP, it doesn’t require a hostname to get into the control panel but I think I was only one who knew that (don’t know if Tom did and I knew James didn’t).

** If anyone has a problem with this post (including StartLogic), I will take it down and replace it with one about not using a single domain name server in a VPS situation, which is still relevant but applies to a few more hosting providers.