Saya sedang menulis buku masak Chef untuk menginstal Hubot . Dalam resepnya, saya melakukan hal berikut:
bash "install hubot" do
user hubot_user
group hubot_group
cwd install_dir
code <<-EOH
wget https://github.com/downloads/github/hubot/hubot-#{node['hubot']['version']}.tar.gz && \
tar xzvf hubot-#{node['hubot']['version']}.tar.gz && \
cd hubot && \
npm install
EOH
end
Namun, ketika saya mencoba menjalankan chef-client di server menginstal buku masak, saya mendapat izin ditolak menulis ke direktori pengguna yang menjalankan chef-client, bukan pengguna hubot. Untuk beberapa alasan, npm
sedang mencoba untuk berjalan di bawah pengguna yang salah, bukan pengguna yang ditentukan dalam sumber daya bash.
Saya dapat menjalankan sudo su - hubot -c "npm install /usr/local/hubot/hubot"
secara manual, dan ini mendapatkan hasil yang saya inginkan (menginstal hubot sebagai pengguna hubot). Namun, tampaknya chef-client tidak menjalankan perintah sebagai pengguna hubot. Di bawah ini Anda akan menemukan eksekusi koki-klien. Terima kasih sebelumnya.
Saving to: `hubot-2.1.0.tar.gz'
0K ...... 100% 563K=0.01s
2012-01-23 12:32:55 (563 KB/s) - `hubot-2.1.0.tar.gz' saved [7115/7115]
npm ERR! Could not create /home/<user-chef-client-uses>/.npm/log/1.2.0/package.tgz
npm ERR! Failed creating the tarball.
npm ERR! couldn't pack /tmp/npm-1327339976597/1327339976597-0.13104878342710435/contents/package to /home/<user-chef-client-uses>/.npm/log/1.2.0/package.tgz
npm ERR! error installing [email protected] Error: EACCES, permission denied '/home/<user-chef-client-uses>/.npm/log'
...
npm not ok
---- End output of "bash" "/tmp/chef-script20120123-25024-u9nps2-0" ----
Ran "bash" "/tmp/chef-script20120123-25024-u9nps2-0" returned 1
Jawaban:
Masalahnya (kemungkinan) bukan Chef yang menjalankan perintah sebagai pengguna yang salah, tetapi shell yang menjalankan skrip Anda bukan shell login. Ini berarti bahwa beberapa variabel lingkungan (seperti HOME) tidak akan diatur seperti yang Anda harapkan, mengarahkan npm untuk mencoba menulis file di tempat yang salah.
Masalahnya dibahas dalam edisi CHEF-2288 . Sementara itu tetap luar biasa, Anda dapat mencoba menambahkan
HOME=/home/hubot-user
di blok kode Anda, sebelum npm dipanggil.sumber
Diambil dari komentar di CHEF-2288 :
environment ({ 'HOME' => ::Dir.home('USERNAME'), 'USER' => 'USERNAME' })
Bekerja untukku!
Dalam kasus Anda:
environment ({ 'HOME' => ::Dir.home(hubot_user), 'USER' => hubot_user })
sumber
hubot_user
telah dibuat sebelum menjalankan chef-client. Ini karenaDir.home
perintah dijalankan ketika file dimuat, bukan ketika resep dijalankan. Saat membuat mesin baru, ini kemungkinan besar akan terjadi sebelum salah satu resep kreasi pengguna Anda berjalan dan akan mengakibatkan kegagalan.Setelah: /server//a/432916/129232
Untuk menjalankan skrip atau perintah sebagai pengguna, Anda harus menggabungkan su -l dan bash -i , misal:
Karena beberapa bug , chef tidak mengatur dengan benar lingkungan untuk pengguna tertentu dalam mengeksekusi .
sumber