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