bash < 1 ? 'set -v' : '') %> RUBY_VERSION=1.9.2-p290 CHEF_VERSION=<%= bootstrap_version_string.gsub(/.*[\s=]/,"") %> mkdir -p /tmp/knife-bootstrap chmod 700 /tmp/knife-bootstrap cd /tmp/knife-bootstrap <%= "export http_proxy=\"#{knife_config[:bootstrap_proxy]}\"" if knife_config[:bootstrap_proxy] -%> eval `cat /etc/lsb-release ` export DEBIAN_FRONTEND=noninteractive date > /etc/box_build_time echo -e "`date` \n\n**** \n**** apt update:\n****\n" apt-get -y update apt-get -y upgrade echo -e "`date` \n\n**** \n**** Installing base packages:\n****\n" apt-get -y install build-essential make wget curl runit zlib1g-dev libssl-dev openssl libcurl4-openssl-dev libxml2-dev libxslt-dev libyaml-dev libreadline6 libreadline6-dev apt-get -y install runit-services apt-get clean if [ ! -f /usr/bin/chef-client ]; then echo -e "`date` \n\n**** \n**** Installing ruby version ${RUBY_VERSION}:\n****\n" wget ftp://ftp.ruby-lang.org//pub/ruby/1.9/ruby-${RUBY_VERSION}.tar.gz tar xzf ruby-${RUBY_VERSION}.tar.gz cd ruby-${RUBY_VERSION} ./configure --with-ruby-version=${RUBY_VERSION} --prefix=/usr --program-suffix=${RUBY_VERSION} make -j2 make install sudo update-alternatives --remove-all gem && true update-alternatives \ --install /usr/bin/ruby ruby /usr/bin/ruby${RUBY_VERSION} 400 \ --slave /usr/bin/ri ri /usr/bin/ri${RUBY_VERSION} \ --slave /usr/bin/irb irb /usr/bin/irb${RUBY_VERSION} \ --slave /usr/bin/erb erb /usr/bin/erb${RUBY_VERSION} \ --slave /usr/bin/gem gem /usr/bin/gem${RUBY_VERSION} \ --slave /usr/share/man/man1/ruby.1.gz ruby.1.gz \ /usr/share/man/man1/ruby${RUBY_VERSION}.1 if ruby -e "exit(%x{gem --version} < \"1.6.2\" ? 0 : -1 )" ; then echo -e "`date` \n\n**** \n**** Updating rubygems:\n****\n" # screw you Debian REALLY_GEM_UPDATE_SYSTEM=1 gem update --system # screw you rubygems for foo in /usr/lib/ruby/site_ruby/*/rubygems/deprecate.rb ; do # Don't have to be any such deprecations, in which case $foo won't exist [ -f "$foo" ] && sudo sed -i.bak 's!@skip ||= false!true!' "$foo" done fi echo -e "`date` \n\n**** \n**** Installing chef:\n****\n" gem install ohai --no-rdoc --no-ri gem install chef --no-rdoc --no-ri <%= bootstrap_version_string %> # gems needed for the client.rb or so generically useful you want them at hand gem install --no-rdoc --no-ri extlib bundler json right_aws pry else # no chef-client echo -e "`date` \n\n**** \n**** Chef is present -- skipping apt/ruby/chef installation\n****\n" fi # end ruby+chef install # fix a bug in chef that prevents debugging template errors # will not work with --prerelease but that's OK hopefully opscode patches this crap soon bad_template_file="/usr/lib/ruby/gems/${RUBY_VERSION}/gems/chef-${CHEF_VERSION}/lib/chef/mixin/template.rb" if echo "0505c482b8b0b333ac71bbc8a1795d19 $bad_template_file" | md5sum -c - 2>/dev/null ; then curl https://github.com/mrflip/chef/commit/655a1967253a8759afb54f30b818bbcb7c309198.patch | sudo patch $bad_template_file fi echo -e "`date` \n\n**** \n**** Knifing in the chef client config files:\n****\n" mkdir -p /etc/chef <%- if @config[:client_key] %> ( cat <<'EOP' <%= @config[:client_key] %> EOP ) > /tmp/knife-bootstrap/client.pem awk NF /tmp/knife-bootstrap/client.pem > /etc/chef/client.pem <%- else %> ( cat <<'EOP' <%= validation_key %> EOP ) > /tmp/knife-bootstrap/validation.pem awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem <%- end %> echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n" cd /tmp rm -rf /tmp/knife-bootstrap echo -e "`date` \n\n**** \n**** Creating chef client script:\n****\n" ( cat <<'EOP' <%= config_content %> <%= @config[:node].chef_client_script_content %> EOP ) > /etc/chef/client.rb ( cat <<'EOP' <%= { "run_list" => @run_list, "cluster_name" => @config[:node].cluster_name, "facet_name" => @config[:node].facet_name, "facet_index" => @config[:node].facet_index }.to_json %> EOP ) > /etc/chef/first-boot.json echo -e "`date` \n\n**** \n**** Adding chef client runit scripts:\n****\n" ( service chef-client stop >/dev/null 2>&1 ; sleep 1 ; killall chef-client 2>/dev/null ) || true mkdir -p /var/log/chef /var/chef /etc/service /etc/sv/chef-client/{log/main,supervise} cat > /etc/sv/chef-client/log/run < /etc/sv/chef-client/run <&1 exec /usr/bin/env chef-client -i 43200 -s 20 -L /var/log/chef/client.log EOP chmod +x /etc/sv/chef-client/log/run /etc/sv/chef-client/run ln -nfs /usr/bin/sv /etc/init.d/chef-client service chef-client stop >/dev/null 2>&1 || true <%- if (@config[:bootstrap_runs_chef_client].to_s == 'true') || (@chef_config.knife[:bootstrap_runs_chef_client].to_s == 'true') %> echo -e "`date` \n\n**** \n**** First run of chef:\n****\n" set -e <%= start_chef %> set +e <%- end %> echo -e "`date` \n\n**** \n**** Cleanup:\n****\n" # make locate work good updatedb echo -e "`date` \n\n**** \n**** Enabling chef client service:\n****\n" ln -nfs /etc/sv/chef-client /etc/service/chef-client service chef-client start echo -e "`date` \n\n**** \n**** Cluster Chef client bootstrap complete\n****\n" EOF