<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>higebu.com</title><link>https://www.higebu.com/</link><description>北海道に住んでいるソフトウェアエンジニア。 ネットワークプロトコルやモバイルコアに興味があります。 4人の子供の父親。</description><language>ja</language><managingEditor>yuya.kusakabe@gmail.com (Yuya Kusakabe)</managingEditor><lastBuildDate>Thu, 01 Oct 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://www.higebu.com/index.xml" rel="self" type="application/rss+xml"/><item><title>tunsrc を設定しても Linux の SRv6 H.Encaps.L2 が遅かったのはなぜか</title><link>https://www.higebu.com/blog/2026/10/01/srv6-l2encap/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2026/10/01/srv6-l2encap/</guid><description>&lt;p&gt;&lt;a href="https://www.higebu.com/blog/2026/09/25/srv6-tunsrc/"&gt;前回の記事&lt;/a&gt;では、tunsrc を設定すると H.Encaps.V6 も H.Encaps.L2 も速くなりました。それでも H.Encaps.L2 は 660.7 kpps で、H.Encaps.V6 の 976.4 kpps には届いていませんでした(どちらも tunsrc を設定したときの PDR)。同じ入力パケットに対して H.Encaps.L2 が余分に載せるのは内側の 14 バイトの Ethernet ヘッダで、それだけでスループットが 3 分の 1 も落ちるはずはありません。調べてみると、原因はパケット毎の不要なメモリ確保で、修正はすでに net-next に入っています。&lt;/p&gt;
&lt;h2 id="測定環境"&gt;測定環境&lt;/h2&gt;
&lt;p&gt;以下はすべて、修正の直前と修正を含む net-next を同じ設定(Ubuntu の設定をもとにしたもので、&lt;code&gt;CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y&lt;/code&gt;)でビルドして測りました。SUT(測定対象のマシン)の CPU は Xeon E5-2650 v3(2.30 GHz)で、64 バイトのフレームを 1 コアで転送します。T-Rex を動かす tester とは Intel 82599ES(ixgbe)で直結しています。IOMMU は passthrough(&lt;code&gt;iommu=pt&lt;/code&gt;)で、tunsrc は設定済みです。スループットは前回と同じく、Ubuntu 24.04 と Python 3.12 で動くように直した &lt;a href="https://github.com/higebu/SRPerf/tree/f91e3cd0508e47905df7e2f04c83ae1085a50f12"&gt;SRPerf のフォーク&lt;/a&gt;で測っています。指標は PDR(Partial Drop Rate、パケットロス率 0.5% 以下で転送できる最大の送信レート)と MRR(Maximum Receive Rate、回線速度いっぱいで送ったときの受信レート)の 2 つです。&lt;/p&gt;
&lt;h2 id="flame-graph-に出ていたもの"&gt;flame graph に出ていたもの&lt;/h2&gt;
&lt;p&gt;修正前のカーネルでもロスなく転送できる 500 kpps 固定で H.Encaps.L2 のトラフィックを流し、転送しているコアの flame graph を取りました。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20261001-srv6-l2encap-before.svg" alt="修正前の H.Encaps.L2 の flame graph"&gt;&lt;/p&gt;
&lt;p&gt;呼び出し先を含めると、サンプルされたサイクルのうち &lt;code&gt;pskb_expand_head()&lt;/code&gt; が 21.1%、&lt;code&gt;kmalloc_reserve()&lt;/code&gt; が 18.7%、&lt;code&gt;memset_orig()&lt;/code&gt; が 14.1% を占めています。&lt;code&gt;memset_orig()&lt;/code&gt; のサンプルはすべて &lt;code&gt;seg6_do_srh()&lt;/code&gt; → &lt;code&gt;pskb_expand_head()&lt;/code&gt; → &lt;code&gt;kmalloc_reserve()&lt;/code&gt; の経路にあるので、このゼロ埋めは skb の head を確保し直す処理から来ています。これがパケット毎に起きていることは、コードを見るとわかります。&lt;/p&gt;
&lt;h2 id="なぜパケット毎に-skb-の-head-を確保し直していたのか"&gt;なぜパケット毎に skb の head を確保し直していたのか&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;net/ipv6/seg6_iptunnel.c&lt;/code&gt; の &lt;code&gt;seg6_do_srh()&lt;/code&gt; は、外側の IPv6 ヘッダを作る前に Ethernet ヘッダをパケットの先頭に戻します。L2 の encap モードでは、その場所を空けるために &lt;code&gt;pskb_expand_head()&lt;/code&gt; を無条件に呼んでいました。&lt;code&gt;pskb_expand_head()&lt;/code&gt; は、既存の headroom が足りていても、必ず新しい head を確保して headroom と linear 部分のデータをコピーします。IPv6 の encap モードは代わりに &lt;code&gt;skb_cow_head()&lt;/code&gt; を使っていて、こちらは headroom が足りないときか、skb が clone されていてヘッダ部分を共有しているときだけ確保し直します。&lt;/p&gt;
&lt;p&gt;この環境では、skb は 206 バイトの headroom を持って &lt;code&gt;seg6_do_srh()&lt;/code&gt; に届きます。一方、segment が 1 つの L2 encap に必要なのは 94 バイト(Ethernet ヘッダ 14、IPv6 ヘッダ 40、SRH 24、送信側のリンク層ヘッダ用に確保する 16)です。skb は clone もされていなかったので、確保し直す必要はありませんでした。&lt;/p&gt;
&lt;p&gt;このコストを大きくしていたのが &lt;code&gt;CONFIG_INIT_ON_ALLOC_DEFAULT_ON&lt;/code&gt; です。これは Linux 5.3 で入ったセキュリティ強化のためのオプションで、ページと slab の確保時にメモリをゼロ埋めして、古いデータが見えてしまう危険を減らします。Ubuntu と Debian ではデフォルトで有効で、今回のカーネルでも有効だったため、確保し直した head も毎回 &lt;code&gt;memset()&lt;/code&gt; でゼロ埋めされていました。&lt;code&gt;init_on_alloc=0&lt;/code&gt; で無効にもできますが、性能のためにセキュリティ機能を切るのは本末転倒です。&lt;/p&gt;
&lt;p&gt;無条件の確保し直しは 2017 年に H.Encaps.L2 が追加されたときからあるので、&lt;a href="https://doi.org/10.1109/TNSM.2020.3048328"&gt;SRPerf の論文&lt;/a&gt;で使われたカーネル(5.2 の開発期間中の net-next)にもありました。ただし、そのカーネルは 5.3 で入った &lt;code&gt;init_on_alloc&lt;/code&gt; より前のもので、論文では H.Encaps.L2 は H.Encaps.V6 にずっと近い値でした(約 828 kpps と 978 kpps で、0.85)。差のうちどれだけがゼロ埋めによるものかを見るために、修正前のカーネルを &lt;code&gt;init_on_alloc=0&lt;/code&gt; で起動して測りました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;init_on_alloc&lt;/th&gt;
&lt;th&gt;H.Encaps.V6&lt;/th&gt;
&lt;th&gt;H.Encaps.L2&lt;/th&gt;
&lt;th&gt;L2/V6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1(デフォルト)&lt;/td&gt;
&lt;td&gt;937.7&lt;/td&gt;
&lt;td&gt;644.0&lt;/td&gt;
&lt;td&gt;0.69&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;938.0&lt;/td&gt;
&lt;td&gt;773.9&lt;/td&gt;
&lt;td&gt;0.83&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;(MRR、単位は kpps、10 回の平均、修正前のカーネル)&lt;/p&gt;
&lt;p&gt;ゼロ埋めがなくなると L2/V6 は 0.69 から 0.83 になり、論文の値に近づきます。&lt;/p&gt;
&lt;h2 id="修正内容"&gt;修正内容&lt;/h2&gt;
&lt;p&gt;修正では、encap 全体に必要な分を最初に &lt;code&gt;skb_cow_head()&lt;/code&gt; に要求します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- if (pskb_expand_head(skb, skb-&amp;gt;mac_len, 0, GFP_ATOMIC) &amp;lt; 0)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- return -ENOMEM;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ headroom = skb-&amp;gt;mac_len + sizeof(struct ipv6hdr) +
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ ipv6_optlen(tinfo-&amp;gt;srh) +
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ dst_dev_overhead(cache_dst, skb);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ err = skb_cow_head(skb, headroom);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ if (unlikely(err))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ return err;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;headroom が足りていて skb が clone されていなければ、何も確保し直しません。本当に headroom が足りないときは head を 1 回だけ確保し直し、その後の IPv6 encap のコードにある &lt;code&gt;skb_cow_head()&lt;/code&gt; の時点では必要な空きがすでにあるので、2 回目の確保し直しは起きません。&lt;/p&gt;
&lt;p&gt;修正後は、同じ負荷で取った flame graph から確保の処理が消えました。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20261001-srv6-l2encap-after.svg" alt="修正後の H.Encaps.L2 の flame graph"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pskb_expand_head()&lt;/code&gt;、&lt;code&gt;kmalloc_reserve()&lt;/code&gt;、&lt;code&gt;memset_orig()&lt;/code&gt; のサンプルはなくなり、&lt;code&gt;seg6_do_srh()&lt;/code&gt; は 28.2% から 5.6% に下がりました。修正前後で 30 秒ずつ取ったサイクル数を、その間に転送した 1500 万パケットで割ると、1 パケットあたり 3862 サイクルだったのが 2602 サイクルになっています。&lt;/p&gt;
&lt;h2 id="測定結果"&gt;測定結果&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;H.Encaps.L2 の PDR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;修正前&lt;/td&gt;
&lt;td&gt;654.6 kpps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;修正後&lt;/td&gt;
&lt;td&gt;965.7 kpps(+47.5%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;(10 秒の試行で PDR を探索するのを 10 回繰り返した平均)&lt;/p&gt;
&lt;p&gt;H.Encaps.V6 はこのコードを通らないので、MRR はどちらのカーネルでも約 938 kpps のままです。修正後のカーネルを &lt;code&gt;init_on_alloc=0&lt;/code&gt; で起動すると L2/V6 は 1.02(MRR で 956.8 kpps と 939.1 kpps)で、H.Encaps.L2 は H.Encaps.V6 と同じ速さになりました。ゼロ埋めをなくしても残っていた差は、確保し直しそのものによるものだったことになります。&lt;/p&gt;
&lt;h2 id="upstream-に入るまで"&gt;upstream に入るまで&lt;/h2&gt;
&lt;p&gt;最初のバージョン(v1)では、&lt;code&gt;skb_cow_head()&lt;/code&gt; に &lt;code&gt;skb-&amp;gt;mac_len&lt;/code&gt; だけを要求していました。これでは、clone されてヘッダ部分を共有している skb の場合、共有をやめるときと外側のヘッダを付けるときの 2 回 head を確保し直すことがあると &lt;a href="https://lore.kernel.org/r/CANn89iKUqjbrRkr68&amp;#43;S9nKAu49C3K01e3XSNwkY1NCgmuPMPag@mail.gmail.com"&gt;Eric Dumazet に指摘され&lt;/a&gt;、v2 では上のように encap 全体の分を要求するようにしました。&lt;/p&gt;
&lt;p&gt;v2 のレビュー中に、&lt;a href="https://lore.kernel.org/r/178885587111.219967.14896644410984520593@kernel.org"&gt;netdev の AI レビューボットである Sashiko が別のバグを見つけました&lt;/a&gt;。&lt;code&gt;dst_dev_overhead()&lt;/code&gt; は送信側デバイスのリンク層ヘッダの分の空きを確保しますが、コードがパケットの先頭に作り直すのは受信側の MAC ヘッダです。受信側の MAC ヘッダのほうが長いとき(例えば &lt;code&gt;reorder_hdr off&lt;/code&gt; で VLAN タグ付きのフレームを受けたとき)は、作り直すヘッダの offset が回り込み、コピー先がバッファの約 64 KB 先になります。これは L2 モードに限った問題ではないので、&lt;code&gt;dst_dev_overhead()&lt;/code&gt; 側で別に直して net ツリーに送りました。そちらが先にマージされ、その後このパッチの v3 が net-next に入りました。net-next は現在 7.3-rc をもとに開発されているので、Linux 7.4 に入る見込みです。&lt;/p&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git.kernel.org/netdev/net-next/c/bf515c9fae87"&gt;seg6: reallocate the skb head on L2 encapsulation only when needed&lt;/a&gt;(net-next、bf515c9fae87)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git.kernel.org/netdev/net/c/87cd6b717e40"&gt;net: ipv6: keep room for the mac header in dst_dev_overhead()&lt;/a&gt;(net、87cd6b717e40)&lt;/li&gt;
&lt;li&gt;パッチのスレッド: &lt;a href="https://lore.kernel.org/r/20260902-seg6-l2cow-v1-1-e823ce216454@gmail.com"&gt;v1&lt;/a&gt;、&lt;a href="https://lore.kernel.org/r/20260925-seg6-l2cow-v3-1-fc83821542a7@gmail.com"&gt;v3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A. Abdelsalam, P. L. Ventre, C. Scarpitta, A. Mayer, S. Salsano, P. Camarillo, F. Clad, C. Filsfils, &amp;ldquo;&lt;a href="https://doi.org/10.1109/TNSM.2020.3048328"&gt;SRPerf: A Performance Evaluation Framework for IPv6 Segment Routing&lt;/a&gt;&amp;rdquo;, IEEE Transactions on Network and Service Management, vol. 18, no. 2, pp. 2320-2333, 2021&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.kernel.org/admin-guide/kernel-parameters.html"&gt;The kernel&amp;rsquo;s command-line parameters: init_on_alloc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SRouting/SRPerf"&gt;SRPerf&lt;/a&gt;(GitHub)と&lt;a href="https://github.com/higebu/SRPerf/tree/f91e3cd0508e47905df7e2f04c83ae1085a50f12"&gt;フォーク&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.higebu.com/blog/2026/09/25/srv6-tunsrc/"&gt;Linux の SRv6 H.Encaps は tunsrc を設定しないとどの程度性能が落ちるのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brendangregg/FlameGraph"&gt;Brendan Gregg の FlameGraph&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Linux の SRv6 H.Encaps は tunsrc を設定しないとどの程度性能が落ちるのか</title><link>https://www.higebu.com/blog/2026/09/25/srv6-tunsrc/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2026/09/25/srv6-tunsrc/</guid><description>&lt;p&gt;最近、Linux カーネルに SRv6 Mobile User Plane(RFC 9433)の behavior を実装していて、既存の SRv6 behavior と比べて性能が見劣りしないかを、&lt;a href="https://github.com/SRouting/SRPerf"&gt;SRPerf&lt;/a&gt; を使って測っています。SRPerf は、Linux と VPP の SRv6 behavior を一通り測定した論文(&lt;a href="https://doi.org/10.1109/TNSM.2020.3048328"&gt;SRPerf: A Performance Evaluation Framework for IPv6 Segment Routing&lt;/a&gt;)で使われている測定フレームワークです。公開されているものは古い環境向けなので、Ubuntu 24.04 と Python 3.12 で動くように直した&lt;a href="https://github.com/higebu/SRPerf/tree/f91e3cd0508e47905df7e2f04c83ae1085a50f12"&gt;フォーク&lt;/a&gt;を使っています。&lt;/p&gt;
&lt;p&gt;この論文には、H.Encaps ではトンネルの送信元アドレス(tunsrc)を設定しないと性能が落ちる、と書かれています。どの程度落ちるのかが気になったので、実際に測ってみました。&lt;/p&gt;
&lt;h2 id="srperf-の論文にある-tunsrc-の記述"&gt;SRPerf の論文にある TUNSRC の記述&lt;/h2&gt;
&lt;p&gt;論文の実験環境の説明には、次のように書かれています。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We configured the TUNSRC for the SRv6 policy headend behaviors doing encapsulation. The latter allows to configure the IPv6 source address of the IPv6 outer header. The TUNSRC has to be configured otherwise the Linux kernel will try to get the address from the interface which will cause a performance drop in the performance of the encaps behavior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;論文の著者は tunsrc を設定して測っていますが、どの程度性能が落ちるのかは書かれていません。なお、公開されている SRPerf の &lt;a href="https://github.com/SRouting/SRPerf/blob/5bfab74a0b509f86406b0a306418629ed3e6e5d3/sut/linux/forwarding-behaviour.cfg"&gt;&lt;code&gt;forwarding-behaviour.cfg&lt;/code&gt;&lt;/a&gt; には tunsrc の設定が入っていないので、SRPerf で論文と同じ条件で測るときは tunsrc を足す必要があります。&lt;/p&gt;
&lt;h2 id="tunsrc-を設定しないと何が起きるのか"&gt;tunsrc を設定しないと何が起きるのか&lt;/h2&gt;
&lt;p&gt;外側の IPv6 ヘッダの送信元アドレスは、&lt;code&gt;net/ipv6/seg6_iptunnel.c&lt;/code&gt; の &lt;code&gt;set_tun_src()&lt;/code&gt; で決まります(&lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/ipv6/seg6_iptunnel.c?h=v7.1"&gt;v7.1 のソース&lt;/a&gt;)。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route_tunsrc&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;ipv6_addr_any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route_tunsrc&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;saddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;route_tunsrc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;in6_addr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;rcu_read_lock&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tun_src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rcu_dereference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sdata&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tun_src&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;ipv6_addr_any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tun_src&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;saddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tun_src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;in6_addr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;ipv6_dev_get_saddr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;daddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IPV6_PREFER_SRC_PUBLIC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;saddr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;route 毎の tunsrc(Linux 7.1 から)、network namespace 毎の tunsrc(&lt;code&gt;ip sr tunsrc set&lt;/code&gt; で設定するもの)の順に見て、どちらも &lt;code&gt;::&lt;/code&gt; なら &lt;code&gt;ipv6_dev_get_saddr()&lt;/code&gt; で選びます。tunsrc の初期値は &lt;code&gt;::&lt;/code&gt; なので、何も設定していなければ、ホストに付いているアドレスを RFC 6724 の規則で比べる処理を毎パケット実行しています。論文にある「the Linux kernel will try to get the address from the interface」は、この処理のことです。&lt;/p&gt;
&lt;h2 id="tunsrc-の有無で比較してみた"&gt;tunsrc の有無で比較してみた&lt;/h2&gt;
&lt;p&gt;測り方は論文に合わせ、SUT(測定対象のマシン)の 1 コアでパケットを処理し、PDR(Partial Drop Rate、パケットロス率 0.5% 以下で転送できる最大の送信レート)と MRR(Maximum Receive Rate、回線速度いっぱいで送ったときの受信レート)を 10 秒 × 10 回ずつ測っています。SUT の CPU は Xeon E5-2650 v3(2.30 GHz)で、T-Rex を動かす tester と Intel 82599ES(10GbE)で直結しています。IOMMU は passthrough(&lt;code&gt;iommu=pt&lt;/code&gt;)にしています。&lt;/p&gt;
&lt;p&gt;カーネルも設定も同じにして、tunsrc だけを &lt;code&gt;::&lt;/code&gt; と &lt;code&gt;12:2::2&lt;/code&gt; で切り替えました。tunsrc に設定した &lt;code&gt;12:2::2&lt;/code&gt; は、tunsrc が &lt;code&gt;::&lt;/code&gt; のときに選ばれるのと同じアドレスなので、2 回の測定で違うのは送信元アドレスの決め方だけです。比較のために、外側の IPv6 ヘッダを作らないので &lt;code&gt;set_tun_src()&lt;/code&gt; を通らない plain IPv6 と H.Insert(inline)も同じ条件で測りました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;tunsrc なし&lt;/th&gt;
&lt;th&gt;tunsrc あり&lt;/th&gt;
&lt;th&gt;変化&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;plain IPv6&lt;/td&gt;
&lt;td&gt;1196.0&lt;/td&gt;
&lt;td&gt;1192.2&lt;/td&gt;
&lt;td&gt;-0.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H.Insert&lt;/td&gt;
&lt;td&gt;998.3&lt;/td&gt;
&lt;td&gt;1001.3&lt;/td&gt;
&lt;td&gt;+0.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H.Encaps.V6&lt;/td&gt;
&lt;td&gt;569.8&lt;/td&gt;
&lt;td&gt;967.2&lt;/td&gt;
&lt;td&gt;+69.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H.Encaps.L2&lt;/td&gt;
&lt;td&gt;445.2&lt;/td&gt;
&lt;td&gt;656.2&lt;/td&gt;
&lt;td&gt;+47.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;(MRR、単位は kpps)&lt;/p&gt;
&lt;p&gt;plain IPv6 と H.Insert はほとんど変わらず、encap する 2 つだけが伸びました。tunsrc なしだと、ありと比べて H.Encaps.V6 で 41%、H.Encaps.L2 で 32% 遅くなりました。H.Encaps.L2 には tunsrc とは別に遅くなる原因があり、この数字はその修正を入れる前のカーネルで測ったものです(&lt;a href="https://www.higebu.com/blog/2026/10/01/srv6-l2encap/"&gt;次の記事&lt;/a&gt;で詳しく書いています)。&lt;/p&gt;
&lt;p&gt;PDR から 1 パケットあたりのサイクル数(2.30 GHz ÷ PDR)を計算すると、差は H.Encaps.V6 でも H.Encaps.L2 でも 1660〜1670 サイクルで、送信元アドレスの選択にかかる分だけが減っています。この差は、ホストに付いているアドレスの数によって変わる可能性がありますが、そこまでは測っていません。&lt;/p&gt;
&lt;p&gt;tunsrc を設定した H.Encaps.V6 の PDR は 976 kpps で、論文の約 978 kpps とほぼ同じです。&lt;/p&gt;
&lt;h2 id="tunsrc-の設定方法"&gt;tunsrc の設定方法&lt;/h2&gt;
&lt;p&gt;iproute2 では次のように設定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# network namespace 毎&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip sr tunsrc &lt;span class="nb"&gt;set&lt;/span&gt; 2001:db8::1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip sr tunsrc show
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# route 毎(Linux 7.1、iproute2 7.1 から)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip -6 route add 2001:db8:100::/64 encap seg6 mode encap tunsrc 2001:db8::1 segs fc00::1 dev eth0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;FRR では、設定(&lt;code&gt;frr.conf&lt;/code&gt;)に次のように書きます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;segment-routing
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; srv6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; encapsulation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; source-address 2001:db8::1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;FRR は、この &lt;code&gt;source-address&lt;/code&gt; を書かない限り tunsrc を設定しません。FRR を起動して確かめたところ、SRv6 の locator だけを設定した状態では &lt;code&gt;ip sr tunsrc show&lt;/code&gt; は &lt;code&gt;::&lt;/code&gt; のままで、&lt;code&gt;source-address&lt;/code&gt; を書くとそのアドレスになりました。bgpd の SRv6 L3VPN は route 毎の送信元アドレスも指定しないので、&lt;code&gt;source-address&lt;/code&gt; を書いていなければ、性能が落ちます。&lt;/p&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A. Abdelsalam, P. L. Ventre, C. Scarpitta, A. Mayer, S. Salsano, P. Camarillo, F. Clad, C. Filsfils, &amp;ldquo;&lt;a href="https://doi.org/10.1109/TNSM.2020.3048328"&gt;SRPerf: A Performance Evaluation Framework for IPv6 Segment Routing&lt;/a&gt;&amp;rdquo;, IEEE Transactions on Network and Service Management, vol. 18, no. 2, pp. 2320-2333, 2021&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SRouting/SRPerf"&gt;SRPerf&lt;/a&gt;(GitHub)と&lt;a href="https://github.com/higebu/SRPerf/tree/f91e3cd0508e47905df7e2f04c83ae1085a50f12"&gt;フォーク&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8986.html"&gt;RFC 8986: Segment Routing over IPv6 (SRv6) Network Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9433.html"&gt;RFC 9433: Segment Routing over IPv6 for the Mobile User Plane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc6724.html"&gt;RFC 6724: Default Address Selection for Internet Protocol Version 6 (IPv6)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/ipv6/seg6_iptunnel.c?h=v7.1"&gt;Linux v7.1 net/ipv6/seg6_iptunnel.c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.frrouting.org/en/latest/zebra.html#clicmd-source-address-X-X-X-X"&gt;FRR User Guide: Zebra, SRv6 の source-address&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>8ヵ月間育児休業を取ってどうだったか</title><link>https://www.higebu.com/blog/2022/12/11/childcare-leave/</link><pubDate>Sun, 11 Dec 2022 23:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2022/12/11/childcare-leave/</guid><description>&lt;p&gt;この記事は &lt;a href="https://adventar.org/calendars/7964"&gt;子育てエンジニア Advent Calendar 2022&lt;/a&gt; の12/11の記事です。&lt;/p&gt;
&lt;p&gt;2021/7/28から2022/3/31まで約8ヵ月間育児休業を取得していたので、育児休業どうだったのかの話と復帰してどうだったのかの話をしようと思います。&lt;/p&gt;
&lt;p&gt;当初の予定では2021/10/01復帰予定でしたが入れようとしていた保育園が定員に達してしまい入れなかったため3月末まで延長しました。&lt;/p&gt;
&lt;p&gt;子供は3人で6歳(小1)、4歳(年小)、1歳です。自分自身は36歳で2010年に社会人になってから12年経っています。。。&lt;/p&gt;
&lt;p&gt;現在の仕事の役割は会社全体のテックリードとモバイルコアを開発運用するチームのリーダーを兼任しています。&lt;/p&gt;
&lt;p&gt;育児休業に入る直前はテックリードは同じですがチームのリーダーはせずに当時リリースに向けて開発を行っていたサービスの開発に携わっていました。&lt;/p&gt;
&lt;p&gt;育児休業どうだったのかについてはよかったこととつらかったことについてまとめておき、最後に復帰してどうだったかを書いていきます。&lt;/p&gt;
&lt;h1 id="育児休業を取ってよかったこと"&gt;育児休業を取ってよかったこと&lt;/h1&gt;
&lt;p&gt;子供と接する時間がものすごく増えたことはよかったと思っています。産まれた子供だけでなく上の2人とのコミュニケーションも増えていたと思います。&lt;/p&gt;
&lt;p&gt;長女は年長で保育園のイベントも多かったのですが基本的にフル参加で何かの練習をしなければならないときにも平日の昼間にやることができて良いものが見せられたのではないかと思っています。&lt;/p&gt;
&lt;p&gt;具体的には親たちで劇をやるなど何か出し物をするイベントがあるのですが、そのためにリコーダーを異常にがんばったり祭囃子をやるために篠笛を吹けるようにしたりしました。&lt;/p&gt;
&lt;p&gt;このとき一緒に音楽をやったメンバーと保育園のクリスマスイベントでまた音楽をやる予定です。&lt;/p&gt;
&lt;h1 id="育児休業を取ってつらかったこと"&gt;育児休業を取ってつらかったこと&lt;/h1&gt;
&lt;p&gt;育児休業を延長したことにより収入が想定より大きく減ったことがつらかったです。特に最初の4ヵ月は一時的に無収入になり貯金が減っていくだけだったため頭では仕組み上しかたないとわかっていても精神的に来るものがありました。。。&lt;/p&gt;
&lt;p&gt;大きく減ったのは給付金に上限値があるためですが、これがなくなれば育児休業を取得する人は増えるだろうと思いました。上限値は &lt;a href="https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000135090_00001.html"&gt;厚生労働省のパンフレット&lt;/a&gt; で確認できます。&lt;/p&gt;
&lt;p&gt;収入が減ったことによりこども医療費助成制度の対象に戻り受給者証が発行されたのには苦笑してしまいました。&lt;/p&gt;
&lt;p&gt;最初の4ヵ月無収入になったのは給付金申請から実際の給付開始までに時間がかかるためで、長期の育児休業を取得する場合は注意が必要です。&lt;/p&gt;
&lt;h1 id="育児休業から復帰してどうだったか"&gt;育児休業から復帰してどうだったか&lt;/h1&gt;
&lt;p&gt;仕事に対するモチベーションが高い状態で復帰したため単純に長い休みがあっただけという感じで問題なく仕事に取り組めたと思います。ただ初期は考える速度が遅くなっているような、頭が鈍っているような感覚はありました。&lt;/p&gt;
&lt;p&gt;モチベーションが高まった理由は子供たちとたくさん接したり収入の大切さを深く理解させられたりしたためです。&lt;/p&gt;
&lt;p&gt;家族の生活を守りつつ子供たちの学費を貯蓄していかなければ。。。という気持ちでやっています。&lt;/p&gt;
&lt;p&gt;以前はこのような気持ちがなかったというわけではないのですが、かなり強化されました。&lt;/p&gt;
&lt;p&gt;幸い会社でやっている事業や業務内容自体が非常に面白いため、つらくないところがよかったと思っています。&lt;/p&gt;</description></item><item><title>久しぶりにVyOSのVagrant Boxを更新した</title><link>https://www.higebu.com/blog/2022/02/22/vyos-vagrant-box/</link><pubDate>Tue, 22 Feb 2022 14:18:09 +0900</pubDate><guid>https://www.higebu.com/blog/2022/02/22/vyos-vagrant-box/</guid><description>&lt;p&gt;&lt;img src="https://www.higebu.com/images/vyos-vagrant-box-search-result.png" alt="VyOS Vagrant Boxes"&gt;&lt;/p&gt;
&lt;h1 id="vyosのvagrant-box更新のお知らせ"&gt;VyOSのVagrant Box更新のお知らせ&lt;/h1&gt;
&lt;p&gt;5年ほど前に作成し、 &lt;a href="https://app.vagrantup.com/boxes/search?utf8=%E2%9C%93&amp;amp;sort=downloads&amp;amp;provider=&amp;amp;q=vyos"&gt;Vagrant Cloud&lt;/a&gt; で公開したVyOSのVagrant Boxですが、その後メンテせずに放置してしまっていました。&lt;/p&gt;
&lt;p&gt;使っていた方々には大変ご迷惑をおかけしました。&lt;/p&gt;
&lt;p&gt;しかし、 &lt;a href="https://www.ansible.com/blog/fumbling-through-networking"&gt;Ansible公式ブログ&lt;/a&gt; など、いろいろなところで &lt;code&gt;vagrant init higebu/vyos&lt;/code&gt; と記載されているのを思い出し、今更ですが、更新することにしました。&lt;/p&gt;
&lt;p&gt;現在は &lt;a href="https://app.vagrantup.com/higebu/boxes/vyos"&gt;higebu/vyos&lt;/a&gt; &lt;a href="https://app.vagrantup.com/vyos/boxes/current"&gt;vyos/current&lt;/a&gt; 共に最新のrolling releaseのVyOSを利用できるようになっています。&lt;/p&gt;
&lt;p&gt;また、GitHub Actionsで自動更新されるようにしていますので、本体に大きな変更がない限り、常に最新版が利用できるはずです。&lt;/p&gt;
&lt;h1 id="使い方"&gt;使い方&lt;/h1&gt;
&lt;p&gt;使い方は下記の通りです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant plugin install vagrant-vyos
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant init vyos/current
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="裏話"&gt;裏話&lt;/h1&gt;
&lt;p&gt;VMイメージをビルドするためのAnsible Playbookが &lt;a href="https://github.com/vyos/vyos-vm-images"&gt;https://github.com/vyos/vyos-vm-images&lt;/a&gt; にあるのですが、そのままでは元々あったlibvirt向けのplaybookも動かなかったため、いろいろと修正し、VirtualBox向けのplaybookも追加しました。&lt;/p&gt;
&lt;p&gt;修正したplaybookはforkした &lt;a href="https://github.com/higebu/vyos-vm-images"&gt;https://github.com/higebu/vyos-vm-images&lt;/a&gt; にあり、&lt;a href="https://github.com/vyos/vyos-vm-images/pull/22"&gt;Pull Request&lt;/a&gt; もしています。&lt;/p&gt;
&lt;p&gt;Vagrant Box以外のplaybookも壊れている可能性があるので、時間があれば修正していきたいと思っています。&lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;</description></item><item><title>Kibela のリンクを Slack に貼ったときに展開されるようにした</title><link>https://www.higebu.com/blog/2019/12/04/slack-app-unfurl-kibela/</link><pubDate>Wed, 04 Dec 2019 23:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2019/12/04/slack-app-unfurl-kibela/</guid><description>&lt;p&gt;この記事は &lt;a href="https://adventar.org/calendars/4517"&gt;BBSakura Networks Advent Calendar 2019&lt;/a&gt; の4日目の記事です。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.bbsakura.net/"&gt;BBSakura Networks&lt;/a&gt;では&lt;a href="https://kibe.la/ja"&gt;Kibela&lt;/a&gt;を使っていて、Slackでは日々Kibelaのリンクが飛び交っているのですが、リンクを貼っても展開されないため、何のドキュメントなのかわからず不便でした。
そこで、KibelaのリンクをSlackに貼ったときに展開されるようにするSlack Appを作ったので、使い方を書いておきます。
ソースコードは &lt;a href="https://github.com/higebu/slack-app-unfurl-kibela"&gt;https://github.com/higebu/slack-app-unfurl-kibela&lt;/a&gt; に置いてあります。&lt;/p&gt;
&lt;!-- PELICAN_END_SUMMARY --&gt;
&lt;p&gt;以下、手順です。&lt;/p&gt;
&lt;h1 id="kibelaのアクセストークンを取得する"&gt;Kibelaのアクセストークンを取得する&lt;/h1&gt;
&lt;p&gt;以下のURLにアクセスし、 &lt;code&gt;アクセストークンの作成&lt;/code&gt; ボタンをクリックすると作成できます。
権限は &lt;code&gt;read&lt;/code&gt; のみで大丈夫です。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://my.kibe.la/settings/access_tokens"&gt;https://my.kibe.la/settings/access_tokens&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="slack-appを作成する"&gt;Slack Appを作成する&lt;/h1&gt;
&lt;p&gt;以下の手順で作成します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://api.slack.com/apps"&gt;https://api.slack.com/apps&lt;/a&gt; を開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Create New App&lt;/code&gt; ボタンをクリック&lt;/li&gt;
&lt;li&gt;名前を入れて、 &lt;code&gt;Create App&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Event Subscriptions&lt;/code&gt; をクリック&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Enable Events&lt;/code&gt; を &lt;code&gt;On&lt;/code&gt; にする&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OAuth &amp;amp; Permissions&lt;/code&gt; を開き、 &lt;code&gt;Scopes&lt;/code&gt; で &lt;code&gt;link:write&lt;/code&gt; を追加する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App unfurl domains&lt;/code&gt; を展開し、 &lt;code&gt;Add Domain&lt;/code&gt; で、 &lt;code&gt;{TEAM_NAME}.kibe.la&lt;/code&gt; を入力し、 &lt;code&gt;Save Changes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;左メニューから &lt;code&gt;Install App&lt;/code&gt; を開き、 &lt;code&gt;Install App to Workspace&lt;/code&gt; -&amp;gt; &lt;code&gt;Allow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;OAuth Access Token が表示されるのでメモしておく&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;※後で戻ってくるので、Slack Appの管理画面は開いたままにしておきます。&lt;/p&gt;
&lt;h1 id="slack-app-unfurl-kibelaをデプロイ"&gt;slack-app-unfurl-kibelaをデプロイ&lt;/h1&gt;
&lt;h2 id="herokuにデプロイ"&gt;Herokuにデプロイ&lt;/h2&gt;
&lt;p&gt;下記のボタンからデプロイできます。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://heroku.com/deploy/?template=https://github.com/higebu/slack-app-unfurl-kibela"&gt;&lt;img src="https://www.herokucdn.com/deploy/button.svg" alt="Deploy"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;App name&lt;/code&gt; に入れた名前がURLになります。具体的には &lt;code&gt;https://{app name}.herokuapp.com/&lt;/code&gt; のようになります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;KIBELA_TEAM&lt;/code&gt; にはKibelaのチーム名、 &lt;code&gt;KIBELA_TOKEN&lt;/code&gt; にKibelaのアクセストークン、 &lt;code&gt;SLACK_TOKEN&lt;/code&gt; にSlackのOAuth Access Tokenを入力し、 &lt;code&gt;Deploy App&lt;/code&gt; ボタンを入力してください。&lt;/p&gt;
&lt;h2 id="gcpのcloud-runにデプロイ"&gt;GCPのCloud Runにデプロイ&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KIBELA_TEAM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KIBELA_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;SLACK_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PROJECT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;REPO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker-repo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IMAGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;slack-app-unfurl-kibela
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/higebu/slack-app-unfurl-kibela.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; slack-app-unfurl-kibela
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gcloud projects create &lt;span class="nv"&gt;$PROJECT_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gcloud config &lt;span class="nb"&gt;set&lt;/span&gt; project &lt;span class="nv"&gt;$PROJECT_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$KIBELA_TEAM&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; gcloud secrets create KIBELA_TEAM --data-file -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$KIBELA_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; gcloud secrets create KIBELA_TOKEN --data-file -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$SLACK_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; gcloud secrets create SLACK_TOKEN --data-file -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gcloud artifacts repositories create docker-repo &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --repository-format&lt;span class="o"&gt;=&lt;/span&gt;docker &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --location asia-northeast1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gcloud builds submit &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --config&lt;span class="o"&gt;=&lt;/span&gt;cloudbuild.yaml &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --substitutions&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;_REPOSITORY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$REPO&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;,_IMAGE&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$IMAGE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;リポジトリの更新時に自動でデプロイするためにトリガーの設定をします。
※フォークしたリポジトリを使う必要があります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;OWNER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gcloud beta builds triggers create github &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name&lt;span class="o"&gt;=&lt;/span&gt;trigger-slack-unfurl-kibela &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --repo-name&lt;span class="o"&gt;=&lt;/span&gt;slack-app-unfurl-kibela &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --repo-owner&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$OWNER&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --branch-pattern&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;^master$&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --build-config&lt;span class="o"&gt;=&lt;/span&gt;cloudbuild.yaml &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --substitutions&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;_REPOSITORY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$REPO&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;,_IMAGE&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$IMAGE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="slack-appにurlを登録"&gt;Slack AppにURLを登録&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Event Subscriptions&lt;/code&gt; を開き、 &lt;code&gt;Request URL&lt;/code&gt; に &lt;code&gt;https://{app name}.herokuapp.com/&lt;/code&gt; を入力する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Verified&lt;/code&gt; と表示さたら &lt;code&gt;Enable Events&lt;/code&gt; を &lt;code&gt;On&lt;/code&gt; にして &lt;code&gt;Save Changes&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="動作確認"&gt;動作確認&lt;/h1&gt;
&lt;p&gt;SlackでKibelaのリンクを含んだメッセージを投稿してみてください。
下記のように展開されるはずです。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20191204-slack-unfurl-kibela.png" alt="slack-unfurl-kibela"&gt;&lt;/p&gt;</description></item><item><title>XDP metadata が VLAN パケットのときに失われるバグを修正した</title><link>https://www.higebu.com/blog/2019/05/06/fix-missing-xdp-meta-data-in-skb-with-vlan-packet/</link><pubDate>Mon, 06 May 2019 14:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2019/05/06/fix-missing-xdp-meta-data-in-skb-with-vlan-packet/</guid><description>&lt;h2 id="パッチ"&gt;パッチ&lt;/h2&gt;
&lt;p&gt;パッチは &lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d85e8be2a5a02869f815dd0ac2d743deb4cd7957"&gt;こちら&lt;/a&gt; で、stable では &lt;a href="https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.19.37"&gt;4.19.37&lt;/a&gt; か &lt;a href="https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.0.10"&gt;5.0.10&lt;/a&gt; からこの修正が入っています。&lt;/p&gt;
&lt;p&gt;内容としては &lt;code&gt;bpf_xdp_adjust_meta()&lt;/code&gt; でパケットに付けたメタデータが skb のビルドプロセス内の &lt;code&gt;skb_vlan_untag()&lt;/code&gt; (さらに詳しく言うと &lt;code&gt;skb_reorder_vlan_header()&lt;/code&gt; ) で失われて tc の cls_bpf などで参照できない問題を修正したものです。&lt;/p&gt;
&lt;h2 id="linux-へのパッチの送り方について"&gt;Linux へのパッチの送り方について&lt;/h2&gt;
&lt;p&gt;公式ドキュメントにパッチの送り方 &lt;a href="https://www.kernel.org/doc/html/latest/process/submitting-patches.html"&gt;Submitting patches: the essential guide to getting your code into the kernel&lt;/a&gt; が書いてあるので、これを読めばだいたいわかるようになっていました。&lt;/p&gt;
&lt;p&gt;また、今回はネットワーク関連だったので、 &lt;a href="https://www.kernel.org/doc/html/latest/networking/netdev-FAQ.html"&gt;netdev FAQ&lt;/a&gt; も読んだところ、バグフィックスは &lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git"&gt;net&lt;/a&gt; ブランチ、新機能は &lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git"&gt;net-next&lt;/a&gt; ブランチということがわかり、 &lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git"&gt;net&lt;/a&gt; ブランチにパッチを送りました。&lt;/p&gt;
&lt;p&gt;その他に注意する点として、メールの送り方があり、これは &lt;a href="https://www.kernel.org/doc/html/latest/process/email-clients.html"&gt;Email clients info for Linux&lt;/a&gt; というページにまとまっています。&lt;/p&gt;
&lt;p&gt;自分はこれを読まずに &lt;code&gt;git imap-send&lt;/code&gt; から Gmail Web Clientでメールしてしまい、 &lt;a href="https://patchwork.ozlabs.org/patch/1085113/"&gt;タブが全滅したパッチ&lt;/a&gt; を送ってしまいました。&lt;/p&gt;
&lt;p&gt;最終的に Thunderbird でメールしましたが、 &lt;code&gt;git send-email&lt;/code&gt; が一番シンプルで楽そうです。&lt;/p&gt;
&lt;h2 id="debian-でのカーネルのビルド方法について"&gt;Debian でのカーネルのビルド方法について&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://kernel-team.pages.debian.net/kernel-handbook/index.html"&gt;Debian Linux Kernel Handbook&lt;/a&gt; の &lt;a href="https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html"&gt;Chapter 4. Common kernel-related tasks&lt;/a&gt; が詳しいです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LOCALVERSION&lt;/code&gt; を付けておくとわかりやすいので下記のようなコマンドでビルドしています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make -j&lt;span class="sb"&gt;`&lt;/span&gt;nproc&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="nv"&gt;LOCALVERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-hoge bindeb-pkg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="感想"&gt;感想&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;VLAN の処理をハードウェアオフロードしない場合、カーネルが VLAN の処理をするけど、 skb をビルドするときに VLAN ヘッダはパケットデータからは消えてしまうということ自体初めて知ったし、ドライバのソースを追ったりして、全体的に良い経験になった&lt;/li&gt;
&lt;li&gt;たぶん今まで VLAN と &lt;code&gt;bpf_xdp_adjust_meta()&lt;/code&gt; を組み合わせて使ったことのある人がいなかった&lt;/li&gt;
&lt;li&gt;メール難しい&lt;/li&gt;
&lt;li&gt;eBPF/XDP と Linux Network Stack を組み合わせてパケットをいじる方法についてかなり詳しくなった&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>XDP のプログラムをビルドする方法</title><link>https://www.higebu.com/blog/2019/01/20/how-to-build-xdp-program/</link><pubDate>Sun, 20 Jan 2019 00:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2019/01/20/how-to-build-xdp-program/</guid><description>&lt;h2 id="前置き"&gt;前置き&lt;/h2&gt;
&lt;p&gt;社内向けにコントロールプレーンが Go で、データプレーンが XDP な Network Function を作る方法をまとめていましたが、特に社内に閉じている必要のない情報なので、こちらに書いていきます。&lt;/p&gt;
&lt;p&gt;Go で XDP/eBPF というと &lt;a href="https://github.com/iovisor/gobpf"&gt;gobpf&lt;/a&gt; が &lt;a href="https://www.iovisor.org/"&gt;IO Visor&lt;/a&gt; 公式ということもあって有名ですが、いろいろあって使っていません。&lt;/p&gt;
&lt;p&gt;使わなくなった理由は後で。。。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/iovisor/gobpf"&gt;gobpf&lt;/a&gt; を使わない場合、自分で XDP のプログラムをビルドする必要があります。&lt;/p&gt;
&lt;p&gt;そこで、とりあえずビルドする方法についてまとめておきます。&lt;/p&gt;
&lt;h2 id="xdp-のプログラムをビルドする方法"&gt;XDP のプログラムをビルドする方法&lt;/h2&gt;
&lt;p&gt;XDP のプログラムをビルドするときに参考になるのは Linux の &lt;a href="https://github.com/torvalds/linux/tree/master/samples/bpf"&gt;samples/bpf&lt;/a&gt; や Facebook の &lt;a href="https://github.com/facebookincubator/katran"&gt;Katran&lt;/a&gt; で、どちらもカーネルのソースツリー内でビルドする方法を取っています。&lt;/p&gt;
&lt;p&gt;説明するのが面倒なので、 XDP のプログラムをビルドするためのテンプレートとして &lt;a href="https://github.com/higebu/ebpf-template"&gt;ebpf-template&lt;/a&gt; を作りました。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone&lt;/code&gt; した後に、 &lt;code&gt;./setup.sh&lt;/code&gt; して &lt;code&gt;./build.sh&lt;/code&gt; が通ったら XDP のプログラムを開発する環境がすでに整っていて、通らなかったら、何か足りないのでパッケージを入れるなりして解決してください。&lt;/p&gt;
&lt;p&gt;Debian の場合 &lt;code&gt;gcc clang llvm make linux-headers-amd64 bison flex libelf-dev bc libssl-dev&lt;/code&gt; 辺りは必要です。&lt;/p&gt;
&lt;p&gt;このテンプレートでは &lt;a href="https://github.com/torvalds/linux/tree/master/tools/testing/selftests/bpf"&gt;tools/testing/selftests/bpf&lt;/a&gt; 配下の &lt;a href="https://github.com/torvalds/linux/blob/master/tools/testing/selftests/bpf/bpf_helpers.h"&gt;bpf_helpers.h&lt;/a&gt; などを使うことを前提にしています。&lt;/p&gt;
&lt;p&gt;そのため、 &lt;code&gt;#include &amp;quot;bpf_helpers.h&amp;quot;&lt;/code&gt; をして、 &lt;code&gt;bpf_map_lookup_elem&lt;/code&gt; などの関数を使えて、 &lt;a href="https://github.com/torvalds/linux/tree/master/samples/bpf"&gt;samples/bpf&lt;/a&gt; 配下のプログラムと同じ雰囲気で開発することができます。&lt;/p&gt;
&lt;p&gt;また、ビルド環境は Docker コンテナにもしてあるので、こちらも参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cloud.docker.com/repository/docker/higebu/ebpf-build"&gt;higebu/ebpf-build&lt;/a&gt;&lt;/p&gt;</description></item><item><title>TCPパケットがGeneric XDPで処理されない件について</title><link>https://www.higebu.com/blog/2018/11/07/tcp-packet-is-not-processed-by-generic-xdp/</link><pubDate>Wed, 07 Nov 2018 12:55:00 +0000</pubDate><guid>https://www.higebu.com/blog/2018/11/07/tcp-packet-is-not-processed-by-generic-xdp/</guid><description>&lt;p&gt;Twitterにも書いたけど忘れそうなのでメモしておく。&lt;/p&gt;
&lt;p&gt;下記の図のような構成でns2のveth2とveth3にXDPのプログラムをアタッチし、 &lt;code&gt;XDP_REDIRECT&lt;/code&gt; でns1とns3の間でパケットが往復できるかどうかテストしていたときにTCPのパケットだけ通らなかった。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20181107-network-diagram.png" alt="network-diagram"&gt;
ググったところ下記のメールスレッドが見つかり、結論としてはGeneric XDPではTCPのパケットがPASSされていて、アタッチしたXDPのプログラムを通らない。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.spinics.net/lists/xdp-newbies/msg00440.html"&gt;Generic XDP and veth&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;実際のソースは &lt;a href="https://github.com/torvalds/linux/blob/v4.18/net/core/dev.c#L4028-L4032"&gt;ここ&lt;/a&gt; でXDPのプログラムに入る前に &lt;code&gt;XDP_PASS&lt;/code&gt; している。&lt;/p&gt;
&lt;p&gt;回避策としては、Native XDPをサポートしているNICを使うか、下記のパッチをカーネルに当てるかで、カーネルのパッチで回避ができることは確認した。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/cilium/cilium/issues/3077#issuecomment-430801467"&gt;cilium/cilium#3077 (comment)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>VyOS 1.2でDockerを動かす</title><link>https://www.higebu.com/blog/2018/03/19/docker-on-vyos-1.2/</link><pubDate>Mon, 19 Mar 2018 12:43:00 +0000</pubDate><guid>https://www.higebu.com/blog/2018/03/19/docker-on-vyos-1.2/</guid><description>&lt;p&gt;最近、VyOS 1.2のカーネルでコンテナを動かすのに必要なオプションを有効にしたので、Dockerも動くようになりました。
追加したときのPRは&lt;a href="https://github.com/vyos/vyos-kernel/pull/16"&gt;これ&lt;/a&gt;と&lt;a href="https://github.com/vyos/vyos-kernel/pull/17"&gt;これ&lt;/a&gt;で、4.4系のカーネルに入れたのにすぐに4.14系になって、そのとき漏れてたものを追加したので2回になっている。）&lt;/p&gt;
&lt;h3 id="準備"&gt;準備&lt;/h3&gt;
&lt;p&gt;VyOS 1.2はまだリリースされていませんが、開発版を下記からダウンロードできます。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://downloads.vyos.io/?dir=rolling/current/amd64"&gt;https://downloads.vyos.io/?dir=rolling/current/amd64&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これをどこかで動かしてください。&lt;/p&gt;
&lt;p&gt;このとき、Dockerストレージ用のディスクを追加で付けておきます。（ここでは &lt;code&gt;/dev/vdb&lt;/code&gt; として認識されるとします。）&lt;/p&gt;
&lt;p&gt;Dockerストレージ用のディスクを別にするのは、VyOSではルートディスクをすでにoverlayfsでマウントしているからです。&lt;/p&gt;
&lt;p&gt;詳しくは &lt;a href="https://docs.docker.com/storage/storagedriver/select-storage-driver/#supported-backing-filesystems"&gt;Supported backing filesystems&lt;/a&gt; を参照。&lt;/p&gt;
&lt;p&gt;起動できたら下記のようにするとDockerが動きます。&lt;/p&gt;
&lt;h3 id="dockerストレージ用マウントポイント作成"&gt;Dockerストレージ用マウントポイント作成&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo mkfs.ext4 /dev/vdb
sudo mkdir /mnt/docker-data
echo &amp;#39;/dev/vdb /mnt/docker-data ext4 defaults 0 0&amp;#39; | sudo tee -a /etc/fstab
sudo mount /mnt/docker-data
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="dockerデーモンの設定ファイル作成"&gt;Dockerデーモンの設定ファイル作成&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo mkdir /etc/docker
echo &amp;#39;{&amp;#34;data-root&amp;#34;: &amp;#34;/mnt/docker-data&amp;#34;,&amp;#34;storage-driver&amp;#34;: &amp;#34;overlay&amp;#34;}&amp;#39; | sudo tee /etc/docker/daemon.json
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="debianリポジトリ追加"&gt;Debianリポジトリ追加&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;configure
set system package repository jessie components &amp;#39;main contrib non-free&amp;#39;
set system package repository jessie distribution jessie
set system package repository jessie url &amp;#39;http://deb.debian.org/debian&amp;#39;
commit
save
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="必須パッケージインストール"&gt;必須パッケージインストール&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="dockerインストール"&gt;Dockerインストール&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;set system package repository docker components stable
set system package repository docker distribution jessie
set system package repository docker url https://download.docker.com/linux/debian
commit
save
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo apt update
sudo apt install -y docker-ce
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="vyosユーザをdockerグループに追加"&gt;vyosユーザをdockerグループに追加&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;set system login user vyos group docker
commit
save
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="確認"&gt;確認&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker info
docker run --rm hello-world
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;docker info&lt;/code&gt; の結果は下記のようになります。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 1
Server Version: 17.12.1-ce
Storage Driver: overlay
Backing Filesystem: extfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9b55aab90508bd389d7654c4baf173a981477d55
runc version: 9f9c96235cc97674e935002fc3d78361b696a69e
init version: 949e6fa
Kernel Version: 4.14.26-amd64-vyos
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 489.6MiB
Name: vyos
ID: RPQC:225S:FULT:3434:AASR:CASH:NS7I:OQ4K:AYA2:DQMG:AGFM:CB3I
Docker Root Dir: /mnt/docker-data
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="おまけ-vagrantfile"&gt;おまけ: Vagrantfile&lt;/h3&gt;
&lt;p&gt;Vagrantとlibvirtが使える人は下記のVagrantfileを使うとサッと試せます。
他の環境でもディスク追加部分を書き換えればいけるはずです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -*- mode: ruby -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# vi: set ft=ruby :&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;vyos/current&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt; &lt;span class="ss"&gt;:libvirt&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;libvirt&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;libvirt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="ss"&gt;:file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;20G&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provision&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;shell&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;inline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;&amp;lt;-SHELL
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;mkfs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ext4&lt;/span&gt; &lt;span class="sr"&gt;/dev/&lt;/span&gt;&lt;span class="n"&gt;vdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="sr"&gt;/mnt/&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/dev/vdb /mnt/docker-data ext4 defaults 0 0&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;tee&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="sr"&gt;/etc/&lt;/span&gt;&lt;span class="n"&gt;fstab&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;mount&lt;/span&gt; &lt;span class="sr"&gt;/mnt/&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="sr"&gt;/etc/&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{&amp;#34;data-root&amp;#34;: &amp;#34;/mnt/docker-data&amp;#34;,&amp;#34;storage-driver&amp;#34;: &amp;#34;overlay&amp;#34;}&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;tee&lt;/span&gt; &lt;span class="sr"&gt;/etc/&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;daemon&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="sr"&gt;/opt/&lt;/span&gt;&lt;span class="n"&gt;vyatta&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;configure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;jessie&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;main contrib non-free&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;jessie&lt;/span&gt; &lt;span class="n"&gt;distribution&lt;/span&gt; &lt;span class="n"&gt;jessie&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;jessie&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;http://deb.debian.org/debian&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;save&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt; &lt;span class="n"&gt;ca&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;certificates&lt;/span&gt; &lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="n"&gt;gnupg2&lt;/span&gt; &lt;span class="n"&gt;software&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;common&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;docker&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt; &lt;span class="n"&gt;stable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;docker&lt;/span&gt; &lt;span class="n"&gt;distribution&lt;/span&gt; &lt;span class="n"&gt;jessie&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;docker&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="ss"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;save&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fsSL&lt;/span&gt; &lt;span class="ss"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;debian&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gpg&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ce&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="n"&gt;login&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;vyos&lt;/span&gt; &lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="n"&gt;docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;commit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;save&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="no"&gt;SHELL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/higebu/af2be3de0c5861f2a9b36a7f4e71ffa8"&gt;Vagrantfile (Gist)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>2017年振り返り</title><link>https://www.higebu.com/blog/2017/12/31/look-back-2017/</link><pubDate>Sun, 31 Dec 2017 22:35:00 +0000</pubDate><guid>https://www.higebu.com/blog/2017/12/31/look-back-2017/</guid><description>&lt;p&gt;今年ブログ書いてなかったことにさっき気付いた😇&lt;/p&gt;
&lt;p&gt;今年のまとめとしては&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;娘が1歳になった&lt;/li&gt;
&lt;li&gt;8月に北海道に転勤した&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上という感じ。&lt;/p&gt;
&lt;h1 id="仕事とか技術的な話"&gt;仕事とか技術的な話&lt;/h1&gt;
&lt;p&gt;仕事の成果は近々&lt;a href="https://sakura-chushikoku.doorkeeper.jp/events/68861"&gt;さくらの夕べ in すごい広島&lt;/a&gt;で話すので、それ聞きに来てくださいという感じで、それの後になればいろいろ書けるようになると思うので、気が向いたら何か書く。&lt;/p&gt;
&lt;p&gt;あと&lt;a href="https://github.com/sakuraio/fluent-plugin-sakuraio"&gt;fluent-plugin-sakuraio&lt;/a&gt;というのを作った。これはsakura.ioの通信モジュールとのやり取りをfluentdでやれるプラグインで、詳細は&lt;a href="https://sakura.io/blog/2017/11/01/release-fluent-plugin-sakuraio/"&gt;sakura.ioの公式ブログ&lt;/a&gt;参照。&lt;/p&gt;
&lt;p&gt;仕事以外ではVyOS 1.1.8リリースにちょっと貢献した。&lt;a href="http://blog.vyos.net/1-dot-1-8-release-is-available-for-download"&gt;公式ブログのリリースアナウンス&lt;/a&gt;に名前載ってるのでがんばった感がある。&lt;/p&gt;
&lt;p&gt;今年はインプットが多く、アウトプットはクローズドな世界にばかりしていたので、来年はもう少しいろいろオープンにしていきたいと思う。&lt;/p&gt;
&lt;h1 id="北海道の話"&gt;北海道の話&lt;/h1&gt;
&lt;p&gt;小樽市に住んでいるんだけど、水がおいしい。あとスーパーで売ってるとうもろこしとか牛乳とか魚とかが格段においしい。&lt;/p&gt;
&lt;p&gt;雪は札幌よりは多いけど石狩よりはマシという感じ。1日で数十cm積もることはある。車は今のところ、雪道より凍った道がつらく、氷で轍ができている道が最悪だった。&lt;/p&gt;
&lt;h1 id="子供の話"&gt;子供の話&lt;/h1&gt;
&lt;p&gt;このブログを実家で書いているんだけど、祖母に慣れて歯磨きの仕上げをしてもらえるくらいになったのでよかった。昨年は抱っこされてギャーギャー泣いていた。&lt;/p&gt;
&lt;p&gt;保育園にかなり馴染んで帰るのが嫌そうになってきた。体を動かすのを大事にしているところなので、とても体力が付いて、1kmちょっと離れている保育園に機嫌が良ければ歩いて行けるくらいになった。逆に休みの日にかなり運動させないと寝られない。&lt;/p&gt;
&lt;p&gt;自分の話になってしまうけど、年末に保育園の親と先生たちで餅をついて販売したのがとても印象に残っていて、2日で93臼ついたのでひどい筋肉痛になり、今でも右腕が痛いままになっている。3臼で、1臼のつき手を3-5人でやっていて、1臼つき終わるのに合計だいたい100回程度ついていた気がする。1人500回くらいはついていた計算になると思う。&lt;/p&gt;
&lt;p&gt;子供もどんどん元気になっていくので来年以降自分も体力をつけていかなければなと思った。&lt;/p&gt;
&lt;p&gt;良いお年を。&lt;/p&gt;</description></item><item><title>2016年振り返り</title><link>https://www.higebu.com/blog/2016/12/30/look-back-2016/</link><pubDate>Fri, 30 Dec 2016 13:24:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/12/30/look-back-2016/</guid><description>&lt;p&gt;2016年は、&lt;a href="https://www.higebu.com/blog/2016/12/14/life-of-engineer-with-wife-and-0-years-old-daughter/"&gt;先日のブログ&lt;/a&gt;でも書きましたが、2月に子供が産まれ、8月に転職したので、大きなイベントの多い年でした。&lt;/p&gt;
&lt;p&gt;GitHub上での活動は下記のような感じで、後半が少ないものの、昨年とあまり変わらない感じでした。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/2016-github-contributions.png" alt="2016-github-contributions"&gt;
前半の転職前は&lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;で遊んでいたので、&lt;a href="https://github.com/hashicorp/terraform/pull/5558"&gt;Terraformにプルリクエスト&lt;/a&gt;していたようです。&lt;/p&gt;
&lt;p&gt;社内リポジトリのContributionsはこんな感じでした。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/2016-internal-github-contributions.png" alt="2016-internal-github-contributions"&gt;
転職後、どれくらい社内でコードを書いたのか調べたところ、 &lt;code&gt;128 commits, 17870 lines, (+13281 -4589)&lt;/code&gt; という結果でした。
言語はほぼGoです。初めて関わる領域の技術ばかりなので、Go以外にも大変勉強になりました。
リリースできたら中身についてどこかで紹介できたら良いなと思っています。&lt;/p&gt;
&lt;h3 id="勉強会関連"&gt;勉強会関連&lt;/h3&gt;
&lt;p&gt;今年はあまり参加も登壇もしてませんでした。
子供がいると、平日夜、休日のイベントへの参加が大変難しいので、このような結果になりました。
なぜ難しいかというと、1人で家事と育児をこなすのは大変すぎるので、なるべく妻が1人にならないようにしたいというのと、単純に娘と一緒にいたいからです。&lt;/p&gt;
&lt;p&gt;登壇したイベント&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://2016.cross-party.com/program/b1"&gt;CROSS 2016 日本のIaaS裏トーク〜インフラ×ソフトウェア〜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://iaas-casual.connpass.com/event/28046/"&gt;IaaS Casual Talks #1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="vyosについて"&gt;VyOSについて&lt;/h3&gt;
&lt;p&gt;2014年の終わりくらいから、メインの業務がVyOSと関係のない業務になっていたこともあり、勉強会とかコミュニティ活動に関しては完全にサボっておりました。大変申し訳ありません。&lt;/p&gt;
&lt;p&gt;VyOS自体は最近の&lt;a href="http://blog.vyos.net/"&gt;本家のブログ&lt;/a&gt;を見てもわかる通り、つらい状況ではあるものの、死んではいません。
世の中には本番環境で使っている方々がたくさんおり、なくなったら困るということで、次期バージョンのテストの協力をしたいという方も徐々に集まってきています。
自分もたぶん大丈夫だろうと信じてなるべく開発に関わりたいと思っています。&lt;/p&gt;
&lt;p&gt;コードでの貢献としては、1.2で様々な環境用の公式イメージを提供したいということで、KVM、VMware、Hyper-V用のイメージをビルドするためのスクリプトを &lt;a href="https://github.com/vyos/vyos-build"&gt;vyos-build&lt;/a&gt; に追加したことくらいです。
それに関連して、&lt;a href="https://github.com/higebu/vyos-cloudinit"&gt;vyos-cloudinit&lt;/a&gt;というcloud-init風の何かを作りかけています。&lt;/p&gt;
&lt;p&gt;また、Vagrant用のboxが腐っていたので、&lt;a href="https://atlas.hashicorp.com/higebu/boxes/vyos/"&gt;まともに動くbox&lt;/a&gt;と&lt;a href="https://github.com/higebu/packer-templates/"&gt;Packerテンプレート&lt;/a&gt;をアップしました。
他には自動テストの仕組みのプロトタイプを作りたいなと思って、いろいろ試しています。&lt;/p&gt;
&lt;p&gt;勉強会に関しては、来年早々に&lt;a href="https://vyosjp.connpass.com/event/47319/"&gt;VyOS Users Meeting Japan #3&lt;/a&gt;を開催予定です。
これは見ていただくとわかる通り、&lt;a href="https://geeknavi.net/"&gt;ギークナビ&lt;/a&gt;というブログの中の人たちから勉強会やコミュニティ活動に協力したいという大変ありがたいご連絡があり、実現したものです。
今後は定期的に開催していけると良いなと思っています。&lt;/p&gt;
&lt;h2 id="最後に"&gt;最後に&lt;/h2&gt;
&lt;p&gt;娘が産まれたというのが大きい1年でした。
やっているうちに家事や育児もいろいろとできるようになってきている気がするし、父親というのはいきなりなるものではなく、子供が産まれてから段々育っていくものなんだなというのを実感しています。
来年には娘が1歳になり、立ったり、言葉を発するようになったりすると思うので、大変楽しみです。&lt;/p&gt;
&lt;p&gt;転職前も後も子育てに関して大変寛容な人たちに恵まれており、大変感謝しています。
来年もいろいろとご迷惑をおかけすると思いますがよろしくお願いいたします。&lt;/p&gt;</description></item><item><title>妻と0歳の娘がいるエンジニアの生活</title><link>https://www.higebu.com/blog/2016/12/14/life-of-engineer-with-wife-and-0-years-old-daughter/</link><pubDate>Wed, 14 Dec 2016 22:12:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/12/14/life-of-engineer-with-wife-and-0-years-old-daughter/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;1日遅れてしまいましたが、これは&lt;a href="http://www.adventar.org/calendars/1559"&gt;【その2】妻・夫を愛してるITエンジニア Advent Calendar 2016&lt;/a&gt;の12/13の記事です。
12/12は妻でした。
夫婦一緒に家で同じ仕事をしているのは珍しいかもしれないので、その辺りの話をします。&lt;/p&gt;
&lt;h2 id="自分について"&gt;自分について&lt;/h2&gt;
&lt;p&gt;自分は30歳、社会人7年目のエンジニアで、今年の2月に父親になり、8月に転職して、現在はさくらインターネットのIoTチームで働いています。&lt;/p&gt;
&lt;p&gt;前職でも3月から在宅勤務のトライアルに参加していて、週1日フル在宅、2日早く帰るということをしていましたが、現在はほぼ完全に在宅で、他社の方との打ち合わせや、ホワイトボードがいるような会議のときだけ出社しています。&lt;/p&gt;
&lt;p&gt;また、給与が年俸制になり、働き放題になりました。&lt;/p&gt;
&lt;p&gt;といっても寝る前の1、2時間しか自由な時間は作れず、大抵はさっさと寝ているので仕事以外で勉強や技術調査のようなことをする時間はかなり減りました。&lt;/p&gt;
&lt;p&gt;その分、仕事の時間に全力を投入していて、昼間の生産性が高まった気がします。
夕方から本気を出していた以前の自分からは全く想像できない変化です。&lt;/p&gt;
&lt;h2 id="妻について"&gt;妻について&lt;/h2&gt;
&lt;p&gt;妻のブログにも書いてありますが、猫の手も借りたいくらい手が足りなかったため、10月から妻に開発の一部を手伝ってもらっています。
妻は仕事を辞めていたこともあり、技術力は新人並でしたが、やる気があったのでお願いしました。&lt;/p&gt;
&lt;p&gt;結婚してからペアプロすることになるとは思いませんでしたが、仕事なのでキャッキャウフフというような雰囲気は全くなく、大変真剣に議論しています。&lt;/p&gt;
&lt;p&gt;Goを書いてもらっていますが、「&lt;a href="http://pub.maruzen.co.jp/book_magazine/news_event/2016/130025.html"&gt;プログラミング言語Go&lt;/a&gt;」と「&lt;a href="http://gihyo.jp/book/2016/978-4-7741-8392-3"&gt;みんなのGo言語&lt;/a&gt;」、&lt;a href="https://go-tour-jp.appspot.com/"&gt;A Tour of Go&lt;/a&gt;のリンクを渡したくらいで、なんとかできています。
Goの仕様がシンプルだったのがよかったみたいです。&lt;/p&gt;
&lt;p&gt;結果的には10月から始めて、すでにコードにコミットできているし、任せた部分に関しては自分より詳しくなっているため、お願いしてよかったと思っています。
この調子でがんばって欲しいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;妻のブログにネットワークエンジニアかなというようなことが書いてありますが、たぶんソフトウェアエンジニアです。&lt;/li&gt;
&lt;li&gt;自分のせいでVimmerになったみたいに書いてありますが、強制はしていません。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="生活について"&gt;生活について&lt;/h2&gt;
&lt;p&gt;変わることがありますが、自分が担当しているのはほぼ下記の家事です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;保育園お迎え&lt;/li&gt;
&lt;li&gt;娘に朝ご飯を食べさせる&lt;/li&gt;
&lt;li&gt;ゴミ捨て&lt;/li&gt;
&lt;li&gt;朝と夕方の洗濯&lt;/li&gt;
&lt;li&gt;風呂洗い&lt;/li&gt;
&lt;li&gt;娘をお風呂に入れる&lt;/li&gt;
&lt;li&gt;食事の片付け&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;料理に関しては自分がやると品数が減ったり、クオリティが下がったりするので、あまりやれていません。
大変申し訳ないです。&lt;/p&gt;
&lt;p&gt;上の方にも書きましたが、お互いに自分の時間というものはほぼないです。
自分は仕事が趣味みたいなものなので、あまり問題ではないのですが、妻はそうではないようなので、なんとかしたいと思っています。&lt;/p&gt;
&lt;h2 id="最後に娘の話"&gt;最後に(娘の話)&lt;/h2&gt;
&lt;p&gt;娘は異常にかわいいです。&lt;/p&gt;
&lt;p&gt;元々子供は好きな方でしたが、自分の子供というのはこんなにかわいいのかというほどかわいいです。&lt;/p&gt;
&lt;p&gt;娘がご飯の野菜を投げたり、取り込んだばかりの洗濯物をよだれでベチャベチャにしたり、電源を抜いたりしても微笑ましく見えます。&lt;/p&gt;
&lt;p&gt;多少つらいことがあっても娘の笑顔や寝顔を見るだけで大抵回復しますし、がんばろうと思えます。&lt;/p&gt;
&lt;p&gt;子育ては本当に良いものです。おすすめです。&lt;/p&gt;</description></item><item><title>ニフティを退職します</title><link>https://www.higebu.com/blog/2016/07/31/2016-07-31-leaving-nifty/</link><pubDate>Sun, 31 Jul 2016 23:09:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/07/31/2016-07-31-leaving-nifty/</guid><description>&lt;p&gt;7月末というか今日付でニフティを退職します。&lt;/p&gt;
&lt;p&gt;ニフティには学生時代のインターンからお世話になっており、入社前アルバイトも入れると6年10ヶ月ほどお世話になりました。&lt;/p&gt;
&lt;p&gt;入社前アルバイトでのニフティクラウドリリースの手伝いからは、1年間の新人研修を除き、ずっとニフティクラウド関連の仕事をさせていただきました。
ニフティクラウド関連と言っても、クラウドストレージ、コントロールパネル（UI/API）、ファイアウォール、VPNゲートウェイ、ルーター、DR、など様々なサービス、レイヤーの、幅広い技術に触れることができました。
だいたい1年か2年でやっていることが変わっていた感じです。&lt;/p&gt;
&lt;p&gt;中でも、ニフティクラウドのネットワークとL2TPv3 over IPsecでVPN接続ができる機能では、&lt;a href="http://vyos.io/"&gt;VyOS&lt;/a&gt;本体の機能追加にも貢献でき、大変良い経験でした。
&lt;a href="http://vyos.io/"&gt;VyOS&lt;/a&gt;以外にも業務の過程で&lt;a href="https://github.com/mitchellh/packer"&gt;Packer&lt;/a&gt;などいくつかのOSSの機能追加やバグ修正に貢献できました。
このようなオープンな雰囲気はニフティの良いところだと思います。&lt;/p&gt;
&lt;p&gt;最後の3年ちょっとは &lt;a href="https://twitter.com/ysaotome"&gt;@ysaotome&lt;/a&gt; さんのチームでしたが、後輩たちにも恵まれ、チーム名に関係なく何でもやる大変面白いチームでした。&lt;/p&gt;
&lt;p&gt;ニフティの皆様、大変お世話になりました。&lt;/p&gt;
&lt;p&gt;転職の理由ですが、2月に1人目の子供が産まれ、3月に30歳になって、今のうちにもっと挑戦的なことをやりたいと思っていたためです。
そんな中、良いタイミングで良いお誘いがあったので、そちらに転職することにしました。&lt;/p&gt;
&lt;p&gt;次の会社には明日、8/1から出社する予定です。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.co.jp/registry/wishlist/2KJFLLRPWTRFN"&gt;ほしい物リスト&lt;/a&gt;&lt;/p&gt;</description></item><item><title>NeovimとNeomakeでGoの文法チェックをする</title><link>https://www.higebu.com/blog/2016/05/11/2016-05-11-linting-go-code-with-neovim-and-neomake/</link><pubDate>Wed, 11 May 2016 08:07:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/05/11/2016-05-11-linting-go-code-with-neovim-and-neomake/</guid><description>&lt;p&gt;&lt;a href="https://github.com/neomake/neomake"&gt;Neomake&lt;/a&gt;は&lt;a href="https://github.com/neovim/neovim"&gt;Neovim&lt;/a&gt;のjob-controlに対応した&lt;a href="https://github.com/scrooloose/syntastic"&gt;Syntastic&lt;/a&gt;の代わりとして使えるプラグインです。&lt;/p&gt;
&lt;p&gt;パッケージマネージャは&lt;a href="https://github.com/Shougo/dein.vim"&gt;dein.vim&lt;/a&gt;を使っています。&lt;/p&gt;
&lt;p&gt;plugins.tomlに下記を追記します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;repo&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;neomake/neomake&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;hook_add&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; autocmd! BufWritePost * Neomake
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;plugins_lazy.tomlに下記を追記します。デフォルトでは&lt;code&gt;go&lt;/code&gt;、&lt;code&gt;golint&lt;/code&gt;、&lt;code&gt;govet&lt;/code&gt;でのチェックになっていますが、&lt;a href="https://github.com/kisielk/errcheck"&gt;errcheck&lt;/a&gt;を追加しています。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[[plugins]]
repo = &amp;#39;fatih/vim-go&amp;#39;
on_ft = &amp;#39;go&amp;#39;
hook_source = &amp;#39;&amp;#39;&amp;#39;
let g:go_fmt_command = &amp;#39;goimports&amp;#39;
let s:goargs = go#package#ImportPath(expand(&amp;#39;%:p:h&amp;#39;))
let g:neomake_go_errcheck_maker = {
\ &amp;#39;args&amp;#39;: [&amp;#39;-abspath&amp;#39;, s:goargs],
\ &amp;#39;append_file&amp;#39;: 0,
\ &amp;#39;errorformat&amp;#39;: &amp;#39;%f:%l:%c:\ %m, %f:%l:%c\ %#%m&amp;#39;,
\ }
let g:neomake_go_enabled_makers = [&amp;#39;golint&amp;#39;, &amp;#39;govet&amp;#39;, &amp;#39;errcheck&amp;#39;]
&amp;#39;&amp;#39;&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;下記のようにerrcheckの結果が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20160511-neomake.png" alt="neomake"&gt;&lt;/p&gt;</description></item><item><title>Golang、Raspberry pi 3、Wi-SUNモジュールを使って電力を監視する</title><link>https://www.higebu.com/blog/2016/04/29/2016-04-29-watt-monitoring-with-golang-and-raspberry-pi-3/</link><pubDate>Fri, 29 Apr 2016 23:45:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/04/29/2016-04-29-watt-monitoring-with-golang-and-raspberry-pi-3/</guid><description>&lt;p&gt;&lt;img src="https://www.higebu.com/images/20160429-raspberrypi3-with-wsr35a1-00.png" alt="raspberrypi3-with-wsr35a1-00"&gt;&lt;/p&gt;
&lt;h2 id="wi-sunモジュールについて"&gt;Wi-SUNモジュールについて&lt;/h2&gt;
&lt;p&gt;Wi-SUNモジュールは&lt;a href="http://www.rohm.co.jp/web/japan/news-detail?news-title=2014-10-02_news&amp;amp;defaultGroupId=false"&gt;WSR35A1-00&lt;/a&gt;を使いました。&lt;/p&gt;
&lt;p&gt;Wi-SUNモジュールの使い方は&lt;a href="http://chappnet.hateblo.jp/entry/2015/08/20/024137"&gt;Raspberry PiとWi-SUNモジュールでスマートメーターから情報取得&lt;/a&gt;がとても詳しいのでこちらをご参照ください。&lt;/p&gt;
&lt;h2 id="raspberry-pi-3でgolangで書いたものを動かす"&gt;Raspberry pi 3でGolangで書いたものを動かす&lt;/h2&gt;
&lt;p&gt;Raspberry pi 3上でビルドする必要はありません。他のLinuxとかで下記のように&lt;code&gt;GOARCH&lt;/code&gt;と&lt;code&gt;GOARM&lt;/code&gt;を指定してビルドすると、できたバイナリはRaspberry pi 3上で動きます。さすがGolangですね。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GOARCH=arm GOARM=7 go build
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Raspberry pi 3には64bitのARMv8が載っていますが、今のところ、Raspbianは32bitのARMv7用なので&lt;code&gt;GOARCH=arm64&lt;/code&gt;にすると動きません。&lt;code&gt;uname&lt;/code&gt;の結果も下記の通りです。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="golangでシリアル通信"&gt;Golangでシリアル通信&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/tarm/serial"&gt;github.com/tarm/serial&lt;/a&gt;を使いました。&lt;/p&gt;
&lt;p&gt;使い方はREADMEに書いてある通りで、とても簡単です。&lt;/p&gt;
&lt;p&gt;今回作ったツールでは&lt;a href="https://github.com/higebu/wattmonitor/blob/master/bp35a1/bp35a1.go"&gt;bp35a1.go&lt;/a&gt;で使っています。&lt;/p&gt;
&lt;h2 id="ツールについて"&gt;ツールについて&lt;/h2&gt;
&lt;p&gt;プログラムは&lt;a href="https://github.com/higebu/wattmonitor"&gt;GitHub&lt;/a&gt;にアップしてあります。&lt;/p&gt;
&lt;p&gt;使い方はREADMEを見てください。&lt;/p&gt;
&lt;p&gt;このツールはfluentdに投げることを前提にしていますが、ちょっと書き換えれば他の何かに送ることもできると思います。&lt;/p&gt;
&lt;p&gt;自分はfluentdからElasticsearchに入れて、直近1時間の消費電力とか、1日の消費電力量を見られるようにしています。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20160429-es.jpg" alt="直近1時間"&gt;
1日の消費電力量はElasticsearch側で計算しています。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20160429-es-kwh.jpg" alt="1日の電力量"&gt;&lt;/p&gt;</description></item><item><title>VMForkをmobから実行する</title><link>https://www.higebu.com/blog/2016/04/27/2016-04-27-vmfork-using-mob/</link><pubDate>Wed, 27 Apr 2016 23:57:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/04/27/2016-04-27-vmfork-using-mob/</guid><description>&lt;p&gt;現状では&lt;a href="https://labs.vmware.com/flings/powercli-extensions"&gt;PowerCLI Extension&lt;/a&gt;を使わないとVMForkは実行できませんが、PowerCLIを使って実行できるということはAPIがあるということです。&lt;/p&gt;
&lt;p&gt;mobを探検したところ、VMFork関連のAPIが見つかり、実行方法もわかったので書いておきます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;この記事の内容はVMware非公式で、私を含め、誰もサポートしていません。試すときは自己責任でお願いします。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="vmfork関連の非公開のapi"&gt;VMFork関連の非公開のAPI&lt;/h2&gt;
&lt;p&gt;VirtualMachineに下記のメソッドがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CreateForkChild_Task&lt;/li&gt;
&lt;li&gt;EnableForkParent_Task&lt;/li&gt;
&lt;li&gt;DisableForkParent_Task&lt;/li&gt;
&lt;li&gt;RetrieveForkChildren_Task&lt;/li&gt;
&lt;li&gt;RetrieveForkParent_Task&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、プロパティには&lt;code&gt;config.forkconfiginfo&lt;/code&gt;や&lt;code&gt;runtime.quiescedforkparent&lt;/code&gt;があります。&lt;/p&gt;
&lt;p&gt;これらは、mobでVMを開き、ページのソースを見ると見つかります。&lt;/p&gt;
&lt;p&gt;今回はVMForkするところまでなので、&lt;code&gt;EnableForkParent_Task&lt;/code&gt;と&lt;code&gt;CreateForkChild_Task&lt;/code&gt;を使います。&lt;/p&gt;
&lt;h2 id="mobからvmforkを実行する方法"&gt;mobからVMForkを実行する方法&lt;/h2&gt;
&lt;h3 id="1-mobを開く"&gt;1. mobを開く&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://&amp;lt;vcenter_ip_or_hostname&amp;gt;/mob/
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2-親vmのページを開く"&gt;2. 親VMのページを開く&lt;/h3&gt;
&lt;p&gt;rootFolderからたどるなり、searchIndexを使うなりして、親にするVMを開きます。URLは下記のようになっているはずです。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://&amp;lt;vcenter_ip_or_hostname&amp;gt;/mob/?moid=vm-111
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="3-enableforkparent_taskを実行する"&gt;3. EnableForkParent_Taskを実行する&lt;/h3&gt;
&lt;p&gt;標準で実行できるメソッドであれば、ページ下方にリンクがありますが、非公開APIの場合、リンクはありません。&lt;/p&gt;
&lt;p&gt;そこで、下記のようにURLに直接入れます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://&amp;lt;vcenter_ip_or_hostname&amp;gt;/mob/?moid=vm-111&amp;amp;method=enableForkParent
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;開けばわかりますが、パラメータはありませんので、&lt;code&gt;Invoke Method&lt;/code&gt;をクリックするだけです。&lt;/p&gt;
&lt;h3 id="4-親vmをquiesced状態にする"&gt;4. 親VMをquiesced状態にする&lt;/h3&gt;
&lt;p&gt;これは親VM内から実行する必要があります。&lt;/p&gt;
&lt;p&gt;親VMにコンソールやSSHで入るなりして、下記のコマンドを実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vmtoolsd --cmd &lt;span class="s1"&gt;&amp;#39;vmfork-begin -1 -1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;自動でやる場合には、APIの&lt;a href="https://pubs.vmware.com/vsphere-60/topic/com.vmware.wssdk.apiref.doc/vim.vm.guest.GuestOperationsManager.html#field_detail"&gt;GuestOperationsManager&lt;/a&gt;のProcessManagerを使えば良いと思います。&lt;/p&gt;
&lt;p&gt;PowerCLIの&lt;code&gt;Enable-InstantCloneVM&lt;/code&gt;ではここまでの操作と一緒に、PreQuiesceScriptとPostCloneScriptのアップロードを行っています。&lt;/p&gt;
&lt;p&gt;PowerCLIを使わない場合、PreQuiesceScriptとPostCloneScriptのアップロードはやはり&lt;a href="https://pubs.vmware.com/vsphere-60/topic/com.vmware.wssdk.apiref.doc/vim.vm.guest.GuestOperationsManager.html#field_detail"&gt;GuestOperationsManager&lt;/a&gt;を使うことになります。&lt;/p&gt;
&lt;p&gt;&lt;del&gt;子VMがForkされたときにPostCloneScriptが自動で実行されているようなので、CustomizationSpec辺りを使っているのかなと思っていますが、CustomizationGuiRunOnceはWindowsでしか使えなかった気がしていたり、vCloud Directorではstart up scriptをLinuxでも登録できたような気がしていたりして、どうやるのかはっきりとはわかっていません。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;PreQuiesceScriptとPostCloneScriptの実行も&lt;a href="https://pubs.vmware.com/vsphere-60/topic/com.vmware.wssdk.apiref.doc/vim.vm.guest.GuestOperationsManager.html#field_detail"&gt;GuestOperationsManager&lt;/a&gt;でやってるみたいです。下記のような雰囲気です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$prescript_path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;vmtoolsd --cmd &lt;span class="s1"&gt;&amp;#39;vmfork-begin -1 -1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;$postscript_path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="5-vmforkする"&gt;5. VMForkする&lt;/h3&gt;
&lt;p&gt;APIとしては&lt;code&gt;CreateForkChild_Task&lt;/code&gt;です。PowerCLIの&lt;code&gt;New-InstantCloneVM&lt;/code&gt;にあたります。&lt;/p&gt;
&lt;p&gt;URLは下記の通りです。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://&amp;lt;vcenter_ip_or_hostname&amp;gt;/mob/?moid=vm-111&amp;amp;method=createForkChild
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;パラメータは&lt;code&gt;name&lt;/code&gt;と&lt;code&gt;spec&lt;/code&gt;があるので、&lt;code&gt;name&lt;/code&gt;に子VMの名前を入れ、&lt;code&gt;spec&lt;/code&gt;には&lt;a href="https://www.vmware.com/support/developer/converter-sdk/conv61_apireference/vim.vm.CreateChildSpec.html"&gt;VirtualMachineCreateChildSpec&lt;/a&gt;を入れます。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.vmware.com/support/developer/converter-sdk/conv61_apireference/vim.vm.CreateChildSpec.html"&gt;VirtualMachineCreateChildSpec&lt;/a&gt;はググったらConverterのSDKのドキュメントに載っているものと同じだったのでそれを参考にします。&lt;/p&gt;
&lt;p&gt;最小の&lt;code&gt;spec&lt;/code&gt;は下記の通りで、これを入れて&lt;code&gt;Invoke Method&lt;/code&gt;します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;spec&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;persistent&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/persistent&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/spec&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そうすると一瞬で子VMができると思います。&lt;/p&gt;
&lt;p&gt;ここまでわかると&lt;a href="https://github.com/vmware/govmomi"&gt;govmomi&lt;/a&gt;などに機能追加できそうなので、時間があったら追加して試してみたいです。&lt;/p&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.vmware.com/PowerCLI/2015/08/vmware-instant-clone-now-fingertips-new-powercli-extensions-fling.html"&gt;VMware Instant Clone is now at your fingertips with the updated PowerCLI Extensions fling!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.virtuallyghetto.com/2015/08/instant-clone-powercli-cmdlets-best-practices-troubleshooting.html"&gt;Instant Clone PowerCLI cmdlets Best Practices &amp;amp; Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.virtuallyghetto.com/2015/08/how-to-vmfork-aka-instant-clone-nested-esxi.html"&gt;How to VMFork aka Instant Clone Nested ESXi?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lamw/vmfork-community-customization-scripts"&gt;lamw/vmfork-community-customization-scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vmware/vic"&gt;vSphere Integrated Containers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://communities.vmware.com/docs/DOC-11670"&gt;How to browse the internal vSphere APIs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>VyOS Beryllium について</title><link>https://www.higebu.com/blog/2016/02/26/2016-02-26-vyos-beryllium/</link><pubDate>Fri, 26 Feb 2016 08:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/02/26/2016-02-26-vyos-beryllium/</guid><description>&lt;h2 id="beryllium"&gt;Beryllium&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;詳しくは&lt;a href="http://vyos.net/wiki/Beryllium"&gt;Wiki&lt;/a&gt;参照
&lt;ul&gt;
&lt;li&gt;大体このページの翻訳です&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Debian jessie ベース
&lt;ul&gt;
&lt;li&gt;必然的に Systemd 対応を強いられる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Linux 4.4.0&lt;/li&gt;
&lt;li&gt;新しいビルドスクリプト
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vyos/vyos-build"&gt;vyos-build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vyos/build-iso"&gt;build-iso&lt;/a&gt;から変更&lt;/li&gt;
&lt;li&gt;日本の&lt;a href="http://vyosjp.connpass.com/event/9667/"&gt;VyOS Users Meeting #2&lt;/a&gt;にも来た&lt;a href="https://twitter.com/trickv"&gt;trickv&lt;/a&gt;さんがAMIのビルドスクリプト作ってる &lt;a href="https://github.com/trickv/vyos-build/tree/vm"&gt;https://github.com/trickv/vyos-build/tree/vm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;メタパッケージ、&lt;a href="https://github.com/vyos/vyos-world"&gt;vyos-world&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;VyOS独自パッケージのまとめ&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vyos/vyos-world/blob/current/debian/control"&gt;パッケージリスト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DebianのパッケージをVyOSのリポジトリに置くのをやめて、Debianのリポジトリから取ってくるようにする
&lt;ul&gt;
&lt;li&gt;今は必要なパッケージをVyOSのリポジトリにコピーしている&lt;/li&gt;
&lt;li&gt;さらにVyOS以外でも使えるパッケージ（eventwatch, hvinfo, ipaddrcheckなど）はDebianのリポジトリに置いて、なるべく自分たちでビルドするパッケージを少なくする&lt;/li&gt;
&lt;li&gt;参考
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lists.tuxis.nl/pipermail/vyos-developers/2016-January/000150.html"&gt;[Vyos-developers] End of squeeze-lts support, lithium, and what to do next&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lists.tuxis.nl/pipermail/vyos-developers/2016-January/000177.html"&gt;[Vyos-developers] Updates on squeeze-lts EOL and jessie migration issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;開発フローの変更
&lt;ul&gt;
&lt;li&gt;current ブランチが最新になる
&lt;ul&gt;
&lt;li&gt;Vyatta Core時代からの歴史的経緯によりmasterを使うのが難しいため&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;beryllium リリース時に beryllium ブランチが切られる&lt;/li&gt;
&lt;li&gt;新機能やバグフィックスは基本的に current にマージしていき、各リリースブランチにはバックポートで対応する&lt;/li&gt;
&lt;li&gt;中心的なメンテナはcurrentの開発に集中しているため、現行のHeliumやLithiumのメンテナンスは人を募集している&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リリースまでの流れ
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/vyos/vyos-build"&gt;vyos-build&lt;/a&gt; を作る&lt;/li&gt;
&lt;li&gt;Kernelアップグレード&lt;/li&gt;
&lt;li&gt;各パッケージをコンパイルできるか確認
&lt;ol&gt;
&lt;li&gt;必要ならupstreamに合わせてパッケージを入れ替えたりする&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;ブートまでのバグを修正&lt;/li&gt;
&lt;li&gt;ビルドプロセスで公式AMIも作る&lt;/li&gt;
&lt;li&gt;すべてテストしてバグを直す
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mizzy/serverspec"&gt;Serverspec&lt;/a&gt;を使う&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/primeroz/serverspec_vyos_testing"&gt;primeroz/serverspec_vyos_testing&lt;/a&gt;をベースにするっぽい&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ci.vyos.net/"&gt;Jenkins&lt;/a&gt;でCIする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="個人的にやりたいこと"&gt;個人的にやりたいこと&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Virtual boxやVMware用の公式イメージの提供
&lt;ul&gt;
&lt;li&gt;個人的に作っているVagrant用のbox
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://atlas.hashicorp.com/higebu/boxes/vyos-1.1.7-amd64"&gt;vyos-1.1.7-amd64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://atlas.hashicorp.com/higebu/boxes/vyos-1.2.0-beta1-amd64"&gt;vyos-1.2.0-beta1-amd64&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Docker対応
&lt;ul&gt;
&lt;li&gt;Dockerが動くようにしたい&lt;/li&gt;
&lt;li&gt;Jessieになるので簡単そう&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.higebu.com/blog/2014/12/10/docker-on-vyos/"&gt;前にやってたやつ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="最近困ったことおまけ"&gt;最近困ったこと（おまけ）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;webproxy(squid 3.1.6)で &lt;code&gt;http://xxx.xxx.xxx.xxx:3128/squid-internal-dynamic/netdb&lt;/code&gt;などの&lt;code&gt;squid-internal-xxx&lt;/code&gt;へのアクセスがループしてcache.logがあふれた
&lt;ul&gt;
&lt;li&gt;VyOSに入っているsquidではnetdbは無効のはずなのになぜか内部的にこのURLが叩かれて死んだ&lt;/li&gt;
&lt;li&gt;バージョンアップすれば直るけど、コンフィグを直す必要があり、VyOSのコマンドで設定できなくなりそう
&lt;ul&gt;
&lt;li&gt;Stableの3.5.15にしたら直ったけどそのままのコンフィグだと起動しなかった&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/higebu/2cb3c4c8fc1e236716ce"&gt;ビルド方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jessieでは3.4.8なのでたぶん直っているはず(未確認)&lt;/li&gt;
&lt;li&gt;3.5.15だと下記のようなレスポンスが返ってくる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl http://xxx.xxx.xxx.xxx:3128/squid-internal-dynamic/netdb
NETDB support not compiled into this Squid cache.
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>CROSS 2016 に登壇してきました</title><link>https://www.higebu.com/blog/2016/02/13/2016-02-05-cross-2016/</link><pubDate>Sat, 13 Feb 2016 19:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2016/02/13/2016-02-05-cross-2016/</guid><description>&lt;p&gt;&lt;img src="https://www.higebu.com/images/20160205-cross-2016.jpg" alt="“日本のIaaS裏トーク”"&gt;
&lt;a href="http://2016.cross-party.com/"&gt;CROSS 2016&lt;/a&gt;の&lt;a href="http://2016.cross-party.com/program/b1"&gt;日本のIaaS裏トーク&lt;/a&gt;というセッションに登壇してきました。&lt;/p&gt;
&lt;p&gt;2/7（日）に妻が入院して、2/8（月）に子供が産まれてバタバタしていたので、書くのが遅くなってしまいました。&lt;/p&gt;
&lt;h2 id="登壇したセッションについて"&gt;登壇したセッションについて&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://2016.cross-party.com/program/b1"&gt;日本のIaaS裏トーク〜インフラ×ソフトウェア〜&lt;/a&gt;というセッションです。&lt;/p&gt;
&lt;p&gt;セッション中のツイートが &lt;a href="http://togetter.com/li/934476"&gt;Togetter&lt;/a&gt; にまとめられているので、興味があったけど見られなかった方はこれと&lt;a href="https://youtu.be/PC1TTr_INNY"&gt;動画&lt;/a&gt;を見ると良いと思います。&lt;/p&gt;
&lt;p&gt;セッションの紹介文にも書いてありますが、元々はSDN関連のセッションをお願いされていて、SDNっぽい方々を集めたんですが、今は違うことをやっていたり、SDNに疲れたりしていたので、少し話を広げてアーキテクチャやIaaSの中のソフトウェアの話をしようということになりました。&lt;/p&gt;
&lt;p&gt;IaaSの中でも外と同じようにインフラエンジニアはコードを書いており、物理から仮想化層、OS、ミドルウェア、アプリケーションまで触っているので、フルスタック（笑）感があります。その中でも特にインフラを制御する部分は会社や使っているクラウドコントローラによってかなり違う実装になっているので面白いです。&lt;/p&gt;
&lt;p&gt;コスト削減のためにOSS使ってるとか、有償製品使ってるから高いとかではなく、各社のアーキテクチャは各社がIaaSをやる上で最適なものを選んでいるということと、それぞれの違いに注目すると面白いということが伝わっていたら良いなと思います。（IaaSを使うときは各機能の制約や挙動から、何を使ってどうやって実装されているのか想像すると楽しいのでおすすめです。）&lt;/p&gt;
&lt;p&gt;あと、各社どんな感じで作っているか簡単に説明してもらってから、ディスカッションに入ったんですが、全部ディスカッションでよかったかもしれないと思っています。Web系のイベントということで、インフラエンジニアはあまりいないだろうと思って説明を入れたのですが、会場の様子を見ていた感じではそうでもなさそうでした。&lt;/p&gt;
&lt;p&gt;自分たちももっと話したかったので、後で公開座談会のようなものをやろうという話になっています。これについては、詳細が決まり次第どこかに公開します。&lt;/p&gt;
&lt;h2 id="cross-2016の感想"&gt;CROSS 2016の感想&lt;/h2&gt;
&lt;p&gt;登壇が終わった後は、雑談したり、ブースを回ったりしていて、他のセッションはあまり聞けませんでした。唯一まともに聞いたのが&lt;a href="http://2016.cross-party.com/program/c5"&gt;エンジニアがいるべき場所は米国なのか？日本なのか？&lt;/a&gt;で、やっぱり日本で働きたいよなーと思いました。&lt;/p&gt;
&lt;p&gt;あと、やはり昨年同様、音響が悪いのが残念でした。&lt;/p&gt;</description></item><item><title>PackerとESXiでPhotonのOVFを作る</title><link>https://www.higebu.com/blog/2015/12/09/make-photon-ovf-by-packer-with-esxi/</link><pubDate>Wed, 09 Dec 2015 23:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/12/09/make-photon-ovf-by-packer-with-esxi/</guid><description>&lt;p&gt;これは、&lt;a href="http://qiita.com/advent-calendar/2015/hashicorp"&gt;HashiCorp Advent Calendar 2015&lt;/a&gt;の9日目の記事です。&lt;/p&gt;
&lt;p&gt;Packerって何というのは説明しませんので、&lt;a href="https://packer.io/"&gt;公式ページ&lt;/a&gt;を読んでください。&lt;/p&gt;
&lt;p&gt;Packer 0.8.7から&lt;a href="https://packer.io/docs/builders/vmware-iso.html"&gt;vmware-iso builder&lt;/a&gt;でESXiを利用したときに、OVFを作ることができるようになるので、その紹介です。&lt;/p&gt;
&lt;p&gt;この機能をマージしてもらえるまでに1年くらいかかってしまい、その間に&lt;a href="https://github.com/vmware/govmomi"&gt;govmomi&lt;/a&gt;がリリースされているので、いつかgovmomiを使った実装に書き換えたいと思っています。&lt;/p&gt;
&lt;p&gt;とても簡単に説明すると&lt;code&gt;vmware-iso&lt;/code&gt;builderに&lt;code&gt;format&lt;/code&gt;というオプションが追加されるので、template.jsonに&lt;code&gt;&amp;quot;format&amp;quot;: &amp;quot;ovf&amp;quot;&lt;/code&gt;と書くとOVFがエクスポートされるようになるというものです。&lt;/p&gt;
&lt;p&gt;元々は、作ったVMがunregisterされ、データストアにVMXとVMDKだけ残るという仕様で、後からどうやって使うのかという状態でした。&lt;/p&gt;
&lt;p&gt;この記事ではESXiのVagrant boxを作って、それを使ってOVFをビルドする手順になっていますが、ご自宅にESXiが入っているサーバがある方はそれでビルドしてみてください。&lt;/p&gt;
&lt;p&gt;ただ、個人的にはESXiのVagrant boxを作っておくとノートPCの上などで手軽にESXiで遊べるのでおすすめです。&lt;/p&gt;
&lt;p&gt;以下、環境とビルドの方法です。&lt;/p&gt;
&lt;h2 id="環境"&gt;環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Host OS: Ubuntu 14.04&lt;/li&gt;
&lt;li&gt;VMware Workstation 11.1.3
&lt;ul&gt;
&lt;li&gt;Fusionでもいいはずです。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Packer 0.8.7.dev (77d9a89d1b3eef84a64edf7ca18b49c3ae5847c7)
&lt;ul&gt;
&lt;li&gt;まだ0.8.7がリリースされていないので、masterブランチからビルドしてください。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ESXi 6.0 u1 3029758
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://my.vmware.com"&gt;my vmware&lt;/a&gt; から&lt;code&gt;VMware-VMvisor-Installer-6.0.0.update01-3029758.x86_64.iso&lt;/code&gt;をダウンロードしてください。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vagrant 1.7.4
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/"&gt;公式ページ&lt;/a&gt;からダウンロードしてインストールしてください。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;vagrant-vmware-workstation 3.2.6
&lt;ul&gt;
&lt;li&gt;有償なので&lt;a href="http://www.vagrantup.com/vmware"&gt;VMware provider&lt;/a&gt;のページから購入してインストールしてください。。。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;vagrant-esxi 0.0.1
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vagrant plugin install vagrant-esxi&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ESXiのVagrant boxを使うために入れます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;vagrant-triggers 0.5.2
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vagrant plugin install vagrant-triggers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vagrant up&lt;/code&gt;で&lt;code&gt;packer build&lt;/code&gt;まで走るようにするために入れます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ovftool 4.1.0
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.vmware.com/support/developer/ovf/"&gt;VMwareのページ&lt;/a&gt;からダウンロードしてインストールしてください。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esxiのvagrant-boxの作成"&gt;ESXiのVagrant boxの作成&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/dougm/packer-esxi"&gt;dougm/packer-esxi&lt;/a&gt;をフォークした、&lt;a href="https://github.com/higebu/packer-esxi"&gt;higebu/packer-esxi&lt;/a&gt;を使って作ります。&lt;/p&gt;
&lt;p&gt;VMwareの&lt;a href="https://github.com/dougm"&gt;@dougm&lt;/a&gt;さんのリポジトリは古くていろいろと躓くので、フォークして修正したものを使います。&lt;/p&gt;
&lt;p&gt;まず、リポジトリをcloneして&lt;code&gt;esxi60&lt;/code&gt;ブランチをチェックアウトします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/dougm/packer-esxi.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout esxi60
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ビルドします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;packer build template.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;できあがったboxをインポートします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant box add --name esxi vmware_esxi60.box
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで、ESXiを&lt;code&gt;vagrant up&lt;/code&gt;で起動できるようになります。&lt;/p&gt;
&lt;h2 id="vagrantでesxiを起動してpackerでovfをビルド"&gt;VagrantでESXiを起動してPackerでOVFをビルド&lt;/h2&gt;
&lt;p&gt;では、上記で作成したESXiのboxを使ってOVFをビルドします。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/higebu/packer-esxi-example"&gt;higebu/packer-esxi-example&lt;/a&gt;をcloneしてから、&lt;code&gt;vagrant up&lt;/code&gt;します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/higebu/packer-esxi-example.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; packer-esxi-example
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;いつもの&lt;code&gt;vagrant up&lt;/code&gt;のログの後に&lt;code&gt;packer build&lt;/code&gt;のログも流れるのが見えると思います。&lt;/p&gt;
&lt;p&gt;エラーになってしまった場合、template.jsonの&lt;code&gt;&amp;lt;wait10&amp;gt;&lt;/code&gt;の数が足りないところがあるかもしれません。&lt;/p&gt;
&lt;p&gt;中身を見るとわかるのですが、これはVMware社がOSSとして公開している、&lt;a href="https://github.com/vmware/photon"&gt;Photon&lt;/a&gt;のVMをビルドするテンプレートです。
Photonにはkickstartのような仕組みがないため、GUIのインストーラに対してコマンドを流しているからです。&lt;/p&gt;
&lt;h2 id="最後に"&gt;最後に&lt;/h2&gt;
&lt;p&gt;ポイントは最初にも書きましたが、template.jsonに&lt;code&gt;format&lt;/code&gt;というオプションを追加することです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ovf&lt;/code&gt;、&lt;code&gt;ova&lt;/code&gt;、&lt;code&gt;vmx&lt;/code&gt;に対応しています。&lt;/p&gt;
&lt;p&gt;Packerはとても便利なのですが、まじめに使っていると機能が足りなかったり動かなかったりすることも多いので、みんなでどんどんプルリクしていきましょう。&lt;/p&gt;</description></item><item><title>ニフティクラウドタイマーを使ってTravis CIで定期的にビルドを実行する</title><link>https://www.higebu.com/blog/2015/12/01/travis-ci-with-niftycloud-timer/</link><pubDate>Tue, 01 Dec 2015 20:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/12/01/travis-ci-with-niftycloud-timer/</guid><description>&lt;p&gt;これは、&lt;a href="http://qiita.com/advent-calendar/2015/niftycloud"&gt;NIFTY Cloud Advent Calendar 2015&lt;/a&gt;の1日目の記事です。&lt;/p&gt;
&lt;p&gt;ハードルを下げるため、ちょっとしたネタにしました。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/"&gt;Travis CI&lt;/a&gt;でGitHubへのpushをトリガーにビルドするのではなく、ビルドを定期的に実行したいときに、&lt;a href="http://cloud.nifty.com/service/timer.htm"&gt;ニフティクラウドタイマー&lt;/a&gt;を使って実現する方法です。&lt;/p&gt;
&lt;p&gt;タイマーって何？という方は&lt;a href="http://blog.cloud.nifty.com/4058/"&gt;ニフティクラウドタイマーのご紹介&lt;/a&gt;をご参照ください。&lt;/p&gt;
&lt;p&gt;簡単に言うと、サーバーなしでcronを使えるサービスです。&lt;/p&gt;
&lt;h2 id="前提"&gt;前提&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHubのアカウントを持っている&lt;/li&gt;
&lt;li&gt;GitHubのPersonal settingsでPersonal access tokenを作成済(&lt;code&gt;GITHUB_TOKEN&lt;/code&gt;とする）&lt;/li&gt;
&lt;li&gt;Travis CIのアカウントを持っている&lt;/li&gt;
&lt;li&gt;Travis CIで定期的にビルドしたい何かがある&lt;/li&gt;
&lt;li&gt;ニフティクラウドのアカウントを持っている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="手順"&gt;手順&lt;/h2&gt;
&lt;h3 id="travis-ciのaccess-tokenをgithubのpersonal-access-tokenから取得する"&gt;Travis CIのAccess TokenをGitHubのPersonal access tokenから取得する&lt;/h3&gt;
&lt;p&gt;下記のコマンドを叩いてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s -X POST -H &lt;span class="s1"&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; -H &lt;span class="s1"&gt;&amp;#39;Accept: application/vnd.travis-ci.2+json&amp;#39;&lt;/span&gt; https://api.travis-ci.org/auth/github -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;github_token&amp;#34;:&amp;#34;GITHUB_TOKEN&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下記のようなレスポンスが返ってきます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;access_token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TRAVIS_TOKEN&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;TRAVIS_TOKEN&lt;/code&gt;の部分にTravis CIのAccess Tokenが入っているはずなので、メモしておきます。&lt;/p&gt;
&lt;p&gt;Travis CIのAPI認証について、詳しくは&lt;a href="http://docs.travis-ci.com/api/#authentication"&gt;公式ドキュメント&lt;/a&gt;をご参照ください。&lt;/p&gt;
&lt;h3 id="curlで実行してみる"&gt;curlで実行してみる&lt;/h3&gt;
&lt;p&gt;ここで、APIの実行が可能か確認するため、下記のようにcurlでAPIを叩いてみます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{TRAVIS_TOKEN}&lt;/code&gt;に先ほど取得したTravis CIのAccess Tokenを、&lt;code&gt;{ACCOUNT}&lt;/code&gt;に自分のアカウント名、&lt;code&gt;{REPOSITORY}&lt;/code&gt;に自分のリポジトリ名を入れてください。&lt;/p&gt;
&lt;p&gt;成功すると、ビルドが実行されるはずです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&amp;#34;request&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;branch&amp;#34;:&amp;#34;master&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;}}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s -X POST &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Accept: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Travis-API-Version: 3&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Authorization: token {TRAVIS_TOKEN}&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://api.travis-ci.org/repo/&lt;span class="o"&gt;{&lt;/span&gt;ACCOUNT&lt;span class="o"&gt;}&lt;/span&gt;%2F&lt;span class="o"&gt;{&lt;/span&gt;REPOSITORY&lt;span class="o"&gt;}&lt;/span&gt;/requests
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Travis CIでAPIからのビルドの実行について、詳しくは&lt;a href="http://docs.travis-ci.com/user/triggering-builds/"&gt;公式ドキュメント&lt;/a&gt;ｒｙ&lt;/p&gt;
&lt;h3 id="ニフティクラウドタイマーに設定する"&gt;ニフティクラウドタイマーに設定する&lt;/h3&gt;
&lt;p&gt;設定自体は上記でやってみた、HTTPのリクエストを設定するだけです。&lt;/p&gt;
&lt;p&gt;以下、手順です。&lt;/p&gt;
&lt;p&gt;ニフティクラウドにログインし、左上のメニューから、タイマーを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151201-travis-ci-with-niftycloud-timer-1.png" alt="travis-ci-with-niftycloud-timer-1"&gt;
タイマー作成ボタンがあると思いますので、それをクリックします。&lt;/p&gt;
&lt;p&gt;タイマー名とスケジュールを設定します。メモも設定できます。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151201-travis-ci-with-niftycloud-timer-2.png" alt="travis-ci-with-niftycloud-timer-2"&gt;
タイプはHTTPにします。他にはサーバー起動、停止、再起動、削除、設定変更、イメージとして保存、スナップショット取得、MQTT、Fluentdがあります。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151201-travis-ci-with-niftycloud-timer-3.png" alt="travis-ci-with-niftycloud-timer-3"&gt;
HTTPを選択するとURL、メソッド、ヘッダー、ボディが設定できるようになるので、下記のように設定します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URL
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://api.travis-ci.org/repo/{ACCOUNT}%2F{REPOSITORY}/requests&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;メソッド
&lt;ul&gt;
&lt;li&gt;POST&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ヘッダー&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Content-Type: application/json
Accept: application/json
Travis-API-Version: 3
Authorization: token {TRAVIS_TOKEN}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;ボディ&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;branch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;master&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通知の設定をします。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151201-travis-ci-with-niftycloud-timer-4.png" alt="travis-ci-with-niftycloud-timer-4"&gt;
確認して、&amp;ldquo;作成する&amp;quot;をクリックします。&lt;/p&gt;
&lt;p&gt;これで、設定は完了です。定期的にビルドが実行されるはずです。&lt;/p&gt;
&lt;p&gt;実行の履歴は、作成したタイマーを展開し、実行履歴タブを見ると確認できます。&lt;/p&gt;
&lt;h2 id="travis-ciとニフティクラウドタイマーを使って自動で最新のcoreosをインポートする"&gt;Travis CIとニフティクラウドタイマーを使って、自動で最新のCoreOSをインポートする&lt;/h2&gt;
&lt;p&gt;最後に、実際にこの仕組みを使ってCoreOSのインポートを自動化してみた例をご紹介します。&lt;/p&gt;
&lt;p&gt;元々Jenkinsを立てて自動でやっていたんですが、タイマーを使うことでサーバーがいらなくなりました。&lt;/p&gt;
&lt;p&gt;ソースは&lt;a href="https://github.com/higebu/niftycloud-coreos-scripts"&gt;GitHub&lt;/a&gt;に置いてあるため、それを見てください。&lt;/p&gt;
&lt;p&gt;ビルドの様子も&lt;a href="https://travis-ci.org/higebu/niftycloud-coreos-scripts"&gt;Travis CI&lt;/a&gt;で見られます。&lt;/p&gt;
&lt;p&gt;ほぼエラーになっているのは、新しいバージョンが出て、インポートされたときのみ成功と判定しているためです。&lt;/p&gt;
&lt;p&gt;見た目が悪いので改善したいと思っています。&lt;/p&gt;
&lt;p&gt;明日、12/02は&lt;a href="http://qiita.com/thuydg@github"&gt;@thuydg&lt;/a&gt;がmBaaSとかMQTT辺りの話を書いてくれる予定です。&lt;/p&gt;</description></item><item><title>VyOSを触り始めて少し経った人向けのFAQ</title><link>https://www.higebu.com/blog/2015/12/01/vyos-faq-for-beginners/</link><pubDate>Tue, 01 Dec 2015 00:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/12/01/vyos-faq-for-beginners/</guid><description>&lt;p&gt;最終更新: 2015/12/01&lt;/p&gt;
&lt;p&gt;これは、&lt;a href="http://qiita.com/advent-calendar/2015/vyos"&gt;VyOS Advent Calendar 2015&lt;/a&gt;の1日目の記事です。&lt;/p&gt;
&lt;p&gt;VyOSを触り始めるといろいろと疑問が湧いてくるのですが、調べるのが大変なことも多いので、まとめておきます。&lt;/p&gt;
&lt;p&gt;初めて触る人向けの情報をまとめようと思っていたのですが、少し経ったくらいで気になることばかりになってしまいました。&lt;/p&gt;
&lt;p&gt;内容は思いついたときに随時更新していくかもしれません。&lt;/p&gt;
&lt;p&gt;以下、FAQです。&lt;/p&gt;
&lt;h3 id="次のバージョンはいつ出るのか"&gt;次のバージョンはいつ出るのか&lt;/h3&gt;
&lt;p&gt;VyOSのリリースのコードネームは元素名になっています。2015/12/01現在の最新は&lt;code&gt;Helium&lt;/code&gt;なので、次は&lt;code&gt;Lithium&lt;/code&gt;です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Lithium&lt;/code&gt;については下記のURLに書かれています。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vyos.net/wiki/Lithium"&gt;http://vyos.net/wiki/Lithium&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Estimated release dateがSpring 2015になってますが、まだ出ていません。このページのRoadmapの&lt;code&gt;CONFIRMED&lt;/code&gt;や&lt;code&gt;IN_PROGRESS&lt;/code&gt;でSeverityが高いものが&lt;code&gt;RESOLVED&lt;/code&gt;になればリリースされるかもしれません。&lt;/p&gt;
&lt;p&gt;そろそろリリースしようかという話は、&lt;a href="https://lists.tuxis.nl/listinfo/vyos-developers"&gt;開発者メーリス&lt;/a&gt;で流れています。&lt;/p&gt;
&lt;p&gt;それぞれのIssueの進捗は&lt;a href="http://bugzilla.vyos.net/"&gt;Bugzilla&lt;/a&gt;で確認しましょう。&lt;/p&gt;
&lt;h3 id="新しいdebianベースにならないのか"&gt;新しいDebianベースにならないのか&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/UnicronNL"&gt;@UnicronNL&lt;/a&gt;さんががんばっていましたが、最近忙しくて進んでいないようです。他にやっている人もいなそうなので、誰か手伝ってくれると助かると思います。&lt;/p&gt;
&lt;p&gt;下記のURLにJessieに対応しようとしていたブランチがあります。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://git.multi.eu/vyos/build-iso/tree/jessie-transit"&gt;https://git.multi.eu/vyos/build-iso/tree/jessie-transit&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="strongswanのバージョン新しくならないのか"&gt;StrongSwanのバージョン新しくならないのか&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://bugzilla.vyos.net/"&gt;Bugzilla&lt;/a&gt;に&lt;a href="http://bugzilla.vyos.net/show_bug.cgi?id=471"&gt;Issue&lt;/a&gt;があるので、これを監視するか、テストに協力しましょう。&lt;/p&gt;
&lt;p&gt;また、他のソフトの場合も同じなのですが、&lt;a href="http://bugzilla.vyos.net/"&gt;Bugzilla&lt;/a&gt;にIssueを作らないと新しいバージョンが出ていても需要がないのかなと思われてしまうのでIssueあげると良いです。&lt;/p&gt;
&lt;h3 id="debianのパッケージを入れたい"&gt;Debianのパッケージを入れたい&lt;/h3&gt;
&lt;p&gt;やり方が公式FAQに載っています。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vyos.net/wiki/FAQ#How_do_I_install_debian_packages"&gt;http://vyos.net/wiki/FAQ#How_do_I_install_debian_packages&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="古いバージョンのvyattaのisoやドキュメントが欲しい"&gt;古いバージョンのVyattaのISOやドキュメントが欲しい&lt;/h3&gt;
&lt;p&gt;VyOSはVyatta 6.5からフォークしたものなので、Vyattaのドキュメントが参考になったりします。&lt;/p&gt;
&lt;p&gt;公式サイトからはなくなっていますが、下記のURLの配下にISOなどがアーカイブされています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#ZgotmplZ"&gt;ftp://ftp.het.net/iso/vyatta/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.huihoo.com/vyatta/"&gt;http://docs.huihoo.com/vyatta/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ちなみに1つ目の方は&lt;a href="https://webchat.freenode.net/?channels=#vyos"&gt;IRC&lt;/a&gt;で&lt;code&gt;@vyatta archive&lt;/code&gt;と打つと&lt;code&gt;vybot&lt;/code&gt;が教えてくれます。&lt;/p&gt;
&lt;p&gt;失われてしまったVyattaのHacker Forumは下記のページで2013/06/01のスナップショットが見られます。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://web.archive.org/web/20130601170522/http://vyatta.org/forum"&gt;http://web.archive.org/web/20130601170522/http://vyatta.org/forum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;困っていることは昔と変わらないことが多いので大変参考になります。&lt;/p&gt;
&lt;h3 id="カーネルをカスタマイズしてビルドしたい"&gt;カーネルをカスタマイズしてビルドしたい&lt;/h3&gt;
&lt;p&gt;自分のgistで申し訳ないですが、下記を参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gist.github.com/higebu/409c00db4aa1256e405b"&gt;https://gist.github.com/higebu/409c00db4aa1256e405b&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;普通にカーネルをリビルドしたい場合は、&lt;a href="http://vyos.net/wiki/Rebuild_VyOS_kernel_Step"&gt;公式ドキュメント&lt;/a&gt;が参考になります。&lt;/p&gt;
&lt;h3 id="intel-dpdk対応しないのか"&gt;Intel DPDK対応しないのか&lt;/h3&gt;
&lt;p&gt;メンテナ少ないし、Debianの新しいバージョンに追随したり、バックエンドをきれいにする方をがんばりたいという話になっています。&lt;/p&gt;
&lt;p&gt;素直にVyatta vRouter使うのがおすすめです。&lt;/p&gt;
&lt;p&gt;もし自分で実装したという方がいらっしゃいましたら、プルリクエストお願いします。&lt;/p&gt;
&lt;h3 id="vyconfdはどこに行ってしまったのか"&gt;vyconfdはどこに行ってしまったのか&lt;/h3&gt;
&lt;p&gt;一旦開発停止して、下記URLに移動しています。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/vyos-legacy/vyconfd"&gt;https://github.com/vyos-legacy/vyconfd&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Jenkins の Warnings Plugin で Python の依存パッケージの更新をチェックする</title><link>https://www.higebu.com/blog/2015/10/28/use-piprot-with-jenkins-warnings-plugin/</link><pubDate>Wed, 28 Oct 2015 23:50:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/10/28/use-piprot-with-jenkins-warnings-plugin/</guid><description>&lt;p&gt;Pythonで開発していると、依存しているパッケージたちが古いのかどうか自動でチェックしたくなりますが、クローズドなものだと &lt;a href="http://shields.io/"&gt;shields.io&lt;/a&gt; のような外部のサービスでチェックすることができません。そこで、&lt;a href="https://piprot.io/"&gt;piprot&lt;/a&gt;と&lt;a href="https://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt;の&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Warnings&amp;#43;Plugin"&gt;Warnings Plugin&lt;/a&gt;でチェックできるようにします。&lt;/p&gt;
&lt;h2 id="piprot-について"&gt;piprot について&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://piprot.io/"&gt;piprot&lt;/a&gt; は &lt;code&gt;pip install -U piprot&lt;/code&gt; でインストールでき、 &lt;code&gt;piprot requirements.txt&lt;/code&gt; で依存パッケージが古いかどうかチェックできます。&lt;/p&gt;
&lt;p&gt;コマンドでメールを送信したい場合は年間$25払ってとWebページには記載されていますが、メールを送信しなければフリーで使えます。&lt;/p&gt;
&lt;p&gt;コマンドの実行結果は下記のような感じです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ piprot requirements.txt test_requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;click &lt;span class="o"&gt;(&lt;/span&gt;5.1&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;elastictabstops &lt;span class="o"&gt;(&lt;/span&gt;1.0.0&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pyvmomi &lt;span class="o"&gt;(&lt;/span&gt;5.5.0-2014.1.1&lt;span class="o"&gt;)&lt;/span&gt; is out of date. Latest is 5.5.0-2014.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flake8-pep257 &lt;span class="o"&gt;(&lt;/span&gt;1.0.3&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flake8 &lt;span class="o"&gt;(&lt;/span&gt;2.5.0&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pep257 &lt;span class="o"&gt;(&lt;/span&gt;0.6.0&lt;span class="o"&gt;)&lt;/span&gt; is &lt;span class="m"&gt;80&lt;/span&gt; days out of date. Latest is 0.7.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pep8-naming &lt;span class="o"&gt;(&lt;/span&gt;0.3.3&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;piprot &lt;span class="o"&gt;(&lt;/span&gt;0.9.4&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pytest-cov &lt;span class="o"&gt;(&lt;/span&gt;2.2.0&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pytest-xdist &lt;span class="o"&gt;(&lt;/span&gt;1.13.1&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pytest &lt;span class="o"&gt;(&lt;/span&gt;2.8.2&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tox &lt;span class="o"&gt;(&lt;/span&gt;2.1.1&lt;span class="o"&gt;)&lt;/span&gt; is up to date
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your requirements are &lt;span class="m"&gt;65&lt;/span&gt; days out of date
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="compiler-warnings-の設定"&gt;Compiler Warnings の設定&lt;/h2&gt;
&lt;p&gt;いきなりですが、Jenkinsに&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Warnings&amp;#43;Plugin"&gt;Warnings Plugin&lt;/a&gt;をインストールしている前提です。&lt;/p&gt;
&lt;p&gt;Jenkins -&amp;gt; Manage Jenkins -&amp;gt; Compiler Warnings でパーサを追加します。&lt;/p&gt;
&lt;p&gt;設定は下記のようにします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;Piprot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Link name: &lt;code&gt;Piprot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Trend report name: &lt;code&gt;Piprot Warnings Trend&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Regular Expression: &lt;code&gt;(.+) \((.+)\) .* out of date. Latest is (.+)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mapping Script:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-groovy" data-lang="groovy"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;hudson.plugins.warnings.parser.Warning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;requiredPackage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;matcher&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;currentVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;matcher&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;latestVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;matcher&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;piprot&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requiredPackage&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;currentVersion&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; is out of date. Latest is &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;latestVersion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Warning&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;requiredPackage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Piprot Parser&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="job-の設定"&gt;Job の設定&lt;/h2&gt;
&lt;p&gt;下記のような感じで、Build -&amp;gt; Execute shell にスクリプトを書き、 &lt;code&gt;piprot&lt;/code&gt; を実行するようにします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;piprot requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Post-build Actions -&amp;gt; Scan for compiler warnings の Scan console log に下記のように設定します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parser: &lt;code&gt;Piprot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;さらに Advanced&amp;hellip; で、下記のようにしています。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151028-status-thresholds.png" alt="status-thresholds"&gt;&lt;/p&gt;
&lt;h2 id="ビルド結果"&gt;ビルド結果&lt;/h2&gt;
&lt;p&gt;下記の画像のようにビルド結果にPiprotというのが追加されます。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151028-build-result-warnings.png" alt="build-result-warnings"&gt;
クリックすると下記のような画面になります。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151028-piprot-details-files.png" alt="piprot-details-files"&gt;
Mapping Scriptでパッケージ名をファイル名としているので、パッケージ毎に情報が表示されています。&lt;/p&gt;
&lt;p&gt;Warningsタブ。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151028-piprot-details-warnings.png" alt="piprot-details-warnings"&gt;
Detailsタブ。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151028-piprot-details-details.png" alt="piprot-details-details"&gt;
トレンドのグラフも表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20151028-piprot-warnings-trend.png" alt="piprot-warnings-trend"&gt;&lt;/p&gt;</description></item><item><title>vCenter Server Appliance 6.0 fsck failed</title><link>https://www.higebu.com/blog/2015/07/30/vcenter-server-appliance-60-fsck-failed/</link><pubDate>Thu, 30 Jul 2015 15:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/07/30/vcenter-server-appliance-60-fsck-failed/</guid><description>&lt;p&gt;&lt;img src="https://www.higebu.com/images/20150730-vcenter-server-appliance-60-fsck-failed.png" alt="Shot&amp;#34;"&gt;
検証環境の vCSA 6.0 が突然落ちて、コンソールを見たら画像のようになっていたので、直した話です。&lt;/p&gt;
&lt;h2 id="環境"&gt;環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;vCenter Server Appliance 6.0.0&lt;/li&gt;
&lt;li&gt;Platform Services Controller は別に立てている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="事象"&gt;事象&lt;/h2&gt;
&lt;p&gt;画像のように &lt;code&gt;/dev/mapper/db_vg-db&lt;/code&gt; の &lt;code&gt;fsck&lt;/code&gt; に失敗したというエラーがコンソールに表示されます。&lt;/p&gt;
&lt;h2 id="復旧方法"&gt;復旧方法&lt;/h2&gt;
&lt;p&gt;本来であれば、先ほどの画面でパスワードを2回入力した後、下記のコマンドを実行するとシェルにログインできます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;shell.set --enabled true
shell
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;しかし、今回は &lt;code&gt;shell.set&lt;/code&gt; もエラーになってしまったため、 &lt;a href="http://kb.vmware.com/kb/2069041"&gt;KB2069041&lt;/a&gt; の手順でシェルにログインしました。&lt;/p&gt;
&lt;p&gt;以下、復旧手順です。&lt;/p&gt;
&lt;p&gt;まず、 &lt;code&gt;pvscan&lt;/code&gt;, &lt;code&gt;vgscan&lt;/code&gt;, &lt;code&gt;lvscan&lt;/code&gt; 辺りのコマンドを実行し、状態を確認します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pvscan&lt;/code&gt; の実行結果は下記のようになるはずです。 &lt;code&gt;pvscan&lt;/code&gt; でデバイスがないとか何かエラーが出ていたら今回の手順では復旧できないと思います。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Failed to find sysfs mont point
PV /dev/sdk VG invsvc_vg lvm2 [9.99 GiB / 0 free]
PV /dev/sdj VG autodeploy_vg lvm2 [9.99 GiB / 0 free]
PV /dev/sdi VG netdump_vg lvm2 [1016.00 MiB / 0 free]
PV /dev/sdh VG seat_vg lvm2 [24.99 GiB / 0 free]
PV /dev/sdg VG dblog_vg lvm2 [4.99 GiB / 0 free]
PV /dev/sdf VG db_vg lvm2 [9.99 GiB / 0 free]
PV /dev/sde VG log_vg lvm2 [9.99 GiB / 0 free]
PV /dev/sdd VG core_vg lvm2 [49.99 GiB / 0 free]
PV /dev/sdc VG swap_vg lvm2 [24.99 GiB / 0 free]
Total: 9 [145.93 GiB] / in use: 9 [145.93 GiB] / in no VG: 0 [0 ]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;db_vg&lt;/code&gt; を active にします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;lvchange -ay db_vg
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;e2fsck&lt;/code&gt; を実行します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;e2fsck -y /dev/mapper/db_vg-db
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;/dev/mapper/db_vg-db&lt;/code&gt; がないと言われたら &lt;code&gt;vgcfgrestore db_vg&lt;/code&gt; したら良いかもしれません。&lt;/p&gt;
&lt;p&gt;この後、vCSA で Inventory Service が起動しない状態になっており、ログを見たところ、 ldap 関連のエラーが出ていたため、 Platform Services Controller を再起動して、 vCSA も再起動したら元の状態に戻りました。&lt;/p&gt;
&lt;p&gt;本番環境では起きて欲しくない障害ですね。。。&lt;/p&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.virtualizationteam.com/server-virtualization/vcenter-appliance-fsck-failed.html"&gt;vCenter Appliance fsck failed&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;5.5 で root fs の &lt;code&gt;fsck&lt;/code&gt; をする話&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cormachogan.com/2015/06/03/fsck-of-vcenter-server-appliance-6-0-partitions/"&gt;fsck of vCenter Server Appliance 6.0 partitions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;ほとんど同じ内容&lt;/li&gt;
&lt;li&gt;この記事では &lt;code&gt;lvchange&lt;/code&gt; していないが、しないと &lt;code&gt;/dev/mapper&lt;/code&gt; ディレクトリが出現しなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.softpanorama.org/Commercial_linuxes/LVM/recovery_of_lvm_partitions.shtml"&gt;Recovery of LVM partitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.novell.com/coolsolutions/appnote/19386.html"&gt;Recovering a Lost LVM Volume Disk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unixbhaskar.wordpress.com/2010/08/16/how-to-properly-run-fsck-on-root-or-other-partitions-including-lvm/"&gt;How to properly run fsck on (/) root or other partitions including LVM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>runC を試してみる</title><link>https://www.higebu.com/blog/2015/06/23/runc/</link><pubDate>Tue, 23 Jun 2015 21:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/06/23/runc/</guid><description>&lt;p&gt;runC がリリースされましたが、&lt;a href="http://runc.io"&gt;runc.io&lt;/a&gt;の手順では動かなかったので動かすところまでメモしておく。&lt;/p&gt;
&lt;p&gt;2015/06/23時点で書いた記事です。&lt;/p&gt;
&lt;h2 id="環境"&gt;環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 15.04&lt;/li&gt;
&lt;li&gt;golang 1.4.2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="runc-のインストール"&gt;runC のインストール&lt;/h2&gt;
&lt;p&gt;前もって &lt;a href="https://golang.org/"&gt;Go&lt;/a&gt; をインストールしておく必要がありますが、省略します。
インストールは &lt;a href="https://github.com/opencontainers/runc"&gt;github.com/opencontainers/runc&lt;/a&gt; のREADMEに書いてある通りでいけます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://github.com/opencontainers/runc $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make
sudo make install
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="docker-コンテナを-export-して実行する"&gt;Docker コンテナを export して実行する&lt;/h2&gt;
&lt;p&gt;とりあえず、 alpine でやると下記のような感じ。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker pull alpine
docker run --name alpine alpine /bin/sh
mkdir alpine
cd alpine
mkdir rootfs
docker export alpine | tar xf - -C rootfs
runc spec &amp;gt; container.json
sudo runc
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;nginx のコンテナを動かそうと思ったけど、ネットワーク周りの spec がないし、実装もなかったので、追加してみているが、うまく動いていないので何か間違っていそう。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/higebu/runc/tree/add-networks"&gt;https://github.com/higebu/runc/tree/add-networks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;runc の specs がない問題は、 &lt;a href="https://github.com/opencontainers/runc/issues/15"&gt;GitHub の Issue&lt;/a&gt; になっている。&lt;/p&gt;</description></item><item><title>Alpine Linux ベースで Docker イメージを作ると小さくて良い</title><link>https://www.higebu.com/blog/2015/06/15/build-docker-images-based-on-alpine-linux/</link><pubDate>Mon, 15 Jun 2015 02:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/06/15/build-docker-images-based-on-alpine-linux/</guid><description>&lt;h2 id="alpine-linux-の-docker-イメージのサイズ"&gt;Alpine Linux の Docker イメージのサイズ&lt;/h2&gt;
&lt;p&gt;最近仕事でいくつか Docker イメージを作っているんですが、その際の参考のために &lt;a href="https://hub.docker.com/"&gt;Docker Hub&lt;/a&gt; を漁っていたら、 &lt;code&gt;FROM alpine&lt;/code&gt; なイメージのサイズがとても小さいことを知りました。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://registry.hub.docker.com/_/alpine/"&gt;alpine:3.2&lt;/a&gt; は 5.242MB しかありません。&lt;/p&gt;
&lt;p&gt;Ubuntu など他の OS のイメージのサイズと比較してみると 100 MB 以上差があることがわかります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;REPOSITORY:TAG&lt;/th&gt;
&lt;th style="text-align: left"&gt;VIRTUAL SIZE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;alpine:3.2&lt;/td&gt;
&lt;td style="text-align: left"&gt;5.242 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;debian:jessie&lt;/td&gt;
&lt;td style="text-align: left"&gt;125.2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;ubuntu:trusty&lt;/td&gt;
&lt;td style="text-align: left"&gt;188.3 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;fedora:22&lt;/td&gt;
&lt;td style="text-align: left"&gt;186.5 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Docker はベースのイメージを初回しかダウンロードしないので、あまり気にする必要はないと思うかもしれませんが、数百台、数千台のクラスタを構築したいと思った時に、クラスタ全体が立ち上がるまでの時間が短縮されますし、ストレージもかなり節約できます。&lt;/p&gt;
&lt;p&gt;そんなわけで、今後は Ubuntu でないと動かないなどという制約でもない限り、 &lt;a href="http://alpinelinux.org/"&gt;Alpine Linux&lt;/a&gt; ベースでイメージを作っていこうと思っています。&lt;/p&gt;
&lt;h2 id="alpine-linux-ベースで-docker-イメージを作る"&gt;Alpine Linux ベースで Docker イメージを作る&lt;/h2&gt;
&lt;p&gt;例えば、zabbix-agent の Dockerfile は下記のような感じになります。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;FROM alpine:latest
RUN apk --update add zabbix-agent \
&amp;amp;&amp;amp; rm -rf /var/cache/apk/*
COPY docker-entrypoint.sh /docker-entrypoint.sh
EXPOSE 10050
ENTRYPOINT [&amp;#34;/docker-entrypoint.sh&amp;#34;]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ソースは &lt;a href="https://github.com/higebu/docker-zabbix-agent"&gt;GitHub&lt;/a&gt; に置いてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://alpinelinux.org/"&gt;Alpine Linux&lt;/a&gt; では &lt;a href="http://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management"&gt;apk&lt;/a&gt; というコマンドでパッケージを管理します。&lt;/p&gt;
&lt;p&gt;また、初期状態では下記の 15 パッケージしか入っておらず、必要なパッケージを自分でかなり入れる必要がある場合もあります。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# apk info
musl
busybox
alpine-baselayout
openrc
alpine-conf
zlib
libcrypto1.0
libssl1.0
apk-tools
busybox-initscripts
scanelf
musl-utils
libc-utils
alpine-keys
alpine-base
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;それ以外は他の Linux ディストリビューションと大きく違う点はないと思います。&lt;/p&gt;
&lt;p&gt;ちなみに先ほどの &lt;a href="https://registry.hub.docker.com/u/higebu/zabbix-agent/"&gt;zabbix-agent のイメージ&lt;/a&gt; は 8.527 MB で、 &lt;a href="https://registry.hub.docker.com/u/higebu/zabbix-agent-ubuntu/"&gt;Ubuntu でも作ってみた所&lt;/a&gt;、 200.9 MB になりました。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://registry.hub.docker.com/u/higebu/fluentd/"&gt;fluentd のイメージ&lt;/a&gt; は 176.7 MB になり、 &lt;a href="https://registry.hub.docker.com/u/fluent/fluentd/"&gt;fluent/fluentd&lt;/a&gt; の半分以下のサイズなのですが、 ruby 自体が大きいためこれよりは小さくできなそうです。&lt;/p&gt;
&lt;p&gt;以下、参考までに &lt;code&gt;docker images&lt;/code&gt; の結果を貼っておきます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;% docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
higebu/zabbix-agent-ubuntu latest eb7588d9a7f7 10 minutes ago 200.9 MB
higebu/fluentd latest 889b0fa11ffc About an hour ago 176.7 MB
fluent/fluentd latest 212de73247af 2 days ago 491.4 MB
higebu/zabbix-agent latest 31471e804003 4 days ago 8.527 MB
ubuntu latest fa81ed084842 6 days ago 188.3 MB
ubuntu trusty fa81ed084842 6 days ago 188.3 MB
alpine 3.2 8697b6cc1f48 9 days ago 5.242 MB
alpine latest 8697b6cc1f48 9 days ago 5.242 MB
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Packer で複数のリポジトリ名や複数のタグが付いた Docker イメージを作る</title><link>https://www.higebu.com/blog/2015/05/15/build-docker-image-with-multiple-repos-and-tags-using-packer/</link><pubDate>Fri, 15 May 2015 11:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/05/15/build-docker-image-with-multiple-repos-and-tags-using-packer/</guid><description>&lt;h2 id="環境"&gt;環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 15.04&lt;/li&gt;
&lt;li&gt;Docker 1.6.0&lt;/li&gt;
&lt;li&gt;Packer 0.7.5&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="例"&gt;例&lt;/h2&gt;
&lt;p&gt;いきなりですが、実際の例を見た方が早いので、テンプレートの例です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;builders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;image&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fedora&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;commit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;provisioners&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;shell&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;inline&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;yum update -y&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;yum clean all&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;post-processors&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker-tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;higebu/fedora1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;docker-push&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker-tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;higebu/fedora1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;latest&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;docker-push&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker-tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;higebu/fedora2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;docker-push&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker-tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;higebu/fedora2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;latest&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;docker-push&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;tag&lt;/code&gt; の部分に配列を渡せたらきれいなんですが、現状渡せないので、少し複雑なテンプレートになってしまっています。&lt;/p&gt;
&lt;p&gt;これを使って &lt;code&gt;packer build&lt;/code&gt; すると &lt;code&gt;higebu/fedora1:0.1&lt;/code&gt;、&lt;code&gt;higebu/fedora1:latest&lt;/code&gt;、&lt;code&gt;higebu/fedora2:0.1&lt;/code&gt;、&lt;code&gt;higebu/fedora2:latest&lt;/code&gt; が &lt;a href="https://hub.docker.com/"&gt;Docker Hub&lt;/a&gt; 上に作成されます。&lt;/p&gt;
&lt;p&gt;複数のタグを付けようと思って試していたら、複数のリポジトリもいけると気づいたんですが、何に使うのかは不明です。&lt;/p&gt;
&lt;h2 id="解説"&gt;解説&lt;/h2&gt;
&lt;p&gt;普通に &lt;code&gt;docker-tag&lt;/code&gt; post proccessor を並べると&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;* Post-processor failed: Unknown artifact type: packer.post-processor.docker-tag
Can only tag from Docker builder artifacts.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;というエラーになります。
エラーメッセージには、Docker builder の artifacts しかタグ付けられないよと書いてあるんですが、実際には &lt;code&gt;docker-import&lt;/code&gt; post proccessor の artifacts も受け取れますし、Docker Builder でも、&lt;code&gt;export_path&lt;/code&gt; を指定してエクスポートたものは受け取れません。&lt;/p&gt;
&lt;p&gt;普通に並べるというのは下記のような感じです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;post-processors&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker-tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;higebu/fedora1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker-tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;higebu/fedora1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;latest&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;docker-push&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これだと、&lt;code&gt;docker-tag&lt;/code&gt; で処理されたものが &lt;code&gt;docker-tag&lt;/code&gt; に渡されてしまいエラーになるので、上の例では並列にならべて、それぞれ &lt;code&gt;docker-push&lt;/code&gt; しています。
また、&lt;code&gt;export_path&lt;/code&gt; ではなく、 &lt;code&gt;&amp;quot;commit&amp;quot;: &amp;quot;true&amp;quot;&lt;/code&gt; にして、エクスポートしないようにしています。&lt;/p&gt;</description></item><item><title>vSphere Client 5.5 on Ubuntu 14.04</title><link>https://www.higebu.com/blog/2015/03/15/vsphere-client-on-ubuntu/</link><pubDate>Sun, 15 Mar 2015 12:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2015/03/15/vsphere-client-on-ubuntu/</guid><description>&lt;h2 id="環境"&gt;環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 14.04.2 amd64&lt;/li&gt;
&lt;li&gt;wine 1.7.38&lt;/li&gt;
&lt;li&gt;mono 4.5.4&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wine-と-net-のインストール"&gt;wine と .NET のインストール&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;下記のコマンドを実行&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo add-apt-repository ppa:ubuntu-wine/ppa
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install -y wine1.7 wine-mono4.5.4 wine-gecko2.34
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;wine のバージョンの確認&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ wine --version
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wine-1.7.38
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;32bit 環境の用意&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 winecfg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;XP になっているので、Windows7などにしておく&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;.NET インストール&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 winetricks dotnet20
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 winetricks dotnet30
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 winetricks dotnet20sp1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 winetricks dotnet30sp1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 winetricks dotnet35
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 winetricks dotnet35sp1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;途中でダウンロードして指定されたディレクトリに置けと言われるので、その通りにする。ディレクトリもダウンロード先のサイトも勝手に開くのでそこまで大変でもないです。&lt;/p&gt;
&lt;h2 id="vsphere-client-インストール"&gt;vSphere Client インストール&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;vSphere Client のインストーラをダウンロードして、下記のコマンドを実行&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine32 wine Downloads/VMware-viclient-all-5.5.0-1993072.exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="vsphere-client-起動"&gt;vSphere Client 起動&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;下記のコマンドを実行する&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 &lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;/.wine32 wine &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.wine32/drive_c/Program&lt;span class="se"&gt;\ &lt;/span&gt;Files/VMware/Infrastructure/Virtual&lt;span class="se"&gt;\ &lt;/span&gt;Infrastructure&lt;span class="se"&gt;\ &lt;/span&gt;Client/Launcher/VpxClient.exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下記の画像のようになります。デスクトップにショートカットもできていて、これをダブルクリックでも起動できます。便利な世の中になりましたね。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/20150315-vsphere-client.png" alt="vsphere-client"&gt;
ただ、現状ではコンソールが使えません。コンソールを見たいときは VMware Workstation を使うか、 VNC で接続することになります。&lt;/p&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.winehq.org/"&gt;Wine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://atmosphere147.blogspot.jp/2014/05/how-to-install-vsphere-client-55-on-mac.html"&gt;How to install vSphere Client 5.5 on Mac OSX using Wine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>VyOS で Docker を動かす</title><link>https://www.higebu.com/blog/2014/12/10/docker-on-vyos/</link><pubDate>Wed, 10 Dec 2014 23:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/12/10/docker-on-vyos/</guid><description>&lt;p&gt;この記事は、 &lt;a href="http://qiita.com/advent-calendar/2014/vyos"&gt;VyOS Advent Calendar 2014&lt;/a&gt; の10日目の記事です。&lt;/p&gt;
&lt;h2 id="作り方"&gt;作り方&lt;/h2&gt;
&lt;p&gt;VyOS は AUFS が入っていないので、カーネルからビルドし直します。&lt;/p&gt;
&lt;p&gt;普通に入れようとすると &lt;code&gt;FATAL: Module aufs not found.&lt;/code&gt; と怒られます。&lt;/p&gt;
&lt;p&gt;AUFS に対応させる手順は下記の通りです。&lt;/p&gt;
&lt;p&gt;まず、 &lt;code&gt;vyos-kernel&lt;/code&gt; を &lt;code&gt;git clone&lt;/code&gt; します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone git@github.com:vyos/vyos-kernel.git
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ここで、 &lt;code&gt;vyos-kernel&lt;/code&gt; に適当なブランチを作っておきます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aufs3-standalone&lt;/code&gt; のソースを持ってきてパッチを当てます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone git://aufs.git.sourceforge.net/gitroot/aufs/aufs3-standalone.git
pushd aufs3-standalone
git checkout origin/aufs3.13
popd
cp -r aufs3-standalone/{Documentation,fs} vyos-kernel
cp aufs3-standalone/include/uapi/linux/aufs_type.h vyos-kernel/include/uapi/linux/aufs_type.h
cd vyos-kernel
cat ../aufs3-standalone/aufs3-{base,kbuild,loopback,mmap,standalone}.patch | patch -p1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;また、 cgroup のオプションが足りないので、足します。&lt;/p&gt;
&lt;p&gt;AUFS を足しただけだと、下記のようになります。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ docker info
Containers: 0
Images: 7
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 7
Execution Driver: native-0.2
Kernel Version: 3.13.11-1-amd64-vyos
Operating System: &amp;lt;unknown&amp;gt;
WARNING: No memory limit support
WARNING: No swap limit support
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;config の diff は最終的に下記のようになりました。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# git diff HEAD^ debian/arch/amd64/config.amd64-vyos | cat -
diff --git a/debian/arch/amd64/config.amd64-vyos b/debian/arch/amd64/config.amd64-vyos
index 609abec..570c4a2 100644
--- a/debian/arch/amd64/config.amd64-vyos
+++ b/debian/arch/amd64/config.amd64-vyos
@@ -141,18 +141,26 @@ CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y
# CONFIG_NUMA_BALANCING is not set
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
-# CONFIG_CGROUP_FREEZER is not set
-# CONFIG_CGROUP_DEVICE is not set
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
-# CONFIG_CGROUP_CPUACCT is not set
-# CONFIG_RESOURCE_COUNTERS is not set
-# CONFIG_CGROUP_PERF is not set
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_RESOURCE_COUNTERS=y
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+CONFIG_MEMCG_SWAP_ENABLED=y
+CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
+CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y
+CONFIG_MEMCG_KMEM=y
+CONFIG_CGROUP_HUGETLB=y
+CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
-# CONFIG_CFS_BANDWIDTH is not set
-CONFIG_RT_GROUP_SCHED=y
-# CONFIG_BLK_CGROUP is not set
+CONFIG_CFS_BANDWIDTH=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_BLK_CGROUP=y
+# CONFIG_DEBUG_BLK_CGROUP is not set
# CONFIG_CHECKPOINT_RESTORE is not set
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
@@ -273,6 +281,7 @@ CONFIG_BLOCK=y
CONFIG_BLK_DEV_BSG=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
+CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_CMDLINE_PARSER is not set
#
@@ -307,6 +316,7 @@ CONFIG_BLOCK_COMPAT=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
+CONFIG_CFQ_GROUP_IOSCHED=y
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
@@ -4007,6 +4017,30 @@ CONFIG_CLKBLD_I8253=y
# CONFIG_POWERCAP is not set
#
+# AUFS Support
+#
+CONFIG_AUFS_FS=m
+CONFIG_AUFS_BRANCH_MAX_127=y
+# CONFIG_AUFS_BRANCH_MAX_511 is not set
+# CONFIG_AUFS_BRANCH_MAX_1023 is not set
+# CONFIG_AUFS_BRANCH_MAX_32767 is not set
+CONFIG_AUFS_SBILIST=y
+# CONFIG_AUFS_HNOTIFY is not set
+CONFIG_AUFS_EXPORT=y
+CONFIG_AUFS_XATTR=y
+# CONFIG_AUFS_FHSM is not set
+# CONFIG_AUFS_RDU is not set
+# CONFIG_AUFS_SHWH is not set
+CONFIG_AUFS_BR_RAMFS=y
+CONFIG_AUFS_BR_FUSE=y
+CONFIG_AUFS_BR_HFSPLUS=y
+# CONFIG_AUFS_DEBUG is not set
+# CONFIG_AUFS_MAGIC_SYSRQ is not set
+CONFIG_AUFS_BDEV_LOOP=y
+CONFIG_AUFS_INO_T_64=y
+CONFIG_AUFS_POLL=y
+
+#
# Firmware Drivers
#
CONFIG_EDD=m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;修正した &lt;code&gt;vyos-kernel&lt;/code&gt; は &lt;a href="https://github.com/higebu/vyos-kernel/tree/helium-docker"&gt;GitHub&lt;/a&gt; に置いてあります。&lt;/p&gt;
&lt;p&gt;ビルドの仕方は、昨日と同じで、シェルスクリプトにしてあって、 &lt;a href="https://gist.github.com/higebu/409c00db4aa1256e405b"&gt;gist&lt;/a&gt; に置いてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/hiroysato"&gt;hiroysato&lt;/a&gt; さんの &lt;a href="https://gist.github.com/hiroyuki-sato/201032fe75d2cf9f5801"&gt;Jessie 上で VyOS をビルドする手順&lt;/a&gt;を参考に Wheezy でビルドしました。&lt;/p&gt;
&lt;p&gt;興味のある方は読んでみてください。&lt;/p&gt;
&lt;h2 id="使い方"&gt;使い方&lt;/h2&gt;
&lt;p&gt;ISO をダウンロードし、インストールします。&lt;/p&gt;
&lt;p&gt;ビルド済みの ISO は &lt;a href="https://github.com/higebu/build-iso/releases/download/vyos%2F1.1.1-docker/VyOS-livecd-1412091651-cff5913-amd64.iso"&gt;GitHub&lt;/a&gt; に置いてあります。&lt;/p&gt;
&lt;p&gt;起動して、&lt;code&gt;show version&lt;/code&gt; すると下記のように表示されます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ show version
Version: VyOS 999.heliumdocker.12091651
Description: 999.heliumdocker.12091651
Copyright: 2014 VyOS maintainers and contributors
Built by: root@contributors.vyos.net
Built on: Tue Dec 9 16:51:21 UTC 2014
Build ID: 1412091651-cff5913
System type: x86 64-bit
Boot via: disk
Hypervisor: VMware
HW model: VMware Virtual Platform
HW S/N: VMware-42 02 fc 13 49 8a c7 0f-e6 f2 dc 16 0c 81 91 12
HW UUID: 4202FC13-498A-C70F-E6F2-DC160C819112
Uptime: 15:29:54 up 3 min, 1 user, load average: 0.01, 0.03, 0.02
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Docker をインストールします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;configure
set system package repository squeeze url http://ftp.jp.debian.org/debian/
set system package repository squeeze distribution squeeze
set system package repository squeeze components &amp;#39;main contrib non-free&amp;#39;
set system package repository squeeze-lts url http://ftp.jp.debian.org/debian/
set system package repository squeeze-lts distribution squeeze-lts
set system package repository squeeze-lts components &amp;#39;main contrib non-free&amp;#39;
commit
save
exit
sudo apt-get update
curl -sSL https://get.docker.com/ | /bin/sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;vyos ユーザを docker グループに所属させます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo usermod -aG docker vyos
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ログアウト、ログインします。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;start-stop-daemon&lt;/code&gt; が古く、 &lt;code&gt;--no-close&lt;/code&gt; に対応していないので、 &lt;code&gt;/etc/init.d/docker&lt;/code&gt; から消します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo sed -i &amp;#39;/--no-close/d&amp;#39; /etc/init.d/docker
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Docker を起動します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo /etc/init.d/docker start
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;docker info&lt;/code&gt; を見てみます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.13.11-1-amd64-vyos
Operating System: &amp;lt;unknown&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;WARNING は出ていません！&lt;/p&gt;
&lt;p&gt;Operating System が &lt;code&gt;&amp;lt;unknown&amp;gt;&lt;/code&gt; ですが気にしないことにして、 VyOS の Docker イメージを起動してみます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ docker run -d --privileged -v /lib/modules:/lib/modules -v /boot:/boot higebu/vyos:latest /sbin/init
01f328b0b8dbf763a1aada80e85980577146be377c4ea4d284583f02b8c44355
vyos@vyos:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01f328b0b8db higebu/vyos:1.1.1 &amp;#34;/sbin/init&amp;#34; 4 seconds ago Up 3 seconds suspicious_morse
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;中に入ってみます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ docker exec -ti suspicious_morse /bin/vbash
vbash-4.1# su - vyos
vyos@vyos:~$ show version
WARNING: terminal is not fully functional
Version: VyOS 1.1.1
Description: VyOS 1.1.1 (helium)
Copyright: 2014 VyOS maintainers and contributors
Built by: maintainers@vyos.net
Built on: Sun Dec 7 21:41:28 UTC 2014
Build ID: 1412072141-129950d
System type: x86 64-bit
Boot via: disk
Hypervisor: VMware
HW model: VMware Virtual Platform
HW S/N: VMware-42 02 fc 13 49 8a c7 0f-e6 f2 dc 16 0c 81 91 12
HW UUID: 4202FC13-498A-C70F-E6F2-DC160C819112
Uptime: 06:47:14 up 21 min, 0 users, load average: 0.03, 0.05, 0.05
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一応動いていますね。&lt;/p&gt;
&lt;p&gt;しかし、 VyOS の Docker イメージがおかしいようで、 IP アドレスが付きません。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vbash-4.1# ip a
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
6: eth0: &amp;lt;BROADCAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet6 fe80::42:acff:fe11:3/64 scope link
valid_lft forever preferred_lft forever
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;下記のように &lt;code&gt;debian:latest&lt;/code&gt; のイメージを取ってきて動かすと IP アドレスが付いているので、 VyOS 上で Docker を動かすという部分については、今のところ問題ないと思っています。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ docker run -it debian:latest /bin/bash
Unable to find image &amp;#39;debian:latest&amp;#39; locally
debian:latest: The image you are pulling has been verified
511136ea3c5a: Pull complete
f10807909bc5: Pull complete
f6fab3b798be: Pull complete
Status: Downloaded newer image for debian:latest
root@2e86576d3b90:/#
root@2e86576d3b90:/#
root@2e86576d3b90:/# ip a
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
4: eth0: &amp;lt;BROADCAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;VyOS の Docker イメージを直すことができたら、またブログに書きたいと思います。&lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;</description></item><item><title>VyOS の Docker イメージを作ってみる</title><link>https://www.higebu.com/blog/2014/12/09/vyos-docker-image/</link><pubDate>Tue, 09 Dec 2014 23:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/12/09/vyos-docker-image/</guid><description>&lt;p&gt;この記事は、 &lt;a href="http://qiita.com/advent-calendar/2014/vyos"&gt;VyOS Advent Calendar 2014&lt;/a&gt; の9日目の記事です。&lt;/p&gt;
&lt;p&gt;VyOS のコンテナがあったら面白そうということで作ってみました。&lt;/p&gt;
&lt;h2 id="作り方"&gt;作り方&lt;/h2&gt;
&lt;p&gt;VyOS には &lt;code&gt;debootstrap&lt;/code&gt; が入っていないため ISO から作っています。&lt;/p&gt;
&lt;p&gt;基本的には、 &lt;a href="https://github.com/vyos/build-ami"&gt;vyos/build-ami&lt;/a&gt; と &lt;a href="https://docs.docker.com/articles/baseimages/"&gt;Docker 公式ドキュメント&lt;/a&gt;を参考にしています。&lt;/p&gt;
&lt;p&gt;また、イメージの作成は手元の Ubuntu 14.04 で行いました。&lt;/p&gt;
&lt;p&gt;流れは下記の通りですが、シェルスクリプトにしてしまったので、1つ1つは説明しません。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker&lt;/code&gt; をインストール&lt;/li&gt;
&lt;li&gt;&lt;code&gt;overlayroot&lt;/code&gt; をインストール&lt;/li&gt;
&lt;li&gt;ISO をダウンロード&lt;/li&gt;
&lt;li&gt;ISO をマウント&lt;/li&gt;
&lt;li&gt;ISO の中身から root パーティションを構築&lt;/li&gt;
&lt;li&gt;イメージビルド用ディレクトリにコピー&lt;/li&gt;
&lt;li&gt;イメージビルド用ディレクトリを圧縮&lt;/li&gt;
&lt;li&gt;Dockerfile を作成&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、スクリプト内でイメージ名に Docker Hub のユーザ名を含めているため &lt;code&gt;docker login&lt;/code&gt; しておきます。&lt;/p&gt;
&lt;p&gt;引数に ISO の URL を指定して実行します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://gist.githubusercontent.com/higebu/c152e73c20d438e33134/raw/cacc01517e2898e09bd98dd7303693af74b82aff/mkimage_vyos.sh
chmod +x mkimage_vyos.sh
./mkimage_vyos.sh http://mirror.vyos-users.jp/iso/release/1.1.1/vyos-1.1.1-amd64.iso
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;スクリプトは &lt;a href="https://gist.github.com/higebu/c152e73c20d438e33134"&gt;gist&lt;/a&gt; に置いてありますので、興味のある方はご参照ください。&lt;/p&gt;
&lt;p&gt;できあがったものは &lt;a href="https://registry.hub.docker.com/u/higebu/vyos/"&gt;Docker Hub&lt;/a&gt; に置いてあります。&lt;/p&gt;
&lt;h2 id="使い方"&gt;使い方&lt;/h2&gt;
&lt;p&gt;使い方は模索中ですが、下記のようにすると一応起動します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker run -d --privileged -v /lib/modules:/lib/modules higebu/vyos:latest /sbin/init
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;カーネルモジュールが必要なサービスばかりのため、 &lt;code&gt;-v /lib/modules:/lib/modules&lt;/code&gt; でホストのカーネルモジュールを読み込めるようにしています。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--privileged&lt;/code&gt; を付けないと &lt;code&gt;/lib/modules&lt;/code&gt; 配下のファイルを読めず、カーネルモジュールが必要なサービスが起動しません。&lt;/p&gt;
&lt;p&gt;その後、下記のようにすると vyos ユーザになれます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker exec -ti {name} /bin/vbash
su - vyos
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;configure&lt;/code&gt; などのコマンドも普通に動きます。&lt;/p&gt;
&lt;p&gt;ただ、このままだと、 Ubuntu のカーネルモジュールで動いており、パッチを当てている、 VyOS のカーネルモジュールとは別物の可能性もあるので、 VyOS の上で Docker を動かせないかやってみたというのを明日書こうと思います。&lt;/p&gt;</description></item><item><title>VyOS のインストールとアップグレード</title><link>https://www.higebu.com/blog/2014/12/02/how-to-install-and-upgrade-vyos/</link><pubDate>Tue, 02 Dec 2014 23:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/12/02/how-to-install-and-upgrade-vyos/</guid><description>&lt;p&gt;この記事は、 &lt;a href="http://qiita.com/advent-calendar/2014/vyos"&gt;VyOS Advent Calendar 2014&lt;/a&gt; の2日目の記事です。&lt;/p&gt;
&lt;p&gt;今回は、インストールとアップグレードについて説明します。&lt;/p&gt;
&lt;p&gt;使用するバージョンは、現在の最新の安定版である、 1.1.0 です。&lt;/p&gt;
&lt;h1 id="インストール"&gt;インストール&lt;/h1&gt;
&lt;p&gt;まず、 ISO イメージをダウンロードします。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mirror.vyos.net/iso/release/1.1.0/vyos-1.1.0-amd64.iso"&gt;本家のミラー&lt;/a&gt;か、&lt;a href="http://ftp.tsukuba.wide.ad.jp/software/vyos/iso/release/1.1.0/vyos-1.1.0-amd64.iso"&gt;日本のミラー&lt;/a&gt;からダウンロードします。&lt;/p&gt;
&lt;p&gt;ダウンロードした ISO を実際のマシンでも仮想マシンでも良いのでマウントして起動します。&lt;/p&gt;
&lt;p&gt;起動すると以下のような画面になるのでログインします。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/vyos1-2014-12-02-22-43-58.png" alt="vyos"&gt;
ブート画面にも書いてありますが、 ID とパスワードは共に vyos です。&lt;/p&gt;
&lt;p&gt;インストールコマンドは &lt;code&gt;install system&lt;/code&gt; と &lt;code&gt;install image&lt;/code&gt; がありますが、推奨の &lt;code&gt;install image&lt;/code&gt; を使います。&lt;/p&gt;
&lt;p&gt;インストールの流れは下記の通りです。&lt;/p&gt;
&lt;p&gt;パーティションを自分で設定したいとき以外は、大きな変更はないと思います。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ install image
Welcome to the VyOS install program. This script
will walk you through the process of installing the
VyOS image to a local hard drive.
Would you like to continue? (Yes/No) [Yes]: Yes
Probing drives: OK
Looking for pre-existing RAID groups...none found.
The VyOS image will require a minimum 1000MB root.
Would you like me to try to partition a drive automatically
or would you rather partition it manually with parted? If
you have already setup your partitions, you may skip this step
Partition (Auto/Parted/Skip) [Auto]:
I found the following drives on your system:
sda 8589MB
Install the image on? [sda]:
This will destroy all data on /dev/sda.
Continue? (Yes/No) [No]: Yes
How big of a root partition should I create? (1000MB - 8589MB) [8589]MB:
Creating filesystem on /dev/sda1: OK
Done!
Mounting /dev/sda1...
What would you like to name this image? [1.1.0]:
OK. This image will be named: 1.1.0
Copying squashfs image...
Copying kernel and initrd images...
Done!
I found the following configuration files:
/config/config.boot
/opt/vyatta/etc/config.boot.default
Which one should I copy to sda? [/config/config.boot]:
Copying /config/config.boot to sda.
Enter password for administrator account
Enter password for user &amp;#39;vyos&amp;#39;:
Retype password for user &amp;#39;vyos&amp;#39;:
I need to install the GRUB boot loader.
I found the following drives on your system:
sda 8589MB
Which drive should GRUB modify the boot partition on? [sda]:
Setting up grub: OK
Done!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;インストールが終わったら再起動します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ reboot
Proceed with reboot? (Yes/No) [No] Yes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;バージョンを確認します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ show version
Version: VyOS 1.1.0
Description: VyOS 1.1.0 (helium)
Copyright: 2014 VyOS maintainers and contributors
Built by: maintainers@vyos.net
Built on: Thu Oct 9 22:27:26 UTC 2014
Build ID: 1410092227-af6433f
System type: x86 64-bit
Boot via: image
Hypervisor: VMware
HW model: VMware Virtual Platform
HW S/N: VMware-56 4d 8c 89 9f 3f 1e 76-e3 89 53 a5 85 f5 46 fc
HW UUID: 564D8C89-9F3F-1E76-E389-53A585F546FC
Uptime: 13:54:20 up 0 min, 1 user, load average: 0.37, 0.11, 0.04
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;今回は、 VMware Workstation 上でインストールしたため、 HW model が VMware Virtual Platform になっていますが、他の環境では異なる文字列になっています。&lt;/p&gt;
&lt;p&gt;インストールについて、詳しくは、&lt;a href="http://vyos.net/wiki/User_Guide#Installation"&gt;公式のドキュメント&lt;/a&gt;か&lt;a href="http://wiki.vyos-users.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89#.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB"&gt;日本語訳&lt;/a&gt;をご参照ください。&lt;/p&gt;
&lt;h1 id="アップグレード"&gt;アップグレード&lt;/h1&gt;
&lt;p&gt;次に先ほどインストールしたものから、 1.1.1 rc1 にアップグレードします。&lt;/p&gt;
&lt;p&gt;アップグレードについては&lt;a href="http://vyos.net/wiki/Upgrade"&gt;公式のドキュメント&lt;/a&gt;に書いてあります。&lt;/p&gt;
&lt;p&gt;日本語訳はまだありません。。。&lt;/p&gt;
&lt;p&gt;アップグレードの流れは下記の通りです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;add system image&lt;/code&gt; コマンドの引数に ISO イメージの URL を渡します。&lt;/p&gt;
&lt;p&gt;イメージの名前は好きなものを指定できますが、ここでは、そのままにしています。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ add system image http://dev.packages.vyos.net/iso/helium/amd64/VyOS-livecd-1412020000-af6433f-amd64.iso
Trying to fetch ISO file from http://dev.packages.vyos.net/iso/helium/amd64/VyOS-livecd-1412020000-af6433f-amd64.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 231M 100 231M 0 0 1922k 0 0:02:03 0:02:03 --:--:-- 2568k
ISO download succeeded.
Checking for digital signature file...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (22) The requested URL returned error: 404
Unable to fetch digital signature file.
Do you want to continue without signature check? (yes/no) [yes]
Checking MD5 checksums of files on the ISO image...OK.
Done!
What would you like to name this image? [VyOS-999.helium.12020000]:
OK. This image will be named: VyOS-999.helium.12020000
Installing &amp;#34;VyOS-999.helium.12020000&amp;#34; image.
Copying new release files...
Would you like to save the current configuration
directory and config file? (Yes/No) [Yes]:
Copying current configuration...
Would you like to save the SSH host keys from your
current configuration? (Yes/No) [Yes]:
Copying SSH keys...
Setting up grub configuration...
Done.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;インストールされたイメージを確認します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ show system image
The system currently has the following image(s) installed:
1: VyOS-999.helium.12020000 (default boot)
2: 1.1.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;この状態ではまだアップグレードされていないので、 &lt;code&gt;reboot&lt;/code&gt; で再起動します。&lt;/p&gt;
&lt;p&gt;再起動後、 show version するとバージョンアップされているのを確認できます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ show version
Version: VyOS 999.helium.12020000
Description: 999.helium.12020000
Copyright: 2014 VyOS maintainers and contributors
Built by: autobuild@vyos.net
Built on: Tue Dec 2 00:00:38 UTC 2014
Build ID: 1412020000-af6433f
System type: x86 64-bit
Boot via: image
Hypervisor: VMware
HW model: VMware Virtual Platform
HW S/N: VMware-56 4d 8c 89 9f 3f 1e 76-e3 89 53 a5 85 f5 46 fc
HW UUID: 564D8C89-9F3F-1E76-E389-53A585F546FC
Uptime: 14:15:36 up 0 min, 1 user, load average: 0.29, 0.08, 0.03
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;では、前のバージョンに戻してみましょう。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;set system image default-boot&lt;/code&gt; コマンドを使います。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ set system image default-boot 1.1.0
Default boot image has been set to &amp;#34;1.1.0&amp;#34;.
You need to reboot the system to start the new default image.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;もう一度再起動するとバージョンが戻っているのを確認できます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vyos@vyos:~$ show version
Version: VyOS 1.1.0
Description: VyOS 1.1.0 (helium)
Copyright: 2014 VyOS maintainers and contributors
Built by: maintainers@vyos.net
Built on: Thu Oct 9 22:27:26 UTC 2014
Build ID: 1410092227-af6433f
System type: x86 64-bit
Boot via: image
Hypervisor: VMware
HW model: VMware Virtual Platform
HW S/N: VMware-56 4d 8c 89 9f 3f 1e 76-e3 89 53 a5 85 f5 46 fc
HW UUID: 564D8C89-9F3F-1E76-E389-53A585F546FC
Uptime: 14:19:10 up 0 min, 1 user, load average: 0.04, 0.01, 0.01
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;新しいバージョンが出たときに今の設定がそのまま動くか試すときにとても便利です。&lt;/p&gt;
&lt;p&gt;簡単にできますので、ぜひ試してみてください。&lt;/p&gt;</description></item><item><title>CoreOS のビルド方法とカスタマイズ</title><link>https://www.higebu.com/blog/2014/12/02/how-to-build-customized-coreos/</link><pubDate>Tue, 02 Dec 2014 19:30:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/12/02/how-to-build-customized-coreos/</guid><description>&lt;p&gt;この記事は、 &lt;a href="https://coreos.com/"&gt;CoreOS Advent Calendar 2014&lt;/a&gt; の2日目の記事です。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://qiita.com/advent-calendar/2014/coreos"&gt;CoreOS&lt;/a&gt; は、 Chrome OS をフォークしたもので、 Chrome OS が &lt;a href="https://www.gentoo.org/"&gt;Gentoo Linux&lt;/a&gt; ベースのため、 CoreOS も Gentoo Linux ベースになっており、 Gentoo のパッケージを持ってくるか、自分で ebuild ファイルを書くことで、パッケージを追加できます。&lt;/p&gt;
&lt;p&gt;ただし、 rootfs はリードオンリーになっているため、ビルド時に追加する必要があります。&lt;/p&gt;
&lt;p&gt;そこで、この記事では、ビルド方法と、パッケージの追加方法について説明します。&lt;/p&gt;
&lt;h1 id="1-普通にビルドする方法"&gt;1 普通にビルドする方法&lt;/h1&gt;
&lt;p&gt;基本的には &lt;a href="https://coreos.com/docs/sdk-distributors/sdk/modifying-coreos/"&gt;公式ドキュメント&lt;/a&gt;の方法に従います。&lt;/p&gt;
&lt;p&gt;また、ここでは Ubuntu 14.04 を利用する前提でコマンドを記載します。&lt;/p&gt;
&lt;h3 id="10-準備"&gt;1.0. 準備&lt;/h3&gt;
&lt;p&gt;ドキュメントには記載がありませんが、 root ユーザでは、 cros_sdk コマンドがエラーになるため、ビルド用のユーザを作成してから作業します。&lt;/p&gt;
&lt;p&gt;ここでは、 build という名前でユーザを作成します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;adduser build
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;curl と git をインストールします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt-get install -y curl git
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="11-depot_tools-のインストール"&gt;1.1. depot_tools のインストール&lt;/h3&gt;
&lt;p&gt;depot_tools というのは、&lt;a href="http://www.chromium.org/"&gt;The Chromium Project&lt;/a&gt; で使われている、ソースコード管理やコードレビューのためのツールの詰め合わせです。&lt;/p&gt;
&lt;p&gt;インストールするには、下記のコマンドを実行します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=&amp;#34;$PATH&amp;#34;:`pwd`/depot_tools
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;PATH&lt;/code&gt; を &lt;code&gt;.bashrc&lt;/code&gt; などで設定してしまっても良いのですが、自分はこの辺りの処理を全て1つのスクリプトで行っており、常にクリーンな状態からビルドするようにしているため、毎回 &lt;code&gt;git clone&lt;/code&gt; して &lt;code&gt;export&lt;/code&gt; しています。&lt;/p&gt;
&lt;h3 id="12-sdk-chroot-をセットアップ"&gt;1.2. SDK chroot をセットアップ&lt;/h3&gt;
&lt;p&gt;作業用ディレクトリを作成します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir coreos; cd coreos
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;.repo&lt;/code&gt; というディレクトリを指定した manifest で初期化します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;repo init -u https://github.com/coreos/manifest.git -g minilayout --repo-url https://chromium.googlesource.com/external/repo.git
repo sync
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上記のコマンドでは、ブランチを指定していないため、 master ブランチが参照されます。&lt;/p&gt;
&lt;p&gt;特定のバージョンの CoreOS をビルドするには下記のようにします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;repo init -u https://github.com/coreos/manifest.git -b refs/tags/v509.1.0 -g minilayout --repo-url https://chromium.googlesource.com/external/repo.git -m release.xml
repo sync
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;-b でタグを指定し、 -m で manifest ファイルを指定しています。&lt;/p&gt;
&lt;p&gt;manifest ファイルを指定しない場合、 master.xml が参照され、 master.xml の内容では、coreos-overlay や docker などの各リポジトリの最新のソースを取ってきてしまうため、欲しいバージョンの CoreOS とはかけ離れたものになってしまいます。&lt;/p&gt;
&lt;p&gt;release.xml では、各リポジトリの特定の revision が書いてあり、正しいソースを取得することができます。&lt;/p&gt;
&lt;p&gt;ちなみに、実際に v509.1.0 の manifest で &lt;code&gt;repo sync&lt;/code&gt; すると &lt;a href="https://github.com/coreos/manifest/commit/70e6eadb9e729f0c9f14bff3f29270cfd32082c3"&gt;docker のリポジトリが間違っている&lt;/a&gt;ため、エラーになります。&lt;/p&gt;
&lt;p&gt;v509.1.0 をビルドする場合は、 build-509 というブランチを利用しなければなりません。&lt;/p&gt;
&lt;p&gt;repo については、詳しくは &lt;a href="https://source.android.com/source/using-repo.html"&gt;Android の開発者用のサイト&lt;/a&gt;を見ると良いです。&lt;/p&gt;
&lt;h3 id="13-イメージのビルド"&gt;1.3. イメージのビルド&lt;/h3&gt;
&lt;p&gt;下記のコマンドを実行するとコンパイラなどの必要なツールを含んだ SDK chroot がダウンロードされ、 chroot 環境に入ります。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cros_sdk
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;chroot 環境に入らなかった場合は、 &amp;ndash;enter を付けて再度実行すると入ります。&lt;/p&gt;
&lt;p&gt;次に core ユーザのパスワードを設定します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./set_shared_user_password.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ビルドする環境を設定します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;echo amd64-usr &amp;gt; .default_board
./setup_board
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;パッケージをビルドします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./build_packages
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;イメージをビルドします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./build_image --noenable_rootfs_verification dev
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上記は開発用のイメージを作成するときのコマンドですが、プロダクション環境用のイメージを作るには次のようにします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./set_official
COREOS_OFFICIAL=1 ./build_image prod --group Alpha
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;./set_official&lt;/code&gt; で、 coreos-au-key という自動アップデート時に使われる認証用の鍵がインストールされます。&lt;/p&gt;
&lt;p&gt;また、 &lt;code&gt;COREOS_OFFICIAL=1&lt;/code&gt; で、バージョン番号から日付が消えます。&lt;/p&gt;
&lt;p&gt;最後に、各環境用のイメージに変換します。例えば、VMware 用のイメージであれば、下記のようにします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./image_to_vm.sh --from=../build/images/amd64-usr/latest --board=amd64-usr --prod_image --format vmware
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;変換後のファイルは、 src/build/images/amd64-usr/latest/ 配下に作成されます。&lt;/p&gt;
&lt;h1 id="2-カスタマイズする"&gt;2. カスタマイズする&lt;/h1&gt;
&lt;p&gt;ここからはおまけになってしまうかもしれませんが、 CoreOS をニフティクラウドの上で動かすために追加したパッケージについて説明します。&lt;/p&gt;
&lt;p&gt;zsh 入れたいみたいな話ではなく、自分たち専用のイメージを作って OEM 対応したいという場合の話になっています。&lt;/p&gt;
&lt;h3 id="21-oem-niftycloud-パッケージの作成"&gt;2.1. oem-niftycloud パッケージの作成&lt;/h3&gt;
&lt;p&gt;CoreOS は、各 IaaS プロバイダや、 OpenStack 、 CloudStack などの IaaS 基盤向けに oem-hoge というパッケージを作って対応しています。&lt;/p&gt;
&lt;p&gt;それらのソースは &lt;a href="https://github.com/coreos/coreos-overlay/tree/master/coreos-base"&gt;coreos/coreos-overlay/coreos-base&lt;/a&gt; 配下にあります。&lt;/p&gt;
&lt;p&gt;oem-hoge でやっていることは、主に下記の4つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/environment&lt;/code&gt; に &lt;code&gt;COREOS_PUBLIC_IPV4&lt;/code&gt; などを設定する&lt;/li&gt;
&lt;li&gt;oem 用の cloud-config で、必要なエージェントなどのデーモンを起動する&lt;/li&gt;
&lt;li&gt;SSHキーを設定する&lt;/li&gt;
&lt;li&gt;ユーザが設定した cloud-config を読み込んで、 coreos-cloudinit に渡す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;oem-niftycloud は下記のようになりました。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;coreos-overlay/coreos-base/oem-niftycloud/
├── files
│   ├── cloud-config.yml
│   ├── coreos-setup-environment
│   ├── niftycloud-coreos-cloudinit
│   └── niftycloud-ssh-key
└── oem-niftycloud-0.0.1.ebuild
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;cloud-config.yml
&lt;ul&gt;
&lt;li&gt;niftycloud 用の cloud-config&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;coreos-setup-environment
&lt;ul&gt;
&lt;li&gt;/etc/environment 作成用スクリプト&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;niftycloud-coreos-cloudinit
&lt;ul&gt;
&lt;li&gt;ユーザが設定した cloud-config を読み込んで、 coreos-cloudinit に渡すスクリプト&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;niftycloud-ssh-key
&lt;ul&gt;
&lt;li&gt;sshキーを設定するスクリプト&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;oem-niftycloud-0.0.1.ebuild
&lt;ul&gt;
&lt;li&gt;oem-niftycloud をインストールするための ebuild ファイル&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;各スクリプトについては、 &lt;a href="https://github.com/higebu/coreos-overlay/tree/niftycloud/coreos-base/oem-niftycloud"&gt;GitHub のリポジトリ&lt;/a&gt;に置いてありますので、そちらをご参照ください。&lt;/p&gt;
&lt;h3 id="22-niftycloud-フォーマットの作成"&gt;2.2. niftycloud フォーマットの作成&lt;/h3&gt;
&lt;p&gt;CoreOS はイメージをビルドする際に各環境毎に必要なパッケージを入れるようになっています。&lt;/p&gt;
&lt;p&gt;具体的には、 &lt;a href="https://github.com/coreos/scripts/blob/master/image_to_vm.sh"&gt;coreos/scripts/image_to_vm.sh&lt;/a&gt; の &amp;ndash;format オプションで指定するのですが、当然ながら niftycloud というフォーマットはありません。&lt;/p&gt;
&lt;p&gt;vmware であれば、 open-vm-tools が入るようになっていたり、 gce であれば、 GCE 上で動かすために必要なデーモンがインストールされるようになっています。&lt;/p&gt;
&lt;p&gt;そこで、ニフティクラウド用のイメージを作成するため、 &lt;code&gt;--format niftycloud&lt;/code&gt; と指定できるようにしました。&lt;/p&gt;
&lt;p&gt;修正したのは、 &lt;a href="https://github.com/higebu/scripts/blob/niftycloud/build_library/vm_image_util.sh"&gt;scripts/build_library/vm_image_util.sh&lt;/a&gt; というスクリプトです。&lt;/p&gt;
&lt;p&gt;修正内容は長くなってしまうので、 &lt;a href="https://github.com/higebu/scripts/commit/73e3b17251a6690a09bf9af5d078453614b42e36"&gt;GitHub のコミットログ&lt;/a&gt;をご参照ください。&lt;/p&gt;
&lt;h3 id="23-ビルド方法"&gt;2.3. ビルド方法&lt;/h3&gt;
&lt;p&gt;ここまで読めばわかると思いますが、1.3. イメージのビルドの最後の手順のオプションが下記のようになるだけです。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./image_to_vm.sh --from=../build/images/amd64-usr/latest --board=amd64-usr --prod_image --format niftycloud
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="3-ビルドの自動化"&gt;3. ビルドの自動化&lt;/h1&gt;
&lt;p&gt;これまでの作業を手で行うのは大変面倒なので自動化しています。&lt;/p&gt;
&lt;p&gt;自動化する際の Tips を紹介しておきます。&lt;/p&gt;
&lt;h3 id="31-repo-コマンドを初めて実行したときに色の出力をどうするか聞かれないようにする"&gt;3.1. repo コマンドを初めて実行したときに色の出力をどうするか聞かれないようにする&lt;/h3&gt;
&lt;p&gt;初めて &lt;code&gt;repo init&lt;/code&gt; すると下記のような質問が出ます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Your identity is: Yuya Kusakabe &amp;lt;yuya.kusakabe@gmail.com&amp;gt;
If you want to change this, please re-run &amp;#39;repo init&amp;#39; with --config-name
Testing colorized output (for &amp;#39;repo diff&amp;#39;, &amp;#39;repo status&amp;#39;):
black red green yellow blue magenta cyan white
bold dim ul reverse
Enable color display in this user account (y/N)?
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;これを回避するには、git の色の設定を前もってしておきます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git config --global color.ui false
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="32-core-ユーザのパスワード設定でパスワードを聞かれないようにする"&gt;3.2. core ユーザのパスワード設定でパスワードを聞かれないようにする&lt;/h3&gt;
&lt;p&gt;下記のように引数にパスワードを渡します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./set_shared_user_password.sh {password}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="33-sdk-chroot-環境に入らないようにする"&gt;3.3. SDK chroot 環境に入らないようにする&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;cros_sdk&lt;/code&gt; コマンドの後ろに &lt;code&gt;--&lt;/code&gt; を付けてから内部で実行したいコマンドを並べます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cros_sdk --download
cros_sdk -- &amp;#34;./set_shared_user_password.sh&amp;#34; &amp;#34;core&amp;#34;
echo &amp;#34;amd64-usr&amp;#34; &amp;gt; src/scripts/.default_board
cros_sdk -- &amp;#34;./setup_board&amp;#34;
cros_sdk -- &amp;#34;./build_packages&amp;#34;
cros_sdk -- &amp;#34;./set_official&amp;#34;
cros_sdk -- &amp;#34;COREOS_OFFICIAL=1&amp;#34; &amp;#34;./build_image&amp;#34; &amp;#34;prod&amp;#34; &amp;#34;--group&amp;#34; &amp;#34;Alpha&amp;#34;
cros_sdk -- &amp;#34;./image_to_vm.sh&amp;#34; &amp;#34;--from=../build/images/amd64-usr/latest&amp;#34; &amp;#34;--board=amd64-usr&amp;#34; &amp;#34;--prod_image&amp;#34; &amp;#34;--format&amp;#34; &amp;#34;niftycloud&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="最後に"&gt;最後に&lt;/h1&gt;
&lt;p&gt;CoreOS をビルドしたり、 OEM 対応したりする人は稀だと思いますが、似たようなことをする方の参考になれば幸いです。&lt;/p&gt;
&lt;p&gt;&lt;del&gt;実は、ここまでやってもニフティクラウドのイメージは自動アップデートに対応できていません。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;理由は、本家の ohama サーバに oem-id が登録されていないせいのようなので、現在プルリクエスト中です。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;2014/12/29 追記: アップデートできなかったのは別の問題だったようで、ビルドし直したところ、問題なくアップデートできました。&lt;/p&gt;
&lt;p&gt;ちなみに &lt;code&gt;update_engine_client -update&lt;/code&gt; で手動アップデートできるので便利です。&lt;/p&gt;</description></item><item><title>VyOS の概要</title><link>https://www.higebu.com/blog/2014/12/01/vyos-overview/</link><pubDate>Mon, 01 Dec 2014 23:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/12/01/vyos-overview/</guid><description>&lt;p&gt;この記事は、 &lt;a href="http://qiita.com/advent-calendar/2014/vyos"&gt;VyOS Advent Calendar 2014&lt;/a&gt; の1日目の記事です。&lt;/p&gt;
&lt;h1 id="vyos-とは"&gt;VyOS とは&lt;/h1&gt;
&lt;p&gt;VyOS って何？という方も多いと思いますので、まずは、 VyOS の概要を説明したいと思います。&lt;/p&gt;
&lt;p&gt;VyOS は、開発が停止してしまった、 Vyatta Core 6.6 R1 をフォークしたものです。&lt;/p&gt;
&lt;p&gt;Vyatta 自体は、 Brocade 社に買収された後も開発が続けられておりますが、 OSS ではなくなっています。&lt;/p&gt;
&lt;p&gt;開発は、元 Vyatta 社の &lt;a href="http://baturin.org/"&gt;Daniil Baturin&lt;/a&gt; が中心になって行っています。&lt;/p&gt;
&lt;p&gt;VyOS の元になっている、 Vyatta Core 6.6 というバージョンでは、 Vyatta の商用版のルーティングソフトウェアが Quagga から ZebOS に変わっており、その影響で、無償版の Vyatta Core では IPv4 の BGP ピアグループが動かないというバグがありました。&lt;/p&gt;
&lt;p&gt;このバグは、 VyOS 1.0.0 で修正されており、 &lt;a href="http://blog.vyos.net/post/72805171110/border-router-upgrade"&gt;AS5612 のルータが Vyatta Core 6.5 から VyOS 1.0.0 にアップグレード&lt;/a&gt;しています。&lt;/p&gt;
&lt;p&gt;最新版は、 1.1.0 でもうすぐ 1.1.1 がリリースされそうです。&lt;/p&gt;
&lt;h1 id="vyos-の特徴"&gt;VyOS の特徴&lt;/h1&gt;
&lt;h3 id="junos-ライクなコマンド"&gt;Junos ライクなコマンド&lt;/h3&gt;
&lt;p&gt;Junos ライクなコマンドと設定ファイルで各機能の設定を行うことができます。&lt;/p&gt;
&lt;p&gt;configure でコンフィグレーションモードに入るところや、設定の流れが、 commit で有効化、 save で保存になっており、 rollback も可能なところが、 Junos ライクなところだと思っています。&lt;/p&gt;
&lt;p&gt;ネットワーク機器が全て Junos ライクなわけではないですが、ネットワーク機器のような操作感があるため、ネットワークエンジニアがいじりやすいインターフェースになっています。&lt;/p&gt;
&lt;p&gt;※私は元々ネットワークエンジニアではないので、よくわかっていません。&lt;/p&gt;
&lt;h3 id="debian-ベース"&gt;Debian ベース&lt;/h3&gt;
&lt;p&gt;VyOS は、 Debian ベースの Linux ディストリビューションです。&lt;/p&gt;
&lt;p&gt;Debian ベースのため、使い慣れた Linux のコマンドを使うことができます。
また、自分でパッケージを追加し、機能を追加することが可能です。&lt;/p&gt;
&lt;p&gt;現状では、 Squeeze ベースになっていますが、より新しい Debian リリースに更新することが、プロジェクトのゴールの1つになっていますので、近い将来、 Wheezy ベースになるのではないかと思います。&lt;/p&gt;
&lt;h3 id="イメージベースのインストール方法"&gt;イメージベースのインストール方法&lt;/h3&gt;
&lt;p&gt;VyOS では、 overlayfs を用いた、イメージベースのインストールを行えるようになっています。&lt;/p&gt;
&lt;p&gt;（1.0.x までは unionfs を使っていました。）&lt;/p&gt;
&lt;p&gt;これにより、同じホストに複数のバージョンの VyOS をインストールできますので、新しいバージョンへのアップグレードが失敗したときなどに、簡単に前のバージョンの VyOS にロールバックすることが可能になっています。&lt;/p&gt;
&lt;p&gt;具体的な方法は、後で書こうと思います。&lt;/p&gt;
&lt;h1 id="機能"&gt;機能&lt;/h1&gt;
&lt;p&gt;長くなるので、詳しくは後日書きますが、普通のルータとしての機能は大抵揃っています。&lt;/p&gt;
&lt;p&gt;また、 Vyatta Core からフォークした後に追加された機能も増えてきていますので、それらについても後日説明したいと思います。&lt;/p&gt;
&lt;h1 id="コミュニティ"&gt;コミュニティ&lt;/h1&gt;
&lt;p&gt;VyOS は OSS であり、コミュニティで開発が行われています。&lt;/p&gt;
&lt;p&gt;ここでは、コミュニティへの参加の仕方を紹介します。&lt;/p&gt;
&lt;h3 id="日本のコミュニティ"&gt;日本のコミュニティ&lt;/h3&gt;
&lt;p&gt;日本には、世界最大の Vyatta Users Group があるため、 VyOS についても最初から世界最大になっております。&lt;/p&gt;
&lt;p&gt;vyos-users.jp では、 &lt;a href="http://www.vyos-users.jp/"&gt;vyos-users.jp&lt;/a&gt; というまとめサイトを作っており、 &lt;a href="http://wiki.vyos-users.jp/"&gt;Wiki&lt;/a&gt; の翻訳や、勉強会の開催をしています。&lt;/p&gt;
&lt;p&gt;フォーラムとして、 &lt;a href="http://groups.google.com/d/forum/vyos-users-jp"&gt;Google Group&lt;/a&gt; を用意していますが、 &lt;a href="https://twitter.com/hashtag/vyosjp?src=hash"&gt;Twitter&lt;/a&gt; の方が活発です。&lt;/p&gt;
&lt;p&gt;Twitter には &lt;a href="https://twitter.com/vyosjp"&gt;vyosjp のアカウント&lt;/a&gt;もありますので、何かありましたら、リプライしてください。&lt;/p&gt;
&lt;p&gt;また、 IRC の &lt;a href="https://webchat.freenode.net/?channels=#vyosjp"&gt;#vyosjp&lt;/a&gt; でもたまに会話しています。&lt;/p&gt;
&lt;p&gt;Wiki の翻訳をしてくれる方は常に募集していますし、勉強会の開催を手伝ってくれたり、発表してくれる方も随時募集しています。&lt;/p&gt;
&lt;p&gt;ご協力よろしくお願いいたします。&lt;/p&gt;
&lt;h3 id="勉強会について"&gt;勉強会について&lt;/h3&gt;
&lt;p&gt;現在のところ、世界でも勉強会やミートアップが開催されたのは、日本だけで、これまでに2回開催しています。&lt;/p&gt;
&lt;p&gt;だいたい、半年に1度はやろうと思っています。&lt;/p&gt;
&lt;p&gt;過去の2回については、下記のページをご参照ください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://vyosjp.connpass.com/event/6704/"&gt;VyOS Users Meeting Japan #1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vyosjp.connpass.com/event/9667/"&gt;VyOS Users Meeting Japan #2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;発表者や参加者の方々のおかげで、大変濃い内容になっており、私もいつも勉強させていただいています。&lt;/p&gt;
&lt;h3 id="バグ報告について"&gt;バグ報告について&lt;/h3&gt;
&lt;p&gt;バグ報告には、やり方があります。&lt;/p&gt;
&lt;p&gt;詳しくは、下記のページに日本語訳がありますので、そちらをご参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wiki.vyos-users.jp/%E3%83%90%E3%82%B0%E3%81%AE%E5%A0%B1%E5%91%8A%E6%96%B9%E6%B3%95"&gt;バグ報告の方法&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="開発について"&gt;開発について&lt;/h3&gt;
&lt;p&gt;開発は、 GitHub 上で行われています。&lt;/p&gt;
&lt;p&gt;開発の Issue もバグと同じように、まずは、 &lt;a href="http://bugzilla.vyos.net/"&gt;Bugzilla&lt;/a&gt; に登録しており、次のバージョンに含むものには、バージョン番号が入っています。&lt;/p&gt;
&lt;p&gt;バージョン番号付けは、 Bugzilla の管理権限を持っているメンテナによって行われており、どのバージョンに入れるかは IRC で相談しています。&lt;/p&gt;
&lt;h1 id="最後に"&gt;最後に&lt;/h1&gt;
&lt;p&gt;本日はギリギリになってしまいましたが、明日以降も書く人がいなければ、 &lt;a href="http://qiita.com/advent-calendar/2014/vyos"&gt;VyOS Advent Calendar&lt;/a&gt; がんばります。&lt;/p&gt;</description></item><item><title>CoreOS + Docker Meetup Tokyo</title><link>https://www.higebu.com/blog/2014/11/15/coreos-docker-meetup-tokyo-1/</link><pubDate>Sat, 15 Nov 2014 20:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/11/15/coreos-docker-meetup-tokyo-1/</guid><description>&lt;p&gt;&lt;a href="http://www.meetup.com/Docker-Tokyo/events/218561812/"&gt;CoreOS + Docker Meetup Tokyo #1&lt;/a&gt; に参加してきました。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://coreos.com/about/"&gt;CoreOS, Inc&lt;/a&gt; の &lt;a href="https://github.com/kelseyhightower"&gt;Kelsey Hightower&lt;/a&gt; さんが日本に来ていたので、開催したようです。&lt;/p&gt;
&lt;p&gt;開催してくれた、Google の Kazunori Sato さんありがとうございました。&lt;/p&gt;
&lt;p&gt;イベントは全部英語だったので少しつらかったですが、事前に CoreOS には触っていたし、別のところで、 Kelsey さんの講演を聞く機会もあったので、だいたい理解できました。&lt;/p&gt;
&lt;h2 id="感想"&gt;感想&lt;/h2&gt;
&lt;h3 id="kelsey-さんの発表"&gt;Kelsey さんの発表&lt;/h3&gt;
&lt;p&gt;Kelsey さんは、 &lt;a href="http://kubernetes.io/"&gt;Kubernetes&lt;/a&gt; のコミッターで、 &lt;a href="https://coreos.com/using-coreos/etcd/"&gt;etcd&lt;/a&gt; のコントリビューターなので、どんな質問にもとても詳しく答えていて、参加できてよかったと思いました&lt;/p&gt;
&lt;p&gt;発表内容は、 &lt;a href="https://github.com/kelseyhightower/intro-to-kubernetes-workshop"&gt;Kelsey さんの GitHub リポジトリ&lt;/a&gt;に置いてある Kubernetes のワークショップ用のテキストを元に行っていて、PCがあればその場で動かしながら話を聞けそうでした。
（この日はPCを持っていなかったので、メモすらしていません。）&lt;/p&gt;
&lt;p&gt;また、 k8s 便利すぎてやばいので後で試さないといけないと思いました。&lt;/p&gt;
&lt;p&gt;何が便利かというと、特に Docker コンテナのローリングアップデートができるところで、コマンド1発で全てのコンテナがアップデートされるというのが簡単に実現できます。&lt;/p&gt;
&lt;p&gt;うちのシステムにも導入したいので、社内に布教しようと思います。&lt;/p&gt;
&lt;p&gt;あと、 etcd の発音は、エティシーディに聞こえました。&lt;/p&gt;
&lt;h3 id="lt"&gt;LT&lt;/h3&gt;
&lt;p&gt;1つ目は、 Daniel Dressler さんの btrfs の話で正直ついていけませんでした。&lt;/p&gt;
&lt;p&gt;btrfs がいかにいけてるかをスライドなしで語っていて、すごく熱いやつだなと思いましたｗ&lt;/p&gt;
&lt;p&gt;2つ目は、Wantedly の Seigo Uchida さんが自作 Docker コンテナ管理ツールを作った話とデモでした。&lt;/p&gt;
&lt;p&gt;heroku は便利だけど、日本の DC を選べないので、自作したようです。&lt;/p&gt;
&lt;p&gt;他にもツールはあるけど、自作することで、 Docker 周りの技術の理解が深まってよかったと言っていました。&lt;/p&gt;
&lt;p&gt;もしかしたら、オープンソース化するかもしれないらしいので、期待しています。&lt;/p&gt;
&lt;p&gt;あと、僕も英語でプレゼンできるようになりたいと思いました。&lt;/p&gt;
&lt;h3 id="懇親会"&gt;懇親会&lt;/h3&gt;
&lt;p&gt;Google さんのおごりでした。ごちそうさまでした。&lt;/p&gt;
&lt;p&gt;最後は、 golang がいかに良いかを Kelsey さんが語っているのを聞いている感じでしたｗ&lt;/p&gt;</description></item><item><title>VyOS Users Meeting Japan</title><link>https://www.higebu.com/blog/2014/11/05/vyos-user-meeting-japan-2/</link><pubDate>Wed, 05 Nov 2014 23:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/11/05/vyos-user-meeting-japan-2/</guid><description>&lt;p&gt;&lt;a href="http://vyosjp.connpass.com/event/9667/"&gt;VyOS Users Meeting Japan #2&lt;/a&gt; を開催しました。&lt;/p&gt;
&lt;p&gt;今回は、Patrick van Staveren (&lt;a href="https://twitter.com/trickv"&gt;@trickv&lt;/a&gt;) さんが上海から仕事で来るタイミングに合わせたため、急な開催となってしまいましたが、自分と Patrick さんを含めて、6人の発表者、32人の参加者となりました。&lt;/p&gt;
&lt;p&gt;発表してくれた &lt;a href="https://twitter.com/upaa"&gt;@upaa&lt;/a&gt; さん、 &lt;a href="https://twitter.com/trickv"&gt;@trickv&lt;/a&gt; さん、 &lt;a href="https://twitter.com/SatchanP"&gt;@SatchanP&lt;/a&gt; さん、 &lt;a href="https://twitter.com/hiroysato"&gt;@hiroysato&lt;/a&gt; さん、 &lt;a href="https://twitter.com/otsuka752"&gt;@twovs&lt;/a&gt; さん、参加者の皆様ありがとうございました。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/trickv"&gt;@trickv&lt;/a&gt; さんは、 &lt;a href="https://twitter.com/upaa"&gt;vyos/build-ami&lt;/a&gt; をメンテナンスしているのですが、 &lt;a href="https://twitter.com/upaa"&gt;vyos/build-ami&lt;/a&gt; の元になっているブログ記事を書いた、 &lt;a href="https://twitter.com/SatchanP"&gt;@j3tm0t0&lt;/a&gt; さんと会うことができ、大変喜んでいました。&lt;/p&gt;
&lt;p&gt;（本人のブログ記事参照 -&amp;gt; &lt;a href="http://trick.vanstaveren.us/wp/2014/11/02/vyos-users-meeting-japan/"&gt;http://trick.vanstaveren.us/wp/2014/11/02/vyos-users-meeting-japan/&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;日本のコミュニティは世界最大という話がありましたが、新機能を作ったり、バグを直したりしている方が本当に多くて皆さん素晴らしいと思います。&lt;/p&gt;
&lt;p&gt;欲しい機能や挙動がおかしいところは、とにかく周りに共有しましょう。&lt;/p&gt;
&lt;h3 id="自分の発表内容について"&gt;自分の発表内容について&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;とりあえず発表資料&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe src="//www.slideshare.net/slideshow/embed_code/41133818" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="//www.slideshare.net/higebu/vyos-110-and-nifty-cloudnew-features" title="20141102 VyOS 1.1.0 and NIFTY Cloud New Features" target="_blank"&gt;20141102 VyOS 1.1.0 and NIFTY Cloud New Features&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/higebu" target="_blank"&gt;Yuya Kusakabe&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;英語しかできない方が来るということで、英語で作りました。発表は日本語です。&lt;/p&gt;
&lt;p&gt;1.1.0がリリースされたので、概要だけ触れました。&lt;/p&gt;
&lt;p&gt;実際には、自分で触った方が良いと思いますので、中身はあまりしゃべっていません。&lt;/p&gt;
&lt;p&gt;また、VyOSが使えるIaaSを紹介しましたが、IDCFさんのクラウドの VyOS のバージョンが 1.0.4 で古いという話をしたところ、それをツイートしてくれた方がいて、IDCFさんが拾ってくれたようです。&lt;/p&gt;
&lt;blockquote class="twitter-tweet" lang="ja"&gt;&lt;p&gt;&lt;a href="https://twitter.com/myb1126"&gt;@myb1126&lt;/a&gt; さん、ありがとうございます。開発サイドに連絡しました！&lt;a href="https://twitter.com/hashtag/idcfrontier?src=hash"&gt;#idcfrontier&lt;/a&gt;&lt;/p&gt;&amp;mdash; IDCフロンティア (@idcfrontier) &lt;a href="https://twitter.com/idcfrontier/status/529557496214880256"&gt;2014, 11月 4&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;p&gt;後半は、自宅の YAMAHA RTX1200 とニフティクラウドの検証環境を L2TPv3 over IPsec でつなぐデモをしました。&lt;/p&gt;
&lt;p&gt;時間を短縮するためにすでにできている環境を見せただけだったので、あまり面白くなかったかもしれません。&lt;/p&gt;
&lt;p&gt;また、会場のノートPCを自宅に L2TPv2 over IPsec でつないでのデモだったので、レスポンスが悪かったのは申し訳なかったです。&lt;/p&gt;
&lt;p&gt;デモで見せた開発中の画面は公開できませんが、リリース後にはわかるので、お楽しみにということで。&lt;/p&gt;
&lt;h3 id="今後について"&gt;今後について&lt;/h3&gt;
&lt;p&gt;発表でも触れましたが、今後もニフティというか自分は、 VyOS に貢献するつもりなので、ミーティングもまた開催します。&lt;/p&gt;
&lt;p&gt;次回は、新機能を使ってみた系の話や、今回もあったような VyOS を本気で使っている事例がより集まると良いと思っています。&lt;/p&gt;
&lt;p&gt;あと、 VyOS のステッカー作りたいので、おすすめの作り方がある方はご連絡ください。&lt;/p&gt;</description></item><item><title>YAPC::Asia Tokyo 2014 に行ってきました</title><link>https://www.higebu.com/blog/2014/09/01/yapc-asia-tokyo-2014/</link><pubDate>Mon, 01 Sep 2014 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2014/09/01/yapc-asia-tokyo-2014/</guid><description>&lt;p&gt;&lt;a href="http://yapcasia.org/2014/"&gt;YAPC::Asia Tokyo 2014&lt;/a&gt; に個人スポンサー＆レポーターとして参加してきたので、一応ブログ書きました。&lt;/p&gt;
&lt;p&gt;参加したのは、1日目と2日目です。&lt;/p&gt;
&lt;p&gt;YAPC::Asia Tokyo の参加は3回目で、毎回ノベルティに釣られて個人スポンサーで参加しています。&lt;/p&gt;
&lt;p&gt;昨年の提灯は未だに会社の机に置いてあり、よくこれは何？と聞かれるので、YAPCの宣伝になっていると思います。&lt;/p&gt;
&lt;p&gt;技評さんの「&lt;a href="https://twitter.com/muddydixon"&gt;YAPC::Asia 2014 スペシャルレポート&lt;/a&gt;」は会社の先輩である、&lt;a href="https://twitter.com/muddydixon"&gt;@muddydixon&lt;/a&gt; さんに誘われてやりましたが、こんなに真面目にトークを聞いたことがないというくらい真面目にトークを聞けたので、やってよかったと思っています。&lt;/p&gt;
&lt;p&gt;いつもならトークの途中で検証を始めたり、コード書き始めたり、考えに耽ったりしてしまって、いつの間にかトーク終わってるとかあったので。&lt;/p&gt;
&lt;p&gt;各トークの感想は、&lt;a href="https://twitter.com/muddydixon"&gt;YAPC::Asia 2014 スペシャルレポート&lt;/a&gt;に書いたので省略しようかと思いましたが、個人的な感想を少しだけ書いておきます。&lt;/p&gt;
&lt;p&gt;聞いたトークは下記の通りですが、全てをレポートしたわけではないです。&lt;/p&gt;
&lt;p&gt;また、空いている時間はイベントホールで無限コーヒー飲みながらレポートまとめたり、RedBull飲みながらレポートまとめたり、かき氷食べたりしていました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1日目（8月29日）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/4c7651e8-ed53-11e3-9faf-6ba36aeab6a4"&gt;完成されたシステムなどない。完成された人間もいない。あるのは成長し続ける未完成なシステムと、それを支える未完成な人間だけだ&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;スピリチュアルというか理想論かなと思ったが、後半の質疑応答で現実に戻った感じだった&lt;/li&gt;
&lt;li&gt;変化に強いシステムにしたいと思った&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/2718b8f2-0331-11e4-9357-07b16aeab6a4"&gt;最近のウェブサービスの検索機能やその先の話&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;ElasticSearchの実例というのが貴重だった&lt;/li&gt;
&lt;li&gt;コア機能は自社でメンテできるべきと主張し、実際に自社でメンテできるようにしたのがかっこいい&lt;/li&gt;
&lt;li&gt;コア機能は自社でメンテしたい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/ce831248-ebb4-11e3-bd6d-c7a06aeab6a4"&gt;いろんな言語を適材適所で使おう&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;まず会社の上の方にこういうこと話せる人がいるのが重要な気がした&lt;/li&gt;
&lt;li&gt;全体的に納得感の高い発表だった&lt;/li&gt;
&lt;li&gt;うちも組織能力を涵養しないとなと思った&lt;/li&gt;
&lt;li&gt;「涵養」読めなくて焦った&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/75894e02-025f-11e4-9357-07b16aeab6a4"&gt;O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;情報量すごくて頭に入りきらないレベルだった&lt;/li&gt;
&lt;li&gt;この日は夜から &lt;a href="http://connpass.com/event/7061/"&gt;MQTT Meetup Tokyo 2014.08&lt;/a&gt; で、そのためもあって少し予習しておいてよかった&lt;/li&gt;
&lt;li&gt;O2O/IoT/Wearableなことをしようとしている人たちが何に苦労しているのかなんとなくわかった気になった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/4d0289d0-034a-11e4-9357-07b16aeab6a4"&gt;開発合宿！！！！&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;開発合宿やりたい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2日目（8月30日）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/d1eb4942-fdb5-11e3-b7e8-e4a96aeab6a4"&gt;突然ITインフラを任された人のための…監視設計入門&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;こういう普段当たり前のようにやっていることをきちんと体系立ててまとめるのは大事だなと思った&lt;/li&gt;
&lt;li&gt;自分の担当してる範囲でもまだまだやれることあるので、がんばろうと思った&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/d5049940-ebb2-11e3-bd6d-c7a06aeab6a4"&gt;そんなにビッグでもないデータ処理手法の話&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;何をやりたいのかというのは、何をするにしても大事&lt;/li&gt;
&lt;li&gt;データを役立てるところまでやれてないので、早くやろうと思った&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/84b4d20a-0c8e-11e4-bd05-9c796aeab6a4"&gt;Lightning Talks Day 2&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;YAPCのLT大会が一番面白いと思う&lt;/li&gt;
&lt;li&gt;Twitterやってないとエンジニアやっていけない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/4c1b9652-0c86-11e4-aec0-ad686aeab6a4"&gt;キーノート&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;20代あと1年半しかない&lt;/li&gt;
&lt;li&gt;来年はトークに応募しようかなと思った&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yapcasia.org/2014/talk/show/28f95212-0c87-11e4-aec0-ad686aeab6a4"&gt;クロージング&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;PHPのトークが1位で、2位と3位もPerl関係なくてさすがYAPCだなと思った&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後に、運営の皆様、CONBUの皆様、関係者の皆様お疲れ様でした。&lt;/p&gt;
&lt;p&gt;また来年も楽しみにしています。&lt;/p&gt;</description></item><item><title>VyOS Users Meeting Japan</title><link>https://www.higebu.com/blog/2014/07/27/vyos-user-meeting-japan-1/</link><pubDate>Sun, 27 Jul 2014 23:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/07/27/vyos-user-meeting-japan-1/</guid><description>&lt;p&gt;&lt;a href="http://blog.cloud.nifty.com/2307/"&gt;ニフティクラウドユーザーブログ&lt;/a&gt;にも書きましたが、&lt;a href="http://vyosjp.connpass.com/event/6704/"&gt;VyOS Users Meeting Japan #1&lt;/a&gt;を開催しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;発表資料&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe src="//www.slideshare.net/slideshow/embed_code/37392861" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="//www.slideshare.net/higebu/20140727-vyos-users-meeting-japan-1" title="20140727 VyOS Users Meeting Japan #1 VyOS 概要とデモ" target="_blank"&gt;20140727 VyOS Users Meeting Japan #1 VyOS 概要とデモ&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/higebu" target="_blank"&gt;Yuya Kusakabe&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;VyOSができた経緯、Vyatta CoreからVyOSへの移行方法、VyOSのロードマップ、vyos-users.jpについて話した後、&lt;a href="https://www.vagrantup.com/"&gt;vagrant&lt;/a&gt;と&lt;a href="http://www.ansible.com/home"&gt;ansbile&lt;/a&gt;を使ったデモを行いました。&lt;/p&gt;
&lt;p&gt;デモで使ったVagrantfileとplaybookは、GitHubに置いてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/higebu/vagrant-ansible-examples-with-vyos/tree/master/site-to-site-ipsec-vpn"&gt;https://github.com/higebu/vagrant-ansible-examples-with-vyos/tree/master/site-to-site-ipsec-vpn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;試し方はとても簡単で、VagrantとAnsibleをインストールした上で、下記のコマンドを実行するだけです。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vagrant plugin install vagrant-vyatta
git clone git@github.com:higebu/vagrant-ansible-examples-with-vyos.git
cd vagrant-ansible-examples-with-vyos/site-to-site-ipsec-vpn
vagrant up
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;コマンドに慣れていれば、素のLinuxのコマンドやコンフィグファイルをいじるより、わかりやすいため、自動化しやすいと思います。&lt;/p&gt;
&lt;p&gt;L2TPv3の方はうまく動かない状態になっている気がするので、いつか直しておきたいと思います。&lt;/p&gt;</description></item><item><title>JANOG34 Meeting in TAKAMATSU で VyOS について LT してきました</title><link>https://www.higebu.com/blog/2014/07/18/janog34/</link><pubDate>Fri, 18 Jul 2014 23:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/07/18/janog34/</guid><description>&lt;p&gt;&lt;a href="http://www.janog.gr.jp/meeting/janog34/index.html"&gt;JANOG34 Meeting in TAKAMATSU&lt;/a&gt; で VyOS について LT してきました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;発表資料&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe src="//www.slideshare.net/slideshow/embed_code/37108035" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="//www.slideshare.net/higebu/janog-34-lt-vyos" title="JANOG 34 LT VyOS" target="_blank"&gt;JANOG 34 LT VyOS&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/higebu" target="_blank"&gt;Yuya Kusakabe&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;JANOG自体はWAN側の話や物理寄りの話が多く、 Vyatta Core の開発が終了し、 VyOS になったことを知らない方も多かったようなので、発表できてよかったと思っています。&lt;/p&gt;
&lt;p&gt;当日はニコ生での生中継もあり、壇上なうができてよかったです。&lt;/p&gt;
&lt;p&gt;自分の発表以外では、 YAMAHA RTX1210 に触れたのが印象に残っています。&lt;/p&gt;
&lt;p&gt;特に、金属製の筐体になったのに、 RTX1200 と重さがほとんど変わっていない点に驚きました。&lt;/p&gt;</description></item><item><title>Packer の Vagrant Cloud Post-Proccessor を試してみた</title><link>https://www.higebu.com/blog/2014/07/12/packer-vagrant-cloud-post-proccessor/</link><pubDate>Sat, 12 Jul 2014 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2014/07/12/packer-vagrant-cloud-post-proccessor/</guid><description>&lt;p&gt;Packer の次のバージョンで Vagrant Cloud Post-Proccessor が追加されるようで、 master ブランチではすでに使えるので試してみました。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.packer.io/docs/post-processors/vagrant-cloud.html"&gt;公式ドキュメント&lt;/a&gt;では、2014/07/14 リリース予定になっています。&lt;/p&gt;
&lt;p&gt;ただし、この機能は Vagrant Cloud のホスティング機能を利用しているため、 Vagrant Cloud の有償プランにアップグレードしておく必要があります。&lt;/p&gt;
&lt;p&gt;Pro でも毎月 $2 なので、 HashiCorp, Inc にお世話になっている方は払っておくといいと思いますｗ&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vagrantcloud.com/account/plans"&gt;https://vagrantcloud.com/account/plans&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;あと、 Vagrant Cloud がβじゃなくなってます。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hashicorp.com/blog/vagrant-cloud-end-of-beta.html"&gt;http://www.hashicorp.com/blog/vagrant-cloud-end-of-beta.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="環境"&gt;環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 14.04&lt;/li&gt;
&lt;li&gt;Go 1.3&lt;/li&gt;
&lt;li&gt;Packer 0.6.1.dev&lt;/li&gt;
&lt;li&gt;Vagrant 1.6.3&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="インストール"&gt;インストール&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Go 言語をインストール&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://go.googlecode.com/files/go1.3.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tar -C /usr/local -xzf go1.3.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;環境変数の設定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下記を &lt;code&gt;.bash_profile&lt;/code&gt; などに追記&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;GOROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/go
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:&lt;span class="nv"&gt;$GOROOT&lt;/span&gt;/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;GOPATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;/go
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:&lt;span class="nv"&gt;$GOPATH&lt;/span&gt;/bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Packer をインストール&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install mercurial bzr
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go get -u github.com/mitchellh/gox
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/mitchellh/packer.git ~/go/src/github.com/mitchellh/packer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/go/src/github.com/mitchellh/packer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp -p pkg/linux_amd64/* ~/go/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="テンプレート"&gt;テンプレート&lt;/h2&gt;
&lt;p&gt;Post-Proccessor で vagrant の後に vagrant-cloud が動くようにします。&lt;/p&gt;
&lt;p&gt;Builder などは省略していますが、下記のようになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;variables&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cloud_token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;post-processors&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;vagrant&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;output&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./vyos-1.0.4-amd64_{{.Provider}}.box&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;vagrant-cloud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;access_token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{user `cloud_token`}}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;box_tag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;higebu/vyos-1.0.4-amd64&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{user `version`}}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version_description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Initial release&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実際のテンプレートは Github で公開しています。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/higebu/packer-templates/tree/master/VyOS-1.0.4-amd64"&gt;https://github.com/higebu/packer-templates/tree/master/VyOS-1.0.4-amd64&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="ビルド"&gt;ビルド&lt;/h2&gt;
&lt;p&gt;ビルドする前に Vagrant Cloud で box を作成しておく必要があります。&lt;/p&gt;
&lt;p&gt;User Variables で &lt;code&gt;version&lt;/code&gt; と &lt;code&gt;cloud_token&lt;/code&gt; を指定できるようにしているので、下記のようになります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cloud_token&lt;/code&gt; は自分のものと置き換えてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;packer build -only&lt;span class="o"&gt;=&lt;/span&gt;virtualbox-iso -var &lt;span class="s1"&gt;&amp;#39;version=1.0.0&amp;#39;&lt;/span&gt; -var &lt;span class="s1"&gt;&amp;#39;cloud_token=#####&amp;#39;&lt;/span&gt; template.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;packer build -only&lt;span class="o"&gt;=&lt;/span&gt;vmware-iso -var &lt;span class="s1"&gt;&amp;#39;version=1.0.0&amp;#39;&lt;/span&gt; -var &lt;span class="s1"&gt;&amp;#39;cloud_token=#####&amp;#39;&lt;/span&gt; template.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ビルドしたものは下記にあります。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vagrantcloud.com/higebu/vyos-1.0.4-amd64"&gt;https://vagrantcloud.com/higebu/vyos-1.0.4-amd64&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Zabbix の VMware 監視機能のバグフィックスを取り込んでもらえた話</title><link>https://www.higebu.com/blog/2014/06/23/zabbix-vmware-monitoring-bug-fix/</link><pubDate>Mon, 23 Jun 2014 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2014/06/23/zabbix-vmware-monitoring-bug-fix/</guid><description>&lt;p&gt;今回取り込んでもらえたのは、100台以上の ESXi が登録されないというバグに対するパッチです。&lt;/p&gt;
&lt;p&gt;このバグはチケットを作る前から中の方に報告はしていたのですが、なかなか直らなかったので、自分でパッチを作って報告しました。&lt;/p&gt;
&lt;p&gt;2.2.1 の頃からパッチを当てたものを使っていて、 2.2.2 が出たときに今後もパッチを作り続けなければならないのかなと思ったのですが、他の影響力のあるユーザー企業さんが同じ問題にぶつかり、急に優先度が上がって取り込まれたということでよかったです。&lt;/p&gt;
&lt;p&gt;とにかく、 OSS でバグを見つけたら、報告したり、パッチを作って送ったりすることは大事です。&lt;/p&gt;
&lt;p&gt;なかなか取り込んでくれなくても、開発者は多忙なので、取り込んでもらえるまで諦めないことも大事です。&lt;/p&gt;
&lt;p&gt;以下パッチの詳細です。&lt;/p&gt;
&lt;h2 id="jira-のチケット"&gt;JIRA のチケット&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://support.zabbix.com/browse/ZBX-7721"&gt;https://support.zabbix.com/browse/ZBX-7721&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;チケットにしないと気づいてもらえないので、チケットにするのは大事です。&lt;/p&gt;
&lt;p&gt;英語が間違っているかもしれませんが、間違ってたらすみませんと思いながら気にせず投稿しています。&lt;/p&gt;
&lt;p&gt;間違ってたり、わからなかったりしたら突っ込んでくれるはずなので、大丈夫だと思っています。&lt;/p&gt;
&lt;h2 id="このバグの原因について"&gt;このバグの原因について&lt;/h2&gt;
&lt;p&gt;オートディスカバリで vCenter 配下の Hypervisor を取ってくる機能は、 VMware の API の RetrievePropertiesEx を使って実現しています。&lt;/p&gt;
&lt;p&gt;この API はデフォルトでは100個しか取ってこれず、次のリストがある場合、 token を返すようになっています。&lt;/p&gt;
&lt;p&gt;この token を使って、 ContinueRetrievePropertiesEx という API を叩くと、101台目以降が取得できるのですが、実装されていませんでした。&lt;/p&gt;
&lt;p&gt;ソースを見るとわかるのですが、 libcurl で直に SOAP の XML を投げていて、胸が熱くなります。&lt;/p&gt;
&lt;h2 id="222-向けのパッチ"&gt;2.2.2 向けのパッチ&lt;/h2&gt;
&lt;p&gt;2.2.4 RC1 か 2.3.0 から直っているのですが、 2.2.2 を使っていて、困っている奇特な方はお使いください。&lt;/p&gt;
&lt;script src="https://gist.github.com/higebu/9826313.js"&gt;&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.2.2/zabbix-2.2.2.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar xf zabbix-2.2.2.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;patch -p1 -d zabbix-2.2.2 &amp;lt; ZBX-7721-zabbix-2.2.2.patch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.2.3 はスルーするつもりなので、作っていません。&lt;/p&gt;
&lt;h2 id="今後"&gt;今後&lt;/h2&gt;
&lt;p&gt;100台以上は取れるようになったのですが、実は200台以上が取れていないように見えるので、調査中です。&lt;/p&gt;</description></item><item><title>VyOS の OpenSSL パッケージをアップデートする</title><link>https://www.higebu.com/blog/2014/06/09/upgrade-openssl-package-on-vyos/</link><pubDate>Mon, 09 Jun 2014 12:50:00 +0900</pubDate><guid>https://www.higebu.com/blog/2014/06/09/upgrade-openssl-package-on-vyos/</guid><description>&lt;p&gt;CVE-2014-0224 などの OpenSSL の脆弱性対策のため、 VyOS では次のメンテナンスリリース（1.0.4）で、 OpenSSL のパッケージをアップデートするようです。
(&lt;a href="http://vyos-dev.tumblr.com/post/88142058983/openssl-vulnerabilities"&gt;http://vyos-dev.tumblr.com/post/88142058983/openssl-vulnerabilities&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;ただ、上記の記事にも書いてありますが、緊急で対応したい場合、 OpenSSL のパッケージを自分でアップデートしなければならないので、そのやり方だけ書いておきます。&lt;/p&gt;
&lt;p&gt;以下、手順です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;リポジトリを追加&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos# configure
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos# &lt;span class="nb"&gt;set&lt;/span&gt; system package repository squeeze-lts url http://ftp.jp.debian.org/debian/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos# &lt;span class="nb"&gt;set&lt;/span&gt; system package repository squeeze-lts distribution squeeze-lts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos# &lt;span class="nb"&gt;set&lt;/span&gt; system package repository squeeze-lts components &lt;span class="s1"&gt;&amp;#39;main contrib non-free&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos# commit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos# save
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;インストール&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos# sudo apt-get upgrade openssl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reading package lists... Done
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Building dependency tree
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reading state information... Done
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The following packages will be upgraded:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; libgnutls26 libssl0.9.8 openssl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;3&lt;/span&gt; upgraded, &lt;span class="m"&gt;0&lt;/span&gt; newly installed, &lt;span class="m"&gt;0&lt;/span&gt; to remove and &lt;span class="m"&gt;0&lt;/span&gt; not upgraded.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Need to get &lt;span class="m"&gt;2639&lt;/span&gt; kB of archives.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;After this operation, &lt;span class="m"&gt;123&lt;/span&gt; kB of additional disk space will be used.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do you want to &lt;span class="k"&gt;continue&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Y/n&lt;span class="o"&gt;]&lt;/span&gt;? Y
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Get:1 http://ftp.jp.debian.org/debian/ squeeze-lts/main libssl0.9.8 amd64 0.9.8o-4squeeze15 &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1004&lt;/span&gt; kB&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Get:2 http://ftp.jp.debian.org/debian/ squeeze-lts/main libgnutls26 amd64 2.8.6-1+squeeze4 &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;573&lt;/span&gt; kB&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Get:3 http://ftp.jp.debian.org/debian/ squeeze-lts/main openssl amd64 0.9.8o-4squeeze15 &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1062&lt;/span&gt; kB&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Fetched &lt;span class="m"&gt;2639&lt;/span&gt; kB in 6s &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;425&lt;/span&gt; kB/s&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Preconfiguring packages ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;Reading database ... &lt;span class="m"&gt;36818&lt;/span&gt; files and directories currently installed.&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Preparing to replace libssl0.9.8 0.9.8o-4squeeze14 &lt;span class="o"&gt;(&lt;/span&gt;using .../libssl0.9.8_0.9.8o-4squeeze15_amd64.deb&lt;span class="o"&gt;)&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Unpacking replacement libssl0.9.8 ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Preparing to replace libgnutls26 2.8.6-1+squeeze2 &lt;span class="o"&gt;(&lt;/span&gt;using .../libgnutls26_2.8.6-1+squeeze4_amd64.deb&lt;span class="o"&gt;)&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Unpacking replacement libgnutls26 ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Preparing to replace openssl 0.9.8o-4squeeze14 &lt;span class="o"&gt;(&lt;/span&gt;using .../openssl_0.9.8o-4squeeze15_amd64.deb&lt;span class="o"&gt;)&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Unpacking replacement openssl ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Processing triggers &lt;span class="k"&gt;for&lt;/span&gt; man-db ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Setting up libssl0.9.8 &lt;span class="o"&gt;(&lt;/span&gt;0.9.8o-4squeeze15&lt;span class="o"&gt;)&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Setting up libgnutls26 &lt;span class="o"&gt;(&lt;/span&gt;2.8.6-1+squeeze4&lt;span class="o"&gt;)&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Setting up openssl &lt;span class="o"&gt;(&lt;/span&gt;0.9.8o-4squeeze15&lt;span class="o"&gt;)&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;確認&lt;/li&gt;
&lt;li&gt;openssl&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;dpkg -s openssl
Package: openssl
Status: install ok installed
Priority: optional
Section: utils
Installed-Size: 2368
Maintainer: Debian OpenSSL Team &amp;lt;pkg-openssl-devel@lists.alioth.debian.org&amp;gt;
Architecture: amd64
Version: 0.9.8o-4squeeze15
Depends: libc6 (&amp;gt;= 2.7), libssl0.9.8 (&amp;gt;= 0.9.8m-1), zlib1g (&amp;gt;= 1:1.1.4)
Suggests: ca-certificates
Conflicts: ssleay (&amp;lt;&amp;lt; 0.9.2b)
Conffiles:
/etc/ssl/openssl.cnf 0b1cf9a835b829131d630b7c2fe55f3c
Description: Secure Socket Layer (SSL) binary and related cryptographic tools
This package contains the openssl binary and related tools.
.
It is part of the OpenSSL implementation of SSL.
.
You need it to perform certain cryptographic actions like:
- Creation of RSA, DH and DSA key parameters;
- Creation of X.509 certificates, CSRs and CRLs;
- Calculation of message digests;
- Encryption and decryption with ciphers;
- SSL/TLS client and server tests;
- Handling of S/MIME signed or encrypted mail.
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;libssl&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;dpkg -s libssl0.9.8
Package: libssl0.9.8
Status: install ok installed
Priority: important
Section: libs
Installed-Size: 2424
Maintainer: Debian OpenSSL Team &amp;lt;pkg-openssl-devel@lists.alioth.debian.org&amp;gt;
Architecture: amd64
Source: openssl
Version: 0.9.8o-4squeeze15
Depends: libc6 (&amp;gt;= 2.7), zlib1g (&amp;gt;= 1:1.1.4), debconf (&amp;gt;= 0.5) | debconf-2.0
Conflicts: libssl, libssl096-dev (&amp;lt;&amp;lt; 0.9.6-2), openssl (&amp;lt;&amp;lt; 0.9.6-2), ssleay (&amp;lt;&amp;lt; 0.9.2b)
Description: SSL shared libraries
libssl and libcrypto shared libraries needed by programs like
apache-ssl, telnet-ssl and openssh.
.
It is part of the OpenSSL implementation of SSL.
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>VYATTA USERS MEETING Spring 2014でVyOSについて発表しました</title><link>https://www.higebu.com/blog/2014/04/04/vyatta-user-meeting-spring-2014/</link><pubDate>Fri, 04 Apr 2014 23:00:00 +0000</pubDate><guid>https://www.higebu.com/blog/2014/04/04/vyatta-user-meeting-spring-2014/</guid><description>&lt;p&gt;&lt;a href="http://blog.cloud.nifty.com/1926/"&gt;ニフティクラウドユーザーブログ&lt;/a&gt;にも書きましたが、&lt;a href="http://atnd.org/events/47926"&gt;VYATTA USERS MEETING Spring 2014&lt;/a&gt;でVyOSについて発表しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;発表資料1&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe src="//www.slideshare.net/slideshow/embed_code/33112641" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="//www.slideshare.net/higebu/vyatta-users-meeting-spring-2014-niftycloud" title="VYATTA USERS MEETING Spring 2014 NIFTY Cloud" target="_blank"&gt;VYATTA USERS MEETING Spring 2014 NIFTY Cloud&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/higebu" target="_blank"&gt;Yuya Kusakabe&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;発表資料2&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe src="//www.slideshare.net/slideshow/embed_code/33113175" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="//www.slideshare.net/higebu/vyatta-users-meeting-spring-2014-vyos" title="VYATTA USERS MEETING Spring 2014 VyOS" target="_blank"&gt;VYATTA USERS MEETING Spring 2014 VyOS&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/higebu" target="_blank"&gt;Yuya Kusakabe&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;後半は、VyOSの紹介と、設立した vyos-users.jp の紹介でした。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/vyos/vyatta-cfg-system/pull/2"&gt;Unmanaged L2TPv3 Supportのプルリクエスト&lt;/a&gt;をマージしてもらえた後だったので、それの紹介も入っています。&lt;/p&gt;
&lt;p&gt;OSSはコミュニティが大事だと思っているので、VyOSのコミュニティが大きくなるようがんばりたいと思います。&lt;/p&gt;</description></item><item><title>VyOS の Vagrant 用 box を Vagrant Cloud にアップしました</title><link>https://www.higebu.com/blog/2014/03/13/put-vyos-box-to-vagrant-cloud/</link><pubDate>Thu, 13 Mar 2014 01:22:00 +0900</pubDate><guid>https://www.higebu.com/blog/2014/03/13/put-vyos-box-to-vagrant-cloud/</guid><description>&lt;p&gt;&lt;a href="https://vagrantcloud.com"&gt;Vagrant Cloud&lt;/a&gt; が出たので、とりあえず、VyOS の box をアップしてみました。&lt;/p&gt;
&lt;p&gt;Vagrant 1.5 をインストール後、下記の手順で使えます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant plugin install vagrant-vyatta
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant init higebu/vyos-1.0.2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://github.com/higebu/vagrant-vyatta"&gt;vagrant-vyatta&lt;/a&gt; も VyOS 対応済です。&lt;/p&gt;</description></item><item><title>VyOS に SoftEther VPN Server をインストール</title><link>https://www.higebu.com/blog/2014/03/08/how-to-install-softether-vpn-server-to-vyos/</link><pubDate>Sat, 08 Mar 2014 23:49:00 +0900</pubDate><guid>https://www.higebu.com/blog/2014/03/08/how-to-install-softether-vpn-server-to-vyos/</guid><description>&lt;p&gt;&lt;a href="http://vyos.net/wiki/Main_Page"&gt;VyOS&lt;/a&gt; は &lt;a href="https://ja.softether.org/"&gt;Vyatta&lt;/a&gt; からフォークしたOSSのネットワークOSです。&lt;/p&gt;
&lt;p&gt;VyOS 1.0.2 に SoftEther VPN Server をインストールしてみます。&lt;/p&gt;
&lt;p&gt;SoftEther VPN Server のバージョンは v4.05-9423-beta-2014.02.18 です。&lt;/p&gt;
&lt;p&gt;VyOS のインストールは ISO をダウンロードしたら、マウントして&lt;code&gt;install system&lt;/code&gt;を実行するだけなので省略します。&lt;/p&gt;
&lt;p&gt;以下、手順です。&lt;/p&gt;
&lt;h2 id="vyos-に-debian-のリポジトリを追加"&gt;VyOS に Debian のリポジトリを追加&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; system package repository squeeze components &lt;span class="s1"&gt;&amp;#39;main&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; system package repository squeeze distribution &lt;span class="s1"&gt;&amp;#39;squeeze&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; system package repository squeeze url &lt;span class="s1"&gt;&amp;#39;http://ftp.jp.debian.org/debian/&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;commit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;save
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo aptitude update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="build-essential-インストール"&gt;build-essential インストール&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo aptitude -y install build-essential
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="softether-vpn-server-インストール"&gt;SoftEther VPN Server インストール&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget http://jp.softether-download.com/files/softether/v4.05-9423-beta-2014.02.18-tree/Linux/SoftEther%20VPN%20Server/64bit%20-%20Intel%20x64%20or%20AMD64/softether-vpnserver-v4.05-9423-beta-2014.02.18-linux-x64-64bit.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar xf softether-vpnserver-v4.05-9423-beta-2014.02.18-linux-x64-64bit.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; vpnserver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ここで、質問には全て 1 と回答します。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv vpnserver /usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chown -R root:staff /usr/local/vpnserver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;600&lt;/span&gt; /usr/local/vpnserver/*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;700&lt;/span&gt; /usr/local/vpnserver/vpncmd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;700&lt;/span&gt; /usr/local/vpnserver/vpnserver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="確認"&gt;確認&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;vpncmd コマンドを実行し、 VPN Tools を選択&lt;/li&gt;
&lt;li&gt;check コマンドの実行結果が下記のようになっていればインストール成功です&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos:~$ sudo /usr/local/vpnserver/vpncmd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vpncmd &lt;span class="nb"&gt;command&lt;/span&gt; - SoftEther VPN Command Line Management Utility
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SoftEther VPN Command Line Management Utility &lt;span class="o"&gt;(&lt;/span&gt;vpncmd &lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Version 4.05 Build &lt;span class="m"&gt;9423&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;English&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Compiled 2014/02/18 19:33:00 by yagi at pc25
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; SoftEther VPN Project. All Rights Reserved.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;By using vpncmd program, the following can be achieved.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Management of VPN Server or VPN Bridge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Management of VPN Client
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Use of VPN Tools &lt;span class="o"&gt;(&lt;/span&gt;certificate creation and Network Traffic Speed Test Tool&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Select 1, &lt;span class="m"&gt;2&lt;/span&gt; or 3: &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VPN Tools has been launched. By inputting HELP, you can view a list of the commands that can be used.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VPN Tools&amp;gt;check
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Check &lt;span class="nb"&gt;command&lt;/span&gt; - Check whether SoftEther VPN Operation is Possible
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SoftEther VPN Operation Environment Check Tool
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; SoftEther VPN Project.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;All Rights Reserved.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a &lt;span class="k"&gt;while&lt;/span&gt;. Please wait...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Checking &lt;span class="s1"&gt;&amp;#39;Kernel System&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Checking &lt;span class="s1"&gt;&amp;#39;Memory Operation System&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Checking &lt;span class="s1"&gt;&amp;#39;ANSI / Unicode string processing system&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Checking &lt;span class="s1"&gt;&amp;#39;File system&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Checking &lt;span class="s1"&gt;&amp;#39;Thread processing system&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Checking &lt;span class="s1"&gt;&amp;#39;Network system&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The &lt;span class="nb"&gt;command&lt;/span&gt; completed successfully.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上です。&lt;/p&gt;
&lt;p&gt;これで、VyOS で SoftEther の VPN も利用可能になります。&lt;/p&gt;
&lt;p&gt;あとは、 VyOS の set コマンドで SoftEther の設定を行えるようにすると便利そうです。&lt;/p&gt;
&lt;h2 id="追記-init-スクリプト"&gt;追記: init スクリプト&lt;/h2&gt;
&lt;p&gt;Debian用のものを作ったので、Gistにおいておきました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;### BEGIN INIT INFO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Provides: vpnserver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Required-Start: $network $remote_fs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Required-Stop: $network $remote_fs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Default-Start: 2 3 4 5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Default-Stop: 0 1 6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Short-Description: SoftEther VPN Server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;### END INIT INFO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DAEMON&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/vpnserver/vpnserver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;LOCK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/lock/subsys/vpnserver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;test&lt;/span&gt; -x &lt;span class="nv"&gt;$DAEMON&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;start&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$DAEMON&lt;/span&gt; start
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;touch &lt;span class="nv"&gt;$LOCK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stop&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$DAEMON&lt;/span&gt; stop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm &lt;span class="nv"&gt;$LOCK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;restart&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$DAEMON&lt;/span&gt; stop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$DAEMON&lt;/span&gt; start
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Usage: &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; {start|stop|restart}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/higebu/9460194"&gt;vpnserver (Gist)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Zabbix Conference Japan 2013でVMware監視機能について発表してきました</title><link>https://www.higebu.com/blog/2013/11/23/zabbix-conference-japan-2013/</link><pubDate>Sat, 23 Nov 2013 19:44:00 +0000</pubDate><guid>https://www.higebu.com/blog/2013/11/23/zabbix-conference-japan-2013/</guid><description>&lt;p&gt;11/22に開催された&lt;a href="https://www.zabbix.com/jp/conference_japan_2013.php"&gt;Zabbix Conference Japan 2013&lt;/a&gt;でVMware監視機能について発表してきました。&lt;/p&gt;
&lt;p&gt;発表資料&lt;/p&gt;
&lt;iframe src="https://www.slideshare.net/slideshow/embed_code/28568152" width="597" height="486" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="https://www.slideshare.net/higebu/zabbix-conference-japan-2013vmwaremonitoring" title="Zabbix Conference Japan 2013 VMware monitoring" target="_blank"&gt;Zabbix Conference Japan 2013 VMware monitoring&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="https://www.slideshare.net/higebu" target="_blank"&gt;Yuya Kusakabe&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;11/12に2.2.0がリリースされてから1週間後の11/19に本番導入しています。&lt;/p&gt;
&lt;p&gt;検証はα版の頃からやっていますが、結構大変でした。&lt;/p&gt;
&lt;p&gt;他の監視もZabbixに統合しようと思っているので、また何か出せる情報があれば、このブログやどこかの勉強会で共有していきたいと思っています。&lt;/p&gt;</description></item><item><title>VYATTA USERS MEETING Autumn 2013で発表してきました</title><link>https://www.higebu.com/blog/2013/10/16/vyatta-user-meeting-autumn-2013/</link><pubDate>Wed, 16 Oct 2013 21:44:00 +0000</pubDate><guid>https://www.higebu.com/blog/2013/10/16/vyatta-user-meeting-autumn-2013/</guid><description>&lt;p&gt;VYATTA USERS MEETING Autumn 2013で発表してきました。
もう3回目になりますが、毎回ニフティクラウドでのVyattaの利用について発表させていただいています。&lt;/p&gt;
&lt;p&gt;発表資料&lt;/p&gt;
&lt;iframe src="https://www.slideshare.net/slideshow/embed_code/27115978" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="https://www.slideshare.net/higebu/jvum2013a-niftycloud" title="jvum2013a niftycloud" target="_blank"&gt;jvum2013a niftycloud&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="https://www.slideshare.net/higebu" target="_blank"&gt;Yuya Kusakabe&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;vagrant-vyattaについて&lt;/p&gt;
&lt;p&gt;発表の中で少し話しましたが、Vagrantを使ってお手軽にVyattaを試せるようにVagrantのプラグインを作りました。
プラグインについては、下記のブログで紹介しています。
&lt;a href="https://www.higebu.com/archives/697/"&gt;Vyatta用のVagrantプラグイン&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、VirtualBox用のboxをPackerを用いて作成していて、下記のブログで作り方を説明しています。
&lt;a href="https://www.higebu.com/archives/685/"&gt;PackerでVyattaのVagrant用boxを作る&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;実際に使ってくれている方がいてよかったです。&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;同じくお世話になっております orz.. RT &lt;a href="https://twitter.com/ar1"&gt;@ar1&lt;/a&gt; &lt;a href="https://twitter.com/search?q=%23jvum2013a&amp;amp;src=hash"&gt;#jvum2013a&lt;/a&gt; おお、vagrant-vyattaの作者でしたか！御世話になってます。&lt;a href="https://twitter.com/higebu"&gt;@higebu&lt;/a&gt;&lt;/p&gt;&amp;mdash; Yukihiro Kikuchi (@yukihirokikuchi) &lt;a href="https://twitter.com/yukihirokikuchi/statuses/388555432731492353"&gt;October 11, 2013&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;p&gt;所感&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vyattaユーザがかなり増えていて驚いた&lt;/li&gt;
&lt;li&gt;ネットワーク構築の自動化はVyattaに限らず必須になっていくと思った&lt;/li&gt;
&lt;li&gt;APIはオープンソースにして欲しい&lt;/li&gt;
&lt;li&gt;APIはオープンソースにして欲しい&lt;/li&gt;
&lt;li&gt;Vyattaと関係ない話が聞けるのが面白いのでまた参加したい&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Vyatta用のVagrantプラグイン</title><link>https://www.higebu.com/blog/2013/08/23/vagrant-vyatta/</link><pubDate>Fri, 23 Aug 2013 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2013/08/23/vagrant-vyatta/</guid><description>&lt;p&gt;先日、&lt;a href="https://www.higebu.com/blog/2013/08/15/packer-vyatta/"&gt;PackerでVyattaのVagrant用boxを作る&lt;/a&gt;という記事を書きましたが、Vyattaはそのままでは&lt;code&gt;vagrant halt&lt;/code&gt;が実行できないなど不便です。&lt;/p&gt;
&lt;p&gt;そこで、VyattaをVagrantから制御するためのプラグインを作りました。&lt;/p&gt;
&lt;p&gt;使い方は下記の通りです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant plugin install vagrant-vyatta
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant box add vyatta http://higebu.com/box/vyatta-livecd_VC6.5R1_amd64_virtualbox.box &lt;span class="c1"&gt;# chefなし&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant box add vyatta http://higebu.com/box/vyatta-livecd_VC6.5R1_amd64_chef_virtualbox.box &lt;span class="c1"&gt;# chef入り&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant init vyatta
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant up
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant halt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;vagrant halt&lt;/code&gt;の他にホスト名の設定とネットワークの設定ができるようにしています。&lt;/p&gt;
&lt;p&gt;ソースは&lt;a href="https://github.com/higebu/vagrant-vyatta"&gt;Github&lt;/a&gt;に置いてあります。&lt;/p&gt;</description></item><item><title>PackerでVyattaのVagrant用boxを作る</title><link>https://www.higebu.com/blog/2013/08/15/packer-vyatta/</link><pubDate>Thu, 15 Aug 2013 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2013/08/15/packer-vyatta/</guid><description>&lt;p&gt;&lt;a href="http://www.packer.io/"&gt;Packer&lt;/a&gt;は&lt;a href="http://www.vagrantup.com/"&gt;Vagrant&lt;/a&gt;を作った@mitchellhさんが作ったOSイメージ作成ツールです。
インストールは&lt;a href="http://www.packer.io/downloads.html"&gt;ダウンロードページ&lt;/a&gt;から自分のOSにあったバイナリを取ってきて入れるだけです。&lt;/p&gt;
&lt;p&gt;今回はあまり見かけないVyattaのboxを作ってみました。
テンプレートはgithubに置いてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/higebu/packer-templates"&gt;packer-templates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今のところ6.4、6.5R1、6.6R1の64bitのものを置いてあります。
Packerのバージョンは0.2.3、VirtualBoxのバージョンは4.1.26で作っています。
他のバージョンだと動かないかもしれません。
VMware用も書いておいたのでVMware Fusionでも動くと思います。（試してません。）&lt;/p&gt;
&lt;p&gt;テンプレートを使うときは以下のようにします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;packer build --only&lt;span class="o"&gt;=&lt;/span&gt;virtualbox template.json &lt;span class="c1"&gt;# virtualboxのみ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;packer build --only&lt;span class="o"&gt;=&lt;/span&gt;vmware template.json &lt;span class="c1"&gt;# vmwareのみ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;テンプレートの作り方ですが、基本的にはveeweeのDebian用のテンプレートをパクっています。
Vyattaのために少し工夫したのは以下の点です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vyattaにはdebian-installerが入っていないので初期設定をコンソールでやっている&lt;/li&gt;
&lt;li&gt;シェルでVyattaのsetコマンドを使えるようにしている&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WRAPPER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;. /etc/bash_completion
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;もろもろを入れるためにDebian化している&lt;/li&gt;
&lt;li&gt;GuestAdditions入れるのにkernel-headerが必要なので、vyatta-devリポジトリからlinux-vyatta-kbuildをインストールしている&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ノートPC上でVyatta立ち上げて自宅やクラウド上のネットワークとVPN接続するときに便利です。&lt;/p&gt;
&lt;p&gt;Chef入りのVyattaなんて誰が使うんだという感じですが、Chef入りもあります。
一応、ビルド済のboxファイルもダウンロード可能な場所に置いてあるので欲しいという方はコメントください。&lt;/p&gt;</description></item><item><title>Ubuntuにapt-getでVMware Toolsをインストールする</title><link>https://www.higebu.com/blog/2013/07/07/install-vmware-tools-to-ubuntu-with-apt-get/</link><pubDate>Sun, 07 Jul 2013 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2013/07/07/install-vmware-tools-to-ubuntu-with-apt-get/</guid><description>&lt;p&gt;ESXi5.0上のUbuntu12.04にapt-getでVMware Toolsをインストールする手順です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget http://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-RSA-KEY.pub -q -O- &lt;span class="p"&gt;|&lt;/span&gt; sudo apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;deb http://packages.vmware.com/tools/esx/5.0latest/ubuntu precise main&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/vmware-tools.list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install vmware-tools-esx-kmods-3.2.0-29-generic
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install vmware-tools-esx-nox
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ESXi5.1の場合は、5.0latestの部分を5.1latestにしてください。&lt;/p&gt;
&lt;p&gt;最新の12.04のカーネルのバージョンは3.5.0-36ですが、2013/7/7現在、リポジトリには3.2.0-29までしかありませんので、
3.5.0-36にしてから入れたらいろいろとおかしくなるかもしれません。&lt;/p&gt;
&lt;p&gt;また、 &lt;a href="http://packages.vmware.com/tools/esx/5.0latest/ubuntu/dists/"&gt;http://packages.vmware.com/tools/esx/5.0latest/ubuntu/dists/&lt;/a&gt; 配下にpresiceまでしかないため、12.10以降のパッケージはないようです。&lt;/p&gt;
&lt;p&gt;対応が中途半端ですね。&lt;/p&gt;
&lt;p&gt;詳細は下記のページで&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.vmware.com/download/packages.html"&gt;http://www.vmware.com/download/packages.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>iPhoneのメッセージアプリが大量の添付ファイルを受けて起動しなくなったので直した</title><link>https://www.higebu.com/blog/2013/05/21/how-to-recover-crashing-iphone-message-app-because-of-recieving-many-attached-files/</link><pubDate>Tue, 21 May 2013 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2013/05/21/how-to-recover-crashing-iphone-message-app-because-of-recieving-many-attached-files/</guid><description>&lt;p&gt;先日iPhone5のメッセージが開かなくなりました。&lt;/p&gt;
&lt;p&gt;原因は、その直前に来た大量の添付ファイル付きのメール（MMS）です。&lt;/p&gt;
&lt;p&gt;そこで、メッセージが参照しているDBから該当のメールを直接削除することで直しました。&lt;/p&gt;
&lt;p&gt;環境&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mac OSX 10.8.3&lt;/li&gt;
&lt;li&gt;iPhone5 ( iOS 6.1.4 )&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.icopybot.com/itunes-backup-manager.htm"&gt;iBackupBot&lt;/a&gt; 3.5.2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.desertsandsoftware.com/?page_id=99"&gt;MesaSQLite&lt;/a&gt; 3.2.6&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;iBackupBot と SQLite をいじれるなんらかのツール（今回は MesaSQLite ）を用意してください。&lt;/p&gt;
&lt;p&gt;以下、手順です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;iTunes で iPhone をバックアップ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;iBackupBot で 先ほどのバックアップから &lt;code&gt;Library/SMS/sms.db&lt;/code&gt; をエクスポート&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;エクスポートされた、 &lt;code&gt;Library_SMS_sms.db&lt;/code&gt; を MesaSQLite で開き、該当のメール、添付ファイル情報を削除&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Triggers&lt;/code&gt; タブで、 &lt;code&gt;attachment&lt;/code&gt; テーブルを選択し、&lt;code&gt;trigger delete_attachment_path&lt;/code&gt; を削除。（後で戻します。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;message&lt;/code&gt; テーブルから該当のメールを削除。（ &lt;code&gt;attachment&lt;/code&gt; テーブルのデータも自動で消えます。 ）&lt;/li&gt;
&lt;li&gt;SQL Query タブで下記の SQL を実行し、 &lt;code&gt;attachment&lt;/code&gt; テーブルの &lt;code&gt;trigger&lt;/code&gt; を元に戻す。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE TRIGGER delete_attachment_files AFTER DELETE ON attachment BEGIN SELECT delete_attachment_path(old.filename); END
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;iBackupBot で sms.db をインポート&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;iTunes で iPhone を復元&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;iBackupBot の使い方は&lt;a href="http://iphone4tips.blog112.fc2.com/blog-entry-43.html"&gt;他のブログ&lt;/a&gt;などで詳しく説明されているので割愛して、ここでは3のDBを編集するところを少し詳しく説明しました。&lt;/p&gt;
&lt;p&gt;これで、iPhone から見ると添付ファイルが大量に付いたメールは見えなくなり、メッセージアプリが正常に起動するようになりました。&lt;/p&gt;</description></item><item><title>Zabbix Java GatewayでDouble型の値を監視できるようにするパッチ</title><link>https://www.higebu.com/blog/2013/03/17/fix-zabbix-jmx-double-type-value-monitoring/</link><pubDate>Sun, 17 Mar 2013 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2013/03/17/fix-zabbix-jmx-double-type-value-monitoring/</guid><description>&lt;p&gt;Zabbix Java Gatewayを使ってJMX経由で何かしらの値を監視するときに、値の型がjava.lang.Doubleだとエラーになってしまい、監視できない。&lt;/p&gt;
&lt;p&gt;そこで、エラーにならないように修正する。&lt;/p&gt;
&lt;p&gt;元ネタは下記のフォーラムのコメント。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.zabbix.com/forum/showthread.php?t=26452" title="jmx java.lang.Double bug?"&gt;jmx java.lang.Double bug?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zabbix 2.0.4のときに作ったけど、たぶん2.0.5でも動くはず。&lt;/p&gt;
&lt;p&gt;パッチは下記の通りです。&lt;/p&gt;
&lt;script src="https://gist.github.com/higebu/5083311.js"&gt;&lt;/script&gt;
&lt;p&gt;パッチの当て方&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Zabbixのソースをダウンロード&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://www.zabbix.com/download.php" title="http://www.zabbix.com/download.php"&gt;http://www.zabbix.com/download.php&lt;/a&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;解凍&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;tar zxvf zabbix-2.0.4.tar.gz
cd zabbix-2.0.4/src/zabbix_java/
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;
&lt;li&gt;パッチを当てる&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;patch src/com/zabbix/gateway/JMXItemChecker.java zabbix2.0.4_jmx_double_type.patch
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="4"&gt;
&lt;li&gt;コンパイル&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir -p class/src
mkdir -p class/tests
javac -d class/src -classpath lib/org-json-2010-12-28.jar:lib/logback-core-0.9.27.jar:lib/logback-classic-0.9.27.jar:lib/slf4j-api-1.6.1.jar src/com/zabbix/gateway/*.java
jar cf bin/zabbix-java-gateway-2.0.4.jar -C class/src .
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="5"&gt;
&lt;li&gt;インストールされているZabbix Java Gatewayと置き換える（RPMでインストールしてる場合）&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cp -p bin/zabbix-java-gateway-2.0.4.jar /usr/sbin/zabbix_java/bin/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;これでCassandraのLoadとか監視できます。&lt;/p&gt;
&lt;p&gt;追記
Zabbixの寺島さんに言われてサポートサイトに投稿しました。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://support.zabbix.com/browse/ZBX-6404" title="https://support.zabbix.com/browse/ZBX-6404"&gt;https://support.zabbix.com/browse/ZBX-6404&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今度からZabbix使っていてバグなどを見つけたらここに報告しよう。&lt;/p&gt;</description></item><item><title>Zabbixのグラフ画面で選択したホストのグラフを全て表示するパッチ</title><link>https://www.higebu.com/blog/2013/03/05/zabbix-display-all-graphs-of-selected-host/</link><pubDate>Tue, 05 Mar 2013 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2013/03/05/zabbix-display-all-graphs-of-selected-host/</guid><description>&lt;p&gt;ちょっと前に、Zabbixのグラフ画面で選択したホストのグラフを全て表示するようにするパッチを作ったので。&lt;/p&gt;
&lt;p&gt;Zabbix2.0.4でしかテストしてませんが、2.0.5でも動くはず。&lt;/p&gt;
&lt;p&gt;パッチ当てるときは下記のような感じ。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;patch -p1 -d /usr/share/zabbix &amp;lt; zabbix2.0.4_display_all_graph.patch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;中身は下記の通り。ダウンロードも下から。&lt;/p&gt;
&lt;script src="https://gist.github.com/higebu/4591912.js"&gt;&lt;/script&gt;</description></item><item><title>CassandraとHadoopの連携</title><link>https://www.higebu.com/blog/2012/12/22/cassandra-and-hadoop-integration/</link><pubDate>Sat, 22 Dec 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/12/22/cassandra-and-hadoop-integration/</guid><description>&lt;p&gt;&lt;img src="https://www.higebu.com/images/Cassandra_logo.png" alt="Cassandra"&gt;
Cassandraに入れたデータでMapReduceするサンプル（word count）を動かす。&lt;/p&gt;
&lt;p&gt;環境&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CentOS 6.3&lt;/li&gt;
&lt;li&gt;Java 1.7.0_10&lt;/li&gt;
&lt;li&gt;Ant 1.8.4&lt;/li&gt;
&lt;li&gt;Cassandra 1.2.0-rc1&lt;/li&gt;
&lt;li&gt;Hadoop 1.1.1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;構成&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cacoo.com/diagrams/FNvWKvGTnip41Zks-6FD2E.png" alt="Architecture"&gt;
CassandraとTaskTrackerが同じノードにいるようにする&lt;/p&gt;
&lt;p&gt;それぞれのインストール方法は割愛&lt;/p&gt;
&lt;p&gt;手順&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;HadoopがCassandraのライブラリを読み込むようにする&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /etc/hadoop/hadoop-env.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 末尾に追記&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HADOOP_CLASSPATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/var/lib/cassandra/lib/*:&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_CLASSPATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;HadoopとCassandraを起動しておく&lt;/li&gt;
&lt;li&gt;Cassandraのビルド&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone git://github.com/apache/cassandra.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; cassandra
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ant
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;word_countのビルド&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; examples/hadoop_word_count
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi ivy.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バージョンを合わせる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;dependency &lt;span class="nv"&gt;org&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;org.apache.hadoop&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;hadoop-core&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;rev&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1.1.1&amp;#34;&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ant
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="5"&gt;
&lt;li&gt;word_countの設定&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi bin/word_count
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 下記のように編集（mapred-site.xmlのパスは自分の環境に合わせる）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#$JAVA -Xmx1G -ea -cp $CLASSPATH WordCount output_reducer=$OUTPUT_REDUCER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$JAVA&lt;/span&gt; -Xmx1G -ea -cp &lt;span class="nv"&gt;$CLASSPATH&lt;/span&gt; WordCount -conf /etc/hadoop/mapred-site.xml &lt;span class="nv"&gt;output_reducer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$OUTPUT_REDUCER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="6"&gt;
&lt;li&gt;word_countの実行&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/word_count_setup
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/word_count
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/word_count_counters
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.datastax.com/docs/1.1/cluster_architecture/hadoop_integration"&gt;Hadoop Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.apache.org/cassandra/HadoopSupport#ClusterConfig"&gt;Hadoop Support&lt;/a&gt;
DataStaxのエンタープライズ版だともっと簡単にやれるらしい&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Pythonでtail --follow=name</title><link>https://www.higebu.com/blog/2012/09/15/python-tail-followname/</link><pubDate>Sat, 15 Sep 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/09/15/python-tail-followname/</guid><description>&lt;p&gt;Pythonでログをtailして1行ずつ処理したいと思ったんだけど、じゃあtailコマンドの結果を受け取ればいいんじゃねっていうプログラムです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ch"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;subprocess&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;test.log&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tail -n +1 --follow=name &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;STDOUT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readline&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/higebu/3727544"&gt;tailf.py (Gist)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-n +1で一行目から読み込みます。&lt;/p&gt;
&lt;p&gt;読み込みつつ、ポジションファイルとか作って何行目まで読んだとか保存しておけば、後でリカバリできます。&lt;/p&gt;
&lt;p&gt;まぁ、Pythonで全部書けばいいじゃんて思うかもしれませんが、こういうやり方もあるよっていうことで。&lt;/p&gt;</description></item><item><title>Vimでただのメモをいい感じにハイライトしたい</title><link>https://www.higebu.com/blog/2012/09/05/how-to-use-hybrid-vim/</link><pubDate>Wed, 05 Sep 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/09/05/how-to-use-hybrid-vim/</guid><description>&lt;p&gt;&lt;img src="https://www.higebu.com/images/vim-editor_logo.png" alt="“Vim”"&gt;
最近、Vimのカラーテーマを&lt;a href="http://ethanschoonover.com/solarized"&gt;Solarized&lt;/a&gt;にしたんですが、そしたらxxx.txtに書いてたメモがすごく読みづらくなった。&lt;/p&gt;
&lt;p&gt;ほんとは画像とか見せたらわかりやすいと思うんだけど、とにかく全部一色で見づらい。&lt;/p&gt;
&lt;p&gt;それで今回導入したのが&lt;a href="http://www.vim.org/scripts/script.php?script_id=4188"&gt;HybridText&lt;/a&gt;というやつ。&lt;/p&gt;
&lt;p&gt;これ今年の8月22日にアップされてて、タイミング良すぎてわろた。&lt;/p&gt;
&lt;p&gt;入れ方はvim.orgのページ見ればわかると思うけど、一応書くと以下のような感じ。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ダウンロードしたhybrid.vimをsyntaxフォルダに入れる&lt;/li&gt;
&lt;li&gt;テキストファイル開いて&lt;code&gt;:set filetype=hybrid&lt;/code&gt;って打ってみる&lt;/li&gt;
&lt;li&gt;2で色が変わったらOKなので、以下の行をvimrcに追加する
&lt;code&gt;au BufRead,BufNewFile *.txt set syntax=hybrid&lt;/code&gt; 実際どういろが付くかもvim.orgのページにあるサンプルを見るとわかりやすいんだけど、&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;行頭に「#」つけたり、タブでインデントしたり、&lt;code&gt;&amp;quot;&lt;/code&gt;で囲ったりすると色が変わってとても見やすい。&lt;/p&gt;
&lt;p&gt;特に普段からタブでインデントしてメモ書いてるので、すごく見やすくなった。&lt;/p&gt;
&lt;p&gt;&lt;del&gt;あ、プラグインとかは&lt;a href="https://github.com/Shougo/neobundle.vim"&gt;neobundle&lt;/a&gt;で管理してるからこれもNeoBundleで入れたかったけど、まだgithubにはちゃんとしたものは上がってないようだった。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;2013/03/01 追記：
githubにあるやつはバージョンが1.0で、vim.orgにあるやつは1.2なので、vim.orgのやつをダウンロードした方が良いです。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/vim-scripts/hybrid.vim" title="vim-scripts/hybrid.vim"&gt;vim-scripts/hybrid.vim&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;あと、HybridTextのページに載ってた、&lt;a href="http://www.text2mindmap.com/" title="TEXT2MINDMAP"&gt;TEXT2MINDMAP&lt;/a&gt;っていうのが面白そう。&lt;/p&gt;
&lt;p&gt;普段マインドマップ書かないんだけどちょっと遊んでみたい。&lt;/p&gt;
&lt;p&gt;今4時なので、結構適当な文章になってるけど、Vim使いの人はぜひ使ってみてください。&lt;/p&gt;</description></item><item><title>VMware上のVMでvNICをVMXNET3にしたときにUDPのパケットが飛ばない現象のまとめ</title><link>https://www.higebu.com/blog/2012/09/02/udp-packet-loss-with-vmxnet3/</link><pubDate>Sun, 02 Sep 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/09/02/udp-packet-loss-with-vmxnet3/</guid><description>&lt;p&gt;ESXi上のVMで fluentd → fluentd しようとしたらハートビート用のudpの通信ができていなかったので、調べた結果のまとめ。&lt;/p&gt;
&lt;p&gt;調べた範囲ではパターンは3つ。&lt;/p&gt;
&lt;p&gt;vNICは全てVMXNET3です。&lt;/p&gt;
&lt;p&gt;E1000にすると直ります。&lt;/p&gt;
&lt;p&gt;ESX or ESXi 4.0 4.1でVMのOSがRHEL 5.3以上の場合&lt;/p&gt;
&lt;p&gt;以下のVMwareのKBに当てはまります。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;amp;cmd=displayKC&amp;amp;externalId=1026055" title="UDP packet loss with MSI interrupts on VMXNET3"&gt;UDP packet loss with MSI interrupts on VMXNET3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;いくつか対処法が載っているけど、ESXを4.1u1以上にするのがいいですね。&lt;/p&gt;
&lt;p&gt;VMのOSがRHEL6系の場合&lt;/p&gt;
&lt;p&gt;以下のRed Hat KBに当てはまります。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://access.redhat.com/knowledge/ja/node/67823" title="Why does the vmxnet3 driver shipped with RHEL 6 update 2 drops small UDP packets?"&gt;Why does the vmxnet3 driver shipped with RHEL 6 update 2 drops small UDP packets?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;カーネルをアップデートすると直るけど、あまりやりたくないですね。&lt;/p&gt;
&lt;p&gt;とりあえず、楽にカーネルをアップデートしたいときは&lt;a href="http://elrepo.org/tiki/tiki-index.php" title="ELRepo"&gt;ELRepo&lt;/a&gt;を使うといいです。&lt;/p&gt;
&lt;p&gt;CentOS6.4でカーネルを3.5.3にしたら直ったのは確認しました。&lt;/p&gt;
&lt;p&gt;ESXi5系の場合&lt;/p&gt;
&lt;p&gt;以下のVMwareのKBに当てはまります。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;amp;cmd=displayKC&amp;amp;externalId=2019944" title="UDP packets are dropped from Linux systems using the VMXNET3 Network Adapter"&gt;UDP packets are dropped from Linux systems using the VMXNET3 Network Adapter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;これはもうどうしようもない。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;最後のは何とかして欲しいですね。。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;追記：パッチが出ていて、それを当てれば直るようです。&lt;/p&gt;</description></item><item><title>Vyattaにrvmとfluentd入れたけどうまくいかなかった</title><link>https://www.higebu.com/blog/2012/06/03/how-to-install-fluentd-to-vyatta/</link><pubDate>Sun, 03 Jun 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/06/03/how-to-install-fluentd-to-vyatta/</guid><description>&lt;p&gt;Vyattaにfluentd入れて、fluentd→fluentdでログ集めようとしたけど失敗した&lt;/p&gt;
&lt;p&gt;環境&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ESXi5.0 u1&lt;/li&gt;
&lt;li&gt;Vyatta Core 6.4 (VMXNET3、Debianのリポジトリを追加してからVMware公式のVMware Tools入れてる)&lt;/li&gt;
&lt;li&gt;fluentd 0.10.22&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;入れた手順&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;rvm入れる&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# aptitude install ruby-full
# curl -L get.rvm.io | bash -s stable
# source /usr/local/rvm/scripts/rvm
# rvm requirements
# aptitude install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
# rvm install 1.9.3
# rvm use ruby-1.9.3
# rvm use 1.9.3 --default
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;fluentd入れる&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# gem install fluentd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以下のエラーが出た&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NameError)
uninitialized constant Gem::Commands::InstallCommand
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;
&lt;li&gt;必要なパッケージ入れる&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# rvm pkg install readline
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ここで&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Error running &amp;#39;autoreconf -is --force&amp;#39;, please read /usr/local/rvm/log/readline/autoreconf.log
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;が出たら&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# rvm --skip-autoreconf pkg install readline
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;で入れる&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# rvm pkg install zlib
# rvm pkg install openssl
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="4"&gt;
&lt;li&gt;ruby1.9.3入れ直す&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# rvm remove 1.9.3
# rvm install 1.9.3
# rvm use 1.9.3 --default
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="5"&gt;
&lt;li&gt;fluentd入れる&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# gem install fluentd
# fluentd --setup /etc/fluent
# vi /etc/fluent/fluent.conf
# mkdir /var/log/fluent/
# touch /var/log/fluent/vyatta.log
# fluentd -d /var/run/fluentd.pid -c /etc/fluent/fluent.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;これで、受け側のfluentdにログ飛ばす設定したんだけど、ログは飛ばかなくて以下のエラー&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;2012-06-06 17:25:26 +0900: starting fluentd-0.10.22
2012-06-06 17:25:26 +0900: reading config file path=&amp;#34;/etc/fluent/fluent.conf&amp;#34;
2012-06-06 17:25:26 +0900: adding source type=&amp;#34;tail&amp;#34;
2012-06-06 17:25:26 +0900: adding match pattern=&amp;#34;**.**&amp;#34; type=&amp;#34;forward&amp;#34;
2012-06-06 17:25:26 +0900: adding forwarding server &amp;#39;192.168.0.230:24224&amp;#39; host=&amp;#34;192.168.0.230&amp;#34; port=24224 weight=60
2012-06-06 17:25:44 +0900: detached forwarding server &amp;#39;192.168.0.230:24224&amp;#39; host=&amp;#34;192.168.0.230&amp;#34; port=24224 phi=8.148601411473535
2012-06-06 17:26:27 +0900: failed to flush the buffer, retrying. error=&amp;#34;no nodes are available&amp;#34; instance=10245920
2012-06-06 17:26:27 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/plugin/out_forward.rb:137:in `write_objects&amp;#39;
2012-06-06 17:26:27 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/output.rb:440:in `write&amp;#39;
2012-06-06 17:26:27 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/buffer.rb:274:in `write_chunk&amp;#39;
2012-06-06 17:26:27 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/buffer.rb:258:in `pop&amp;#39;
2012-06-06 17:26:27 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/output.rb:304:in `try_flush&amp;#39;
2012-06-06 17:26:27 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/output.rb:121:in `run&amp;#39;
12-06-06 17:26:29 +0900: failed to flush the buffer, retrying. error=&amp;#34;no nodes are available&amp;#34; instance=10245920
2012-06-06 17:26:29 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/plugin/out_forward.rb:137:in `write_objects&amp;#39;
2012-06-06 17:26:29 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/output.rb:440:in `write&amp;#39;
2012-06-06 17:26:29 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/buffer.rb:274:in `write_chunk&amp;#39;
2012-06-06 17:26:29 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/buffer.rb:258:in `pop&amp;#39;
2012-06-06 17:26:29 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/output.rb:304:in `try_flush&amp;#39;
2012-06-06 17:26:29 +0900: /usr/local/rvm/gems/ruby-1.9.3-p194/gems/fluentd-0.10.22/lib/fluent/output.rb:121:in `run&amp;#39;&amp;lt;/code&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;tcpdumpとかいろいろして見てみたんだけど、fluentd同士が生き死にを確認するために飛ばしているというudpのパケットがVMから出ていないようだった&lt;/p&gt;
&lt;p&gt;ってこういうの前あったなと思ってググったらKBにありましたよ&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;amp;cmd=displayKC&amp;amp;externalId=2019944" title="UDP packets are dropped from Linux systems using the VMXNET3 Network Adapter"&gt;UDP packets are dropped from Linux systems using the VMXNET3 Network
Adapter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;E1000に変えろとかね・・・&lt;/p&gt;
&lt;p&gt;もうちょっと検証してみます・・・&lt;/p&gt;</description></item><item><title>VMware上のVyattaをクローンできるようにする</title><link>https://www.higebu.com/blog/2012/05/09/how-to-use-vyatta-clone-helper/</link><pubDate>Wed, 09 May 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/05/09/how-to-use-vyatta-clone-helper/</guid><description>&lt;p&gt;最近の他のOS同様、Vyattaもクローンしたり、NIC付け替えるとeth0、eth1だったのがeth2、eth3になったりします。&lt;/p&gt;
&lt;p&gt;configファイルはeth0、eth1のままなので、いちいち設定し直さないとネットワークにつながりません。&lt;/p&gt;
&lt;p&gt;それは大変面倒なので、ググったらvyatta-clone-helperっていうすばらしいツールがあったので入れ方をメモ。&lt;/p&gt;
&lt;p&gt;Vyatta4Peopleのリポジトリを追加&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;configure
set system package repository vyatta4people url http://packages.vyatta4people.org/debian
set system package repository vyatta4people distribution experimental
set system package repository vyatta4people components main
commit
save
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;vyatta-clone-helperをインストール&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo aptitude update
sudo aptitude install vyatta-clone-helper
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;クローン後に起動してから、さらに再起動するとeth0、eth1・・・になっている。&lt;/p&gt;
&lt;p&gt;すばらしいツールですね。&lt;/p&gt;
&lt;p&gt;ソースは下記参照。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.vyatta4people.org/vyatta-clone-helper-created/"&gt;http://www.vyatta4people.org/vyatta-clone-helper-created/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作られたのは結構前だけど、6.4でもできました。&lt;/p&gt;</description></item><item><title>VyattaにVMware Tools入れる</title><link>https://www.higebu.com/blog/2012/05/07/install-vmware-tools-to-vyatta/</link><pubDate>Mon, 07 May 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/05/07/install-vmware-tools-to-vyatta/</guid><description>&lt;p&gt;ただ入れるだけだと、VMware ToolsがONにならなかったり、IPが取れなかったりいろいろ不安定になるのですが、gccとかがないのが原因らしい。&lt;/p&gt;
&lt;p&gt;というわけで、入れた手順。&lt;/p&gt;
&lt;p&gt;バージョンはVyatta Core 6.3とESXi5.0です。
※追記
Vyatta Core 6.4やESXi4.1でもいけた&lt;/p&gt;
&lt;p&gt;open-vm-toolsはいらないので消す（これと競合してたかもしれない）&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;## 6.3
sudo aptitude remove open-vm-tools open-vm-modules-2.6.37-1-amd64-vyatta-virt
## 6.4
sudo aptitude remove open-vm-tools open-vm-modules-3.0.23-1-amd64-vyatta-virt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Debianのリポジトリを追加する&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;configure
set system package repository squeeze components &amp;#39;main contrib non-free&amp;#39;
set system package repository squeeze distribution &amp;#39;squeeze&amp;#39;
set system package repository squeeze url &amp;#39;http://ftp.jp.debian.org/debian/&amp;#39;
set system package repository squeeze username &amp;#39;&amp;#39;
set system package repository squeeze password &amp;#39;&amp;#39;
set system package repository squeeze/updates components &amp;#39;main&amp;#39;
set system package repository squeeze/updates distribution &amp;#39;squeeze/updates&amp;#39;
set system package repository squeeze/updates username &amp;#39;&amp;#39;
set system package repository squeeze/updates password &amp;#39;&amp;#39;
set system package repository squeeze/updates url &amp;#39;http://security.debian.org/&amp;#39;
commit
save
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;gccとか入れる&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo aptitude update
sudo aptitude install build-essential dh-make debhelper devscripts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;VMware Toolsを入れる&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mount /dev/cdrom /mnt
cp -p /mnt/VMwareTools-8.6.5-621624.tar.gz .
tar zxvf VMwareTools-8.6.5-621624.tar.gz
cd vmware-tools-distrib
sudo ./vmware-install.pl -d
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;これでまともに動くようになった。&lt;/p&gt;
&lt;p&gt;ちゃんとDebian化させるにはlinux-headersも入れるべきなのかな。&lt;/p&gt;
&lt;p&gt;6.4だとDebian squeezeとカーネルのバージョンが違うのが気になる。&lt;/p&gt;</description></item><item><title>eAcceleratorを有効にしているとphpmyadminが動かない</title><link>https://www.higebu.com/blog/2012/05/07/phpmyadmin-does-not-work-with-eaccelerator/</link><pubDate>Mon, 07 May 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/05/07/phpmyadmin-does-not-work-with-eaccelerator/</guid><description>&lt;p&gt;小ネタ&lt;/p&gt;
&lt;p&gt;WordPressを移行するときにphpmyadmin使おうとしたら動かなくて、諦めてmysqldumpしたんだけど後から調べたら解決したのでメモ&lt;/p&gt;
&lt;p&gt;環境&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 11.10&lt;/li&gt;
&lt;li&gt;PHP 5.3.6-13ubuntu3.6&lt;/li&gt;
&lt;li&gt;phpmyadmin 3.4.5deb1&lt;/li&gt;
&lt;li&gt;MySQL 5.1.58&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;現象&lt;/p&gt;
&lt;p&gt;phpmyadminにアクセスすると以下のようなエラーが出る（画面上は500だったと思う）&lt;/p&gt;
&lt;p&gt;/var/log/apache2/error.log&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Fri May 04 15:53:57 2012] [error] [client xxx.xxx.xxx.xxx] PHP Warning: Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): (/usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/) in Unknown on line 0, referer: http://yyy.yyy.yyy.yyy/phpmyadmin/
[Fri May 04 15:53:57 2012] [error] [client xxx.xxx.xxx.xxx] PHP Warning: require(): open_basedir restriction in effect. File() is not within the allowed path(s): (/usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/) in /usr/share/phpmyadmin/libraries/common.inc.php on line 52, referer: http://yyy.yyy.yyy.yyy/phpmyadmin/
[Fri May 04 15:53:57 2012] [error] [client xxx.xxx.xxx.xxx] PHP Fatal error: Call to undefined function PMA_sanitize() in /usr/share/phpmyadmin/libraries/Message.class.php on line 601, referer: http://yyy.yyy.yyy.yyy/phpmyadmin/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;解決方法&lt;/p&gt;
&lt;p&gt;/etc/apache2/conf.d/phpmyadmin.conf に以下を追記する&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;Directory /usr/share/phpmyadmin&amp;gt;
php_admin_value eaccelerator.enable 0
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;でapache再起動すると動くようになる&lt;/p&gt;</description></item><item><title>Zabbix1.9.8から1.9.9にするときのDBスキーマ変更パッチ</title><link>https://www.higebu.com/blog/2012/03/02/how-to-migrate-zabbix-db-198-to-199/</link><pubDate>Fri, 02 Mar 2012 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2012/03/02/how-to-migrate-zabbix-db-198-to-199/</guid><description>&lt;p&gt;&lt;a href="https://www.zabbix.com/"&gt;![Zabbix](https://www.zabbix.com/img/zabbix_logo.png =120x31 &amp;ldquo;Zabbix&amp;rdquo;)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zabbixを1.9.8から1.9.9にしたらエラーを吐いていたので、調べたらDBのスキーマ変わってて、パッチもあった。&lt;/p&gt;
&lt;p&gt;ぐぐったら出てきたページ↓&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.zabbix.com/forum/showthread.php?t=25046"&gt;https://www.zabbix.com/forum/showthread.php?t=25046&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;18031:20120209:100634.790 [Z3005] query failed: [1054] Unknown column &amp;#39;mt.status&amp;#39; in &amp;#39;field list&amp;#39;
[select m.mediatypeid,m.sendto,m.severity,m.period,mt.stat us from media m,media_type mt where m.mediatypeid=mt.mediatypeid and m.active=0 and m.userid=3]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;完全に一致。&lt;/p&gt;
&lt;p&gt;パッチのページ&lt;/p&gt;
&lt;p&gt;&lt;a href="https://zabbix.org/wiki/How_to/trunk_db_patches"&gt;https://zabbix.org/wiki/How_to/trunk_db_patches&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下、パッチ当てる手順&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;環境
&lt;ul&gt;
&lt;li&gt;CentOS 5.7&lt;/li&gt;
&lt;li&gt;MySQL 5.0.77&lt;/li&gt;
&lt;li&gt;DB名 zabbix&lt;/li&gt;
&lt;li&gt;DBユーザ zabbix svnは入ってる前提&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最新のパッチをダウンロード&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;svn co https://www.zabbix.org/svn/zabbixorg/zabbix/upgrade_incremental/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; upgrade_incremental
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;DBにバージョン情報登録&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;grep 1.9.8 releases
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;23551&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql -uzabbix -p password zabbix -e create table dbdata &lt;span class="o"&gt;(&lt;/span&gt;name varchar&lt;span class="o"&gt;(&lt;/span&gt;32&lt;span class="o"&gt;)&lt;/span&gt;, value int&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql -uzabbix -p password zabbix -e insert into dbdata values &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;dbversion&amp;#39;&lt;/span&gt;, &lt;span class="s1"&gt;&amp;#39;23551&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;パッチ生成&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./upgrade_incremental zabbix
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./generate_version_patch 1.9.8 1.9.9
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;パッチ実行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql -uzabbix -p password zabbix &amp;lt; zabbix_incremental_patch_1.9.8-1.9.9.sql
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上。
これで普通に動くし、エラーで動かなくなってても元に戻る。
でも、テンプレートのインポート/エクスポート機能にバグが直ってないから2.0出るまで待つべきだった。&lt;/p&gt;</description></item><item><title>Selenium WebDriver (Java) で自己署名証明書のセキュリティ警告を出さないようにする</title><link>https://www.higebu.com/blog/2011/12/13/how-to-accept-untrasted-certificates-with-selenium-firefox-driver/</link><pubDate>Tue, 13 Dec 2011 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2011/12/13/how-to-accept-untrasted-certificates-with-selenium-firefox-driver/</guid><description>&lt;p&gt;Seleniumでテストするときに自分で作ったSSL証明書だとセキュリティ警告が出てテストできないけど、
Firefoxの場合は以下の方法でスルーできます。&lt;/p&gt;
&lt;p&gt;今回は2.0から追加されたWebDriverでやりました。
テスト用にプロファイル作って読み込ませる方法でもできます。
以下ソース。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
driver = new FirefoxDriver(profile);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Seleniumのダウンロードは&lt;a href="http://seleniumhq.org/download/" title="Selenium Downloads"&gt;こちら&lt;/a&gt;。
これを書いている時点での最新版は2.15.0でした。&lt;/p&gt;
&lt;p&gt;あとはアップロード、ダウンロードのテストもできたら完璧なんですが・・・&lt;/p&gt;</description></item><item><title>Eclipseのエディタの背景色と文字色を変えるプラグイン</title><link>https://www.higebu.com/blog/2011/05/17/how-to-use-eclipse-color-theme/</link><pubDate>Tue, 17 May 2011 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2011/05/17/how-to-use-eclipse-color-theme/</guid><description>&lt;p&gt;白地だと眩しいから色を変えよう
↓
設定が面倒
↓
プラグインあった&lt;/p&gt;
&lt;p&gt;という流れ&lt;/p&gt;
&lt;p&gt;忘れないようにメモしておく&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marketplace.eclipse.org/content/eclipse-color-theme"&gt;Eclipse Color Theme&lt;/a&gt;というやつです&lt;/p&gt;
&lt;p&gt;リンク先から落としてもいいし、マーケットプレイスからインストールすることもできる&lt;/p&gt;
&lt;p&gt;初めから20個くらいテーマが入ってるけど、他の人が作ったテーマを探せるところがある&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eclipsecolorthemes.org/"&gt;http://www.eclipsecolorthemes.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;オリジナルのテーマをアップすることができて、現在1715テーマもある（2011年5月17日時点）&lt;/p&gt;
&lt;p&gt;設定画面はこんな感じ↓&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.higebu.com/images/eclipse-color-theme1.png" alt="eclipse-color-theme"&gt;&lt;/p&gt;</description></item><item><title>地デジアンテナを立てました</title><link>https://www.higebu.com/blog/2011/04/25/how-to-put-up-the-antenna-device-for-digital-terrestrial-television/</link><pubDate>Mon, 25 Apr 2011 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2011/04/25/how-to-put-up-the-antenna-device-for-digital-terrestrial-television/</guid><description>&lt;p&gt;&lt;img src="https://www.higebu.com/images/20110425-012047.jpg" alt="Antenna"&gt;
うちの地域は電波が弱い地域で、ケーブルテレビさんがタダでテレビのケーブルを提供してくれていたが、&lt;/p&gt;
&lt;p&gt;地デジ化に伴い、有料化するということで、自分でアンテナ立ててみた。&lt;/p&gt;
&lt;p&gt;いろいろ試してた間はベランダに屋根馬使って立ててたので、風で倒れたりして大変だった。&lt;/p&gt;
&lt;p&gt;しかし、今回ついに上の写真のような感じに落ち着いた。&lt;/p&gt;
&lt;p&gt;BSアンテナは昔父が付けたやつ。&lt;/p&gt;
&lt;p&gt;上の小さいのがテレ玉用。&lt;/p&gt;
&lt;p&gt;下のでかいのが東京タワー用&lt;/p&gt;
&lt;p&gt;その下にUU混合器。&lt;/p&gt;
&lt;p&gt;東京タワー用のやつにはブースターも付けた。&lt;/p&gt;
&lt;p&gt;ブースターはかなり優秀で、分配してるせいもあって、リビングのテレビでは&lt;/p&gt;
&lt;p&gt;テレ玉、MXが電波0、テレビ東京が映像乱れてたのに、全部きれいに映るようになった。&lt;/p&gt;
&lt;p&gt;なんで屋根の上じゃないのかっていうと、家が古いので、屋根の上に乗って壊れたら怖いからですｗ&lt;/p&gt;
&lt;p&gt;地デジアンテナを自分で立てるために必要な技術は、ケーブルの加工だけだった。&lt;/p&gt;
&lt;p&gt;わりと誰でもできると思う。&lt;/p&gt;
&lt;p&gt;以下、今回買ったもの。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブログ移行時に消えた・・・&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もちろん、5Cのケーブルとか防水のF型接栓とかも買いました。&lt;/p&gt;
&lt;p&gt;ケーブルテレビのときより安定して映ってるので大成功ですが、東京スカイツリーが完成したら、&lt;/p&gt;
&lt;p&gt;今のアンテナじゃ感度良すぎるかもしれない。&lt;/p&gt;
&lt;p&gt;とりあえずアンテナ立てるのが面白くて楽しかったから満足。&lt;/p&gt;</description></item><item><title>Titaniumでエミュレータを動かすとNo such file or directoryと言われる</title><link>https://www.higebu.com/blog/2011/04/19/titanium-android-emulator-no-such-file-or-directory-error/</link><pubDate>Tue, 19 Apr 2011 00:00:00 +0900</pubDate><guid>https://www.higebu.com/blog/2011/04/19/titanium-android-emulator-no-such-file-or-directory-error/</guid><description>&lt;p&gt;AndroidアプリとiPhoneアプリがJavaScriptで開発できるあれですが、&lt;/p&gt;
&lt;p&gt;くだらないところで詰まってたので、メモっておく。&lt;/p&gt;
&lt;p&gt;環境：Windows 7&lt;/p&gt;
&lt;p&gt;Titaniumのインストールは&lt;a href="http://developer.appcelerator.com/" title="Appcelerator Developer Center"&gt;公式サイト&lt;/a&gt;を見ればできると思う。&lt;/p&gt;
&lt;p&gt;今回は、インストールは終わったのにサンプルが動かなかった。&lt;/p&gt;
&lt;p&gt;使ったサンプルはもちろん&lt;a href="http://developer.appcelerator.com/doc/kitchensink" title="Getting Started with KitchenSink"&gt;KitchenSink&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;以下そのときのログ。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[INFO] Launching Android emulator...one moment
[INFO] Creating new Android Virtual Device (8 WVGA854)
[ERROR] Exception occured while building Android project:
[ERROR] Traceback (most recent call last):
[ERROR] File &amp;amp;quot;C:\ProgramData\Titanium\mobilesdk\win32\1.6.1\android\builder.py&amp;amp;quot;, line 1642, in &amp;lt;module&amp;gt;
[ERROR] s.run\_emulator(avd\_id, avd_skin)
[ERROR] File &amp;amp;quot;C:\ProgramData\Titanium\mobilesdk\win32\1.6.1\android\builder.py&amp;amp;quot;, line 348, in run_emulator
[ERROR] avd\_name = self.create\_avd(avd\_id,avd\_skin)
[ERROR] File &amp;amp;quot;C:\ProgramData\Titanium\mobilesdk\win32\1.6.1\android\builder.py&amp;amp;quot;, line 318, in create_avd
[ERROR] inifilec = open(inifile,&amp;#39;r&amp;#39;).read()
[ERROR] IOError: [Errno 2] No such file or directory:
&amp;#39;C:\\Users\\yuya\\.android\\avd\\titanium\_8\_WVGA854.avd\\config.ini&amp;#39;
[INFO] Building KitchenSink for Android ... one moment
[INFO] plugin=C:\ProgramData\Titanium\plugins\ti.log&amp;amp;#92;&amp;amp;#48;.1\plugin.py
[INFO] Detected compiler plugin: ti.log/0.1
[INFO] Compiler plugin loaded and working for android
[INFO] Titanium SDK version: 1.6.1 (03/15/11 11:45 2fdc0c5)
[ERROR] Timed out waiting for emulator to be ready, you may need to close the emulator and try again
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;11、12行目を見ると、Virtual Deviceがないよと言っているようです。&lt;/p&gt;
&lt;p&gt;パスを見ると&lt;code&gt;C:\Users&lt;/code&gt;配下を見に行っているが、自分のパソコンではマイドキュメント系は&lt;/p&gt;
&lt;p&gt;全てD:\Users配下に移動しているので.androidフォルダもそっちにある。&lt;/p&gt;
&lt;p&gt;というわけで、&lt;code&gt;C:\Users\yuyaの下にD:\Users\yuya\.android&lt;/code&gt;へのシンボリックリンクを作った。&lt;/p&gt;
&lt;p&gt;コマンドプロンプトで以下のコマンドを打つ。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd C:\Users\yuya
mklink .android D:\Users\yuya\.android
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;yuyaのところは自分のユーザ名にしてください。&lt;/p&gt;
&lt;p&gt;これでサンプルが動いた。&lt;/p&gt;
&lt;p&gt;サンプルが動いたので満足&lt;/p&gt;</description></item></channel></rss>