Skip to content

Instantly share code, notes, and snippets.

@imharvol
Last active December 21, 2021 16:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save imharvol/bce8065d3b38547e0415a788558a5ff8 to your computer and use it in GitHub Desktop.
Save imharvol/bce8065d3b38547e0415a788558a5ff8 to your computer and use it in GitHub Desktop.
Script de setup para la práctica 4 de IC con OpenMP y OpenMPI
#!/bin/bash
# Puede ser necesario desactivar el firewall o si estás usando máquinas en redes distintas entre los ordenadores, abrir puertos
# Añadimos las IPs de todas las máquinas que queramos preparar, separadas por espacios
instance_ips=( 0.0.0.0 0.0.0.0 )
instance_username=""
repo="git@github.com:imharvol/2021-ic-practica-4.git"
# Aqui hay que pegar la clave que se genera en ~/.ssh/id_rsa al hacer ssh-keygen
id_rsa_file=$(mktemp)
cat<<'EOF' >> ${id_rsa_file}
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
EOF
# Aqui hay que pegar la clave que se genera en ~/.ssh/id_rsa.pub al hacer ssh-keygen
id_rsa_pub_file=$(mktemp).pub
cat<<'EOF' >> ${id_rsa_pub_file}
ssh-rsa ...
EOF
for instance_ip in "${instance_ips[@]}"
do
echo "Setting up $instance_ip"
# Añadimos la IP a known hosts para no tener problemas al conectarnos por SSH
ssh-keyscan -H ${instance_ip} >> ~/.ssh/known_hosts
# Añadimos la clave pública a ~/.ssh/authorized_hosts para no tener que introducir la contraseña al conectarnos por SSH
ssh-copy-id -i ${id_rsa_pub_file} ${instance_username}@${instance_ip}
# Copiamos la clave pública y privada, así nos podemos conectar de cualquier ordenador a cualquier ordenador y por lo tanto cualquiera puede ser el "coordinador"
scp ${id_rsa_file} ${instance_username}@${instance_ip}:~/.ssh/id_rsa
scp ${id_rsa_pub_file} ${instance_username}@${instance_ip}:~/.ssh/id_rsa.pub
# Ejeculamos el siguiente script en la máquina remota
ssh -T ${instance_username}@${instance_ip} <<'EOF'
git_branch=pmc91
hosts="0.0.0.0\n0.0.0.0" # Esto hay que actualizarlo con las ips de todas las máquinas que queremos preparar separadas por un \n
# Descomentar si no tiene nada instalado
#sudo apt-get update -y && sudo apt-get upgrade -y
#sudo apt-get install vim git screen tmux htop -y
#sudo apt-get install gcc g++ make -y cmake
#sudo apt-get install openmpi-bin openmpi-common openmpi-doc libopencv-dev -y
# Añadimos la IP de GitHub a known_hosts para no tener ningún problema al hacer git clone
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
# rm -rf 2021-ic-practica-4*
# Clonamos el repositorio y nos vamos a la branch que queramos ejecutar
git clone $repo
cd $repo_name
git fetch origin $repo_branch
git checkout $repo_branch
# Compilamos
./get_dataset.sh
cd build
# Creamos el archivo de los hosts y los añadimos
touch hosts.txt
chmod 600 hosts.txt
echo -e $hosts > hosts.txt
# Añadimos todos los ordenadores a known_hosts para no tener problemas al conectarse los unos a los otros
instance_ips=( 0.0.0.0 0.0.0.0 ) # Lo mismo que hemos hecho al principio
for instance_ip in "${instance_ips[@]}"
do
ssh-keyscan -H ${instance_ip} >> ~/.ssh/known_hosts
done
#sudo reboot now
EOF
echo "Finished setting up $instance_ip"
done
# Para ejecutar:
# interfaz_red="enp2s0" \
# numero_nodos="5" \
# mpirun -mca plm_rsh_no_tree_spawn 1 -mca btl_tcp_if_include $interfaz_red --hostfile hosts.txt -pernode -n $numero_nodos ./cv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment