Dual boot Windows XP and CentOS 5 with NTLDR

I wanted to install CentOS onto a spare partition on a machine with Windows XP already installed, leaving the MBR as it was and using the NTLDR bootloader. CentOS installed fine onto the partition but the installer only seemed to offer two options for setting up GRUB: installing to the MBR or not installing at all; there wasn’t an obvious way of getting it to install onto the boot sector of the CentOS partition. There might have been some more advanced options in the installer but I didn’t have the time to experiment (I’m fairly new to CentOS/Red Hat/Fedora, being more of a Slackware and Debian-family user normally), so I elected to not install and set up afterwards. This leaves CentOS unbootable, but with a bootdisk like sysresccd and a basic knowledge of GRUB it’s fairly straitforward to fix this. Here’s a rundown on what I did, which might be useful in a similar situation or when having trouble with a b0rked GRUB installation.

Obviously the partition details specified below are derived from the system I was working on, where the hard disk is/dev/sda, Windows is on /dev/sda1 and CentOS on /dev/sda2. There is a swap partition on /dev/sda3 but it isn’t relevant for this exercise.

Also, you follow these instructions at your peril. It is all too easy to screw up and make your entire system unbootable, lose data or just render the whole process more painful than it has to be. Back-up, read relevent documentation before you begin, back-up, check the sytax of the commands you type before executing them and have I said back-up?

  1. First, if you are not familiar with GRUB browse the documentation. The steps below are fairly terse and not pitched at total beginners. They also assume a familiarity with basic shell commands.
  2. Once the CentOS install is complete reboot using sysresccd.
  3. Create a mount point for CentOS’s root partition, e.g. /boot/centos, and mount it:

    # mkdir /boot/centos
    # mount -t ext3 /dev/sda2 /mnt/centos
  4. Mount your Windows partition (/mnt/windows is usually present):

    # ntfs-3g /dev/sda1 /mnt/windows
  5. Copy the following files:

    # cp /mnt/centos/usr/share/grub/i386-redhat/stage1 /mnt/centos/boot/grub
    # cp /mnt/centos/usr/share/grub/i386-redhat/stage2 /mnt/centos/boot/grub
    # cp /mnt/centos/usr/share/grub/i386-redhat/*_stage1_5 /mnt/centos/boot/grub
  6. Launch GRUB. Fortunately sysresccd and CentOS 5 both use GNU GRUB 0.97, so there are no compatibility problems.

    # grub
  7. This will dump you into GRUB’s command interpreter. You need to set the root drive and then install GRUB into the partition’s boot sector as follows; output from the commands represented by elipses but note that you might get warning messages – as long as the final message indicates success, you should be fine. Oh, and be careful to ensure you install this onto the correct partition – remember GRUB starts counting partitions at 0, not 1 like Linux!

    grub> root (hd0,1)
    ...
    grub> setup (hd0,1)
    ...
    grub> quit
  8. Next you need to create the file that NTLDR will use to hand-off booting CentOS to GRUB, basically the first 512 bytes of the partition:

    dd if=/dev/sda2 of=/mnt/windows/bootsect.lnx bs=512 count=1
  9. Next modify /mnt/windows/boot.ini to include a line for CentOS at the end. The cautious may wish to reboot into Windows to modify this file.

    C:\bootsect.lnx="CentOS 5"
  10. Reboot. You should now see a boot menu offering you Windows and CentOS 5. If you don’t, check C:\boot.ini for a timeout stanza and edit accordingly. Selecting CentOS 5 will dump you back into GRUB’s shell – GRUB is installed but doesn’t have a configuration file set up. You can use the following commands to boot CentOS 5:

    grub> root (hd0,1)
    grub> kernel /boot/vmlinuz-2.6.18-8.el5 ro root=/dev/sda2 rhgb quiet
    grub> initrd /boot/initrd-2.6.18-8.el5.img
    grub> boot
  11. CentOS 5 will then boot and you can complete the installation. Depending upon your choices, you may need to reboot again using the above procedure.
  12. Once complete you can configure GRUB to boot automatically by creating /boot/grub/device.map, /boot/grub/grub.conf and /boot/grub/menu.lst. The device.map file should just contain a single line mapping the linux hard disk device to a GRUB device notation:

    (hd0)   /dev/sda

    The grub.conf file specifies the various boot options, in our case a fairly straitforward single kernel and ramdisk image:

    default=0
    timeout=5
    hiddenmenu
    title   CentOS (2.6.18-8.el5)
            root (hd0,1)
            kernel /boot/vmlinuz-2.16.18-8.el5 ro root=/dev/sda2 rhgb quiet
            initrd /boot/initrd-2.6.18-8.el5.img

    Then, with /boot/grub as your working directory, do:

    ln -s grub.conf menu.lst
  13. Now when you reboot and select CentOS from the Windows boot menu GRUB should automatically start CentOS after a five second timeout. You can add additional entries to the grub.conf file – custom or testing kernels, memtest86+, etc – then view the menu within the timeout period to select them.

