Sunday, January 31, 2010

Network PXE-based boot


Hi Friends..!!!

This tutorial allows you to boot your machine from the network environment and select from a list of what you would like to install.

This will take more work and should also be considered intermediate to advanced. Please read through the tutorial in its entirety before diving in, researching any aspects of the tutorial you’re not familiar with prior to attempting these steps.

Requirements

There are a few things that we’ll need in order to set this up. These are outlined below:

The way that these services will be used, as a quick overview, is that the DHCP server will listen for and assign IP addresses for machines on the local network. The TFTP server will hand a small kernel and ramdisk image to the client as it boots from the network environment and the contents of the Ubuntu CD will be used to install, being shared over the web via the Apache server.

DHCP Setup

First of all we’ll install the DHCP server to initially hand out the IP addresses and point to the network boot images:

sudo aptitude install dhcp3-server

Now that we have the DHCP server installed there are a few small changes we need to make to the core configuration. Full detail on DHCP configuration is outside of the scope of this tutorial, but this should give you enough to achieve the goal of this tutorial.

We’ll first edit the DHCP configuration file, normally found in /etc/dhcpd.conf(it is better if you take a backup of this file before editing it, so that if anything goes wrong you can step back to normal condition):

sudo vim /etc/dhcp.conf

We’ll add two lines into this file outlining the address of the TFTP server (probably the same machine) and the path to the pxelinux.0 file we want to hand off to the client machines.

next-server 192.168.1.1 (the IP address of your DHCP/TFTP server)

filename "/tftpboot/pxelinux.0";

After adding these lines your dhcpd.conf file will look like this :


subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.10 192.168.1.20;

next-server 192.168.1.1

filename "/tftpboot/pxelinux.0";

}



After we have made these changes we need to restart the DHCP server. We can do this using the command:

sudo /etc/init.d/dhcpd restart

Apache Setup

We need to export the contents of the CD over the web so that the network based installer can find them for use with deb. For this we’ll install apache. The base configuration should be enough for what we need here. Further details on configuring Apache are outside of the scope of this tutorial.

sudo aptitude install apache2

CD Image Contents

We’ll need to extract the contents of the CD onto the DHCP/TFTP server so that we can access the packages and the installer kernel. We can locally mount and copy the CD contents using these commands:

