ทรัพยากรเชฟ bash ไม่ทำงานตามที่ผู้ใช้ระบุ


11

ฉันเขียนตำราเชฟในการติดตั้งHubot ในสูตรฉันทำต่อไปนี้:

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

อย่างไรก็ตามเมื่อฉันพยายามเรียกใช้ chef-client บนเซิร์ฟเวอร์ที่ติดตั้ง cookbook ฉันได้รับอนุญาตปฏิเสธการเขียนไปยังไดเรกทอรีของผู้ใช้ที่รัน chef-client ไม่ใช่ผู้ใช้ hubot ด้วยเหตุผลบางอย่างnpmกำลังพยายามรันภายใต้ผู้ใช้ที่ไม่ถูกต้องไม่ใช่ผู้ใช้ที่ระบุในทรัพยากรทุบตี

ฉันสามารถเรียกใช้sudo su - hubot -c "npm install /usr/local/hubot/hubot"ด้วยตนเองและได้รับผลลัพธ์ที่ต้องการ (ติดตั้ง hubot ในฐานะผู้ใช้ hubot) อย่างไรก็ตามดูเหมือนว่า chef-client จะไม่เรียกใช้งานคำสั่งในฐานะผู้ใช้ hubot ด้านล่างคุณจะพบกับการดำเนินการของเชฟ - ลูกค้า ขอบคุณล่วงหน้า.

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 hubot@2.1.0 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

รอก่อนคุณกำลังบอกว่าคุณกำลังใช้งานเชฟไคลเอนต์ในฐานะผู้ใช้ที่ไม่ใช่รูท
cjc

เป็นผู้ใช้ที่มีสิทธิ์ sudo มันเป็นสิ่งเดียวกับที่ฉันใช้ในการบู๊ตโหนด
Arthur Maltson

แต่คุณกำลังทำ "sudo chef-client" ใช่ไหม?
cjc

คุณน่าจะทำงานเป็นเชฟได้
Mike Fiedler

Chef กำลังทำงานในฐานะผู้ใช้รูท
Arthur Maltson

คำตอบ:


8

ปัญหาคือ (เป็นไปได้) ไม่ใช่ Chef ที่รันคำสั่งในฐานะผู้ใช้ที่ไม่ถูกต้อง แต่เชลล์ที่รันสคริปต์ของคุณไม่ใช่เชลล์ล็อกอิน ซึ่งหมายความว่าตัวแปรสภาพแวดล้อมบางอย่าง (เช่นหน้าแรก) จะไม่ถูกตั้งค่าตามที่คุณคาดหวังนำไปสู่การลองเขียนไฟล์ในตำแหน่งที่ไม่ถูกต้อง

ปัญหาคือมีการหารือในประเด็น CHEF-2288 ในขณะที่ยังคงโดดเด่นคุณสามารถลองเพิ่มHOME=/home/hubot-userในบล็อกรหัสของคุณก่อนที่จะมีการเรียกใช้ npm


4

นำมาจากความคิดเห็นในCHEF-2288 :

environment ({ 'HOME' => ::Dir.home('USERNAME'), 'USER' => 'USERNAME' })

ทำงานให้ฉัน!

ในกรณีของคุณ:

environment ({ 'HOME' => ::Dir.home(hubot_user), 'USER' => hubot_user })


2
สิ่งนี้ถือว่าhubot_userได้ถูกสร้างขึ้นแล้วก่อนที่พ่อครัวจะทำงานลูกค้า นี่เป็นเพราะDir.homeคำสั่งถูกเรียกใช้เมื่อโหลดไฟล์ไม่ใช่เมื่อเรียกใช้งานสูตร เมื่อสร้างเครื่องใหม่ส่วนใหญ่จะเป็นก่อนที่สูตรการสร้างผู้ใช้ของคุณจะทำงานและจะส่งผลให้เกิดความล้มเหลว
Russ Bradberry

สำหรับคำถามที่ถามคำตอบนี้ใช้ได้อย่างสมบูรณ์
ดู

1
ไม่ได้อยู่บน bootstrap แรกของเครื่อง แต่ก็ไม่ได้ ใช้งานได้เฉพาะเมื่อผู้ใช้มีอยู่แล้วในเครื่อง
รัสแบรดเบอร์รี่

ฉันจะรองว่านี่ไม่ใช่วิธีแก้ปัญหาถ้าพ่อครัวจัดการกับผู้ใช้ที่เป็นปัญหาด้วยเช่นกันเพราะรหัสนี้จะดำเนินการในขั้นตอนการคอมไพล์ก่อนที่จะดำเนินการสูตรอาหารใด ๆ มีแฮ็กขนาดใหญ่อยู่รอบ ๆ มันอาจจะผลักมันเข้าไปในด่านที่สอง แต่ ...... การทำ 'HOME' => "/ home / # {hubut_user}" จะใช้งานได้เพราะมันเพิ่งผ่านสาย - แต่แน่นอนว่าไม่มี สัมผัสมหัศจรรย์
คม

1

หลัง: /server//a/432916/129232

ในการรันสคริปต์หรือคำสั่งในฐานะผู้ใช้คุณต้องรวมsu -lและ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

เพราะข้อบกพร่องบางอย่างเชฟไม่ได้กำหนดอย่างถูกต้องสภาพแวดล้อมสำหรับผู้ใช้ที่ระบุในการดำเนินการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.