Vagrant: approvisionneur shell sur noexec /tmp

Créé le 6 févr. 2016  ·  3Commentaires  ·  Source: hashicorp/vagrant

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

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 :

config.vm.provision "vagrant preflight", type: "shell",
    path: "scripts/preflight.sh",
    upload_path: '/opt/preflight.sh',
    args: "#{username}"

Tous les 3 commentaires

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}"
Cette page vous a été utile?
0 / 5 - 0 notes