Diskless Cluster Setup: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
This page shows how to setup a diskless cluster that uses UnionFS to consolidate system and cluster software in a single disk image. '''It is a work in progress.''' | This page shows how to setup a diskless cluster that uses UnionFS to consolidate system and cluster software in a single disk image. '''It is a work in progress.''' | ||
==Install a kernel== | ==Choose an operating system== | ||
The first version of this project used [http://www.debian.org Debian GNU/Linux]. It's intended to be general enough to be deployed on other platforms; but, as Charlie says, "your mileage may vary." | |||
==Setup the diskless netboot environment== | |||
===TFTPD=== | |||
Install a tftp server (Debian's <code>tftpd-hpa</code> is good) and add a line like this to /etc/inetd.conf (or the equivalent in whatever internet "super-server" you use): | |||
<pre> | |||
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -v -s /boot | |||
</pre> | |||
This runs tftpd and sets its root directory to <code>/boot</code> | |||
===DHCPD=== | |||
Install ISC's DHCPD (e.g., Debian's <code>dhcp3-server</code> package), and setup <code>dhcpd.conf</code> like so: | |||
<pre> | |||
option domain-name "little-fe-ppc.net"; | |||
option domain-name-servers 192.168.1.100; | |||
option subnet-mask 255.255.255.0; | |||
default-lease-time 604800; | |||
max-lease-time 604800; | |||
allow booting; | |||
allow bootp; | |||
subnet 192.168.1.0 netmask 255.255.255.0 { | |||
range 192.168.1.200 192.168.1.254; | |||
option broadcast-address 192.168.1.255; | |||
option routers 192.168.1.1; | |||
next-server 192.168.1.100; | |||
server-identifier 192.168.1.100; | |||
# for client-side union setup | |||
filename "vmlinuz-2.6.15.6 init=/linuxrc root=/dev/nfs ip=dhcp console=ttyS1,115200n1"; | |||
option root-path "/client/setup"; | |||
# to use server-side union | |||
# filename "vmlinuz-2.6.15.6 root=/dev/nfs ip=dhcp console=ttyS1,115200n1"; | |||
# option root-path "/client/root"; | |||
use-host-decl-names on; | |||
} | |||
host lf1 { hardware ethernet 00:0B:2F:43:61:EB; fixed-address 192.168.1.101; } | |||
host lf2 { hardware ethernet 00:0b:2f:4f:03:b5; fixed-address 192.168.1.102; } | |||
#host lf3 { hardware ethernet ; fixed-address 192.168.1.103; } | |||
subnet 192.168.10.0 netmask 255.255.255.0 { | |||
range 192.168.10.200 192.168.10.254; | |||
option broadcast-address 192.168.10.255; | |||
use-host-decl-names on; | |||
} | |||
host lf1-eth1 { hardware ethernet 00:0b:2f:62:49:d1; fixed-address 192.168.10.101; } | |||
host lf2-eth1 { hardware ethernet 00:0b:2f:6e:6b:7b; fixed-address 192.168.10.102; } | |||
#host lf3-eth1 { hardware ethernet ; fixed-address 192.168.10.103; } | |||
</pre> | |||
===NFSD=== | |||
If you're using Debian, use the nfs-kernel-server package (not the nfs-user-server package). (Knowledge about how this translates to other platforms would be helpful here.) | |||
Setup <code>/etc/exports</code> like so: | |||
<pre> | |||
/ 192.168.1.0/24(ro,insecure_locks,no_root_squash,sync) | |||
/client/setup 192.168.1.0/24(ro,insecure_locks,no_root_squash,sync) | |||
/client/overlay 192.168.1.0/24(ro,insecure_locks,no_root_squash,sync) | |||
/root 192.168.1.0/24(rw,insecure_locks,no_root_squash,sync) | |||
/home 192.168.1.0/24(rw,insecure_locks,no_root_squash,sync) | |||
</pre> | |||
===Install a kernel=== | |||
You '''must''' build the kernel locally, otherwise the unionfs install will fail later. | You '''must''' build the kernel locally, otherwise the unionfs install will fail later. | ||
* Download kernel source v. 2.6.15.6 (or anything 2.6 before 2.6.16) from kernel.org | * Download kernel source v. 2.6.15.6 (or anything 2.6 before 2.6.16) from kernel.org | ||
| Line 16: | Line 89: | ||
</pre> | </pre> | ||
==Install unionfs== | ===Install unionfs=== | ||
You '''must''' build unionfs with the same gcc compiler as you used to build the kernel above, otherwise you'll get an error about "Invalid module format." | You '''must''' build unionfs with the same gcc compiler as you used to build the kernel above, otherwise you'll get an error about "Invalid module format." | ||
* Download the unionfs sources from http://www.fsl.cs.sunysb.edu/project-unionfs.html | * Download the unionfs sources from http://www.fsl.cs.sunysb.edu/project-unionfs.html | ||
| Line 24: | Line 97: | ||
See http://www.unionfs.org/ for usage examples. | See http://www.unionfs.org/ for usage examples. | ||
==Busybox== | ===Busybox=== | ||
Download and build [http://www.busybox.net/ Busybox]: | Download and build [http://www.busybox.net/ Busybox]: | ||
Revision as of 18:59, 12 May 2006
This page shows how to setup a diskless cluster that uses UnionFS to consolidate system and cluster software in a single disk image. It is a work in progress.
Choose an operating system
The first version of this project used Debian GNU/Linux. It's intended to be general enough to be deployed on other platforms; but, as Charlie says, "your mileage may vary."
Setup the diskless netboot environment
TFTPD
Install a tftp server (Debian's tftpd-hpa is good) and add a line like this to /etc/inetd.conf (or the equivalent in whatever internet "super-server" you use):
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -v -s /boot
This runs tftpd and sets its root directory to /boot
DHCPD
Install ISC's DHCPD (e.g., Debian's dhcp3-server package), and setup dhcpd.conf like so:
option domain-name "little-fe-ppc.net";
option domain-name-servers 192.168.1.100;
option subnet-mask 255.255.255.0;
default-lease-time 604800;
max-lease-time 604800;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.254;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
next-server 192.168.1.100;
server-identifier 192.168.1.100;
# for client-side union setup
filename "vmlinuz-2.6.15.6 init=/linuxrc root=/dev/nfs ip=dhcp console=ttyS1,115200n1";
option root-path "/client/setup";
# to use server-side union
# filename "vmlinuz-2.6.15.6 root=/dev/nfs ip=dhcp console=ttyS1,115200n1";
# option root-path "/client/root";
use-host-decl-names on;
}
host lf1 { hardware ethernet 00:0B:2F:43:61:EB; fixed-address 192.168.1.101; }
host lf2 { hardware ethernet 00:0b:2f:4f:03:b5; fixed-address 192.168.1.102; }
#host lf3 { hardware ethernet ; fixed-address 192.168.1.103; }
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.200 192.168.10.254;
option broadcast-address 192.168.10.255;
use-host-decl-names on;
}
host lf1-eth1 { hardware ethernet 00:0b:2f:62:49:d1; fixed-address 192.168.10.101; }
host lf2-eth1 { hardware ethernet 00:0b:2f:6e:6b:7b; fixed-address 192.168.10.102; }
#host lf3-eth1 { hardware ethernet ; fixed-address 192.168.10.103; }
NFSD
If you're using Debian, use the nfs-kernel-server package (not the nfs-user-server package). (Knowledge about how this translates to other platforms would be helpful here.)
Setup /etc/exports like so:
/ 192.168.1.0/24(ro,insecure_locks,no_root_squash,sync) /client/setup 192.168.1.0/24(ro,insecure_locks,no_root_squash,sync) /client/overlay 192.168.1.0/24(ro,insecure_locks,no_root_squash,sync) /root 192.168.1.0/24(rw,insecure_locks,no_root_squash,sync) /home 192.168.1.0/24(rw,insecure_locks,no_root_squash,sync)
Install a kernel
You must build the kernel locally, otherwise the unionfs install will fail later.
- Download kernel source v. 2.6.15.6 (or anything 2.6 before 2.6.16) from kernel.org
- Get a config for your kernel. If you're using the pegasos machines, use pegasos-debian from ppckernel.org
- Untar the sources in /usr/src/linux-2.6.15.6 (should be a more permanent location)
- Copy the config to /usr/src/linux-2.6.15.6/.config
- Then:
cd /usr/src/linux-2.6.15.6 make oldconfig make cp arch/ppc/boot/images/zImage.chrp /boot/vmlinuz-2.6.15.6 make modules_install
Install unionfs
You must build unionfs with the same gcc compiler as you used to build the kernel above, otherwise you'll get an error about "Invalid module format."
- Download the unionfs sources from http://www.fsl.cs.sunysb.edu/project-unionfs.html
- Untar them, cd into the resulting directory, and then simply type
makeand thenmake install
Now you should be able to modprobe unionfs
See http://www.unionfs.org/ for usage examples.
Busybox
Download and build Busybox:
make defconfig make menuconfig #make a statically linked binary make make install #this creates the _install directory
Now create some necessary directories:
cd _install mkdir dev proc sys mnt cd ..
Now, put the _install directory somewhere that it can be NFS mounted, e.g., /client/setup