Featured Posts

SciPy 2008 - Software & Tools STATUS: Day 1 - Thursday: Concluded. Day 2 - Friday: In progress. Astronomy: Enzo [ home ] yt (related to Enzo) [ home | scipy ] Books: Computational Modeling and Complexity Science...

Readmore

An example of checking out a git tag using Qt 4.6.0... Clone the Qt repository: $ git clone git://gitorious.org/qt/qt.git Show available tags: $ git tag -l output: v4.5.1 v4.5.2 v4.5.3 v4.6.0 v4.6.0-beta1 v4.6.0-rc1 v4.6.0-tp1 Checkout v4.6.0: $...

Readmore

Building 64-bit/32-bit Debug&Release Universal Build... See my directions on checking out Qt 4.6.0 from the git repository if you do not already have the source code. Launch a Terminal and cd to the source directory. Run configure w/ 64-bit & 32-bit...

Readmore

  • Prev
  • Next

NX> 147 Server capacity: reached for user: – FIX

Posted on : 31-05-2012 | By : Brandon W. King | In : Computers/IT, Error Fixes, Linux, Mac OS X, Systems Administration

Tags:

0

If you get this wonderful NX error message and are looking to fix things, I believe I have the solution:

NX> 203 NXSSH running with pid: 19955

NX> 285 Enabling check on switch command
NX> 285 Enabling skip of SSH config files
NX> 285 Setting the preferred NX options
NX> 200 Connected to address: <ip address> on port: 22
NX> 202 Authenticating user: nx
NX> 208 Using auth method: publickey
HELLO NXSERVER – Version 3.2.0-73 OS (GPL, using backend: not detected)
NX> 105 hello NXCLIENT – Version 3.2.0
NX> 134 Accepted protocol: 3.2.0
NX> 105 SET SHELL_MODE SHELL
NX> 105 SET AUTH_MODE PASSWORD
NX> 105 login
NX> 101 User: <user>
NX> 102 Password:
NX> 103 Welcome to: <host> user: <user>
NX> 105 listsession –user=”<user>” –status=”suspended,running” –geometry=”2560x1024x24+render” –type=”unix-kde”
NX> 127 Sessions list of user ‘<user>’ for reconnect:
Display Type             Session ID                       Options  Depth Screen         Status      Session Name

——- —————- ——————————– ——– —– ————– ———– ——————————

NX> 147 Server capacity: reached for user: <user>
NX> 105 startsession  –link=”adsl” –backingstore=”1″ –encryption=”1″ –cache=”128M” –images=”512M” –shmem=”1″ –shpix=”1″ –strict=”0″ –composite=”1″ –media=”0″ –session=”<session>” –type=”unix-kde” –geometry=”2560×976″ –client=”linux” –keyboard=”pc105/us” –screeninfo=”2560x976x24+render”

NX> 599 Server capacity: reached for user: <user>
NX> 500 ERROR: Last operation failed.
NX> 105 NX> 280 Exiting on signal: 15

Solution:

  1. ssh onto the system
  2. use top or ps to find nxagent (and maybe nx*) for your user
  3. kill those processes
  4. log in with nx

Building 64-bit/32-bit Debug&Release Universal Build of Qt 4.6.0 on Mac OS X 10.6 (Snow Leopard)

Posted on : 08-12-2009 | By : Brandon W. King | In : Compiling Code, Computers/IT, Mac OS X, Software Development/Engineering

Tags: , , , ,

0

See my directions on checking out Qt 4.6.0 from the git repository if you do not already have the source code.

Launch a Terminal and cd to the source directory.

Run configure w/ 64-bit & 32-bit + debug & release using cocoa and frameworks:

$ ./configure -arch “x86 x86_64″ -debug-and-release -opensource -framework -cocoa

Run make:

make -j <number_of_processor_cores>

OR

make

Go away for a long time (many hours); watching a tea-pot boil many times over will be less painful than watching this process.

Install:

sudo make install

You should find the installed build in /usr/local/Trolltech/Qt-4.6.0/. I hope this is helpful.

Dell Vostro 400 – Ubuntu/Kubuntu Linux

Posted on : 22-02-2008 | By : Brandon W. King | In : Computers/IT, Error Fixes, Linux, Systems Administration

Tags: , , ,

0

