শেফ-একাকী সহ, মূল হিসাবে নয়, যোদ্ধা ব্যবহারকারী হিসাবে `কার্যকর?


10

আমি নিম্নলিখিত শেফ কমান্ডটি চালানোর চেষ্টা করছি:

# 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

কিন্তু এটা কারণ খুঁজে পাচ্ছি না ব্যর্থ রাখে npm:

[ইনস্টল কিউ এবং জম্বিজেজ] কার্যকর করুন (শেফ-রেডটেল :: ডিফল্ট লাইন 205) এর মধ্যে একটি ত্রুটি ছিল: এর্নো :: উত্সাহ: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই - এনএমপি ইনস্টল -জিকিউ জম্বি মোচি কফি-স্ক্রিপ্টের উচিত

vagrant sshকমান্ডটির মাধ্যমে যোনিতে লগ ইন করা এবং ম্যানুয়ালি পরিচালনা করা পুরোপুরি সূক্ষ্মভাবে কাজ করে। sudo -iকমান্ডের মাধ্যমে রুট হিসাবে লগ ইন করা এবং কমান্ডটি চালানো একই কারণে ব্যর্থ হয় শেফ রেসিপি ব্যর্থ হয় (এনপিএম স্থানীয়ভাবে কেবল যোদ্ধাদের জন্য ইনস্টল করা হয়, মূলের জন্য নয়: এটি আমি চাই)।

সুতরাং ... আমি কীভাবে এই শেফ executeব্লকটিকে ভ্রান্ত ব্যবহারকারী হিসাবে চালাতে এবং রুট হিসাবে চালানোর জন্য নির্দিষ্ট করতে পারি ?


আপডেট : আমি মনে করি এটি আমার সমস্যাটিকে সারিয়ে তুলবে:

(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

http://tickets.opscode.com/browse/CHEF-2517 এর মাধ্যমে


অন্য আপডেট : সুতরাং আমি এই তাত্পর্যটি কেবল লক্ষ্য করেছি:

(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

পার্থক্য লক্ষ্য করুন PATH? রফতানিতে এর /home/vagrant/.local/binতালিকাভুক্ত ডিরেক্টরি নেই ... কেন প্রথম প্রতিধ্বনি PATHএটির সাথে ফিরে আসবে এবং দ্বিতীয় রফতানি PATHনা করে কেন ফিরে আসবে? এটা কি ইস্যু?

উত্তর:


13

কোনও ব্যবহারকারী হিসাবে কোনও স্ক্রিপ্ট বা কমান্ড চালানোর জন্য আপনাকে 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

কারণ কিছু বাগ , শেফ সঠিকভাবে নির্দিষ্ট ব্যবহারকারীর জন্য পরিবেশ সেট করেনি চালানো । বর্ণিত 133 এর সমাধান কাজ করবে না।


6

আপনি environmentনিজের এক্সিকিউটিভ ব্লকে হোম এবং ইউএসএন এনভায়রনমেন্ট ভেরিয়েবল সেট করতে ব্যবহার করতে পারেন ।

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

আমি এটি আমার ভিএম এর ভিতরে ভ্যাব্রেন্ট ব্যবহারকারী হিসাবে যোজনাগুলি প্লাগইন ইনস্টল করতে ঘন ঘন ব্যবহার করি। আপনি কার্যকর করতে চাইলে যে কমান্ডের প্রয়োজন হলে আপনি অন্যান্য পরিবেশের ভেরিয়েবলগুলিও সেট করতে পারেন।


এটি একটি খুব পরিষ্কার উত্তর আইএমএইচও।
বেন লিয়ানাজ

2

দেখে মনে হচ্ছে শেফটি যোদ্ধা ব্যবহারকারী হিসাবে কার্যকর করছে তবে আপনার শেলের মতো প্যাথটি অনুসন্ধান করছে না। ব্যবহার করে লগইন করুন vagrant sshএবং রান করুন which npm। এটি কিছু ফিরে আসবে /path/to/bin/npm। শেফকে /path/to/bin/উপযুক্ত ডিরেক্টরি অনুসন্ধান করতে বাধ্য করতে নীচে প্রতিস্থাপন করুন ।

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

সবেমাত্র চেষ্টা করেছি; কোন পাশা. তবুও পোস্টে একই ত্রুটি নিয়ে ব্যর্থ। অন্য কোন পরামর্শ?
নীজার

পাথটি সঠিকভাবে না পাওয়ার চেয়ে সরাসরি এনএমপি সিমলিংকে কমান্ডটি নির্দেশ করার চেষ্টা করতে পারে। command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script
বর্ণিত 133

আমি নিশ্চিত করতে পারি যে "পথ" কিছুই করে না, তবে বাইনারিটিতে সরাসরি কমান্ডটি নির্দেশ করা কৌশলটি কার্যকর করে। শেফের মধ্যে এটি বাগের মতো মনে হচ্ছে।
এফআরকেটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.