Se você quiser, pode usar o meu script que escrevi para meus servidores ... sempre pode haver maneiras melhores de fazer isso, mas ele faz o que deve;)
1. Em cada servidor cliente
a) script de atualização (este também no servidor de controle)
Crie um script em /usr/local/bin/update
#!/bin/bash
# First get sudo rights
sudo echo ""
echo -e "\e[92m UPDATE PACKAGE SOURCES \e[39m"
sudo apt update
echo -e "\e[92m UPGRADE TO NEW PACKAGES \e[39m"
sudo apt upgrade
echo -e "\e[92m UPGRADE DISTRIBUTION-PACKAGES \e[39m"
sudo apt dist-upgrade
echo -e "\e[92m AUTOREMOVE OLD PACKAGES \e[39m"
sudo apt autoremove
clear
if [ -f /var/run/reboot-required ]; then
echo -e "\e[92m#####################################\e[39m"
echo -e "\e[92m# #\e[39m"
echo -e "\e[92m# DONE #\e[39m"
echo -e "\e[92m# #\e[39m"
echo -e "\e[92m# \e[91mNOTE: A reboot of the System is\e[92m #\e[39m"
echo -e "\e[92m# \e[91mrequired in order to\e[92m #\e[39m"
echo -e "\e[92m# \e[91mcomplete the Update!\e[92m #\e[39m"
echo -e "\e[92m# #\e[39m"
echo -e "\e[92m#####################################\e[39m"
else
echo -e "\e[92m#####################################\e[39m"
echo -e "\e[92m# #\e[39m"
echo -e "\e[92m# DONE #\e[39m"
echo -e "\e[92m# #\e[39m"
echo -e "\e[92m#####################################\e[39m"
se você confiar nas atualizações, também poderá usar a opção -y para não precisar interagir (na maior parte do tempo; é claro que às vezes é solicitado que você insira, dependendo das atualizações).
Torne-o executável
chmod +x /usr/local/bin/update
b) rebootServer
crie um script em /usr/local/bin/rebootServer
#!/bin/bash
echo -n "0"
sudo reboot &> /dev/null
exit
e torná-lo executável
chmod +x /usr/local/bin/rebootServer
c) visudo
executar
sudo visudo
adicione as linhas
<userName> ALL=NOPASSWD: /usr/local/bin/update
<userName> ALL=NOPASSWD: /usr/local/bin/rebootServer
salve e saia.
Isso permite que o usuário do sudo execute rebootServer
e update
(e qualquer código / script dentro deles) sem ser promovido para digitar a senha sudo.
d) adicione mais dois scripts de controle
Um em /usr/local/bin/sshResponse
#!/bin/bash
echo -n "0"
e um em /usr/local/bin/rebootResponse
#!/bin/bash
#!/bin/bash
if [ -f /var/run/reboot-required ];
then
echo -n "1"
else
echo -n "0"
fi
E também torná-los executáveis
chmod +x /usr/local/bin/sshResponse
chmod +x /usr/local/bin/rebootResponse
O primeiro é usado apenas para confirmar a conexão de trabalho ssh (pode haver maneiras melhores).
O segundo é usado para exibir mais tarde quando uma reinicialização é necessária nos servidores atualizados.
2. No servidor principal / controle
a) ssh-keygen
Porque você não precisa digitar a senha em cada login do ssh, nós usamos as chaves. Executar
ssh-keygen
e siga as instruções.
Agora você passa a chave para todos os servidores clientes. Então, para cada execução de servidor (no servidor de controle)
ssh-copy-id <usernameOnClient>@<clientServerIP>
depois disso, você poderá conectar-se ao ssh a partir do servidor de controle sem que seja solicitada uma senha.
b) o script do gerador
Agora a parte maluca. Eu uso a seguinte configuração para gerar automaticamente:
- um script de reinicialização individual para cada servidor cliente em
/usr/local/bin/rebootSERVERNAME
- um script de atualização individual para cada servidor cliente em
/usr/local/bin/updateSERVERNAME
- a
/usr/local/bin/rebootAllServers
- a
/usr/local/bin/updateAllServers
(a última também atualiza o próprio servidor de controle)
adicione o MEU SCRIPT DO GERADOR para /usr/local/bin/generateAllUpdateScripts
e torne-o executável
chmod +x /usr/local/bin/generateAllUpdateScripts
c) o arquivo de configuração
Finalmente, você precisa de um arquivo em /root/.virtualMachines
de onde o gerador lê o servidor do cliente.
Deve parecer com, por exemplo,
ClientServer1 192.168.1.2
ClientServer2 192.168.1.3
3. Uso
a) adicione servidores clientes a /root/.virtualMachines
O script do gerador usa esse arquivo e lê a linha de configuração do servidor do cliente para gerar scripts de acordo. (Sem linhas vazias! Sem espaços nem _ ou - permitidos nos nomes dos servidores !!)
b) gerar os scripts
simplesmente execute
generateUpdateAllScripts
Depois de terminar, você poderá chamar qualquer um desses comandos:
para atualizar todos os servidores
executa o script de atualização em cada máquina e fornece um resumo nos servidores de clientes do fim, onde atualizados e se a reinicialização é necessária.
updateAllServers
para reiniciar todos os servidores
reinicializa todos os servidores e, no final, aguarda até que todos os servidores voltem a ficar on-line ou que ocorram exibições de erros
rebootAllServers
atualiza um servidor específico
updateSERVERNAME
reinicialize um servidor específico
rebootSERVERNAME