I was able to get a Dell Vostro 400 to work with Kubuntu 8.4 Alpha 4 LiveCD. I used the installer and it resized the Windows XP partition just fine… What I did to get this to work is written below:

Okay, SATA cdroms and Linux don’t seem to be mixing very well… at least not with Ubuntu/Kubuntu 7.10. If you pop in one of the live cds, it will likely give you an IO Error when you select any item on the live cd boot menu.

As it turns out, that problem is fixed in Ubuntu/Kubuntu 8.4… but it’s not out yet being Feb 22nd (Release date scheduled for April). But, the live cd works with 8.4 Alpha 4 (looks like Alpha 5 came out today), which can be found here: https://wiki.kubuntu.org/HardyHeron/.

When I booted the live cd, the screen went blank… The next time I booted off the live cd, I choose F6, and removed “quiet splash” from the kernel arguments.

At some point you might run into an error like:

Feb 22 21:55:19 localhost ata2: failed to recover some devices, retrying in 5 secs

If this happens add the kernel argument irqpoll and it should bypass/fix the problem (not sure which; it just worked).

To add the irqpoll option in the live cd:

  1. Select F6
  2. Remove “quite splash”
  3. Add “irqpoll”

To add the irqpoll option to grub (once installed):

  1. Replace # defoptions=quiet splash with # defoptions=irqpoll

I am in a bit of a hurry during this post today, so if you have any questions or would like me to expand on something, just post a comment.

Django App + mod_fcgid + Apache 2 Setup on Mac OS X & Debian/Ubuntu Linux

Posted on : 31-01-2008 | By : Brandon W. King | In : Computers/IT, Error Fixes, Mac OS X, Systems Administration

Tags: , , , , , , , , , ,

0

Update 2008Feb11:

From rather obscure comment from ‘apt-cache show python-flup’ on a Debian system, I discovered that flup has been superseded by http://www.modwsgi.org/. It is probably worth checking out mod_wsgi instead of mod_fcgid for Python web applications. Based on the documentation for mod_wsgi integration with Django, I am planning on switching. I will post my results in a future post.

Required Software

mod_fcgid

Download Source and Install

For reference, here is the mod_fcgid INSTALL.txt… see my Mac OS X notes below it for changes required to get it working on Mac OS X 10.5 (Leopard):

NOTE: This module is for Apache2 ONLY

UNIXIt's tested on my RedHat8 and Solaris. But it should work on other *NIX platform.NOTE: This module MUST run on share memory supported system

1. If your Apache2 installation isn't in /usr/local/apache2, please edit Makefile and correct it2. cd $mod_fcgid_dir3. make   //in Mac you need Xcode tools, optional install on Install CD4. make install5. add the following line in httpd.conf

LoadModule fcgid_module modules/mod_fcgid.so

MAC OS X Notes

  • In Mac OS X Leopard, the Makefile needs to be changed from /usr/local/apache2 to /usr/share/httpd, then steps 3 and 4 above should work.
  • Step 4 requires: sudo make install
  • Step 5, you need to add the following to /etc/apache2/httpd.conf: LoadModule fcgid_module libexec/apache2/mod_fcgid.so
  • IMPORTANT: apache 2 on Mac OS X Leopard is 64-bit and by default, the make file does not build the 64-bit module. To do this, you need to add the following to the Makefile after the EXTRA_CFLAGS option (too far above that will cause it not to work apparently):
CFLAGS = -arch ppc -arch ppc64 -arch i386 -arch x86_64

The above will make a universal binary for all Mac OS X.

If at some point, you get this message either in the error_log or by running ‘apachectl configtest’

httpd: Syntax error on line 117 of /private/etc/apache2/httpd.conf: Cannot load/usr/libexec/apache2/mod_fcgid.so into server:dlopen(/usr/libexec/apache2/mod_fcgid.so, 10): no suitable image found.Did find: /usr/libexec/apache2/mod_fcgid.so: mach-o, but wrong architecture

Then your mod_fcgid.so module probably was not built with x86_64 architecture… To check, type

file /usr/libexec/apache2/mod_fcgid.so

And it should list the architectures that the mod_fcgid.so was built for.

Enable mod_fcgid

Linux

At least with Debian/Ubuntu you can enable fcgid by typing (as root):

a2enmod fcgid

Mac OS X Leopard (10.5)

Add the following to /etc/apache2/httpd.conf:

AddHandler    fcgid-script .fcgiSocketPath    /tmp/fcgid_sockSharememPath  /tmp/fcgid_shmIPCConnectTimeout 20

mod_rewrite

We need to tell apache for what urls it should pass off the request to the fcgi script. This is accomplished with mod_rewrite which is normally turned on by default w/ apache 2 (at least the installations I have seen).

We’ll start with the full setup required for gaworkflow.frontend, but test it with a “Hello World” style dispatch.fcgi script.

gaworkflow.frontend apache2 mod_rewrite setup

Linux

Add the following to your apache2 /etc/apache2/sites-available/default or other vhost specific file:

# Enable access to the django admin mediaAlias /media /usr/lib/python2.5/site-packages/django/contrib/admin/media

# Turn on the rewrite engineRewriteEngine on

# Enable http:///admin/ and related urlsRewriteRule ^/admin(.*)$ /usr/lib/cgi-bin/dispatch.fcgi/admin$1 [QSA,L]RewriteRule ^/logout(.*)$ /usr/lib/cgi-bin/dispatch.fcgi/logout$1 [QSA,L]RewriteRule ^/login(.*)$ /usr/lib/cgi-bin/dispatch.fcgi/login$1 [QSA,L]

Mac OS X Leopard

Add the following to your apache2 /etc/httpd.conf:

# Enable access to the django admin media# NOTE: the following did not work for me... I had to copy the media directory to#    /Library/WebServer/Documents/media#Alias /media /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/media/

# Turn on the rewrite engineRewriteEngine on

# Enable http:///admin urlsRewriteRule ^/eland_config(.*)$ /Library/WebServer/CGI-Executables/dispatch.fcgi/eland_config$1 [QSA,L]RewriteRule ^/admin(.*)$ /Library/WebServer/CGI-Executables/dispatch.fcgi/admin$1 [QSA,L]RewriteRule ^/logout(.*)$ /Library/WebServer/CGI-Executables/dispatch.fcgi/logout$1 [QSA,L]RewriteRule ^/login(.*)$ /Library/WebServer/CGI-Executables/dispatch.fcgi/login$1 [QSA,L]

Restart Apache 2

Linux (Debian/Ubuntu)

sudo /etc/init.d/apache2 restart

Mac OS X Leopard

sudo apachectl restart

dispatch.fcgi

Hello World Test

Now to test that we have the mod_fcgid setup properly, create a file called dispatch.fcgi:

#!/usr/bin/python