I’m more than happy to get feedback on stuff like this, even if it’s just to tell me I’m an idiot and could’ve done it in a simpler way. There’s no commenting system here at the moment, but please feel free to email me with questions or suggestions, or even if you just found this useful.

Balloons and Blackberries

Bristol’s annual Balloon Fiesta has just wound up (I’ve written about this before, and taken photos too). We’ve had some good weather recently and Perrett’s Park, which overlooks much of Bristol, has been busy in the evenings with people watching the launches taking place over at Ashton Court.

Two out of three evenings the wind favoured us and the balloons passed by low overhead, much to the delight of all the children present. I didn’t take so many pictures this year, but you get the general idea from this – balloons at dusk. They do early morning launches as well, but as I was on earlies this week I missed them.

As I mention above, the kids love the balloons. Our eldest has also just discovered another summer delight – wild blackberries. We’re fortunate enough to have a lot of green space around us even though we live in the city and at the overgrown local cemetery, the city farm and around the nearby allotments the brambles are heavy with blackberries at the moment which the kid would eat until she was sick if we let her.

We went over to Arnos Vale before lunch and let Uma run around while we picked a bag or two to bring home. It’s great to be able to do this in the city; both Polly and I grew up in the countryside and we occasionally worry that our kids might miss out on things like this. We eventually tore Uma away from the free food and took our pickings home.

We’re not sure what we’ll do with them yet. Crumbles, jams or just as they come. Yum!

Weblog reboot

It’s remotely possible that last night someone might have dropped by this site to be greeted by an HTTP 500 or pulled a feed with some rather old content, as I finally got around to re-posting the content from between November 2002 and March 2005. I’d hoped to recategorise everything into the simpler structure I created following the domain move and rebuild, but that’s just not going to happen so I have dumped the entire structure of the old site under weblog/original. There’s an archive page; I intend to merge this with the current site’s archive, so bear that in mind. I might also whip up a sitemap type page where you can browse by topic/directory.

It wasn’t too difficult a task, but it did involve a but of fiddling and some quick fixes once the content and metadata files were in place as I overlooked the fact that I switched file extensions when redesigning the site and this initially caused me a bit of headscratching. Thanks to sed, find, xargs and rename I soon got this sorted out. If you ever need to change multiple file extensions in a directory hierarchy on a linux box (in this case .txt to .blx) try this for size:

find ./path/ -iregex ".+\.txt$" -print0 | xargs -0 rename "s/\.txt$/\.blx/"

or maybe:

find ./path/ -iregex ".+\.txt$" -exec rename "s/\.txt$/\.blx/" '{}' \;

But you’ll find the first command works faster, particularly if you do a test run with the -n switch on rename.

Unfortunately a lot of the markup in the older posts is HTML rather than XHTML, so you might get XML parser errors on same pages if you’re using a browser that can handle application/xhtml (Firefox, Opera). I’m slowly working my way through the site trying to fix these problems but it might take me a while, so please bear with me – a lot of the older posts were handcoded using a variety of text editors on various platforms and often in a hurry and markup wasn’t always my primary consideration. Also, I’ve yet to get the final batch of redirects from the old URL sorted so there might be the odd dead link or missing image, but that should be sorted faster than the parser errors.

Busy Weekends and other things

Hey, over a week since I last posted. That’s better than eight months. You’d think that I’d get more of a chance to do things like this at weekends given the fact I don’t blog from work, but it just doesn’t work like that when you’ve got kids. If anything, my weekends are busier and more manic than my workdays and I’m often more tired than on a weekday by the time they’re tucked up in bed. Besides, we often have friends or family over at weekends, which usually means the evening are full too.

Not that I’m complaining about any of this, merely pointing out why no more likely to post at weekends than I am during the week. I reckon the most opportune times for recreational blogging for someone with a none-blog-friendly full time job and two small children are weekday evenings and the occasional moment like now when I’m home from work early and Polly’s out with the kids.

In addition to all of this, the weather has finally improved and we’ve been spending our evenings sitting in the shade on our balcony looking out over Bristol. We’ve got a fantastic view, and I think you’ll agree that sitting outside sipping a drink and watching the sun set is hard to improve upon.

