Connecting via hostnames

One of the problems with IP addresses is they are hard to reconcile to the machine they relate to. Its always much easier to talk about pimaster or pislave1 than 192.168.1.200 or 192.168.1.201. If you have a crappy DHCP server like I have with the BT Home Hub, then the easier way around this is to modify the hosts file on each of the machines, which is used by the OS to lookup the mapping between hostname and ip before it goes off to name servers.

sudo vi /etc/hosts

and you’ll see something like this

Add lines ( highlighted in blue ) for each device in your network

I’ve replaced the name for 127.0.0.1 with pislave1, the name of the device I am logged into, and then added the ip addresses for pimaster, pislave1-4 and readynas

Repeat this for each machine, machine sure you change the name for the device 127.0.0.1 to the actual name of the device you are logged into

It lives !!!!!!!!!!!!!!!!!!!

It finally works, all the cards are formatted and the devices networked, I now have a 5 node Super Computer just itching for world domination.

Below you can see PiSlaves1-4 and PiMaster sat on top, connected through their own 100Mbs hub to my main 1GB hub

And there are all 5 machines opened at the terminal

Its time to create dastardly deeds with all this computing power now

 

Mounting an NFS Folder

Most of this info was pulled from the website Peter Mount’s Blog

First we need to tell NFS to use statd, to do this

sudo /etc/init.d/rpcbind start 
sudo vi /etc/default/nfs-common
add the line "NEED_STATD=yes"
reboot PI or /etc/init.d/nfs-common restart

Next we need to create a local folder that will be the mount point of the remount NFS folder. In this instance I have a folder called ‘raspberry’ on my Netgear RasdyNAS NV+ device

sudo mkdir -p /nas/raspberry
sudo chmod 777 /nas/raspberry

Now we can mount the remote folder to local folder

sudo mount 192.168.1.199:/raspberry /nas/raspberry

Change the IP address 192.168.1.199 to whatever you NFS server has.

If you subsequently want to remove the remote folder, or unmount it, then using the following command

sudo umount /nas/raspberry

If you want the mount to be available everytime you boot the pi, then you need an entry in /etc/fstab

sudo vi /etc/fstab

And add the following entry at the end of the file:

192.168.1.199:/raspberry /nas/raspberry nfs defaults 0 0

Thats it. The next time you reboot the pi it will automatically mount that drive.

Duplicating an SD Card Image

Once we have created an SD Card image of our base system, updated the OS and configured for SSH access we don’t want to have to do this over and over again, so this section will show you how to make a copy of your original SD Card and then burn it onto all the others

Without plugging in your SD card, from the command line run the command df

df

Filesystem                        512-blocks       Used Available Capacity  iused     ifree %iused  Mounted on
/dev/disk1                        1247961912  377253544 870196368    31% 47220691 108774546   30%   /
devfs                                    378        378         0   100%      656         0  100%   /dev
map -hosts                                 0          0         0   100%        0         0  100%   /net
map auto_home                              0          0         0   100%        0         0  100%   /home
localhost:/FubuLodeAG-ddMZnEma0co 1247961912 1247961912         0   100%        0         0  100%   /Volumes/MobileBackups

Then insert the card, wait for it to appear on your desktop and then df it again. You will notice the only difference is the new line with your card name on it

df

Filesystem                        512-blocks       Used Available Capacity  iused     ifree %iused  Mounted on
/dev/disk1                        1247961912  377253544 870196368    31% 47220691 108774546   30%   /
devfs                                    378        378         0   100%      656         0  100%   /dev
map -hosts                                 0          0         0   100%        0         0  100%   /net
map auto_home                              0          0         0   100%        0         0  100%   /home
localhost:/FubuLodeAG-ddMZnEma0co 1247961912 1247961912         0   100%        0         0  100%   /Volumes/MobileBackups
/dev/disk2s1                          114576      68000     46576    60%      512         0  100%   /Volumes/Untitled

In this instance my card has been mounted as /dev/disk2s1 and its the number 2 that we are interested in so remember it.

To be able to copy the image we first need to unmount it with the unmount command

sudo diskutil unmount /dev/disk2s1

You will notice the card disappears from your desktop

Next we want to make a copy of the image using the dd command

sudo dd bs=1m if=/dev/rdisk2 of=RPi.img

And finally eject the SD card so we can insert another one and copy the new image to that

sudo diskutil eject /dev/rdisk2

Once one card is done you can repeat this for every card for the super computer. As each card is done, you can boot them individually and change the static ip and hostname using the information documented in Setup Stage 2 – Network Configuration

Setup Stage 4 – Updating the system

Now we can login without a password using SSH and our secure keys

Working behind a proxy

If you are behind a proxy server, then you need to follow the following instructions. If you are not behind a proxy server, or don’t know what one is then just to the next section Updating your system

Its a bit of a catch 22 now, before we explore updating the system with apt-get we need to set it up to access files on the internet from behind a proxy.

The proxy configuration is stored in the a folder at /etc/apt/apt.conf.d/. Change to this folder and the create a blank file called ’10proxy’ using the commands as they are below

Enter the following details into the empty file, substituting the IP address and port below with the details of you own proxy server and port.

Save the file by pressing esc and the enter !wq

Updating your system

To update our system using the command ‘apt-get’. Enter the following command and the system will chunter away from a while updating the base system with anythiing that has changed since it was installed,

Next enter the following command to install a better editor than ‘vi’, this again will chunter away and install an editor called ‘vim’

 
sudo apt-get install vim

