"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.