Distilled Nerd

I’ve started laying out the file server system using the node from my C6005 experiments.  The EK blocks need to have the outer portion of the ears cut off to fit the close quarters, but I’m pleased with things so far.  Now to lay out the copper tubing!



Beginning layout of components (PSU is not the final unit)



Chipset waterblocks installed



Waterblock close-up



Doing some more testing, this time with a the 20-pin connector adapter



Awesomely silent high efficiency Seasonic single 12V rail PSU



Adapter wire



Hard disk backplane

Charmander, the C6005 node, runs outside of its chassis!  A few pictures of what I’ve done.


I couldn’t find my pin extractor, so I used two staples. It took me a long time, but I only had to solder one wire.


Down the middle are the two “No Connection” pins, and the one in the outer corner is the brown line that I haven’t analyzed yet. The system runs fine without it for now.


All connected up


We have post!


Ubuntu LiveCD with ServeTheHome.com up to test connectivity 🙂

This first node is going in a custom Backblaze-inspired chassis build.  I ordered a bunch of parts from FrozenCPU for it and have laid out what I can in the chassis.  Once I plan out how the hard drive cradles will work it’ll be time for playing with metal.  So far though everything is fitting together even better than I could have hoped!

This will be the first part of my 1980’s inspired rack build.  Hopefully it goes well since the others are counting on it.




I picked up a 3 node C6005 off of ebay awhile ago, and while I love the systems for their cost and ability, the chassis they are in leaves a lot to be desired for the home lab.  So I’ve been attempting to figure out how to run the nodes outside their nurturing cocoon.  Tyan lists on their datasheet that it uses a “Proprietary 20-pin (12V single input) power connector” so I pulled the server out of the rack and started taking some notes.
c6005 Power ConnectorOnce I had an idea of what the connector looked like I could measure the voltage at each pin.  First odd thing is that when each node is ‘off’ pins 1 through 8 are all at 1V.  Once powered they are all 12V.  The other Yellow wire (pin 18) is the only 5V line.  All of the black lines (11 – 17 & 19) are Ground.  Pin 20, the Brown line, I’m not quite sure what it is.  It goes to a 2 pin header on top of the power distribution board.  My current thoughts are either a fan speed indicator or a “PSU on” control.

Also!  Header “U15”  by the USB port on the board are the power switch pins.


MATLAB functions well as a simplified platform for rapid robotics development and prototyping.  Lately I’ve been working with it to perform image analysis for basic movement control.  The first project had the robot follow an colored sign.

My approach used Lab colorspace and a kmeans algorithm for fast detection rather than the typical brute force YUV colorspace object labeling.  In this example we will assume the function is passed an image, a colorA double, and a colorB double.

First one must change the image to the Lab colorspace.  More on the benefits of this later.

img = imresize(img, 0.3);
cform = makecform(‘srgb2lab’);
cf_Img = applycform(img,cform);

ab = double(cf_Img(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);

The first set of commands transforms an RGB image to Lab.  The second part isolates out the a and b components of the image.  The L is disregarded because it causes too many white balance headaches.  The a and b contain all the color information.

nColors = 3;

[cluster_idx cluster_center] = kmeans(ab,nColors);

distance = zeros(1,nColors);
for x = 1:nColors
distance(x) = sqrt((cluster_center(x,1)-colorA)^2+(cluster_center(x,2)-colorB)^2);
[smal, index] = min(distance);

Next we set how many blobs we want to be in our image.  Kmeans works by grouping the image into sets that are related by color.  The more sets we have, the more definition.  Next we execute the actual kmeans algorithm which gives us the output image and the central color point of each blob.  Remeber the colorA and colorB this function was passed?  Well that is the color of the blob we are looking for.  The next part of the function figures out which of those colors is closest to what we wanted.

After that’s done things are pretty simple:

for x = 1:length(cluster_idx)
if cluster_idx(x) == index
cluster_idx(x) = 1;
cluster_idx(x) = 0;

binImg = reshape(cluster_idx,nrows,ncols);

This part makes everything in the desired group a 1, and everything else a 0.  This creates a binary image that works with all the other built in functions.  For example:

s = regionprops(binImg, ‘centroid’);
outCentroid = cat(1, s.Centroid);

Gives you the centroid of the blob, and:

outArea = bwarea(binImg)

Gives you the area of the blob.  It’s pretty neat.  Using the built in functions can give you a lot of speed improvements too.

It’s been an extraordinarily long time since my last post.  I suppose things have  been relatively quiet.  There are a couple of possible projects coming down the pipeline so I’ve decided to finally make the push for a real server.  I’m going to retire the plentiful 1U’s for something much fancier.

Newegg is lovely as always.  There was a combo deal on the Hard Drive and the Barebones server.  I normally wouldn’t have gone for that model, but I’m not going to complain in this case.  I already have a slimline DVD drive to install and I’ll get another 4 gigs of RAM down the road.

Thankfully a good bit of the server will be subsidized by projects it will be used on, but I should probably give a brief rundown of my thought process anyway.

First, goals.  This WILL be a fully virtualized server.  I’m going to use Xen with an OpenSUSE 11.1 dom0.  My old Ubuntu webservers (2) will be virtualized from their 1Us and installed, as well as an OpenSolaris domU I’ve been wanting to experiment with.

That all being said it means I’d need 2 main things, first, a shitton of RAM, second, a processor that supports full virtualization.  I’m being kind of cheap so I went for the second cheapest one offered by Intel.  Yes, yes, I know AMD offers chips that support this for much lower cost, however, this box will be installed far away from where I’m sitting.  and has a few issues requirements.  Namely it has to be simple and silent.  The Asus barebones 1Us are amazing.  I’ve worked with this model before and it has a sturdy case, simple layout, and is silent.  When I graduate I will have more time to play with server builds but until then I’m going with the Asus.

Beyond that there really weren’t any choices.  4 gigs vs 8 gigs was purely economical, as was the hard drive, and the DVD drive was already here.

I’m at the point in my Engineering study where I really have to give up on all this sys admin crap.  I need to move onto design, be it the electro-mechanical that surrounds the server or be it software design.  I know nothing about it and that’s really got to change.  Hopefully with this commitment I can forget about infrastructure for the next 4 years and concentrate only on real engineering.

This server should eat everything I throw at it, so maybe I’ll try and bomb it while I’m at Otakon.  We’ll see.