Como reproduzir comandos executados em uma máquina em outra máquina?

8

Gostaria de instalar algum software em uma máquina Linux que executei no VirtualBox. Então eu gostaria de fazer a mesma coisa em um VPS Linux.

Eu acho que posso salvar todos os comandos executados usando o historycomando Existe alguma maneira de executar esses comandos em outra máquina? Ou qual é a maneira de fazer essas coisas?

Jonas
fonte

Respostas:

5

Bem, eu imagino duas situações aqui:

  1. Se eu precisar executar um pequeno número de comandos, eu os executaria novamente em qualquer outra máquina (por número pequeno, quero dizer menos de 10)

  2. Se eu precisar executar muitos comandos, eu os colocaria em um script bash e executaria o script em todas as outras máquinas. O script deve ficar assim:

    #!/bin/bash
    command 1
    command 2
    command 3
    command 4

Se você não tiver certeza sobre o resultado de alguns comandos, poderá separá-los &&, o que significa que o próximo comando será executado apenas se o anterior tiver sido bem-sucedido. command1 && command2significa que o comando2 não será executado se o comando1 falhar.

Patkos Csaba
fonte
Obrigado por uma ótima resposta. Vou configurar o PHP + Nginx + PostgreSQL, então acho que a solução de script é o caminho a seguir.
Jonas
Depende de quanto você já sabe fazer e quantas vezes planeja duplicar esse processo. (Embora não seja automatizado, a abordagem mais completa para uma ou duas vezes é provavelmente manter um grande documento, incluindo trechos de código de trabalho, pensamentos e notas sobre o procedimento de configuração que você poderá consultar mais tarde ...) Para saber como tudo funciona, você definitivamente deve escrever um grande script Bash ou Puppet ou o que for.
precisa
5

Existem várias ferramentas disponíveis que permitem efetuar login e executar uma série de comandos em várias máquinas ao mesmo tempo. Aqui estão alguns:

Caleb
fonte
3

Patkos está certo, provavelmente é melhor criar um script. No entanto, para isso, às vezes você precisa experimentar até acertar e precisar de algum registro do que fez e qual foi o resultado. Aqui a ferramenta scripté útil.

Ele cria um registro de todas as atividades no terminal em que está executando:

Script cria um texto datilografado de tudo impresso em seu terminal. É útil para estudantes que precisam de um registro em cópia impressa de uma sessão interativa como prova de uma tarefa, pois o arquivo datilografado pode ser impresso posteriormente com lpr (1).

fschmitt
fonte
Obrigado, vou aprender mais sobre isso. Parece interessante.
Jonas
Que tal fazer tudo em uma máquina e verificar o arquivo de histórico (como ~ / .bash_history para bash ou ~ / .histfile para zsh) e talvez copiar um pouco mais?
phunehehe
O histórico provavelmente está truncado nos últimos 100 comandos ou em algum outro limite arbitrário de tamanho; portanto, você deve verificar isso.
precisa
2

http://docs.fabfile.org/0.9.2/ <--- Boa substituição de scripts, pois pode executar uma ação se uma etapa falhar

Crankyadmin
fonte
2

Criei uma ferramenta de código aberto chamada Overcast para facilitar esse tipo de coisa.

Você pode ativar as máquinas Virtualbox localmente (usa o Vagrant sob o capô) ou em vários fornecedores de nuvem diferentes e, em seguida, executar qualquer comando ou arquivo de script em todos eles:

# Spin up Ubuntu 14.04 instances on Virtualbox, DigitalOcean, and Linode:
overcast virtualbox create vm.01
overcast digitalocean create vm.02
overcast linode create vm.03
# Run an arbitrary sequence of commands and scripts across all of them:
overcast run vm.* uptime "free -m" ./path/to/my-script.sh
Andrew Childs
fonte
Boa documentação!
1

Se você deseja executar primeiro os comandos interativamente em uma máquina e, em seguida, possuir um script para executá-los em outras, basta abrir o arquivo .bash_history (ou o que o shell usar) em um editor de texto e remover os erros que você cometeu na primeira vez. por aí. Voila! Você tem um script que pode copiar para outras máquinas (com scp, rsync, qualquer que seja).

Em alguns casos, talvez seja necessário processar o arquivo primeiro. Por exemplo, eu uso o zsh e o configure para adicionar vários metadados (carimbos de data). Obviamente, você precisaria remover isso. Você pode fazer isso facilmente no vim ou no TextMate, ou provavelmente em qualquer editor decente usando a seleção de blocos. Ou você pode usar awk ou cut para produzir tudo, menos os metadados. Aqui está uma maneira de fazer isso:

cat .zhistory | cut -d';' -f2- 

Mas na maioria das vezes, você encontrará seu arquivo de histórico apenas como uma lista direta de comandos, portanto, provavelmente não precisará se preocupar com nada disso.

iconoclasta
fonte