<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>mojavy.com</title>
    <link>http://mojavy.com/blog</link>
    <description></description>
    <pubDate>Tue, 11 Mar 2014 02:08:20 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>gitlab 6.6.4 CE のゆるふわセットアップ</title>
      <link>http://mojavy.com/blog/2014/03/11/latest-gitlab-setup/</link>
      <pubDate>Tue, 11 Mar 2014 02:08:20 JST</pubDate>
      <category><![CDATA[chef]]></category>
      <category><![CDATA[git]]></category>
      <category><![CDATA[tips]]></category>
      <category><![CDATA[gitlab]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2014/03/11/latest-gitlab-setup/</guid>
      <description>gitlab 6.6.4 CE のゆるふわセットアップ</description>
      <content:encoded><![CDATA[<p>gitlabもCentOSとUbuntuにはパッケージが提供されるようになったので、大分インストールが簡単になりました。</p>
<p>とはいえ、このパッケージはgitlab専用のマシンにインストールすることを前提にしているのか、小規模プロジェクトのために軽く使いたいよう場合ではつらいデフォルト設定となっています。安いvpsとかだと確実にメモリ不足でまともに動きません。</p>
<p>以下はとりあえずプライベートgitリポジトリが欲しいだけのような人のためのgitlabの設定の紹介です。</p>
<h2 id="_1">準備</h2>
<p><a href="https://www.gitlab.com/downloads/">https://www.gitlab.com/downloads/</a> </p>
<p>ここからgitlabのパッケージをダウンロードします。
<a href="https://github.com/opscode/omnibus-ruby">omnibus-ruby</a> でつくられた全部入りパッケージなのでインストールでのコンフリクトは発生しないはずですが、既に稼動中のサービス(apache等)のことはあまり考慮されてないので使用するポートについては個別対応が必要です。</p>
<p>特に以下は注意が必要です。</p>
<ul>
<li>nginx</li>
<li>redis</li>
<li>postgresql</li>
</ul>
<p>ここでは、apacheが稼動しているubuntuにインストールします。</p>
<h2 id="_2">インストール</h2>
<p>普通にインストールします。</p>
<div class="pygments_borland"><pre>$ sudo dpkg -i gitlab_6.6.4-omnibus-1.ubuntu.12.04_amd64.deb 
$ sudo gitlab-ctl reconfigure
</pre></div>

<p>ちなみにgitユーザが既に存在しているとこけるので消しておきます</p>
<p><code>$ sudo userdel -r git</code></p>
<h2 id="gitlab">gitlabの設定</h2>
<p>gitlabの設定は /etc/gitlab/gitlab.rb に設定をかいて、chefで設定します。</p>
<div class="pygments_borland"><pre>$ cat /etc/gitlab/gitlab.rb
external_url &quot;http://gitlab.example.com:8081&quot;
unicorn[&quot;worker_processes&quot;] = 1
postgresql[&quot;shared_buffers&quot;] = &quot;128MB&quot;
postgresql[&quot;effective_cache_size&quot;] = &quot;32MB&quot;
</pre></div>

<p>とりあえずpostgresqlがメモリを大量に食うので適当に減らします。</p>
<p>unicornもメモリ食いがちなので1プロセスにします。</p>
<p><code>external_url</code>にポートも含めたURLをかきます。apacheが80番で起動してるとnginxが起動できないので適当にはずします。ちなみに8080はデフォルトだとgitlabのunicornがつかっています。</p>
<p>このあたりは環境に応じて適当に設定してください。</p>
<p><code>gitlab-ctl reconfigure</code> すると設定が反映されます。</p>
<p>その他の設定できる項目は <code>/opt/gitlab/embedded/cookbooks/gitlab</code> 以下の<code>cookbook</code>をみるといいです。</p>
<h2 id="web">webサーバの設定</h2>
<p>80番で起動しているapacheがいる場合はnginxにproxyします。</p>
<div class="pygments_borland"><pre>&lt;VirtualHost *:80&gt;
  ServerName gitlab.example.com

  DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

  CustomLog  /var/log/apache2/gitlab_access.log combined
  ErrorLog   /var/log/apache2/gitlab_error.log

  ErrorDocument 502 /502.html

  &lt;Directory &quot;/opt/gitlab/embedded/service/gitlab-rails/public&quot;&gt;
    Options FollowSymLinks
  &lt;/Directory&gt;

  &lt;Proxy *&gt;
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  &lt;/Proxy&gt;

  ProxyVia On
  ProxyPreserveHost On

  ProxyRequests Off
  ProxyPass /assets/ !
  ProxyPass /uploads/      !

  ProxyPass / http://localhost:8081/ retry=1
  ProxyPassReverse / http://localhost:8081/

&lt;/VirtualHost&gt;
</pre></div>

<p>以上ができたらapache再起動して、 http://gitlab.example.com にアクセスしてみてうまく表示できれば完了です。</p>]]></content:encoded>
    </item>
    <item>
      <title>chefを使うのを我慢したほうがいいとき</title>
      <link>http://mojavy.com/blog/2014/03/07/dont-use-chef/</link>
      <pubDate>Fri, 07 Mar 2014 00:09:26 JST</pubDate>
      <category><![CDATA[chef]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2014/03/07/dont-use-chef/</guid>
      <description>chefを使うのを我慢したほうがいいとき</description>
      <content:encoded><![CDATA[<p>chefを使いはじめるとあらゆるもののセットアップをchefレシピ書かずにやるのが気持ち悪くなってしまうけど、chefでやらないほうがいいものって結構あると思う。</p>
<ul>
<li>redmine</li>
<li>gitlab</li>
<li>小規模なシステムのzabbixのマスター</li>
<li>etc...</li>
</ul>
<p>この手のものは、実際に使いはじめると多少は手作業での運用が必要になるので、誰かがつくったcookbookでいれてしまうよりかは手作業でいれてある程度どこになにがあるか把握しておいたほうがやりやすい。</p>
<p>自前でレシピ書いてもいいけど、当面は1台あれば十分なのであれば単なる二度手間でしかないのでセットアップ手順をメモに残す程度で十分。<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> </p>
<p>ある程度運用経験があってとりあえずすぐに動く環境を作りたい、という場合のみ出来合いのcookbookをそのまま使えばいいと思う。</p>
<p>などということを、1ヶ月くらいかけていろいろcookbook書いたあげく心が折れたときに感じた。</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>まめにredmineみたいなものをアップデートしたいような人もたぶんあんまりいない&#160;<a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
    <item>
      <title>debianパッケージをchefで削除する場合はpurgeを使う方がよい</title>
      <link>http://mojavy.com/blog/2013/09/10/chef-purge-package/</link>
      <pubDate>Tue, 10 Sep 2013 19:39:49 JST</pubDate>
      <category><![CDATA[chef]]></category>
      <category><![CDATA[ruby]]></category>
      <category><![CDATA[debian]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2013/09/10/chef-purge-package/</guid>
      <description>debianパッケージをchefで削除する場合はpurgeを使う方がよい</description>
      <content:encoded><![CDATA[<p>apt-getコマンドにはパッケージを削除するためのコマンドが2種類ある</p>
<ul>
<li>remove: パッケージを削除するが設定ファイルはそのまま残す</li>
<li>purge: パッケージを削除するとき設定ファイルも削除する</li>
</ul>
<p>chefをつかっているということは設定ファイルもchefで管理しているはずなので、設定ファイルを残す必要はない。
さらに、依存で入ったパッケージも一緒に削除されるように、<code>options "--auto-remove"</code>などとしてやるとよい。</p>
<p>ゴミは混乱の元なので早めに消すべし。</p>]]></content:encoded>
    </item>
    <item>
      <title>chef soloでAuthenticationFailedといわれたときの対応</title>
      <link>http://mojavy.com/blog/2013/09/09/chef-solo-ssh-config/</link>
      <pubDate>Mon, 09 Sep 2013 20:43:04 JST</pubDate>
      <category><![CDATA[chef]]></category>
      <category><![CDATA[ruby]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2013/09/09/chef-solo-ssh-config/</guid>
      <description>chef soloでAuthenticationFailedといわれたときの対応</description>
      <content:encoded><![CDATA[<p>公開鍵認証なホストに対してパスフレーズ入力無しでsshログインができるにもかかわらず、</p>
<div class="pygments_borland"><pre><span class="nv">$ </span>knife solo cook myhost
Running Chef on myhost...
Checking Chef version...
Enter the password <span class="k">for </span>username@myhost:
ERROR: Net::SSH::AuthenticationFailed: username
</pre></div>

<p>のようにいわれてchef soloの実行に失敗してしまうときがある。</p>
<p>パスフレーズ入力無しでsshできたということは、普通は以下のうちの少くとも1つは満たされている。</p>
<ol>
<li>ssh-agentに対象の秘密鍵が登録されている</li>
<li>デフォルトパス($HOME/.ssh/id_rsa とか)に対象のパスフレーズ無し秘密鍵が保存されている</li>
<li>ssh_configでパスフレーズ無し秘密鍵を指定している</li>
</ol>
<p>それなのに<code>AuthenticationFailed</code>失敗してしまうのは、Net:SSHがデフォルトでは公開鍵認証を試行しない場合があるため。 <sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> 
これを回避するには、ssh_configで<code>PubkeyAuthentication yes</code>を明示すればよい。</p>
<p>なお、<code>Net::SSH</code>がどのような動きをしているかは以下のスニペットを試すとよい。</p>
<div class="pygments_borland"><pre><span class="nb">require</span> <span class="s1">&#39;net/ssh&#39;</span>
<span class="no">Net</span><span class="o">::</span><span class="no">SSH</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="s2">&quot;myhost&quot;</span><span class="p">,</span> <span class="s2">&quot;username&quot;</span><span class="p">,</span> <span class="ss">:verbose</span> <span class="o">=&gt;</span> <span class="ss">:debug</span><span class="p">)</span> <span class="p">{</span><span class="o">|</span><span class="n">x</span><span class="o">|</span> <span class="nb">p</span> <span class="n">x</span> <span class="p">}</span>
</pre></div>

<h3 id="_1">備考</h3>
<p>使ったのは以下のバージョン</p>
<ul>
<li>chef: 11.6.0</li>
<li>knife-solo: 0.3.0</li>
</ul>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>この挙動は<code>knife solo</code>コマンドに<code>-i</code>オプションを渡しても変わらなかった。&#160;<a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>
