Le script config.vm.provision
est copié dans /tmp, s'il est exécuté sur un système de fichiers monté noexec, j'obtiens cette erreur :
==> default: bash: line 2: /tmp/vagrant-shell: Permission denied
Une solution suggérée : traitez le script shell comme une entrée pour bash :
bash /tmp/vagrant-shell
Fichier source : vagrant/plugins/provisioners/shell/provisioner.rb
Salut @bbaassssiiee
Merci d'avoir ouvert un sujet. Malheureusement, nous ne pouvons pas simplement supposer bash. Heureusement, la solution de contournement recommandée est répertoriée dans la documentation : https://www.vagrantup.com/docs/provisioning/shell.html
Pour exécuter un script déjà disponible sur l'invité, vous pouvez utiliser un script en ligne pour appeler le script distant sur l'invité.
Vagrant.configure("2") do |config| config.vm.provision "shell", inline: "/bin/sh /path/to/the/script/already/on/the/guest.sh" end
Le modèle recommandé consiste à télécharger le script à l'aide d'un fournisseur de fichiers, puis à l'exécuter manuellement avec l'interpréteur souhaité. Merci! :le sourire:
Salut @sethvargo ,
comment devrait fonctionner votre solution de contournement ? Le problème est le suivant : si vous téléchargez le fichier avec un fournisseur de fichiers, je ne peux pas le télécharger avec les droits d'exécution à partir d'un hôte Windows. Par conséquent, je ne peux pas utiliser la fonction de chemin des fournisseurs de shell pour exécuter le script. D'un autre côté, je ne peux pas utiliser votre variante inline:, car cela crée simplement /tmp/vagrant-shell avec le contenu "/bin/sh /path/to/the/script/already/on/the/guest.sh " et essaie de l'exécuter. Bien sûr, l'exécution échoue alors, car /tmp est toujours noexec.
Est-il en quelque sorte possible de dire au fournisseur du shell qu'il doit créer le fichier tmp dans un chemin spécifique ?
Salutations
Raskil
Au cas où quelqu'un d'autre rencontrerait cela, vous devez utiliser l'option upload_path pour faire pointer le script ailleurs que dans /tmp.
J'utilise quelque chose comme ça :
config.vm.provision "vagrant preflight", type: "shell",
path: "scripts/preflight.sh",
upload_path: '/opt/preflight.sh',
args: "#{username}"
Commentaire le plus utile
Au cas où quelqu'un d'autre rencontrerait cela, vous devez utiliser l'option upload_path pour faire pointer le script ailleurs que dans /tmp.
J'utilise quelque chose comme ça :