There’s a couple more like this on Flickr (1, 2, 3), plus a whole lot more.

BBC iPlayer

The BBC are testing a new service whereby it’ll be possible to download TV content from the previous seven days over the internet. This is a great idea. Unfortunately they are currently committed to using a broken, DRM-based system that only works on Windows XP. There are a whole host of reasons why this is a bad idea (some of which are outlined and linked to from this brief report at the Open Rights Group site). The main reason I object is the fact that it locks out license payers who do not use or have access to this particular expensive and proprietary operating system, or choose not to use it for security, ideological or other reasons.

So, if you are a British citizen and BBC license fee payer, please consider signing the iPlayer petition at petitions.pm.gov.uk.

Posted in Uncategorized

pipes.yahoo.com

Now this looks pretty cool, although I haven’t got a proper handle on it yet. It’s totally passed me by until today – I don’t remember even noticing it mentioned anywhere, which surprises me as it’s the sort of site I’d expect to have picked up on, but then I suppose there are a lot of new sites and neat ideas out there.

I may not have much time to mess around with it properly but it might at the very least scratch my personal itch of creating a unified feed containing my own disparate feeds (this blog, flickr, del.icio.us, etc). I was comtemplating coding something up myself to do just that only earlier today but wasn’t sure when I’d get the time – this might save me the bother. More anon.

Posted in Uncategorized

Sustainable Blogging

I’ve been itching to start blogging again for months and I’m glad that I have even if I have no readers right now. Previously I ground to a halt not only because I had far less time to do it, but because I had slowly started making posting into a big deal and would spend hours tweaking drafts and then not posting stuff because it had come to seem trivial. I never had a massive readership and that’s never really bothered me – I wouldn’t keep coming back to it if it did – so it always frustrated me that I let this happen.

Then I read something today which solidified my feelings on this, funnily enough on the blog of a chap who had also recently taken up blogging again after a hiatus. His name’s Russell Beattie, he’s got a lot of interesting stuff to say and his last blog was quite widely read in some parts of the tech blogosphere, but on blogging he had this to say earlier this month:

One of the pieces of advice that I give to new bloggers regularly is post, post, post. Get a routine and stick with it, because if you don’t, you’ll start to build up what a blog is in your mind, and eventually you’ll just stop posting because it seems like this massive hurdle to overcome. My advice is always the same, post when you think about posting, and if you’ve got nothing to say, just say that just to keep in the rhythm. Most people don’t bother listening to me, but that’s okay, it works for me.

I read that and it clicked. He’s right, and this is what happened to me, hence this evening’s two posts. Both stuff I’d been turning over in my mind and thinking of writing about while also wondering whether it was worth it. Of course it’s worth it – I enjoyed banging these posts out and it’s left me feeling satisfied; so thanks, Russ, for helping crystalise my own thoughts on the matter and giving me a prod in the right direction. Maybe I’ll even take your advice and keep it up over the coming days and weeks.

Posted in Uncategorized

Google Reader and IE 7

I’ve started to use Google Reader recently and when doing a bit of lunchtime feedreading at the office noticed that IE 7 on XP doesn’t honour the
<pre> tags in post bodies. FireFox does. I can’t believe that I’m the only person to have noticed this, but a cursory google around the subject didn’t come up with much – a few list and forum posts without much followup. Do so few of the tech-minded feed-reading public use IE 7? Maybe it’s just a reflection of my poor googling skills or lack of patience. And while I’m on IE 7 vs. FF, I’ve also noticed that some of Microsoft’s own websites render far better in FF – parts of the revamped Technet pages for example. Try increaing the font size in IE 7 and watch what happens.

I wouldn’t really care except that we don’t support FF on the office network and as a senior admin I feel that I should follow policy on this. I do have FF installed for testing purposes (sorry, Brian) but I sort of feel I should stick to IE under most circumstances. Also, Google Reader is the only way I can see my own blog from work – we use a fairly fierce filtering system that currently bans personal websites amoung other things and it seems that the whole of .me.uk is unavailable.

Actually this leads me on to the delicate subject of blogging and the workplace. I’m not sure if many people at Renishaw really “get” blogging, so as a rule I’m going to avoid talking about work here. I certainly won’t be blogging from work. Every so often I’ll no doubt touch upon things like today, but I’m going to draw a line for the time being. This still leaves me with plenty to talk about though, as there’s far more to my profession that what I currently do on a day-to-day basis. Plus there’s the interweb, and all the other trivia I like to think and blather on about, so hopefully my self-imposed restrictions won’t grate to much.

Luckily, I have a backup

