Enviado em 28/10/2013 - 19:03h
Olá pessoal eu resolvi automatizar o processo de instalação de um cluster usando o shell do Linux. Aí vou mandando o script para que vocês possam implementar, melhorar ou até mesmo reecria-lo.
#!/bin/bash
# ===================================================================
# = Autor: Francisco Iago Lira Passos =
# = Email: iagolirapassos@gmail.com =
# = Data: Criado em 26 de outubro de 2013 =
# = Autorização: Livre para melhorias =
# ===================================================================
clear
echo "======O número de computadores deve ser um, pois as configurações são de pc-em-pc!======="
echo "======O script foi configurado com o nome Master para o computador Mestre!======"
echo "======Quando for inserir o nome do usuário 'mestre' use 'Master'======"
echo "======Esse script foi criado baseado nos compuatadores que possuem o mesmo nome de usuário e computador!===="
echo "========Passo 1========"
echo "Entre com números inteiros"
echo "======Os usuários possuem o mesmo nome? sim(1) ou não(0)======"
read mesmo
if [ $mesmo -eq 0 ]; then
echo "Pois configure os pc's para que todos tenham usuários com nomes iguais!"
else
echo "======Ok! Passando pro próximo passo!======="
fi
echo "=======Quantos computadores serão configurados na rede?======="
read numrede
IP=($numrede)
echo "======As configurações de /etc/hosts ja foram feitas? sim(1) ou não(0)======"
read name
if [ $name -eq 1 ]; then
echo "======Ok!Passando para o proximo passo!======"
else
echo "======Aqui serão adicionados os Ip's e os usuarios no arquivo /etc/hosts======="
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13
do
if [ ${i} -gt $numrede ]; then
break
fi
echo "$cont"
echo "Entre com o IP do usuário (ex: 10.38.14.1)"
read IP[cont]
echo "Entre com o nome de usuário (ex: Master, slave1,...)"
read user[cont]
echo "Qual a senha do usuário"
read senha[cont]
echo "${IP[cont]} ${user[cont]} ${senha[cont]}"
echo "${IP[cont]} ${user[cont]}" | sudo tee -a /etc/hosts
done
fi
clear
echo "========Passo 2========"
echo "===Instalando o NFS===="
echo "======A maquina é slave(1) ou master(0)?======="
read ms
# ============Configuração do(s) slave(s)======================
if [ $ms -eq 1 ]; then
echo "======O cifs-utils já está instalado? sim(1) ou não(0)======"
read sif
if [ $sif -eq 0 ]; then
sudo apt-get install cifs-utils
else
echo "======Ok! Passando para o proximo passo!======"
fi
echo "=======O nfs-client já está instalado? sim(1) ou não(0)======="
read nfs
if [ $nfs -eq 0 ]; then
sudo apt-get install nfs-client
else
echo "=======Ok! Passando para o proximo passo!======="
fi
echo "======Digite o nome da pasta que deseja compartilhar(ex: /home/user/nomefile)======"
read path1
# criando o ponto de montagem
sudo mkdir $path1
echo "Master:$path1 $path1 nfs" | sudo tee -a /etc/fstab
sudo mount Master:$path1 $path1
# Agora vamos verificar se as pastas foram montadas corretamente
sudo mount -a
clear
# =============Passo 3=====================
echo "Instalando o GCC"
echo "=======O build-essencial já está instalado? sim(1) ou não(0)======"
read build
if [ $build -eq 0 ]; then
sudo apt-get install build-essencial
else
echo "======Ok! Passando para o proximo passo!======="
fi
clear
echo "======O mpich2 já está instalado? sim(1) ou não(0)======"
read mpich
if [ $mpich -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz
cp mpich-3.0.4.tar.gz $path1
cd $path1/mpich-3.0.4
tar -vzxf mpich-3.0.4.tar.gz
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======"
fi
echo "=======O hydra já está instalado? sim(1) ou não(0)======="
read hydra
if [ $hydra -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/hydra-3.0.4.tar.gz
cp hydra-3.0.4.tar.gz $path1
cd $path1/hydra-3.0.4
tar -vzxf hydra-3.0.4.tar.gz
cd $path1/hydra-3.0.4
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======="
fi
echo "======Testando o mpiexec e o mpirun======="
which mpiexec
which mpirun
clear
export PATH=$path1/mpich-3.0.4:$PATH
echo "======Cluster concluído com sucesso!======"
fi
clear
# ============Configuração do Master==============================
sudo mount -a
if [ $ms -eq 0 ]; then
echo "======Criando ponto de montagem(Pasta compartilhada)======"
echo "======O cifs-utils já está instalado? sim(1) ou não(0)======"
read sif
if [ $sif -eq 0 ]; then
sudo apt-get install cifs-utils
else
echo "======Ok! Passando para o proximo passo!======"
fi
echo "======O nfs-server já está instalado? sim(1) ou não(0)======"
read nfs
if [ $nfs -eq 0 ]; then
sudo apt-get install nfs-server
else
echo "======Ok! Passando para o proximo passo!======"
fi
echo "======Digite o nome da pasta que deseja compartilhar(ex: /home/user/nomefile)======"
read path1
# criando o ponto de montagem
sudo mkdir $path1
echo "$path1 *(rw,sync)" | sudo tee -a /etc/exports
sudo service nfs-kernel-server restart
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13
do
if [ ${i} -gt $numrede ]; then
break
fi
if [ $user[i] = "Master" ]; then
echo "=====Comando em observação! Caso surja algum bug substitua 'cifs-utils' por 'smbfs' digitando 'nano /etc/fstab'!======"
echo "//${user[i]}@slave:$path1 $path1 cifs-utils username=${user[i]},password=${senha[i]} 0 0" | sudo tee -a /etc/fstab
fi
# sudo mount Master:$path1 ${user[i]}:$path1
done
# echo "Master:$path1 $path1 nfs" | sudo tee -a /etc/fstab
# fi
# Agora vamos editar o arquivo /etc/exports
echo "$path1" | sudo tee -a /etc/exports
# configurando a senha de comunicação automotica ssh
echo "======Sua senha para acesso ssh já está configurada? sim(1) ou não(0)======"
read passewd
if [ $passewd -eq 0 ]; then
ssh-keygen -t rsa
cat Master:$path1/id_pub.dsa >> $path1/authorized_keys
else
echo "=======Ok! Passando pro próximo passo!======="
fi
echo "======Testando sua conexão com o(s) slave(s)======="
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13
do
if [ ${i} -gt $numrede ]; then
break
fi
if [ $user[i] = "Master" ]; then
echo "Master"
else
ssh ${user[i]} hostname
fi
done
clear
echo "======O build-essencial já está instalado? sim(1) ou não(0)======"
read build
if [ $build -eq 0 ]; then
sudo apt-get install build-essencial
else
echo "======Ok! Passando para o proximo passo!======"
fi
clear
echo "======O mpich2 já está instalado? sim(1) ou não(0)======"
read mpich
if [ $mpich -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz
cp mpich-3.0.4.tar.gz $path1
cd $path1/mpich-3.0.4
tar -vzxf mpich-3.0.4.tar.gz
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======"
fi
echo "=======O hydra já está instalado? sim(1) ou não(0)======="
read hydra
if [ $hydra -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/hydra-3.0.4.tar.gz
cp hydra-3.0.4.tar.gz $path1
cd $path1/hydra-3.0.4
tar -vzxf hydra-3.0.4.tar.gz
cd $path1/hydra-3.0.4
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======="
fi
echo "======Testando o mpiexec e o mpirun======"
which mpiexec
which mpirun
clear
export PATH=$path1/mpich-3.0.4:$PATH
cd $path1
echo "======Cluster concluído com sucesso======!"
fi