<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[because we all share ...]]></title>
  <link href="http://www.likens.us/atom.xml" rel="self"/>
  <link href="http://www.likens.us/"/>
  <updated>2012-03-29T13:02:19-07:00</updated>
  <id>http://www.likens.us/</id>
  <author>
    <name><![CDATA[Scott M. Likens]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[automate .ssh/config for chef using knife]]></title>
    <link href="http://www.likens.us/blog/2012/03/29/knife-plugins/"/>
    <updated>2012-03-29T12:58:00-07:00</updated>
    <id>http://www.likens.us/blog/2012/03/29/knife-plugins</id>
    <content type="html"><![CDATA[<p>First off let me state that I copied this plugin and made it better and am sharing with you the end result.</p>

<p>To use this copy and paste the contents to a file in .chef/plugins/knife called sshgen.rb for example.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
<span class='line-number'>101</span>
<span class='line-number'>102</span>
<span class='line-number'>103</span>
<span class='line-number'>104</span>
<span class='line-number'>105</span>
<span class='line-number'>106</span>
<span class='line-number'>107</span>
<span class='line-number'>108</span>
<span class='line-number'>109</span>
<span class='line-number'>110</span>
<span class='line-number'>111</span>
<span class='line-number'>112</span>
<span class='line-number'>113</span>
<span class='line-number'>114</span>
<span class='line-number'>115</span>
<span class='line-number'>116</span>
<span class='line-number'>117</span>
<span class='line-number'>118</span>
<span class='line-number'>119</span>
<span class='line-number'>120</span>
<span class='line-number'>121</span>
<span class='line-number'>122</span>
<span class='line-number'>123</span>
<span class='line-number'>124</span>
<span class='line-number'>125</span>
<span class='line-number'>126</span>
<span class='line-number'>127</span>
<span class='line-number'>128</span>
<span class='line-number'>129</span>
<span class='line-number'>130</span>
<span class='line-number'>131</span>
<span class='line-number'>132</span>
<span class='line-number'>133</span>
<span class='line-number'>134</span>
<span class='line-number'>135</span>
<span class='line-number'>136</span>
<span class='line-number'>137</span>
<span class='line-number'>138</span>
<span class='line-number'>139</span>
<span class='line-number'>140</span>
<span class='line-number'>141</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="c1">## Knife plugin to generate an OpenSSH config file from a Chef search</span>
</span><span class='line'><span class="c1"># From Harvest. www.getharvest.com</span>
</span><span class='line'><span class="c1"># Modified for EC2 usage by Scott Likens</span>
</span><span class='line'><span class="c1">#</span>
</span><span class='line'><span class="c1"># Source: https://github.com/harvesthq/knife-plugins</span>
</span><span class='line'><span class="c1">#</span>
</span><span class='line'><span class="c1"># See http://wiki.opscode.com/display/chef/Knife+Plugins</span>
</span><span class='line'><span class="c1"># See http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config&amp;sektion=5</span>
</span><span class='line'><span class="c1">#</span>
</span><span class='line'><span class="c1">## Install</span>
</span><span class='line'><span class="c1"># Place in .chef/plugins/knife/sshgen.rb</span>
</span><span class='line'><span class="c1">#</span>
</span><span class='line'><span class="c1">## Usage</span>
</span><span class='line'><span class="c1"># $ knife sshgen -p to print a config stanza to the screen</span>
</span><span class='line'><span class="c1"># $ knife sshgen -w to append to your current ~/.ssh/config file</span>
</span><span class='line'><span class="c1">#</span>
</span><span class='line'><span class="c1">## Suggestion</span>
</span><span class='line'><span class="c1"># use with bash-completion, by installing bash-completion and adding this to ~/.bash_profile:</span>
</span><span class='line'><span class="c1"># complete -W &quot;$(echo `cat ~/.ssh/config | grep Hostname | uniq | awk &#39;{print $2}&#39;`;)&quot; ssh</span>
</span><span class='line'><span class="c1">#</span>
</span><span class='line'><span class="c1">## Credit</span>
</span><span class='line'><span class="c1"># Hints taken from: https://github.com/danielsdeleo/knife-plugins/blob/master/deploy.rb</span>
</span><span class='line'><span class="c1"># Hints taken from: https://github.com/javan/whenever</span>
</span><span class='line'>
</span><span class='line'><span class="k">module</span> <span class="nn">MakeSSHConfigFile</span>
</span><span class='line'>  <span class="k">class</span> <span class="nc">Sshgen</span> <span class="o">&lt;</span> <span class="no">Chef</span><span class="o">::</span><span class="no">Knife</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">banner</span> <span class="s2">&quot;knife sshgen -w OR -p&quot;</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">option</span> <span class="ss">:ssh_config_file</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:long</span> <span class="o">=&gt;</span> <span class="s2">&quot;--config-file&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:short</span> <span class="o">=&gt;</span> <span class="s2">&quot;-c&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:description</span> <span class="o">=&gt;</span> <span class="s2">&quot;The name of your SSH config file&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:default</span> <span class="o">=&gt;</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;HOME&#39;</span><span class="o">]</span><span class="si">}</span><span class="s2">/.ssh/config&quot;</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">option</span> <span class="ss">:print</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:long</span> <span class="o">=&gt;</span> <span class="s2">&quot;--print&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:short</span> <span class="o">=&gt;</span> <span class="s2">&quot;-p&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:description</span> <span class="o">=&gt;</span> <span class="s2">&quot;Print the ssh config entry here in this screen&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:default</span> <span class="o">=&gt;</span> <span class="kp">true</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">option</span> <span class="ss">:write</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:long</span> <span class="o">=&gt;</span> <span class="s2">&quot;--write&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:short</span> <span class="o">=&gt;</span> <span class="s2">&quot;-w&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:description</span> <span class="o">=&gt;</span> <span class="s2">&quot;Write (append) the config to local SSH config file&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="ss">:default</span> <span class="o">=&gt;</span> <span class="kp">false</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">deps</span> <span class="k">do</span>
</span><span class='line'>      <span class="nb">require</span> <span class="s1">&#39;chef/search/query&#39;</span>
</span><span class='line'>      <span class="nb">require</span> <span class="s1">&#39;chef/knife/ssh&#39;</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">def</span> <span class="nf">run</span>
</span><span class='line'>
</span><span class='line'>      <span class="k">unless</span> <span class="n">config</span><span class="o">[</span><span class="ss">:print</span><span class="o">]</span> <span class="o">||</span> <span class="n">config</span><span class="o">[</span><span class="ss">:write</span><span class="o">]</span>
</span><span class='line'>        <span class="n">ui</span><span class="o">.</span><span class="n">error</span> <span class="s2">&quot;You must specify either --print or --write.&quot;</span>
</span><span class='line'>        <span class="nb">exit</span> <span class="mi">1</span>
</span><span class='line'>      <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>      <span class="n">nodes</span> <span class="o">=</span> <span class="n">find_all_nodes</span>
</span><span class='line'>      <span class="n">ssh_config</span> <span class="o">=</span> <span class="n">build_ssh_config</span><span class="p">(</span><span class="n">nodes</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'>      <span class="k">if</span> <span class="n">config</span><span class="o">[</span><span class="ss">:write</span><span class="o">]</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">unless</span> <span class="no">File</span><span class="o">.</span><span class="n">exists?</span> <span class="n">config</span><span class="o">[</span><span class="ss">:ssh_config_file</span><span class="o">]</span>
</span><span class='line'>          <span class="n">ui</span><span class="o">.</span><span class="n">msg</span> <span class="s2">&quot;WARNING: </span><span class="si">#{</span><span class="n">config</span><span class="o">[</span><span class="ss">:ssh_config_file</span><span class="o">]</span><span class="si">}</span><span class="s2"> non-existent, but I&#39;ll try anyway&quot;</span>
</span><span class='line'>        <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">new_ssh_config</span> <span class="o">=</span> <span class="n">read_ssh_config</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">if</span> <span class="n">new_ssh_config</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">comment_open</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">new_ssh_config</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">comment_close</span><span class="p">)</span> <span class="c1">#we have an existing config in between our markers, update it</span>
</span><span class='line'>          <span class="n">final_ssh_config</span> <span class="o">=</span> <span class="n">new_ssh_config</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="no">Regexp</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">#{</span><span class="n">comment_open</span><span class="si">}</span><span class="s2">.+</span><span class="si">#{</span><span class="n">comment_close</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="no">Regexp</span><span class="o">::</span><span class="no">MULTILINE</span><span class="p">),</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">comment_open</span><span class="si">}</span><span class="se">\n</span><span class="si">#{</span><span class="n">ssh_config</span><span class="o">.</span><span class="n">chomp</span><span class="si">}</span><span class="se">\n</span><span class="si">#{</span><span class="n">comment_close</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span class='line'>        <span class="k">else</span> <span class="c1"># no existing markers, we&#39;ll append them</span>
</span><span class='line'>          <span class="n">final_ssh_config</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">new_ssh_config</span><span class="si">}</span><span class="se">\n</span><span class="si">#{</span><span class="n">comment_open</span><span class="si">}</span><span class="se">\n</span><span class="si">#{</span><span class="n">ssh_config</span><span class="si">}#{</span><span class="n">comment_close</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>        <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">write_ssh_config</span><span class="p">(</span><span class="n">final_ssh_config</span><span class="p">)</span>
</span><span class='line'>      <span class="k">elsif</span> <span class="n">config</span><span class="o">[</span><span class="ss">:print</span><span class="o">]</span>
</span><span class='line'>        <span class="n">ui</span><span class="o">.</span><span class="n">msg</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">ssh_config</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>      <span class="k">end</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">def</span> <span class="nf">find_all_nodes</span>
</span><span class='line'>      <span class="n">query</span> <span class="o">=</span> <span class="s2">&quot;name:*&quot;</span>
</span><span class='line'>      <span class="n">searcher</span> <span class="o">=</span> <span class="no">Chef</span><span class="o">::</span><span class="no">Search</span><span class="o">::</span><span class="no">Query</span><span class="o">.</span><span class="n">new</span>
</span><span class='line'>      <span class="n">rows</span><span class="p">,</span> <span class="n">_start</span><span class="p">,</span> <span class="n">_total</span> <span class="o">=</span> <span class="n">searcher</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="ss">:node</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
</span><span class='line'>      <span class="k">if</span> <span class="n">rows</span><span class="o">.</span><span class="n">empty?</span>
</span><span class='line'>        <span class="n">ui</span><span class="o">.</span><span class="n">error</span> <span class="s2">&quot;No nodes matched the query: </span><span class="si">#{</span><span class="n">query</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>        <span class="nb">exit</span> <span class="mi">1</span>
</span><span class='line'>      <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>      <span class="n">rows</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">def</span> <span class="nf">build_ssh_config</span><span class="p">(</span><span class="n">my_nodes</span><span class="p">)</span>
</span><span class='line'>      <span class="n">ssh_config_block</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span class='line'>      <span class="n">my_nodes</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">n</span><span class="o">|</span>
</span><span class='line'>        <span class="k">if</span> <span class="n">n</span><span class="o">.</span><span class="n">has_key?</span><span class="p">(</span><span class="s2">&quot;ec2&quot;</span><span class="p">)</span>
</span><span class='line'>          <span class="n">ssh_config_block</span> <span class="o">&lt;&lt;</span> <span class="s2">&quot;Host </span><span class="si">#{</span><span class="n">n</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class='line'>          <span class="n">ssh_config_block</span> <span class="o">&lt;&lt;</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2"> Hostname </span><span class="si">#{</span><span class="n">n</span><span class="o">[</span><span class="ss">:ec2</span><span class="o">][</span><span class="ss">:public_hostname</span><span class="o">]</span><span class="si">}</span><span class="s2"> </span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class='line'>          <span class="n">ssh_config_block</span> <span class="o">&lt;&lt;</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2"> User ubuntu </span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class='line'>          <span class="k">else</span>
</span><span class='line'>          <span class="n">ui</span><span class="o">.</span><span class="n">info</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">n</span><span class="si">}</span><span class="s2"> lacks an ec2 key&quot;</span>
</span><span class='line'>        <span class="k">end</span>
</span><span class='line'>      <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>      <span class="n">ssh_config_block</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">def</span> <span class="nf">read_ssh_config</span>
</span><span class='line'>      <span class="n">file</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">config</span><span class="o">[</span><span class="ss">:ssh_config_file</span><span class="o">]</span><span class="p">,</span> <span class="s2">&quot;r+&quot;</span><span class="p">)</span>
</span><span class='line'>      <span class="n">ssh_config_contents</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span class='line'>      <span class="k">while</span><span class="p">(</span><span class="o">!</span><span class="n">file</span><span class="o">.</span><span class="n">eof?</span><span class="p">)</span>
</span><span class='line'>        <span class="n">ssh_config_contents</span> <span class="o">&lt;&lt;</span> <span class="n">file</span><span class="o">.</span><span class="n">readline</span>
</span><span class='line'>      <span class="k">end</span>
</span><span class='line'>      <span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span class='line'>
</span><span class='line'>      <span class="n">ssh_config_contents</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">def</span> <span class="nf">write_ssh_config</span><span class="p">(</span><span class="n">contents</span><span class="p">)</span>
</span><span class='line'>      <span class="k">begin</span>
</span><span class='line'>        <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">config</span><span class="o">[</span><span class="ss">:ssh_config_file</span><span class="o">]</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="p">{</span><span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">contents</span><span class="p">)</span> <span class="p">}</span>
</span><span class='line'>      <span class="k">rescue</span>
</span><span class='line'>        <span class="n">ui</span><span class="o">.</span><span class="n">error</span> <span class="s2">&quot;ERROR: Writing </span><span class="si">#{</span><span class="n">config</span><span class="o">[</span><span class="ss">:ssh_config_file</span><span class="o">]</span><span class="si">}</span><span class="s2"> failed.&quot;</span>
</span><span class='line'>      <span class="k">else</span>
</span><span class='line'>        <span class="n">ui</span><span class="o">.</span><span class="n">msg</span> <span class="s2">&quot;Appended to: </span><span class="si">#{</span><span class="n">config</span><span class="o">[</span><span class="ss">:ssh_config_file</span><span class="o">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>      <span class="k">end</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">def</span> <span class="nf">comment_open</span>
</span><span class='line'>      <span class="s2">&quot;###STARTSSHGEN&quot;</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">def</span> <span class="nf">comment_close</span>
</span><span class='line'>      <span class="s2">&quot;###ENDSSHGEN&quot;</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[a process of making a custom HVM virtualized AMI for EC2]]></title>
    <link href="http://www.likens.us/blog/2012/01/07/amazon-hvm-custom-ami-on-ec2/"/>
    <updated>2012-01-07T14:46:00-08:00</updated>
    <id>http://www.likens.us/blog/2012/01/07/amazon-hvm-custom-ami-on-ec2</id>
    <content type="html"><![CDATA[<p><em>Forewarning: This post is about a process; it is not meant to give you a complete working basis to create a hvm virtualization AMI.  It is here to give you the information and or tools to build your own.</em></p>

<h4>Required Reading Material.</h4>

<ul>
<li><a href="http://wiki.xen.org/xenwiki/hvmloader">hvmloader</a></li>
<li><p><a href="http://wiki.xen.org/xenwiki/XenLinuxPVonHVMdrivers">pv-on-hvm</a></p></li>
<li><p>Note: Usage of a vanilla kernel later then 2.6.37+ will have the pv-on-hvm drivers.  Pick a kernel later then that at your descretion.</p></li>
</ul>


<h4>Requirements.</h4>

<ul>
<li><a href="http://aws.amazon.com">Amazon AWS Account</a></li>
<li><a href="http://aws.amazon.com/developertools/351">Amazon API Tools Installed</a></li>
<li><a href="http://docs.amazonwebservices.com/AmazonDevPay/latest/DevPayDeveloperGuide/X509Certificates.html">Amazon SOAP Keys Created</a></li>
<li>Time; patience and a willingness to fail.</li>
</ul>


<h3>Step 1</h3>

<figure class='code'><figcaption><span>booting an instance.</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-run-instances ami-0da96764 -k ssh_key -t cc1.4xlarge -H
</span><span class='line'>Type  ReservationID   Owner   Groups  Platform
</span><span class='line'>RESERVATION   r-f5743394  000000000000    default
</span><span class='line'>INSTANCE  i-de453ebc  ami-0da96764            pending ssh_key 0       cc1.4xlarge 2012-01-07T23:01:54+0000    us-east-1c              monitoring-disabled                 ebs                 hvm xen     sg-7baf4812 default
</span></code></pre></td></tr></table></div></figure>


<ul>
<li><p>Take note of the <em>instance-id</em> and the <em>zone</em> the instance is booted in.</p></li>
<li><p>additionally Amazon limits us to an 8G root volume; so create an 8gig volume in the zone specifieid.</p></li>
</ul>


<figure class='code'><figcaption><span>create your EBS Root volume</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-create-volume -z us-east-1c -s 8
</span><span class='line'>VOLUME    vol-03aff26e    8       us-east-1c  creating    2012-01-07T23:03:25+0000
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>attach the volume to the instance as /dev/sdp</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-attach-volume vol-03aff26e -d /dev/sdp -i i-de453ebc
</span><span class='line'>ATTACHMENT    vol-03aff26e    i-de453ebc  /dev/sdp    attaching   2012-01-07T23:05:26+0000
</span></code></pre></td></tr></table></div></figure>


<ul>
<li>SSH to the instance in question as ec2-user@$hostname</li>
</ul>


<figure class='code'><figcaption><span>obtain root priviledges and install screen</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo -s
</span><span class='line'>yum install screen
</span><span class='line'>screen -S ami
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>install the amazon api and ami tools</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>mkdir -p /mnt/work <span class="o">&amp;&amp;</span> <span class="nb">cd</span> /mnt/work
</span><span class='line'>wget http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
</span><span class='line'>unzip ec2-ami-tools.zip
</span><span class='line'>wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
</span><span class='line'>unzip ec2-api-tools.zip*
</span></code></pre></td></tr></table></div></figure>


<ul>
<li><p>Place your X.509 keys in /mnt/work/.ec2</p></li>
<li><p>Note: the version numbers do change; please update to reflect this.</p></li>
</ul>


<figure class='code'><figcaption><span>configure your environment</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">export </span><span class="nv">EC2_BASE</span><span class="o">=</span><span class="s2">&quot;/mnt/work&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_AMIHOME</span><span class="o">=</span><span class="s2">&quot;${EC2_BASE}/ec2-ami-tools-1.4.0.5&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_HOME</span><span class="o">=</span><span class="s2">&quot;${EC2_BASE}/ec2-api-tools-1.5.2.3&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span><span class="k">${</span><span class="nv">EC2_AMIHOME</span><span class="k">}</span>/bin:<span class="k">${</span><span class="nv">EC2_HOME</span><span class="k">}</span>/bin:<span class="k">${</span><span class="nv">PATH</span><span class="k">}</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_CERT</span><span class="o">=</span><span class="s2">&quot;/mnt/work/.ec2/cert-example.pem&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_PRIVATE_KEY</span><span class="o">=</span><span class="s2">&quot;/mnt/work/.ec2/pk-example.pem&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_SECRET_KEY</span><span class="o">=</span><span class="s2">&quot;secret_key&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_ACCESS_KEY</span><span class="o">=</span><span class="s2">&quot;access_key&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">SOURCE_AMI_NAME</span><span class="o">=</span><span class="s2">&quot;example_ami_name&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">SOURCE_AMI_MANIFEST</span><span class="o">=</span><span class="s2">&quot;${SOURCE_AMI_NAME}.manifest.xml&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_AMIS</span><span class="o">=</span><span class="s2">&quot;${EC2_BASE}/amis&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EBS_DEV</span><span class="o">=</span><span class="s2">&quot;/dev/xvdp1&quot;</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>download your s3 ami locally</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ln -sf <span class="nv">$EC2_AMIHOME</span>/lib/ec2 <span class="nv">$EC2_HOME</span>/lib/ec2
</span><span class='line'><span class="nv">temp_dir</span><span class="o">=</span><span class="k">$(</span>mktemp -d<span class="k">)</span>
</span><span class='line'>mkdir -p <span class="k">${</span><span class="nv">EC2_AMIS</span><span class="k">}</span>
</span><span class='line'><span class="nb">cd</span> <span class="k">${</span><span class="nv">EC2_AMIS</span><span class="k">}</span>
</span><span class='line'>ec2-download-bundle -b example_bucket -a <span class="k">${</span><span class="nv">EC2_ACCESS_KEY</span><span class="k">}</span> -s <span class="k">${</span><span class="nv">EC2_SECRET_KEY</span><span class="k">}</span> -k <span class="k">${</span><span class="nv">EC2_CERT</span><span class="k">}</span> -m <span class="k">${</span><span class="nv">SOURCE_AMI_MANIFEST</span><span class="k">}</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>unbundle your s3 ami and mount it</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-unbundle -k <span class="k">${</span><span class="nv">EC2_PRIVATE_KEY</span><span class="k">}</span> -m <span class="k">${</span><span class="nv">SOURCE_AMI_MANIFEST</span><span class="k">}</span> -d <span class="k">${</span><span class="nv">temp_dir</span><span class="k">}</span>
</span><span class='line'><span class="nb">cd</span> <span class="k">${</span><span class="nv">EC2_BASE</span><span class="k">}</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_AMI_IMAGE</span><span class="o">=</span><span class="s2">&quot;${temp_dir}/${SOURCE_AMI_NAME}&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_SOURCE_MOUNT</span><span class="o">=</span><span class="k">$(</span>mktemp -d<span class="k">)</span>
</span><span class='line'><span class="nb">export </span><span class="nv">EC2_DEST_MOUNT</span><span class="o">=</span><span class="k">$(</span>mktemp -d<span class="k">)</span>
</span><span class='line'>mount -o loop <span class="k">${</span><span class="nv">EC2_AMI_IMAGE</span><span class="k">}</span> <span class="k">${</span><span class="nv">EC2_SOURCE_MOUNT</span><span class="k">}</span>
</span></code></pre></td></tr></table></div></figure>


<ul>
<li><em>Please send suggestions on how to improve this to /dev/null</em>.</li>
</ul>


<figure class='code'><figcaption><span>partition out your ebs volume</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>fdisk /dev/xvdp
</span><span class='line'>n
</span><span class='line'>p
</span><span class='line'>1
</span><span class='line'>&lt;enter&gt;
</span><span class='line'>&lt;enter&gt;
</span><span class='line'>a
</span><span class='line'>1
</span><span class='line'>w
</span><span class='line'>q
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>format the EBS volume and mount it.  No filesystem checks desired. </span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>blockdev --rereadpt /dev/xvdp
</span><span class='line'>mkfs -t ext4 -L rootfs <span class="k">${</span><span class="nv">EBS_DEV</span><span class="k">}</span>
</span><span class='line'>tune2fs -i 0 -c 0 <span class="k">${</span><span class="nv">EBS_DEV</span><span class="k">}</span>
</span><span class='line'>mount <span class="k">${</span><span class="nv">EBS_DEV</span><span class="k">}</span> <span class="k">${</span><span class="nv">EC2_DEST_MOUNT</span><span class="k">}</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>copy your local S3 AMI to the EBS volume</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>rsync -aHAS <span class="k">${</span><span class="nv">EC2_SOURCE_MOUNT</span><span class="k">}</span>/ <span class="k">${</span><span class="nv">EC2_DEST_MOUNT</span><span class="k">}</span>/
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>chroot into your EBS root and download the linux kernel</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>cp /boot/config* <span class="k">${</span><span class="nv">EC2_DEST_MOUNT</span><span class="k">}</span>
</span><span class='line'>mount -o <span class="nb">bind</span> /dev <span class="k">${</span><span class="nv">EC2_DEST_MOUNT</span><span class="k">}</span>/dev
</span><span class='line'>chroot <span class="k">${</span><span class="nv">EC2_DEST_MOUNT</span><span class="k">}</span>
</span><span class='line'><span class="nb">cd</span> /usr/src <span class="o">&amp;&amp;</span> curl http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.bz2 | tar jxf -
</span><span class='line'>ln -s /usr/src/linux-2.6.39.4 linux
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>configure your kernel</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> /usr/src/linux
</span><span class='line'>cp /config* .config
</span><span class='line'>make bzImage -j16
</span><span class='line'>make modules -j16
</span><span class='line'>make modules_install
</span><span class='line'>cp arch/x86/boot/bzImage /boot/vmlinuz-hvm
</span></code></pre></td></tr></table></div></figure>


<ul>
<li><p>Configure /boot/grub/menu.lst similar to how you see provided by amazon; but replace the kernel and initrd with your own.</p></li>
<li><p>Use your favorite package manager to install grub.  The following should work provided no ephemeral disks are attached.</p></li>
</ul>


<figure class='code'><figcaption><span>install grub on the disk</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>grub
</span><span class='line'>root <span class="o">(</span>hd1,0<span class="o">)</span>
</span><span class='line'>setup <span class="o">(</span>hd1<span class="o">)</span>
</span><span class='line'>quit
</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Exit out of your chroot and unmount everything</li>
</ul>


<figure class='code'><figcaption><span>unmount your ebs root</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>umount <span class="k">${</span><span class="nv">EC2_DEST_MOUNT</span><span class="k">}</span>/dev
</span><span class='line'>umount <span class="k">${</span><span class="nv">EC2_DEST_MOUNT</span><span class="k">}</span>
</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Now locally create a snapshot of your EBS root in case something goes wrong and you want to re-attach it; fix it; re-register.</li>
</ul>


<figure class='code'><figcaption><span>snapshot your ebs-root</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-create-snapshot vol-03aff26e
</span><span class='line'>SNAPSHOT  snap-9239e6f6   vol-03aff26e    pending 2012-01-07T23:37:08+0000        621517282122    8
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>stop your instance while it&#8217;s snapshotting</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-stop-instances i-de453ebc
</span><span class='line'>INSTANCE  i-de453ebc  running stopping
</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Verify the instance is stopped</li>
</ul>


<figure class='code'><figcaption><span>list your instance stopping</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-describe-instances i-de453ebc -H
</span><span class='line'>Type  ReservationID   Owner   Groups  Platform
</span><span class='line'>RESERVATION   r-f5743394  621517282122    default
</span><span class='line'>INSTANCE  i-de453ebc  ami-0da96764            stopped ssh_key 0       cc1.4xlarge 2012-01-07T23:01:54+0000    us-east-1c              monitoring-disabled                 ebs                 hvm xen     sg-7baf4812 default
</span><span class='line'>BLOCKDEVICE   /dev/sda1   vol-a9acf1c4    2012-01-07T23:39:34.000Z    
</span><span class='line'>BLOCKDEVICE   /dev/sdp    vol-03aff26e    2012-01-07T23:39:34.000Z    
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>detach the old root volume provided by amazon and your ebs root volume you made</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-detach-volume vol-a9acf1c4
</span><span class='line'>ATTACHMENT    vol-a9acf1c4    i-de453ebc  /dev/sda1   detaching   2012-01-07T23:39:34+0000
</span><span class='line'>ec2-detach-volume vol-03aff26e
</span><span class='line'>ATTACHMENT    vol-03aff26e    i-de453ebc  /dev/sdp    detaching   2012-01-07T23:39:34+0000
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>attach volume</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-attach-volume vol-03aff26e -i i-de453ebc -d /dev/sda1
</span><span class='line'>ATTACHMENT    vol-03aff26e    i-de453ebc  /dev/sda1   attaching   2012-01-07T23:42:38+0000
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>create your AMI</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ec2-create-image i-de453ebc -n <span class="s2">&quot;fail&quot;</span>
</span><span class='line'>IMAGE ami-ed9d4a84
</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Once it&#8217;s done preparing the AMI; boot it and hope for success.  If you have a problem review the Console log and research.  I suggest reviewing Amazon&#8217;s Kernel configuration and Ubuntu&#8217;s Kernel configuration for the HVM instance types if you have any problems; most of all good luck!</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Learn to Respect the Problem]]></title>
    <link href="http://www.likens.us/blog/2011/07/24/learn-to-respect-the-problem/"/>
    <updated>2011-07-24T12:06:00-07:00</updated>
    <id>http://www.likens.us/blog/2011/07/24/learn-to-respect-the-problem</id>
    <content type="html"><![CDATA[<p>There is a time in your life when you start learning to respect the problem.  Of course you can fix a problem easily by doing x.  But if you spend a little more time you can fix x,y and z and in a way that you feel proud of.</p>

<p>Yes I am likely twisting the definition for my own gains.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Getting Chef 0.8 Bootstrapped and Up in Screen]]></title>
    <link href="http://www.likens.us/blog/2009/12/14/getting-chef-08-bootstrapped-and-up-in-screen/"/>
    <updated>2009-12-14T11:00:00-08:00</updated>
    <id>http://www.likens.us/blog/2009/12/14/getting-chef-08-bootstrapped-and-up-in-screen</id>
    <content type="html"><![CDATA[<p>Simple post, just to detail if you want .8 and don&#8217;t want to use bootstrap or runit or init and you just want it working.</p>

<ul>
<li>Get the base system up</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>sed -i 's/universe/multiverse universe/' /etc/apt/sources.list
</span><span class='line'>apt-get update
</span><span class='line'>env DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
</span><span class='line'>echo 'sun-java6-jdk shared/accepted-sun-dlj-v1-1 boolean true' | sudo debconf-set-selections
</span><span class='line'>apt-get install -y ruby ruby1.8-dev libopenssl-ruby1.8 rdoc ri irb build-essential zlib1g-dev libxml2-dev wget ssl-cert git-core couchdb sun-java6-jdk sun-java6-jre</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Setup gem to not annoy me</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>echo "gem: --no-rdoc --no-ri" >> ~/.gemrc</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Now install rubygems,</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cd /tmp
</span><span class='line'>wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
</span><span class='line'>tar zxf rubygems-1.3.5.tgz
</span><span class='line'>cd rubygems-1.3.5
</span><span class='line'>sudo ruby setup.rb --no-ri --no-rdoc
</span><span class='line'>sudo ln -sfv /usr/bin/gem1.8 /usr/bin/gem</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Install RabbitMQ</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>wget http://www.rabbitmq.com/releases/rabbitmq-server/v1.7.0/rabbitmq-server_1.7.0-1_all.deb
</span><span class='line'>dpkg -i rabbitmq-server_1.7.0-1_all.deb</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Make sure you have rake/etc installed</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>gem install rake cucumber rspec libxml-ruby jeweler thin unicorn merb-core merb-slices</span></code></pre></td></tr></table></div></figure>


<ul>
<li>now setup RabbitMQ so that chef can talk to it</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>rabbitmqctl add_vhost /chef
</span><span class='line'>rabbitmqctl add_user chef testing
</span><span class='line'>rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Grab Chef .8 from master and start work</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>mkdir git;git clone git://github.com/opscode/chef.git</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Install chef from master</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>rake install</span></code></pre></td></tr></table></div></figure>


<ul>
<li><p>You may catch a few missing dependencies, gem install them if I missed it (but I think this is right)</p></li>
<li><p>Now you need to install the chef-solr bins (the gemspec isn&#8217;t fixed to do this yet)</p></li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cd git/chef/chef-solr/bin;cp * /usr/bin</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Grab mixlib-authentication from git</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git clone git://github.com/opscode/mixlib-authentication.git</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Install mixlib-authentication</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cd mixlib-authentication && rake install</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Grab mixlib-log from git</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git clone git://github.com/opscode/mixlib-log</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Install that also</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cd mixlib-log && rake install</span></code></pre></td></tr></table></div></figure>


<ul>
<li><p>Now fire up screen and start it up</p></li>
<li><p>In not the perfect order, but.</p></li>
<li><p>Start chef-solr</p></li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>chef-solr</span></code></pre></td></tr></table></div></figure>


<ol>
<li>Start chef-solr-indexer</li>
</ol>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>chef-solr-indexer</span></code></pre></td></tr></table></div></figure>


<ol>
<li>Grab some configs that should work,</li>
</ol>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>mkdir -p /etc/chef
</span><span class='line'>cd /etc/chef;wget http://likens.us/server.rb  
</span><span class='line'>cd /etc/chef;wget http://likens.us/client.rb</span></code></pre></td></tr></table></div></figure>


<ol>
<li>Start chef-server</li>
</ol>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>chef-server</span></code></pre></td></tr></table></div></figure>


<ol>
<li>Now configure knife to work with the webui key and you should be solid.</li>
</ol>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>knife configure</span></code></pre></td></tr></table></div></figure>


<ol>
<li><p>Run chef-client over localhost and it should register and work hopefully</p></li>
<li><p>Enjoy</p></li>
<li><p>Thanks to Bryan Helmkamp for updates to this post.</p></li>
</ol>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Why you should never change API on a minor release]]></title>
    <link href="http://www.likens.us/blog/2009/11/02/why-you-should-never-change-api-on-a-minor-release/"/>
    <updated>2009-11-02T10:33:00-08:00</updated>
    <id>http://www.likens.us/blog/2009/11/02/why-you-should-never-change-api-on-a-minor-release</id>
    <content type="html"><![CDATA[<p><rant>
In this case, my pain is Chef; as 0.7.0 came out we were rocking with metadata.rb, as I wasn&#8217;t paying attention and reading release documentation properly suddenly that doesn&#8217;t do squat, and everything is in metadata.json.  I&#8217;m sure there was something in one of the release notes that I omitted, however it brings up a valid point that Opscode has broken many times (I am only mentioning these 2) in the .7 release cycle</p>

<p>They have repeatedly broken the basic idea of not making major changes in a minor release, such as this, or when they re-wrote the bootstrap system; and then neutered the old system so you had to use the old bootstrap tarball (which is the only reason I am not up in arms).</p>

<p>&#8230; However, if you want to do things like this, you should release a new major version and allow people to get used to the major changes.  There are always growing pains with anything new, different, &#8230; however the past has taught us that you should not make stupid major changes to a structure without a major release.
</rant></p>

<p>Opscode has made this much smoother since the original post of this message and they have delivered a much better product then this post originally ranted about.</p>
]]></content>
  </entry>
  
</feed>