Once Vim is installed we can edit some of the basic configuration files when we login.

cd ~
vim .bashrc

This will load the file .bashrc into vim, its quite a large file so we don’t display it here, but scroll down until you find the following

Remove the # from the beginning of the lines which contain the command ‘alias’ so it looks like this

If you are not behind a proxy you can skip this section and you are done, otherwise, scroll down to the bottom and enter the following line

export http_proxy="http://10.150.37.4:8080"

Substituting the IP address and port below with the details of you own proxy server and port making sure its the same IP and port you used above when configuring the proxy settings for apt-get, so that it looks something like this

You are now done, press esc and the enter !wq to save the file and exit, and thats it, we are ready to start installing all manner of magic software needed by a super computer

Setup Stage 3 – Configuring SSH

If you don’t know what SSH is or what it can do for you, check out the the articles Secure Shell on Wikipedia

Before we begin check out the blog entry Generating an SSH key pair

As we start to build our super computer we don’t want to have to access each of the PI’s by connecting them to separate screens, keyboards and mice. Instead we’ll connect them only to the network and access all of the Pi’s from a computer using SSH and so we don’t need to enter a password everytime we log in, we’ll use secure keys to take care of this.

To make sure everything is working, first SSH into your pi with the following command, substituting the name keith for the name you used.

ssh keith@raspberrypi

Enter the password you set for the user, and this should log you into a terminal on the remote raspberry pi. It should look something like this

When you are happy you are logged in, exit back to you computer by just typing ‘exit’

Next we need to create a pair of keys, this is done by entering the command ‘ssh-keygen’ as below and follow the prompts for entering the pass phrase which secures the keys

Keys come in a pair, a public and private part. We give the public part to any system we want to connect to and keep the private part secret to ourselves.

They keys are stored in a folder called ‘.ssh’, you can see them by entering the command ‘ls .ssh’ as below

Once we are happy the keys have been generated we need to copy the public key to the system we want to connect to. This is done using the scp command as follows

scp .ssh/id_rsa.pub keith@raspberrypi:~

Once this is done, ssh again into the raspberry pi using the same commands as above

ssh keith@raspberrypi
mkdir .ssh
cat id_rsa.pub >> .ssh/authorized_keys
exit

You can now SSH again into the raspberry, but this time it won’t ask you for the password as it uses your key instead

ssh keith@raspberrypi

Most of this information was taken from the following website How to use RSA Key for SSH Authentication

Setup Stage 2 – Network Configuration

Now that you have an SD configure with the base system, we need to configure the network so that we have a static ip address and unique name for each pi.

When the pi boots by default it will grab a dynamic ip address via dhcp and have the default hostname of raspberrypi, but we are going to have 5 Pi’s on our network so each needs its own name, plus we want to ensure that each Pi always boots with the same ip address.

First we edit the network configuration file

sudo vi /etc/network/interfaces

Which will look something like this

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

The network card is called eth0, and we need to change it from dhcp to static ip address. Edit the file, so it looks like use. You can use whatever ip address that works for your network. For this super computer I am going to use 192.168.1.200 – 192.168.1.205 for the Pi’s

auto lo

iface lo inet loopback
iface eth0 inet static
    address 192.168.1.201
    netmask 255.255.255.0
    gateway 192.168.1.254

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

We will set the other 4 Pi’s as do the individual per Pi configuration later

Next we need to edit the hostname file so that each Pi has a unique name

sudo vi /etc/hostname

Replace raspberrypi with unique name, for the first device I’ll use pislave1, and the configure 3 as pislave2, pislave3 and pislave4 and also have a pilaster which will control the 4 slaves

 

Setup Stage 1 – Create a new user

So we’ve burnt an SD card, and installed our base operating system, we’ve booted the card and configured the base operating and rebooted it and logged in with out ‘pi’ user. Now its time to create a user, and install the base tools including updating the operating system

After you have logged in, its best to create a user other than pi that will do all the work, as pi is the default user and its nice to have a user that is you 😉

We create a user using the ‘adduser’ command. Enter the following command and you’ll see the system respond with something similar. Everytime ‘adduser’ asks you a question you can just press enter as the default answer is always fine at this stage

pi@raspberrypi ~ $ sudo adduser keith
Adding user `keith' ...
Adding new group `keith' (1002) ...
Adding new user `keith' (1002) with group `keith' ...
Creating home directory `/home/keith' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for keith
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
pi@raspberrypi ~ $

So we now have a user created. To allow this user to be able to modify the system we have to give this user super user privileges, and this is a 2 stage process

The first stage is to use the ‘visudo’ command which brings up the file containing the list of all users with ‘su’ or super user priviledges.

pi@raspberrypi ~ $ sudo visudo

This will bring up the following screen

Underneath the line pi = ALL(ALL) NOPASSWD: ALL, enter a new line using the user you created above, the line should read keith = ALL=(ALL) ALL, and the result should look like this

To save and exit, type Ctrl-O remove the .tmp extension from the file, hit enter and the hit Ctrl-X to exit.

The next stage is to complete adding the user to su privs, enter the following command

pi@raspberrypi ~ $ sudo adduser keith sudo

Generating an SSH key pair

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cantin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/cantin/.ssh/id_rsa.
Your public key has been saved in /home/cantin/.ssh/id_rsa.pub.
The key fingerprint is:
f6:61:a8:27:35:cf:4c:6d:13:22:70:cf:4c:c8:a0:23 cantin@sodium