tag:blogger.com,1999:blog-58830639612520339122024-03-05T16:20:10.195+09:00ただのメモAnonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.comBlogger39125tag:blogger.com,1999:blog-5883063961252033912.post-65822988613343923212015-10-19T23:56:00.001+09:002015-10-19T23:56:09.927+09:00移行しましたGithub pagesに移行してみました。<br />
<a href="https://kjmkznr.github.io/">https://kjmkznr.github.io/</a>Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-67671431472451565212015-09-09T01:05:00.001+09:002015-10-07T01:29:22.288+09:00Consul, Consul TemplateとPrometheusで行う簡易メトリクス収集こっちに移動しました。<br />
<a href="https://kjmkznr.github.io/post/consul-prometheus/">https://kjmkznr.github.io/post/consul-prometheus/</a>Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-54445298110863852412014-12-07T16:42:00.000+09:002015-02-02T00:02:54.492+09:00Apacheモジュールのアップデート時にrestartは必要かApacheのモジュールをアップデートしたときに通常は再起動を行っていますが、そもそも再起動が必要なのか、gracefulだけで大丈夫だったりしないかということを調べてみました。<br />
<br />
<h4>
Apacheのモジュールロードのタイミング</h4>
モジュールをロードするコードはこのあたりだろうか。 <br />
<br />
https://github.com/apache/httpd/blob/2.4.10/modules/core/mod_so.c
<script src="http://gist-it.appspot.com/github/apache/httpd/blob/2.4.10/modules/core/mod_so.c?slice=259:267"></script>
<br />
https://github.com/apache/httpd/blob/2.4.10/modules/core/mod_so.c
<script src="http://gist-it.appspot.com/github/apache/httpd/blob/2.4.10/modules/core/mod_so.c?slice=145:175"></script>
<br />
<br />
Apache からは APR の apr_dso_load() を使っているみたいなので、APRの方を覗いてみる。<br />
https://github.com/apache/apr/blob/1.5.1/dso/unix/dso.c
<script src="http://gist-it.appspot.com/github/apache/apr/blob/1.5.1/dso/unix/dso.c?slice=79:164"></script>
<br />
<br />
複数のOSをサポートするために #ifdef が多用されててちょっと見にくいが、Linux環境であれば dlopen() が使用されるようだ。<br />
<br />
さて、dlopen() が使用されるということが分かったので、呼び出し元に戻る。<br />
最初に提示したコードは load_module() の中に記述されている。<br />
これはどこからコールされているのかというと、同じ mod_so.c の中にある。<br />
<br />
<script src="http://gist-it.appspot.com/github/apache/httpd/blob/2.4.10/modules/core/mod_so.c?slice=425:427"></script>
<br />
<br />
AP_INIT_TAKE2は引数を二つもつディレクティブで、<br />
RSRC_CONFは<Directory>, <Location> の外に記述するという意味のようです。<br />
最後の EXEC_ON_READ は名前からも推測できますが、設定が読み込まれたときに実行されます。<br />
実行するのは二つ目の引数である load_module() です。<br />
<br />
設定が読み込まれたときに実行されると言うことは、graceful でも大丈夫な気がします。<br />
<br/>
<h4>モジュールをアップデートしてみる</h4>
graceful でも大丈夫そうということが分かったので、実際に試してみます。<br/>
<script src="https://gist.github.com/kjmkznr/406471b5404a8ccb4c7f.js"></script>
mod_hello という簡単なモジュールを作ってみます。<br />
上記のGistの mod_hello は Hello という設定がコンフィグに出てくると、第一引数の文字列をエラーログに出力するだけのものです。<br />
インストールは apxs で行います。
<pre class="prettyprint"><code>$ apxs -c mod_hello.c
$ sudo apxs -i -a -n hello mod_hello.la </code></pre>
httpd.conf に設定を追加します。
<pre class="prettyprint"><code>+LoadModule hello_module modules/mod_hello.so
+Hello world
</code></pre>
Apache を起動します。
<pre class="prettyprint"><code>$ sudo apache2ctl start
* Starting apache2 ...
[Sun Dec 07 16:11:41.528152 2014] [:notice] [pid 24998] Hello world</code></pre>
エラーログに "Hello world" と表示されました。<br />
続いて、モジュールを書き換えてみます。<br />
<br />
mod_hello.c の21行目を "Hello %s" から "Hell %s" にしてみます。<br />
再度、モジュールをコンパイル・インストールし、graceful してみます。<br />
<pre class="prettyprint"><code>$ apxs -c mod_hello.c
$ sudo apxs -i -a -n hello mod_hello.la
$ sudo apache2ctl graceful
* Gracefully restarting apache2 ...
[Sun Dec 07 16:30:57.456100 2014] [:notice] [pid 25436] Hell world
</code></pre>
変わりました。<br /><br />
<h4>結論</h4>
<ul>
<li>モジュールをアップデートするときは graceful で十分</li>
</ul>
<h4>参考文献</h4>
<ul>
<li><a href="http://ci.apache.org/projects/httpd/trunk/doxygen/group__ConfigDirectives.html">Apache2: Allowed locations for configuration directives.</a></li>
</ul>
<h4>追記(2015/02/01)</h4>
<blockquote class="twitter-tweet" lang="ja"><p>Apacheモジュール更新はgracefulで十分の件、どうだろう。mod_proxy周りは設定変更時にgracefulだとなんか死ぬし、弊害が出てくる場合がある気がする</p>— Gentoo遊民matsuu (@matsuu) <a href="https://twitter.com/matsuu/status/561751537903349760">2015, 2月 1</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
mod_proxy では設定が反映されなかったりすることもあるそうで、graceful だと不十分な場合もあるようです。<br>
共有メモリを使うようなモジュールだと古い設定がそのまま使われるとかありそうなので、モジュールの中身次第では注意が必要そうです。Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-54966020362679492502014-12-06T15:41:00.001+09:002014-12-06T15:47:23.621+09:00Gentoo で FIDO U2F Security Keyを使う<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyNFcGo7bBcyI89dKywAxtCHIAbHtBYW_sg60rZI0Ji9VRBvjECy1r6WkP7pE7ZH9EQyj_-aoFenEwWRnMeTutDuQGqvVknVyu0tJE3MZ84v3DKyGcPBJZ16egcTpyU2gr1VPzad8w7Jo/s1600/DSC_6211.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyNFcGo7bBcyI89dKywAxtCHIAbHtBYW_sg60rZI0Ji9VRBvjECy1r6WkP7pE7ZH9EQyj_-aoFenEwWRnMeTutDuQGqvVknVyu0tJE3MZ84v3DKyGcPBJZ16egcTpyU2gr1VPzad8w7Jo/s1600/DSC_6211.JPG" height="264" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Yubicoのオンラインストアで <a href="https://www.yubico.com/products/yubikey-hardware/fido-u2f-security-key/" target="_blank">FIDO U2F Security Key</a> を買ってみました。<br />
他にもFIDO U2Fに対応しているものとしては、<a href="https://www.yubico.com/products/yubikey-hardware/yubikey-neo/" target="_blank">高機能なヤツ</a>とか<a href="https://www.yubico.com/products/yubikey-hardware/yubikey-neo/" target="_blank">小さいヤツ</a>とかあり、OpenPGPに対応していると書かれているのでちょっと惹かれましたが、入門としては一番安いヤツでいいかなと思い、これを選びました。<br />
<br />
<div class="itemsShowHeaderTitle_title" itemprop="name">
U2Fの使い方については「<span style="font-weight: normal;"><a href="http://qiita.com/yugui/items/382275bb04c3fad09ff7" target="_blank">Googleの二段階認証にセキュリティキーを使う</a>」が分かりやすいですが、Linux環境で動作させる手段は記述がありませんでしたので追加で調べました。</span></div>
<div class="itemsShowHeaderTitle_title" itemprop="name">
<br /></div>
<h3 class="itemsShowHeaderTitle_title" itemprop="name">
<span style="font-weight: normal;">1. 事前準備 </span></h3>
まず、と言ってもこれ一つだけですが、ChromiumからSecurity Keyにアクセスできるようにしなければなりません。<br />
YubicoのSecurity Keyは hiddev で提供されます。<br />
これへアクセス出来るように udev ルールを記述する必要があります。<br />
<br />
<a href="https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules" target="_blank">https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules</a><br />
<br />
udev ルールは上記のGithubに上がっています。<br />
systemd を使用している環境であれば、これで動くらしいです。<br />
<br />
私は Gentoo で OpenRC を使用しているので上記のルールでは動作しませんでした。<br />
<br />
<script src="https://gist.github.com/kjmkznr/0b12c55be75c82ee8e5a.js"></script>
<br />
上記のようにパーミッションとグループについて設定するようにしました。<br />
Security Keyを利用するユーザは plugdev に入っている前提です。<br />
<br />
このルールを /etc/udev/rules.d/ に放り込めば準備完了です。<br />
<br />
<h3>
2. 使用する</h3>
Google の認証に使用してみます。<br />
<br />
<a href="https://security.google.com/settings/security/securitykey/add">https://security.google.com/settings/security/securitykey/add</a><br />
<br />
Security Keys を追加するページにChromiumでアクセスし、案内に従って操作するだけです。<br />
問題なければ、最終的に完了ボタンが押せるようになります。<br />
udev のルールに不備がある場合は、「次にセキュリティキーを挿入してタップしてください」というメッセージが出続けると思います。<br />
<br />
<hr />
せっかくなので <a href="http://qiita.com/advent-calendar/2014/gentoo" target="_blank">Gentoo Advent Calendar 2014</a> の6日目に登録しました。<br />
<br />Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-22846834163053895412014-11-09T00:06:00.002+09:002014-11-09T00:06:51.284+09:00ISUCON4 本戦に参加してきました先日 ISUCON4 の予選参加の件をメモしてましたが、技術的なことについてメモしてませんでした。すみません。<br />
でも、どんなことやったかあまり覚えてないので予選の方は書かないかもしれません。<br />
<br />
無事予選を突破することが出来、本戦に参加する資格を得ましたので、本日参戦してきました。<br />
予選と同じメンバーで、Oops!というチーム名で参加してました。<br />
<br />
もちろん目標は賞金狙いだったのですが、結果から言うと惨敗でした。<br />
他のチームに負けたと言うより、運営に負けたという感じがしています。<br />
1位2位とそれ以下という感じで、スタートラインに立てなかったようです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPrxS-kx0YDqPR4CNg9I8xFHJkiU3lKK3nasz4EvkeIudtdm-j8lOXVU7nJM0uMEaqy_dHQln42EWprwQUpmztDW4ftkwx7LpvQFPieN5O55W9S2kw1KOtgej1RtOSfTZ8X90ACSUps14/s1600/IMG_20141108_191952.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPrxS-kx0YDqPR4CNg9I8xFHJkiU3lKK3nasz4EvkeIudtdm-j8lOXVU7nJM0uMEaqy_dHQln42EWprwQUpmztDW4ftkwx7LpvQFPieN5O55W9S2kw1KOtgej1RtOSfTZ8X90ACSUps14/s1600/IMG_20141108_191952.jpg" height="240" width="320" /></a></div>
<br />
<h3>
最終スコア</h3>
<div>
最終的な公式スコアはそのうち isucon.net の方で公開されると思いますが、競技時間内に提出できたスコアは、最終 8,461 で最大が8,548でした。</div>
<h3>
めも</h3>
<div>
<ul>
<li>07:30 起床。第一関門の起床コンテストの壁突破。</li>
<li>08:00 出発。</li>
<li>09:00 渋谷着。予選の時と同じくヒカリエ近くのかつやでカツ丼を食べる。</li>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://pbs.twimg.com/media/B14KuyrCAAATOkw.jpg:large" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://pbs.twimg.com/media/B14KuyrCAAATOkw.jpg:large" width="240" /></a></div>
<li>09:30 ヒカリエ到着。</li>
<li>10:00 開場。カフェスペース奥のちょっと長めの机をゲット。<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvIm2-aSNvCWfNeV-2frdfabEoU-l663onKTegcC18g3VsKWQze7CZtjr69JCYBFMIda28_44TBg3kxZcedp8KKLpIiu30lPuUn5yUJxs59Vb4KGYU7aa70deGhjIGh_fEC_u864UVG6c/s1600/DSC_5962.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvIm2-aSNvCWfNeV-2frdfabEoU-l663onKTegcC18g3VsKWQze7CZtjr69JCYBFMIda28_44TBg3kxZcedp8KKLpIiu30lPuUn5yUJxs59Vb4KGYU7aa70deGhjIGh_fEC_u864UVG6c/s1600/DSC_5962.JPG" height="213" width="320" /></a></div>
</li>
<li><span id="goog_2043444387"></span>10:30 諸々準備が終わり、競技開始まで待ちぼうけ。</li>
<li>10:50 サーバのIPアドレス、パスワードが書かれた封筒を貰う。</li>
<li>11:00 競技説明。</li>
<li>11:19 </li>
<ul>
<li>初期スコア計測。</li>
<li>予選はPHPを選択したが、本戦では Go を選択。</li>
<li>この時点で 8,059 。</li>
<li>ただし、ローカル環境でのベンチで、公式のスコアとは違う。</li>
<li>iperf でノード間の帯域を調べてみたら 33Gbps とか出ていたので、ネットワークは余裕っしょという感じになる</li>
</ul>
<li>11:20 - 12:30 </li>
<ul>
<li>何回かベンチを走らせ、ログを集計したりした。</li>
<li>プログラムを眺めて修正すべき箇所のあたりをつけた</li>
</ul>
<li>12:30 - 13:20</li>
<ul>
<li>何をやってたんだか不明。</li>
</ul>
<li>13:20</li>
<ul>
<li>公式のスコアを計測。</li>
<li>7,665</li>
</ul>
<li>13:20 - 15:40</li>
<ul>
<li>nginx の設定とかを秘伝のたれに差し替え。</li>
<ul>
<li>この辺は @2matzzz がやったはず</li>
</ul>
<li>その間に動画の配信を nginx からにするようにプログラム書き換えた。</li>
<ul>
<li>元々は動画自体がRedisに突っ込まれていた</li>
<li>アップされた動画の SHA1 を求めて、Redisにハッシュを登録</li>
<li>動画自体はファイルに書込。書き込んだファイルは nginx で公開。</li>
<li>広告の JSON 内の URL を書き換えて、動画のURLを変更。</li>
<ul>
<li>/assets/xxxx.mp4 みたいなURLにした。</li>
</ul>
</ul>
<li>ローカル環境スコアが20,391</li>
</ul>
<li>15:40 - 16:10</li>
<ul>
<li>3台のマシンでファイルを共有できるように NFS を構成してくれたので、そっちに動画を描き込むように修正。</li>
<li>その他 nginx を調整。</li>
<li>動画ファイルの共有のためにRedisに登録された動画を ngx_redis を使い取り出せないかとやってみたけど、効果がなかったため止めた。</li>
<li>ローカル環境スコアが23,613</li>
</ul>
<li>17:00</li>
<ul>
<li>公式スコアを計測</li>
<li>6,779</li>
<li>スコアが下がってしまい焦る。</li>
</ul>
<li>17:00 - 18:30</li>
<ul>
<li>今まで1台のみでベンチマークしていたが、ノードB,Cの2台構成で試したところ、レポートのあたりでFAILED</li>
<li>ログをノード間で共有してなかった</li>
<li>Redisに突っ込んだりしてみたけど、最終的にNFSに書き込むようにした。</li>
<li>スコアは2台でも変わらなかった</li>
</ul>
<li>18:30 - 18:50</li>
<ul>
<li>やってることはストップして、環境の整理</li>
<li>再起動とかを行う。</li>
<li>ログの出力を止めたりし、最終の公式スコアを測定。</li>
</ul>
<li>18:50</li>
<ul>
<li>finish.txt とかを確認</li>
<li>終了モード。</li>
</ul>
</ul>
</div>
<h3>
反省点</h3>
<div>
<ul>
<li>クライアントからのリクエストはちゃんと調べましょう。</li>
<ul>
<li>普通の環境だとブラウザにキャッシュさせるとかは普通にやるけれど、ISUCONではそのあたりをまったく考慮していなかった。</li>
<li>過去のISUCONの問題で予習していくうちに、ISUCONの枠に囚われてしまった感がある。</li>
</ul>
<li>ローカルのベンチマーク環境とリモートのベンチマーク環境の違いをよく考えよう</li>
<ul>
<li>なぜリモートのベンチマークだとスコアが下がるのかをよく考えていなかった</li>
</ul>
<li>落ち着こう</li>
<ul>
<li>一つのこと(今回はGo言語のプログラムの修正)に集中しすぎた</li>
<li>チームメンバーとのコミュニケーションをもっととれば良かった</li>
</ul>
<li>Gentooとかコンパイルオプションとかそういうことの前にやることはたくさんある。</li>
<ul>
<li>Gentooを使うのは最終手段とすべき。</li>
</ul>
</ul>
<div>
松鵜先生のチームに勝てたのは嬉しかったが五十歩百歩という感じであまり喜べないですね。<br />
<br /></div>
</div>
<div>
最後に、楽しいイベントを開催してくれた運営の皆様ありがとうございました。</div>
<div>
きっとまた来年も参加させていただきます。</div>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-84385886233744554012014-10-11T17:39:00.000+09:002014-10-11T17:39:31.199+09:00共有ライブラリのアップデート時にプロセスの再起動はいつ必要か共有ライブラリのアップデート時、対象のライブラリが起動中のプロセスから利用されているかを見て、プロセスの再起動を行うかどうかの判断をしている。<br />
<br />
例えばこんなのとかですね。<br />
<blockquote class="tr_bq">
$ sudo grep libssl.so.1.0.1e /proc/*/maps | cut -d/ -f3 | sort -u | xargs -r -- ps uf</blockquote>
プロセスを再起動すれば、更新されたライブラリが使用されるという認識で居るのだけれど、実際にそうなのか調べたことがなかった。<br />
ライブラリをアップデートしたときに、どのタイミングで差し変わるか気になったので調べてみた。<br />
<br />
<h4>
共有ライブラリのサンプル</h4>
<div>
<script src="https://gist.github.com/kjmkznr/e7c7e3ccaf980876acfb.js"></script>
</div>
<h4>
<br /></h4>
<h4>
プロセス再起動時</h4>
<div>
まずは、普通に再起動を行ってみる。</div>
<blockquote class="tr_bq">
<pre>$ ./test
Hell World
PID is 16856
Press Any Key To Exit...</pre>
</blockquote>
別のターミナルで maps を参照してみる。
<br />
<blockquote class="tr_bq">
<pre>$ grep libexample /proc/16856/maps
7fee12576000-7fee12577000 r-xp 00000000 00:0f 14844378 /usr/local/lib64/libexample.so
7fee12577000-7fee12776000 ---p 00001000 00:0f 14844378 /usr/local/lib64/libexample.so
7fee12776000-7fee12777000 r--p 00000000 00:0f 14844378 /usr/local/lib64/libexample.so
7fee12777000-7fee12778000 rw-p 00001000 00:0f 14844378 /usr/local/lib64/libexample.so</pre>
</blockquote>
libexample.soを更新してみます。
<br />
<blockquote class="tr_bq">
<pre>$ ./test
Hello World
PID is 17109
Press Any Key To Exit...</pre>
</blockquote>
<blockquote class="tr_bq">
<pre>$ grep libexample /proc/17109/maps
7f33b9223000-7f33b9224000 r-xp 00000000 00:0f 14844450 /usr/local/lib64/libexample.so
7f33b9224000-7f33b9423000 ---p 00001000 00:0f 14844450 /usr/local/lib64/libexample.so
7f33b9423000-7f33b9424000 r--p 00000000 00:0f 14844450 /usr/local/lib64/libexample.so
7f33b9424000-7f33b9425000 rw-p 00001000 00:0f 14844450 /usr/local/lib64/libexample.so</pre>
</blockquote>
まあ、普通に更新されますね。
<br />
<br />
<h4>
他のプロセスがライブラリをロードした状態で、更新する</h4>
プロセスAで libexample.so を使用した状態で、libexample.so を更新し、プロセスBを起動する。
そのときプロセスBは、古いライブラリと新しいライブラリのどちらを使用することになるのか。<br />
プロセスA
<br />
<blockquote>
<pre>$ ./test
Hell World
PID is 17248
Press Any Key To Exit...</pre>
</blockquote>
プロセスAは起動させたままで、ライブラリを更新する。
<br />
<blockquote>
<pre>$ vim libexample.c
$ make
$ sudo make install</pre>
</blockquote>
プロセスBを起動する。
<br />
<blockquote>
<pre>$ ./test
Hello World
PID is 17343
Press Any Key To Exit...</pre>
</blockquote>
このとき maps は以下のようになる。
<br />
<blockquote>
<pre>$ grep libexample /proc/*/maps 2> /dev/null
/proc/17248/maps:7f707a138000-7f707a139000 r-xp 00000000 00:0f 14844464 /usr/local/lib64/libexample.so (deleted)
/proc/17248/maps:7f707a139000-7f707a338000 ---p 00001000 00:0f 14844464 /usr/local/lib64/libexample.so (deleted)
/proc/17248/maps:7f707a338000-7f707a339000 r--p 00000000 00:0f 14844464 /usr/local/lib64/libexample.so (deleted)
/proc/17248/maps:7f707a339000-7f707a33a000 rw-p 00001000 00:0f 14844464 /usr/local/lib64/libexample.so (deleted)
/proc/17343/maps:7f9413f52000-7f9413f53000 r-xp 00000000 00:0f 14844475 /usr/local/lib64/libexample.so
/proc/17343/maps:7f9413f53000-7f9414152000 ---p 00001000 00:0f 14844475 /usr/local/lib64/libexample.so
/proc/17343/maps:7f9414152000-7f9414153000 r--p 00000000 00:0f 14844475 /usr/local/lib64/libexample.so
/proc/17343/maps:7f9414153000-7f9414154000 rw-p 00001000 00:0f 14844475 /usr/local/lib64/libexample.so</pre>
</blockquote>
libexample.so が置き換わってるので古いのを利用しているプロセスは (deleted) がつく。<br />
<br />
<h4>
fork時</h4>
fork した子プロセスでライブラリの関数を利用するプログラムを用意します。
1秒ごとに子プロセスを生成して、その間にライブラリを更新します。
<br />
<blockquote>
<pre>$ ./test-fork
[Parent] PID is 18271
[Parent] Hell World
[Child] Hell World
[Child] PID is 18272
[Child] Hell World
[Child] PID is 18273
[Child] Hell World
[Child] PID is 18274
</pre>
</blockquote>
プログラムは起動したまま、ここでライブラリを差し替え。
<br />
<blockquote>
<pre>$ vim libexample.c
$ make
$ sudo make install
</pre>
</blockquote>
プログラムの出力を見てみると、
<br />
<blockquote>
<pre>[Child] Hell World
[Child] PID is 18276
[Child] Hell World
[Child] PID is 18277
[Child] Hell World
[Child] PID is 18279
[Child] Hell World
[Child] PID is 18280
</pre>
</blockquote>
変わらず "Hell" のままですね。
<br />
細かな動作までは調べてないので推測ですが、fork() の場合は動的にリンクされたあとのメモリ空間をコピーするためではないかと思います。<br />
<br />
<h4>
まとめ</h4>
<div>
<ul>
<li>共有ライブラリをアップデートしたときはプロセスの再起動が必要</li>
<li>子プロセスの再起動だけでは不足</li>
<li>同じ共有ライブラリを他のプロセスで利用していたとしても、新しく起動したプロセスでは更新後の共有ライブラリが利用される</li>
</ul>
<div>
<br /></div>
<h4>
備考</h4>
<div>
今回は試してないですが、Dynamic Loadingというライブラリを動的にロードする方式がありこの場合どのような動作になるのかが気になります。<br />
恐らく dlopen/dlclose で開き直せば新しいライブラリがロードされるのではないかと思いますが..<br />
Dynamic Loading は恐らく Apache のモジュールのロードで利用されてるはずです。<br />
nginx ではビルド時に組み込むはずなので、Dynamic Loading ではないはず。<br />
<br /></div>
</div>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-91099270182020096172014-09-28T22:47:00.001+09:002014-09-28T23:11:12.057+09:00ISUCON4 オンライン予選に参加してきた<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_NF9TxzIVPtBQHuThknTndbnt25V3PQhLojeMWOnQrsR9-AMX9ryhloCvCQpyzO7LbiQiO5pDzshP_63TeQujyWZqSoWHbEa2ZFLUudiVlmw93c1qUIPHRGujcFh4Kb5ojGDymvA6n_M/s1600/IMG_20140928_095854.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_NF9TxzIVPtBQHuThknTndbnt25V3PQhLojeMWOnQrsR9-AMX9ryhloCvCQpyzO7LbiQiO5pDzshP_63TeQujyWZqSoWHbEa2ZFLUudiVlmw93c1qUIPHRGujcFh4Kb5ojGDymvA6n_M/s1600/IMG_20140928_095854.jpg" height="240" width="320" /></a></div>
ISUCON4のオンライン予選をLINEカフェにお邪魔させて頂きながらやってました。<br />
細かくメモってないから、覚えてる範囲で日記にしておく。<br />
<br />
メンバーは専門学校時代の同級生とその同僚で3人。<br />
言語はPHPを選択しました。<br />
<br />
<br />
<ul>
<li>08:50 渋谷到着。普段出勤するより早い。</li>
<li>09:00 近くのかつやでカツ丼ミニを食す。</li>
<li>09:20 ヒカリエ11Fに着。ローソンで昼飯飲み物を購入。</li>
<li>09:30 LINEカフェに突入。</li>
<li>10:00 予選開始。bitbucket のリポジトリにコードなどをつっこむ。</li>
<li>10:50 PHP などの初期設定など、もろもろ雑作業を終えて最初のベンチマーク(スコア: 1,646)</li>
<li>11:18 スコア 3,297</li>
<li>11:49 スコア 3,252</li>
<li>12:36 スコア 2,460</li>
<li>13:36 スコア 2,507</li>
<li>13:51 スコア 24,397</li>
<li>14:25 スコア 28,160</li>
<li>14:42 スコア 28,785</li>
<li>15:10 スコア 39,377 この時点で5位。このスコア以降はプログラムを大幅に書き換えようとして制限時間内に終わらず。</li>
</ul>
<div>
<br /></div>
<div>
最終的に暫定10位以内に入ることは出来なかった。無念。</div>
<div>
ami 提出のため、楽天カフェに移動し反省会。</div>
<div>
再起動したら 46,274 までスコアが上がった。無念。</div>
<br />
今回の反省点。<br />
<br />
<ul>
<li>プログラムの大幅な書き換えと平行して、そのままのコードでチューニングしていく人がいるべきだった。</li>
<li>SQL力が足りなく、コード内のSQLが何をやっているのかを把握し切れていなかった</li>
</ul>
<div>
この2点が大きいと思った。<br />
<br />
技術的な点はそのうちひっそりと追記します。</div>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-31530606953713433442014-07-18T00:26:00.005+09:002014-07-18T00:57:35.819+09:00今まで行ったねこカフェめも 2014年7月版<span id="goog_876286358"></span><a href="https://draft.blogger.com/"></a><span id="goog_876286359"></span>今までに行ったことがある猫カフェのメモ。<br />
<br />
<h3>
ねこのみせ</h3>
URL: <a href="http://www.nya-n.jp/" target="_blank">http://www.nya-n.jp/ </a><br />
場所: 町田<br />
<br />
まずはここ。<br />
関東で一番古くから営業しているお店。<br />
家から一番近いところなので、よくいく。 <br />
お店はそれほど広いわけではないけれど、マンガがたくさん置いてある。<br />
<br />
初めて行ったのは Twitter によると <a href="https://twitter.com/kjm/statuses/3358753464" target="_blank"><span class="metadata">2009年8月17日</span></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://d3j5vwomefv46c.cloudfront.net/photos/large/23888874.jpg?1250498728" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://d3j5vwomefv46c.cloudfront.net/photos/large/23888874.jpg?1250498728" width="320" /></a></div>
<h4>
行った日メモ</h4>
<ul>
<li>2009年08月17日</li>
<li><span class="metadata">2010年04月30日</span></li>
<li><span class="metadata">2011年01月09日</span></li>
<li><span class="metadata">2011年04月22日</span></li>
<li><span class="metadata">2012年02月25日 </span></li>
<li><span class="metadata">2012年04月28日</span></li>
<li><span class="metadata">2012年10月20日</span></li>
<li><span class="metadata">2013年03月24日</span></li>
<li><span class="metadata">2014年03月21日</span></li>
<li><span class="metadata">2014年05月11日</span></li>
</ul>
<br />
<h3>
ねこっ茶</h3>
URL: <a href="http://necoccha.com/" target="_blank">http://necoccha.com/</a><br />
場所: 横浜 <br />
<br />
普通の家みたいなところでした。<br />
和室と洋室があり。<br />
<br />
以前の職場が横浜だったのですが、このお店とは駅を挟んで逆側だったので結局一度しか行かず。<br />
駅からもちょっと歩いたところにある。<br />
ねこはもちろん可愛かった。 <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV1GnJuDLs6aEsu6Lb17KrkdGAs56rc-jvvm5EKd3IpmpaG-GKdMHpUxdE1dW0qp-a_yb15F8zdMPBfMwxlGqvHcf3tjMeB5E833cmchKSebIErqmsRTrALe8e5uxGjaxXNt4EDUhB68g/s1600/favn.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV1GnJuDLs6aEsu6Lb17KrkdGAs56rc-jvvm5EKd3IpmpaG-GKdMHpUxdE1dW0qp-a_yb15F8zdMPBfMwxlGqvHcf3tjMeB5E833cmchKSebIErqmsRTrALe8e5uxGjaxXNt4EDUhB68g/s1600/favn.jpg" height="320" width="240" /></a></div>
<br />
行った日メモ<br />
<ul>
<li>2010年06月09日</li>
</ul>
<br />
<h3>
<span class="metadata">らぶねこ</span></h3>
<span class="metadata">URL: <a href="http://www.loveneko.jp/pc/index.html" target="_blank">http://www.loveneko.jp/pc/</a></span><br />
<span class="metadata">場所: 札幌・大通公園</span><br />
<br />
<span class="metadata">帰省したついでに狸小路近くの猫カフェに行ってみた。</span><br />
<span class="metadata">平日の昼間だったせいもあり、ほぼ客はいなかった。</span><br />
<span class="metadata">1時間程度滞在したはずだが、その間は、どうみても営業中か会社から抜け出したのサラリーマン、子供連れの親子くらいしかいなかったと思う。</span><br />
<span class="metadata"><br /></span>
<span class="metadata">このお店は完全に飲食スペースが別れており、飲み物も飲食スペースで飲まなければいけなかった。</span><br />
<span class="metadata">先ほど Web ページの写真を覗いたら、以前行ったときよりも設備(キャットタワー)が充実しているようだ。</span><br />
<span class="metadata"><br /></span>
<span class="metadata">また、たまたま行ったときに下痢気味な猫がいたらしく、ちょっと臭いがあった。</span><br />
<span class="metadata"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://d3j5vwomefv46c.cloudfront.net/photos/large/285608568.jpg?1303889961" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://d3j5vwomefv46c.cloudfront.net/photos/large/285608568.jpg?1303889961" width="320" /></a></div>
行った日メモ<br />
<ul>
<li>2011年04月27日</li>
</ul>
<br />
<h3>
<span class="metadata">ねこ・Jalala</span></h3>
<span class="metadata">URL: <a href="http://www.nekojalala.com/" target="_blank">http://www.nekojalala.com/</a> </span><br />
<span class="metadata">場所: 秋葉原</span><br />
<br />
<span class="metadata">秋葉原にある猫カフェ。</span><br />
<span class="metadata">店内はちょっと狭かった。</span><br />
<span class="metadata">行ったときは非常に混んでいたので余計にそう思ったのかもしれない。</span><br />
<span class="metadata">メインクーンという種類の猫がいるお店で、でかかった。</span><br />
<span class="metadata">また行きたい。</span><br />
<span class="metadata"><br /></span>
<span class="metadata">あまりいい写真がなかった。</span><br />
<span class="metadata">ちょっと大きさがわかりにくいけど、メインクーン(写真右)</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihl7vgSrHpBPXTtOh0mF_Nj-D-hbNCgKPd4PBaMv7ZnGS6QoT29gmB0WTaB3Wmj0Basz2VWWkt__gPdSJyLeQNthdLT7oajz_ersqWObqBhu00-Q8jwV2bocKgvxPlHcYSgYITax-1cQw/s1600/DSC_0103.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihl7vgSrHpBPXTtOh0mF_Nj-D-hbNCgKPd4PBaMv7ZnGS6QoT29gmB0WTaB3Wmj0Basz2VWWkt__gPdSJyLeQNthdLT7oajz_ersqWObqBhu00-Q8jwV2bocKgvxPlHcYSgYITax-1cQw/s1600/DSC_0103.JPG" height="213" width="320" /></a></div>
<br />
<br />
<br />
<br />
<span class="metadata">行った日メモ</span><br />
<br />
<ul>
<li><span class="metadata">2011年8月10日 </span></li>
</ul>
<h3>
<span class="metadata"><span class="metadata"></span><br /></span></h3>
<h3>
Cat Magic </h3>
URL: なし <br />
場所: 新宿3丁目<br />
<br />
残念ながら閉店してしまったようです。<br />
閉店したからなのか Twitter アカウントがいつのまにか、猫カフェのことじゃなく出会い系のことばかりつぶやくようになっていたので、あまり良い印象はない。 <br />
<br />
猫は人なつっこかったです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxeKxpCDyMZUA-JSz1ukwvlYqkEuyqvHWGsZjWE-lOU2UTNUZv0XLZari456OPpjqrJtKilPTODlFGHQkTgLmWzm8qN_pf4mzb6f1t2I8Tk00Eh2BEdRKvMC5sl5-aF-gIal4hezJnf6s/s1600/DSC_0034.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxeKxpCDyMZUA-JSz1ukwvlYqkEuyqvHWGsZjWE-lOU2UTNUZv0XLZari456OPpjqrJtKilPTODlFGHQkTgLmWzm8qN_pf4mzb6f1t2I8Tk00Eh2BEdRKvMC5sl5-aF-gIal4hezJnf6s/s1600/DSC_0034.JPG" height="320" width="213" /></a></div>
<br />
行った日メモ<br />
<ul>
<li>2011年05月30日</li>
</ul>
<h3>
<span class="metadata"> </span></h3>
<h3>
<span class="metadata">きゃりこ 新宿店</span></h3>
<span class="metadata">URL:<a href="http://www.catcafe.jp/" target="_blank">http://www.catcafe.jp/</a></span><br />
<span class="metadata">場所: 新宿</span><br />
<br />
<span class="metadata">吉祥寺店はまだ行ったことがなかった。</span><br />
<span class="metadata">ここはさるプリというアプリの開発時に、なぜか打ち合わせで利用したのが初。</span><br />
<span class="metadata">最近は規制もあり22時までしかやっていなかったが、以前は朝まで営業していた。</span><br />
<span class="metadata">店内は2フロアあり、非常に広い。</span><br />
<span class="metadata">飲食スペースが一応ある。</span><br />
<span class="metadata">客層は場所柄、ホスト・ホステスっぽい人も見かけるがサラリーマンもいた気がする。</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiem1MZjQe_dmpH1G6mhhE_PS8bsatw5LFMI3b2TERgV84-ie1pasK-nf3Ww1YHZ_1aiNJARTngmVX37y-wk96dDTy-Aund6DzMqHej7ecYsh43k1fSb-O1cZIe_Ew29XnSpkTW3QjBslM/s1600/DSC_0131.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiem1MZjQe_dmpH1G6mhhE_PS8bsatw5LFMI3b2TERgV84-ie1pasK-nf3Ww1YHZ_1aiNJARTngmVX37y-wk96dDTy-Aund6DzMqHej7ecYsh43k1fSb-O1cZIe_Ew29XnSpkTW3QjBslM/s1600/DSC_0131.JPG" height="213" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0xuVNRZAgLNmLgEHqMml7yjJBC6cN6r39oBo9Pnv2av8A6bp7G6OGDmkXniW6uBAswfubyg0VfXCdetdGK7-liIhLpoKpOGVnU6lhhehHXo6s-SnP1mep7YbDxpbN-XGCY0IS6498cCQ/s1600/DSC_0138.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0xuVNRZAgLNmLgEHqMml7yjJBC6cN6r39oBo9Pnv2av8A6bp7G6OGDmkXniW6uBAswfubyg0VfXCdetdGK7-liIhLpoKpOGVnU6lhhehHXo6s-SnP1mep7YbDxpbN-XGCY0IS6498cCQ/s1600/DSC_0138.JPG" height="213" width="320" /></a></div>
<br />
<br />
<br />
<br />
<span class="metadata">行った日メモ</span><br />
<br />
<ul>
<li><span class="metadata">2011年12月05日</span></li>
<li><span class="metadata">2012年02月23日</span></li>
<li><span class="metadata">2013年08月15日</span></li>
</ul>
<br />
<h3>
ハビ猫</h3>
URL: <a href="http://hapineko.com/" target="_blank">http://hapineko.com/</a><br />
場所: 渋谷<br />
<br />
渋谷のそれなりに良い場所にあるが、自分が行ったときはカップルが一組いた程度だった。<br />
ここは入店時に荷物を預けなければならなず、めんどくさかった。<br />
ロッカーにして欲しいところ。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTao0VnfJPAWGMbgzRt0jKJ2gRVILeyQEVZ1ukb2Aaqif6otD6OO8guftnP4HN3yNzVdz_ItkV8GjOISCCITiYv6Q36BRv77OoOeQpKIgt9GWAB_yUAO5-tjdeD5WTY26H4vLcx2mpKjQ/s1600/DSC_0155.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTao0VnfJPAWGMbgzRt0jKJ2gRVILeyQEVZ1ukb2Aaqif6otD6OO8guftnP4HN3yNzVdz_ItkV8GjOISCCITiYv6Q36BRv77OoOeQpKIgt9GWAB_yUAO5-tjdeD5WTY26H4vLcx2mpKjQ/s1600/DSC_0155.JPG" height="180" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeLjtkPNOAy9uUtlTri7CWKPsN4vLNOW6qp5P4sor1q79SpJ0jHiQwZAj_re7EON3nXgb9Qck0wv9u-8MJ-DZtrFv9dSEBEctQOb_wXCSszlJkUR6MzJmtqHYXpZ-i0eX0LEBWQAXq3Wo/s1600/DSC_0159.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeLjtkPNOAy9uUtlTri7CWKPsN4vLNOW6qp5P4sor1q79SpJ0jHiQwZAj_re7EON3nXgb9Qck0wv9u-8MJ-DZtrFv9dSEBEctQOb_wXCSszlJkUR6MzJmtqHYXpZ-i0eX0LEBWQAXq3Wo/s1600/DSC_0159.JPG" height="320" width="180" /></a></div>
行った日メモ<br />
<ul>
<li>2013年08月13日 </li>
</ul>
<br />
<h3>
Cat Cafe Nyanny</h3>
URL: <a href="http://www.猫カフェ.tokyo.jp/" target="_blank">http://www.猫カフェ.tokyo.jp/</a><br />
場所: 秋葉原<br />
<br />
秋葉原にあるもう一店。<br />
そんなに広くはないが、2フロアあり1フロアは和室らしい。<br />
自分が行ったときは和室のフロアには足を運ばなかった。<br />
<br />
秋葉原に行ったときはここか Jalala で休憩したい。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj06ttSSZ7VBvhU-rgmQL4Pcn14EfPsSHNKXe_6Wz_sc5GrIcOls2rkBCRNajPd_GekaxtAi9K9MqyDAf61gU6edD6pKjVrQ7ZGFefSKC4r9_ArfWJz7uf3qG4d7B7GylbOrM3wCSy0jGw/s1600/DSC_0308.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj06ttSSZ7VBvhU-rgmQL4Pcn14EfPsSHNKXe_6Wz_sc5GrIcOls2rkBCRNajPd_GekaxtAi9K9MqyDAf61gU6edD6pKjVrQ7ZGFefSKC4r9_ArfWJz7uf3qG4d7B7GylbOrM3wCSy0jGw/s1600/DSC_0308.JPG" height="320" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0KDyPpSspsAuCNBXOw4sqM_VW3D2Bq8MIqm04x0WIvE5YXb9N3OyexXjhYufASJmIvxkFglr0RYOah0xkCgwj7Vo_mZBLQWDqWJ1wBnCd8ZRS-KVeDM6t8K86ov-zckUP08Zuveeq_F0/s1600/DSC_0304.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0KDyPpSspsAuCNBXOw4sqM_VW3D2Bq8MIqm04x0WIvE5YXb9N3OyexXjhYufASJmIvxkFglr0RYOah0xkCgwj7Vo_mZBLQWDqWJ1wBnCd8ZRS-KVeDM6t8K86ov-zckUP08Zuveeq_F0/s1600/DSC_0304.JPG" height="240" width="320" /></a></div>
<br />
<span class="metadata">行った日メモ</span><br />
<ul>
<li><span class="metadata">2013年12月28日</span></li>
</ul>
<span class="metadata"></span> <br />
<h3>
<span class="metadata"><br /></span></h3>
<h3>
<span class="metadata">ねころび</span></h3>
<span class="metadata">URL: <a href="http://www.nekorobi.jp/" target="_blank">http://www.nekorobi.jp/</a></span><br />
<span class="metadata">場所: 池袋</span><br />
<span class="metadata"><br /></span>
<span class="metadata">とても特徴的な猫たちがいるお店です。</span><br />
<span class="metadata">カメラ学校や、モンハンオフとかもやってるようです。</span><br />
<span class="metadata"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuaGXHavr0Yh1LO2pXa5W60W4Hgbd018LfOzXxsOl4xrCM7Kd09TIZL0zUK6dfRTTrTbf_Pgsn78WY6edfsPUTe3_iQViKxoyBRtuc7w3lx2uYhA24YyKxTLBq0aHSz8eRQPqRSdrth_0/s1600/14421554741_99f6b185a1_k.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuaGXHavr0Yh1LO2pXa5W60W4Hgbd018LfOzXxsOl4xrCM7Kd09TIZL0zUK6dfRTTrTbf_Pgsn78WY6edfsPUTe3_iQViKxoyBRtuc7w3lx2uYhA24YyKxTLBq0aHSz8eRQPqRSdrth_0/s1600/14421554741_99f6b185a1_k.jpg" height="213" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNcR-ItSlIkEzT4VCY5jgooRE8xWcgyUoXBF8XXecLJURxxUX8YHtNd64Irp7S2dkZ7DIEPmQqr5hL63GBLNb9Y2876bqBclO-q0d1tSI5wBxeLkqhQJNLTUxgtMAobpDBmY7lBU02PI8/s1600/14423601562_f1468e65fd_k.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNcR-ItSlIkEzT4VCY5jgooRE8xWcgyUoXBF8XXecLJURxxUX8YHtNd64Irp7S2dkZ7DIEPmQqr5hL63GBLNb9Y2876bqBclO-q0d1tSI5wBxeLkqhQJNLTUxgtMAobpDBmY7lBU02PI8/s1600/14423601562_f1468e65fd_k.jpg" height="213" width="320" /></a></div>
<span class="metadata"><br /></span>
<span class="metadata"><br /></span>
<span class="metadata">行った日メモ</span><br />
<ul>
<li><span class="metadata">2014年01月12日</span></li>
<li><span class="metadata">2014年06月15日</span></li>
<li><span class="metadata">2014年07月13日</span></li>
</ul>
<span class="metadata"></span><br />
<span class="metadata"><br /></span>
<h3>
<span class="metadata">Nyafe Melange</span></h3>
<span class="metadata">URL: <a href="http://nyafe-melange.com/" target="_blank">http://nyafe-melange.com/</a></span><br />
<span class="metadata">場所: 恵比寿</span><br />
<span class="metadata"><br /></span>
<span class="metadata">恵比寿駅から徒歩数分のところにあるお店。</span><br />
<span class="metadata">お店の広さはほどよい感じで、カウンターもあるのでPCを開くことも出来る。</span><br />
<span class="metadata">ねこのドーナツも売っている。</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfgA4EEE-inL318lxAsNAgqOPVAoVw7vnXYw6IFH_wQVunKv1ynfeo1jlTFL6xNbyGg4bOyTgM6ndvACaagKX2OowQk6boymoWMgJ5LJdhDsnLszpjnVAyTm3ntCQCaaR47KiFtSkwcS0/s1600/14449413299_54a2709534_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfgA4EEE-inL318lxAsNAgqOPVAoVw7vnXYw6IFH_wQVunKv1ynfeo1jlTFL6xNbyGg4bOyTgM6ndvACaagKX2OowQk6boymoWMgJ5LJdhDsnLszpjnVAyTm3ntCQCaaR47KiFtSkwcS0/s1600/14449413299_54a2709534_z.jpg" height="213" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4fa-EptsPUwMWWRBGKgwtJzlYCeT2OHdxSuLr2oC4ktTg5HZfTtQB9khvtMb6cH5fOHRXwac-EA_yn1HBqI7B0Ty5SUmrdOzDDxkupl9fkHHFaC5sjwzgd6qSursGV0pIhtW3u4-dr6c/s1600/14655946013_157ff4c244_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4fa-EptsPUwMWWRBGKgwtJzlYCeT2OHdxSuLr2oC4ktTg5HZfTtQB9khvtMb6cH5fOHRXwac-EA_yn1HBqI7B0Ty5SUmrdOzDDxkupl9fkHHFaC5sjwzgd6qSursGV0pIhtW3u4-dr6c/s1600/14655946013_157ff4c244_z.jpg" height="213" width="320" /></a></div>
<br />
<span class="metadata">行った日メモ </span><br />
<ul>
<li><span class="metadata">2014年7月12日</span></li>
</ul>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-33935738967917617942014-07-07T23:59:00.001+09:002014-07-07T23:59:20.495+09:00Gentoo勉強会 2014年7月に参加してきた6月に引き続き、7月5日に開催された勉強会に参加してきました。<br />
実はGentoo勉強会のことをすっかり忘れていて、前日に松鵜さんに言われて思い出して参加申し込みをしたのでした。<br />
あと、www.gentoo.gr.jp に掲載しているニュースも当日に Pull Req をするという感じで、次回はちゃんと事前にニュースを載せたいなと思ってます。忘れてたらすいません。<br />
<br />
場所はいつもと同じく Miracle Linux さんの会議室。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWIrLOh8f62nOzsf_i-J3Ryca0bDmuF047hKS9rCO_kn2gnuP3EZoTRh4AoxOA0W9IRBHiF6fxbHmUaBwGtJcQ5zlLoPotYFiufnVcHQCjWsEf8kssMzgj40sdwFkevXrlukUJay5Hv8/s1600/14599790673_93a873c687_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWIrLOh8f62nOzsf_i-J3Ryca0bDmuF047hKS9rCO_kn2gnuP3EZoTRh4AoxOA0W9IRBHiF6fxbHmUaBwGtJcQ5zlLoPotYFiufnVcHQCjWsEf8kssMzgj40sdwFkevXrlukUJay5Hv8/s1600/14599790673_93a873c687_z.jpg" height="213" width="320" /></a></div>
<br />
今回の参加者はメモによると合計11名。<br />
<br />
以下メモ。<br />
<br />
<h4>
自己紹介</h4>
特にメモはない。 <br />
<a class="g-profile" href="https://plus.google.com/109838268770696327741" target="_blank">+Takuto Matsuu</a> さんが Gentoo ステッカーを配ってくれました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhKRHJMgLhLGly_VM5GFJXjM4DXJdD_pduOTypJ8DSCLASyIIMD7ULypEr3hjYh3DMvBVYr05-ANs15xzqMWhFLZQycLbehBPpaSTY9cuas25ULCNvGS1zKiEvIyFl75LOHfq0DnX2i0I/s1600/14393027790_2e78e89ae8_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhKRHJMgLhLGly_VM5GFJXjM4DXJdD_pduOTypJ8DSCLASyIIMD7ULypEr3hjYh3DMvBVYr05-ANs15xzqMWhFLZQycLbehBPpaSTY9cuas25ULCNvGS1zKiEvIyFl75LOHfq0DnX2i0I/s1600/14393027790_2e78e89ae8_z.jpg" height="213" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge5lHaq2B2j6wLSDS3IAGv2gu47cXUWh-Yvn6mw95yyicvBt47_J_f3ynvYYjXiGDTpqxRnPlF-UMzYU-CecHuAG7XAsJOgM0Mq8MSjAVEJNsNDwzvGeJHnmAO_0Q7k447VEqeW9L2UTE/s1600/14576350311_f018eb6f7f_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge5lHaq2B2j6wLSDS3IAGv2gu47cXUWh-Yvn6mw95yyicvBt47_J_f3ynvYYjXiGDTpqxRnPlF-UMzYU-CecHuAG7XAsJOgM0Mq8MSjAVEJNsNDwzvGeJHnmAO_0Q7k447VEqeW9L2UTE/s1600/14576350311_f018eb6f7f_z.jpg" height="213" width="320" /></a></div>
<br />
<br />
<br />
<h3>
</h3>
<h4>
最近の Gentoo 事情(<a href="https://twitter.com/aliceinwire" target="_blank">@aliceinwire</a>)</h4>
EAPI 6のことをいくつか。<br />
<br />
<br />
<script async="" class="speakerdeck-embed" data-id="c1de07e0e73d0131057d7676c2eb9cc1" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
<br />
<br />
<h4>
Dockerでテストする(<a href="https://twitter.com/naota344" target="_blank">@naota344</a>)</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMNscbbXTCaaU0yziXPxYRCryo4JsKMlC60AweFhYiXsJMAZPgsxnociOLdffiPAnDopMStxakxjKJhbblM3kzu_Q0L0-9oTcO24QCJkBg_6v_6Yqri5AAV2TRxf7sU8LrGzNzNCSlyco/s1600/14393072058_c67bd703f4_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMNscbbXTCaaU0yziXPxYRCryo4JsKMlC60AweFhYiXsJMAZPgsxnociOLdffiPAnDopMStxakxjKJhbblM3kzu_Q0L0-9oTcO24QCJkBg_6v_6Yqri5AAV2TRxf7sU8LrGzNzNCSlyco/s1600/14393072058_c67bd703f4_z.jpg" height="213" width="320" /></a></div>
<ul>
<li>(プレゼントは関係ないけど)新しいマシンにしたらしい</li>
<ul>
<li>ついでに systemd 使ってみたらちょー起動速いとのこと</li>
</ul>
<li>ebuild 書いた後、ちゃんとテストしてますか?</li>
<ul>
<li>repoman は ebuild の静的なチェック。</li>
<li>書式とか DEPEND とか。</li>
<li>あとは実際に build してみるくらい。</li>
</ul>
<li>CFLAGS に -frecord-gcc-switches を入れると、バイナリに CFLAGS の内容が記録されて portage が後で正しく適用されているかチェックしてくれるらしい</li>
<li>ld.gold を使えば under-linking が防げる</li>
<ul>
<li>under-linking というのは A -> libB -> libC という依存状態の時に A -> libC がリンクされていない状態。</li>
<li>A から見ると libC はあってもなくても良いように見えるけど、libB が依存してるので、削除すると A も動かなくなる。</li>
</ul>
<li>ここから本題の Docker.</li>
<li>Docker とはなにか</li>
<ul>
<li>昨日の Docker meeting に行って下さい。</li>
</ul>
<li>https://github.com/naota/dockergentoo を clone して使ってね</li>
<li>資料はコレらしい。</li>
<ul>
<li><a href="https://speakerdeck.com/naota/dockerdegentoofalsetesuto">https://speakerdeck.com/naota/dockerdegentoofalsetesuto</a></li>
</ul>
</ul>
<br />
<h4>
emerge できない時、どうする?(<a href="https://twitter.com/grauwoelfchen" target="_blank">https://twitter.com/grauwoelfchen</a>)</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh81-Qw80LXli_4BW7PLU18Ejx9FEbm0oEPmnP54DgvCULkW2g-mv15AF6XJYlFCuvtNsPvpRbl2YYRzjFZ5QAzsxFEaTpiymqzVHHGkwW0tkqDUmjzSlJ8gjKkQVtY9ZBdIFEBnkjKghE/s1600/14393068018_897f78719b_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh81-Qw80LXli_4BW7PLU18Ejx9FEbm0oEPmnP54DgvCULkW2g-mv15AF6XJYlFCuvtNsPvpRbl2YYRzjFZ5QAzsxFEaTpiymqzVHHGkwW0tkqDUmjzSlJ8gjKkQVtY9ZBdIFEBnkjKghE/s1600/14393068018_897f78719b_z.jpg" height="213" width="320" /></a></div>
<br />
<ul>
<li>うまく emerge できないとき...</li>
<ul>
<li>mask されてるとか</li>
<li>use flags が conflict してるとか</li>
<li>依存してるパッケージが足りないとか</li>
<li>circular dependency とか</li>
</ul>
<li>gentoolkit, portage-utils, eix, esearch, flaggie などのツールが調査するのに便利</li>
<li>portage-utils は以前 OSC で資料を配ったことがあった(<a href="http://dev.gentoo.gr.jp/~kojima/gentoojp-osc2010fall-chaetsheet.svg" target="_blank">http://dev.gentoo.gr.jp/~kojima/gentoojp-osc2010fall-chaetsheet.svg</a>)</li>
<ul>
<li>今回発表された資料の方が色々まとまってると思う。 </li>
</ul>
<li>資料はこの辺</li>
<ul>
<li><a href="https://speakerdeck.com/yasuhiro/cant-emerge-how-to-do-it" target="_blank">https://speakerdeck.com/yasuhiro/cant-emerge-how-to-do-it</a></li>
</ul>
</ul>
<br />
<h4>
一度休憩</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhax-kdey3bGwRw9cVjX8HJIxrn2C0-9e3RQdlEAriaWEIQfrPFI5PQzG3J2ZAQ63HycOuvPKIxBKZW_mtQVK8Gxg5x0lgZHzHd0twWHQACe1Xsv3j1PcyoW7Vzmi4f4peXsWZvoZZdYus/s1600/14556618296_59417f779c_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhax-kdey3bGwRw9cVjX8HJIxrn2C0-9e3RQdlEAriaWEIQfrPFI5PQzG3J2ZAQ63HycOuvPKIxBKZW_mtQVK8Gxg5x0lgZHzHd0twWHQACe1Xsv3j1PcyoW7Vzmi4f4peXsWZvoZZdYus/s1600/14556618296_59417f779c_z.jpg" height="213" width="320" /></a></div>
きのことたけのこや抹茶わらび餅、おまんじゅうなど。<br />
持ってきて下さった方、ありがとうございます。<br />
ちなみに、たけのこ派です。<br />
<br />
<h4>
metro(@kjm)</h4>
自分の発表です。<br />
どなたかの発表が入っていたのですが、キャンセルされていたので入れてしまいました。<br />
<br />
自分でも理解し切れていないことが多く、うまく説明できませんでした。<br />
半分くらい Funtoo の話題になってしまった気がします。<br />
Funtoo は drobbins 氏がホスティングサービスを提供していて(今は休止中かも?)、契約すると drobbins 氏のサポートが付いてくると言う特典があります。<br />
<br />
一応資料はこちらにアップしております。<br />
<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/36655218" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="427"> </iframe> <br />
<div style="margin-bottom: 5px;">
<b> <a href="https://www.slideshare.net/KazunoriKojima/metro-36655218" target="_blank" title="Metro">Metro</a> </b> from <b><a href="http://www.slideshare.net/KazunoriKojima" target="_blank">Kazunori Kojima</a></b> </div>
<br />
<h4>
Gentoo Linux LDAP Authentication(<a href="https://twitter.com/mazgi" target="_blank">@mazgi</a>)</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF9kQH7gclFQdeydcBYIHxYNUMWwpvV3YLTxqY6MTXM_DbjlMIgZLOTdlcxieia_un_D5RGl05pty4JmcVnNRHO0v0WBpk9mxeQUeDhqLz9KKutgcuApZ9djN7vcA9Kxz9q-3pGUTaHOg/s1600/14599792713_1e6e58ed3b_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF9kQH7gclFQdeydcBYIHxYNUMWwpvV3YLTxqY6MTXM_DbjlMIgZLOTdlcxieia_un_D5RGl05pty4JmcVnNRHO0v0WBpk9mxeQUeDhqLz9KKutgcuApZ9djN7vcA9Kxz9q-3pGUTaHOg/s1600/14599792713_1e6e58ed3b_z.jpg" height="213" width="320" /></a></div>
<br />
<ul>
<li>Gentoo Linux で LDAP Authentication 環境を構築</li>
<li>主に Gentoo Wiki を参考にしたとのこと</li>
<ul>
<li><a href="https://wiki.gentoo.org/wiki/Centralized_authentication_using_OpenLDAP" target="_blank">https://wiki.gentoo.org/wiki/Centralized_authentication_using_OpenLDAP</a></li>
</ul>
<li>実際に構築した環境のでもを見せてくれました</li>
<li>最近は SSSD というものを使うのが普通らしい</li>
<ul>
<li>System Security Service Daemon</li>
<li>ある程度認証情報をキャッシュしてくれるらしい</li>
</ul>
</ul>
<br />
<h4>
TravisでGentooのRepomanコマンド(@aliceinwire)</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO30-S9PYfGbLvVuyJFrh-Gnt-VDUMabZcgMfls6-sHmVlAdhZLemFxJlWUfTBUKbvcFdSs0hvbSYcotdlbIF17gLeJFl_E057fcT8DVgpW6f7b7vVZz-wOCGvQlmk-X6cY19ISQpriYA/s1600/14393087299_a88703f0c1_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO30-S9PYfGbLvVuyJFrh-Gnt-VDUMabZcgMfls6-sHmVlAdhZLemFxJlWUfTBUKbvcFdSs0hvbSYcotdlbIF17gLeJFl_E057fcT8DVgpW6f7b7vVZz-wOCGvQlmk-X6cY19ISQpriYA/s1600/14393087299_a88703f0c1_z.jpg" height="213" width="320" /></a></div>
<br />
<ul>
<li>資料はこのあたり</li>
<ul>
<li><a href="https://speakerdeck.com/aliceinwire/travisderepomantietukusiyou" target="_blank">https://speakerdeck.com/aliceinwire/travisderepomantietukusiyou</a> </li>
</ul>
<li>repoman を Travis-CI で動かす方法について。</li>
<li>Travis-CIは当然のことながら Gentoo ではないので、そのままでは動かない。</li>
<li>portage と portage-tree を展開して repoman が動く環境を作るようだ</li>
<li><a href="https://github.com/aliceinwire/overlay/blob/master/.travis.yml" target="_blank">https://github.com/aliceinwire/overlay/blob/master/.travis.yml</a></li>
<ul>
<li>この辺を覗くと、何をやってるかがわかる</li>
</ul>
<li>もともとは<span class="l-Scalar-Plain"> mrueg さんという方が作ったようだ</span></li>
</ul>
<br />
<br />
という感じで今回はおしまい。<br />
懇親会にも参加したけど、イイ感じの写真が撮れなかった。<br />
さくら水産で撮影だと素人には難しすぎるようです。<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-21957056426349207162014-06-11T01:02:00.001+09:002014-06-11T01:09:39.074+09:00Gentoo勉強会#3 に参加してきた2014年06月07日(土)に Miracle Linux さまの一室をお借りして開催していた Gentoo 勉強会#3 に参加してきた。<br />
<br />
午前中に会社のビルが電気点検のため停電になっており、一部のサーバが Kernel の設定ミスにより正常に起動しなかった。その対応を行った関係で40分ほど遅刻してしまった<br />
タイミングが悪く、入り口で10分ほど待ちぼうけになってしまった。<br />
<br />
今回は2回目の勉強会より多い合計15名の参加者でした。<br />
前回はちょっとGWの終わりで時期が悪かったね。<br />
<br />
<h3>
プレゼンメモ</h3>
今回も簡単に箇条書きで。<br />
<h4>
自己紹介</h4>
<ul>
<li>残念ながら遅刻により不明 </li>
</ul>
<h4>
最近の Gentoo 事情(<a href="https://twitter.com/aliceinwire" target="_blank">@aliceinwire</a>)</h4>
<ul>
<li>残念ながら遅刻により不明</li>
</ul>
<h4>
Gentooステッカーの進捗について(<a href="http://twitter.com/matsuu" target="_blank">@matsuu</a>) </h4>
<ul>
<li>前回の勉強会で、今回までに作ってくると言っていた </li>
<li>色々調べたら、イタリアのサイトでステッカーが売っていた</li>
<li>2種類買った</li>
<li>6月7日の午前中に自宅に配達に来た</li>
<ul>
<li>しかし、午前中は墨田セキュリティという勉強会に行っていた</li>
<li>今日持ってきたのは、不在票だけ</li>
</ul>
<li>ステッカーは<a href="http://www.unixstickers.com/" target="_blank">ここ</a>で買った</li>
<li>Gentoo以外にもいろんなステッカーが売ってる</li>
<li>ターミナルで注文もできるよ!</li>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitDR7GyUvoM1nLb3zLbL59y8u-h8bk2RSm71r-ttD-UQ4cHlwRW6rxZnaDJCS8gUPRzidHaaGAyn6iYvhR2xEEejyWda1hCK1G9EAP3PF-78jm60TPE-mTdC0U8SI-yZt1jB8Tkr86KbE/s1600/unixstickers.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitDR7GyUvoM1nLb3zLbL59y8u-h8bk2RSm71r-ttD-UQ4cHlwRW6rxZnaDJCS8gUPRzidHaaGAyn6iYvhR2xEEejyWda1hCK1G9EAP3PF-78jm60TPE-mTdC0U8SI-yZt1jB8Tkr86KbE/s1600/unixstickers.png" height="273" width="320" /></a></div>
</ul>
その後ちゃんと届いたようです。
<br />
<blockquote class="twitter-tweet" lang="ja">
unixstickersからGentooステッカー届いたあああああああ <a href="http://t.co/nuMZM5ov5K">pic.twitter.com/nuMZM5ov5K</a><br />
— フルボッコエンジニアmatsuu (@matsuu) <a href="https://twitter.com/matsuu/statuses/475581867098255362">2014, 6月 8</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
<br />
<h4>
grub2 + EFI + btrfs使い始めた話とか(<a href="http://twitter.com/mazgi" target="_blank">@mazgi</a>)</h4>
<ul>
<li>EFI+btrfsの前に、前回発表した RaspberryPi でデジタルサイネージ的なものを作ってエクスポに持ってった話を少々。</li>
<li>今日の発表は Qiita にメモっている</li>
<ul>
<li><a href="http://qiita.com/mazgi/items/5b059ff6aa4bae22e48e" target="_blank">[更新中] #gentooinstallbattle UEFI+GRUB2+btrfs編 - Qiita</a></li>
</ul>
<li>LVM + Filesystem を今まで使っているが、ボリュームを追加したりしたときのフラグメンテーションが気になる</li>
<ul>
<li>実際にパフォーマンスの劣化が起きるかは調べてない </li>
</ul>
<li><a href="http://www.sysresccd.org/" target="_blank">SystemRescueCD</a> は EFI をサポートしてる</li>
<ul>
<li>tmux も入ってるし便利</li>
<li>SystemRescueCD の EFIブートの画面(grub2)と BIOS ブートの画面(syslinux) を比べると、今のところ BIOS ブートの画面の方が派手。</li>
</ul>
<li>btrfs の上で swap-file が作れなくてはまった</li>
<ul>
<li>(<a href="http://twitter.com/naota344" target="_blank">青田先生</a>)何かのAPIをbtrfsがサポートしてないからかもしれない</li>
<li>(青田先生)CoWを切ったら、動くかも?</li>
</ul>
<li>/var/log を別のサブボリュームにしているのは、gzip圧縮にしたいから</li>
<ul>
<li>他のサブボリュームは lzo</li>
<li>gzip にすることでlogrotate時の compress を不要にしたい</li>
</ul>
<li>必要な Kernel config </li>
<ul>
<li>CONFIG_EFI, CONFIG_EFI_PARTITION, CONFIG_EFI_VARS を y にしておく必要在り</li>
<li>(青田先生)CONFIG_EFI_VARS が m だとうまく起動できないことがあるらしいので y にしておいた方がいい</li>
</ul>
<ul>
<li>(青田先生)CONFIG_EFI_STUB</li>
<ul>
<li>EFIから直接 Linux Kernel をロードできるようにするもの</li>
<li>grubが不要になる</li>
<li>複数の kernel を入れ替えるのがちょっと面倒</li>
<li>リファレンス的存在</li>
</ul>
</ul>
<li>(青田先生)最新の kernel じゃないと btrfs の auto-defrag と snapshot は相性が悪い</li>
</ul>
<br />
<br />
<h4>
Radxa Rock(<a href="http://twitter.com/naobsd" target="_blank">@naobsd</a>)</h4>
<ul>
<li>Gentooネタじゃないけど</li>
<ul>
<li>と、いいつつ後のハッカソンタイムでは Gentoo を入れていたようだ</li>
<li><a href="https://www.youtube.com/watch?v=l946PDCuy_U" target="_blank">https://www.youtube.com/watch?v=l946PDCuy_U</a> </li>
</ul>
<li>[reksa] と読むらしい</li>
<li><a href="http://radxa.com/" target="_blank">http://radxa.com/</a></li>
<li>透明なケース付き</li>
<ul>
<li>結構壊れやすいので注意</li>
<li>割れちゃったら、問い合わせると対応してくれるかもしれない</li>
</ul>
<li>インターフェイスが豊富</li>
<li>SPDIFケーブルも<a href="http://radxa.myshopify.com/products/spdif-cable" target="_blank">売っている</a>が、写真がどう見ても光なケーブルじゃないから買わない方がいい</li>
<li>中国の会社</li>
<li> Tom Cubieという方が開発している</li>
<ul>
<li>以前 CubieBoard というものを開発してた人らしい</li>
</ul>
<li>Wifi/Bluetoothもついてるけど、技適通ってないので注意</li>
</ul>
<br />
<h4>
<span class="author-g-b93dwv97b7cc1tff">はじめて ebuild Patch(@aliceinwire)</span> </h4>
<ul>
<li>ebuild でパッチを当てる方法</li>
<li>filesディレクトリにパッチを置いて epatch コマンドであてる </li>
<li>EAPI=2 から src_prepare() で epatch を使うことになった</li>
<li>patch は plain/text だけじゃなく xz などの圧縮形式もサポートしてる</li>
<li>ARCHごとにパッチのファイル名を生成できる</li>
<ul>
<li>??_${ARCH}_foo.${EPATCH_SUFFIX}</li>
</ul>
<li>epatch は eutils.eclass に含まれている</li>
<li>epatch_user はユーザ独自のパッチを当てられる構文</li>
<ul>
<li>/etc/portage/patches/category/package/*.patch</li>
<li>ebuild 内で epatch_user が実行されていたら、使える</li>
<li>実行されてなかったら、パッチを置いても使われない</li>
<li>eclass によっては中で使われてるかも</li>
</ul>
</ul>
<h4>
ハッカソンタイム</h4>
<ul>
<li>各自てきとーに。</li>
<li>翻訳とか</li>
<li>青田先生の質問コーナーとか</li>
<li>Gentoo初心者のインストールバトルとか</li>
<li>松鵜先生のebuild作成1on1とか</li>
</ul>
<br />
こういう勉強会では Macbook の割合が非常に高くなることが多いが、今回は 50% くらいのような気がする。<br />
他は ThinkPad だったり、その他メーカーだったりしたようだ。<br />
<ul>
</ul>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" height="179" src="https://pbs.twimg.com/media/BpmbpHkCEAAGNJN.jpg:large" width="320" /></div>
<a href="https://www.flickr.com/photos/124240733@N02/14371831404" title="DSC_4309 by Kazunori Kojima, on Flickr"><img alt="DSC_4309" height="213" src="https://farm3.staticflickr.com/2908/14371831404_3dea46d1aa_n.jpg" width="320" /></a>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-79739138603940927872014-06-11T00:15:00.002+09:002014-06-11T00:15:57.262+09:00ULA と Src/Dest NPT を使ってみたIPv6 では IPv4 と違い使用できるアドレスが潤沢にあるため、LAN 内でもグローバル IPv6 アドレスを使用するのが一般的です。<br />
<br />
ただ、グローバルアドレスを付与すると接続している上位の ISP が変わったりすると、LAN 内の機器も新しいグローバルアドレスに変更しなければなりません。<br />
また、複数の ISP に接続していたりするマルチホームな環境の場合、複数のグローバルアドレスを機器に付与するため、ソースアドレスの選択の問題が発生したりします。<br />
<br />
そこで ULA(Unique Local Address) を LAN 内の機器に付与し、ルータ等でグローバルアドレスに変換すればアドレスが変わったときに楽にならないかなと、以前から使用したいと思ってたので、試してみました。<br />
<br />
アドレスの変換には <a href="http://tools.ietf.org/html/rfc6296" target="_blank">NPTv6(RFC6296: IPv6-to-IPv6 Network Prefix Translation)</a> を使用します。 <br />
変換先のアドレスはプレフィックスが変わったことによりチェックサムが変わらないように計算されたアドレスに変換されます。<br />
これによりトランスレーターの計算負荷を減少させているそうです。<br />
<br />
IPv4 の NAT と同様にエンドポイントのアドレスが変わるので、例えば SIP や FTP などは別途対応が必要になりますが、この辺はまだ調べてません。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy4b2DduIllGOtkE0aD7ym7g9OOnul_IppEz0yQd7qqbjuHaA-CtwSNFwWP4GpaBdUCJX1pBwHCSBYF5ALD8kMOu7zoiZZbnNFdn4hI3oAzXrymO2tWRhgxZg1OoNArZpI-nY3xSRnrjQ/s1600/Network+diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy4b2DduIllGOtkE0aD7ym7g9OOnul_IppEz0yQd7qqbjuHaA-CtwSNFwWP4GpaBdUCJX1pBwHCSBYF5ALD8kMOu7zoiZZbnNFdn4hI3oAzXrymO2tWRhgxZg1OoNArZpI-nY3xSRnrjQ/s1600/Network+diagram.png" height="148" width="320" /></a></div>
<br />
<br />
<h3>
NPTv6の設定</h3>
Linux では Kernel に実装されています。<br />
次のコンフィグを有効化しておきます。<br />
<blockquote class="tr_bq">
CONFIG_IP6_NF_TARGET_NPT=m</blockquote>
ユーザランドでは netfilter で設定できます。<br />
<br />
まずは ULA -> グローバルアドレスの変換。<br />
変換元 <span class="value">fd34:fe56:7891:2f3a::/64</span><br />
<span class="value">変換先 2001:0db8:abcd:1234::/64 </span><br />
<span class="value"><br /></span>
<br />
<blockquote class="tr_bq">
$ ip6tables -t mangle -A POSTROUTING -s <span class="value">fd34:fe56:7891:2f3a::/64</span> -j SNPT --src-pfx <span class="value">fd34:fe56:7891:2f3a::/64</span> --dst-pfx 2001:db8:abcd:1234::/64 </blockquote>
<br />
続いてグローバル -> ULA の変換 <br />
<blockquote class="tr_bq">
$ ip6tables -t mangle -A PREROUTING -d 2001:db8:abcd:1234::/64
-i eth1 -j DNPT --src-pfx 2001:db8:abcd:1234::/64 --dst-pfx <span class="value">fd34:fe56:7891:2f3a::/64</span></blockquote>
net.ipv6.conf.all.forwarding が有効になっていれば、この箱を通過するパケットのアドレスが自動変換されます。<br />
<br />
ちなみに、iptables-1.4.21 の ip6tables-save はルールの保存部分に問題があり、正しいルールが出力されませんのでご注意下さい。<br />
<br />
<blockquote class="tr_bq">
... -j DNP<b>T-</b>-src-pfx 2001:db8:abcd:1234::/64 ...</blockquote>
こんなルールが出力されてしまいます..<br />
一応バグ報告を出してみましたが、未だ受理されてないようです。<br />
nftables の方に開発リソースを振ってるのかもしれません。使ってるユーザが少ないというのもありそうですが。<br />
<h3>
感想</h3>
宅内のネットワークで1ヶ月ほど使ってますが、FTPも利用しませんし今のところ不便はないです。 <br />
ただ、IPv4のネットワークと同じく、内部ネットワークがプライベートアドレスになってしまうため、サーバ等を NPT の内側に置いてしまっていると、外から見えるアドレスと中から見えるアドレスが異なってしまうのが面倒です。<br />
IPv6の利点であるグローバルアドレスをたくさん使えるメリットがなくなってしまうのは、勿体ない。<br />
しかし、DMZを置くとなると、また最初の問題に戻ってしまうという... Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-22864047628462385202014-05-16T01:30:00.000+09:002014-05-16T08:56:12.703+09:00Gentoo勉強会#2に参加した2014年5月11日(日)に行われた <a href="http://connpass.com/event/6189/">Gentoo 勉強会#2</a> に参加してきた。<br />
<br />
ちゃんとメモってなかったけど、覚えていることをつらつらと書いてみる。<br />
<br />
最初に主催の @aliceinwire さんから開会の挨拶。<br />
その後、各自自己紹介。<br />
参加人数は9人のはずが10人くらいいたような気がするがちゃんと数えてなかったので、実際の参加人数は分からない。<br />
<br />
続いて有志のプレゼン。<br />
最初は <span class="author-g-wcsvnsz122zlta05oz122zjb">@grauwoelfchen さんの「</span><span class="author-g-wcsvnsz122zlta05oz122zjb">ELOG と Ebuild Phase Hook について」の予定だったが、ここでトラブル発生。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">Gentoo on MacBook(Air?)でプロジェクターを正しく認識できなかったみたい。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">xrandr でプロジェクタが出てこなかったというつぶやきが聞こえた。</span><br />
<br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">一旦飛ばして </span><span class="author-g-wcsvnsz122zlta05oz122zjb"><span class="author-g-kd9wcgkapyf9kqmg">@mazgi さんの「</span></span><span class="author-g-iogku9tz122zcu7vlpm3"></span><span class="author-g-kd9wcgkapyf9kqmg">ギョーム系GentooLinux </span><span class="author-g-iogku9tz122zcu7vlpm3">会社で使えるGentoo Linux on RPiの話をします!」でした。</span><br />
<br />
<h3>
<span class="author-g-iogku9tz122zcu7vlpm3"></span><span class="author-g-kd9wcgkapyf9kqmg">ギョーム系GentooLinux </span><span class="author-g-iogku9tz122zcu7vlpm3">会社で使えるGentoo Linux on RPiの話をします!</span></h3>
<span class="author-g-iogku9tz122zcu7vlpm3">はじめに Raspberry Pi をプロジェクタにつないで、GentooLinuxのブート画面が撮された。</span><br />
<span class="author-g-iogku9tz122zcu7vlpm3">しばらく待つと、スムーズに動画が再生された。</span><br />
<span class="author-g-iogku9tz122zcu7vlpm3">RaspberryPiの動画再生支援機能を利用し 720p の動画が CPU 使用率 20% くらいで再生できるらしい。<br />動画再生には <a href="https://github.com/popcornmix/omxplayer" target="_blank">omxplayer</a> を使っていて /etc/local.d/xxx.start に直接シェルスクリプトを書いて自動的に再生が始まるようになってるようだ。</span><br />
<span class="author-g-iogku9tz122zcu7vlpm3">omxplayer は Overlay を探せば ebuild が見つかるが、古いヤツしかないらしく今回は直接コンパイルしたとのこと。 </span><br />
<span class="author-g-iogku9tz122zcu7vlpm3"><br /></span>
<span class="author-g-iogku9tz122zcu7vlpm3">RaspberryPiの環境は AMD64 な母艦と distcc を使用しビルドしたとのこと。</span><br />
<span class="author-g-iogku9tz122zcu7vlpm3">コンパイル自体は distcc のおかげでそこそこ速いが、それ以外の、例えば依存性の解決などが激遅でつらかったとのこと。</span><br />
<span class="author-g-iogku9tz122zcu7vlpm3"><br /></span>
<span class="author-g-iogku9tz122zcu7vlpm3">あと gettext で謎の現象が起きていて解決できてなかった。</span><br />
<blockquote class="tr_bq">
<span class="author-g-iogku9tz122zcu7vlpm3">gettext --help </span></blockquote>
は問題ないが<br />
<blockquote class="tr_bq">
gettext --version</blockquote>
だとセグフォるという。 <br />
<span class="author-g-iogku9tz122zcu7vlpm3">会場でも、有用な情報は出なかった。</span><br />
<br />
<br />
<h3>
<span class="author-g-wcsvnsz122zlta05oz122zjb"></span><span class="author-g-wcsvnsz122zlta05oz122zjb">ELOG と Ebuild Phase Hook について</span></h3>
一旦アジェンダを戻って @grauwoelfchen さんの発表。<br />
<span class="author-g-wcsvnsz122zlta05oz122zjb"><a href="https://speakerdeck.com/yasuhiro/elog-and-ebuild-phase-hook" target="_blank">発表資料はこちら。</a> </span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">結局プロジェクタを認識できずに資料を別のPCに移して発表されていた。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">残念ながらデモは見れなかった。 </span><br />
<br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">@grauwoelfchen さんは <b>dvorak </b>使いらしい。すばらしい。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">StumpWM という Common Lisp な WindowManager を使っていながら vim 使いとのこと。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb"><br /></span>
<span class="author-g-wcsvnsz122zlta05oz122zjb">ELOG 機能を利用して emerge 完了時に WM へ通知を飛ばす方法を発表されていた。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">採用はしなかったが似た機能として Ebuild Phase Hook についても調査されたそうです。 </span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">一部ドキュメントにも載っていないイベントが飛んでくるとか。(<a href="https://speakerdeck.com/yasuhiro/elog-and-ebuild-phase-hook?slide=20" target="_blank">発表資料の20pを参照</a>)</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb"><br /></span>
<span class="author-g-wcsvnsz122zlta05oz122zjb">プレゼンのテンプレートは<a href="http://a3li.li/2014/04/gentoo-latex-beamer-theme/" target="_blank">これ</a>を使っているらしい。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">LaTeX と言う点を除けばイイ感じ。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb"><br /></span>
<span class="author-g-wcsvnsz122zlta05oz122zjb">ちなみに @grauwoelfchen さんのブログでも Gentoo 勉強会#2についてまとめられてるので参照されたし。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb"><a href="http://grauwoelfchen.at/graffiti/gentoo-users-study-meet-up-no-2" target="_blank">grauwoelfchen.at/graffiti/gentoo-users-study-meet-up-no-2</a></span><br />
<h3>
<span class="author-g-wcsvnsz122zlta05oz122zjb">Overlay</span></h3>
<span class="author-g-wcsvnsz122zlta05oz122zjb">続いて @aliceinwire さんの発表。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">シンプルなタイトルだが Portage Overlay についての発表でした。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb">知らなかったのだが本家の <a href="http://git.overlays.gentoo.org/" target="_blank">Overlay リポジトリ</a>は Bugzilla に申請すれば使えるらしい。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb"><br /></span>
<br />
<ul>
<li><span class="author-g-wcsvnsz122zlta05oz122zjb"><a href="https://bugs.gentoo.org/show_bug.cgi?id=485108" target="_blank">https://bugs.gentoo.org/show_bug.cgi?id=485108</a></span></li>
<li><span class="author-g-wcsvnsz122zlta05oz122zjb"><a href="http://git.overlays.gentoo.org/git-request-template.txt" target="_blank">http://git.overlays.gentoo.org/git-request-template.txt</a> </span></li>
</ul>
<span class="author-g-wcsvnsz122zlta05oz122zjb"> このあたりを参考のこと。</span><br />
<span class="author-g-wcsvnsz122zlta05oz122zjb"><br /></span>
<br />
<ul>
<li><span class="author-g-wcsvnsz122zlta05oz122zjb">layman -L でリポジトリの一覧を見れるよ</span></li>
<li><span class="author-g-wcsvnsz122zlta05oz122zjb">@aliceinwire さんのリポジトリは a から始まるので上の方に表示されてイイネ</span></li>
<li><pre><code>/etc/portage/package.mask に次のように書くことでOverlay丸ごとマスクできる</code></pre>
<blockquote class="tr_bq">
<pre><code> */*::overlay</code> </pre>
</blockquote>
</li>
<ul>
<li>package.unmask で欲しいものだけ unmask するのが便利</li>
</ul>
<li>layman にリポジトリを登録したければ Bugzilla に書けばいいよ</li>
<li>emerge --regen を実行すると依存性のチェックがちょっと速くなるらしい</li>
</ul>
<br />
覚えているのはこれくらい。<br />
<br />
<h3>
ハッカソン? </h3>
続いてハッカソンぽいもの。ハッカソンというよりはもくもく会に近かったのかもしれない。<br />
主に本家Wikiの翻訳について行われていた。<br />
もっと初心者の参加者の声を拾える方法があるといいかもしれない。<br />
<ul>
<li><a href="https://wiki.gentoo.org/wiki/Overlay" target="_blank">Overlay</a> を翻訳しようとするが、翻訳バーが表示されない</li>
<li>@matsuu さんが他のページを参考に翻訳バーを表示させようとしたが、ダメだった。</li>
<li>@matsuu さんのトークページに勝手に入れちゃダメだよというコメントが。</li>
<li>IRCで確認したら許可制とのこと。品質がいいモノのみ翻訳できるようにしているとのこと。<a href="https://twitter.com/matsuu/status/465433137250463744" target="_blank">@matsuu さんのツイート</a></li>
<li>翻訳するにはアカウントに翻訳権限を付けて貰う必要がある</li>
<ul>
<li>特別ページを編集して依頼するのだが、数分程度で許可されたのでバッチ処理かと思った</li>
<li>実際には IRC に通知が届いて a3li 氏が対応していたようだ。</li>
</ul>
</ul>
自分はひっそりと GentooJP Wiki を github に移行するスクリプトを書いていた。<br />
ぜんぜん進まなかったけど。 <br />
<h3>
その他・懇親会</h3>
会場で話したのか懇親会で話したのかちゃんと覚えてないことなど。<br />
ちなみに、本会場は Miracle Linux さんでした。<br />
懇親会は安くて安心のさくら水産。<br />
<ul>
<li>@matsuu さんは次回までにステッカーを作成する</li>
<ul>
<li>.ai ファイルが開けない。</li>
<li>@mazgi さんが作れるかも</li>
</ul>
<li>Tシャツもいいんじゃないかという話も出たが @naota344 さんが持ってるんじゃね?という話に。</li>
<ul>
<li>そもそも、OSCで販売は NG らしい</li>
</ul>
<li>次回のOSCっていつ? </li>
<ul>
<li>Tokyo/Fall は例年10月くらいじゃないか</li>
</ul>
<li>ZFS on Linux でフリーズするのに困ってる</li>
<li>btrfs はプチフリっぽいのがたまにあるけど、数年使ってて壊れたことはないよ</li>
<li>Quad Core な ARM ボードが $99</li>
<ul>
<li>Gentoo いれるのや distcc にちょうどいいんじゃないか</li>
<li><a href="http://radxa.com/">http://radxa.com/</a></li>
</ul>
<li>懇親会中に2名ほど障害対応</li>
<li>GentooJP 用に VPS サーバ貸せるかもという情報</li>
<ul>
<li>借りるだけ借りて使わないのは勿体ないので、用途も合わせて募集しないとね</li>
<li>現在びぎネットさんにお借りしているマシンは Xen なので、カーネルアップデート出来なくて Gentoo 的につらい。</li>
<li>新しくサーバを借りつつ、そっちによせるのはありかもしれない</li>
<li>あと管理してくれる人も募集中だよ</li>
</ul>
<li>ChromeOS は Gentoo ベースではあるけど Google 謹製の GRP (バイナリパッケージ)しかインストールできないよ</li>
<li>ChromeBook って ARM マシンだから RaspberryPi の母艦にちょうどいいんじゃないか </li>
<li>CoreOSは勝手にアップデートして再起動するからコワイ</li>
<ul>
<li>流行のいみゅーたぶるな環境だと問題ないんじゃないか</li>
</ul>
<li>バックアップの話</li>
<ul>
<li>最近は duplicity がオススメ</li>
<li>rsnapshot は、世代間がハードリンクなのでどれか一つ書き換えちゃうと他の世代も書き換わるからコワイ</li>
<li>pdumpfs って最近名前聞かないね</li>
<li>bacula はOSSで一番えんたーぷらいずな機能を持ってるんじゃないかな</li>
</ul>
</ul>
<br />
そういえば、せっかく一眼レフカメラを買ったのに、撮るのをすっかり忘れてた。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5IPBPLpTLXmMz-O-xW_GgAmdtvPwnLe4Pk87hNlnxBuBi2SFuEcjsk7RlsWSHKEHMuw0wzT_vQ4Tw8WvJzpgsOXY_o5vEayoMH0Skb294Sb3eBAMav_7mxqzJU6s4F9ZHQvRD_3jbRSw/s1600/14092739652_a150f1f1cb_b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5IPBPLpTLXmMz-O-xW_GgAmdtvPwnLe4Pk87hNlnxBuBi2SFuEcjsk7RlsWSHKEHMuw0wzT_vQ4Tw8WvJzpgsOXY_o5vEayoMH0Skb294Sb3eBAMav_7mxqzJU6s4F9ZHQvRD_3jbRSw/s1600/14092739652_a150f1f1cb_b.jpg" height="213" width="320" /></a></div>
※ 写真は勉強会とはまったく関係ありませんAnonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-31892373535480010662013-12-07T18:47:00.000+09:002013-12-07T18:58:16.084+09:00ElasticSearch と Kibana で画像共有サイトのシェアを調べてみる Twitterを眺めてたら <a href="http://www.elasticsearch.org/">ElasticSearch</a> と <a href="http://www.elasticsearch.org/overview/kibana/">Kibana</a> というものが流行ってるらしいので、たまたま気になっていた画像共有サイトのシェアを調べてみた。<br />
<br />
<h3>
Install ElasticSearch</h3>
まずは、ElasticSearchをインストールする。<br />
Gentoo Linux の場合は以下のコマンドで一発。<br />
<br />
<pre class="prettyprint"><code>$ sudo emerge -av app-misc/elasticsearch</code></pre>
<br />
設定ファイルのサンプルが /etc/elasticsearch/ にインストールされているので、それをベースに設定する。<br />
今回はデフォルトのまま使用した。<br />
<br />
<pre class="prettyprint"><code>$ sudo cp /etc/elasticsearch/elasticsearch.yml.sample /etc/elasticsearch/elasticsearch.yml
$ sudo cp /etc/elasticsearch/logging.yml.sample /etc/elasticsearch/logging.yml</code></pre>
<br />
あとはサービスを起動する。<br />
<br />
<pre class="prettyprint"><code>$ sudo /etc/init.d/elasticsearch start</code></pre>
<br />
この起動スクリプトは複数のインスタンスが起動できるようになっているようで、例えば hogehoge.yml という設定を作り /etc/init.d/elasticsearch.hogehoge という名前の起動スクリプトを作ればいいらしい。<br />
デフォルトでは elasticsearch.yml が利用される。<br />
<br />
<br />
<h3>
Install Kibana</h3>
Kibana 自体は HTML と JavaScript で構成されているものなので、ダウンロードしてきて展開するだけである。<br />
<br />
<pre class="prettyprint"><code>$ tar zxvf kibana-3.0.0milestone4.tar.gz
$ cd kibana-3.0.0milestone4
$ python3 -mhttp.server
</code></pre>
<br />
一時的に動かすだけであれば、これで十分。<br />
<br />
<h3>
Install Twitter River</h3>
ElasticSearch に <a href="https://dev.twitter.com/docs/streaming-apis/streams/public">Public streams</a> の <a href="https://dev.twitter.com/docs/api/1.1/get/statuses/sample">sample</a> をどうやって入れればいいのか調べてみたところ、 Twitter River というプラグインを使えばいいことが分かった。<br />
<br />
<pre class="prettyprint"><code>$ sudo /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-river-twitter/1.4.0
-> Installing elasticsearch/elasticsearch-river-twitter/1.4.0...
Trying http://download.elasticsearch.org/elasticsearch/elasticsearch-river-twitter/elasticsearch-river-twitter-1.4.0.zip...
Downloading ....................................................................DONE
Installed elasticsearch/elasticsearch-river-twitter/1.4.0 into /usr/share/elasticsearch/plugins/river-twitter</code></pre>
<br />
<br />
使い方については <a href="https://github.com/elasticsearch/elasticsearch-river-twitter">README</a> を見れば判ると思う。<br />
今回は sample を利用するので type は省略する。<br />
<br />
<pre class="prettyprint"><code>$ curl -XPUT localhost:9200/_river/tweets/_meta -d '
{
"type" : "twitter",
"twitter" : {
"oauth" : {
"consumer_key" : "**** CONSUMER KEY ****",
"consumer_secret" : "**** CONSUMER SECRET ****",
"access_token" : "**** ACCESS TOKEN ****",
"access_token_secret" : "**** ACCESS SECRET TOKEN ****"
},
"ignore_retweet" : true
},
"index" : {
"index": "tweets",
"type": "tweet",
"bulk_size": 100
}
}
'
{"ok":true,"_index":"_river","_type":"tweets","_id":"_meta","_version":1}</code></pre>
<br />
これで tweets と言う名前の index が作成され、自動的に Twitter Stream に接続してツイートを収集してくれる。<br />
ツイートがある程度溜まるまでちょっと待ってから Kibana にアクセスしてみる。<br />
<br />
前述の通りに Kibana をインストールしている場合は http://localhost:8000/ で表示できます。<br />
ホーム画面の一番下に Blank Dashboard というリンクがあるのでクリックしてみます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM4LFx3vwcv9vLfw5Nx-RJXbZAI4Wq-_Rp0sIxk51nepm5MuNmMUNIGALmEU_R_-H6h7eV3Qiyog9tuKygdXca7_YDVPIo3K8TGQjcbJ3BmE90PagkZC46uTpsgNU6Fn1KjHAmoa3bZDw/s1600/01-kibana-blank-dashboard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM4LFx3vwcv9vLfw5Nx-RJXbZAI4Wq-_Rp0sIxk51nepm5MuNmMUNIGALmEU_R_-H6h7eV3Qiyog9tuKygdXca7_YDVPIo3K8TGQjcbJ3BmE90PagkZC46uTpsgNU6Fn1KjHAmoa3bZDw/s1600/01-kibana-blank-dashboard.png" height="73" width="320" /></a></div>
<br />
右下に Add Row というボタンがあるのでクリックします。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTvW03MOKC4zqAOMPl1oVthxXbHnavVAZyNIu0gYCGC0HykB_-vkGokbuRE0cfn_2QfjGp8W5FVfUBpys_VZSRxx3r9OCcxTB6NPST-MzDkLaX18vB5wH8fGMtMsbXg8Wh7Fk8sHOBeOw/s1600/02-kibana-add-row.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTvW03MOKC4zqAOMPl1oVthxXbHnavVAZyNIu0gYCGC0HykB_-vkGokbuRE0cfn_2QfjGp8W5FVfUBpys_VZSRxx3r9OCcxTB6NPST-MzDkLaX18vB5wH8fGMtMsbXg8Wh7Fk8sHOBeOw/s1600/02-kibana-add-row.png" height="113" width="320" /></a></div>
<br />
Create Row ボタンを押します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtsguufCl3-Yp-WYPm2q9TyHY_ixA_Gi22YGlYy-2df4G9T4nzT1S1PtOMMwmAqNGwwURg8DvD0VbDgEzJUZgCilvZxc1IDVSnoyXeayiSN-Q9cr0RUXRhi9M6tG2kSGFh53wsqxHzNAg/s1600/03-kibana-add-panel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtsguufCl3-Yp-WYPm2q9TyHY_ixA_Gi22YGlYy-2df4G9T4nzT1S1PtOMMwmAqNGwwURg8DvD0VbDgEzJUZgCilvZxc1IDVSnoyXeayiSN-Q9cr0RUXRhi9M6tG2kSGFh53wsqxHzNAg/s1600/03-kibana-add-panel.png" height="204" width="320" /></a></div>
<br />
Add Panel というボタンを押してパネルを追加します。<br />
Panel Type は Histogram でやってみます。<br />
Sizeは12にすると横幅がマックスになります。<br />
<br />
Time Field はデフォルトでは @timestamp になっていて、レコードが追加された日時になるようです。<br />
ただ、Twitter River ではそのようなフィールドはないので <a href="https://dev.twitter.com/docs/platform-objects/tweets">Tweets</a> のフィールドである created_at に変更しておきます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhADsxjKlmrays3HK7qrpKH-dDv8wXCjg8yjNFQo3UCwVzGw95ClIP6c3hiswvUJZOBkBRo-yrwGcodRYJ6sB2SCxoQ84VawwsIIk8J-ExedF1ViL2N55JyPEbW_8JyGngyO9Re_kc7Euw/s1600/04-kibana-timepicker.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhADsxjKlmrays3HK7qrpKH-dDv8wXCjg8yjNFQo3UCwVzGw95ClIP6c3hiswvUJZOBkBRo-yrwGcodRYJ6sB2SCxoQ84VawwsIIk8J-ExedF1ViL2N55JyPEbW_8JyGngyO9Re_kc7Euw/s1600/04-kibana-timepicker.png" height="92" width="320" /></a></div>
<br />
また、右上に Configure Dashboard ボタンで Dashboard の設定を変えられるのですが、そこの Timepicker の設定も created_at に変更しておきます。<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg05KPr_qNKkLFevanFS48S615RdyBl4aCyGlHJhEJKaIoY22j-Cv3FD7y1tGr1EmJZwt-1z9LtLPNaNwXLUFh6HAqfVXpcGn8uxhcZDBOF3StO94_qLTf_w743lFM602NfacXD7J8AP4w/s1600/05-kibana-histogram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg05KPr_qNKkLFevanFS48S615RdyBl4aCyGlHJhEJKaIoY22j-Cv3FD7y1tGr1EmJZwt-1z9LtLPNaNwXLUFh6HAqfVXpcGn8uxhcZDBOF3StO94_qLTf_w743lFM602NfacXD7J8AP4w/s1600/05-kibana-histogram.png" height="113" width="320" /></a></div>
<br />
そうすると、このようなグラフが表示されます。<br />
簡単ですね。<br />
<br />
<h3>
Customize Twitter River</h3>
さて、これでシェアを調べられると思ったのですが、Twitter Riverプラグインでは <a href="https://dev.twitter.com/docs/entities">Entities</a> の urls フィールドしか取得していないようで、media フィールド内にある pic.twitter.com の情報は取得できませんでした。<br />
Twitter River には raw という Tweets オブジェクトをまるまる保存するオプションがあります。これを使用すればいいだろうと思って試してみました。<br />
<br />
<pre class="prettyprint"><code>$ curl -XDELETE localhost:9200/_river/tweets/
$ curl -XPUT localhost:9200/_river/tweets/_meta -d '
{
"type" : "twitter",
"twitter" : {
"oauth" : {
"consumer_key" : "**** CONSUMER KEY ****",
"consumer_secret" : "**** CONSUMER SECRET ****",
"access_token" : "**** ACCESS TOKEN ****",
"access_token_secret" : "**** ACCESS SECRET TOKEN ****"
},
"ignore_retweet" : true,
"raw": true
},
"index" : {
"index": "tweets",
"type": "tweet",
"bulk_size": 100
}
}
'
{"ok":true,"_index":"_river","_type":"tweets","_id":"_meta","_version":1}</code></pre>
<br />
これを試してみたところ created_at が文字列型になってしまいタイムスタンプとしての利用ができませんでした。<br />
試しに Index の型を変更してみようとしたところエラーが出て変更できませんでした。<br />
<br />
<pre class="prettyprint"><code>$ curl -XPUT localhost:9200/tweets/tweet/_mapping -d '
{
"tweet" : {
"properties" : {
"created_at" : {"type" : "date", "format": "EE MMM d HH:mm:ss Z yyyy" }
}
}
}
}' | jq .
{
"error":"MergeMappingException[Merge failed with failures {[mapper [created_at] of different type, current_type [string], merged_type [date]]}]",
"status":400
}</code></pre>
<br />
どうも型の変更はできないようです。<br />
Twitter Riverプラグインはオープンソースなのでフォークして、Media内のURLのインデックスを作成するように修正してみました。<br />
<br />
<a href="https://github.com/kjmkznr/elasticsearch-river-twitter/tree/add-media-entities">https://github.com/kjmkznr/elasticsearch-river-twitter/tree/add-media-entities</a><br />
<br />
<pre class="prettyprint"><code>$ git clone https://github.com/kjmkznr/elasticsearch-river-twitter.git
$ cd elasticsearch-river-twitter
$ git checkout add-media-entities
$ mvn package</code></pre>
<br />
これで target/releases/elasticsearch-river-twitter-1.5.0-SNAPSHOT.zip というファイル名でプラグインがビルドされます。<br />
<br />
これを ElasticSearch にインストールします。<br />
<br />
<pre class="prettyprint"><code> $ sudo /usr/share/elasticsearch/bin/plugin -remove river-twitter
-> Removing river-twitter
Removed river-twitter
$ sudo /usr/share/elasticsearch/bin/plugin -u file:/path/to/elasticsearch-river-twitter-1.5.0-SNAPSHOT.zip -i river-twitter
-> Installing river-twitter...
Trying file:/path/to/elasticsearch-river-twitter-1.5.0-SNAPSHOT.zip...
Downloading ....DONE
Installed river-twitter into /usr/share/elasticsearch/plugins/river-twitter
$ /usr/share/elasticsearch/bin/plugin -l
Installed plugins:
- river-twitter</code></pre>
<br />
あとはまた収集されるのを待ち Kibana でグラフを表示させます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSfokcZK1j6IISmQqN1tgL9Q_-NfryVfjZyZEzcVKafYHMlVZVp7oYAUsfSUV9a-jjNrHpwULEYKFX6YKcOwt2BDRVtRoRpsMIVAF1mmXR15-2_FAi2j3MMf9NVbO8V7wyTac5zEM6ymI/s1600/kibana-photo-service-share.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSfokcZK1j6IISmQqN1tgL9Q_-NfryVfjZyZEzcVKafYHMlVZVp7oYAUsfSUV9a-jjNrHpwULEYKFX6YKcOwt2BDRVtRoRpsMIVAF1mmXR15-2_FAi2j3MMf9NVbO8V7wyTac5zEM6ymI/s1600/kibana-photo-service-share.png" height="148" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
このグラフは2013/12/03 18:25 - 2013/12/07 18:25 のものです。<br />
前述のプラグインをさらに修正して lang フィールドが ja のものを対象としています。<br />
<br />
<table border="1">
<tbody>
<tr><td>1位</td><td>pic.twitter.com</td><td align="right">150,804 件</td></tr>
<tr><td>2位</td><td>twitpic.com</td><td align="right">3,661 件</td></tr>
<tr><td>3位</td><td>p.twipple.jp</td><td align="right">1,112 件</td></tr>
<tr><td>4位</td><td>instagram.com</td><td align="right">689 件</td></tr>
<tr><td>5位</td><td>photozou.jp</td><td align="right">118 件</td></tr>
<tr><td>6位</td><td>flickr.com/flic.kr</td><td align="right">22 件</td></tr>
<tr><td>7位</td><td>movapic.com</td><td align="right">1 件</td></tr>
</tbody></table>
<br />
<br />
調査対象は自分が思いついたサイトです。<br />
95% は pic.twitter.com が使われているようで、思ったよりシェアが大きくびっくりしました。<br />
公式クライアント・Webを使っている人が増えているようですね。<br />
<br />
画像共有とはちょっと違いますが、vine.co を含むツイートを調べてみたところ、2,800件もありました。<br />
結構普及しているんですね。<br />
<br />
<h4>
参考文献</h4>
<div class="asset-name entry-title" id="page-title">
* <a href="http://heartbeats.jp/hbblog/2013/11/cacati2kibana.html">CactiのデータをElasticSearch+Kibanaでまとめてみてみよう</a></div>
<div class="h-slideshow-title notranslate">
</div>
<div class="h-slideshow-title notranslate">
* <a href="http://www.slideshare.net/y-ken/elasticsearch-kibnana-fluentd-management-tips"><span style="font-weight: normal;">ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ</span></a></div>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-81899063143381991852013-10-06T13:27:00.000+09:002013-10-06T13:27:07.431+09:00続 Amazon EC2 の Micro インスタンスで使用可能な CPU リソースを調べる2011年に投稿した<a href="http://blog.at-dk.info/2011/10/amazon-ec2-micro-cpu.html">「Amazon EC2 の Micro インスタンスで使用可能な CPU リソースを調べる」</a>は現在内容が正しくないので測定し直しました。<br />
<br />
測定方法は以前と同じく、単純なループするだけのプログラムを実行し cgroups の cpuacct.stat を読むだけです。<br />
<br />
環境<br />
<br />
<ul>
<li>Amazon Linux 2013.09</li>
<li>ap-northeast-1c</li>
<li>t1.micro</li>
</ul>
<div>
<br /></div>
<div>
ループプログラム</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="padding-left: 20pt;">void main(){ while(1){} }</pre>
<br />
今回は cpu.rt_period_us と cpu.rt_runtime_us で CPU リソースの制限は行わずに、Amazon Linux のデフォルトの状態で測定しました。<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSgbH8jJ7xQUIc4DXXKr0VBEGKPMwCqCKrQ64Cr-hvZJ-uwvFXlZLr7-kXHqRVqZMuvl-4lHYtVy9DBjoZHP5OGKXoHgN48uoiqF88kCzNcyCua3CqN39gACQBbfFMhNOlcNEnboOOLjg/s1600/20131006-ec2-micro-cpu-usage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSgbH8jJ7xQUIc4DXXKr0VBEGKPMwCqCKrQ64Cr-hvZJ-uwvFXlZLr7-kXHqRVqZMuvl-4lHYtVy9DBjoZHP5OGKXoHgN48uoiqF88kCzNcyCua3CqN39gACQBbfFMhNOlcNEnboOOLjg/s400/20131006-ec2-micro-cpu-usage.png" width="400" /></a></div>
<br />
以前は何も手を加えていない状態だと、すぐに CPU リソースが枯渇してしまい非常に扱いにくいものでしたが、今現在は最初からキャップが設定されているようです。<br />
<br />
<blockquote class="tr_bq">
<span style="background-color: white; font-family: verdana, arial, helvetica, clean, sans-serif; font-size: 12px; line-height: 18px;">マイクロインスタンスは、非常に低コストなインスタンスオプションで、小規模な CPU リソースを提供します。マイクロインスタンスは、追加サイクルが利用可能であるときは、CPU 処理能力を短期バーストとして増大させることができます。このタイプが適しているのは、周期的に追加コンピューティングサイクルを必要とする低スループットのアプリケーションやウェブサイトです。持続的な CPU 性能を必要とするアプリケーションには適していません。</span></blockquote>
(引用元: <a href="http://aws.amazon.com/jp/ec2/instance-types/">http://aws.amazon.com/jp/ec2/instance-types/</a> )<br />
ただ、上記AWSの説明にある「CPU 処理能力を短期バースト」というのがなくなっているのではという気もしてきます。<br />
<br />
もっと長い時間計測すると短期バーストできることがあるのかもしれません。<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-88884300575696482282013-07-21T00:58:00.000+09:002013-07-23T18:08:04.977+09:00BitTradeOne の赤外線リモコンKitを Linux から使ってみた<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd0sLRe02VxqCR2oYpicZPWJVh9QmA0o4Gt_zxKyD0z2P11boIiK9xJF6PBV5At07YYmmPIr_8dSvBBiw67bkg2tKdj3T5nLs56ND1wUDzjzMI-UmA7yuNaIUBBCMaFEHLa3BpJH428pw/s1600/DSC_0147.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd0sLRe02VxqCR2oYpicZPWJVh9QmA0o4Gt_zxKyD0z2P11boIiK9xJF6PBV5At07YYmmPIr_8dSvBBiw67bkg2tKdj3T5nLs56ND1wUDzjzMI-UmA7yuNaIUBBCMaFEHLa3BpJH428pw/s320/DSC_0147.JPG" /></a></div>
<div>
帰宅したときに部屋が暑すぎるのが嫌だったのでリモートからエアコンの電源を操作できたらいいなあ、という理由で USB 接続の赤外線リモコンを購入してみた。<br />
<br />
購入したものはコレ。<br />
<br />
<a href="http://bit-trade-one.co.jp/BTOpicture/Products/005-RS/">USB接続 赤外線リモコンキット</a>
<br />
<br />
半田付けするのはめんどうだったので、完成品を購入。<br />
フリスクのケースにあうように作られているらしい。<br />
<br />
届いてから色々と調べてみて Linux では<a href="http://a-desk.jp/modules/forum_hobby/index.php?topic_id=44" target="_blank"> hiddev ファイルに書き込めばいいらしい</a>ということがわかったのですが、スレッドの msg#1.2.1 と同じようなことになり使うことができなかった。<br />
<br />
このリモコンキットはファームウェアのソースコードやWindowsのアプリのソースコードなどが公開されているので、それを参考にしつつプログラムを作ってみた。<br />
<br />
<div style="text-align: center;">
<a href="https://github.com/kjmkznr/bto_ir_cmd">Bit Trade One IR Remocon tool for Linux</a></div>
<br />
<a href="http://www.lirc.org/">app-misc/lirc</a> とかのドライバとして作るのがほんとはいいのかも。<br />
<br />
Linuxで操作するための手段としては<br />
<br />
<ul>
<li>hiddev インターフェイスを使う</li>
<li><a href="http://libhid.alioth.debian.org/" target="_blank">libhid</a> を使う</li>
<li>libusb を使う</li>
</ul>
<br />
などがあるが、HIDのインターフェイスのことがよくわからず、Broken pipeばかりで解決できなかったので libusb を使うことにした。<br />
<br />
このリモコンキットには4つのInterfaceDescriptorがありますが、使用するのは interfaceNumber 3 のみです。<br />
<br />
<br />
<br /></div>
<div>
lsusbの結果
<script src="https://gist.github.com/kjmkznr/6045375.js"></script>
</div>
<div>
今回使う部分だけ抜粋すると下記の部分です。
<br />
<pre> Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
</pre>
デバイスからデータを貰ってくるときは EP Address 0x84 を libusb_interrupt_transfer() に渡してあげれば良さそうです。<br>
逆にデバイスに書き込む際は EP Address 0x04 を渡せばいいようです。<br><br>
</div>
<div>
続いてリモコンキットの制御コードの部分。<br><br>
これは<a href="http://a-desk.jp/modules/forum_hobby/index.php?cat_id=8">〔ファームウェアソースコード(Ver2.1.0〕</a>の中を参考にします。<br>
アーカイブの中の main.c がファームウェアのソースコードのようです。<br>
ProcessIO() の中に switch 文があり、そこに制御コードが書かれています。
<br><br>
<table>
<tr><th>制御コード</th><th>説明</th></tr>
<tr><td>0x56</td><td>Get Firmware version</td></tr>
<tr><td>0x80</td><td>EEPROMにデータを設定(サイズ61)</td></tr>
<tr><td>0x81</td><td>EEPROMにデータを設定(サイズ10)</td></tr>
<tr><td>0x82</td><td>EEPROMからデータ読み出し(サイズ61)</td></tr>
<tr><td>0x83</td><td>EEPROMからデータ読み出し(サイズ10)</td></tr>
<tr><td>0x40</td><td>Echo back</td></tr>
<tr><td>0x41</td><td>Echo back</td></tr>
<tr><td>0x50</td><td>赤外線受信データを送信(デバイス->Host)</td></tr>
<tr><td>0x51</td><td>赤外線受信待ちモード設定(1=受信待ち, 0=解除)</td></tr>
<tr><td>0x52</td><td>赤外線受信データを送信 拡張版(デバイス->Host, 65 octets)</td></tr>
<tr><td>0x53</td><td>赤外線受信待ちモード設定 拡張版(1=受信待ち, 0=解除)</td></tr>
<tr><td>0x60</td><td>赤外線出力データを受信する(7 Octets)</td></tr>
<tr><td>0x61</td><td>赤外線出力データを受信する 拡張版(65 Octets)</td></tr>
</table>
<br><br>
赤外線をリモコンキットで受信する場合は
<br>
<pre>
0x53 0x01 0xFF 0xFF ....
</pre>
というパケットを EPAddress 0x04 に投げます。<br>
パケットサイズは 64 Bytes なので余った部分は 0xFF で埋めます。<br>
これで受信待ちモードになったので、続いてデバイスからデータを読み出す制御コードを送りつけます。<br>
<pre>
0x52 0xFF 0xFF 0xFF ....
</pre>
このパケットを繰り返しデバイスに送っておきつつ EPAddress 0x84 を読み込めば赤外線を受信したときにコードを取れます。
</div>
<br>
<br>
リモコンキットから赤外線を送信する場合は<br>
<pre>
0x61
</pre>
の後に続けて送りたいコードをつけて EPAddress 0x04 に投げつければ送信されます。
<br><br><br><br>
<hr>
久々にブログ書いたけど、文章まとめるの難しい..Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-65404318841489611932011-11-23T13:14:00.001+09:002011-11-23T13:47:52.018+09:00Linux で UQ WiMAX に接続する (不成功)ThinkPad X220 に内蔵されている Intel WiMAX/WiFi Link 6250 は WiMAX に接続することができる.<br />
普段は EMOBILE を使っているので使う機会はないのだが,ちょうど EMOBILE の契約の2年縛りが切れるタイミングなので使えないかどうか試してみた.<br />
<br />
結論を先に書くと,WiMAX への接続は出来たが認証情報の書き込みとやらに成功しなかったため,インターネットへの接続は出来ていない.<br />
Windows 上で先に認証情報を書き込んでおけばもしかしたら,いけたのかもしれない.<br />
<br />
<h3>1. Kernel の設定</h3><br />
以下の項目をモジュールにしておきます.<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>CONFIG_WIMAX=m
CONFIG_WIMAX_I2400M=m
CONFIG_WIMAX_I2400M_USB=m
CONFIG_WIMAX_I2400M_SDIO=m</code></pre>
<br />
<h3>2. ファームウェアのインストール</h3><br />
Gentoo/Funtoo では sys-kernel/linux-firmware というパッケージに含まれている.<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>$ sudo emerge -av sys-kernel/linux-firmware</code></pre><br />
<br />
<h3>3. コマンドラインツールのインストール</h3><br />
Gentoo/Funtoo では net-wireless/wimax というパッケージに含まれている.<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>$ sudo emerge -av net-wireless/wimax</code></pre><br />
以上で事前準備はおしまい.<br />
<br />
<h3>4. UQ WiMAX に接続してみる</h3><br />
<br />
無線LAN と併用はできないようなので,wlan0 の出力を落としておきます.<br />
<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>$ sudo iwconfig wlan0 tx off</code></pre><br />
つぎに wimaxd を起動し WiMAX を有効化します.<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>$ sudo eselect rc start wimaxd
$ wimaxcu ron</code></pre><br />
使用できる WiMAX ネットワークを検索します.<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>$ wimaxcu scan
Network found.
NSP : UQ WiMAX
<span style="color: red;">ID : 20</span>
Signal : Good
RSSI : -73 dBm
CINR : 15 dB
Network Type: Home Network
Activated</code></pre>
<br />
<div>
電波状態の良いところだと UQ WiMAX のネットワークが見えるはずです.<br />
室内だと場所によって見つからなかったりします.<br />
ID 20 というのが UQ WiMAX のネットワークIDなので,それに接続します.</div>
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>$ wimaxcu connect network 20</code></pre><br />
接続できたら,DHCP で IPアドレスが取得できます.<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;"><code>$ sudo dhcpcd wmx0</code></pre><br />
これでブラウザで適当なサイトを開くと,UQ WiMAX 認証画面にリダイレクトされます.(シークレットウインドウとかで開くのがベストなんだろうなぁ)<br />
自分は未契約だったので 1 Day pass に契約しました.<br />
契約後,認証情報を書き込みで待たされますが,いつまで経っても終わりません.<br />
ここが出来れば Linux で WiMAX 接続は出来ると思いますが,恐らくこの処理が Linux で出来るようになることはないんじゃないでしょうか.<br />
自分は諦めて 1 Day Pass を捨てました.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRAMhTIw8-o6K_IlVIDhoU944u4H7Rc7B9bh8y6MD5As96bGjs9BAveU1CfcWd77TjokCz_bmde_izaYIxsWKDsdiY-R1eJb4YnNB7ADXuwk4tisGvGOFrtXV5fIOG-Wiy6nIHYtHp0s0/s1600/Wimax.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRAMhTIw8-o6K_IlVIDhoU944u4H7Rc7B9bh8y6MD5As96bGjs9BAveU1CfcWd77TjokCz_bmde_izaYIxsWKDsdiY-R1eJb4YnNB7ADXuwk4tisGvGOFrtXV5fIOG-Wiy6nIHYtHp0s0/s320/Wimax.png" width="320" /></a></div>
<br />
<h3>参考文献</h3>
<a href="http://ru.gentoo-wiki.com/wiki/Intel_WiMAX_%D0%B0%D0%B4%D0%B0%D0%BF%D1%82%D0%B5%D1%80">Intel WiMAX адаптер</a> ロシア語だけど,コマンドだけ参考にした.Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-31365996473820782032011-11-19T19:34:00.001+09:002011-11-19T20:21:40.970+09:00UEFIブート可能な SystemRescueCD (LiveUSB)を作る先日 ThinkPad X220 を購入しました.新しいマシンは速くていいですね.<br />
電池の保ちも良い感じです.<br />
<br />
ThinkPad X220 に Funtoo Linux を入れる際に気づいたんですが,最近のマシンは UEFI も搭載しているようで通常の BIOS ブートの他に EFI ブートも選べるようになっていました.<br />
せっかくなので UEFI Only で行ってみることにしてみました.<br />
<br />
私は Gentoo や Funtoo をインストールする際に <a href="http://www.sysresccd.org/">SystemRescue CD</a> を使っています.<br />
比較的頻繁に更新されているのと,ベースが Gentoo なので Kernel も新しいし各種ツールも入っていてとても便利です.<br />
<br />
しかしながら,そのままでは EFI には対応していないようなので,使う方法をまとめてみました.<br />
<br />
<span style="font-size: large;">1. USBメモリの準備</span><br />
まずは,USBメモリの準備をします.<br />
UEFIでは BIOS パーティションではなく GPT を使用します.<br />
<br />
パーティションを構成するツールとしては parted と gdisk があります.<br />
今回は gdisk を使いました.<br />
<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;">
<code># emerge sys-apps/gptfdisk</code>
</pre>
<br />
さっそく gdisk でパーティションを作成します.<br />
使い方は fdisk と同じです.<br />
<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;">
<code># gdisk /des/sdb</code>
</pre>
<br />
使い方は Funtoo Linuxのドキュメント <a href="http://www.funtoo.org/wiki/GUID_Booting_Guide">GUID Booting Guide</a> を眺めると良いと思います.<br />
次にファイルシステムを作ります.FAT32 を使用しますので,sys-fs/dosfstools をいれましょう.<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;">
<code># emerge sys-fs/dosfstools
# mkfs.vfat -F32 /dev/sdb1</code>
</pre>
<br />
<span style="font-size: large;">2. BootLoaderの設定</span><br />
<br />
Boot Loader には GRUB2 を使用します.<br />
EFIに対応している Boot Loader としては,他に elilo があるようです.<br />
<br />
まずUSBメモリをマウントしておき,UEFI と GRUB で使用するディレクトリを作ります.<br />
<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;">
<code># mount /dev/sdb1 /mnt/usb
# mkdir -p /mnt/usb/efi/boot</code>
</pre>
<br />
次に GRUB をインストールします.<br />
Funtoo の Portage に含まれている GRUB の ebuild では EFI に対応していないため,flow overlay のを使用します.<br />
<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;">
<code># layman -a flow
# echo 'GRUB_PLATFORMS="efi-64"' >> /etc/make.conf
# emerge --autounmask-write =sys-boot/grub-1.99::flow
# dispatch-conf
# emerge =sys-boot/grub-1.99::flow</code></pre>
<br />
GRUB のインストールができたら,ブートイメージを作ります.<br />
<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;">
<code># grub2-mkimage -d /lib/grub/x86_64-efi -O x86_64-efi -p "" -o /mnt/usb/efi/boot/bootx64.efi part_gpt btrfs fat ext2 normal chain boot configfile linux multiboot efi_gop linux</code>
</pre>
<br />
で,grub.cfg を作ります.<br />
これは,SystemRescueCD 内にある isolinux/isolinux.cfg を参考に作りますが,メニュー全部つくるのはめんどくさいので,必要なモノだけにしました.<br />
<br />
<pre style="padding:5px;border-color:#cccccc;border-width:1px;border-style:solid;">
<code># vim /mnt/usb/efi/boot/grub.cfg
timeout=10
default=0
insmod efi_gop
insmod efi_uga
insmod font
if loadfont efi/BOOT/unifont.pf2
then
insmod gfxterm
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm
fi
menuentry "rescue64 cached" {
linux /isolinux/rescue64 scandelay=1 docache
initrd /isolinux/initram.igz
}</code>
</pre>
<br />
<span style="font-size: large;">3. SystemRescueCD のコピー</span><br />
<br />
難しく考えずに,そのままファイルをコピーするだけです.<br />
<pre>
<code>
# mount -o loop,ro /path/to/systemrescuecd-x86-2.4.0.iso /mnt/cdrom
# cp -a /mnt/cdrom/* /mnt/usb/
</code>
</pre>
<br />
BIOS のようにマスターブートレコードに書き込むとかは必要ないようです.<br />
<br />
<span style="font-size: large;"><br /></span><br />
続いて Funtoo Linux のインストール記事でも書こうかと思ってたんですが Thinkwiki に Gentoo インストール手順がまとまってました.<br />
<a href="http://www.thinkwiki.org/wiki/Installing_Gentoo_on_a_ThinkPad_X220">Installing Gentoo on a ThinkPad X220</a>Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-64591056276759634502011-10-22T04:07:00.001+09:002013-10-06T13:29:11.701+09:00Amazon EC2 の Micro インスタンスで使用可能な CPU リソースを調べる<a href="http://blog.at-dk.info/2013/10/amazon-ec2-micro-cpu.html">2013年現在のデータで測定し直しました。</a><br />
<br />
<hr />
先日 Amazon EC2 Micro インスタンスを使う機会があり,色々と試してみた.<br />
使っていると,すぐにターミナルの応答性が悪くなったり Ping の応答時間が不安定になるといったことが起きた.<br />
<br />
top コマンド実行してみたところ,Steal が極端に多くなっていた.<br />
<br />
<blockquote>
<span class="Apple-style-span" style="font-size: x-small;">Cpu(s): 2.2%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 97.8%st</span></blockquote>
Steal は@ITの記事によると,使いたいけど使えなかった時間らしい.<br />
<blockquote>
<pre> steal列には、ゲストOSがリソース要求を行ったにもかかわらずCPUリソースを割り当ててもらえなかった時間の割合が表示されます。</pre>
<pre><a href="http://www.atmarkit.co.jp/flinux/rensai/xen05/xen05b.html">@IT リソース制御でサービスレベルを確保せよ</a> </pre>
</blockquote>
CPUリソースはバーストできるじゃないのかよー,と思って調べてみた.<br />
<span class="Apple-style-span" style="font-size: large;"><br /></span>
<span class="Apple-style-span" style="font-size: large;"><br /></span>
<span class="Apple-style-span" style="font-size: large;">計測方法</span><br />
<span class="Apple-style-span" style="font-size: large;"><br /></span>
ループするだけのプログラムで負荷を掛け,どれだけ CPU リソースを利用できたかをグラフ化させる.<br />
ついでに,使用する CPU リソースをどれだけ制限すれば,Steal を少なくできるかも調べてみる.<br />
<br />
使用するモノ<br />
<br />
<ul>
<li>EC2 の Micro インスタンス.</li>
<ul>
<li>今回は Amazon Linux AMI x86_64 を使用した.</li>
</ul>
<li>ループするだけのプログラム</li>
<li>cgroup</li>
<li>schedtool</li>
<li>cgroup から値を盗ってくるスクリプト</li>
</ul>
<div>
まず,ループするだけのプログラム</div>
<div>
<br /></div>
<blockquote>
<pre>void main()
{
while(1){}
}
</pre>
</blockquote>
<div>
<br />
次に cgroup をマウントする.<br />
<blockquote>
$ sudo mount -t cgroup cgroup /sys/fs/cgroup</blockquote>
で,適当なディレクトリを掘ってシェルのプロセスIDを入れる<br />
<blockquote>
<pre>$ sudo mkdir /sys/fs/cgroup/test
$ echo $$ | tee /sys/fs/cgroup/test/tasks
</pre>
</blockquote>
最後にループするプログラムを起動しつつ,cpuacct.stat から値をとり続ける.<br />
<br />
CPU リソースの制限は cpu.rt_period_us と cpu.rt_runtime_us で行う.<br />
cpu.rt_period_us で指定した時間のうち,cpu.rt_runtime_us で指定した時間だけ CPU を使用できる.<br />
時間の単位はファイル名の通りマイクロ秒.<br />
<br />
例えば,以下のような値を入れた場合は1秒のうち0.5秒まで CPU リソースを消費できる.
<br />
<div style="text-align: center;">
<table style="border-style: solid; border-width: thin;">
<tbody>
<tr><th style="border-bottom: 1px dashed; border-right: 1px dashed;">cpu.rt_period_us</th><th style="border-bottom: 1px dashed;">cpu.rt_runtime_us</th></tr>
<tr><td style="border-right: 1px dashed;">1,000,000</td><td>500,000</td></tr>
</tbody>
</table>
</div>
<br />
今回は以下のパターンで計測した.<br />
<div style="text-align: center;">
<table style="border-style: solid; border-width: thin;">
<tbody>
<tr><th style="border-bottom: 1px dashed; border-right: 1px dashed;">cpu.rt_period_us</th><th style="border-bottom: 1px dashed;">cpu.rt_runtime_us</th></tr>
<tr><td style="border-right: 1px dashed;">1,000,000</td><td>100,000</td></tr>
<tr><td style="border-right: 1px dashed;">1,000,000</td><td>125,000</td></tr>
<tr><td style="border-right: 1px dashed;">1,000,000</td><td>150,000</td></tr>
<tr><td style="border-right: 1px dashed;">1,000,000</td><td>250,000</td></tr>
<tr><td style="border-right: 1px dashed;">1,000,000</td><td>500,000</td></tr>
</tbody>
</table>
</div>
<br />
<span class="Apple-style-span" style="font-size: large;"><br /></span>
<span class="Apple-style-span" style="font-size: large;">計測結果</span><br />
<span class="Apple-style-span" style="font-size: large;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://sylph.at-dk.info/files/ec2-cpu-usage_us.svg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://sylph.at-dk.info/files/ec2-cpu-usage_us.svg" width="320" /></a></div>
<br />
0.5秒に制限した場合だいたい30秒ほどでリソースを使い切ってしまっているので,制限なしだと10秒〜15秒ほどで使い物にならなくなってしまう.<br />
1秒あたり0.15秒以下の時間だけ使うことにすれば,安定的に CPU リソースを使うことが出来る.<br />
<span class="Apple-style-span" style="font-size: large;"><br /></span>
<span class="Apple-style-span" style="font-size: large;"><br /></span>
<span class="Apple-style-span" style="font-size: large;">まとめ</span><br />
<br />
計測してて自分が何を求めているのかよく判らなくなったりしたが,とりあえず記録として残しておく.<br />
<br />
だいたい2分毎に使用リソースがリセットされていることがわかった.<br />
なので,こんな用途に向いてるんじゃないかなあと思う.<br />
<br />
<ul>
<li>1分もしくは2分毎に少量のバッチ処理.</li>
<ul>
<li>Tweet の取得とか</li>
</ul>
<li>CPUリソースをあまり喰わない低負荷な処理</li>
<ul>
<li>アクセス数が多くないスタティックなサイトとか?</li>
</ul>
</ul>
<br />
と,これくらいしか思い浮かばない.みんなどんなことに使ってるんだろう.<br />
結局のところ,Amazon EC2 のサイトに書かれている説明の通りってことなんだけど.<br />
<br />
<blockquote>
<span class="Apple-style-span" style="background-color: white; font-family: verdana, arial, helvetica, clean, sans-serif; font-size: 12px; line-height: 18px;">このファミリーのインスタンスは、少量の整合性のあるCPUリソースを提供し、他のサイクルが可能になると、CPU 容量をバーストできます。定期的にかなりの計算サイクルを消費する、少量のスループットアプリケーションやウェブサイトに最適です。</span></blockquote>
「少量の整合性のあるCPUリソース」と言われて理解できる人っているのかなあ.<br />
<br />
あ,リソースを制限したところで,使用できる CPU リソースは変わらないが,ネットワークの安定性とかターミナルの応答性は安定します.<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com1tag:blogger.com,1999:blog-5883063961252033912.post-88553564515052654642011-05-02T23:41:00.001+09:002011-05-02T23:44:57.749+09:00Thinkpad X61 でピークシフト機能を使う<h1>Thinkpad X61 でピークシフト機能を使う</h1><br />
<p>Thinkpad にはピークシフト機能が搭載されています. <a href="#id2" id="id1">[*]</a><br />
ピークシフトとは電力使用量が多い時間帯に AC アダプターからの電力供給をカットしバッテリー駆動にすることでその時間帯の電力消費を抑える機能です.<br />
Windows ではソフトウェアが提供されているらしいのですが,Linux ではどうやるんだろうということで調べてみました.</p><table frame="void" id="id2" rules="none"><colgroup><col class="label" /><col /></colgroup> <tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[*]</a></td><td><a class="reference external" href="http://www-06.ibm.com/jp/pc/environment/peakshift.shtml">http://www-06.ibm.com/jp/pc/environment/peakshift.shtml</a></td></tr>
</tbody> </table><div class="section" id="tp-smapi"><h1>tp_smapi</h1><p>ThinkPad のことを調べたいと思ったら,まず ThinkWiki です.<br />
探してみたところ,tp_smapi というカーネルモジュールがありました.</p><p><a class="reference external" href="http://www.thinkwiki.org/wiki/Tp_smapi">http://www.thinkwiki.org/wiki/Tp_smapi</a></p><div class="section" id="id3"><h2>インストール</h2><p>Gentoo では app-laptop/tp_smapi というパッケージがあるので,一発で入ります.</p><pre class="literal-block">$ sudo emerge -av app-laptop/tp_smapi
</pre><p>もし,kernel の方で HDAPS を Y もしくは M として利用しているのであれば外しておいた方がいいようです.<br />
外した上で,tp_smapi の hdaps use-flag をオンにしましょう.<br />
外さなくても,利用することは出来ますが,モジュールをロードするときに以下のようなメッセージがでてロードできないことがあるようです.</p><pre class="literal-block">thinkpad_ec: cannot claim IO ports 0x1600-0x161f... consider using force_io=1.
</pre><p>この場合は /etc/modprobe.d/hoge.conf に以下のような記述を追加しておけば利用できます.</p><pre class="literal-block">options thinkpad_ec force_io=1
</pre></div><div class="section" id="id4"><h2>使い方</h2><p>まずはモジュールをロードします.</p><pre class="literal-block">$ sudo modprobe tp_smapi
</pre><p>ロードすると,/sys/devices/platform/smapi/ ができます.</p><pre class="literal-block">$ ls /sys/devices/platform/smapi/
BAT0 BAT1 ac_connected driver modalias power smapi_request subsystem uevent
$ ls /sys/devices/platform/smapi/BAT0
-rw-r--r-- 1 root root 4096 May 1 20:44 barcoding
-rw-r--r-- 1 root root 4096 May 1 20:44 charging_max_current
-rw-r--r-- 1 root root 4096 May 1 20:44 charging_max_voltage
-rw-r--r-- 1 root root 4096 May 1 20:44 chemistry
-rw-r--r-- 1 root root 4096 May 1 20:44 current_avg
-rw-r--r-- 1 root root 4096 May 1 20:44 current_now
-rw-r--r-- 1 root root 4096 May 1 20:44 cycle_count
-rw-r--r-- 1 root root 4096 May 1 20:44 design_capacity
-rw-r--r-- 1 root root 4096 May 1 20:44 design_voltage
-rw-r--r-- 1 root root 4096 May 1 20:44 dump
-rw-r--r-- 1 root root 4096 May 1 20:44 first_use_date
-rw-r--r-- 1 root root 4096 May 1 21:05 force_discharge
-rw-r--r-- 1 root root 4096 May 1 20:44 group0_voltage
-rw-r--r-- 1 root root 4096 May 1 20:44 group1_voltage
-rw-r--r-- 1 root root 4096 May 1 20:44 group2_voltage
-rw-r--r-- 1 root root 4096 May 1 20:44 group3_voltage
-rw-r--r-- 1 root root 4096 May 1 20:44 inhibit_charge_minutes
-rw-r--r-- 1 root root 4096 May 1 20:44 installed
-rw-r--r-- 1 root root 4096 May 1 20:44 last_full_capacity
-rw-r--r-- 1 root root 4096 May 1 20:44 manufacture_date
-rw-r--r-- 1 root root 4096 May 1 20:44 manufacturer
-rw-r--r-- 1 root root 4096 May 1 20:44 model
-rw-r--r-- 1 root root 4096 May 1 20:44 power_avg
-rw-r--r-- 1 root root 4096 May 1 20:44 power_now
-rw-r--r-- 1 root root 4096 May 1 20:44 remaining_capacity
-rw-r--r-- 1 root root 4096 May 1 20:44 remaining_charging_time
-rw-r--r-- 1 root root 4096 May 1 20:44 remaining_percent
-rw-r--r-- 1 root root 4096 May 1 20:44 remaining_percent_error
-rw-r--r-- 1 root root 4096 May 1 20:44 remaining_running_time
-rw-r--r-- 1 root root 4096 May 1 20:44 remaining_running_time_now
-rw-r--r-- 1 root root 4096 May 1 20:44 serial
-rw-r--r-- 1 root root 4096 May 1 20:44 start_charge_thresh
-rw-r--r-- 1 root root 4096 May 1 20:44 state
-rw-r--r-- 1 root root 4096 May 1 20:44 stop_charge_thresh
-rw-r--r-- 1 root root 4096 May 1 20:44 temperature
-rw-r--r-- 1 root root 4096 May 1 20:44 voltage
</pre><p>色々ありますが,いくつか説明します.</p><dl class="docutils"><dt>state</dt>
<dd>現在の状態. discharging, charging, idle の3種類</dd>
<dt>remaining_percent</dt>
<dd>バッテリー残量(%)</dd>
<dt>start_charge_thresh</dt>
<dd><p class="first">充電を開始する閾値.</p><blockquote>echo 70 > start_charge_thresh</blockquote><p class="last">とすると,70% 以下になったときに充電を開始する.</p></dd>
<dt>stop_charge_thresh</dt>
<dd><p class="first">充電を停止する閾値</p><blockquote>echo 90 > stop_charge_thresh</blockquote><p class="last">とすると,90%になった段階で充電が止まる.</p></dd>
<dt>force_discharge</dt>
<dd><p class="first">放電モードにする. ACアダプタをつけてるときに機能します.</p><p class="last">1 を入れるとこの機能が働き,ACアダプタをつなげていてもバッテリー駆動になります.</p></dd>
<dt>inhibit_charge_minutes</dt>
<dd>指定した時間(分)の間,充電を停止する.</dd> </dl><p>これらのうち,force_discharge と inhibit_charge_minutes あたりの機能が使えそうです.</p></div></div><div class="section" id="tp-peakshift"><h1>tp_peakshift</h1><p>というわけで,簡単なスクリプトを書いてみました.<br />
Yahoo!Japanの電気予報APIを利用し,1時間後もしくは2時間後の消費電力予測を見て 95% を超えたときに電池駆動モードに移行もしくは充電の停止をするものです.</p><br />
<script src="https://gist.github.com/951695.js?file=tp_peakshift.py"></script><br />
<div class="section" id="id5"><h2>使い方</h2><p>スクリプトを /etc/cron.hourly/ 以下に放り込んで実行権限をつけてください.</p></div><div class="section" id="id6"><h2>欠点</h2><p>force_discharge をオンにした状態でバッテリーが空になると,自動的に充電が始まってしまう.<br />
充電が始まると,通常使用分+充電で余計に電力を使用してしまうので逆効果になってしまう場合がある.<br />
バッテリーが空になったときは inhibit_charge_minutes に適当な値を自動的に入れるような仕組みが欲しいところ.</p></div></div><br />
<p>ThinkPad X61 での動作は確認しています.<br />
他の機種でも動くとは思いますが判りません.<br />
</p><br />
<p>参考までに,通常使用時が 20W〜25W ほどで充電中は 55W〜60W くらいでした.</p>Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-83900968174532156192011-03-06T18:22:00.002+09:002011-03-06T18:25:09.330+09:00ja_JP.UTF-8 vs ja_JP.utf8それは某IRCチャンネルの何気ない一言から始まった.<br />
<blockquote>@xxxx | .UTF-8 or .utf8?</blockquote><br />
僕は何も疑問を持たずに,こう答えた.<br />
<blockquote>@Kojima | ja_JP.UTF-8 </blockquote><br />
そしたら彼は,<br />
<blockquote>@xxxx | .utf8 on 'locale -a'</blockquote>と返答してきた.<br />
<br />
確かに,手元の環境で<br />
<blockquote>locale -a</blockquote>を実行してみると,utf8 になっている.<br />
<blockquote><pre class="prettyprint">$ locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
</pre></blockquote><br />
@matsuu 先生が以前 eselect locale を入れたときにこうつぶやいていたのを思い出したので,「matsuu先生がこういってるんだから,.UTF-8なんだよ!」としておいた.<br />
<br />
<!-- https://twitter.com/matsuu/status/38220502866726912 --> <style type='text/css'>.bbpBox38220502866726910 {background:url(http://a3.twimg.com/profile_background_images/147812316/P1060389.JPG) #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style> <div class='bbpBox38220502866726910'><p class='bbpTweet'>ja_JP.utf8ではなくja_JP.UTF-8で設定すべし RT @<a class="tweet-url username" href="http://twitter.com/naota344" rel="nofollow">naota344</a>: 気がつけば @<a class="tweet-url username" href="http://twitter.com/matsuu" rel="nofollow">matsuu</a> せんせーの eselect locale が入っていた。 eselect locale ja_JP.utf8 しておけばいいんだろうか…。<span class='timestamp'><a title='Thu Feb 17 12:57:32 +0000 2011' href='https://twitter.com/matsuu/status/38220502866726912'>less than a minute ago</a> via web</span><span class='metadata'><span class='author'><a href='http://twitter.com/matsuu'><img src='http://a0.twimg.com/profile_images/1147343421/matsuu_normal.jpg' /></a><strong><a href='http://twitter.com/matsuu'>MATSUU Takuto</a></strong><br />
matsuu</span></span></p></div><!-- end of tweet --><br />
<br />
とはいえ,ちょっと気になったので調べてみた.<br />
<br />
<hr /><a href="http://donko.jp/LFS/LFS6.5jp/chapter07/profile.html">LFS のドキュメント</a>にこんな記述がある.<br />
<blockquote>キャラクターマップはたくさんの別名を持つことが出来ます。 例:“ISO-8859-1”は、“iso8859-1”と“iso88591”として参照されます。 いくつかのアプリケーションは、様々な別名を正しく取り扱えません(例:“UTF-8”は、“utf8”ではなく“UTF-8”と書く必要がある)。</blockquote><br />
いくつかのアプリケーションは "UTF-8" と書いておかないといけないらしい.<br />
<br />
"UTF-8" と書く理由はわかったけど,"utf8" と "UTF-8" は同価なのだろうか.<br />
<br />
"locale -a" の結果はどこから持ってきてるのか調べてみる<br />
<br />
<blockquote><pre class="prettyprint">$ strace locale -a
(snip)
open("/usr/lib64/locale/locale-archive", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3677376, ...}) = 0
(snip)
</pre></blockquote>"/usr/lib64/locale/locale-archive" を参照しているようだ.<br />
これはきっと localedef で作られるはずだ,ということで localedef のコードを追ってみた.<br />
<br />
glibc-2.11.2 の intl/l10nflist.c:_nl_normalize_codeset で以下のような処理をしていた.<br />
<br />
<blockquote><pre class="prettyprint">347 if (retval != NULL)
348 {
349 if (only_digit)
350 wp = stpcpy (retval, "iso");
351 else
352 wp = retval;
353
354 for (cnt = 0; cnt < name_len; ++cnt)
355 if (isalpha ((unsigned char) codeset[cnt]))
356 *wp++ = tolower ((unsigned char) codeset[cnt]);
357 else if (isdigit ((unsigned char) codeset[cnt]))
358 *wp++ = codeset[cnt];
359
360 *wp = '\0';
361 }
</pre></blockquote><br />
locale-archive に書き込む際に,アルファベットは小文字に,アルファベットと数字以外は無視するようにしているようだ.<br />
<br />
ちなみに,LC_* とか LANG のシンタックスは次のような形式らしい.<br />
<blockquote><pre class="prettyprint">[language[_territory][.codeset][@modifier]]
</pre></blockquote><br />
<hr><h3>結論</h3><p>"ja_JP.utf8" も "ja_JP.UTF-8" も同じ意味.しかし,一部のアプリケーションでは ".UTF-8" と書かなければ正常に動作しないことがあるので "ja_JP.UTF-8" が推奨される.</p><br />
たぶん.Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-43539552341822142732011-01-11T21:46:00.000+09:002011-01-11T21:46:07.666+09:00app-i18n/atokx3-r6 にアップデートしたら xterm とか urxvt が起動できなくなった去年の10月くらいに発生したんだけど、先日正常な動作に戻ったのでメモっておく。<br />
色々調査してくださった @matsuu せんせいには感謝。<br />
<hr /><br />
<b>事象</b><br />
<br />
<ul><li>app-i18n/atokx3-r5 から app-i18n/atokx3-r6 にアップデートする</li>
<li>xterm を起動する→途中で止まる</li>
</ul><br />
<br />
<b>原因</b><br />
/usr/lib32/iiim/xiiimp.so, xiiimp.so.2 が本来であれば xiiimp.so.2.0.0 にリンクが張られているべきところが自分自身にリンクが張られていた。<br />
<br />
<blockquote><pre class="prettyprint">lrwxrwxrwx 1 root root 25 1月 8 23:11 /usr/lib32/iiim/xiiimp.so -> /usr/lib32/iiim/xiiimp.so
lrwxrwxrwx 1 root root 27 1月 8 23:11 /usr/lib32/iiim/xiiimp.so.2 -> /usr/lib32/iiim/xiiimp.so.2
</pre></blockquote><br />
なんでこんな事になってしまうんだろう、と調査してたところ、この<a href="http://bugs.gentoo.org/show_bug.cgi?id=225821">バグ</a>が見つかった。<br />
ここに書かれている通りではないが、次のように pym/portage/__init__py を変更してみたところ正常にインストールされるようになり、xterm も起動できるようになった。<br />
<br />
<blockquote><pre class="prettyprint">def abssymlink(symlink):
"This reads symlinks, resolving the relative symlinks, and returning the absolute."
mylink=os.readlink(symlink)
if mylink[0] != '/':
- mydir=os.path.dirname(symlink)
+ mydir = "."
mylink=mydir+"/"+mylink
- return os.path.normpath(mylink)
+ return os.path.abspath(mylink)
</pre></blockquote><br />
このバグか!!1と発見したときは喜んだモノの、もう少し調べてみたところ、<br />
/usr/lib64/iiim が /usr/lib32/iiim へのリンクになっていた。<br />
<br />
/usr/lib64/iiim を削除して再インストールしてみたら、問題は出なくなった。<br />
なんで、こんなリンクが張られたかについては判っていない。<br />
<br />
atokx3-3.0.0-r5.ebuild:<br />
<blockquote><pre class="prettyprint">135 # amd64 hack
136 if use amd64 ; then
137 if [ "$(ABI=x86 get_libdir)" != "$(get_libdir)" ] ; then
138 dosym /usr/$(ABI=x86 get_libdir)/iiim /usr/$(get_libdir)/iiim || die
139 dosym /usr/$(ABI=x86 get_libdir)/libiiimcf.la /usr/$(get_libdir)/libiiimcf.la || die
140 dosym /usr/$(ABI=x86 get_libdir)/libiiimp.la /usr/$(get_libdir)/libiiimp.la || die
141 fi
142 fi
</pre></blockquote>138行目あたりでリンク貼られてるので、この辺かなーと思ったんだけど当時使ってた portage のバージョンに戻してやってみたけど再現しなかった。Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-54336813384854741582010-12-16T00:00:00.001+09:002010-12-16T00:00:04.418+09:00portage 小ネタ: package.env<a href="http://atnd.org/events/10921">Gentoo Advent Calendar</a> 6日目: Portage に関する小ネタ: package.env<br />
<br />
今まで twitter でつぶやいてきたことをいくつか<del>まとめてみる.</del> まとめてみようかと思ったんだけど一つ目で力尽きた.<br />
他はまた今度.<br />
<br />
<hr /><span class="Apple-style-span" style="font-size: large;">1. /etc/portage/package.env</span><br />
<!-- http://twitter.com/kjm/status/6898905132310528 --> <style type='text/css'>.bbpBox6898905132310528 {background:url(http://s.twimg.com/a/1291760612/images/themes/theme5/bg.gif) #352726;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style> <div class='bbpBox6898905132310528'><p class='bbpTweet'>portage-2.2_rc93 で /etc/portage/package.env が使えるようになるらしい.パッケージ毎に環境変数を変えられるんかな<span class='timestamp'><a title='Tue Nov 23 02:36:41 +0000 2010' href='http://twitter.com/kjm/status/6898905132310528'>less than a minute ago</a> via web</span><span class='metadata'><span class='author'><a href='http://twitter.com/kjm'><img src='http://a3.twimg.com/profile_images/53601131/060529_0137_01_normal.JPG' /></a><strong><a href='http://twitter.com/kjm'>Kazunori Kojima</a></strong><br />
kjm</span></span></p></div><!-- end of tweet --><br />
<br />
これは確か <a href="https://groups.google.com/group/funtoo-dev/browse_thread/thread/9f3b6696408f1c12/9758d959e8c60f79?pli=1"> New portage on the horizon </a> をみてつぶやいたはず.<br />
<blockquote><pre>* Per-package environment variables can be set with the new package.env
configuration file in /etc/portage/. See the portage(5) man page for
details.
</pre></blockquote><br />
これを実際に使ってみようと思う.<br />
まずは,portage-2.2_rc93 を入れる.<br />
今日時点ではまだマスクされているので,unmask にいれます.<br />
<br />
<blockquote><pre class="prettyprint">$ echo =sys-apps/portage-2.2_rc93 | sudo tee -a /etc/portage/package.unmask
$ sudo emerge -u portage
</pre></blockquote><br />
使い方を見てみます.(<i>man 5 portage</i>)<br />
<br />
<blockquote><pre>package.env
Per-package environment variable settings.
Entries refer to environment files that are placed in the /etc/portage/env/
directory and have the same format as make.conf(5).
Format:
- comment lines begin with # (no inline comments)
- one DEPEND atom per line followed by name(s) of environment file(s)
Example:
# use environment variables from /etc/portage/env/glibc.conf for the glibc package
sys-libs/glibc glibc.conf
</pre></blockquote><br />
<i>/etc/portage/env/</i> に make.conf と同じフォーマットで記述したファイルを置いておき,それを <i>/etc/portage/package.env</i> で指定するような感じらしい.<br />
<br />
例えば,特定のパッケージだけ CFLAGS を変えたいといった場合は,以下のようにする.<br />
<br />
/etc/portage/env/hoge.conf<br />
<blockquote><pre class="prettyprint">CFLAGS="-march=i686 -O1 -pipe"
</pre></blockquote><br />
/etc/portage/package.env<br />
<blockquote><pre class="prettyprint">app-arch/unzip hoge.conf
</pre></blockquote><br />
このような設定を書くと,app-arch/unzip のみ CFLAGS を "-march=i686 -O1 -pipe" にすることができます.<br />
<br />
パッケージをデバッグしたい(gdbで調査したいとか)場合は,<br />
<br />
/etc/portage/env/debug.conf<br />
<blockquote><pre class="prettyprint">CFLAGS="${CFLAGS} -g"
FEATURES="nostrip"
</pre></blockquote><br />
/etc/portage/package.env<br />
<blockquote><pre class="prettyprint">app-arch/unzip debug.conf
</pre></blockquote>とすればいいでしょう.<br />
こうすると,app-arch/unzip のみ -g つきでコンパイルされ,自動的にバイナリが strip されません.Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-26948301150447974942010-12-08T21:57:00.000+09:002010-12-08T21:57:11.754+09:00kdump on gentoo linuxRedhat や Ubuntu にはクラッシュダンプを取得できる仕組みが用意されている.<br />
しかし,Gentoo Linux にはもちろんそんなものは用意されていないので自前で作ってみる.<br />
<br />
クラッシュダンプを取得する仕組みは,だいたい以下のような感じ.<br />
<br />
<ol><li>Crash する</li>
<li>CrashDump 取得用のカーネルの起動</li>
<li>/proc/vmcore をコピー</li>
</ol><div><br />
</div><div>CrashDump 取得用カーネルは kexec の仕組みを利用するので,まず kexec-tools をインストールします.</div><div><br />
</div><blockquote><pre class="prettyprint">$ sudo emerge -av sys-apps/kexec-tools
</pre></blockquote>あと,通常使用するカーネルのオプションで下記のものを有効にしておきましょう.<br />
<br />
<ul><li>CONFIG_KEXEC=y</li>
<li>CONFIG_SYSFS=y</li>
<li>CONFIG_DEBUG_INFO=y</li>
</ul><div>この設定でコンパイルしたものを準備しておき,起動オプションに crashkernel=128M を追加します.<br />
<br />
<blockquote><pre class="prettyprint">kernel /kernel-x86_64-2.6.36-gentoo root=/dev/sda2 crashkernel=128M
</pre></blockquote><br />
なんで 128MB なのかは今後調べる.物理メモリがデカいとこの値も大きくしないと動作しないかも.<br />
このオプションを追加して起動すると dmesg に次のメッセージがでるはずです.<br />
<br />
<blockquote><pre class="prettyprint">Reserving 128MB of memory at 32MB for crashkernel
</pre></blockquote><br />
次のログが出てた場合は何かが失敗してます.<br />
<blockquote><pre class="prettyprint">crashkernel reservation failed
</pre></blockquote><br />
次に CrashDump 取得用のカーネルの準備を行います.<br />
このカーネルは余計な機能は使わないようにできるだけ最小構成にした方がいいと思われます.<br />
<br />
とりあえず,下記のオプションが必要らしいです.<br />
(全アーキテクチャ共通)<br />
<br />
<ul><li>CONFIG_CRASH_DUMP=y</li>
<li>CONFIG_PROC_VMCORE=y</li>
</ul><br />
(for i386, x86_64)<br />
<br />
<ul><li>CONFIG_HIGHMEM4G or CONFIG_HIGHMEM64G=y</li>
<li>CONFIG_SMP=n</li>
<li>CONFIG_RELOCATABLE=y</li>
</ul><div>他のアーキテクチャで必要なオプションは Documentation/kdump/kdump.txt を参照してください.<br />
<br />
カーネルの準備が終わったところで,クラッシュダンプを取得するスクリプトを作ります.<br />
<br />
/etc/init.d/kdump<br />
<blockquote><pre class="prettyprint">#!/sbin/runscript
LOGGER="/usr/bin/logger -p info -t kdump"
start() {
if [ -s /proc/vmcore ]; then
coredir="/var/crash/`date +"%Y-%m-%d-%H:%M"`"
mkdir -p $coredir
cp --sparse=always /proc/vmcore $coredir/vmcore-incomplete
exitcode=$?
if [ $exitcode == 0 ]; then
mv $coredir/vmcore-incomplete $coredir/vmcore
$LOGGER "saved a vmcore to $coredir"
else
$LOGGER "failed to save a vmcore to $coredir"
fi
reboot
fi
}
</pre></blockquote><br />
CrashDump を取得するための runlevel を作ります.<br />
別に runlevel にしなくてもいいんですが,なんとなくです.<br />
<br />
<blockquote><pre class="prettyprint"> $ sudo install -d /etc/runlevels/crash
$ sudo rc-update add syslog-ng crash
$ sudo chmod +x /etc/init.d/kdump
$ sudo rc-update add kdump crash
</pre></blockquote><br />
最後に CrashDump kernel をロードします.<br />
<br />
<blockquote><pre class="prettyprint"> $ sudo kexec -p /boot/crashdump-kernel-x86_64-2.6.36-gentoo \
--append='root=/dev/sda2 softlevel=crash'
</pre></blockquote><br />
</div></div><br />
<div>これで用意が完了です.テストしてみます.<br />
</div><br />
<blockquote><pre class="prettyprint"> $ echo -n c | sudo tee /proc/sysrq-trigger
</pre></blockquote><br />
しばらくすると,マシンがリブートします.<br />
リブート後,/var/crash を確認すると vmcore というファイルができているはずです.<br />
<br />
<blockquote><pre class="prettyprint"> $ ls -lh /var/crash/2010-12-08-12\:00
-r-------- 1 root root 3.7G 11月 19 23:25 vmcore
</pre></blockquote><br />
これをデバッグするには,こんな感じです.<br />
デバッグの仕方とかは DEBUG HACKS とかが参考になるんじゃないでしょうか.<br />
<blockquote><pre class="prettyprint"> $ gdb /boot/kernel-x86_64-2.6.36-gentoo vmcore
</pre></blockquote><br />
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=kznrkjm-22&o=9&p=8&l=as1&m=amazon&f=ifr&md=1X69VDGQCMF7Z30FM082&asins=4873114047" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-40741052158691756232010-12-04T11:53:00.000+09:002010-12-04T11:53:22.795+09:00lxc-0.7.3lxc-0.7.3 から mount entry の指定方法が変わったようです.<br />
<br />
Gentoo でインストールしてる人はアップグレード時に einfo が表示されてるので気づくかもしれませんが,<br />
スルーしてて気づくのが遅れてしまった.<br />
<br />
<blockquote>Starting from version 0.7.3, you have to specify mount points of bind mounts<br />
using the rootfs mount point as a base. This means you'd then have something<br />
along the lines of the following in your lxc configuration files: <br />
"<br />
lxc.mount.entry = /usr/portage /usr/lib/lxc/rootfs/usr/portage none bind 0 0<br />
"<br />
</blockquote><br />
lxc.mount で fstab ファイルを指定していたのを lxc.mount.entry で書くようになるようです.Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0tag:blogger.com,1999:blog-5883063961252033912.post-38851100849417949852010-11-13T15:51:00.000+09:002010-11-13T15:51:38.099+09:00upgrade to xorg-1.8Xorg-1.8 にアップグレードしたら、マウスとキーボードの操作ができなくなってしまった。<br />
そういえば、xorg-1.8 からデバイスの認識が hal から udev に変わったとどっかで見た気がする。<br />
<br />
と、いうわけで検索してみたところ、そこは Gentoo ちゃんと<a href="http://www.gentoo.org/proj/en/desktop/x/x11/xorg-server-1.8-upgrade-guide.xml">ドキュメント</a>がありました。<br />
<br />
これを元に、ThinkPad X61 の設定をしてみた。<br />
<br />
/etc/X11/xorg.conf.d/ の作成。xorg.conf に書いても良いけど。<br />
<blockquote><pre class="prettyprint">$ sudo mkdir /etc/X11/xorg.conf.d
</pre></blockquote><br />
TrackPoint の設定<br />
<br />
真ん中のスクロールボタンも使えるように設定する。<br />
<blockquote><pre class="prettyprint">$ sudo vim /etc/X11/xorg.conf.d/10-trackpoint.conf
# ThinkPad Trackpoint
Section "InputClass"
Identifier "mouse-all"
Driver "evdev"
Option "EmulateWheel" "true"
Option "Emulate3Buttons" "true"
Option "EmulateWheelButton" "2"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
Option "ZAxsisMapping" "4 5"
MatchIsPointer "on"
EndSection
</pre></blockquote><br />
Keyboard の設定<br />
<br />
キーボードレイアウトは dvorak, Control キーと Capslock は入れ替え。<br />
<blockquote><pre class="prettyprint">$ sudo vim /etc/X11/xorg.conf.d/10-keyboard.conf
# Keyboard
Section "InputClass"
Identifier "Keyboard-all"
Driver "evdev"
Option "XkbLayout" "dvorak"
Option "XkbOptions" "ctrl:swapcaps"
MatchIsKeyboard "on"
EndSection
</pre></blockquote><br />
<br />
system-wide な設定は /usr/share/X11/xorg.conf.d/ にあるらしい。Anonymoushttp://www.blogger.com/profile/02771510150601104836noreply@blogger.com0