Cortex
Cortex is a computation rack for VisLab humanoid robots.
The Cluster
It contains 7 machines:
- 1 server that manages startup, shutdown and the file system of the clients.
- 6 clients that run the user processes.
All clients mount the same file system. Therefore, performing changes in the file system of one of the clients will reflect to all others.
The Network
Cortex machines are at the vislab robotics network domain:
- Domain: visnet
- Subnet: 10.10.1.*
Cortex nodes
Cortex server and clients have the following ip's and domain names:
- Server: 10.10.1.240, server.visnet
- Client 1: 10.10.1.1, cortex1.visnet
- Client 2: 10.10.1.2, cortex2.visnet
- Client 3: 10.10.1.3, cortex3.visnet
- Client 4: 10.10.1.4, cortex4.visnet
- Client 5: 10.10.1.5, cortex5.visnet
- Client 6: 10.10.1.6, cortex6.visnet
Other nodes
Other assigned ip's and names are:
- Gateway: 10.10.1.254, gtisr.visnet
- Cortex Switch: 10.10.1.250, swcompurack.visnet
- Vislab Switch: 10.10.1.251, swvislab.visnet
- iCubBrain1: 10.10.1.41, icubbrain1.visnet
- iCubBrain2: 10.10.1.42, icubbrain2.visnet
- DHCP Range: 10.10.1.100-199
- Chico pc104: 10.10.1.50
- Chico clients: 10.10.51-59
- Chica Net: 10.10.1.60-69
- Balta Net: 10.10.1.70-79
DNS Configuration
Name resolution in the visnet network is managed by a bind system in server.visnet. To add/change the table of names and ip's do 'cd /etc/bind', edit and change the file ' /visnet.src' (need super user permission)and then run 'make'. After a while (the tables must be copied to ISR DNS server, may take a few minutes) you can ping the new machines by name.
At the time of this writing, the configuration file is as follows:
## 10:45, 2 September 2009 (UTC)10:45, 2 September 2009 (UTC)10:45, 2 September 2009 (UTC)10:45, 2 September 2009 (UTC)Alex ## Tabela de DNS -- VisNet ## 10:45, 2 September 2009 (UTC)10:45, 2 September 2009 (UTC)10:45, 2 September 2009 (UTC)10:45, 2 September 2009 (UTC)Alex ## domain("visnet") prefix("10.10.1") soa("server.isrnet", "alex", "isr.ist.utl.pt") ns("server.visnet") ## ## Sintaxe: ## NOME ------- IP ---- COMENTARIO (entre aspas) ---------------------- ## a(cortex1, 1, "Compurack client 1") a(cortex2, 2, "Compurack client 2") a(cortex3, 3, "Compurack client 3") a(cortex4, 4, "Compurack client 4") a(cortex5, 5, "Compurack client 5") a(cortex6, 6, "Compurack client 6") a(cortex7, 7, "Compurack client 7") a(icubbrain1, 41, "Supermicro 1") a(icubbrain2, 42, "Supermicro 2") a(pc104, 50, "Chico pc104") a(chico1, 51, "iCub chico") a(chico2, 52, "iCub chico") a(chico3, 53, "iCub chico") a(chico4, 54, "iCub chico") a(chico5, 55, "iCub chico") a(chico6, 56, "iCub chico") a(chico7, 57, "iCub chico") a(chico8, 58, "iCub chico") a(chico9, 59, "iCub chico") a(chica, 60, "iCub chica") a(chica1, 61, "iCub chica") a(chica2, 62, "iCub chica") a(chica3, 63, "iCub chica") a(chica4, 64, "iCub chica") a(chica5, 65, "iCub chica") a(chica6, 66, "iCub chica") a(chica7, 67, "iCub chica") a(chica8, 68, "iCub chica") a(chica9, 69, "iCub chica") a(balta, 70, "Baltazar") a(balta1, 71, "Baltazar") a(balta2, 72, "Baltazar") a(balta3, 73, "Baltazar") a(balta4, 74, "Baltazar") a(balta5, 75, "Baltazar") a(balta6, 76, "Baltazar") a(balta7, 77, "Baltazar") a(balta8, 78, "Baltazar") a(balta9, 79, "Baltazar") range(dhcp-, 100, 199) a(server, 240, "Compurack server") a(swcompurack, 250, "Compurack switch") a(swvislab, 251, "Vislab switch") a(gtisr, 254, "gateway") ## -- EOF -- ### Local Variables: ### ### gendns-keywords: ("^domain" "^prefix" "^soa" "^ns" "^mx" "^a" "^range" "^rangex" "^cname" ("\t" . highlight)) ### ### font-lock-defaults: (gendns-keywords nil t ((?# . "<") (?\n . ">")) nil) ### ### mode: font-lock ### ### End: ###
Connectivity
Cortex machines are connected to Cortex Switch, that links to Vislab switch with a fiber optic connection of 4Gb/s.
Traffic
Network traffic can be checked at:
- http://inode1.isrnet/cacti (user guest, pass guest)
The Cortex Server
The server has:
- Boot folder for the clients at /tftpboot/pxelinux.cfg. Contains the files:
- default - default boot file
- <mac_address> - specific for a machine with the given mac address.
- startup scripts for each machine at /nfsroot/app
The Cortex Clients
Configuration
The clients have:
- A superuser account (compurack) to administer system wide settings (configurations, libs, etc)
- Normal user accounts. The logon script runs by default the content of file $HOME/.bash_env, where users can set their environment variables, e.g. export ICUB_DIR=$HOME/iCub.
- A yarp account to update and install the yarp library. YARP_DIR is set by default to /home/yarp/yarp2 to all users (in /etc/bash.bashrc).
- An "icub" account with sudo privileges (done with
sudo adduser icub admin
on 2009-06-30)
Global Libraries and Repositories
YARP
Yarp was set using the following commands (after logging in as yarp):
cvs -d:pserver:anonymous@yarp0.cvs.sourceforge.net:/cvsroot/yarp0 login cvs -z3 -d:pserver:anonymous@yarp0.cvs.sourceforge.net:/cvsroot/yarp0 co -P yarp2 cd yarp2 cmake . (or ccmake .) make make test
OTHER
Other system wide libraries/apps are installed by the superuser. Currently the following libraries are installed:
Curses
apt-get install libncurses5-dev
ACE
apt-get install libace-dev
CMake
apt-get install cmake
GSL
apt-get install libgsl0-dev
GTK/GTKMM/Glade
apt-get install libgtk2.0-dev apt-get install libgtkmm-2.4-dev apt-get install libglademm-2.4-dev
OpenCV
THE REPOSITORY IS NOW IN SVN FORM, WE NEED TO UPDATE THIS. cvs -z3 -d:pserver:anonymous@opencvlibrary.cvs.sourceforge.net:/cvsroot/opencvlibrary co -P opencv cd opencv ./configure make make install add /usr/local/lib to /etc/ld.so.conf
GLEW (OpenGL extension finder)
apt-get install glew-utils apt-get install libglew1.5-dev
GLUT (Glu Utility toolkit)
apt-get install libglut-dev
User Repositories
Each user should manage its own repositories, e.g. the iCub repository:
cvs -d vislab@cvs.robotcub.org:/cvsroot/robotcub co iCub
then you should add <iCub>/bin to your PATH by editing your ~/.bashrc like this:
PATH=$PATH:~/iCub/bin/ ICUB_DIR=~/iCub/ export ICUB_DIR ICUB_ROOT=$ICUB_DIR export ICUB_ROOT
You should also edit ~/.bash_env adding these lines:
export ICUB_DIR=$HOME/iCub export ICUB_ROOT=$ICUB_DIR
this is needed when you connect non-interactively via ssh to a Cortex computer, for instance when execute a "yarp run ..." on a Cortex, from Chico2.
Be aware that Ubuntu 7.10 (the version currently installed on the cluster) has a conflict with iKin, specifically with iCub/conf/FindIPOPT.cmake (used by iKin): for now, in order to compile iKin, change the following line of FindIPOPT.cmake from
SET(IPOPT_LIB ${IPOPT_LIB} gfortranbegin gfortran)
to
SET(IPOPT_LIB ${IPOPT_LIB} gfortran)
Other configurations
Network tuning
sysctl -w net.core.rmem_max=8388608 sysctl -w net.core.wmem_max=8388608 sysctl -w net.core.rmem_default=65536 sysctl -w net.core.wmem_default=65536 sysctl -w net.ipv4.tcp_rmem='4096 87380 8388608' sysctl -w net.ipv4.tcp_wmem='4096 65536 8388608' sysctl -w net.ipv4.tcp_mem='8388608 8388608 8388608' sysctl -w net.ipv4.route.flush=1
Prompt ($PS1)
The prompt is set to "user@cortex?:pwd$" in /etc/bash.bashrc. With those settings, if you log in to Cortex1, the prompt will be "user@cortex1:~$".
We chose to do so because sometimes it's convenient to have the number of the Cortex machine you're working on embedded in the prompt.
By default, though, this configuration is overridden in the users' ~/.bashrc file, and the prompt is set to "user@source" regardless of the Cortex machine you log in to.
If you want to inhibit this behaviour in ~/.bashrc and thus have a prompt like "user@cortex?:pwd", just comment these lines in your ~/.bashrc:
# set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color) PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' ;; *) PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' ;; esac
However, for users created after 2009-05-07, the prompt is already set to "user@cortex?:pwd$" by default.
Helper commands
- Check the kernel : uname -m
- Check the file versions : file
- Set bash shell in /etc/passwd
- Check disk space: du –h –s /home
- Check per user processes: ps -U <user>