Difference between revisions of "ICub server laptop installation instructions"

From Wiki for iCub and Friends
Jump to: navigation, search
(NFS Server)
 
(40 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
''See [[ICub laptop installation instructions for old releases]] for older instructions''
 
''See [[ICub laptop installation instructions for old releases]] for older instructions''
  
This page contains guidelines for installation of the iCub server so that it matches the requirements of the Linux on the pc104 (open call configuration).
+
This page contains guidelines for installation of the iCub server laptop so that it matches the requirements of the Linux on the pc104 (open call configuration).
  
 
We assume you have installed a working Debian or Ubuntu on the laptop. You can freely decide to install 32 bit or 64 bit, the code compiles on both architectures. Be aware that if you plan to share the repository with other machines, all machines need to have the same architecture (32 versus 64 bits, same versions of the libraries). A possibility would be to share the same code directory and different builds.
 
We assume you have installed a working Debian or Ubuntu on the laptop. You can freely decide to install 32 bit or 64 bit, the code compiles on both architectures. Be aware that if you plan to share the repository with other machines, all machines need to have the same architecture (32 versus 64 bits, same versions of the libraries). A possibility would be to share the same code directory and different builds.
  
== Creation of the icub user ==
+
== ''Prerequisite'' : basic system setup for a iCub machine ==
 +
Please follow the instructions on page [[Generic iCub machine installation instructions]], in order to prepare a generic machine for the iCub network.<br />
  
You need to create the icub user. For nfs (see later) to work this user has to have the uid=1000 and guid=1000.
+
'''NOTE''' : set user as “''icub''” and hostname as “''icubsrv''” (not mandatory, but suggested)<br />
  
  adduser icub --uid 1000
+
Then, follow the below steps to customize it as the iCub Laptop
  
in LINUX starting procedure, it is asked to create the first user. By default uid is set at 1000.
+
== The host file ==
to make sure it is done do:
+
Add following lines in the file /etc/hosts
  id -u icub
+
10.0.0.2        pc104
  id -g icub
 
you should get 1000 in both commands
 
if NOT, manage the possible different number uid (int he case you have more than one user on your pc). In order to get it, use this following command to manage the uid and guid of the users
 
  usermod -u [UID number] -g [GID number] [username]
 
for example in our case:
 
  usermod -u 1000 -g 1000 icub
 
  
== Software Repository ==
+
== NFS Server ==
  
The laptop hosts two directories and export them using nfs. One of these directories is mounted by the pc104 (/exports/code-pc104), the other is mounted by the other machines on the network and by the laptop iteself (/exports/code) (in the past this directory was named code-64, but the 64 bit suffix is no longer important).
+
The laptop hosts two directories and export them using nfs. Both of the are mounted by the other machines on the network, by the PC104 and by the laptop iteself :
 +
*/exports/code - this contains the robot software sources such as YARP, iCub Software.
 +
*/local/yarp - this contains the YARP configuration files, shared by all the machine in the network
  
 
For this to work you need:
 
For this to work you need:
Line 33: Line 30:
  
 
* creates the directories that will be exported:
 
* creates the directories that will be exported:
 
+
   sudo mkdir -p /exports/code
   mkdir -p /exports/code
+
   sudo mkdir -p /exports/local_yarp
   mkdir -p /exports/local_yarp
 
 
 
Respectively for the laptop/other machines and the pc104.
 
  
 
Set appropriate permissions to the icub user:
 
Set appropriate permissions to the icub user:
Line 49: Line 43:
  
 
   /exports/code 10.0.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
 
   /exports/code 10.0.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
   /exports/code-pc104 10.0.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
+
   /exports/local_yarp 10.0.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
  
 
You might need to restart the nfs server.
 
You might need to restart the nfs server.
  
   /etc/init.d/nfs-kernel-server restart  
+
   sudo /etc/init.d/nfs-kernel-server restart  
  
 
Or just reboot the machine.
 
Or just reboot the machine.
  
* Now configure the laptop to mount /exports/code to /usr/local/src/robot
+
== Software repositories ==
 
+
Create a symbolic link to the code export path as follows (as root)
Edit /etc/fstab and add:
+
sudo ln -s /exports/code /usr/local/src/robot
 
+
Then clone the icub software repositories into /exports/code, as follows
  /exports/code   /usr/local/src/robot none bind
+
cd /exports/code
  /exports/local_yarp  /home/icub/.local/share/yarp none bind
+
git clone https://github.com/robotology/yarp.git
 
+
  git clone https://github.com/robotology/icub-main.git
Reboot or type:
+
git clone https://github.com/robotology/icub-firmware-shared
 
+
  git clone https://github.com/robotology/icub-firmware
  sudo mount -a
+
git clone https://github.com/robotology/icub-firmware-build
 
 
== Configuration of the icub user ==
 
  
* Install the ssh keys for password-less login, '''on the laptop''':
+
== YARP local path ==
 +
Create a symbolic link to the local yarp export path as follows (as root)
 +
mkdir -p /home/icub/.local/share
 +
ln -s /exports/local_yarp /home/icub/.local/share/yarp
  
Log in as icub and create an ssh key. Leave all choises to default just by pressing return button
+
== Install the ssh keys for password-less login on PC104==
  
  ssh-keygen -t rsa
+
Log in as icub and create an ssh key.
give this key file to pc104  
+
ssh-keygen -t rsa
 +
Leave all choises to default just by pressing return button<br />
 +
Upload this key file to pc104  
 
   ssh-copy-id -i /home/icub/.ssh/id_rsa.pub icub@pc104
 
   ssh-copy-id -i /home/icub/.ssh/id_rsa.pub icub@pc104
 
* Configure bashrc. Add these lines in /home/icub/.bashrc. '''Important''': these instructions go before the line that states "[ -z "$PS1" ] && return":
 
 
  export ICUB_ROOT=/usr/local/src/robot/iCub
 
  export ICUB_DIR=$ICUB_ROOT/main/build
 
  export YARP_ROOT=/usr/local/src/robot/yarp
 
  export YARP_DIR=$YARP_ROOT/build
 
  export YARP_ROBOT_NAME=NAME_OF_YOUR_ROBOT (e.g. iCubAberystwyth01)
 
  export YARP_DATA_DIRS=$YARP_DIR/share/yarp:$ICUB_DIR/share/iCub
 
  export PATH=$PATH:$ICUB_DIR/bin:$YARP_DIR/bin
 
 
* Configure your system to source bashrc in non-interactive sessions. There is no clear consensus on how to do this. A possibility is to add them to /etc/environment or /home/icub/.profile (see also the page [[Debugging_problems_with_yarprun]])
 
  
 
== Other configurations ==
 
== Other configurations ==
 +
=== IP forwarding and NAT ===
 +
Enable NAT and port forwarding so that the pc104 (and other machines on the network) have internet access (using wlan0 as external network interface)<br>
 +
Enable IP forwarding : edit the file /etc/sysctl.conf by modifying the below line as follows
 +
net.ipv4.ip_forward = 1
 +
Setup Network Address Translation : add the following file /etc/network/if-up.d/natting as follows
 +
#!/bin/sh -e
 +
iptables --table nat --append POSTROUTING --out-interface wlan0 -j MASQUERADE
 +
iptables --append FORWARD --in-interface eth0 -j ACCEPT
 +
==== Note about natting ====
 +
Please check that:
 +
# The name of your network interfaces are correct (in the above script ''wlan0'' is the EXTERNAL interface - connecting to the external world - and ''eth0'' is the INTERNAL interfaceg - connection to the PC104)
 +
# The above script must be executable, otherwise you can made it executuable by
 +
  chmod a+x /etc/network/if-up.d/natting
  
* Install ssh-server package:
+
=== Fix IP and DNS ===
  apt-get install openssh-server
+
Use the following configuration for the network
 
+
# The primary network interface
* Install python-tk package:
+
   auto eth0
  apt-get install python-tk
 
 
 
* It is handy to enable icub user to the sudoers
 
edit /etc/sudoers and add, '''note:''' useless if you are working on Ubuntu
 
  icub  ALL=(ALL) ALL
 
 
 
* '''Enable NAT''' and port forwarding so that the pc104 (and other machines on the network) have internet access (using wlan0 as external network interface)
 
Add these lines in /etc/rc.local:
 
  iptables -t nat -A POSTROUTING -o '''wlan0''' -j MASQUERADE
 
  echo 1 > /proc/sys/net/ipv4/ip_forward
 
where '''wlan0''' is the name of your system wireless communication so check if it is correct on the file /etc/udev/rules.d/70-persistent-net.rules you should get something like that:
 
  # PCI device 0x14e4:0x4359 (wl)
 
  SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="c0:f8:da:76:23:8b", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="'''wlan0'''"
 
* '''Fix IP and Gateway'''
 
On the same file as prior you should see another PCI device, it is the ethernet port, it looks like that
 
  # PCI device 0x8086:0x1502 (e1000e)
 
   SUBSYSTEM=="net", ACTION=="add",DRIVERS=="?*", ATTR{address}=="5c:26:0a:5d:77:2d", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="'''eth0'''"
 
where '''eth0''' is the number given by the system for the PCI board, use this number to set the file /etc/network/interfaces by removing everything and copy those lines
 
 
   allow-hotplug eth0
 
   allow-hotplug eth0
 
   iface eth0 inet static
 
   iface eth0 inet static
    address 10.0.0.1
+
  address 10.0.0.1
    netmask 255.255.255.0
+
  netmask 255.255.255.0
    broadcast 10.0.0.255
+
  network 10.0.0.0
    network 10.0.0.0
+
  broadcast 10.0.0.255
    dns-nameservers 10.0.0.1 8.8.8.8
+
  dns-search icub.local
    dns-domain icub.local
+
 
    dns-search icub.local
+
=== Clock synchronization ===
  auto eth0
 
* '''Clock synchronization''':
 
 
Download the ntp package
 
Download the ntp package
 
   sudo apt-get install ntp
 
   sudo apt-get install ntp
Line 133: Line 111:
 
   server 3.ubuntu.pool.ntp.org
 
   server 3.ubuntu.pool.ntp.org
 
or comment them by adding a # in front each lines and add those lines instead
 
or comment them by adding a # in front each lines and add those lines instead
   server 127.127.1.1
+
   # the folllowing lines make the server a master server
   fudge 127.127.1.1 stratum 8 refid NIST
+
  server          127.127.1.0 # local clock
 +
   fudge           127.127.1.0 stratum 10
 +
  broadcastdelay  0.008
 
The internal clock of the pc104 resets every time the pc104 is restarted. It is important you configure your local network so that the pc104 has the correct time. In general it is a good idea if all the machines on the iCub network have synchronized clock. This page explains how to do this: [[Clock_synchronization|Clock synchronization]].
 
The internal clock of the pc104 resets every time the pc104 is restarted. It is important you configure your local network so that the pc104 has the correct time. In general it is a good idea if all the machines on the iCub network have synchronized clock. This page explains how to do this: [[Clock_synchronization|Clock synchronization]].
 
* If your network does not have a dns it is a good idea to add the pc104 to /etc/hosts by adding the line:
 
  10.0.0.10    pc104
 
 
(note that in the past the pc104 ip address was 10.0.0.2. This it has been recently changed)
 
  
 
== Installation of the pc104 ==
 
== Installation of the pc104 ==
Line 150: Line 125:
 
Now you can install YARP and the iCub software both on the laptop and on the pc104:
 
Now you can install YARP and the iCub software both on the laptop and on the pc104:
  
[[ICub_Software_Installation|Software installation]]
+
[[Linux:Installation from sources|Software build and installation from sources]]

Latest revision as of 10:40, 6 April 2018

These instructions only apply to YARP > 2.3.23 and iCub > 1.1.13 software versions

See ICub laptop installation instructions for old releases for older instructions

This page contains guidelines for installation of the iCub server laptop so that it matches the requirements of the Linux on the pc104 (open call configuration).

We assume you have installed a working Debian or Ubuntu on the laptop. You can freely decide to install 32 bit or 64 bit, the code compiles on both architectures. Be aware that if you plan to share the repository with other machines, all machines need to have the same architecture (32 versus 64 bits, same versions of the libraries). A possibility would be to share the same code directory and different builds.

Prerequisite : basic system setup for a iCub machine

Please follow the instructions on page Generic iCub machine installation instructions, in order to prepare a generic machine for the iCub network.

NOTE : set user as “icub” and hostname as “icubsrv” (not mandatory, but suggested)

Then, follow the below steps to customize it as the iCub Laptop

The host file

Add following lines in the file /etc/hosts

10.0.0.2        pc104

NFS Server

The laptop hosts two directories and export them using nfs. Both of the are mounted by the other machines on the network, by the PC104 and by the laptop iteself :

  • /exports/code - this contains the robot software sources such as YARP, iCub Software.
  • /local/yarp - this contains the YARP configuration files, shared by all the machine in the network

For this to work you need:

  • install nfs server on the laptop:
 sudo apt-get install nfs-kernel-server nfs-common portmap
  • creates the directories that will be exported:
 sudo mkdir -p /exports/code
 sudo mkdir -p /exports/local_yarp

Set appropriate permissions to the icub user:

 sudo chown icub:icub -R /exports/code
 sudo chown icub:icub -R /exports/local_yarp
  • Now configure the nfs-kernel-server:

Add these lines to /etc/exports:

 /exports/code 10.0.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
 /exports/local_yarp 10.0.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)

