Table of Contents
Kyle's diskless boinc cluster - SpaceHeaters@home
Note: This is a design in progress
Design Summary
- Minimize use of painful technologies where and if possible (tftp, nfs)
- Uses samba for network file access
- Boyscout level of security - program credentials into gpxe boot rom
- Controlled via ssh
Get libraries for certain binaries
ldd `which cifs.upcall` > /tmp/libs ldd `which ssh` >> /tmp/libs ldd `which sshd` >> /tmp/libs ldd `which bash` >> /tmp/libs ldd `which mount.cifs` >> /tmp/libs ldd `which watch` >> /tmp/libs ldd `which screen` >> /tmp/libs # The Name Service Switch related libs aren't found with ldd echo /lib/libnss_dns.so.2 >> /tmp/libs echo /lib/libnss_files.so.2 >> /tmp/libs cat /tmp/libs | cut -f 2 -d '>' | cut -f 1 -d '(' | xargs -n 1 -I {} sh -c "readlink -f {} || echo {}" | sort | uniq | xargs -I {} cp {} .
embedding keys onto the rom image
Nothing needs to get changed. Files in the initrd provided via dhcp overwrite identically named files from the embedded initrd archive. It's still a good idea to segregate the embedded files for example /embed/*
#!gpxe kernel vmlinuz-2.6.31-14-generic initrd smith.ilz boot
00:50 < Docteh> i attached a gzipped tar to a gpxe image, and its automatically used along with the initrd specified via a script via dhcp, is that a known behavior? 00:51 < Docteh> gzipped cpio, my bad 00:52 < Docteh> I like that this is happening, I'm just wondering if I can expect it to work like that in the future
Formats: cpio archive compressed with gzip is the classic default, but I've seen support recently for bzip2 lzma
In make menuconfig under General Settings [*] Support initial ramdisks compressed using gzip [*] Support initial ramdisks compressed using bzip2 [*] Support initial ramdisks compressed using LZMA
Note: My assumption of the default gpxe script might be incorrect.
echo \#\!gpxe > default.gpxe echo autoboot >> default.gpxe
Build the desired image (cwd = gpxe/src)
mkdir embed put files in embed directory # Check permissions, ssh private keys wont get used if they're not set to be -rw-r--r-- find embed -xdev |sort| cpio --quiet -H newc -o |TIME gzip > embed.img
make EMBEDDED_IMAGE=./default.gpxe,./embed.img bin/pcnet32.pxe
make EMBEDDED_IMAGE=./default.gpxe,./embed.img bin/10ec8139.rom
Burning an eeprom
Burning an eeprom is two steps, enabling bootrom with rset8139 and programming it I fired up RSET8139 in freedos with the bootrom socket empty and set the bootrom size to 128kb. RSET8139 has options for 8kb 16kb 32kb 64kb and 128kb. This appears to work if multiple cards are plugged in.
Note: running rset8139 with a 1mbit eeprom in the socket while the 8139 was set to not have a boot rom caused rset8139 to hang.
http://ctflasher.sourceforge.net/ can write to an eeprom on a rtl8139b/c board via a /proc interface. I compiled a 2.6.17 kernel and used that with ctflasher
Issues so far
cifs client doesn't appear to watch connections as well as it should
there is not much documentation on ProxyDHCP concept