Comment reproduire des commandes exécutées sur une machine sur une autre machine?

8

Je voudrais installer des logiciels sur une machine Linux que j'ai exécutée dans VirtualBox. Ensuite, je voudrais faire la même chose sur un linux-VPS.

Je pense que je peux enregistrer toutes les commandes que j'exécute en utilisant la historycommande. Existe-t-il un moyen d'exécuter ces commandes sur une autre machine? Ou quelle est la façon de faire de telles choses?

Jonas
la source

Réponses:

5

Eh bien, j'imagine 2 situations ici:

  1. Si j'ai besoin d'exécuter un petit nombre de commandes, je les exécuterais à nouveau sur n'importe quelle autre machine (par petit nombre, je veux dire moins de 10)

  2. Si j'ai besoin d'exécuter plusieurs commandes, je les mettrais dans un script bash et exécuterais le script sur toutes les autres machines. Le script devrait ressembler à ceci:

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

Si vous n'êtes pas sûr du résultat de certaines commandes, vous pouvez séparer les commandes par &&, ce qui signifie que la commande suivante ne s'exécutera que si la précédente a réussi. command1 && command2signifie que la commande2 ne sera pas exécutée si la commande1 échoue.

Patkos Csaba
la source
Merci pour une excellente réponse. Je vais configurer PHP + Nginx + PostgreSQL donc je suppose que la solution de script est la voie à suivre.
Jonas
Cela dépend de ce que vous savez déjà faire et du nombre de fois que vous prévoyez de dupliquer ce processus. (Bien qu'il ne soit pas automatisé, l'approche la plus approfondie pour une ou deux fois est probablement de conserver un gros document comprenant des extraits de code de travail et des réflexions et des notes sur la procédure de configuration que vous pourrez consulter plus tard ...) Une fois que vous savoir comment tout fonctionne, alors vous devriez certainement écrire un gros script Bash ou Puppet ou autre.
Kevin Cantu du
5

Il existe plusieurs outils qui vous permettent de vous connecter et d'exécuter une série de commandes sur plusieurs machines en même temps. En voici deux:

Caleb
la source
3

Patkos a raison, il est probablement préférable de créer un script. Cependant, pour cela, vous devez parfois expérimenter jusqu'à ce que vous obteniez les bons résultats et que vous ayez besoin d'un journal de ce que vous avez fait et du résultat. Ici, l'outil scriptest utile.

Il crée un enregistrement de toutes les activités dans le terminal dans lequel il s'exécute:

Le script crée un script de tout ce qui est imprimé sur votre terminal. Il est utile pour les étudiants qui ont besoin d'un enregistrement papier d'une session interactive comme preuve d'un devoir, car le fichier dactylographié peut être imprimé plus tard avec lpr (1).

fschmitt
la source
Merci, j'en apprendrai plus à ce sujet. Ça a l'air intéressant.
Jonas
que diriez-vous de tout faire sur une machine, puis vérifiez le fichier historique (tel que ~ / .bash_history pour bash, ou ~ / .histfile pour zsh) et peut-être en copiant un peu plus?
phunehehe
L'historique est probablement tronqué aux 100 dernières commandes ou à une autre limite de taille arbitraire, vous devrez donc vérifier cela.
Kevin Cantu du
2

http://docs.fabfile.org/0.9.2/ <--- Joli remplacement des scripts car il peut prendre des mesures en cas d'échec d'une étape

Crankyadmin
la source
2

J'ai construit un outil open source appelé Overcast pour faciliter ce genre de chose.

Vous pouvez faire tourner des machines Virtualbox localement (utilise Vagrant sous le capot) ou sur un tas de fournisseurs de cloud différents, puis exécuter toutes les commandes ou fichiers de script sur chacun d'eux:

# 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
la source
Belle documentation!
1

Si vous souhaitez d'abord exécuter les commandes de manière interactive sur une machine, puis avoir un script pour les exécuter sur d'autres, ouvrez simplement votre .bash_history (ou tout ce que votre shell utilise) dans un éditeur de texte, et supprimez les erreurs que vous avez faites la première fois environ. Voila! Vous avez un script que vous pouvez copier sur les autres machines (avec scp, rsync, peu importe).

Dans certains cas, vous devrez peut-être d'abord traiter le fichier légèrement. Par exemple, j'utilise zsh et je le configure pour ajouter diverses métadonnées (horodatages). De toute évidence, vous devez supprimer cela. Vous pouvez facilement le faire dans vim ou TextMate, ou probablement n'importe quel éditeur décent en utilisant la sélection de bloc. Ou vous pouvez utiliser awk ou cut pour tout afficher sauf les métadonnées. Voici une façon de procéder:

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

Mais la plupart du temps, vous trouverez que votre fichier d'historique n'est qu'une simple liste de commandes, vous n'aurez donc probablement pas à vous soucier de ce massage.

iconoclaste
la source