You might need to restart the nfs server.

 sudo /etc/init.d/nfs-kernel-server restart 

Or just reboot the machine.

Software repositories

Create a symbolic link to the code export path as follows (as root)

sudo ln -s /exports/code /usr/local/src/robot

Then clone the icub software repositories into /exports/code, as follows

cd /exports/code
git clone https://github.com/robotology/yarp.git
git clone https://github.com/robotology/icub-main.git
git clone https://github.com/robotology/icub-firmware-shared
git clone https://github.com/robotology/icub-firmware
git clone https://github.com/robotology/icub-firmware-build

YARP local path

Create a symbolic link to the local yarp export path as follows (as root)

mkdir -p /home/icub/.local/share
ln -s /exports/local_yarp /home/icub/.local/share/yarp

Install the ssh keys for password-less login on PC104

Log in as icub and create an ssh key.

ssh-keygen -t rsa

Leave all choises to default just by pressing return button
Upload this key file to pc104

 ssh-copy-id -i /home/icub/.ssh/id_rsa.pub icub@pc104

Other configurations

IP forwarding and NAT

Enable NAT and port forwarding so that the pc104 (and other machines on the network) have internet access (using wlan0 as external network interface)
Enable IP forwarding : edit the file /etc/sysctl.conf by modifying the below line as follows

