"eseguire" come utente vagabondo, non root, con chef-solo?


10

Sto cercando di eseguire il seguente comando chef:

# install zombiejs, q (promises), should, coffee-script & mocha                 
execute "install q and zombiejs" do                                             
  cwd "/home/vagrant"                                                           
  user "vagrant"                                                                
  action :run                                                                   
  command "npm install -g q zombie should mocha coffee-script"                  
end

Ma continua a fallire perché non riesce a trovare npm:

execute [install q and zombiejs] (chef-redtail :: default line 205) ha avuto un errore: Errno :: ENOENT: nessun file o directory simile - npm install -gq zombie dovrebbe mocha coffee-script

Accedere a Vagrant tramite vagrant sshed eseguire manualmente il comando funziona perfettamente. Accedere come root, tramite sudo -ied eseguire il comando non riesce per lo stesso motivo per cui la ricetta dello chef fallisce (npm è installato localmente solo per l'utente vagabondo, non per root: questo è quello che voglio).

Quindi ... come posso specificare questo executeblocco chef da eseguire come utente vagabondo e non root?


AGGIORNAMENTO : Penso che questo riassuma il mio problema:

(ssh) /vagrant git:backbone ❯ whoami
vagrant

(ssh) /vagrant git:backbone ❯ which npm
/home/vagrant/.local/bin/npm

(ssh) /vagrant git:backbone ❯ echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i which npm
npm not found

tramite http://tickets.opscode.com/browse/CHEF-2517


UN ALTRO AGGIORNAMENTO : Ho appena notato questa discrepanza:

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i export
HOME=/home/vagrant
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LOGNAME=vagrant
MAIL=/var/mail/vagrant
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
SHELL=/bin/zsh
SSH_AUTH_SOCK=/tmp/ssh-uJUopA4146/agent.4146
SUDO_COMMAND='/bin/zsh -c export'
SUDO_GID=1001
SUDO_UID=1000
SUDO_USER=vagrant
TERM=xterm
USER=vagrant

Notare la differenza in PATH? L'esportazione non ha la /home/vagrant/.local/bindirectory elencata in essa ... perché la prima eco dovrebbe tornare PATHcon essa e la seconda esportazione ritornerebbe PATHsenza di essa? È questo il problema?

Risposte:


13

Per eseguire uno script o un comando come utente, è necessario combinare su -l e bash -i :

 execute "npm_install" do
    command "su vagrant -l -c 'cd /shared-with-host/helperScripts/ && bash -i npm install -g q zombie should mocha coffee-script'" 
    action :run
  end

A causa di alcuni bug , chef non imposta correttamente l'ambiente per l'utente specificato in esecuzione . La soluzione di narced133 non funzionerà.


6

È possibile utilizzare environmentper impostare le variabili di ambiente HOME e USER nel blocco di esecuzione.

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    environment ({'HOME' => '/home/vagrant', 'USER' => 'vagrant'})                                                             
    command "npm install -g q zombie should mocha coffee-script"                  
end

Lo uso spesso per installare plug-in vagabondi come utente vagabondo all'interno delle mie macchine virtuali. È inoltre possibile impostare altre variabili di ambiente, se necessario, con qualsiasi comando si stia eseguendo.


Questa è una risposta molto chiara IMHO.
Ben Liyanage,

2

Sembra che Chef stia eseguendo come utente vagabondo ma non sta cercando lo stesso PERCORSO della tua shell. Accedi usando vagrant sshed esegui which npm. Restituirà qualcosa di simile /path/to/bin/npm. Sostituisci di /path/to/bin/seguito per forzare Chef a cercare nella directory appropriata.

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    path ["/path/to/bin/"]                                                               
    command "npm install -g q zombie should mocha coffee-script"                  
end

Ci ho appena provato; niente da fare. Non riesce ancora con lo stesso errore nel post. Altri suggerimenti?
Neezer,

Potrebbe provare a puntare il comando direttamente sul link simbolico npm anziché cercare di ottenere il percorso giusto. command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script
narced133,

Posso confermare che "path" non fa nulla, ma puntare il comando direttamente sul binario fa il trucco. Sembra un bug in Chef.
FRKT,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.