sudo mkdir /var/www/html/ubuntu9.10 (or, if you're going to export multiple versions select something more unique)

sudo mount -o loop CD.iso /mnt

sudo cp -a /mnt/* /var/www/html/ubuntu.910

PXELinux Setup

Now that the DHCP server knows where the tftp server is and the path to the file that it should direct clients to we need to configure the PXE end of things, which is what allows us to boot a kernel over the network or select from a list of kernels to boot over the network.

Relative to the location of the pxelinux.0 file we can make a directory for the distribution/version that we want to boot. For example we might want to install Ubuntu 9.10 so we’d create a folder U9.10, or ubuntu9.10–something to specify what version and variant this will hold.

sudo mkdir /tftboot/ubuntu9.10

We then need to copy the network-based installer kernel and initrd.gz into the newly created folder:

sudo cp /var/www/html/ubuntu9.10/install/netboot/ubuntu-installer/i386/{linux, initrd.gz} /tftboot/ubuntu9.10/

We now need to build the file that will list what is available and how to select it from a (optional) list.

pxelinux.cfg/default

We’ll now move into the /tftpboot/pxelinux.cfg directory and edit the file “default”. If this file doesn’t exist that is OK, we’ll create one.

sudo vim /tftpboot/pxelinux.cfg/default

We’ll now make a list of the boot options that might be available on this network booting system:

default 0

prompt 1

display msgs/boot.msg

# begin list of available boot options

label ubuntu9.10

kernel ubuntu9.10/linux

append initrd=ubuntu9.10/initrd.gz

This file basically outlines that a list will be presented to the user booting over the network, which we’ll create in the next step, and defines what will be loaded for each menu item.

pxelinux.cfg/msgs/boot.msg

We’ll now create a file that will give a display of the different boot options available. Your setup may only have one option outlined for installation, others might have three, four, five–a dozen different versions and variations available to install. We’ll create a list here outlining what is available and what option to enter to select the option.

This file can be something as simple as:

ubuntu9.10 - Select this to install Ubuntu 9.10

kubuntu9.10 - Select this to install Kubuntu 9.10

…etc. Creating a list such as this after having repeated the above steps for each version and variant you want to make available and you should be ready to go. One thing to note is that the boot option entered at the list prompt should match the label defined in the pxelinux.cfg/default file.

Starting The Installer

You should now be ready to install your machine by booting and instructing your machine to boot from the network. If you have trouble booting to either of those devices you might check your BIOS settings to see that one of them takes priority over the main hard drive.

You’ll be presented with a very basic menu when the netboot installer loads.

To install only the base system type ’server’, then ENTER.

For the default installation, press ENTER.

The default installation is suitable for most desktop or laptop systems.

Navigate through the installer as normal but watch for the step entitled:

Choose a mirror of the Ubuntu archive

At this step we will tell the installer to use a custom repository, in this case being the locally shared CD contents we set up previously.

Instead of selecting your country in this step go up to the first option listed: (pg-up to the top)

enter information manually

I don’t think the option of entering custom information is very intuitive so I missed this the first few times through. Watch for this step. If you are given a prompt offering us.archive.ubuntu.com or CC.archive.ubuntu.com you’ve gone too far!

The next step will prompt you for the hostname or IP address of the server you will be installing from. This is the IP address of the server you copied the CD contents and installed Apache to.

After the hostname or IP is entered the installer will prompt you for the path to the publicly shared contents. If you closely followed these steps the default entry of /ubuntu/ should work. If you copied your CD contents into a folder other than /ubuntu/ you’ll need to update this accordingly.

At this point navigate through the installer as normal and enjoy what should be faster installation speeds as network-based is usually faster than CD-based.

As I mentioned before. This should be considered more technical in nature than many of my previous tutorials. Best of luck, and enjoy network based booting and installation!

Monday, January 25, 2010

SSH without Password


Hi friends..!!

Here is the trick for how to : SSH without password so that you don't have to enter password each time you make ssh connection with the remote computer.

On your computer, open terminal and generate rsa key by firing the command-

$ sudo ssh-keygen -t rsa

(hit enter if asks for saving location so that it will take default location within .ssh/ file)

now append this generated key on destination machines authorized_keys file,

$ sudo cat .ssh/id_rsa.pub | ssh user@destination_machine_ip 'cat >> .ssh/authorized_keys'

now destination machine asks for password for one last time, enter destination machines password for the last time and now on you can ssh to your destination machine without entering the password.

Keep enjoying..!!!

Sunday, January 24, 2010

Internet Sharing Through Ubuntu


Hi all,

Back with another Blog, and a solution every Linux newbie faces, yes how to share Internet connection through ubuntu or any linux machine (if you are using your machine as a gateway for rest of the machines)

Scenario for this is, you are having a Linux machine (here its Ubuntu as I am posting this blog under Ubuntu section) with two Ethernet cards (or you can say LAN-cards or NIC's), eth0 is from where internet connection is coming from and eth1 is connected to your LAN or to another PC at your Home-Network. Simple scenario isn't it?

Ok lets start with the solution, here trick is simple, you just supposed to make "nat" (hope so you are aware of natting, if not don't worry I will publish another post describing NAT)

Firstly configure your
eth0 (means eth with internet connection)

IP add : 192.168.1.x ('x' means any IP address you want to use for your machine)
Subnet Mask : 255.255.255.0 (as its a class-C IP address)
Default Gateway : 192.168.1.1 (normally it is but if you are using any different then put that in place of and remember its your routers IP which you are using for internet connection)
Primary DNS : xxx.xxx.xxx.xxx (Put DNS provided by your ISP or you can use any open DNS like 4.2.2.2 or 4.2.2.1 and there are lots of)

now check whether you are able to ping to your default gateway and your DNS by opening your terminal from
Application --> Accessories --> Terminal and by typing

$ ping 192.168.1.1
$ ping 4.2.2.2


Now its time to configure the connection between your machine and the another machine with which you are willing to share your internet connection

for
eth1(on your machine only):
IP address : 192.168.2.1 (or any IP you want to use instead)
Subnet Mask : 255.255.255.0
Default gateway : (leave this blank as there is no need to assign it)
Primary DNS : (put DNS provided by ISP)

configure the 2nd machine accordingly and put Default gateway as IP of your 1st machine (means your own machine through which you want to share the internet connection), for example -

other machine:
IP address : 192.168.2.2
Subnet Mask : 255.255.255.0
Default gateway : 192.168.2.1
Primary DNS : (DNS provided by ISP)

this is all done with configuration, now the last step is required to complete the magic..

on 1st machine (your own machine which is going to act like a server now) add iptables rule as

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

and thats it..

now you can check on 2nd computer that internet is working.


But one thing is to remember here that, the changes made in iptables till this point are temporary only, once you reboot the system all the changes you have made to iptables will be lost, next time again you have to make changes to the iptables by firing above mentioned command of NAT.

To solve this issue do the following so that changes to iptables remains unchanged after reboot

$ sudo iptables-save > /etc/iptables.up.rules

then edit /etc/network/interfaces by using your favorite editor

$ sudo vim /etc/network/interfaces

and add the line highlighted in red color, add this line just below the loopback entry


# The loopback network interface
auto lo
iface lo inet loopback
pre-up iptables-restore < /etc/iptables.up.rules

# The primary network interface
auto eth0
#iface eth0 inet dhcp

And its all done.. now the changes remains as it is after rebooting of machine..
now share and enjoy internet connection over your LAN or over your home-network.

Hope this post will help you.. if any problem persist let me know.

Thanks..!!!

Using ISO image as a repository in Ubuntu


Hi friends...!!!

I always wonder that is it really that much essential to have internet connection first if you are planning to switch to any open-source linux OS..?
If you also think like that then its totally a wrong thinking.. you can use your linux or unix OS without internet as efficiently as the user with internet connection. All you need is to know how to use your CD/DVD as a repository so that you can install applications by overcoming the dependencies...

I have recently installed Ubuntu on my machine and bad luck was the same day I was facing internet connection problem, so i was thinking that I am having all the applications i need in my DVD only so why cant I use that DVD as a Repository, and here is the procedure to how to do that...

Firstly make a ISO image of your DVD (now don't ask me how to do that..everyone knows this) and mount this image in your directory location which you want to use a path for this repository.


$ mount ubuntu_image.iso /mount/location/of/iso_image -o loop

After this make an entry in your /etc/apt/sources.list

$ sudo vim /etc/apt/sources.list

and make the following entry in it (you can add these lines anywhere in this file but try to add them at the bottom with some notations so that you easily figure-out for what purpose these entries are for)

deb file:/mounted/location/of/iso main restricted

and its done your local DVD repository is ready to server you the applications...

Hope this post will help you..