def myapp(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return ['Hello World!\n']

if __name__ == '__main__': from flup.server.fcgi import WSGIServer WSGIServer(myapp).run()

And move it to your cgi-bin directory:

Linux cgi-bin

sudo mv dispatch.fcgi /usr/lib/cgi-bin/

Mac OS X Leopard cgi-bin

sudo mv dispatch.fcgi /Library/WebServer/CGI-Executables/

Linux/Mac OS X File Permissions

sudo chmod a+x /dispatch.fcgi

Mac OS X 10.5 users will need to update the Options for to include +ExecCGI… by default it is set to “Options None”. The updated entry should look like:

 AllowOverride None Options +ExecCGI Order allow,deny Allow from all

WARNING: You will get a message saying “Forbidden” in the web browser if you do not update the directive above.

Web Browser Test

Point your web browser to http://localhost/admin/ and you should see if it prints “Hello World!”. If you see “Hello World!” continue to the next section.

Installing the Django App dispatch.fcgi script

copy of mydjangoapp code

Make a copy of the mydjangoapp code and database and put it in a location that will be the “live” version of the code/database. On Mac OS X, I choose /Library/WebServer/mydjangoapp. Initialize the database like your normally would, but you will need to update the settings.py module so that DATABASE_NAME is an absolute path, otherwise you will get errors in the apache 2 error_log saying that the python code could not connect to the database. Assuming you also choose /Library/WebServer/mydjangoapp, your DATABASE_NAME variable in settings.py should be:

DATABASE_NAME = '/Library/WebServer/mydjangoapp/mydjangoapp.db'

You will also need to update the settings.py TEMPLATE_DIRS to be an absolute path (relative paths don’t work for some reason) of “/Library/WebServer/gaworkflow/templates”… so the update version should look like:

TEMPLATE_DIRS = ( "/Library/WebServer/mydjangoapp/templates",)

Also, you will need to make a link to the admin templates in our /Library/WebServer/mydjangoapp/templates directory by typing:

Mac OS X 10.5:

ln -s /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/templates/admin /Library/WebServer/mydjangoapp/templates/adminln -s /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/templates/admin_doc /Library/WebServer/mydjangoapp/templates/admin_docln -s /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/templates/widget /Library/WebServer/mydjangoapp/templates/widgetln -s /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/templates/registration /Library/WebServer/mydjangoapp/templates/registration

Warning: The following directions will tell you how to get past the db read/access errors but may not be the best choice for security… you consider the possible security issues before following the following instructions.

To get the dispatch.fcgi to work properly, I needed to change ownership of /Library/WebServer/mydjangoapp to be owned by the apache2 user, which is _www on Mac OS X 10.5 and www-data on Debian/Ubuntu systems. The the apache user also needs access to the mydjangoapp.db as well. I ran the following commands on Mac OS X 10.5 when placing the files in /Library/WebServer/gaworkflow:

sudo chown _www:_www /Library/WebServer/mydjangoappsudo chown _www:_www /Library/WebServer/mydjangoapp/mydjangoapp.dbsudo chmod o-rwx /Library/WebServer/mydjangoapp/mydjangoapp.dbsudo chmod ug+rwx /Library/WebServer/mydjangoapp/mydjangoapp.db

new dispatch.fcgi

Replace the hello world dispatch.fcgi with the following script:

#!/usr/bin/python                                                            import syssys.path += ['/Library/WebServer/mydjangoapp']from flup.server.fcgi import WSGIServerfrom django.core.handlers.wsgi import WSGIHandlerimport osos.environ['DJANGO_SETTINGS_MODULE'] = 'mydjangoapp.settings'WSGIServer(WSGIHandler()).run()

You will need to update these two rows:

  • sys.path += [‘/Library/WebServer/mydjangoapp’]
  • os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘mydjangoapp.settings’

Where ‘/Library/WebServer/gaworkflow should be replaced by PYTHONPATH that would allow your Django package to be imported… one directory level below the directory containing init.py.

NOTE: Make sure you dispatch.fcgi is executable:

sudo chmod a+x dispatch.fcgi

If everything worked out properly, you should have a working installation of gaworkflow.frontend using mod_fcgid.

Trouble Shooting

  • Check apache error logs.
  • run: sudo apachectl configtest
  • Check that dispatch.fcgi has #!/usr/bin/python and not #!/usr/bin/env python as that will screw up the environment variables at least w/ Apache 2 that ships on Mac OS 10.5.
  • run ‘python dispatch.fcgi’ to see if you get any standard Python errors.

Apache2 – error_log — [warn] mod_fcgid: stderr: OperationalError: unable to open database file

This means the database is not accessible by the user that is running apache. On Mac OS X 10.5, the user is _www. On Debian/Ubuntu Linux the user is www-data. See the “copy of gaworkflow code” section above for directions on changing file permissions for the database.

Evil Spammers

Posted on : 28-08-2007 | By : Brandon W. King | In : Computers/IT, Linux, Systems Administration

Tags: , , ,

0

Those evil spammers figured out I had misconfigured my postfix smtp configuration before I did and they started using my server to forward spam! The configuration has now been fixed, but I wanted to point out a useful link on setting up postfix smtp authentication using sasl:

How to force SMTP authentication in postfix by Kevin Bailey

Dell Inspiron 9400 Ubuntu 7.04 (Fiesty) X won’t start & bcm43xx_microcode5.fw missing!

Posted on : 13-06-2007 | By : Brandon W. King | In : Computers/IT, Linux, Systems Administration

Tags: , , , , ,

21

If you have Dell Inspiron 9400 and are having trouble with Ubuntu or Kubuntu 7.04 (Fiesty) and you are getting the following errors or behavior, then you have come to the right place (Note: End of post has details of the hardware in this Dell Inspiron 9400):

bcm43xx: Error: Microcode “bcm43xx_microcode5.fw” not available or load failed

and/or

Failed to start the X server:
Fatal server error: no screens found

Failed to start the X server problem:
Even if you manage to get the Ubuntu installed without getting X to start from the Ubuntu live cd, you will still need to fix the problem once it is installed. Here is how to you can get the Ubuntu live cd to work (assuming you have the ATI X1400 graphics card):

  1. Boot from the Ubuntu 7.04 live CD and wait for the message saying X could not start. Get through the error messages until it drops you into a bash shell.
  2. Use your favorite text editor (or nano if you can’t find yours) to uncomment the universe line from /etc/apt/sources.list: sudo nano /etc/apt/sources.list
  3. sudo apt-get update
  4. sudo apt-get install xorg-driver-fglrx #Install the ati 3d accelerated driver
  5. sudo aticonfig –initial #creates a new xorg.conf setup for ati cards
  6. sudo modprobe fglrx #loads the ati fglrx driver
  7. sudo /etc/init.d/gdm restart #(for ubuntu) or sudo /etc/init.d/kdm restart #(for kubuntu)
  8. X should now start. Once you install you can repeat the same steps to get it working for the installed copy.

bcm43xx: Error: Microcode “bcm43xx_microcode5.fw” not available or load failed problem:
This is the error with the wireless card driver which requires firmware that is not installed by default. There is an easy way to install the firmware. Just install the bcm43xx-fwcutter package. It will ask you if you want it to automatically download install the firmware you need. Just say yes and it will do all the work.

  1. Follow step 2 from the previous section.
  2. sudo apt-get install bcm43xx-fwcutter #Make sure to tell it to download and install the firmware.


This Dell Inspiron 9400 Specs:

  • Intel Core 2 Duo T7200
  • 17 in UltraSharp TrueLife Wide-screen WUXGA (1920×1200 max resolution)
  • 2GB DRR2 533MHz RAM
  • 256MB Ati Mobility Radeon X1400 graphics card
  • 120 GB 5400RPM SATA HD
  • Integrated 10/100 Network Card (Broadcom BCM4401-B0 100Base-TX (from lspci))
  • Dell Wireless 1390 802.11g Mini-card (Broadcom Dell Wireless 1390 WLAN (from lspci))
  • 8X DVD+/-RW Drive
  • Integrated High Def. Audio (Intel 82801G High Def. Audio Controller (from lspci); works great by the way.

** (beryl-manager:6606): CRITICAL **: can’t execute beryl-xgl: Success

Posted on : 25-05-2007 | By : Brandon W. King | In : Computers/IT, Error Fixes, Linux, Systems Administration

Tags:

0

If you get the following error when trying to launch beryl-manager with KDE on Kbuntu 7.04 (Feisty) (likely with an ATI card from what I am reading):

** (beryl-manager:6606): CRITICAL **: can’t execute beryl-xgl: Success

The problem most likely has to do with this bug:

https://bugs.launchpad.net/ubuntu/+source/beryl-core/+bug/95394

Which basically states that beryl-xgl was removed from beryl-core package due to how it is built.

Multi-thousand dollar experiment… Where did D:\ go?

Posted on : 24-05-2007 | By : Brandon W. King | In : Computers/IT, Error Fixes, Stories, Systems Administration

Tags: , ,

0

Nothing like a little pressure to get you going in the morning. I came in to work today to find out someone had started an Affymetrix experiment but the analysis software would not start. About 2 hours were left before the experiment had to be run or it would risk the quality of the experiment and then would have to be repeated.

The problem… The 2nd hard drive which contained the analysis software was not being recognized by Windows. In comes Kubuntu live CD. Turns out the partition table was empty. I ran smartmontools to make sure the drive was still alive and it was. I tried running gpart to have it guess what the partition table should be and had it write a new partition table. Upon rebooting into windows the D: drive was visiable in My Computer, but it wanted to reformat it when I double clicked on it. Nice of windows to offer to reformat my drive isn’t it? Oh right, it has data on it that I want. Reboot back into Kubuntu… mount -t ntfs /dev/sdb1 /mnt… Hey, what do you know, all the files are still there. Kubuntu reading NTFS drive and Windows won’t… How ironic?

Any way, time was running out for the experiment, I knew the data still existed on the D: since Linux could read the data now… The thought came to my mind, maybe the partition table is wrong? So, I stumbled upon testdisk… testdisk /dev/sdb y done. I rebooted and Windows now could read and write from the D: drive again.

Purpose of this post: To remind myself and others to try testdisk when trying to fix a corrupted partition table. (Debian/Ubuntu(Universe): testdisk package)

xen + routed network (shorewall) + qemu

Posted on : 09-02-2007 | By : Brandon W. King | In : Computers/IT, Error Fixes, Linux, Systems Administration, Virtual Machines

Tags: , , , , ,

5

After setting up xen and configuring buildbot on a xen guest domain, I decided it was time to bite the bullet and setup shorewall to hide the xen guest domains behind a private network.

By the way, there are some nice guides on setting up shorewall with xen:

In the process I had to reconfigure Xen to use routed networking rather then bridged:

Changed (/etc/xen/xend-config.sxp) from:

(network-script network-bridge)
(vif-script vif-bridge)

To:

(network-script network-route)
(vif-script vif-route)

After setting up shorewall properly and being able to log into two different Debian etch guest domains, I noticed that my previously working WinXP hvm was not starting up properly. When I looked into it further I found the following in /var/log/xen/qemu-dm.11384.log

domid: 20
qemu: the number of cpus is 1
/etc/xen/scripts/qemu-ifup: could not launch network script
Could not initialize device ‘tap’

Tap device cure (found here):

tunctl -t tap0

The final piece of the puzzle (since I’m using the routed script with xen)…

Comment out “brctl addif $2 $” from /etc/xen/scripts/qemu-ifup as mentioned by George in this mailing list thread.

UPDATE (2007Feb12): By doing the above two tasks, I was able to launch WinXP under Xen, but I did not have shorewall setup properly. To save time and money, I’m going with the simpler route of buying a hardware firewall/router. I will leave the information above incase it is useful to anyone (including myself) in the future.

Rescuing a Linux installation

Posted on : 30-01-2007 | By : Brandon W. King | In : Computers/IT, Error Fixes, Linux, Systems Administration

Tags: , , , , , , ,

0

In an attempt to save a system without doing a fresh reinstall by copying the contents from dying hard drive to new hard drive using external hard drive enclosure. This method seems to have worked well for me. I’m posting it as reference so others have a guide to work from and improve upon. I have only used this method once so make sure you know what you are doing if you follow the guide.

WARNING: Use the following formation at your own risk. Make sure you make proper backups. The following information may have errors or may not work properly and could possibly damage your system or cause the loss of data. Once again, use the following at your own risk. Research how to use each individual command so you know what you are doing.

Guide to moving a Debian or Ubuntu Linux installation from an old hard drive to a new hard drive without re-installing.

  1. Attach external hard drive
  2. Reboot computer into single user mode (i.e. rescue mode)
  3. Find the new device of the external hard drive (probably sda or sdb) dmesg | grep hd; dmesg | grep sd
  4. create new partions on new drive: fdisk /dev/sd(a,b, etc.)
    1. create swap partition
    2. create linux partition(s)
  5. initialize swap: mkswap
  6. create filesystem (I’m using ext3): mkfs.ext3
  7. Mount the new hard drive (referred to as /dev/sda2 from now on): mount -t ext3 /dev/sda2 /mnt
  8. Use debootstrap to get base install (ubuntu edgy example): debootstrap edgy /mnt http://us.archive.ubuntu.com/ubuntu
  9. Now the copy command: rsync -av –exclude=/dev –exclude=/sys –exclude=/mnt –exclude=/proc –exclude=/media / /mnt
  10. Make partition bootable: fdisk /dev/sda2 # use the ‘a’ option
  11. Shutdown system and put in the new drive.
  12. Get Grub working again:
    1. Insert Ubuntu or other Debian based live CD (Knoppix is a good choice too).
    2. Mount the new drive: mount -t ext3 /dev/hda2 /mnt
    3. Install grub: install-grub –root-directory=/mnt /dev/hda2
    4. chroot into new drive: chroot /mnt
    5. edit /boot/grub/menu.lst
      1. Update groot(hd0,) #if bootable partition changed (i.e. Was /dev/hda5 is now /dev/hda2… Old: groot(hd0,4) New: groot(hd0,1)
      2. Update kopt=root #if bootable partition changed (i.e. Was /dev/hda5 is now /dev/hda2… Old: kopt=root=UUID= or kopt=root=/dev/hda5 New: kopt=root=/dev/hda2 (NOTE: There is probably a way of getting the new UUID of the new partition, in which case you can just update the UUID option, but I don’t know enough about this yet to offer advice… Feel free to post a comment if you know more.)
    6. type: update-grub
  13. Reboot and hope everything works properly.