A brief power cut early this evening seems to have knocked out at least two partitions on a big hard drive on my home server/workstation that holds my entire mp3 collection, photos and MySQL backup dumps. Luckily, I have a backup, and the one partition I’ve added data to since the last backup (my photos) appears to be readable, thank fsck.

It is so worth having a backup strategy for home use, so I thought I’d take this opportunity to outline mine. I have three machines – a house server/workstation, a scratch box, and a laptop. I back up the laptop to the house server, ignore the scratch box, and back up the house server to a Seagate USB hard disk. I’ve been thinking about sorting out a NAS of some kind but right now a couple of big-ish disks are adequate.

The reason I’m comtemplating NAS is because right now my backups rely on self discipline – hence the fact that there are a few photos missing from the most recent one. I have to attach the USB hard disk and run a script manually. It would be better to have a NAS appliance sitting in a cupboard and a cron job. Then all I’d have to worry about would be off-site backups. And you think I’m joking.

As for the script/backup method, well if you’re on any kind of *nixen it’s just got to be rsync. There really is not competition here. If you’re stuck in the world of Windows NT then I suppose that you can use the supplied NT Backup software, not a patch on rysnc but functions well enough if you can be arsed with the clunky GUI. Last time I looked the Win32 port of rsync wasn’t doing much.

Anyway, here’s my current crude-but-effective rsync script. The Seagate drive is labelled SEAGATE and formatted ext3. GNOMEs volume manager widget just detects and mounts it on power up. I like to keep things as simple as possible, so the script doesn’t have as much error handling as I might put in normally, but I run a few checks before kicking it off. Comments and queries more than welcome, and if you use this code then not only do I pity you I also disavow all responsibility for any damage you might end up doing to your data.

#!/bin/bash

# $Id: seagate-backup,v 1.4 2007/07/26 21:33:30 sam Exp $

# Array containing list of directories to back up:
BACKUPDIRS=(\
"/home" \
"/media/music" \
"/media/photos" \
"/var/spool/mail" \
"/var/www" \
"/media/backups/SQL"\
)

# Mount point for the USB hard disk:
SEAGATE=/media/SEAGATE

# check we're running as root:
if [ $UID != 0 ]; then
    echo "Script must be run as root! Aborting."
    exit 1
fi

# check mount point:
if [ ! -d $SEAGATE ]; then
    echo "$SEAGATE not found! Check backup medium."
    exit 1
fi

# Set up arguments to use with rsync.
if [ -n "$1" ]; then
    if [ $1 == "--delete" ]; then
	ARGS="-avz --delete"
    else
	echo "bad argument: ${1}, exiting."
	exit 1
    fi
else
    ARGS="-avz"
fi

# locate rsync and basename
RSYNC=`which rsync`
BASENAME=`which basename`

# go through $BACKUPDIRS doing checks and backing up:
for i in "${BACKUPDIRS[@]}"; do
    if [ ! -d $i ]; then
	echo "Skipping ${i}: not found!"
    elif [ `ls -la ${i}/ | wc -l` = 3 ]; then
	echo "Skipping ${i}: appears to be empty!"
    else
	echo "Backing up ${i}, please wait..."
	$RSYNC $ARGS ${i}/ $SEAGATE/`$BASENAME $i`
    fi
done

# bye...
exit 0

Posted in Uncategorized

Long time no blogging

Well hello world! It’s been a while, and there’s plenty been happening. I’m father again, and now have two lovely daughters. That should go at least some of the way to explaining why there have been no posts for a while. I do still post photos to my Flickr pages and even some bookmarks to my del.icio.us bookmarks. If you know me and have a Flickr account do mark me as a contact and I’ll do likewise, friends and family get to see more family stuff.

Anyway, there’s lots been happening and I struggle to keep up these days, whether it be politics or tech or scifi or any of the other things I’m interested in. I ain’t got a lot of content for this post I’m afraid, it’s more of a placeholder to show I’m still dropping by the site from time to time. In fact, I think that this is my first post of 2007… considering I’ve been blogging on and off in some form since late 2002 that’s the longest gap.

I suppose that after such a long quiet period it’s fairly safe to bet I don’t have much of a readership. Maybe if I start posting some more, set up a commenting system, and participate in some other fora I might get that sorted. I reckon I could contribute a few things to one discussion or another out there.

Now I’ve said that, I bet I don’t post again for months. One last thing, if there’s anyone subscribing to my feeds, please consider taking the time to drop me an email and let me know, the logs are so full of noise it’s difficult to tell if there are people on the end of any of the GETs.

Posted in Uncategorized