net.ipv4.ip_forward = 1

Setup Network Address Translation : add the following file /etc/network/if-up.d/natting as follows

#!/bin/sh -e
iptables --table nat --append POSTROUTING --out-interface wlan0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT

Note about natting

Please check that:

  1. The name of your network interfaces are correct (in the above script wlan0 is the EXTERNAL interface - connecting to the external world - and eth0 is the INTERNAL interfaceg - connection to the PC104)
  2. The above script must be executable, otherwise you can made it executuable by
 chmod a+x /etc/network/if-up.d/natting

Fix IP and DNS

Use the following configuration for the network

# The primary network interface
 auto eth0
 allow-hotplug eth0
 iface eth0 inet static
  address 10.0.0.1
  netmask 255.255.255.0
  network 10.0.0.0
  broadcast 10.0.0.255
  dns-search icub.local

Clock synchronization

Download the ntp package

 sudo apt-get install ntp

Your Laptop has to be the clock of the connection with the pc104 in case of no internet access so replace those lines from the file /etc/ntp.conf

 server 0.ubuntu.pool.ntp.org
 server 1.ubuntu.pool.ntp.org
 server 2.ubuntu.pool.ntp.org
 server 3.ubuntu.pool.ntp.org

or comment them by adding a # in front each lines and add those lines instead

 # the folllowing lines make the server a master server
 server          127.127.1.0 # local clock
 fudge           127.127.1.0 stratum 10
 broadcastdelay  0.008

The internal clock of the pc104 resets every time the pc104 is restarted. It is important you configure your local network so that the pc104 has the correct time. In general it is a good idea if all the machines on the iCub network have synchronized clock. This page explains how to do this: Clock synchronization.

Installation of the pc104

You have to use one of the Linux images we provide. This page contains some information about the Linux on the pc104, and important instructions for installing the startup scripts: The_Linux_on_the_pc104.

Code compilation

Now you can install YARP and the iCub software both on the laptop and on the pc104:

Software build and installation from sources