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

  <title><![CDATA[blog.tnmt.info]]></title>
  <link href="http://blog.tnmt.info/atom.xml" rel="self"/>
  <link href="http://blog.tnmt.info/"/>
  <updated>2012-01-25T20:22:59+09:00</updated>
  <id>http://blog.tnmt.info/</id>
  <author>
    <name><![CDATA[tnmt]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[/etc/hosts.allowで外部ファイルをincludeして使う]]></title>
    <link href="http://blog.tnmt.info/2011/11/30/hosts-allow-include/"/>
    <updated>2011-11-30T00:31:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/11/30/hosts-allow-include</id>
    <content type="html"><![CDATA[<p>tcp_wrappers 好きの皆さんこんにちわ。
/etc/hosts.allow でアクセス制限管理してますか？</p>

<p>ふと、「/etc/hosts.allowでincludeって出来ないのかなあ」と思って</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>man hosts.allow
</span></code></pre></td></tr></table></div></figure>


<p>してみたところ、&#8221;PATTERNS&#8221; のところに</p>

<blockquote><p>A string that begins with a ‘/´ character is treated as a file name. A host name or address is matched if it matches any host name or address pattern listed in the named file. The  file  format is zero or more lines with zero or more host name or address patterns separated by whitespace.  A file name pattern can be used anywhere a host name or address pattern can be used.</p></blockquote>

<p>アドレスを書く部分が &#8216;/&#8217; で始まる場合はファイルで指定出来ると書いてあったので試してみました。</p>

<ul>
<li>/etc/hosts.deny で &#8220;ALL:   ALL&#8221; で全拒否</li>
<li>/etc/hosts.allow でホワイトリストとして管理</li>
</ul>


<p>してるときに、 /etc/hosts.allow に以下のように記載し</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sshd:    /etc/hosts.sshd_allow
</span></code></pre></td></tr></table></div></figure>


<p>includeするファイルを以下のように作成すると</p>

<figure class='code'><figcaption><span>/etc/hosts&#46;sshd_allow </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=''><span class='line'>192.168.1.10
</span><span class='line'>192.168.1.11</span></code></pre></td></tr></table></div></figure>


<p>通常記載するような以下の動きと同じになります。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sshd:    192.168.1.10
</span><span class='line'>sshd:    192.168.1.11
</span></code></pre></td></tr></table></div></figure>


<p>役割が違うサーバーのそれぞれの /etc/hosts.allow をバージョン管理していて、両方で共通のルールだけ別ファイルで一元管理などに便利に使えそうです。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Wordpress to Octopress]]></title>
    <link href="http://blog.tnmt.info/2011/11/20/wordpress-to-octopress/"/>
    <updated>2011-11-20T22:11:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/11/20/wordpress-to-octopress</id>
    <content type="html"><![CDATA[<p>BlogをWordpressから<a href="http://octopress.org/">Octopress</a>に変更しました。</p>

<p><a href="http://k-ui.jp/blog/2011/09/07/convert-wordpress-entries-for-octopress-or-jekyll/">こちらの記事</a> を参考にpermalinkは変わらず。RSSも新しいURLにリダイレクト。</p>

<p>mizzyさんが <a href="http://mizzy.org/blog/2011/11/15/octopress-on-heteml/">scpでのデプロイ方法</a> を書いてくれてるので、Github Pages ではなくレンタルサーバーに乗せてます。</p>

<p>見た目も少ーしだけ変更。デザインとか分からなすぎて泣ける。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fedora 16へのアップグレード (preupgrade-cli)]]></title>
    <link href="http://blog.tnmt.info/2011/11/10/upgrade-to-fedora-16-using-preupgrade-cli/"/>
    <updated>2011-11-10T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/11/10/upgrade-to-fedora-16-using-preupgrade-cli</id>
    <content type="html"><![CDATA[<p>もはや、preupgrade-cli成功したよ報告にしかなってないですが。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo <span class="nv">LANG</span><span class="o">=</span>C preupgrade-cli <span class="s2">&quot;Fedora 16 (Verne)&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<pre><code>Loaded plugins: blacklist, langpacks, whiteout
No plugin match for: rpm-warm-cache
No plugin match for: remove-with-leaves
No plugin match for: auto-update-debuginfo
No plugin match for: refresh-packagekit
Loaded plugins: langpacks, presto
preupgrade-main (mirrorlist)
  url: http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-16&amp;arch=$basearch
  now: http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-16&amp;arch=x86_64
preupgrade (mirrorlist)
  url: http://mirrors.fedoraproject.org/mirrorlist?path=pub/fedora/linux/releases/16/Fedora/$basearch/os/
  now: http://mirrors.fedoraproject.org/mirrorlist?path=pub/fedora/linux/releases/16/Fedora/x86_64/os/
preupgrade-fedora (mirrorlist)
  url: https://mirrors.fedoraproject.org/metalink?repo=fedora-16&amp;arch=x86_64
  now: https://mirrors.fedoraproject.org/metalink?repo=fedora-16&amp;arch=x86_64
preupgrade-updates (mirrorlist)
  url: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f16&amp;arch=x86_64
  now: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f16&amp;arch=x86_64
http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/16/Fedora/x86_64/os//.treeinfo: [Errno 14] HTTP Error 404 - Not Found : http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/16/Fedora/x86_64/os//.treeinfo
Trying other mirror.
Fetched treeinfo from http://mirrors.isu.net.sa/pub/fedora/linux/releases/16/Fedora/x86_64/os//.treeinfo
treeinfo timestamp: Thu Nov  3 12:10:12 2011
MEMORY                                                                                                                                                                                     |  883 B     00:00
vmlinuz                                                                                                                                                                                    | 3.9 MB     00:24
initrd.img                                                                                                                                                                                 | 129 MB     13:11
preupgrade-updates/group                                                                                                                                                                   | 1.9 MB     00:00
preupgrade-fedora/group_gz                                                                                                                                                                 | 431 kB     00:00
preupgrade-updates/group_gz                                                                                                                                                                | 431 kB     00:00
--&gt; Running transaction check
---&gt; Package abattis-cantarell-fonts.noarch 0:0.0.6-1.fc15 will be updated
---&gt; Package abattis-cantarell-fonts.noarch 0:0.0.7-1.fc16 will be an update
---&gt; Package acl.x86_64 0:2.2.49-11.fc15 will be updated
---&gt; Package acl.x86_64 0:2.2.51-2.fc16 will be an update
---&gt; Package adwaita-cursor-theme.noarch 0:3.0.2-1.fc15 will be updated
---&gt; Package adwaita-cursor-theme.noarch 0:3.2.1-2.fc16 will be an update
---&gt; Package alsa-tools-firmware.x86_64 0:1.0.24.1-2.fc15 will be updated
---&gt; Package alsa-tools-firmware.x86_64 0:1.0.24.1-3.fc16 will be an update
---&gt; Package alsa-utils.x86_64 0:1.0.24.1-3.fc15 will be updated
---&gt; Package alsa-utils.x86_64 0:1.0.24.1-5.fc16 will be an update
---&gt; Package apg.x86_64 0:2.3.0b-10.fc15 will be updated
---&gt; Package apg.x86_64 0:2.3.0b-11.fc16 will be an update
---&gt; Package apr.x86_64 0:1.4.5-1.fc15 will be updated
---&gt; Package apr.x86_64 0:1.4.5-1.fc16 will be an update
---&gt; Package apr-util.x86_64 0:1.3.12-1.fc15 will be updated
---&gt; Package apr-util.x86_64 0:1.3.12-1.fc16 will be an update
---&gt; Package at.x86_64 0:3.1.12-9.fc15 will be updated
---&gt; Package at.x86_64 0:3.1.13-3.fc16 will be an update
---&gt; Package atk.x86_64 0:2.0.0-1.fc15 will be updated
---&gt; Package atk.x86_64 0:2.2.0-2.fc16 will be an update

(..snip)

--&gt; Finished Dependency Resolution
Packages we need to download
ConsoleKit.x86_64                        0.4.5-1.fc15           preupgrade-fedora
ConsoleKit-libs.x86_64                   0.4.5-1.fc15           preupgrade-fedora
GConf2.x86_64                            3.2.0-1.fc16           preupgrade-fedora
NetworkManager-glib.x86_64               1:0.9.1.90-5.git20110927.fc16
                                                                preupgrade-fedora
abattis-cantarell-fonts.noarch           0.0.7-1.fc16           preupgrade-fedora
acl.x86_64                               2.2.51-2.fc16          preupgrade-fedora
adwaita-cursor-theme.noarch              3.2.1-2.fc16           preupgrade-fedora
alsa-tools-firmware.x86_64               1.0.24.1-3.fc16        preupgrade-fedora
alsa-utils.x86_64                        1.0.24.1-5.fc16        preupgrade-updates
apg.x86_64                               2.3.0b-11.fc16         preupgrade-fedora
apr.x86_64                               1.4.5-1.fc16           preupgrade-fedora
apr-util.x86_64                          1.3.12-1.fc16          preupgrade-fedora
at.x86_64                                3.1.13-3.fc16          preupgrade-fedora
atk.x86_64                               2.2.0-2.fc16           preupgrade-fedora
atkmm.x86_64                             2.22.5-1.fc16          preupgrade-fedora
attr.x86_64                              2.4.46-2.fc16          preupgrade-fedora
audit.x86_64                             2.1.3-4.fc16           preupgrade-fedora
audit-libs.x86_64                        2.1.3-4.fc16           preupgrade-fedora

(..snip)

yum-metadata-parser.x86_64               1.1.4-5.fc16           preupgrade-fedora
yum-presto.noarch                        0.7.1-1.fc16           preupgrade-fedora
yum-utils.noarch                         1.1.31-2.fc16          preupgrade-fedora
zlib.x86_64                              1.2.5-4.fc16           preupgrade-fedora
Total download size: 270.2MB
Download packages?
Is this ok [y/N]: y
Setting up and reading Presto delta metadata
preupgrade-updates/prestodelta                                                                                                                                                             |  64 kB     00:00
preupgrade-fedora/prestodelta                                                                                                                                                              | 791 kB     00:00
Processing delta metadata
Download delta size: 1.5 M

(..snip)

(526/532): yajl-1.0.12-1.fc16.x86_64.rpm                                                                                                                                                   |  28 kB     00:00
(527/532): yelp-xsl-3.2.1-1.fc16.noarch.rpm                                                                                                                                                | 278 kB     00:00
(528/532): yum-3.4.3-5.fc16.noarch.rpm                                                                                                                                                     | 1.0 MB     00:00
(529/532): yum-langpacks-0.2.4-1.fc16.noarch.rpm                                                                                                                                           |  18 kB     00:00
(530/532): yum-metadata-parser-1.1.4-5.fc16.x86_64.rpm                                                                                                                                     |  26 kB     00:00
(531/532): yum-presto-0.7.1-1.fc16.noarch.rpm                                                                                                                                              |  33 kB     00:00
(532/532): zlib-1.2.5-4.fc16.x86_64.rpm                                                                                                                                                    |  82 kB     00:00
Generating metadata for preupgrade repo
preupgrade                                                                                                                                                                                 | 3.7 kB     00:00
preupgrade/primary_db                                                                                                                                                                      | 2.3 MB     00:13
preupgrade/group                                                                                                                                                                           | 1.9 MB     00:10
Spawning worker 0 with 547 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
Preparing system to boot into installer
DEBUG /sbin/grubby --title="Upgrade to Fedora 16 (Verne)" --remove-kernel="/boot/upgrade/vmlinuz" --add-kernel="/boot/upgrade/vmlinuz" --initrd="/boot/upgrade/initrd.img" --args="preupgrade repo=hd::/var/cache/yum/preupgrade  ks=hd:UUID=3e6914b1-5eed-4f85-8465-4eb52bcc36d6:/upgrade/ks.cfg"
Probing devices to guess BIOS drives. This may take a long time.
All finished. The upgrade will begin when you reboot.
</code></pre>

<p>あとはメッセージの通りrebootするだけ。</p>

<p>以前に<a href="http://blog.tnmt.info/2009/12/14/fedora-upgrade10-to-12/">Feodra 10から12</a>、<a href="http://blog.tnmt.info/2010/11/06/upgrade-fedora-13-to-14-using-preupgrade/">Fedora 13から14</a>とかやってますが、ハマりどころはもうなくて、サクっとコマンド一発。</p>

<p>/boot 以下の容量の兼ね合いで、10から12の時には容量足らない時には問答無用で失敗、13から14の時にはその旨警告が出て、reboot後にアップグレード用のパッケージがダウンロードされるような動きでしたが、今回は容量に余裕がある / 配下にダウンロードされているよう（な動きだった）で、詰まりどころは皆無でした。</p>

<p>関係ないけど、Fedora 15のコードネーム &#8220;Lovelock&#8221; って何かかっこ良くて好きでした。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[#isucon に参加してきました]]></title>
    <link href="http://blog.tnmt.info/2011/08/28/isucon-01/"/>
    <updated>2011-08-28T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/08/28/isucon-01</id>
    <content type="html"><![CDATA[<p><a href="http://blog.livedoor.jp/techblog/archives/66528186.html">なんでもありのWebアプリケーション高速化バトル、#isucon 開催のお知らせ</a></p>

<p><a href="http://blog.tnmt.info/2011/07/31/isucon/">参加経緯</a> 後、<a href="http://twitter.com/#!/hansode">@hansode</a> さんを含め、<a href="http://twitter.com/#!/kyanny">@kyanny</a> さんと俺の3人、”チーム情熱会” で参加してきました。
結果は審査用の3分間ベンチマークがこけたので、参考数値の100,604/minが最終でした。</p>

<h4>チームでやれたこと</h4>


<ul>
<li>mysqlのパラメータ調整(innodb周りとか)</li>
<li>mysql問い合わせ結果をmemcachedでキャッシュ</li>
<li>リバースプロキシをapacheからnginxに変更</li>
</ul>


<p>刺身さんがアプリで入れてくれたクエリキャッシュが一番効果あったと思います。
俺はリバースプロキシの変更をやったくらいで、nginxにしてパフォーマンス下がったときはちょっと涙目だったけどベンチツールのhttpのkeep-alive罠を回避出来たのは良かったかな。
DBがボトルネックになってて原因になるクエリがあったのは早い段階で気づいていたけど、俺のSQLレベルが低すぎて全然役に立ててなかった。。</p>

<p>終わった後の優勝チーム&#8221;fujiwara組&#8221;の <a href="http://twitter.com/#!/fujiwara">@fujiwara</a> さんと、最終的に3位に<a href="http://twitter.com/#!/tagomoris/status/107487558753206272">なるかもしれない？</a> 準優勝チーム&#8221;いんふらえんじにあー&#8221;の <a href="http://twitter.com/#!/netmarkjp">@netmarkjp</a> さんからのつぶやき引用。</p>

<!-- http://twitter.com/#!/fujiwara/status/107485831329087488 -->


<p> <style type='text/css'>.bbpBox107485831329087488 {background:url(http://a0.twimg.com/images/themes/theme1/bg.png) #9ae4e8;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style> <div class='bbpBox107485831329087488'><p class='bbpTweet'>重くないところをいじってもスコアなんて誤差しか変わらないから、真摯に一番負荷の掛かってるところを見極めるべし、ですよ<span class='timestamp'><a title='Sat Aug 27 16:13:13 +0000 2011' href='http://twitter.com/#!/fujiwara/status/107485831329087488'>less than a minute ago</a> via <a href="http://sites.google.com/site/yorufukurou/" rel="nofollow">YoruFukurou</a> <a href='http://twitter.com/intent/favorite?tweet_id=107485831329087488'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=107485831329087488'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=107485831329087488'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/fujiwara'><img src='http://a2.twimg.com/profile_images/1295745651/fujiwara-icon-s_normal.png' /></a><strong><a href='http://twitter.com/fujiwara'>FUJIWARA Shunichiro</a></strong><br/>fujiwara</span></span></p></div> <!-- end of tweet --></p>

<!-- http://twitter.com/#!/netmarkjp/status/107477837476401152 -->


<p> <style type='text/css'>.bbpBox107477837476401152 {background:url(http://a1.twimg.com/images/themes/theme3/bg.gif) #EDECE9;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style> <div class='bbpBox107477837476401152'><p class='bbpTweet'>今日の <a href="http://twitter.com/search?q=%23isucon" title="#isucon" class="tweet-url hashtag" rel="nofollow">#isucon</a> も先日の <a href="http://twitter.com/search?q=%23tuningathon" title="#tuningathon" class="tweet-url hashtag" rel="nofollow">#tuningathon</a> もだけど、チューニングのときにhotspotじゃないところをいじるの好きな人が多い。初見でトップダウンアプローチで安定して確実に短時間に成果出すのはキツい。着実にボトムアップアプローチできるようになれば安定して2位とれる<span class='timestamp'><a title='Sat Aug 27 15:41:27 +0000 2011' href='http://twitter.com/#!/netmarkjp/status/107477837476401152'>less than a minute ago</a> via <a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a> <a href='http://twitter.com/intent/favorite?tweet_id=107477837476401152'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=107477837476401152'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=107477837476401152'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/netmarkjp'><img src='http://a1.twimg.com/profile_images/77275324/netmark_normal.png' /></a><strong><a href='http://twitter.com/netmarkjp'>ばば としあき</a></strong><br/>netmarkjp</span></span></p></div> <!-- end of tweet --></p>

<p>ばばさんのはギクッというか、ああ俺だわっていう感じが。自分が分かることしか出来ないのは勿論あるんだけど。実力を知るいい機会になりました。</p>

<p>今回のチューニングのポイント・やり方は自分のお作法にもフィードバックして、あと<del>ほぼ今回初めて触ったけど</del>nginx周りについては色々勉強になったので実業務にも活かせればと思います。</p>

<p>主催のlivedoorの皆様、参加者の皆様お疲れ様でした。素敵・素晴らしいイベントだったと思います。
チーム情熱会のお二人も一緒に出させてもらって楽しかったです、ありがとうございました。</p>

<p>あー、復習でひとりisuconやろう。そのあとチームでisucon振り返りもいいなー。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[#isucon に参戦します]]></title>
    <link href="http://blog.tnmt.info/2011/07/31/isucon/"/>
    <updated>2011-07-31T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/07/31/isucon</id>
    <content type="html"><![CDATA[<p><a href="http://twitter.com/#!/search?q=%23isucon">#isucon</a> に応募しました（同僚が！）</p>

<p><a href="http://blog.livedoor.jp/techblog/archives/66595391.html">livedoor Techブログ : 【締め切りました】Webアプリケーション高速化バトル、#isucon 詳細と参加者募集開始</a></p>

<p>俺も<a href="http://www.zusaar.com/event/agZ6dXNhYXJyDQsSBUV2ZW50GL2xAgw">チューニンガソン</a>面白そうだなと思ってたんだけど締め切り後で参加できなかったので、社内SNSで<a href="http://twitter.com/#!/kyanny">刺身</a>さんが、「メンバー求む！当方ウェブアプリケーションブログラマ Perl Ruby MySQL Apache 経験あり プロ志向 やる気のない奴お断り モヒカン不可」というメン募風の呼びかけがあったところに、「当方モヒカンじゃないインフラエンジニアです。」という返答をして参加させてもらうことに。</p>

<p>刺身さんも書いてたけど、顔ぶれを見ると結構レベル高そうだなーと思ってます。まあ胸を借りるくらいの感じで楽しめたらいいなあと。</p>

<p>あと1か月弱あるんで少し修行してきます。やってやんよ！</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Cobbler+KoanでScientific Linux 6.0なKVMのVMをコマンド一発で作成する]]></title>
    <link href="http://blog.tnmt.info/2011/07/06/scientific-linux-kvm-with-cobbler-koan/"/>
    <updated>2011-07-06T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/07/06/scientific-linux-kvm-with-cobbler-koan</id>
    <content type="html"><![CDATA[<p>エンジニアは七夕までにCentOS6と巡り逢えるのでしょうか。</p>

<p>今回はいつも使っているCentOSから趣を変えて、Scientific Linuxを触ってみます。色々検証する為にScientific LinuxなVMを簡単につくれる環境をCobbler+Koanを使って準備しました。</p>

<h2>Cobbler+Koan</h2>

<p>Cobbler, Koanについては以前（っても結構前ですが）<a href="http://blog.tnmt.info/2010/07/28/lt-at-hbstudy-13/">こんな発表</a>をしたことがありまして、内容についてはそちらが参考になればと思います。CentOSと同じくScientific LinuxもRHELクローンなので、同じ方法が使えるというわけです。</p>

<h2>環境</h2>

<p>試した環境は1台のCentOS5.6物理サーバー上に、Cobbler+KoanがセットアップされたKVMの仮想母艦機です。</p>

<h2>実際の流れ</h2>

<p>Cobbler+Koanのセットアップ手順やKVM環境については省略しますが、mizzyさんの<a href="http://mizzy.org/blog/2007/12/29/Cobbler/">Cobbler</a>や<a href="http://mizzy.org/blog/2007/12/31/Koan/">Koan</a>、<a href="http://mizzy.org/blog/2009/10/31/KvmOnCentOS54/">KVM on CentOS 5.4</a>が参考になります。</p>

<h3>ネットワークインストールに必要なファイルの用意</h3>

<p>コマンド一発です。&#8221;SL6.0-x86_64&#8221;というdistro名で準備します。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo cobbler import --path<span class="o">=</span>rsync://ftp.jaist.ac.jp/pub/Linux/scientific/6.0/x86_64/os/ --name<span class="o">=</span>SL6.0-x86_64
</span></code></pre></td></tr></table></div></figure>


<p>ずらずらと表示されて、ネットワークインストールに必要な準備が整います。完了したら確認。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo cobbler distro report --name SL6.0-x86_64
</span></code></pre></td></tr></table></div></figure>


<pre><code>Name                           : SL6.0-x86_64
Architecture                   : x86_64
Breed                          : redhat
Comment                        :
Initrd                         : /var/www/cobbler/ks_mirror/SL6.0-x86_64/images/pxeboot/initrd.img
Kernel                         : /var/www/cobbler/ks_mirror/SL6.0-x86_64/images/pxeboot/vmlinuz
Kernel Options                 : {}
Kernel Options (Post Install)  : {}
Kickstart Metadata             : {'tree': 'http://@@http_server@@/cblr/links/SL6.0-x86_64'}
Management Classes             : []
OS Version                     : generic26
Owners                         : ['admin']
Red Hat Management Key         : &lt;&lt;inherit&gt;&gt;
Red Hat Management Server      : &lt;&lt;inherit&gt;&gt;
Template Files                 : {}
</code></pre>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo cobbler profile report --name SL6.0-x86_64
</span></code></pre></td></tr></table></div></figure>


<pre><code>Name                           : SL6.0-x86_64
Comment                        :
DHCP Tag                       : default
Distribution                   : SL6.0-x86_64
Enable PXE Menu?               : 1
Kernel Options                 : {}
Kernel Options (Post Install)  : {}
Kickstart                      : /var/lib/cobbler/kickstarts/default.ks
Kickstart Metadata             : {}
Management Classes             : []
Name Servers                   : []
Name Servers Search Path       : []
Owners                         : ['admin']
Parent Profile                 :
Red Hat Management Key         : &lt;&lt;inherit&gt;&gt;
Red Hat Management Server      : &lt;&lt;inherit&gt;&gt;
Repos                          : []
Server Override                : &lt;&lt;inherit&gt;&gt;
Template Files                 : {}
Virt Auto Boot                 : 0
Virt Bridge                    : xenbr0
Virt CPUs                      : 1
Virt File Size(GB)             : 5
Virt Path                      :
Virt RAM (MB)                  : 512
Virt Type                      : qemu
</code></pre>

<p>cobblerのバージョンが古いと大元のdistroのKickstart Metadata情報が入らず、VM作成時のkickstartファイルの内容によってはOSインストールが失敗することがあるっぽいです。今回試したcobblerのバージョンでは問題なく情報が追加されました（cobbler-2.0.9-1.el5）</p>

<h3>VM作成用のテンプレート情報作成</h3>

<p>cobbler importでdistro, profileは自動的に作成され、これらの情報をもとにKoanでVM作成が行えますが、環境によって値を調整したい時にはsystemを登録して、各種のカスタマイズを行います。SL6.0-x86_64-templateというsystemを登録しました。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo cobbler system add --name<span class="o">=</span>SL6.0-x86_64-template --profile SL6.0-x86_64
</span><span class='line'>sudo cobbler system report --name SL6.0-x86_64-template
</span></code></pre></td></tr></table></div></figure>


<pre><code>Name                           : SL6.0-x86_64-template
Comment                        : 
Gateway                        : 
Hostname                       : 
Image                          : 
Kernel Options                 : {}
Kernel Options (Post Install)  : {}
Kickstart                      : &lt;&lt;inherit&gt;&gt;
Kickstart Metadata             : {}
Management Classes             : []
Name Servers                   : []
Name Servers Search Path       : []
Netboot Enabled                : True
Owners                         : ['admin']
Power Management Address       : 
Power ID                       : 
Power Password                 : 
Power Management Type          : ipmitool
Power Username                 : 
Profile                        : SL6.0-x86_64
Red Hat Management Key         : &lt;&lt;inherit&gt;&gt;
Red Hat Management Server      : &lt;&lt;inherit&gt;&gt;
Server Override                : &lt;&lt;inherit&gt;&gt;
Template Files                 : {}
Virt Auto Boot                 : &lt;&lt;inherit&gt;&gt;
Virt CPUs                      : &lt;&lt;inherit&gt;&gt;
Virt File Size(GB)             : &lt;&lt;inherit&gt;&gt;
Virt Path                      : &lt;&lt;inherit&gt;&gt;
Virt RAM (MB)                  : &lt;&lt;inherit&gt;&gt;
Virt Type                      : &lt;&lt;inherit&gt;&gt;
</code></pre>

<p>今回のケースでは</p>

<ul>
<li>仮想母艦機にbr0というネットワークブリッジが作成されており母艦機のeth0経由で外と通信を行っているので、それをVMのeth0に割り当てる</li>
<li>virbr0というKVMの内部ネットワークがあるので、それをVMのeth1に割り当てる</li>
<li>仮想CPUは2個</li>
<li>VMのディスクのサイズを16GBに</li>
<li>コンソール上でインストール状況の確認が行えるように、カーネルに渡すパラメータを追加</li>
<li>専用のkickstartファイルを準備して指定（/var/lib/cobbler/kickstarts/SL6.0-x86_64-template.ks）</li>
</ul>


<p>というカスタマイズの為、cobblerコマンドでsystemの情報を変更・追加します。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo cobbler system edit --name<span class="o">=</span>SL6.0-x86_64-template --interface<span class="o">=</span>eth0 --virt-bridge<span class="o">=</span>br0
</span><span class='line'>sudo cobbler system edit --name<span class="o">=</span>SL6.0-x86_64-template --interface<span class="o">=</span>eth1 --virt-bridge<span class="o">=</span>virbr0
</span><span class='line'>sudo cobbler system edit --name<span class="o">=</span>SL6.0-x86_64-template --virt-cpus<span class="o">=</span>2 --virt-file-size<span class="o">=</span>16
</span><span class='line'>sudo cobbler system edit --name<span class="o">=</span>SL6.0-x86_64-template --kopts<span class="o">=</span><span class="s2">&quot;serial console=ttyS0,115200&quot;</span> --kopts-post<span class="o">=</span><span class="s2">&quot;console=ttyS0,115200&quot;</span>
</span><span class='line'>sudo cobbler system edit --name<span class="o">=</span>SL6.0-x86_64-template  --kickstart<span class="o">=</span>/var/lib/cobbler/kickstarts/SL6.0-x86_64-template.ks
</span></code></pre></td></tr></table></div></figure>


<p>用意したkickstartファイルはdefaultのものをちょこっといじっただけです。</p>

<figure class='code'><figcaption><span>kickstart sample  </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>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gd">--- /var/lib/cobbler/kickstarts/sample.ks       2010-12-09 12:36:41.000000000 +0900</span>
</span><span class='line'><span class="gi">+++ /var/lib/cobbler/kickstarts/SL6.0-x86_64-template.ks        2011-07-06 18:54:39.000000000 +0900</span>
</span><span class='line'><span class="gu">@@ -2,17 +2,18 @@</span>
</span><span class='line'> # System authorization information
</span><span class='line'> auth  --useshadow  --enablemd5
</span><span class='line'> # System bootloader configuration
</span><span class='line'><span class="gd">-bootloader --location=mbr</span>
</span><span class='line'><span class="gi">+#bootloader --location=mbr</span>
</span><span class='line'><span class="gi">+bootloader --location=mbr --append=&quot;console=tty0 console=ttyS0,115200&quot;</span>
</span><span class='line'> # Partition clearing information
</span><span class='line'> clearpart --all --initlabel
</span><span class='line'> # Use text mode install
</span><span class='line'> text
</span><span class='line'> # Firewall configuration
</span><span class='line'><span class="gd">-firewall --enabled</span>
</span><span class='line'><span class="gi">+firewall --disabled</span>
</span><span class='line'> # Run the Setup Agent on first boot
</span><span class='line'> firstboot --disable
</span><span class='line'> # System keyboard
</span><span class='line'><span class="gd">-keyboard us</span>
</span><span class='line'><span class="gi">+keyboard jp106</span>
</span><span class='line'> # System language
</span><span class='line'> lang en_US
</span><span class='line'> # Use network installation
</span><span class='line'><span class="gu">@@ -31,7 +32,7 @@</span>
</span><span class='line'> # Do not configure the X Window System
</span><span class='line'> skipx
</span><span class='line'> # System timezone
</span><span class='line'><span class="gd">-timezone  America/New_York</span>
</span><span class='line'><span class="gi">+timezone  Asia/Tokyo</span>
</span><span class='line'> # Install OS instead of upgrade
</span><span class='line'> install
</span><span class='line'> # Clear the Master Boot Record
</span></code></pre></td></tr></table></div></figure>


<p>コマンド実行後のsystemの情報は以下のようになります。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo cobbler system report --name SL6.0-x86_64-template
</span></code></pre></td></tr></table></div></figure>


<pre><code>Name                           : SL6.0-x86_64-template
Comment                        :
Gateway                        :
Hostname                       :
Image                          :
Kernel Options                 : {'serial': '~', 'console': 'ttyS0,115200'}
Kernel Options (Post Install)  : {'console': 'ttyS0,115200'}
Kickstart                      : /var/lib/cobbler/kickstarts/SL6.0-x86_64-template.ks
Kickstart Metadata             : {}
Management Classes             : []
Name Servers                   : []
Name Servers Search Path       : []
Netboot Enabled                : True
Owners                         : ['admin']
Power Management Address       :
Power ID                       :
Power Password                 :
Power Management Type          : ipmitool
Power Username                 :
Profile                        : SL6.0-x86_64
Red Hat Management Key         : &lt;&lt;inherit&gt;&gt;
Red Hat Management Server      : &lt;&lt;inherit&gt;&gt;
Server Override                : &lt;&lt;inherit&gt;&gt;
Template Files                 : {}
Virt Auto Boot                 : &lt;&lt;inherit&gt;&gt;
Virt CPUs                      : 2
Virt File Size(GB)             : 16
Virt Path                      : &lt;&lt;inherit&gt;&gt;
Virt RAM (MB)                  : &lt;&lt;inherit&gt;&gt;
Virt Type                      : &lt;&lt;inherit&gt;&gt;
Interface =====                : eth0
Bonding Mode                   :
Bonding Master                 :
Bonding Opts                   :
DHCP Tag                       :
DNS Name                       :
IP Address                     :
MAC Address                    :
Static                         : False
Static Routes                  : []
Subnet                         :
Virt Bridge                    : br0
Interface =====                : eth1
Bonding Mode                   :
Bonding Master                 :
Bonding Opts                   :
DHCP Tag                       :
DNS Name                       :
IP Address                     :
MAC Address                    :
Static                         : False
Static Routes                  : []
Subnet                         :
Virt Bridge                    : virbr0
</code></pre>

<h3>KoanでVMを作成</h3>

<p>準備が整ったので、KoanでKVMなVMを作成します。Cobblerサーバーであるlocalホストと、登録したsystemを指定して、sl6test01.tnmt.localというVMを作成します。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo koan --server localhost --virt --system<span class="o">=</span>SL6.0-x86_64-template --virt-name<span class="o">=</span>sl6test01.tnmt.local
</span></code></pre></td></tr></table></div></figure>


<pre><code>- looking for Cobbler at http://localhost/cobbler_api
- reading URL: http://192.168.XXX.20/cblr/svc/op/ks/system/SL6.0-x86_64-templateinstall_tree: http://192.168.XXX.20/cblr/links/SL6.0-x86_64
libvirtd (pid  2656) is running...
- using qemu hypervisor, type=kvm
Wed, 06 Jul 2011 21:57:42 DEBUG    No conn passed to Guest, opening URI 'qemu:///system'
Wed, 06 Jul 2011 21:57:43 DEBUG    DistroInstaller location is a network source.
libvir: QEMU error : Domain not found: no domain with matching name 'sl6test01.tnmt.local'
- adding disk: /var/lib/libvirt/images//sl6test01.tnmt.local-disk0 of size 16
libvir: QEMU error : Domain not found: no domain with matching uuid '0409ba61-bfb5-8663-95f1-65398562d343'
Wed, 06 Jul 2011 21:57:44 DEBUG    Attempting to detect distro:
Wed, 06 Jul 2011 21:57:44 DEBUG    Fetching URI: http://192.168.XXX.20/cblr/links/SL6.0-x86_64/.treeinfo
Wed, 06 Jul 2011 21:57:44 DEBUG    Saved file to /var/lib/libvirt/boot/virtinst-.treeinfo.EwvpV8
Wed, 06 Jul 2011 21:57:44 DEBUG    Fetching URI: http://192.168.XXX.20/cblr/links/SL6.0-x86_64/images/pxeboot/vmlinuz
Wed, 06 Jul 2011 21:57:45 DEBUG    Saved file to /var/lib/libvirt/boot/virtinst-vmlinuz.JYd23x
Wed, 06 Jul 2011 21:57:45 DEBUG    Fetching URI: http://192.168.XXX.20/cblr/links/SL6.0-x86_64/images/pxeboot/initrd.img
Wed, 06 Jul 2011 21:58:03 DEBUG    Saved file to /var/lib/libvirt/boot/virtinst-initrd.img.mYTNuO
libvir: QEMU error : Domain not found: no domain with matching name 'sl6test01.tnmt.local'
Wed, 06 Jul 2011 21:58:04 DEBUG    Creating guest from:
...
(VMの設定XMLダンプ)
...
</code></pre>

<p>メッセージ後VM作成とOSインストールが開始されます。キックスタートファイルがあるのでCUIによるメニュー選択の必要はありません。
インストール状況はvirsh consoleで確認します。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo virsh console sl6test01.tnmt.local
</span></code></pre></td></tr></table></div></figure>


<p>自動的にインストールが完了すると、作成されたVMはシャットダウン状態になります。</p>

<p>あとは virsh start でVMを起動して、rootユーザでキックスタートデフォルトのパスワード&#8221;cobbler&#8221;でログインが行えます。</p>

<h3>その他</h3>

<p>今回の例だと、作成されたVMのホスト名はlocalhost.localdomain, IPもDHCPから割り振られたものになりますが、適宜 cobbler の system 情報と、対応する kickstart ファイルのカスタマイズを行うことで、設定値の異なるVMを柔軟に作成出来るようになります。</p>

<p>Cobblerでの準備などは色々ありましたが、一度設定が済めばあとはKoanでVMをサクサク増やせるので、色々な検証にももってこいです。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DevOpsカンファレンスに行ってきた]]></title>
    <link href="http://blog.tnmt.info/2011/06/25/devopsjp/"/>
    <updated>2011-06-25T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/06/25/devopsjp</id>
    <content type="html"><![CDATA[<p><a href="http://partake.in/events/b5472f43-5bc0-42d0-9469-dc70d7d95b24">DevOpsカンファレンス</a>に行ってきました。
サイバーエージェントさんの会議室、スクリーン３面ってすごいなー。</p>

<p>広義の意味でのDevOpsの考え方がおよぶ範囲は開発者・運用者だけでなく、ヘルプデスク/顧客サポートやマネージャにまであるみたいですが、今回自分は狭義の意味での”開発者・運用者の壁を取り払っていくには”という視点で各社の取り組みを聞いてきました。</p>

<p>ひとまず今の自分は役割的にOpsで運用者の立ち位置なので、まずは他社の取り組みから興味があったところについて書くと例えば運用者には切っても切り離せないサービスの運用監視について</p>

<ul>
    <li>アウトソースしてたけど、自分達で見るために内製化した</li>
    <li>最初からずっと自分たちで見てるし、今もそう</li>
</ul>


<p>だとか、対応を取ってみても</p>

<ul>
    <li>アラート一次受けはDev側が行って必要な場合にOpsまでエスカレーション</li>
    <li>アラートは完全Ops側で処理</li>
</ul>


<p>だとか色々ケースがあるんだなーと。会社やサービスのスタートによっても結構違うもんなんですね。しかもケースによってはその体制を途中で変えてるところもある。変わるにしても続けて改善していくにも背景まで参考になりました。</p>

<p>アラートと言えばOpsな人達だと夜起こされたり、夜通し対応したりとかだれしも経験があると思うんですけどやっぱりキツいわけで、何かトラブルがあったら責められたり、成果も派手に大きく形で出てこない場合もあるしまあ大変なことも多々ありますね。</p>

<p>監視だけじゃなくて新規の案件や機能追加するにしたって、どうしても辛い状況だと誰かのせいだとか「◯◯がやってくれない」になりがちもあるけど、カンファレンス通してもっかい自分でも考えながら仕事していきたいなと感じたのは、パッと２つ。</p>

<ul>
    <li>状況を変えるのに、周りに必要な根拠や情報を出せているか</li>
    <li>きちんと説明や相談をして周りを巻き込めているか</li>
</ul>


<p>心構えもそうだし、実際の内容についても特に監視の最適化とか必要なリソースや負荷のモニタリングが出来ているかは他と比べてもまだまだだなと結構凹んだのも正直あったな。。検証やパフォーマンスチューニング、効率化・自動化など攻め的なところもガシガシやれてるとこはやってますもんね。
幸い自分の会社は人間関係的にギクシャクした関係も無く、話を出来る土壌・風土はすごくあると思うんですが、もう一歩先に進めるにやれることあるなーと思いました。</p>

<p>改めて思うのは、多かれ少なかれDevOpsで程度の差はあれまず壁はあるという前提にしても、サービスやビジネスを一緒にやっている以上、誰が悪い・誰が良い、偉い・偉くないというのに終始しちゃったらやっぱりハッピーじゃないですね（自分たちも、サービスを使ってくれてる人達にも）。
気合いや根性だけでも上手くいかないだろうし、プロな以上きっちり技術で解決していくということも忘れず、でも結局最後にはやっぱり精神論も多分にあったりしつつ、どう前向きに進めていくかを考えていきたいなと。</p>

<p>DevOpsの文化というところでも大事にしたいところ改めて載せとく。</p>

<ul>
<li>尊敬</li>
<li>信頼</li>
<li>失敗とうまくつきあう</li>
<li>責めない</li>
</ul>


<p>TwitterのTL見てて、皆の食いつきどころとか共感するところが一緒での連帯感とか、こうしていけるといいよねっていう空気が共有出来たのは大きな収穫だったし、やらないといけない課題も見つかってとても有意義なカンファレンスでした。</p>

<p>主催・登壇された皆様ありがとうございました。
懇親会でも沢山の人と話が出来てよかったです！</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[mysql5.1から5.5にアップグレード]]></title>
    <link href="http://blog.tnmt.info/2011/06/07/upgrade-mysql51-to-55/"/>
    <updated>2011-06-07T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/06/07/upgrade-mysql51-to-55</id>
    <content type="html"><![CDATA[<p>mysql5.1から5.5にアップグレード。
ものぐさなので、<a href="http://blog.famillecollet.com/pages/Config-en">remiレポ</a>使ってます。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum --enablerepo<span class="o">=</span>remi install mysql-server&lt;/kbd&gt;
</span></code></pre></td></tr></table></div></figure>


<p>さくっとアップグレード後起動しようとしても上がらないと思ったら、&#8221;default-character-set&#8221;がダメだとエラーに出てました。</p>

<p>my.cnfの[mysqld]セクションに&#8221;default-character-set=utf8&#8221;書かれてたら&#8221;character-set-server=utf8&#8221;に直して起動しなおし。</p>

<p>クライアント側の[mysql]セクションは&#8221;default-character-set=utf8&#8221;でOK。ややこし。</p>

<p>心なしか早くなった気がするし、なんとなく満足。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[libguestfsを使って停止中のvm(kvm)のネットワーク設定を直接書き換えてみる]]></title>
    <link href="http://blog.tnmt.info/2011/05/04/modify-vm-network-setting-directly-with-libguestfs/"/>
    <updated>2011-05-04T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/05/04/modify-vm-network-setting-directly-with-libguestfs</id>
    <content type="html"><![CDATA[<p>Re: 停止中のvm(kvm)のネットワーク設定を書き換える習作</p>

<p><a href="http://d.hatena.ne.jp/lamanotrama/">id:lamanotrama</a>が<a href="http://d.hatena.ne.jp/lamanotrama/20110412/1302637234">こんなエントリ</a>を書いていたので、勉強がてらpythonで書きなおしてみました。</p>

<p>virt-cloneした後のネットワーク設定をスクリプト一発でなんとかするヤツ。
試した環境はCentOS5.6です。</p>

<p>libvirtとlibguestfs使ってるので入ってない時はインストール</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum --enablerepo<span class="o">=</span>epel install libvirt-python python-libguestfs
</span></code></pre></td></tr></table></div></figure>


<p>lxml使ってるので入ってない時はインストール</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum install python-lxml
</span></code></pre></td></tr></table></div></figure>




<div><script src='https://gist.github.com/1366007.js?file='></script>
<noscript><pre><code>#!/bin/env python
import sys
import libvirt
import guestfs
from lxml import etree
 
if (len(sys.argv) != 4):
    sys.exit('Usage: # sudo python %s domain eth0 eth1' % sys.argv[0])
 
domain = sys.argv[1]
ip0 = sys.argv[2]
ip1 = sys.argv[3]
 
uri = 'qemu:///system'  #kvm
conn = libvirt.open(uri)
 
# check vm is exist
try:
    vm = conn.lookupByName(domain)
except libvirt.libvirtError:
    sys.exit('Domain not found: ' + domain)
 
# check vm is stoped
if (vm.isActive() != 0):
    sys.exit('Domain is active: ' + domain)
 
# get variables from xml
devices = etree.fromstring(vm.XMLDesc(0)).findall('devices')[0]
 
disk = devices.find('disk').find('source').attrib[&quot;file&quot;]  # disk image
 
mac0 = ''  # eth0 mac address
mac1 = ''  # eth1 mac address
for interface in devices.findall('interface'):
    bridge = interface.find('source').attrib[&quot;bridge&quot;]
    mac = interface.find('mac').attrib[&quot;address&quot;]
    if (bridge == 'br0'):
        mac0 = mac
    elif (bridge == 'virbr0'):
        mac1 = mac
 
# new configuration
ifcfg='''DEVICE=%s
BOOTPROTO=static
HWADDR=%s
IPADDR=%s
NETMASK=255.255.255.0
ONBOOT=yes'''
ifcfg0 = ifcfg % ('eth0', mac0, ip0)
ifcfg1 = ifcfg % ('eth1', mac1, ip1)
print 'New network configuration'
print '---------------------------'
print ifcfg0
print '---------------------------'
print ifcfg1
print '---------------------------'
 
# write variables to vm directly with libguestfs
guest = guestfs.GuestFS()
guest.add_drive(disk)
guest.launch()
guest.mount('/dev/mapper/VolGroup00-LogVol00', '/')
guest.write_file('/etc/sysconfig/network-scripts/ifcfg-eth0', ifcfg0, 0)
guest.write_file('/etc/sysconfig/network-scripts/ifcfg-eth1', ifcfg1, 0)
guest.sync()
guest.umount_all()
 
print 'Finish'</code></pre></noscript></div>


<p>やってることは</p>

<ul>
<li>domain(vm)が停止してるか確認 ((動いてるVMを直接libguestfsでいじると起動しなくなるみたいなので注意))</li>
<li>domainのxml定義からイメージファイルのパスとMACアドレスを抜き出す</li>
<li>libguestfsを使って停止中のvmの設定ファイルを直で上書く（指定したIPと先程のMACアドレス）</li>
</ul>


<p>外部通信用のbr0と、内部通信用のvirbr0の二つネットワークある環境前提。
libguestfs便利。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[いまさら聞けないrpmbuildことはじめ]]></title>
    <link href="http://blog.tnmt.info/2011/04/29/rpmbuild-for-beginner/"/>
    <updated>2011-04-29T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/04/29/rpmbuild-for-beginner</id>
    <content type="html"><![CDATA[<p>CentOSなどrpmを使っているシステムで、欲しいツールのrpmが見つからない、使いたいツールのバージョンが古いときに、rpmbuildを使って望みのrpmを作成することが出来ます。
ウェブを探せば色々と情報はあるんですが、ざっとスタートするときに必要な流れをまとめて書いてみることにしました。</p>

<h2>専用のビルド環境</h2>

<p>専用の環境を準備た方が吉です。centXbuildXXみたいな名前でVMを作ってます。</p>

<ul>
<li>cent4build32.tnmt.local</li>
<li>cent5build64.tnmt.local</li>
</ul>


<p>とか。
パッケージの依存性もあるので、あまりサードパーティのyumリポジトリなどを追加しないか、実環境と同じリポジトリのみ有効にするとよいです。複数サービスがあったらそれごとにVMを作るのもありかと思います。</p>

<h2>必要なパッケージ類のインストール</h2>

<p>rpmbulidに必要なパッケージ類をインストールします。パッケージ名はハイフンつきに注意。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum install rpm-build
</span></code></pre></td></tr></table></div></figure>


<p>あとビルド専用の環境なんで、その他もろもろのライブラリやツールも一緒に入れておくと、ビルド時に足りないというシーンも少なくなるのでgroup installしておくと吉です。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum groupinstall <span class="s2">&quot;Development Tools&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<h2>専用のビルドユーザ</h2>

<p>OfficialのHOW TOにもこう載ってます。</p>

<blockquote><p>Building RPMs should NEVER be done with the root user. It should ALWAYS be done with an unprivileged user. Building RPMs as root might damage your system. You have been warned.</p></blockquote>

<p>「rpmビルドはrootでやっちゃだめだぞ、システムにダメージ与える可能性あるからやるなよ、絶対やるなよ！」と書いてありますので、フリじゃなくてきちんとそれにしたがいましょう。</p>

<h3>ユーザ作成</h3>

<p>自分のアカウントでもいいですが、俺はrpmbuilderなユーザを作ってます。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo useradd rpmbuilder
</span></code></pre></td></tr></table></div></figure>


<h3>ユーザの環境設定</h3>

<p>作成したrpmbuilderにsu -して環境を設定します。必要なのはビルドに使用するディレクトリと、rpmbuildをコントロールする.rpmmacrosです。</p>

<h4>ディレクトリ</h4>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>mkdir -p ~/rpmbuild/<span class="o">{</span>BUILD,RPMS,SOURCES,SPECS,SRPMS<span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>内訳は</p>

<ul>
<li>BUILD: ビルド時に使われる一時ディレクトリ</li>
<li>RPMS: ビルドされたrpmが格納されるディレクトリ、各アーキテクチャごとのサブフォルダに分かれる</li>
<li>SOURCES: ビルドのもとになるソースやパッチを配置するディレクトリ</li>
<li>SPECS: specファイルを配置するディレクトリ</li>
<li>SRPMS: ビルドした際にsrc.rpmが出来るようにしていればそれが格納されるディレクトリ</li>
</ul>


<h4>.rpmmacros</h4>

<p>rpmbuild時に参照される設定一覧です。さきほど作成したrpmbuild以下を使用するために、以下で新規作成を行います。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="nb">echo</span> <span class="s1">&#39;%_topdir %(echo $HOME)/rpmbuild&#39;</span> &gt; ~/.rpmmacros
</span></code></pre></td></tr></table></div></figure>


<p>俺はあとdebugパッケージを作らないような設定とsmpの設定を入れてます。smpのj3はmakeの引数になる感じなので適宜自分の環境に合わせてですね。</p>

<figure class='code'><figcaption><span>~/.rpmmacros </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=''><span class='line'>%_topdir      %(echo $HOME)/rpmbuild
</span><span class='line'>%debug_package %{nil}
</span><span class='line'>%_smp_mflags  -j3</span></code></pre></td></tr></table></div></figure>


<p>以上2つの作業はepelリポジトリにあるrpmdevtoolsの中のrpmdev-setuptreeで簡単に設定可能です。
参考： <a href="http://www.sssg.org/blogs/naoya/archives/1309">rpmdevtools | Carpe Diem</a></p>

<h2>あとはビルド</h2>

<p>よくやる2通りを書いておきます。</p>

<h4>src.rpmをそのままビルド</h4>

<p>バイナリが提供されていないパッケージが欲しかったり、少しバージョンが古かったりな時に使えます。
お目当てのsrc.rpmをダウンロードします。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="nb">cd</span> ~/rpmbuild/SRPMS/
</span><span class='line'>wget http://foo.var.com/foovar-1.0.src.rpm
</span></code></pre></td></tr></table></div></figure>


<p>rpmbuildします。src.rpm直接指定の時は &#8211;build オプションです。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>rpmbuild --rebulid foovar-1.0.src.rpm
</span></code></pre></td></tr></table></div></figure>


<h4>ひと手間加えてビルド</h4>

<p>既存のパッケージにパッチをあてたり、configureオプションをいじったりするときに使う方法。yum-utilsパッケージ内のyumdownloaderが便利なので合わせて紹介します。入ってない場合は</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum install yum-utils
</span></code></pre></td></tr></table></div></figure>


<p>ソースパッケージ取得</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="nb">cd</span> ~/rpmbuild/SRPMS/
</span><span class='line'>yumdownloader --source foovar
</span></code></pre></td></tr></table></div></figure>


<p>src.rpmインストール</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>rpm -ivh foovar-1.0.src.rpm
</span></code></pre></td></tr></table></div></figure>


<p>これで ~/rpmbuild/SOURCES/ 以下にソース、パッチ類と、 ~/rpmbuild/SPECS/ 以下にrpm作成のもととなる パッケージ名.spec (今回はfoovar.spec) が配置されます。
このfoovar.specに色々と変更を加えます。</p>

<p>パッチあてる場合</p>

<ul>
<li>~/rpmbuild/SOURCES/ 以下にあてたいパッチを作成する。例： buzz.patch</li></li>
<li>~/rpmbuild/SPECS/foovar.specのpatchセクションに buzz.patch を当てる設定を書く</li>

<ol>
<li>PatchXXでかぶらないナンバリングで PatchXX: buzz.patch 追記</li></li>
<li>同じナンバリングで%patchXX -p1 -b .foovar (foovarはバックアップ識別名で任意)</li></li>
</ol>
</li>
</ul>


<p>configureオプション変える場合</p>

<ul>
<li>~/rpmbuild/SOURCES/foovar.spec のconfigureオプションを変更</li>
</ul>


<p>こんな風にして修正したspecファイルをビルドします。修正を加えたspecファイルを含むsrc.rpmも同時に作成する -ba オプションで指定します。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>rpmbuild -ba ~/rpmbuild/SPECS/foovar.spec
</span></code></pre></td></tr></table></div></figure>


<h2>この後は</h2>

<p>ビルドしたファイルは ~/rpmbuild/RPMS/i386/ や ~/rpmbuild/RPMS/x86_64/ などビルドしたマシンのアーキテクチャごとに配置されます。これらを独自yumリポジトリを作成して登録しておくと、各サーバーへのインストールも楽ちんです。</p>

<p>独自yumリポジトリ作成については、以下のエントリが参考になります。
<a href="http://www.sssg.org/blogs/naoya/archives/1831">RE: 独自/ミラー yum リポジトリを作ろう | Carpe Diem</a>
Cobbler便利です。</p>

<h2>まとめ</h2>

<p>rpmbuildの始め方についてのざっとの流れでした。オレオレパッケージはあまり作らないに越したことはないですが、ソースインストールよりも管理のミスも減りますし、バージョン管理や展開が早く行えるメリットもあるので、今後も色々とやり方の効率化は探っていきたいと思います。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MCollectiveのインストールと動作確認]]></title>
    <link href="http://blog.tnmt.info/2011/02/26/mcollective-install/"/>
    <updated>2011-02-26T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/02/26/mcollective-install</id>
    <content type="html"><![CDATA[<p><a href="http://www.puppetlabs.com/mcollective/">MCollective</a> - Marionette Collective AKA MCollective - が気になったので試してみました。</p>

<p>mcollectiveは<a href="http://www.puppetlabs.com/puppet/introduction/">Puppet</a> を作っている<a href="http://www.puppetlabs.com/">puppet labs</a> のプロダクトです。ruby製。</p>

<p>日本語で紹介されている<a href="http://d.hatena.ne.jp/interu/20101206/1291639210">こちらのエントリ</a>では、以下のように分かりやすく解説がされていました。</p>

<blockquote><p>一言で言うと、&#8221;定例作業を効率的に行うのがpuppet/chefの役割&#8221;で、&#8221;MCollectiveは非定例作業を効率的に行う&#8221;ことのできるツールです。</p></blockquote>

<p>本家のサイトの紹介を見ると、&#8221;複数のサーバー群に対して任意のオペレーションを並列実行するためのフレームワーク&#8221;とされています。同じような作業を行う為のフレームワーク・ツールとしては他にも<a href="https://fedorahosted.org/func/">Func</a>, <a href="http://www.capify.org/">Capistrano</a>, <a href="http://fabfile.org/">Fabric</a>が同じく紹介されています。（最後の知らない。）Capistranoはデプロイツールとして有名ですね。</p>

<p>他のツールと比べて、MCollectiveのポイントは以下の2つだと感じました。</p>

<ul>
<li>サーバー群に対して設置場所（たとえばDCや、国とかも）を意識せず</li>
<li>シンプル且つスピーディーにオペレーションを行う</li>
</ul>


<p>あるクライアントから複数サーバー群に対して任意の作業を行うときに、普通であれば</p>

<ul>
<li>クライアント -> サーバー群で 1:m</li>
</ul>


<p>であったのが、MCollectiveは</p>

<ul>
<li>クライアント -> 作業を管理する並列キューシステム -> サーバー群で 1:n:m</li>
</ul>


<p>と一枚噛んでます。この真ん中の並列キューシステムが上記の2つのポイントの肝になっているという感じでしょうか。
より詳細なアーキテクチャの解説がされている、本家のスライドは<a href="http://www.slideshare.net/mcollective/mcollective-message-flow-terminology-and-components" target="_blank">こちら</a></p>

<p>何はともあれ動かしてみたいと思います。</p>

<p>各要素に必要なパッケージは以下のようになっています。</p>

<ul>
<li>クライアント: mcollective-client</li>
<li>作業を管理するキューシステム: activemq</li>
<li>サーバー群: mcollective</li>
</ul>


<p>今回は以下のホスト構成にイントールしました。
全台 CentOS 5.5 x86_64, ほか依存するとこだとrubyだけど、ruby-1.8.5-5.el5_4.8, rubygems-1.3.1-1.el5, あとついでに facter-1.5.8-1.el5</p>

<ul>
<li>collective-client, activemq

<ul>
<li>manage01.tnmt.local</li>
</ul>
</li>
<li>collective

<ul>
<li>test01.tnmt.local</li>
<li>test02.tnmt.local</li>
</ul>
</li>
</ul>


<h2>共通 @ manage01, test01, test02</h2>

<p>事前に必要なツールのインストール。</p>

<p>mcollectiveがrubyのメッセージキュークライアントを使ってるのでそちらを</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum -y --enablerepo<span class="o">=</span>epel install rubygem-stomp rubygems
</span></code></pre></td></tr></table></div></figure>


<p>mcollectiveの共通コンポーネント</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>wget  http://puppetlabs.com/downloads/mcollective/mcollective-common-1.0.0-2.el5.noarch.rpm&lt;/kbd&gt;
</span><span class='line'>sudo rpm -Uvh mcollective-common-1.0.0-2.el5.noarch.rpm
</span></code></pre></td></tr></table></div></figure>


<h2>mcollective @ test001, test002</h2>

<h3>mcollective インストール</h3>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>wget  http://puppetlabs.com/downloads/mcollective/mcollective-1.0.0-2.el5.noarch.rpm&lt;/kbd&gt;
</span><span class='line'>sudo rpm -Uvh mcollective-1.0.0-2.el5.noarch.rpm
</span></code></pre></td></tr></table></div></figure>


<h3>設定</h3>

<p>/etc/mcollective/server.cfg が設定ファイルになります。 plugin.stomp.host に activemq が動いてるサーバーを指定ですね。パスワードは伏せてありますが変更してあります、あとでactivemqの設定にも関わってきます。</p>

<figure class='code'><figcaption><span>/etc/mcollective/server.cfg diff  </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>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gd">--- /etc/mcollective/server.cfg.dist    2010-12-12 02:01:11.000000000 +0900</span>
</span><span class='line'><span class="gi">+++ /etc/mcollective/server.cfg 2011-02-26 14:14:10.000000000 +0900</span>
</span><span class='line'><span class="gu">@@ -9,10 +9,10 @@</span>
</span><span class='line'> plugin.psk = unset
</span><span class='line'>
</span><span class='line'> connector = stomp
</span><span class='line'><span class="gd">-plugin.stomp.host = stomp.example.com</span>
</span><span class='line'><span class="gi">+plugin.stomp.host = manage01.tnmt.local</span>
</span><span class='line'> plugin.stomp.port = 6163
</span><span class='line'> plugin.stomp.user = mcollective
</span><span class='line'><span class="gd">-plugin.stomp.password = marionette</span>
</span><span class='line'><span class="gi">+plugin.stomp.password = XXXXXXXXXXXXXXXX</span>
</span><span class='line'>
</span><span class='line'> # Facts
</span><span class='line'> factsource = yaml
</span></code></pre></td></tr></table></div></figure>


<h3>サービススタート</h3>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo /etc/init.d/mcollective start
</span></code></pre></td></tr></table></div></figure>


<h2>mcollective-client @ manage01</h2>

<h3>インストール</h3>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>wget  http://puppetlabs.com/downloads/mcollective/mcollective-client-1.0.0-2.el5.noarch.rpm
</span><span class='line'>sudo rpm -Uvh mcollective-client-1.0.0-2.el5.noarch.rpm
</span></code></pre></td></tr></table></div></figure>


<h3>設定</h3>

<p>/etc/mcollective/client.cfg を編集。箇所は先ほどと同じく activemq が動くホストを指定。</p>

<figure class='code'><figcaption><span>/etc/mcollective/client.cfg diff  </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>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gd">--- /etc/mcollective/client.cfg.dist    2010-12-12 02:01:11.000000000 +0900</span>
</span><span class='line'><span class="gi">+++ /etc/mcollective/client.cfg 2011-02-26 14:12:06.000000000 +0900</span>
</span><span class='line'><span class="gu">@@ -8,10 +8,10 @@</span>
</span><span class='line'> plugin.psk = unset
</span><span class='line'>
</span><span class='line'> connector = stomp
</span><span class='line'><span class="gd">-plugin.stomp.host = stomp.example.com</span>
</span><span class='line'><span class="gi">+plugin.stomp.host = manage01.tnmt.local</span>
</span><span class='line'> plugin.stomp.port = 6163
</span><span class='line'> plugin.stomp.user = mcollective
</span><span class='line'><span class="gd">-plugin.stomp.password = marionette</span>
</span><span class='line'><span class="gi">+plugin.stomp.password = XXXXXXXXXXXXXXXX</span>
</span><span class='line'>
</span><span class='line'> # Facts
</span><span class='line'> factsource = yaml
</span></code></pre></td></tr></table></div></figure>


<h2>activemq @ manage01</h2>

<p><a href="http://activemq.apache.org/">ActiveMQ</a>はJMS実装のプロダクトです。こいつがmcollective, mcollective-client双方のメッセージのやりとりを介してくれます。JMSの名の通り中身はJava</p>

<h3>インストール</h3>

<p>Javaインストール</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum -y install java-1.6.0-openjdk
</span></code></pre></td></tr></table></div></figure>


<p>puppetlabsから提供されてるパッケージをまとめてインストール</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="k">for </span>package in tanukiwrapper-3.2.3-1jpp.x86_64.rpm  activemq-5.4.0-2.el5.noarch.rpm activemq-info-provider-5.4.0-2.el5.noarch.rpm
</span><span class='line'><span class="k">do </span>
</span><span class='line'>sudo rpm -Uvh http://puppetlabs.com/downloads/mcollective/<span class="nv">$package</span>
</span><span class='line'><span class="k">done</span>
</span></code></pre></td></tr></table></div></figure>


<h3>設定</h3>

<p>mcollective用の設定を読むように /etc/activemq/activemq-wrapper.conf 編集</p>

<figure class='code'><figcaption><span>/etc/activemq/activemq-wrapper.conf diff  </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>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gd">--- /etc/activemq/activemq-wrapper.conf.dist    2010-08-18 05:48:16.000000000 +0900</span>
</span><span class='line'><span class="gi">+++ /etc/activemq/activemq-wrapper.conf 2011-01-26 13:23:01.000000000 +0900</span>
</span><span class='line'><span class="gu">@@ -82,7 +82,7 @@</span>
</span><span class='line'> # Application parameters. activemq.xml will be loaded from the config directory
</span><span class='line'> wrapper.app.parameter.1=org.apache.activemq.console.Main
</span><span class='line'> wrapper.app.parameter.2=start
</span><span class='line'><span class="gd">-wrapper.app.parameter.3-xbean:activemq.xml</span>
</span><span class='line'><span class="gi">+wrapper.app.parameter.3=xbean:mcollective.xml</span>
</span><span class='line'>
</span><span class='line'> #********************************************************************
</span><span class='line'> # Wrapper Logging Properties
</span></code></pre></td></tr></table></div></figure>


<p>mcollective用の設定 /etc/activemq/mcollective.xml 作成。simpleAuthenticationPluginのauthenticationUserという項目がありますが、ここには mcollective, mcollective-client の設定で変更したパスワードが入ります。</p>

<figure class='code'><figcaption><span>/etc/activemq/mcollective.xml  </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>
</pre></td><td class='code'><pre><code class='xml'><span class='line'><span class="nt">&lt;beans</span>
</span><span class='line'>    <span class="na">xmlns=</span><span class="s">&quot;http://www.springframework.org/schema/beans&quot;</span>
</span><span class='line'>    <span class="na">xmlns:amq=</span><span class="s">&quot;http://activemq.apache.org/schema/core&quot;</span>
</span><span class='line'>    <span class="na">xmlns:xsi=</span><span class="s">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span>
</span><span class='line'>    <span class="na">xsi:schemaLocation=</span><span class="s">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span>
</span><span class='line'><span class="s">    http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd</span>
</span><span class='line'><span class="s">    http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;broker</span> <span class="na">xmlns=</span><span class="s">&quot;http://activemq.apache.org/schema/core&quot;</span> <span class="na">brokerName=</span><span class="s">&quot;localhost&quot;</span> <span class="na">useJmx=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>        <span class="nt">&lt;plugins&gt;</span>
</span><span class='line'>            <span class="nt">&lt;authorizationPlugin&gt;</span>
</span><span class='line'>                <span class="nt">&lt;map&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;authorizationMap&gt;</span>
</span><span class='line'>                        <span class="nt">&lt;authorizationEntries&gt;</span>
</span><span class='line'>                            <span class="nt">&lt;authorizationEntry</span> <span class="na">topic=</span><span class="s">&quot;&lt;span id=&quot;</span><span class="err">searchword&quot;</span><span class="nt">&gt;</span>mcollective<span class="nt">&lt;/span&gt;</span>.&gt;&quot; write=&quot;systemusers&quot; read=&quot;systemusers&quot; admin=&quot;systemusers&quot; /&gt;
</span><span class='line'>                            <span class="nt">&lt;authorizationEntry</span> <span class="na">topic=</span><span class="s">&quot;ActiveMQ.Advisory.&gt;&quot;</span> <span class="na">read=</span><span class="s">&quot;everyone,all&quot;</span> <span class="na">write=</span><span class="s">&quot;everyone,all&quot;</span> <span class="na">admin=</span><span class="s">&quot;everyone,all&quot;</span><span class="nt">/&gt;</span>
</span><span class='line'>                        <span class="nt">&lt;/authorizationEntries&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;/authorizationMap&gt;</span>
</span><span class='line'>                <span class="nt">&lt;/map&gt;</span>
</span><span class='line'>            <span class="nt">&lt;/authorizationPlugin&gt;</span>
</span><span class='line'>
</span><span class='line'>            <span class="nt">&lt;simpleAuthenticationPlugin&gt;</span>
</span><span class='line'>                <span class="nt">&lt;users&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;authenticationUser</span> <span class="na">username=</span><span class="s">&quot;mcollective&quot;</span> <span class="na">password=</span><span class="s">&quot;XXXXXXXXXXXXXXXX&quot;</span> <span class="na">groups=</span><span class="s">&quot;systemusers,everyone&quot;</span><span class="nt">/&gt;</span>
</span><span class='line'>                <span class="nt">&lt;/users&gt;</span>
</span><span class='line'>            <span class="nt">&lt;/simpleAuthenticationPlugin&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/plugins&gt;</span>
</span><span class='line'>
</span><span class='line'>        <span class="nt">&lt;transportConnectors&gt;</span>
</span><span class='line'>            <span class="nt">&lt;transportConnector</span> <span class="na">name=</span><span class="s">&quot;openwire&quot;</span> <span class="na">uri=</span><span class="s">&quot;tcp://0.0.0.0:6166&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>            <span class="nt">&lt;transportConnector</span> <span class="na">name=</span><span class="s">&quot;stomp&quot;</span>   <span class="na">uri=</span><span class="s">&quot;stomp://0.0.0.0:6163&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/transportConnectors&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/broker&gt;</span>
</span><span class='line'><span class="nt">&lt;/beans&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<h3>サービススタート</h3>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo /etc/init.d/activemq start
</span></code></pre></td></tr></table></div></figure>


<p>起動したかどうか、/var/log/activemq/activemq.logあたり見るとよいかと思います。
これで試す準備ができました。</p>

<h2>動作確認</h2>

<p>ひとまず動作確認ということで、mcollectiveがインストールされてホストをリストしてみます。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>mc-find-hosts
</span></code></pre></td></tr></table></div></figure>


<pre><code>test01.tnmt.local
test02.tnmt.local
</code></pre>

<p>続いて全台にping打ってみる</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>mc-ping
</span></code></pre></td></tr></table></div></figure>


<pre><code>test01.tnmt.local                        time=63.35 ms
test02.tnmt.local                        time=101.06 ms

---- ping statistics ----
2 replies max: 101.06 min: 63.35 avg: 82.21
</code></pre>

<p>返ってきますね。対象のホストの状況を確認してみる。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>mc-inventory test01.tnmt.local
</span></code></pre></td></tr></table></div></figure>


<pre><code>Inventory for test01.tnmt.local:

   Server Statistics:
                      Version: 1.0.0
                   Start Time: Sat Feb 26 13:38:54 +0900 2011
                  Config File: /etc/mcollective/server.cfg
                   Process ID: 24564
               Total Messages: 3
      Messages Passed Filters: 3
            Messages Filtered: 0
                 Replies Sent: 2
         Total Processor Time: 0.06 seconds
                  System Time: 0.19 seconds

   Agents:
      discovery       rpcutil

   Configuration Management Classes:
      base                           test01.tnmt.local


   Facts:
      mcollective =&gt; 1
</code></pre>

<p>インストールは完了したので、もう少し色々と触ってみます。</p>

<ul>
<li>プラグイン機構で行えるオペレーション追加</li>
<li>puppetのfacterを共有して特定条件ホストでのオペレーション</li>
</ul>


<p>等々</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[logtool使ってみた (iptablesのログを見るのに便利だった)]]></title>
    <link href="http://blog.tnmt.info/2011/01/24/logtool/"/>
    <updated>2011-01-24T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2011/01/24/logtool</id>
    <content type="html"><![CDATA[<p><a href="http://gihyo.jp/magazine/SD/archive/2011/201102">Software Design 2011年2月号</a> の第一特集内でちょろっと紹介されてた、<a href="http://xjack.org/logtool/">Logtool</a> を触ってみました。</p>

<p>man logtool すると &#8220;logtool - parse and filter syslog files&#8221; と記載されている通り、syslog形式やmultilog形式のログ出力をパース、フィルタしてくれるプログラムです。</p>

<p>安定版は 1.2.x tree, 1.2.8 (2005年リリースだけど&#8230;) をダウンロードして、RPMパッケージングしてインストールしました。<br/>
同梱されていたspecファイルちょっといじる必要ありました。2005年だけあってspecファイルのフォーマットが若干古い。<br/>
余談ですが、logtool作者がRedHatのライセンスやポリシーに怒ってシステム全部Debianにしたよ！RPMなんかメンテしねーよ！<br/>
って書いてあった。何があったんだろ。</p>

<p>使い方はフィルタとして、catなどで開いた標準出力にパイプで渡してやります。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo tail -100 /var/log/messages | logtool | less
</span></code></pre></td></tr></table></div></figure>


<p>そっけない出力に色がついてかっこよくなります、モテますかね。</p>

<p>色がつくだけだと微妙なんですが、Logtoolのサイトにのってる1.2.0の機能の中の</p>

<ul>
<li>Now can do really cool things with snort and iptables syslog entries (ip->hostname resolution, special colors, and more!)</li>
</ul>


<p>が便利でした。
iptablesを使っててたとえばRejectしたログをとってるとき、通常のログだと</p>

<pre><code>Jan 24 02:49:33 test01 kernel: Rejected_At_Last!! : IN=eth0 OUT= MAC=00:0e:0c:9c:15:ae:XX:XX:db:d3:34:40:08:00 SRC=201.91.255.194 DST=XXX.XXX.XXX.XXX LEN=78 TOS=0x00 PREC=0x00 TTL=48 ID=57854 DF PROTO=UDP SPT=137 DPT=137 LEN=58
</code></pre>

<p>な感じで読みにくいのが、logtoolを通すと</p>

<pre><code><FONT color=#CCCCCC>Jan 24 02:49:33</FONT><FONT color=#00F0F0> test01</FONT><FONT color=#CCCCCC> iptables:</FONT> <FONT color=#BB0000>-j LOG: kernel: Rejected_At_Last!! : </FONT> </FONT><FONT color=#606060>{</FONT><FONT color=#00F0F0>UDP</FONT><FONT color=#606060>}</FONT> <FONT color=#FFFFFF>201-91-255-194.customer.tdatabrasil.net.br</FONT><FONT color=#606060>(</FONT><FONT color=#CCCCCC>201.91.255.194</FONT><FONT color=#606060>)</FONT></FONT><FONT color=#606060>:</FONT><FONT color=#FFFFFF>137 <FONT color=#606060>-&gt;</FONT> <FONT color=#FFFFFF>test01.tnmt.local</FONT><FONT color=#606060>(</FONT><FONT color=#CCCCCC>XXX.XXX.XXX.XXX</FONT><FONT color=#606060>)</FONT></FONT>:<FONT color=#FFFFFF>137</FONT></FONT></code></pre>


<p>と、カラーリングの他にログのIPからホスト名を逆引きしてくれたりします。（ホスト名逆引きは -n オプションで実行しなくも出来ます）</p>

<p>出力形式も [ ANSI | ASCII | CSV | HTML | RAW ] が指定可能です。
例であげた↑の色分けしたログも -o HTML で出力したものを利用しました。</p>

<p>使用用途として、manコマンドに乗ってたものをいくつか紹介しておきます。</p>

<ul>
<li>リアルタイムにログを見る</li>
</ul>


<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>tail -f /var/log/messages | logtool -o ANSI -b
</span></code></pre></td></tr></table></div></figure>


<ul>
<li>HTMLレポート</li>
</ul>


<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>cat /var/log/messages | logtool -o HTML &gt; /home/httpd/html/logs/messages.html
</span></code></pre></td></tr></table></div></figure>


<ul>
<li>メールでレポート</li>
</ul>


<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>retail /var/log/messages | logtool -o ASCII | mail -s <span class="s2">&quot;Daily report&quot;</span> someuser@somedomain.ext
</span></code></pre></td></tr></table></div></figure>


<p>logtool.conf という設定ファイルがあるのでデフォルトの挙動も変更出来たりするみたいです。
小さいプログラムなので、入れておくとちょっとしたときに便利に使えそうだなと思いました。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[puppet 2.6 インストール（アップグレード）＆ファーストインプレッション]]></title>
    <link href="http://blog.tnmt.info/2010/11/23/puppet-2-6/"/>
    <updated>2010-11-23T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/11/23/puppet-2-6</id>
    <content type="html"><![CDATA[<p>前に @mikeda さんが<a href="http://twitter.com/mikeda/status/3775413331435520" target="_blank">こう</a>言ってたので、とりあえず自宅環境の0.25を2.6にアップグレードしてみることにしました。</p>

<h3>アップグレード</h3>

<p>あらかじめ CentOS 5.5 x86_64 で puppet 0.25.5 が稼働している環境になります。新規にインストールする場合はもう少し手順が多いかもしれません。0.25 自体は epel リポジトリから入れてるので、epel が入っていれば、必要なパッケージは全部入ると思います。</p>

<h4>puppet 2.6系のyumリポジトリ登録</h4>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo wget http://tmz.fedorapeople.org/repo/puppet/epel/puppet.repo -P /etc/yum.repos.d
</span></code></pre></td></tr></table></div></figure>


<h4>インストール</h4>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum install puppet puppet-server
</span></code></pre></td></tr></table></div></figure>


<p>簡単。今日時点でバージョンは 2.6.3 でした。</p>

<h4>puppet.conf修正</h4>

<p>そのままpuppetmasterdを起動しなおして、puppetdで接続も出来たんですが、以下のWarningが出ます。</p>

<pre><code>warning: You have configuration parameter $factsync specified in [puppetd], which is a deprecated section. I'm assuming you meant [agent]
warning: You have configuration parameter $ssldir specified in [puppetd], which is a deprecated section. I'm assuming you meant [agent]
warning: You have configuration parameter $factsource specified in [puppetd], which is a deprecated section. I'm assuming you meant [agent]
warning: You have configuration parameter $templatedir specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: You have configuration parameter $ssldir specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: You have configuration parameter $modulepath specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: You have configuration parameter $manifestdir specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: Fact syncing is deprecated as of 0.25 -- use 'pluginsync' instead
</code></pre>

<p>エラーにはなりませんでした。/etc/puppet/puppet.conf で [puppetmasterd] となってる記述を [master] に、 [puppetd] となってる記述を [agent] にしてやると大分 Warning が減ります。長い記載が短くなっていいですね。<br/>
facterの部分は公式の<a href="http://projects.puppetlabs.com/projects/1/wiki/Adding_Facts">Wiki</a>見ても、最下部にpluginアプローチに変わると記載があります。pluginってあまり使ったことないなー。。今回はスルー。</p>

<h4>puppet実行スタイル</h4>

<p><a href="http://www.puppetlabs.com/2dot6/">2.6のリリースノート</a>見ると、沢山名前あって分かりにくかった実行バイナリが puppet コマンドを起点にシンプルで分かりやすくなっています。</p>

<ul>
<li> puppetmasterd -> puppet master</li>
<li> puppetd -> puppet agent puppet -> puppet apply</li>
<li> puppetca -> puppet cert</li>
<li> ralsh -> puppet resource</li>
<li> puppetrun -> puppet kick</li>
<li> puppetqd -> puppet queue</li>
<li> filebucket -> puppet filebucket</li>
<li> puppetdoc -> puppet doc</li>
<li> pi –> puppet</li>
</ul>


<p>もちろん、0.25 以前と同じ名前のバイナリもそのまま使えるので、以前のスタイルに慣れてる場合はそのままで、2.6から使い始める場合は新しいスタイルで覚えるといいんじゃないかなと思いました。<br/>
たとえば、puppet のクライアントで一度きりサーバーに接続して変更を適用するコマンドで下記があったとき</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo puppetd --server manage01.tnmt.local -v -l console --onetime --ignorecache
</span></code></pre></td></tr></table></div></figure>


<p>2.6 以降はこうでもOKになります。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo puppet agent puppet  --no-daemonize --server manage01.tnmt.local -v -l console --onetime --ignorecache
</span></code></pre></td></tr></table></div></figure>


<h3>まとめと所感</h3>

<ul>
<li>バージョンアップの手間はそれほど無い</li>
</ul>


<p>yum 一発なんでお手軽でした。ただ、puppet サーバー、クライアントともにバージョンは両方一緒にあげた方がいいとは思います。0.24 〜 0.25 にあげたときにハマりました。俺じゃないけど。<br/>
既存の環境へのインパクトは少ないです。依存でrubyあげろとか言われたらrails使ってる環境なんかだとキツいなーとは思ってました。</p>

<ul>
<li>前のバージョンとの互換性はほぼ問題なさそう</li>
</ul>


<p>設定ファイルは大きな変更なく使い回し出来ました、変更もWarningレベル。自宅の環境はそれほどmanifestが沢山あったりするわけでもないですが、ここもエラーは出てないです。</p>

<ul>
<li>アップグレード後の期待とか</li>
</ul>


<p>2.6からの一番の目玉はmanifestなどをPure Ruby DSLで書けるようになるというところだと思います。<a href="http://www.puppetlabs.com/2dot6/">2.6のリリースノート</a>にもあるとおり、旧来のDSLはターゲットはシステム管理者に学習コスト少なく運用出来るように、制約は多いですが割とシンプルではありました。今回の機能追加はRubyを知っているエンジニア向けに提供される選択肢として、今後サーバーエンジニアとアプリエンジニアが協業してメンテしていくなんてことも出来やすくなるかと思います。これってある意味<a href="http://mizzy.org/blog/2010/03/25/DevOps/">DevOps</a>!!
実際は今はノウハウとかmanifest資産もたまってきてるし、現行のDSLで特に不満も無いので、便利な書き方があったら取り入れてくのが一番効果が上がるかなと感じました。<br/>
自由度高くなる→黒魔術的な記法が増える→見通し悪くてメンテしづらくなる。なんてのには気をつけたいですね。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HP ML110 G5 その2 : CPU換装とメモリ増設]]></title>
    <link href="http://blog.tnmt.info/2010/11/15/ml110-g5-upgrade-cpu-memory/"/>
    <updated>2010-11-15T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/11/15/ml110-g5-upgrade-cpu-memory</id>
    <content type="html"><![CDATA[<p>先日購入したML110 G5 をアップグレードしました。
久々に秋葉原でパーツを買い足し。色々歩いて安いとこ探してたんですが、最終的にじゃんぱらの中古パーツ。</p>

<ul>
<li>Celeron Dual-Core E3300 (中古) : 3680円</li>
<li>PC2-6400 (DDR2-800) Non-ECC 4GB (2GB * 2) : 5980円</li>
</ul>


<p>あとセラミックグリスも。
付け替えは写真で振り返ってみます。</p>

<ul>
<li>CPU換装</li>
<ul>
<li>ヒートシンクが見える</li>
<img src="http://static.tnmt.info/images/2010/11/IMG_2252-300x224.jpg" alt="ヒートシンク" title="IMG_2252" width="300" height="224" class="alignnone size-medium wp-image-607" />
<li>ヒートシンク外す</li>
4つ角にネジがあるので、それを外す。<br/>
<img src="http://static.tnmt.info/images/2010/11/IMG_2253-300x224.jpg" alt="CPUが見える" title="IMG_2253" width="300" height="224" class="alignnone size-medium wp-image-608" />
<li>CPU付け替える</li>
<img src="http://static.tnmt.info/images/2010/11/IMG_2254-300x224.jpg" alt="CPU付け替える1" title="IMG_2254" width="300" height="224" class="alignnone size-medium wp-image-609" /><br/>
<img src="http://static.tnmt.info/images/2010/11/IMG_2255-300x224.jpg" alt="CPU付け替える2" title="IMG_2255" width="300" height="224" class="alignnone size-medium wp-image-610" /><br/>
<img src="http://static.tnmt.info/images/2010/11/IMG_2256-300x224.jpg" alt="CPU付け替える3" title="IMG_2256" width="300" height="224" class="alignnone size-medium wp-image-611" /><br/>
CPU付け替えたらグリス塗っときます。
<li>ヒートシンク付けなおす</li>
<img src="http://static.tnmt.info/images/2010/11/IMG_2258-300x224.jpg" alt="ヒートシンク付けなおす" title="IMG_2258" width="300" height="224" class="alignnone size-medium wp-image-613" /><br/>
こちらも前についてたグリスを奇麗に拭き取ったら、新しくグリスを塗り直し。
</ul>
<li>メモリ追加する</li>
<img src="http://static.tnmt.info/images/2010/11/IMG_2259-300x224.jpg" alt="メモリ追加する" title="IMG_2259" width="300" height="224" class="alignnone size-medium wp-image-614" /><br/>
ヒートシンク外して見通しが良くなったついでに付け替えました。
</ul>


<p>電源入れたらちゃんと認識してました。CPUは&#8221;Intel(R) Celeron(R) CP..&#8221;、メモリは4096MBあります。<br/>
<img src="http://static.tnmt.info/images/2010/11/IMG_2260-300x224.jpg" alt="CPUとメモリを認識してる" title="IMG_2260" width="300" height="224" class="alignnone size-medium wp-image-615" /><br/>
CPUもちゃんとIntel-VT対応してますね。<br/>
<img src="http://static.tnmt.info/images/2010/11/IMG_2263-300x224.jpg" alt="Intel-VT対応してる" title="IMG_2263" width="300" height="224" class="alignnone size-medium wp-image-618" /></p>

<p>出来上がり。
本体＋追加パーツトータル2万円弱ですが、まずまずのVM母艦機になったかなと思います。
メモリは様子見で4GBにしておいたけど、あと4GBいけるのでどっかタイミング見て追加出来ればいいかな。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fedora 13 → Fedora 14 へ preupgrade-cli でアップグレード (前より簡単になってた)]]></title>
    <link href="http://blog.tnmt.info/2010/11/06/upgrade-fedora-13-to-14-using-preupgrade/"/>
    <updated>2010-11-06T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/11/06/upgrade-fedora-13-to-14-using-preupgrade</id>
    <content type="html"><![CDATA[<p>皆さん、Fedora 14 が出ましたね。
ということで、自分の作業環境もアップグレードしてみることにしました。</p>

<p>Fedora 10 -> Fedora 12 にあげた手順についても前に<a href="http://blog.tnmt.info/2009/12/14/fedora-upgrade10-to-12/">書いたこと</a>があったので、今回もそれに沿ってやってみます。</p>

<p>preupgradeは導入済み前提、早速試してみます。</p>

<h3>preupgrade-cli 実行</h3>

<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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo <span class="nv">LANG</span><span class="o">=</span>C preupgrade-cli <span class="s2">&quot;Fedora 14 (Laughlin)&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<pre><code>Loaded plugins: blacklist, whiteout
No plugin match for: rpm-warm-cache
No plugin match for: remove-with-leaves
No plugin match for: auto-update-debuginfo
No plugin match for: refresh-packagekit
No plugin match for: presto
preupgrade-main (mirrorlist)
  url: http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-14&amp;arch=$basearch
  now: http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-14&amp;arch=i386
preupgrade (mirrorlist)
  url: http://mirrors.fedoraproject.org/mirrorlist?path=pub/fedora/linux/releases/14/Fedora/$basearch/os
  now: http://mirrors.fedoraproject.org/mirrorlist?path=pub/fedora/linux/releases/14/Fedora/i386/os
preupgrade-fedora (mirrorlist)
  url: https://mirrors.fedoraproject.org/metalink?repo=fedora-14&amp;arch=i386
  now: https://mirrors.fedoraproject.org/metalink?repo=fedora-14&amp;arch=i386
preupgrade-updates (mirrorlist)
  url: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f14&amp;arch=i386
  now: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f14&amp;arch=i386
Fetched treeinfo from http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/14/Fedora/i386/os//.treeinfo
treeinfo timestamp: Fri Oct 22 03:14:10 2010
MEMORY                                                                                                                                                                                     | 1.2 kB     00:00
/boot/upgrade/vmlinuz checksum OK
/boot/upgrade/initrd.img checksum OK
Error: Not enough space in /boot/upgrade to download install.img.

The main installer image could not be saved to your hard drive. The installer can download this file once it starts, but this requires a wired network connection during installation.

If you do not have a wired network connection available, you should quit now.
</code></pre>

<p>実際はコンソールどんどん流れていきます。
以前はパーティションを分けてて且つ /boot がアップグレードに必要な容量を満たしてない場合（多分100〜200MBくらい？）メッセージも出ず、リブート時にエラーになって終わってたのですが、今回はその旨メッセージが表示されるようになっているようです。
/boot に容量が無い場合、”preupgradeは再起動時にダウンロードしなおすけど、ネットワークつないで無い時は無理なんでquitしておけ&#8221; と言っています。</p>

<p>処理はそのまま進みます。</p>

<pre><code>--&gt; Running transaction check
---&gt; Package MAKEDEV.i686 0:3.24-6.fc14 set to be updated
---&gt; Package ORBit2.i686 0:2.14.19-1.fc14 set to be updated
---&gt; Package OpenEXR-libs.i686 0:1.7.0-1.fc14 set to be updated
---&gt; Package acl.i686 0:2.2.49-8.fc14 set to be updated
---&gt; Package alex.i686 0:2.3.3-1.fc14 set to be updated
---&gt; Package atk.i686 0:1.30.0-5.fc14 set to be updated
---&gt; Package attr.i686 0:2.4.44-5.fc14 set to be updated
---&gt; Package audit-libs.i686 0:2.0.4-4.fc14 set to be updated
---&gt; Package audit-libs-python.i686 0:2.0.4-4.fc14 set to be updated
---&gt; Package authconfig.i686 0:6.1.11-1.fc14 set to be updated
--&gt; Processing Dependency: libavahi-client.so.3 for package: 1:cups-libs-1.4.4-10.fc14.i686
--&gt; Processing Dependency: libavahi-common.so.3 for package: 1:cups-libs-1.4.4-10.fc14.i686
--&gt; Processing Dependency: libavahi-common.so.3 for package: avahi-0.6.27-2.fc14.i686
---&gt; Package avahi.i686 0:0.6.27-2.fc14 set to be updated
--&gt; Processing Dependency: systemd-units for package: avahi-0.6.27-2.fc14.i686
---&gt; Package bash.i686 0:4.1.7-3.fc14 set to be updated
---&gt; Package bind-libs.i686 32:9.7.2-2.P2.fc14 set to be updated


... (snip)

---&gt; Package cronie.i686 0:1.4.5-2.fc14 set to be installed
--&gt; Processing Dependency: dailyjobs for package: cronie-1.4.5-2.fc14.i686
--&gt; Running transaction check
---&gt; Package cronie-anacron.i686 0:1.4.5-2.fc14 set to be installed
--&gt; Finished Dependency Resolution
Packages we need to download
MAKEDEV.i686                             3.24-6.fc14            preupgrade-fedora
ORBit2.i686                              2.14.19-1.fc14         preupgrade-fedora
OpenEXR-libs.i686                        1.7.0-1.fc14           preupgrade-fedora
acl.i686                                 2.2.49-8.fc14          preupgrade-fedora
alex.i686                                2.3.3-1.fc14           preupgrade-fedora
atk.i686                                 1.30.0-5.fc14          preupgrade-fedora
attr.i686                                2.4.44-5.fc14          preupgrade-fedora
audit-libs.i686                          2.0.4-4.fc14           preupgrade-fedora
audit-libs-python.i686                   2.0.4-4.fc14           preupgrade-fedora
authconfig.i686                          6.1.11-1.fc14          preupgrade-updates
avahi.i686                               0.6.27-2.fc14          preupgrade-fedora
avahi-libs.i686                          0.6.27-2.fc14          preupgrade-fedora
bash.i686                                4.1.7-3.fc14           preupgrade-fedora

... (snip)


upstart.i686                             0.6.5-10.fc14          preupgrade-updates
upstart-sysvinit.i686                    0.6.5-10.fc14          preupgrade-updates
usermode.i686                            1.106.1-1.fc14         preupgrade-fedora
util-linux-ng.i686                       2.18-4.4.fc14          preupgrade-updates
vim-common.i686                          2:7.2.446-2.fc14       preupgrade-fedora
vim-enhanced.i686                        2:7.2.446-2.fc14       preupgrade-fedora
vim-minimal.i686                         2:7.2.446-2.fc14       preupgrade-fedora
xml-common.noarch                        0.6.3-33.fc14          preupgrade-fedora
xz.i686                                  4.999.9-0.2.beta.20100401git.fc14
                                                                preupgrade-fedora
xz-libs.i686                             4.999.9-0.2.beta.20100401git.fc14
                                                                preupgrade-fedora
xz-lzma-compat.i686                      4.999.9-0.2.beta.20100401git.fc14
                                                                preupgrade-fedora
yum.noarch                               3.2.28-5.fc14          preupgrade-fedora
yum-metadata-parser.i686                 1.1.4-2.fc14           preupgrade-fedora
zip.i686                                 3.0-2.fc14             preupgrade-fedora
zlib.i686                                1.2.5-2.fc14           preupgrade-fedora
zsh.i686                                 4.3.10-5.fc14          preupgrade-fedora
Total download size: 0.0bytes
Download packages?
Is this ok [y/N]: y
Generating metadata for preupgrade repo
325/325 - binutils-2.20.51.0.7-5.fc14.i686.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
Preparing system to boot into installer
DEBUG /sbin/grubby --title="Upgrade to Fedora 14 (Laughlin)" --remove-kernel="/boot/upgrade/vmlinuz" --add-kernel="/boot/upgrade/vmlinuz" --initrd="/boot/upgrade/initrd.img" --args="preupgrade repo=hd::/var/cac
he/yum/preupgrade  ks=hd:UUID=e1de3e8f-91f6-456a-8b14-fae7ee076c0c:/upgrade/ks.cfg stage2=http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/14/Fedora/i386/os/images/install.img";
Probing devices to guess BIOS drives. This may take a long time.
All finished. The upgrade will begin when you reboot.
</code></pre>

<p>ダウンロードサイズが 0.0bytes なのに注目。再起動したら残りが始まりますよと書いてあります。</p>

<h3>再起動</h3>

<p>普通だったら言われるまま再起動でOK。VMとか10年前のハードで動かしてる場合は若干注意で、メモリが512MB以上じゃないと再起動後のタイミングで失敗します (256MBでNGでした) 。クリーンインストール時もメモリは512MB以上は必要そうです。これって最近のCentOSでも一緒ですね。</p>

<p>再起動後はNICのIPだけ固定を振るかかDHCPか聞かれますが、そのあとは自動的に残りのアップグレード処理を続けてくれます。</p>

<h2>まとめ</h2>

<p>以前は /boot/ 以下にダミーのファイルが必要でしたが、Fedora 14 はそこもちゃんと見てくれるように賢くなってくれていました。</p>

<p>RHELにpreupgradeって採用されないのかなーーー。超便利になってきてる。
CentOSでも使えたら、Debianの次くらいにアップグレード楽チンになりそうなもんですけどね。
Debianはメジャーバージョンアップグレード ( apt-get dist-upgrade ) 時もリブートも必要無いって、改めてよくできてるなあ。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MacBook Pro のメモリを増設した]]></title>
    <link href="http://blog.tnmt.info/2010/11/02/macbook-pro-memory-8gb/"/>
    <updated>2010-11-02T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/11/02/macbook-pro-memory-8gb</id>
    <content type="html"><![CDATA[<p>MacBook Proのメモリを増設して8GBにしました。</p>

<ul>
<li> MBP 13-inch (Mid 2009) のメモリは &#8220;SODIMM DDR3-1066 PC3-8500&#8221; </li>
<li> Sumsung製で ¥6,470 * 2 = ¥12,940 1枚7000円切って安くなったなーと思う </li>
</ul>


<p>付け替えも<a href="http://support.apple.com/kb/HT1270?viewlocale=ja_JP&locale=ja_JP">手順</a>通りやれば全く問題無し。</p>

<p><img src="http://static.tnmt.info/images/2010/11/aboutthismac.png" alt="このMacについて" title="about this mac" class="alignnone size-full" />
こんな感じで確認も出来ました。</p>

<p>試しに VMware Fusion で WinXP, CentOS 5.5 32bit, CentOS 5.5 64bit の VM をそれぞれ1GBくらいずつで同時に動かしたけど全然普通に動きますね。
検証用だったら自宅サーバー無くてもいいんじゃねみたいな。（とか言っちゃダメ。）</p>

<p>メモリの価格はまだ下がってるので昔MacBook Pro買ったけどパフォーマンス不足してるよっていう人にもおすすめです。増強でもまだSSD換装のドーピングも残ってるし。
新しいMacBook Air 特に11インチ評判いいですけど、そんなん全然要らないんだから！（全力で強がり）</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HP ML110 G5 がやってきた : 開封の儀]]></title>
    <link href="http://blog.tnmt.info/2010/11/01/ml110-g5-has-come/"/>
    <updated>2010-11-01T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/11/01/ml110-g5-has-come</id>
    <content type="html"><![CDATA[<p>つい先日</p>

<!-- http://twitter.com/tnmt/status/28575529048 -->


<p> <style type='text/css'>.bbpBox{background:url(http://s.twimg.com/a/1288305442/images/themes/theme1/bg.png) #C0DEED;padding:20px;}</style><div id='tweet_28575529048' class='bbpBox' style='background:url(http://s.twimg.com/a/1288305442/images/themes/theme1/bg.png) #C0DEED;padding:20px;'><p class='bbpTweet' style='background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:16px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px;'>HP ProLiant ML110 G5 が ¥7,980 だったので思わずポチッたなう。 <a href='http://www.sofmap.com/product_detail/exec/_/sku=11453552/-/scmp=twit_pt' target='_new'>http://www.sofmap.com/product_detail/exec/_/sku=11453552/-/scmp=twit_pt</a><span class='timestamp' style='font-size:12px;display:block;'><a title='Sun Oct 24 07:38:06 ' href='http://twitter.com/tnmt/status/28575529048'>Sun Oct 24 07:38:06 </a> via <a href="http://logpi.jp" rel="nofollow">ログピ(logpi.jp)</a></span><span class='metadata' style='display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6;'><span class='author' style='line-height:19px;'><a href='http://twitter.com/tnmt'><img src='http://a2.twimg.com/profile_images/1111603690/___normal.JPG' style='float:left;margin:0 7px 0 0px;width:38px;height:38px;' /></a><strong><a href='http://twitter.com/tnmt'>TSUNEMATSU Shinya</a></strong><br/>tnmt</span></span></p></div> <!-- end of tweet --></p>

<p>とつぶやいて購入した HP ML110 G5 が到着したのですが、ちょっと普通に大きかったので開けるのが面倒でした。
とはいえ、いつまでもそのまま放置しておけないので、酔った勢いで開封。記念のエントリです。</p>

<h4>包装</h4>

<p>はこんな感じ</p>

<p><img src="http://static.tnmt.info/images/2010/10/ml110g5_001-300x224.jpg" alt="ML110 G5 包装" title="ml110g5_001" width="300" height="224" class="alignnone size-medium wp-image-474" /></p>

<p>割とでかいです。</p>

<h4>開封</h4>

<p>さっそく開けてみます。</p>

<p><img src="http://static.tnmt.info/images/2010/10/ml110g5_002-300x224.jpg" alt="ML110 G5 箱を開けてみた" title="ml110g5_002" width="300" height="224" class="alignnone size-medium wp-image-475" /></p>

<h4>出してみる</h4>

<p><img src="http://static.tnmt.info/images/2010/10/ml110g5_003-300x224.jpg" alt="ML110 G5 登場" title="ml110g5_003" width="300" height="224" class="alignnone size-medium wp-image-476" /></p>

<p>他にはPS/2のキーボードとマウスがついてたり。</p>

<h4>見てみる</h4>

<p><img src="http://static.tnmt.info/images/2010/10/ml110g5_004-300x224.jpg" alt="品質の &quot;MADE IN TOKYO&quot; ?" title="ml110g5_004" width="300" height="224" class="alignnone size-medium wp-image-477" /></p>

<p>安心の品質？ &#8220;MADE IN TOKYO&#8221; の文字</p>

<p>で無事に箱からお目見えしました。</p>

<p>今後のプランとしては</p>

<ul>
<li>CPUはIntel-VT対応に換装  (Celeron Dual-Core E3300) くらいでいい </li></li>
<li>メモリも増やしたい (PC2-6400 (DDR2-800) Non-ECC でもいけるらしい) 8GBくらい </li></li>
</ul>


<p>とかして仮想用の母艦機にでもしようかなと思ってます。HDDも足せればやるくらい。</p>

<p>以下、思いつくまま。</p>

<p>特にサーバー関連を勉強し始めようと思った時、やれVMwareだ、VirtualBOXでVMたてるーでもいいんですけど、実際に実機に触ってみるとCPUがどうだメモリが合うかを勉強する機会にもなると思うので、一台買って色々試すっていいと思うんですよね。俺もハードウェア周りは正直全然不勉強ですけどネットには色々情報あるし。「OSインストール出来ねー」とか「パーツ換えたら動かなくなったー」でドライバやOSのブートの仕組みを学んできた経験からもなおさらそう思います。</p>

<p>俺が大学生だった7,8年前に一番最初に親父と一緒にPCショップ行ってパーツ集めて作ったマシンなんて、いまやVMの1インスタンスでも十分足りるくらいのスペックだった (CPU: Pentium3, Memory: 128M, HDD: 100GB切ってた くらいだった)。そんでも確か30万くらいしたなあ。
こんなに安く手に入る自分だけのサーバーがあるってスペシャルだし、久々にそれっぽいマシン買ったので何か普通に楽しいなーって思ってます。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[qpstudy03 に参加してきました]]></title>
    <link href="http://blog.tnmt.info/2010/10/10/qpstudy03/"/>
    <updated>2010-10-10T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/10/10/qpstudy03</id>
    <content type="html"><![CDATA[<p><a href="http://sites.google.com/site/qpstudy/">初心者にも優しいインフラ勉強会 qpstudy</a> の<a href="http://sites.google.com/site/qpstudy/qpstudy03">第3回</a>に参加してきました。</p>

<p>会場は大森のニフティ株式会社のセミナールーム。最近コミュニティーへの貸し出しを始められたそうですね。へえー。</p>

<h2>メイン枠</h2>

<p>今回の主題は「より対選手権！～俺よりよれるヤツに会いに行く～」で要するにその場で LAN ケーブルの作成の技を競い合うという企画で、鉄人の皆様と会場から抽選で参加の方で、出来たケーブルの品質 (iperfでリンク速度測定w) を比べるという内容。
なんとまあ。</p>

<h3>より対選手権！ by @kuwa_tw さん</h3>

<p>俺も作ったのはもう遠い昔の話なんですけど（3, 4年前くらいが最後）、作ったこと無い人とか、そもそも作れることを知らない人もいるんじゃないかなと会場の雰囲気見て思いました。そういう機会自体あんまりないのかもしれないですね。</p>

<p>結果はリタイヤしちゃった人もいつつもほぼ全員疎通と速度測定まで終えてめでたしめでたし。</p>

<p>目的が見たこと無い人に見てもらうということで大成功だったと思います。</p>

<h3>インフラエンジニアのためのPerl読み書き基礎講座(仮) @fujiwara さん</h3>

<p>公開されている資料からまとめを。分かりやすい説明で非常に参考になりました。</p>

<ul>
<li>perldoc でドキュメントを読もう</li>
<li>CPAN モジュールを選んで使おう</li>
<li>インストールは cpanm で</li>
<li>モジュールを使いこなしてレガシーコードに立ち向かおう</li>
<li>printfデバッグの味方 Data::Dumper</li>
<li>デバッガで小さなコード片を気軽に試そう</li>
</ul>


<p>perldocの使い方は知らないことばかりでした。cpanmはサービスでも使ってますが無しでは考えられないです！ miyagawa++</p>

<h2>LT枠</h2>

<p>以降はLT枠</p>

<h3>超初心者向け正規表現講座：ボクはこうやって覚えた @togakushi さん</h3>

<p>「正規表現はあくまで”表現”で&#8221;意味&#8221;を見いだそうとしないことがコツ」というお話。</p>

<p>「何か便利に処理したい -> 正規表現使おう」が多分良いのだろうなと。自分も「正規表現勉強しよう -> 何か便利に使えないかな」ではまった記憶があります。どういう風に使えるのかイメージがわかなくて、やたらめたら難しそうというイメージばかり先行してました。今も難しいな、奥が深いなとは思いますけど。</p>

<p>「&#8221;意味&#8221;を見いだそう」≒ 解読しようとする時は、別の担当者が作ったスクリプトとかコードを修正するときとかそういう感じですよね。その時に「こういう使い方もあるんだな」と勉強になる機会がかなり多いです。</p>

<h3>できる！Varnish ここを知ると便利なVCL(仮) @xcir さん</h3>

<p>varnishの処理の流れとVCLのデバッグ方法について。</p>

<p>ビアバッシュの時にも@xcir さんに、指定したキャッシュファイルのパージ方法なども聞いて良さげだなと思いました。俺ってば<a href="http://blog.tnmt.info/2010/05/31/debian-lenny-varnish-2-1-2powerpc/">前にパッケージ作ったきり</a>で全然検証してないや。</p>

<p>ちょうど画像をキャッシュしたいシーンがあるのでちゃんといじってみよう。</p>

<h3>Puppet と Chef @n0ts さん</h3>

<p>は @n0ts さんが都合つかず残念ながら聞くことが出来ませんでした。お仕事お疲れさまです。</p>

<p>puppetを使っているので、違いについて聞きたかったなあ。</p>

<h2>ビアバッシュ</h2>

<p>そのまま会場でビール＆ピザのビアバッシュ。雰囲気がすごく良かったのと、入れ替わり立ち替わりでほろ酔いLTが繰り広げられたのが良かったです。</p>

<ul>
<li>意外と業務で自作サーバーを作ってるところ多い</li>
<li>それ以上に自宅サーバー自作はもっと多い。</li>
<li>@xcir さんが「RAIDカード10万くらいしましたよー」ってニコニコしてたw</li>
<li>職業柄、痔には注意ですね！</li>
<li>@togakushi さんの ssh tips よかった。sslh sslh。</li>
<li>~/.ssh/config は俺も前に<a href="http://blog.tnmt.info/2009/07/22/ssh-tips/">少しだけ</a>書いたけどここら辺もっと色々知りたい。</li>
<li>FusionIOへの皆の食いつきぶり。てかFusionIOすげー。</li>
<li>ApacheTrafficServer</li>
</ul>


<h2>二次会とその後</h2>

<p>20人くらいがそのまま2次会へ。色々話をして、何か個人的に珍しく？愚痴とか文句っぽいこと言った気がしますが（業務内容とかではなくて）、皆不満を持っているところについては同じなんだなーと勝手にシンパシー感じてました。よりよくしていきたいですね。</p>

<p>結局終電を逃してしまったので、タクシー使うのも癪だし大森から自宅まで歩いて帰りました。有志（勇士）な @hansode さん @nekoruri さん @mikeda さん @togakushi さん @utsuidai さん @toshiak_netmark さんありがとうございましたw 〆の品壱家美味しかったです！</p>

<h3>そんなわけで</h3>

<p>リーダー <a href="http://twitter.com/iara">@iara さん</a>と、スタッフの皆様、会場のニフティの方々、参加された皆様お疲れさまでした、ありがとうございましたー。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[muninのグラフを画面表示時に動的に生成]]></title>
    <link href="http://blog.tnmt.info/2010/10/06/munin-fastcgi/"/>
    <updated>2010-10-06T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/10/06/munin-fastcgi</id>
    <content type="html"><![CDATA[<p>皆大好き？モニタリングツール<a href="http://munin-monitoring.org">Munin</a>。インストールが簡単、豊富なプラグインは自作も割と手軽に出来ます。</p>

<p>数10台くらいのモニタリングならさほど気にならないんですが、数100台規模になるとmuninサーバーで目立ってくるのがmunin-graphの負荷。muninサーバーはデフォルトで5分に一度モニタリング対象のmunin-nodeからrrdのデータを取得して同時にグラフを生成するのですが、このグラフ生成が数100台分実行されるとひ弱なサーバーだとかなりの高負荷になります。</p>

<p>グラフが見たいといっても1時間に何度も見るものでもないし、同時に10ホスト分を見たりもあまりしないので結構効率が悪いです。ぶっちゃけ見たい時にグラフが見れればいいので何か方法無いか探してたところ、munin 1.4からグラフ表示時にfastcgiで動的に生成出来るようになってたのでやってみました。</p>

<p>サーバーのOSはCentOS4。CentOS5用のsrc.rpmをリビルドして利用しました。
munin バージョンは1.4.5-4。
※epel リポジトリにmuninもありますけど、バージョンが古いので使えません。（1.2.6-4）</p>

<p>こちらを参考： <a href="http://munin-monitoring.org/wiki/CgiHowto">Munin graphing by CGI</a></p>

<p>今回はapacheを使いますが、↑ のhow toでは、lighttpdやnginxを使ったケースも紹介されています。</p>

<h4>/etc/munin/munin.conf設定</h4>

<p>cgiを利用するように設定します。今回はfastcgiを使いたいので以下の2設定</p>

<pre><code>graph_strategy cgi
cgiurl_graph /cgi-bin/munin-fastcgi-graph
</code></pre>

<h4>/usr/bin/munin-cron修正</h4>

<p>munin-cronの内部でmunin-graphを呼び出してるんですが、こいつが負荷になるので修正します。本家手順でもmunin.confのgraph_strategy見て分岐した方がいいよね微妙みたいに書いてあります。下記該当部分をコメントアウト。</p>

<pre><code> # nice /usr/share/munin/munin-graph --cron $@ 2&gt;&amp;1 |
 #   fgrep -v "*** attempt to put segment in horiz list twice"
</code></pre>

<h4>munin関連ファイルの所有権設定</h4>

<p>cgiの動作でapacheがファイルを読み書き出来るようにするため設定を変更します。本家手順ではwww-dataですが、CentOSのデフォルトはapacheなのでそこは読み替え、以下のコマンド。</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo chgrp apache /usr/share/munin/munin-graph
</span><span class='line'>sudo chgrp apache /var/log/munin /var/log/munin/munin-graph.log
</span><span class='line'>sudo chmod g+w /var/log/munin /var/log/munin/munin-graph.log
</span><span class='line'>
</span><span class='line'>sudo chgrp -R apache /var/www/html/munin/tnmt.info
</span><span class='line'>sudo chmod -R g+w /var/www/html/munin/tnmt.info
</span></code></pre></td></tr></table></div></figure>


<p>tnmt.infoの部分は既に出来てるグラフのドメインです。</p>

<h4>logrotateの設定変更</h4>

<p>logrotateが走っても、/var/log/munin/munin-graph.log が apache で読み書きできるように設定。 /etc/logrotate.d/munin を編集</p>

<pre><code> # change this:
 /var/log/munin/munin-graph.log {
     daily
     missingok
     rotate 7
     compress
     notifempty
     create 640 munin adm      # !!!
 }
 # to this:
 /var/log/munin/munin-graph.log {
     # [...]
     create 660 munin apache # !!!
 }
</code></pre>

<h4>mod_fcgid</h4>

<p>epelからインストール</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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'>sudo yum --enablerepo<span class="o">=</span>epel install mod_fcgid
</span></code></pre></td></tr></table></div></figure>


<h4>fastcgi用設定</h4>

<p>/etc/httpd/conf.d/munin.conf をこんな風に設定しました。</p>

<pre><code>ScriptAlias /cgi-bin/munin-fastcgi-graph /var/www/html/munin/cgi/munin-fastcgi-graph

&lt;Location /cgi-bin/munin-fastcgi-graph&gt;
SetHandler fcgid-script
&lt;/Location&gt;
</code></pre>

<p>以上の設定で、見たい時だけグラフが描画されます。エコですね。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[hbstudy #13 でLTしてきました。]]></title>
    <link href="http://blog.tnmt.info/2010/07/28/lt-at-hbstudy-13/"/>
    <updated>2010-07-28T00:00:00+09:00</updated>
    <id>http://blog.tnmt.info/2010/07/28/lt-at-hbstudy-13</id>
    <content type="html"><![CDATA[<p>7/23にあった <a href="http://heartbeats.jp/hbstudy/2010/07/hbstudy13.html">hbstudy #13 </a> でLTしてきました。</p>

<p>外部の勉強会で話す機会は今回初めてでしたが、案の定プロジェクタの設定にとまどったりなんだりで見事に焦りました。</p>

<p>物理マシンと仮想マシンのOSインストール自動化について概要の紹介でしたが、実際のインストール手順や情報もWebを探すと結構出てきますので、敷居も低いかと思います。</p>

<div style="width:510px" id="__ss_4849951"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/t_n_m_t/cobblerkoanos-4849951" title="OSインストール自動化あれこれ(Cobbler, Koan)" target="_blank">OSインストール自動化あれこれ(Cobbler, Koan)</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/4849951" width="510" height="426" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/t_n_m_t" target="_blank">Shinya Tsunematsu</a> </div> </div>


<p>CobblerもKoanの導入手順も最近の情報にアップデート出来るよう、近々エントリにまとめとこう。</p>
]]></content>
  </entry>
  
</feed>

