go.dedis.ch/onet/v4@v4.0.0-pre1/simul/platform/mininet/setup_servers.sh (about) 1 #!/usr/bin/env bash 2 mininet="$(dirname ${BASH_SOURCE[0]})" 3 set -e 4 5 SERVER_GW="$1" 6 SERVERS="$@" 7 KEYS=/tmp/server_keys 8 SSH_TYPE="-t ssh-ed25519" 9 SSH_ID=~/.ssh/id_rsa 10 if [ -f /etc/issue ]; then 11 echo Issue exists 12 if grep -q "Debian.*7" /etc/issue; then 13 SSH_TYPE="" 14 fi 15 fi 16 17 if [ ! -f $SSH_ID ]; then 18 echo "Creating global key" 19 echo -e '\n\n\n\n' | ssh-keygen 20 fi 21 22 rm -f $KEYS 23 for s in $SERVERS; do 24 echo Starting to install on $s 25 login=root@$s 26 ip=$( host $s | sed -e "s/.* //" ) 27 ssh-keygen -R $s > /dev/null || true 28 ssh-keygen -R $ip > /dev/null || true 29 ssh-keyscan $SSH_TYPE $s >> ~/.ssh/known_hosts 2> /dev/null 30 ssh-copy-id -f -i $SSH_ID $login &> /dev/null 31 ssh $login "test ! -f .ssh/id_rsa && echo -e '\n\n\n\n' | ssh-keygen > /dev/null" || true 32 ssh $login cat .ssh/id_rsa.pub >> $KEYS 33 if ! ssh $login "egrep -q '(14.04|16.04|Debian GNU/Linux 8)' /etc/issue"; then 34 clear 35 echo "$s does not have Ubuntu 14.04, 16.04 or Debian 8 installed - aborting" 36 exit 1 37 fi 38 scp $mininet/install_mininet.sh $login: > /dev/null 39 if ! ssh $login which mn; then 40 echo "Fetching latest package info on $login" 41 ssh $login "apt-get update" &> /dev/null 42 echo "Installing psmisc on $login" 43 ssh $login "apt-get install -y psmisc" &> /dev/null 44 echo "Launching installation of mininet in background on $login" 45 ssh -f $login "./install_mininet.sh > /dev/null" &> /dev/null 46 else 47 echo "Mininet already installed on $login" 48 fi 49 done 50 51 DONE=0 52 NBR=$( echo $SERVERS | wc -w ) 53 while [ $DONE -lt $NBR ]; do 54 DONE=0 55 clear 56 echo "$( date ) - Waiting on $NBR servers - $DONE are done" 57 for s in $SERVERS; do 58 if ! ssh root@$s "ps ax | grep -v ps | grep install | grep -q mininet"; then 59 DONE=$(( DONE + 1 )) 60 else 61 echo -e "\nProcesses on $s" 62 ssh root@$s 'pstree -p $( ps ax | grep "bash ./install_mininet.sh" | grep -v grep | sed -e "s/ *\([0-9]*\) .*/\1/" )' 63 fi 64 done 65 sleep 2 66 done 67 68 echo -e "\nAll servers are done installing - copying ssh-keys" 69 70 rm -f server_list 71 for s in $SERVERS; do 72 login=root@$s 73 cat $KEYS | ssh $login "cat - >> .ssh/authorized_keys" 74 ip=$( host $s | sed -e "s/.* //" ) 75 ssh root@$SERVER_GW "ssh-keyscan $SSH_TYPE $s >> .ssh/known_hosts 2> /dev/null" 76 ssh root@$SERVER_GW "ssh-keyscan $SSH_TYPE $ip >> .ssh/known_hosts 2> /dev/null" 77 echo $s >> server_list 78 done 79 80 echo "Done installing to:" 81 cat server_list 82 rm $KEYS