tag:blogger.com,1999:blog-15250008889540721212024-03-13T19:31:23.520+09:00Life with open mindEmma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.comBlogger68125tag:blogger.com,1999:blog-1525000888954072121.post-29991418409850253322016-08-05T17:38:00.002+09:002016-08-05T17:38:58.071+09:00コミケ90で「Get Started with HTTP/2」を出します(3日目 西4 f-44b)<p>
1年ぶりに帰ってきました!コミケ90の3日目、西4 f-44b に出展します。「<a href="https://webcatalog.circle.ms/Circle/12727599">低級はっかーズ</a>」です。
</p>
<p>今回は前回までとは異なり、HTTP/2のお話です。Nginxを使って「安全で高速な」HTTP/2サーバーを構築するまでのガイドを掲載しています。SSL LabsでももちろんAランクになります。</p>
<p>その他、平文HTTP/1.1とのベンチマーク比較、Cipher suiteの解読方法など、見本には載せきれない内容が詰まってます。会場でお待ちしています!</p>
<p>タイトルは「Get Started with HTTP/2」です。表紙は<a href="https://twitter.com/kinotonaoto">きのとなおと</a>さんに描いていただきました。</p>
<p>
<a href="https://4.bp.blogspot.com/-xoBkls0ufoU/V6RO3ePZoDI/AAAAAAABGwU/jMHEYLPeFHs0EJEctVnRoLr-Rdt2Sp4BQCLcB/s1600/preview-cover.jpg" imageanchor="1" ><img border="0" src="https://4.bp.blogspot.com/-xoBkls0ufoU/V6RO3ePZoDI/AAAAAAABGwU/jMHEYLPeFHs0EJEctVnRoLr-Rdt2Sp4BQCLcB/s320/preview-cover.jpg" width="225" height="320" /></a>
<a href="https://3.bp.blogspot.com/-gEmzquNHCxc/V6RO21nlrRI/AAAAAAABGwM/V1wX4xcJU6ge6rzEDqLyASCtoiPY08WkwCLcB/s1600/preview-1.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-gEmzquNHCxc/V6RO21nlrRI/AAAAAAABGwM/V1wX4xcJU6ge6rzEDqLyASCtoiPY08WkwCLcB/s320/preview-1.png" width="225" height="320" /></a><a href="https://3.bp.blogspot.com/-EgLYOZG_T14/V6RO243pliI/AAAAAAABGwE/1f8sYCxpzOsgyQYMIl46cT_hQnBC2WSgQCLcB/s1600/preview-2.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-EgLYOZG_T14/V6RO243pliI/AAAAAAABGwE/1f8sYCxpzOsgyQYMIl46cT_hQnBC2WSgQCLcB/s320/preview-2.png" width="225" height="320" /></a><a href="https://2.bp.blogspot.com/-d9yv2CyYWtE/V6RO24SIDpI/AAAAAAABGwI/p4MU6TcOrh4UYNC53MGoMAl1rE9a4i0HACLcB/s1600/preview-3.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-d9yv2CyYWtE/V6RO24SIDpI/AAAAAAABGwI/p4MU6TcOrh4UYNC53MGoMAl1rE9a4i0HACLcB/s320/preview-3.png" width="225" height="320" /></a><a href="https://2.bp.blogspot.com/-k0Obn0Mf4Ok/V6RO3XClOOI/AAAAAAABGwQ/bYEbE5qlQHw0I8Oy60vEC8Mh4NthIHuAQCLcB/s1600/preview-4.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-k0Obn0Mf4Ok/V6RO3XClOOI/AAAAAAABGwQ/bYEbE5qlQHw0I8Oy60vEC8Mh4NthIHuAQCLcB/s320/preview-4.png" width="225" height="320" /></a>
</p>
<p><a href="http://blog.yuryu.jp/2015/08/88-linux-kernel-updates-201508-2-p-15a.html">Linux Kernel Updates 2015.08</a>と<a href="http://blog.yuryu.jp/2014/12/linux-kernel-updates-2014-12.html">2014.12</a>も持っていきます。会場でお待ちしています!</p>
<p>コミケが終わったら出せてなかった過去のLinux Kernel Updatesの分も含めてKindle版出します。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com2tag:blogger.com,1999:blog-1525000888954072121.post-38201489624317670672015-08-15T22:38:00.001+09:002015-08-15T22:39:47.715+09:00コミケ88 - Linux Kernel Updates 2015.08 (東2 P-15a)<p>コミケ88の3日目(2015年8月16日)に「<a href="https://webcatalog-free.circle.ms/Circle/11916006">低級はっかーズ</a>」として出展します!</p>
<p>場所は東2, P-15aです。</p>
<p>今回はLinux Kernel Updates 2015.08として、Linux 3.19~4.1の最新情報、nftablesについての簡単な説明を書いた本を300円で頒布します。</p>
<p>表紙はロジさん(<a href="http://logica-physica.info/">ロジカ+フィジカ</a>)に描いていただきました。ありがとうございます。</p>
<a href="http://1.bp.blogspot.com/-2g5suYnru3A/Vc8_eYT548I/AAAAAAAA-yc/HwPpxh89cSM/s1600/lu2015-08-cover.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-2g5suYnru3A/Vc8_eYT548I/AAAAAAAA-yc/HwPpxh89cSM/s400/lu2015-08-cover.png" /></a><a href="http://3.bp.blogspot.com/-8OSxSVnHmmc/Vc8_eQJxdBI/AAAAAAAA-yU/-0g2yK94Pxw/s1600/lu2015-08-preview1.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-8OSxSVnHmmc/Vc8_eQJxdBI/AAAAAAAA-yU/-0g2yK94Pxw/s400/lu2015-08-preview1.png" /></a><a href="http://4.bp.blogspot.com/-rLfDsgvSqMI/Vc8_eSm38VI/AAAAAAAA-yY/dF_wYx05fuA/s1600/lu2015-08-preview2.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-rLfDsgvSqMI/Vc8_eSm38VI/AAAAAAAA-yY/dF_wYx05fuA/s400/lu2015-08-preview2.png" /></a><a href="http://2.bp.blogspot.com/-BSlYJ-EI9ok/Vc8_fNSkC9I/AAAAAAAA-yo/7gViAKKVrXg/s1600/lu2015-08-preview3.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-BSlYJ-EI9ok/Vc8_fNSkC9I/AAAAAAAA-yo/7gViAKKVrXg/s400/lu2015-08-preview3.png" /></a>
<p>その他、過去の既刊(<a href="http://blog.yuryu.jp/2012/12/linux-kernel-updates.html">2012.12</a>, <a href="http://blog.yuryu.jp/2014/12/linux-kernel-updates-2014-12.html">2014.12</a>)も持っていきます。在庫限りです。</p>
<p>
当日会場でお目にかかりましょう!</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-77747984768930422052015-05-14T14:28:00.000+09:002015-05-14T14:28:14.352+09:00QEMU, KVM, Xenに存在するVENOM脆弱性(CVE-2015-3456)について<p><a href="http://venom.crowdstrike.com/">VENOM脆弱性</a>(CVE-2015-3456)についての情報をまとめました。</p>
<h2>tl;dr</h2>
<p>影響範囲は広いのですが、一部のクラウドベンダー以外は心配する必要はありません。一人で仮想環境を使っている場合には実質的な影響は受けません。なお、<a href="https://aws.amazon.com/security/security-bulletins/XSA_Security_Advisory_CVE_2015_3456/">AWSは影響を受けない</a>とアナウンスされています。</p>
<h2>脆弱性の内容</h2>
<p>QEMUに存在するフロッピーディスクコントローラー(FDC)にバッファオーバーフローのバグがあり、そのコードを利用するKVM, Xenが影響されます。なお、このコードはコマンドラインでFDの利用を指定しているかなどに影響を受けず、すべての設定で利用されます。詳しい内容については、Red Hat Security Blogの<a href="https://securityblog.redhat.com/2015/05/13/venom-dont-get-bitten/">VENOM, don’t get bitten.</a>という記事が参考になります。</p>
<p>この脆弱性を利用すると、本来アクセスができない他のVM、ホストOSへのアクセスが可能になります。</p>
<p>この脆弱性を利用するには、仮想マシン上で管理者権限を持っている必要があります。つまり実質的に問題となるのは、複数のユーザーに仮想マシンを管理者権限付きで貸している場合です。</p>
<p>この脆弱性は2004年に、FDCのコードがQEMUにマージされたときから存在します。</p>
<h2>各ベンダーの対応</h2>
<p><a href="http://venom.crowdstrike.com/">公式サイトに各ベンダーのアナウンスへリンクがあります</a>。</p>
<h2>影響を受けるクラウドベンダーの一覧(一部)</h2>
<ul>
<li><a href="https://www.digitalocean.com/company/blog/update-on-CVE-2015-3456/">Digital Ocean</a></li>
<li><a href="https://community.rackspace.com/general/f/53/t/5187">Rackspace</a></li>
</ul>
<h2>影響を受けないクラウドベンダーの一覧(一部)</h2>
<ul>
<li><a href="https://blog.linode.com/2015/05/13/venom-cve-2015-3456-vulnerability-and-linode/">Linode</a></li>
<li><a href="https://aws.amazon.com/security/security-bulletins/XSA_Security_Advisory_CVE_2015_3456/">Amazon Web Services</a></li>
</ul>
<h2>調査中のクラウドベンダー一覧(一部)</h2>
<ul>
<li><a href="http://www.sakura.ad.jp/news/sakurainfo/newsentry.php?id=1050">さくらインターネット</a></li>
</ul>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com9tag:blogger.com,1999:blog-1525000888954072121.post-84153335950301445852014-12-29T16:45:00.000+09:002014-12-29T16:45:07.218+09:00Linux Kernel Updates 2014.12 をコミケ87に出します!<h2>Linux Kernel Updates 2014.12のお知らせ</h2>
<p>
直前になりましたが、コミケ87でLinux Kernel Updates 2014.12を頒布します。
</p>
<p>
スペースは<a href="https://webcatalog-free.circle.ms/Circle/11651525">西い-36b</a>です。</p>
<h2>今回の内容</h2>
<ul>
<li>Linux 3.16 〜 Linux 3.18の新機能</li>
<li>OOM Killer 解説</li>
<li>Overlayfs を使ってみた</li>
</ul>
<p>ここのところ小さな変更点が多かった Linux ですが、今回は Overlayfs を初めとして魅力的な機能がいくつか導入されました。</p>
<p>サンプルを掲載します。<br />
<a href="http://1.bp.blogspot.com/-FwEo1Y4l3-w/VKEGFtoFq9I/AAAAAAAAQ-k/l3VxIH2Iqrg/s1600/lu2014-12-preview0.jpg" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-FwEo1Y4l3-w/VKEGFtoFq9I/AAAAAAAAQ-k/l3VxIH2Iqrg/s400/lu2014-12-preview0.jpg" /></a><a href="http://4.bp.blogspot.com/-rsSJ3PXexpE/VKEGFoXkEKI/AAAAAAAAQ-w/X1uUlZntqt0/s1600/lu2014-12-preview1.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-rsSJ3PXexpE/VKEGFoXkEKI/AAAAAAAAQ-w/X1uUlZntqt0/s400/lu2014-12-preview1.png" /></a><a href="http://1.bp.blogspot.com/-Ib2mM91VFTw/VKEGFmlNelI/AAAAAAAAQ-o/mTRHxS37L9o/s1600/lu2014-12-preview2.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-Ib2mM91VFTw/VKEGFmlNelI/AAAAAAAAQ-o/mTRHxS37L9o/s400/lu2014-12-preview2.png" /></a><a href="http://2.bp.blogspot.com/-2wePqzOtSSE/VKEGGzW4rbI/AAAAAAAAQ-0/-Ydrp9XCWc0/s1600/lu2014-12-preview3.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-2wePqzOtSSE/VKEGGzW4rbI/AAAAAAAAQ-0/-Ydrp9XCWc0/s400/lu2014-12-preview3.png" /></a>
<br />
今回もソースコードをもとに動作を解説しています。
</p>
<p>既刊は、2013.08, 2013.12, 2014.08がそれぞれ若干数ありますので持っていきます。よろしくお願いします。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com1tag:blogger.com,1999:blog-1525000888954072121.post-80824693596761626772014-11-25T18:33:00.000+09:002014-11-25T18:33:20.044+09:00ssh-keygenがデフォルトで生成する鍵の種類と、安全性<p>sshの鍵を生成するのにssh-keygenをよく使いますが、無意識的に ssh-keygen -t rsa -b 2048 などと指定していました。ところが最近のバージョンのssh-keygenはオプションなしでもとりあえず動きます。</p>
<pre class="brush: bash;">
yuryu@ubuntu:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yuryu/.ssh/id_rsa):
Created directory '/home/yuryu/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/yuryu/.ssh/id_rsa.
Your public key has been saved in /home/yuryu/.ssh/id_rsa.pub.
The key fingerprint is:
7f:5a:1d:54:6a:30:dd:5c:ab:0c:8b:c6:9c:d6:3c:b8 yuryu@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
| o. o+|
| o.o+|
| . +. |
| o * +o. |
| SO = o. |
| o.. .. . |
| E. o . |
| + |
| . |
+-----------------+
</pre>
<p>よく見ると答えが書いてありますが、デフォルトではどんな種類の鍵を生成しているのでしょうか?</p>
<p>[ RSA 2048]と書いてありますね。 RSAの2048bitsです。この種類の鍵と長さは今のところ安全だと言われているので、普通に使うのであればssh-keygenとオプション無しに実行すれば良いわけです。 DSAは鍵の長さが1024bitsでしか使えず、もはや安全な長さだとは言えないので使うべきではありません。なお<a href="http://blog.livedoor.jp/k_urushima/archives/1721840.html" title="自堕落な技術者の日記 : RSAとECDSA、署名生成と署名検証どっちが速い? - livedoor Blog(ブログ)">ECDSAの方が安全で鍵が長くなった場合に破綻しづらいと言われています</a>が、サポートされたのが比較的最近で例えばOS Xでは動かなかったりするので、まだ広く使えるとは言いがたいようです。</p>
<p>昔の記憶をたどると、-t を指定しない場合にはエラーだったり、標準の鍵長が1024bitsだったりしたことがあったと思うのですが、いつから変わったのでしょうか。コミットログを追ってみました。</p>
<table border="1">
<thead><tr><th>年月</th><th>変更点</th><th>デフォルトで生成される鍵</th></thead>
<tbody>
<tr><td>1999年9月</td><td><a href="http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/ssh-keygen.c?rev=1.1&content-type=text/x-cvsweb-markup">最初のコミット</a></td><td>rsa1 1024</td></tr>
<tr><td>2000年4月</td><td><a href="http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/ssh-keygen.c?rev=1.19&content-type=text/x-cvsweb-markup">DSAをサポート</a></td><td>rsa1 1024</td></tr>
<tr><td>2000年11月</td><td><a href="http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/ssh-keygen.c?rev=1.33&content-type=text/x-cvsweb-markup">RSA(SSH2)がサポート</a></td><td>rsa1 1024</td></tr>
<tr><td>2001年12月</td><td><a href="http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/ssh-keygen.c?rev=1.87&content-type=text/x-cvsweb-markup">鍵の種類の指定が必須に</a></td><td>N/A</td></tr>
<tr><td>2005年6月</td><td><a href="http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/ssh-keygen.c?rev=1.127&content-type=text/x-cvsweb-markup">デフォルトの鍵長が2048bitsに(ただし種類の指定は必須)</a></td><td>N/A</td></tr>
<tr><td>2005年12月</td><td><a href="http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/ssh-keygen.c?rev=1.133&content-type=text/x-cvsweb-markup">デフォルトの鍵がRSAに</a></td><td>rsa 2048</td></tr>
</tbody>
</table>
<p>というわけで、2001年よりも前のシステムはそもそも脆弱なので省くとすると、鍵の指定をしなくても動くシステムでは標準で RSA 2048bits の鍵が生成されるようです。鍵の指定をしなくてはいけない(-tオプションを省くとエラーになる)システムでは鍵長も指定した方が安全でしょう。</p>
<p>将来ECDSAが広く使われるようになったらまた状況が変わるのかも知れませんが、randomart image([ RSA 2048]から始まる模様)をちゃんと確認する癖をつけるのが良いかもしれませんね。</p>
Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-37520661788509229952014-10-12T15:52:00.000+09:002014-10-12T22:43:55.901+09:00C言語で理解する英語の冠詞(aとtheの使い分け)<p>英語の冠詞は、実はプログラマーにはとてもわかりやすいんです。</p>
<h2>変数宣言はa, 参照はthe</h2>
<pre>
int i;
i = 100;
</pre>
<p>1行目のint iは宣言なので「a」です。"Declare an integer variable."</p>
<p>次の i = 100 はその変数を参照しているので「the」です。 "Assign 100 to the integer variable."</p>
<h2>仮引数と戻り値はa</h2>
<pre>
int func(int v)
{
return v * 2;
}
</pre>
<p>関数の仮引数と戻り値は「a」です。"This function takes an integer argument and returns an integer value."</p>
<p>もちろん、その引数を関数内で使う場合は「the」になります。"Double the first argument and return the result."</p>
<h2>まとめ</h2>
<p>特定の変数についてだけ会話するときは「the」ですが、それ以外は「a」です。日常会話もそんな感じです。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-6425442245068447092014-09-30T11:16:00.000+09:002014-09-30T11:16:46.975+09:00Linux Kernel Updates 2014.08のKindle版を出しました<p><a href="http://blog.yuryu.jp/2014/08/linux-kernel-updates-2014-08.html">コミケ86で出版したLinux Kernel Updates 2014.08</a>の<a href="http://www.amazon.co.jp/dp/B00O12F98Q">Kindle版</a>を出版しました。</p>
<h2>目次</h2>
<ul>
<li>What's New in Linux 3.13?</li>
<li>What's New in Linux 3.14?</li>
<li>What's New in Linux 3.15?</li>
<li>Dockerとカーネル</li>
<li>ファイル名の入れ替え</li>
<li>O_TMPFILEの紹介</li>
</ul>
<p>
<a href="https://www.amazon.co.jp/dp/B00O12F98Q">Linux Kernel Updates 2014.08の購入はこちらから!<img border="0" src="http://2.bp.blogspot.com/-vz2NaE0akR8/UiKwQCRtfDI/AAAAAAAAKVo/Emq70llbzJg/s1600/assocbutt_or_buy._V371070157_.png" style="vertical-align: middle;" /></a>
</p>
<p>以下は冊子版のプレビューです(Kindle版とはレイアウトが異なります)。</p>
<p>
<a href="http://4.bp.blogspot.com/-2gyirY_gCyU/U-RhucDbgjI/AAAAAAAAOz0/z8q_jd1uXsQ/s1600/lu2014-08-cover.jpg" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-2gyirY_gCyU/U-RhucDbgjI/AAAAAAAAOz0/z8q_jd1uXsQ/s400/lu2014-08-cover.jpg" /></a>
<a href="http://3.bp.blogspot.com/-FptIb1o1GPc/U-RhsbkfR1I/AAAAAAAAOzc/7s7DpCuQJ8g/s1600/lu2014-08-1.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-FptIb1o1GPc/U-RhsbkfR1I/AAAAAAAAOzc/7s7DpCuQJ8g/s400/lu2014-08-1.png" /></a>
<a href="http://4.bp.blogspot.com/-8q7sC949POY/U-RhsyaXZwI/AAAAAAAAOzk/JEnu4poWyNs/s1600/lu2014-08-2.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-8q7sC949POY/U-RhsyaXZwI/AAAAAAAAOzk/JEnu4poWyNs/s400/lu2014-08-2.png" /></a>
<a href="http://4.bp.blogspot.com/-qLAZ4BcajVI/U-Rhs3GRkFI/AAAAAAAAOzg/DP1sfdJm9-E/s1600/lu2014-08-3.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-qLAZ4BcajVI/U-Rhs3GRkFI/AAAAAAAAOzg/DP1sfdJm9-E/s400/lu2014-08-3.png" /></a>
<a href="http://1.bp.blogspot.com/-IaWI3WHHdy0/U-RnoKxgFrI/AAAAAAAAO0E/qp8kCIQYT0M/s1600/lu2014-08-4.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-IaWI3WHHdy0/U-RnoKxgFrI/AAAAAAAAO0E/qp8kCIQYT0M/s400/lu2014-08-4.png" /></a>
</p>
<p>
<a href="https://www.amazon.co.jp/dp/B00O12F98Q">Linux Kernel Updates 2014.08の購入はこちらから!<img border="0" src="http://2.bp.blogspot.com/-vz2NaE0akR8/UiKwQCRtfDI/AAAAAAAAKVo/Emq70llbzJg/s1600/assocbutt_or_buy._V371070157_.png" style="vertical-align: middle;" /></a>
</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-17010558332145332802014-09-21T13:01:00.001+09:002014-09-21T13:05:42.679+09:00RubyKaigi 2014で、多様性の話とRails Girlsの紹介をしました<p>
RubyKaigi 2014に3日間参加し、2日目に"Rails Girls: Not Only for Girls"というタイトルで、発表してきました。
</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/39277307" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/Yuryu/rails-girls-not-only-for-girls-rubykaigi-2014" title="Rails Girls: Not Only for Girls - RubyKaigi 2014" target="_blank">Rails Girls: Not Only for Girls - RubyKaigi 2014</a> </strong> from <strong><a href="http://www.slideshare.net/Yuryu" target="_blank">Haruka Iwao</a></strong> </div>
<p>
Tech companyと呼ばれるUSの会社でも、女性技術者の割合は2割程度にとどまっていて、各社技術者の確保に苦労しているようです。日本での私の経験では、分野にもよりますがおおむね1割程度で、USよりもさらに女性技術者が少ないと感じています。</p>
<p>
プレゼン中でも触れた次の動画に象徴されるように、文化的・社会的な要素と深く結びついていて、一朝一夕に変わるものではありません。もちろん車輪の両輪として、公平な採用、職場での性差別をなくすということは進めていく必要があります。</p>
<iframe allowfullscreen="" frameborder="0" height="270" src="//www.youtube.com/embed/XjJQBjWYDTs" width="480"></iframe>
<p>
そんな中、長期的な目線で状況を改善していこうと、いくつもの活動が立ち上がっています。<a href="http://railsgirls.com/">Rails Girls</a> もその一つです。
</p>
<p>Rails Girls だけでなく、世界中でいろんな人が様々な活動に取り組んでいます。
Googleの<a href="https://developers.google.com/women-techmakers/">Women Techmakers</a>というページに様々なコミュニティ活動へのリンクがあります。また、学会でも<a href="http://women.acm.org/">ACM-W</a>や<a href="http://www.ieee.org/women">IEEE Women in Engineering</a>などに代表されるような活動があります。ぜひ身近な活動に参加してみてください。</p>
<p>非常に難しい問題ではありますが、一歩ずつ良くなっていくことを願っています。</p>
<p>PS: RubyKaigi 2014では私の知る限り、昨年のような問題もなく、非常に良かったと思いました。関係者の皆様はじめ、参加者すべての方の尽力に感謝します。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-53805516257267403012014-08-26T20:10:00.000+09:002014-08-27T09:52:40.161+09:00無線LANを暗号化すればのぞき見されないという誤解<p>今日のニュースに次のようなものがありました。</p>
<blockquote>
<p>無線LANのメール丸見え 成田、関西、神戸の3空港</p>
<p>成田、関西、神戸の3空港が提供する無料の公衆無線LANサービスでインターネットを利用した場合、送信したメールの宛先や中身、閲覧中のウェブサイトのURLを他人がのぞき見できる状態になることが26日、神戸大大学院の森井昌克教授(情報通信工学)の実地調査で確認された。</p>
<p><b>無線LANを暗号化すればのぞき見を防止できる</b>が、パスワードの入力などが必要となり、3空港は利便性を考慮し暗号化していないという。</p>
</blockquote>
<p><a href="http://www.47news.jp/CN/201408/CN2014082601001440.html">無線LANのメール丸見え 成田、関西、神戸の3空港 - 47NEWS(よんななニュース)</a>より引用</p>
<p>「無線LANを暗号化すればのぞき見を防止できる」というのは、誤解です。</p>
<p>無線LANの暗号化方式には複数あり、WEP, TKIP, CCMP(AES)の3種類が使われています。これらは暗号化の方式を定めただけで、鍵交換(パスフレーズの認証)は別の規格です。それぞれ WEP, WPA2-Personal(PSK), WPA2-Enterprise の3種類です。WEPだけは暗号化方式、鍵交換の両方を定めていて、WPA2は暗号化と鍵交換の方式を組み合わせて使うことができます。</p>
<table border="1">
<thead>
<tr><td></td><td>WEP</td><td>WPA2-Personal(PSK)</td><td>WPA2-Enterprise</td></tr>
</thead>
<tbody>
<tr><td>WEP</td><td>危険</td><td>-</td><td>-</td></tr>
<tr><td>TKIP</td><td>-</td><td>危険</td><td>危険</td></tr>
<tr><td>CCMP(AES)</td><td>-</td><td>事前共有鍵を持っている人は、他人の通信内容を見れる</td><td>一人一人認証鍵が違うので、他人の通信を見れない</td></tr>
</tbody>
</table>
<p>まず、WEP、WPA、TKIPを使うWPA2は危険なので使わないようにしましょう。これらには脆弱性が見つかっています。使っていいのはWPA2-CCMP(AES)の組み合わせのみです。表には掲載していませんが、WPAもWPA2と同様に組み合わせを選ぶことができますが、WPA2に置き換わっているので使わないようにしましょう。</p>
<p>家庭や無線LANのホットスポットで利用されるのは WPA2-Personal と言われるタイプで、事前にPSK(Pre-shared key, 事前共有鍵)を決めてパスワードにします。これはこの事前共有鍵を知らない人には内容は読まれないのですが、鍵を持っている人には内容が見えます。つまり、不特定多数で同じパスワード(PSK)を使い回すような環境では、WPA2-Personalで保護されていたとしても、パスワード(PSK)を知っている人には内容が見えてしまいます。</p>
<p>WPA2-Personalでは、接続時にPSKを元に暗号化に使うセッション鍵を決定します。このセッション鍵は無線LANの端末ごとに割り当てられ、お互いに知ることはできません。ところが、PSKと、接続時の鍵交換の情報があればセッション鍵が計算されてしまいます。鍵交換は平文で行われます。そして、無線LANでは「切断する」というパケットは暗号化されないので、第三者が他人になりすまして「切断する」というパケットを送れてしまいます。端末は切断されたことを知ると再接続しようとしますが、そのときには鍵交換の内容を盗み見られるので、セッション鍵を入手され、その後の通信は盗み放題となってしまいます。</p>
<p>ということで、無線LANの暗号化は「パスワードを知らない人からは守られるけど、パスワードを知っている人には他人であっても通信内容が見えている」というものです。</p>
<p>WPA2-Enterpriseでは、一人一人に違う鍵(パスワードや証明書)を割り当てるので、このような問題は起こりません。</p>
<p>追記: WPA2-Personalは、家庭内のように全員が信頼できる環境で安全な無線LANを構築するには十分なもので、有線LANに近い水準のセキュリティが実現できます。不特定多数がPSKを知っている環境では意味が無いよ、ということです。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com1tag:blogger.com,1999:blog-1525000888954072121.post-64402689285800639422014-08-08T15:01:00.000+09:002014-08-08T19:33:39.758+09:00Linux Kernel Updates 2014.08をコミケ86に出します!<p>コミケ86に「Linux Kernel Updates 2014.08」を出展します!</p>
<p>8月17日(日) 西“き”-10b 「<a href="https://webcatalog-free.circle.ms/Circle/11321770">低級はっかーズ</a>」</p>
<h2>目次</h2>
<ul>
<li>What's New in Linux 3.13?</li>
<li>What's New in Linux 3.14?</li>
<li>What's New in Linux 3.15?</li>
<li>Dockerとカーネル</li>
<li>ファイル名の入れ替え</li>
<li>O_TMPFILEの紹介</li>
</ul>
<p>表紙は毎度おなじみ<a href="http://asema.ciao.jp/">きのとなおと</a>さんに描いていただきました。ありがとうございます。</p>
<p>価格は300円、32ページです。</p>
<h2>立ち読み</h2>
<p>今回はDocker特集です!</p>
<p>
<a href="http://4.bp.blogspot.com/-2gyirY_gCyU/U-RhucDbgjI/AAAAAAAAOz0/z8q_jd1uXsQ/s1600/lu2014-08-cover.jpg" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-2gyirY_gCyU/U-RhucDbgjI/AAAAAAAAOz0/z8q_jd1uXsQ/s400/lu2014-08-cover.jpg" /></a>
<a href="http://3.bp.blogspot.com/-FptIb1o1GPc/U-RhsbkfR1I/AAAAAAAAOzc/7s7DpCuQJ8g/s1600/lu2014-08-1.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-FptIb1o1GPc/U-RhsbkfR1I/AAAAAAAAOzc/7s7DpCuQJ8g/s400/lu2014-08-1.png" /></a>
<a href="http://4.bp.blogspot.com/-8q7sC949POY/U-RhsyaXZwI/AAAAAAAAOzk/JEnu4poWyNs/s1600/lu2014-08-2.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-8q7sC949POY/U-RhsyaXZwI/AAAAAAAAOzk/JEnu4poWyNs/s400/lu2014-08-2.png" /></a>
<a href="http://4.bp.blogspot.com/-qLAZ4BcajVI/U-Rhs3GRkFI/AAAAAAAAOzg/DP1sfdJm9-E/s1600/lu2014-08-3.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-qLAZ4BcajVI/U-Rhs3GRkFI/AAAAAAAAOzg/DP1sfdJm9-E/s400/lu2014-08-3.png" /></a>
<a href="http://1.bp.blogspot.com/-IaWI3WHHdy0/U-RnoKxgFrI/AAAAAAAAO0E/qp8kCIQYT0M/s1600/lu2014-08-4.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-IaWI3WHHdy0/U-RnoKxgFrI/AAAAAAAAO0E/qp8kCIQYT0M/s400/lu2014-08-4.png" /></a>
</p>
<h2>既刊</h2>
<p>過去のコミケで出したLinux Kernel Updatesのバックナンバーも持って行きます。在庫限り。</p>
<ul>
<li><a href="/2012/12/linux-kernel-updates.html">Linux Kernel Updates 2012.12</a></li>
<li><a href="/2013/07/8435-46b.html">Linux Kernel Updates 2013.08</a></li>
<li><a href="/2013/12/c85-preview.html">Linux Kernel Updates 2013.12</a></li>
</ul>
<p>会場でお待ちしています!</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com2tag:blogger.com,1999:blog-1525000888954072121.post-38625649048946015842014-08-01T17:35:00.000+09:002014-08-01T17:44:14.804+09:00Fedora 20でI218Vを認識させる方法<p>Asus Z97M-Plusのような新しめのAsusマザーボードには、イーサネットコントローラーとしてIntel I218Vが搭載されています。ところがFedora 20のインストールディスクにはこのデバイスドライバは入っていません。インストール方法を記録しておきます。</p>
<p>私は違う環境のFedora 20でビルドしてUSBで運びました。仮想マシンを使うのが楽だと思います。</p>
<h2>必要パッケージなど</h2>
<ul>
<li>kernel-devel-3.11.10-301.fc20.x86_64 (バージョンも揃えます)</li>
<li>"Development Tools" 一式</li>
<li><a href="https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=I218V">I218V用の新しいドライバ</a> e1000e-x.y.z.w.tar.gz っていうファイル名</li>
</ul>
<h2>ビルド手順</h2>
<p>ダウンロードしたe1000eの圧縮ファイルを展開します。私の場合は e1000e-3.1.0.2.tar.gz でしたので tar xf e1000e-3.1.0.2.tar.gz します。</p>
<p>"cd e1000e-3.1.0.2/src; make BUILD_KERNEL=3.11.10-301.fc20.x86_64" します。すると、同じディレクトリにe1000e.koが生成されます。</p>
<p>e1000e.koを何とかして対象のマシンに移動し、"cp e1000e.ko /lib/modules/`uname -r`" して、対象のディレクトリに入れます。</p>
<p>おもむろに "depmod; modprobe e1000e" します。 "ip a" してインタフェースが見えれば成功です。</p>
<h2>カーネル更新後</h2>
<p>この記事を書いている2014年8月1日現在で手に入る最新カーネルの3.15.6-200.fc20ではI218Vに対応していますので、yum upgradeした後は特に対応不要です。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-41981380939062266082014-07-21T14:52:00.002+09:002014-07-21T14:52:40.129+09:00成長したいので本棚を載せてみる<p><a href="http://shinyorke.hatenablog.com/entry/2014/07/20/231609">成長したいエンジニアは良いエンジニアの本棚を真似るといいんじゃない? - Lean Baseball</a>という記事があって、その中で</p>
<blockquote><p>「本棚を真似る」エンジニアから「本棚を真似られる」エンジニアへ</p></blockquote>
<p>というお話がありました。確かに本棚を共有するのは、私がどんなことに興味があるのかわかってもらうとても良い方法だと思うので、家の本棚写真を一挙公開です!</p>
<p>なお、ここにある本の他に、実家にあるもの、会社の本棚にあるもの、Kindleで読んでいるものなどあります。これでおすすめ&必読本すべてを網羅しているわけではないですが、比較的最近購入した、またはいただいた本が並んでいるので、興味の反映としてはかなり正確です。マンガ棚は省略しています。</p>
<p>
<a href="http://3.bp.blogspot.com/-x_Nmq-DgEbo/U8yoTTBVIUI/AAAAAAAAOlk/V97DFcHaBKQ/s1600/2014-07-21+14.36.14.jpg" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-x_Nmq-DgEbo/U8yoTTBVIUI/AAAAAAAAOlk/V97DFcHaBKQ/s640/2014-07-21+14.36.14.jpg" /></a>
<a href="http://3.bp.blogspot.com/-FpzJPtUpMbg/U8yoTpmd44I/AAAAAAAAOlg/LJoEccHso-g/s1600/2014-07-21+14.36.25.jpg" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-FpzJPtUpMbg/U8yoTpmd44I/AAAAAAAAOlg/LJoEccHso-g/s640/2014-07-21+14.36.25.jpg" /></a>
<a href="http://3.bp.blogspot.com/-dYz4-sQo-pw/U8yoTbk4GYI/AAAAAAAAOlc/qbu6Fif1CVw/s1600/2014-07-21+14.36.38.jpg" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-dYz4-sQo-pw/U8yoTbk4GYI/AAAAAAAAOlc/qbu6Fif1CVw/s640/2014-07-21+14.36.38.jpg" /></a>
<a href="http://4.bp.blogspot.com/-YAlbBmc5mYQ/U8yoVHw-jsI/AAAAAAAAOl8/2S4baM1gcfA/s1600/2014-07-21+14.37.12.jpg" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-YAlbBmc5mYQ/U8yoVHw-jsI/AAAAAAAAOl8/2S4baM1gcfA/s640/2014-07-21+14.37.12.jpg" /></a><a href="http://2.bp.blogspot.com/-arirhFlZUxI/U8yoUoxOpgI/AAAAAAAAOlo/PGb9WRv-H3U/s1600/2014-07-21+14.36.52.jpg" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-arirhFlZUxI/U8yoUoxOpgI/AAAAAAAAOlo/PGb9WRv-H3U/s640/2014-07-21+14.36.52.jpg" /></a>
</p>
<p>みなさまはどんな本が本棚に並んでいるでしょうか。見てみたいです!</p>
<p>なお、元記事で触れられている「リーン・スタートアップ」は、amazonのwishlistに入ったまま購入には至っておりません...</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-15860216299797596532014-07-09T19:59:00.000+09:002014-07-14T10:50:12.042+09:00Systemdコマンド早見表(CentOS 7対応)<p>
CentOS 7ではsystemdが導入されているので、サービスの管理が従来と大きく変わっています。詳しい解説は<a href="http://www.slideshare.net/enakai/linux-27872553">systemd徹底入門</a>のスライドを参照するとして、ここでは「前のコマンドはsystemdでどう入力するの?」というのだけ、簡単にまとめてみました。</p>
<p>サービス名にはsshdを指定していますが、もちろん任意のサービスが指定できます。</p>
<h2>サービスの起動、終了など</h2>
<table border="1">
<thead>
<tr><th>操作</th><th>SysV Init</th><th>Systemd</th></tr>
</thead>
<tbody>
<tr><td>起動</td><td>/etc/init.d/sshd start</td><td>systemctl start sshd</td></tr>
<tr><td>終了</td><td>/etc/init.d/sshd stop</td><td>systemctl stop sshd</td></tr>
<tr><td>強制終了</td><td>PID探してkill -9</td><td>systemctl kill -s 9 sshd</td></tr>
<tr><td>再起動</td><td>/etc/init.d/sshd restart</td><td>systemctl restart sshd</td></tr>
<tr><td>設定反映</td><td>/etc/init.d/sshd reload</td><td>systemctl reload sshd</td></tr>
<tr><td>状態取得</td><td>/etc/init.d/sshd status</td><td>systemctl status sshd</td></tr>
<tr><td>自動起動を有効</td><td>chkconfig sshd on</td><td>systemctl enable sshd</td></tr>
<tr><td>自動起動を無効</td><td>chkconfig sshd off</td><td>systemctl disable sshd</td></tr>
<tr><td>自動起動の状態確認</td><td>chkconfig --list sshd</td><td>systemctl is-enabled sshd(status でも表示される)</td></tr>
<tr><td>サービス一覧の表示</td><td>ls /etc/init.d</td><td>systemctl --type service</td></tr>
</tbody>
</table>
<p>追記: SysV Init では service(8) コマンドを利用してサービスの再起動をすることが推奨されていますが、わかりやすさのため /etc/init.d のファイルを直接指定する書き方をしました。</p>
<h2>ログのありか</h2>
<p>SysV Initを使う場合は、/var/logの下をなんとなく探す、/var/log/messagesをgrepしてみるという使い方が多いと思います。Systemdには専用のjournalctlコマンドが用意されています。</p>
<dl>
<dt>特定のサービスのログを確認</dt>
<dd>journalctl -u sshd</dd>
<dt>tail -f</dt>
<dd>journalctl -f -u sshd</dd>
<dt>dmesgの代わり</dt>
<dd>journalctl -k または journalctl --dmesg</dd>
<dt>ログをJSONで取得</dt>
<dd>journalctl に -o JSON オプションをつける</dd>
</dl>
<h2>その他管理機能</h2>
<p>普段は使わないけど、知っておくと緊急時に役に立つかも機能。</p>
<dl>
<dt>シングルユーザーモードに入る</dt>
<dd>systemctl rescue</dd>
<dt>マルチユーザーモードに戻る</dt>
<dd>systemctl default</dd>
</dl>
<p>これで基本的な使い方はばっちり!</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com5tag:blogger.com,1999:blog-1525000888954072121.post-19981102552830852032014-07-09T18:57:00.002+09:002014-07-09T18:57:56.774+09:00DockerをCentOS 7にインストールする方法<p>CentOS 7ではDockerをフル機能で利用することが可能です。</p>
<h2>EPELレポジトリを有効にする</h2>
<p>Dockerは<a href="https://fedoraproject.org/wiki/EPEL">EPELレポジトリ</a>に含まれています。<a href="http://download-i2.fedoraproject.org/pub/epel/beta/7/x86_64/repoview/epel-release.html">CentOS 7用のEPELレポジトリ</a>は現在ベータながら、すでに用意されています。</p>
<p>インストールするコマンドは次の通りです。</p>
<pre class="brush: bash;">
$ sudo yum install http://linux.mirrors.es.net/fedora-epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm
</pre>
<h2>Dockerをインストールする</h2>
<p>Dockerのパッケージ名は、docker-ioです。これをyumでインストールします。</p>
<pre class="brush: bash;">
$ sudo yum install docker-io
</pre>
<p>インストールした後に、サービスとして起動させるには systemctl start、ブート時に自動的にサービスを起動させるには systemctl enable を使います。</p>
<pre class="brush: bash;">
$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service
</pre>
<p>これでDockerが利用できる状態になりました。 docker version で確認できます。</p>
<pre class="brush: bash;">
$ docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.2
Git commit (client): 63fe64c/1.0.0
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.2
Git commit (server): 63fe64c/1.0.0
</pre>
<p>また、docker infoで、device mapperを利用していることが確認できます。</p>
<pre class="brush: bash;">
$ docker info
Containers: 3
Images: 1
Storage Driver: devicemapper
Pool Name: docker-253:1-23349-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 465.8 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 0.9 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.10.0-123.el7.x86_64
</pre>
<p>以上で、CentOS 7上でDockerを利用できる状態になりました。</p>
<h2>参考: インストールのログ</h2>
<p>参考のために、Dockerをインストールした時の進み方を貼り付けておきます。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ sudo yum install http://linux.mirrors.es.net/fedora-epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm
Loaded plugins: fastestmirror
epel-release-7-0.2.noarch.rpm | 13 kB 00:00:00
Examining /var/tmp/yum-root-0OMCgR/epel-release-7-0.2.noarch.rpm: epel-release-7-0.2.noarch
Marking /var/tmp/yum-root-0OMCgR/epel-release-7-0.2.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-0.2 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
epel-release noarch 7-0.2 /epel-release-7-0.2.noarch 22 k
Transaction Summary
========================================================================================================================
Install 1 Package
Total size: 22 k
Installed size: 22 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : epel-release-7-0.2.noarch 1/1
Verifying : epel-release-7-0.2.noarch 1/1
Installed:
epel-release.noarch 0:7-0.2
Complete!
[yuryu@centos7 ~]$ sudo yum install docker-io
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 13 kB 00:00:00
epel | 3.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/2): epel/x86_64/group_gz | 163 kB 00:00:01
(2/2): epel/x86_64/primary_db | 2.0 MB 00:00:47
Loading mirror speeds from cached hostfile
* base: centos-distro.cavecreek.net
* epel: linux.mirrors.es.net
* extras: centos-distro.cavecreek.net
* updates: mirror.supremebytes.com
Resolving Dependencies
--> Running transaction check
---> Package docker-io.x86_64 0:1.0.0-1.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
docker-io x86_64 1.0.0-1.el7 epel 4.5 M
Transaction Summary
========================================================================================================================
Install 1 Package
Total download size: 4.5 M
Installed size: 23 M
Is this ok [y/d/N]: y
Downloading packages:
docker-io-1.0.0-1.el7.x86_64.rpm | 4.5 MB 00:02:39
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : docker-io-1.0.0-1.el7.x86_64 1/1
Verifying : docker-io-1.0.0-1.el7.x86_64 1/1
Installed:
docker-io.x86_64 0:1.0.0-1.el7
Complete!
[yuryu@centos7 ~]$ sudo systemctl start docker.service
[yuryu@centos7 ~]$ sudo systemctl enable docker.service
ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'
</pre>
Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com4tag:blogger.com,1999:blog-1525000888954072121.post-73353378849121775962014-07-08T17:55:00.002+09:002014-07-14T10:56:25.048+09:00NetworkManagerの設定変更、nmtuiとnmcliについてまとめたよ!<p>RHEL 7, CentOS 7では、NetworkManager の利用が推奨されています。今まで /etc/sysconfig/network-scripts/ の下や、そのほかのコマンドを利用して行っていた設定が、一元的に設定できるようになっています。</p>
<p>ここでは、よく使うような設定を、実際の利用例とともにまとめてみました。</p>
<p>NetworkManagerをテキストベースで利用するには、大きく分けて<a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Networking_Config_Using_nmtui.html">nmtuiコマンド</a>と<a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Using_the_NetworkManager_Command_Line_Tool_nmcli.html">nmcliコマンド</a>があります。それぞれ、テキストベースのUIと、コマンドラインツールになっています。</p>
<h2>nmtui</h2>
<p>最も簡単に使えるには、nmtuiコマンドです。実行すると、対話的にネットワークの設定を行うことが可能です。以下にスクリーンショットを掲載します。</p>
<p>
<a href="http://3.bp.blogspot.com/-1k2salDrSz0/U7uy140RB3I/AAAAAAAAObo/SOJgtngRtrc/s1600/nmtui1.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-1k2salDrSz0/U7uy140RB3I/AAAAAAAAObo/SOJgtngRtrc/s400/nmtui1.png" /></a><a href="http://4.bp.blogspot.com/-VPGxb2FtDb0/U7uy2CQdoLI/AAAAAAAAObs/7znYh4NTtBA/s1600/nmtui2.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-VPGxb2FtDb0/U7uy2CQdoLI/AAAAAAAAObs/7znYh4NTtBA/s400/nmtui2.png" /></a>
</p>
<p>いかがでしょうか? 基本的な設定はこのUIから可能です。少し変えてみる、初めて使ってみる場合にはこちらを利用するのが簡単です。</p>
<h2>nmcli</h2>
<p>nmcliを用いると、nmtuiとは対照的に、コマンドベースで設定変更を行うことができます。</p>
<p>nmcliは最後にhelpと入力すると、ヘルプが表示されます。コマンドごとのヘルプも、たとえば"nmcli connection help"や"nmcli conection up help"などのように入力すると表示されます。悩んだらhelpしましょう。</p>
<p>nmcliのコマンドは、前方一致で利用することが可能です。たとえばglobalはg、connectionはcといった具合です。もし一意に特定できない場合はエラーメッセージが表示されます。</p>
<p>それでは、それぞれの設定項目について、具体例を見ていきましょう。</p>
<p>ホスト名の表示、変更はnmcli global hostnameコマンドを利用します。この変更は、systemdで導入されたsystemctlコマンドと同期しています。</p>
<pre class="brush: bash;">
[yuryu@centos70 ~]$ nmcli general hostname
centos70.local
[yuryu@centos70 ~]$ sudo nmcli general hostname centos7.local
[yuryu@centos70 ~]$ hostname
centos7.local
[yuryu@centos70 ~]$ hostnamectl
Static hostname: centos7.local
(省略)
</pre>
<p>
NetworkManagerでは、ほとんどの設定が接続単位で保存されます。IPアドレスの設定なども接続ごとに行います。接続の一覧を表示するには、nmcli cと入力します。
</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ nmcli c
NAME UUID TYPE DEVICE
eno16777736 bf75cf80-fbeb-4b8f-b94c-778731bb2446 802-3-ethernet eno16777736
</pre>
<p>ifup / ifdown は nmcli connection up と nmcli connection down に置き換わります。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ sudo nmcli connection down eno16777736
[yuryu@centos7 ~]$ sudo nmcli connection up eno16777736
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)
</pre>
<p>なお、それぞれ nmcil c d, nmcli c u と省略することが可能です。ほかのコマンドも同様です。</p>
<p>接続の情報を取得するには nmcli connection show を使います。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ nmcli connection show eno16777736
connection.id: eno16777736
connection.uuid: bf75cf80-fbeb-4b8f-b94c-778731bb2446
connection.interface-name: --
connection.type: 802-3-ethernet
connection.autoconnect: yes
(ずらずら)
</pre>
<p>特定の設定のみを表示するには --fields オプションを追加します。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ nmcli --fields dhcp4 connection show eno16777736
DHCP4.OPTION[1]: requested_domain_search = 1
DHCP4.OPTION[2]: requested_nis_domain = 1
DHCP4.OPTION[3]: requested_time_offset = 1
(ずらずら)
</pre>
<p>設定を書き換えるには、nmcli connection modify コマンドを利用します。 書き換えた設定は一度接続を down / up させないと反映されません。</p>
<p>ここの例は、DHCPを無効にして、手動でアドレスを設定する例を示しています。ipv4.addressesは、"アドレス/プレフィックス長 デフォルトゲートウェイ"という形で指定します。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ sudo nmcli connection modify eno16777736 ipv4.method manual ipv4.addresses "172.16.105.201/24 172.16.105.2"
[yuryu@centos7 ~]$ # con mod は connection modify の省略形です
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.dns "8.8.8.8 8.8.4.4"
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.dns-search "local"
[yuryu@centos7 ~]$ nmcli --fields ipv4 connection show eno16777736
ipv4.method: manual
ipv4.dns: 8.8.8.8, 8.8.4.4
ipv4.dns-search: local
ipv4.addresses: { ip = 172.16.105.201/24, gw = 172.16.105.2 }
ipv4.routes:
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
ipv4.dhcp-send-hostname: yes
ipv4.dhcp-hostname: --
ipv4.never-default: no
ipv4.may-fail: yes
[yuryu@centos70 ~]$ # connection down, connection up をそれぞれ c d, c u と省略できます
[yuryu@centos70 ~]$ sudo nmcli c d eno16777736 ; sudo nmcli c u eno16777736
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14)
[yuryu@centos7 ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
search local
nameserver 8.8.8.8
nameserver 8.8.4.4
</pre>
<p>設定の一部を消去したり、追加したりするには、フィールド名の前に -, + をつけます。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 -ipv4.dns 1
[yuryu@centos7 ~]$ nmcli --fields ipv4.dns con show eno16777736
ipv4.dns: 8.8.8.8
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 +ipv4.dns 8.8.4.4
[yuryu@centos7 ~]$ nmcli --fields ipv4.dns con show eno16777736
ipv4.dns: 8.8.8.8, 8.8.4.4
</pre>
<p>DHCPに戻すには次のようににします。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.method auto
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.dns '' ipv4.dns-search '' ipv4.addresses ''
</pre>
<p>デバイスの一覧を表示するには nmcli deviceと入力します。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ nmcli device
DEVICE TYPE STATE CONNECTION
eno16777736 ethernet connected eno16777736
lo loopback unmanaged --
</pre>
<p>また、このデバイスに紐付いている情報を表示するには、nmcli device showコマンドを利用します。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ nmcli device show eno16777736
GENERAL.DEVICE: eno16777736
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:0C:29:00:00:00
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: eno16777736
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/15
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: ip = 172.16.105.141/24, gw = 172.16.105.2
IP4.DNS[1]: 172.16.105.2
IP4.DOMAIN[1]: localdomain
IP6.ADDRESS[1]: ip = fe80::20c:29ff:feb3:34dd/64, gw = ::
</pre>
<p>NetworkManagerとは関係ありませんが、従来ifconfigで見れていた、インタフェースごとの通信量を見るには、ipコマンドを使うと可能です。</p>
<pre class="brush: bash;">
[yuryu@centos7 ~]$ ip -s l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
340 4 0 0 0 0
TX: bytes packets errors dropped carrier collsns
340 4 0 0 0 0
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:00:00:00 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
7926980 13565 0 0 0 0
TX: bytes packets errors dropped carrier collsns
1143281 7208 0 0 0 0
</pre>
<p>新規の接続の追加はconnection addコマンドで行います。typeでイーサネットを示すethを、ifnameでインタフェース名を、con-nameで新しく追加する接続名を追加します。</p>
<pre class="brush: bash;">
# nmcli c add type eth ifname eth1 con-name eth1
# nmcli c mod eth1 ipv4.method manual ipv4.addresses "192.168.122.69/24 192.168.122.1"
# nmcli c down eth1
# nmcli c up eth1
</pre>
<p>いかがでしょうか。対応さえわかれば、ここ一カ所で操作することが可能で、あっちこっち見なくてよくなるので、意外と簡単ということがわかります。是非disableにせず、使ってみましょう。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com1tag:blogger.com,1999:blog-1525000888954072121.post-39009184191794835762014-07-08T10:57:00.001+09:002014-07-09T18:58:25.491+09:00CentOS 7 がリリースされたので、情報をまとめてみたよ!<p>CentOS の新しいメジャーリリース、 <a href="http://lists.centos.org/pipermail/centos-announce/2014-July/020393.html">CentOS 7がリリースされました</a>!</p>
<p>お断り:ここの情報は非公式なもので、ベストエフォートで提供されています。</p>
<h2>国内ミラー状況</h2>
<p>公式サイトには掲載されていませんが、国内の有力ミラーサイトがすでにミラーを終えています。</p>
<ul>
<li><a href="http://ftp.iij.ad.jp/pub/linux/centos/7/">http://ftp.iij.ad.jp/pub/linux/centos/7/</a></li>
<li><a href="http://ftp.ne.jp/Linux/distributions/CentOS/7/">http://ftp.ne.jp/Linux/distributions/CentOS/7/</a></li>
<li><a href="http://ftp.riken.jp/Linux/centos/7/">http://ftp.riken.jp/Linux/centos/7/</a></li>
<li><a href="http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/">http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/</a></li>
</ul>
<h2>バージョン番号の変更</h2>
<p>今回からバージョン番号が 7.0-1406、というように、末尾に数字がつくようになりました。 7.0 は upstream である Red Hat Enterprise Linux 7 (RHEL 7)に対応、RHEL 7にupdateが出ると、対応するように 7.1, 7.2 と増加します。1406はリリースされた年月を表します。これは、更新されたメディアイメージをクラウドやコンテナに持って行きやすくするために付いています。ですので、同じ7.0ベースでも、末尾の年月が新しい方は新しいパッケージを含んでいるということになります。</p>
<h2>CentOS 7の変更点</h2>
<p>RHEL 7にほぼ準拠しますが、<a href="http://wiki.centos.org/Manuals/ReleaseNotes/CentOS7">リリースノート</a>には以下の項目が示されています。</p>
<ul>
<li>カーネルが 3.10.0 に更新</li>
<li>Linuxコンテナのサポート</li>
<li>Open VMware Toolsと3Dグラフィックドライバが標準装備</li>
<li>OpenJDK 7が標準のJDKに</li>
<li>6.5から7.0にそのまま更新可能</li>
<li>ext4とXFSでLVM snapshotが利用可能</li>
<li>systemd, firewalld, GRUB2の採用</li>
<li>XFSが標準のファイルシステムに</li>
<li>iSCSIとFCoEがカーネル空間に移動</li>
<li>PTPv2, 40GbE, 互換性のあるハードウェアでのUEFI Secure bootのサポート</li>
</ul>
<p>あわせて読みたい:<a href="http://www.slideshare.net/moriwaka/red-hat-enterprise-linux-7">
Red Hat Enterprise Linux 7 の新機能</a></p>
<h2>FAQ</h2>
<p>なぜか公式のFAQ一覧にリンクが張られていませんが、<a href="http://wiki.centos.org/FAQ/CentOS7">CentOS 7用のFAQが既に存在します</a>。詳しくはそちらを参照していただくとして、結構重要そうなものを軽くピックアップ。</p>
<ul>
<li>boot.iso は netinstall.iso に名前が変わりました</li>
<li>イーサネットのネットワークインタフェースは標準では有効になりません</li>
<li>/etc/sysconfig/network-scripts/ を直接編集するのではなく、NetworkManagerを使いましょう(追記: <a href="http://blog.yuryu.jp/2014/07/networkmanager-nmtui-nmcli.html">基本的な設定方法をまとめました</a>)</li>
<li>ネットワークインタフェースの名前が変わってます。慣れましょう</li>
<li>32bit CPUは切り捨てられました</li>
<li>IPv6 を無効にするのは時代遅れのテクです</li>
</ul>
<h2>既知の問題</h2>
<p>リリースノートに書かれている既知の問題は次の通り(2014年7月8日現在)。</p>
<ul><li>ネットワークインタフェースが標準では有効にならない。これはRHEL 7での変更によるもので、仕様変更である。<a href="http://wiki.centos.org/FAQ/CentOS7#ethernet">詳しくはFAQを参照(英語)</a></li>
<li>インストーラーは最低406MBのメモリを要求する。CentOS 7の必要メモリ量は 512MB である</li>
<li>VirtualBoxのUEFIモードで、ファイルシステムの暗号化を有効にした状態でインストールすると、システムが起動しない。<a href="http://bugs.centos.org/view.php?id=7293">バグレポートを参照のこと</a></li>
<li>画面の解像度が800x600より小さい場合に、インストール画面の下部のボタンが途切れる</li>
<li>.isoイメージのルートディレクトリにあるEULAが古く、テスト用のまま。<a href="http://mirror.centos.org/centos/7/os/x86_64/EULA">正しいEULA</a>はインストール後に /usr/share/centos-release/EULA で参照可能</li>
</ul>
<p><a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/part-Red_Hat_Enterprise_Linux-7.0_Release_Notes-Known_Issues.html">UpstreamであるRHEL 7のknown issuesも参照のこと(英語)</a></p>
Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-60239560637064085302014-06-10T18:52:00.000+09:002014-06-11T00:37:41.585+09:00x86 Linux上で sysenter 命令を使ってシステムコールを呼び出す方法<p>x86(32bit)環境で、どのようにシステムコールが呼ばれているのかを調べてみました。</p>
<h2>int 80h</h2>
<p>昔からあるシステムコールの呼び方で、eax レジスタにシステムコールの番号をセットした後、ソフトウェア割り込みの int 80h をコールするとシステムコールが呼ばれます。これはどのバージョンの Linux でも使えます。ただし、ソフトウェア割り込みは遅いのが欠点です。</p>
<h2>sysenter</h2>
<p>最近のIntelのプロセッサはすべて sysenter というシステムコール専用の命令が用意されています。この命令は int 80h に比べるとかなりシンプルで、予め設定されたシステムコールハンドラのアドレスをCS:EIPとSS:ESPにセットして、特権モードに切り替えて実行を再開するのみです。詳しくは「<a href="http://www.marbacka.net/asm64/arkiv/int2e_sysenter_syscall.html">64ビットCPU(AMD64+EM64T)でアセンブラ int 2E/sysenter/syscall考察</a>」が参考になります。</p>
<p>さてここでのポイントは、sysenter命令はユーザーモード空間での実行アドレスをスタックやレジスタに退避しないということです。通常の call 命令や int 80h 命令の場合は、スタックに CS:EIP を push してから jmp します。sysenter ではどこにも保存されません。ではsysexitはどのように戻っているのでしょうか。sysexitは</p>
<ol>
<li>ESP ← ECX</li>
<li>EIP ← EDX</li>
<li>CS ← (MSR に書かれたセレクタ + 16) OR 3</li>
<li>SS ← CS + 8</li>
</ol>
<p>的なことをやって ring 3 に戻ります。</p>
<p>さてここで疑問ですが、sysenterで保存しないのにどうやってsysexitでESPとEIPを復元しているのでしょうか。不思議ですよね。</p>
<p>答えは、「sysenterを呼び出すのは決められたサブルーチンに限る」です。少なくとも Linux ではユーザープログラムから直接 sysenter を呼び出すことはありません。戻るときは、カーネルがその「決められたサブルーチン」の値を直接指定して戻ります。そこから改めてユーザープログラムに ret します。</p>
<p>ここで、アセンブリで直接 syscall を呼び出すサンプルプログラムを見てみましょう。</p>
<script type="syntaxhighlighter" class="brush: c"><![CDATA[
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
unsigned int gs10;
pid_t pid, pid10;
FILE *fp;
char buf[256];
__asm__ volatile (
"movl %%gs:0x10, %%eax"
: "=a"(gs10)
);
printf("syscall point = %p\n", gs10);
pid = getpid();
__asm__ volatile ( "\t"
"movl $20, %%eax\n\t"
"call *%%gs:0x10\n\t"
: "=a"(pid10)
);
printf("pid = %u, pid10 = %u\n", pid, pid10);
fp = fopen("/proc/self/maps", "r");
while(fgets(buf, sizeof(buf), fp) != NULL){
fputs(buf, stdout);
}
fclose(fp);
}
]]></script>
<p>実行例は次のようになります。</p>
<pre class="brush: text;">
$ ./a.out
syscall point = 0xb775a414
pid = 13734, pid10 = 13734
08048000-08049000 r-xp 00000000 fd:00 812670 /home/yuryu/src/a.out
08049000-0804a000 r--p 00000000 fd:00 812670 /home/yuryu/src/a.out
0804a000-0804b000 rw-p 00001000 fd:00 812670 /home/yuryu/src/a.out
09370000-09391000 rw-p 00000000 00:00 0 [heap]
b7568000-b7569000 rw-p 00000000 00:00 0
b7569000-b7721000 r-xp 00000000 fd:00 391110 /usr/lib/libc-2.18.so
b7721000-b7723000 r--p 001b8000 fd:00 391110 /usr/lib/libc-2.18.so
b7723000-b7724000 rw-p 001ba000 fd:00 391110 /usr/lib/libc-2.18.so
b7724000-b7727000 rw-p 00000000 00:00 0
b7738000-b773b000 rw-p 00000000 00:00 0
b773b000-b775a000 r-xp 00000000 fd:00 397102 /usr/lib/ld-2.18.so
b775a000-b775b000 r-xp 00000000 00:00 0 [vdso]
b775b000-b775c000 r--p 0001f000 fd:00 397102 /usr/lib/ld-2.18.so
b775c000-b775d000 rw-p 00020000 fd:00 397102 /usr/lib/ld-2.18.so
bfed0000-bfef1000 rw-p 00000000 00:00 0 [stack]
</pre>
<p>gs:[10h]に保存されているアドレスに対して call すると、システムコールが実行されます。この例の場合、0xb775a414 が保存されていますが、これはちょうど "vdso" と呼ばれている領域が該当します。この vdso というのは、カーネルがユーザープログラムから使えるように、共有ライブラリとして自動的にリンクしている領域です。</p>
<p>gs:[10h] に含まれているコードを見てみましょう。</p>
<script type="syntaxhighlighter" class="brush: text"><![CDATA[
$ gdb ./a.out
GNU gdb (GDB) Fedora 7.7.1-13.fc20
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./a.out...done.
(gdb) start
Temporary breakpoint 1 at 0x804856c: file gscall.c, line 12.
Starting program: /home/yuryu/src/a.out
Temporary breakpoint 1, main () at gscall.c:12
12 __asm__ volatile (
Missing separate debuginfos, use: debuginfo-install glibc-2.18-12.fc20.i686
(gdb) n
16 printf("syscall point = %p\n", gs10);
(gdb)
syscall point = 0xb7ffd414
17 pid = getpid();
(gdb) disas 0xb7ffd414
Dump of assembler code for function __kernel_vsyscall:
0xb7ffd414 <+0>: push %ecx
0xb7ffd415 <+1>: push %edx
0xb7ffd416 <+2>: push %ebp
0xb7ffd417 <+3>: mov %esp,%ebp
0xb7ffd419 <+5>: sysenter
0xb7ffd41b <+7>: nop
0xb7ffd41c <+8>: nop
0xb7ffd41d <+9>: nop
0xb7ffd41e <+10>: nop
0xb7ffd41f <+11>: nop
0xb7ffd420 <+12>: nop
0xb7ffd421 <+13>: nop
0xb7ffd422 <+14>: int $0x80
0xb7ffd424 <+16>: pop %ebp
0xb7ffd425 <+17>: pop %edx
0xb7ffd426 <+18>: pop %ecx
0xb7ffd427 <+19>: ret
End of assembler dump.
]]></script>
<p>レジスタを保存して sysenter しているコードが見つかりました。EDXと ECXを保存しているのは、上述の通り sysexit で使用するからです。ebp を保存しているのは、システムコールからユーザースタックにアクセスすることがあるからです。 nop の後に int 80h が見えますが、これはシステムコールをリスタートする時に使うもので、通常はここを通らずその後の pop ebp から実行が再開されます。</p>
<p>このvdsoのアドレスはカーネルが知っているので、カーネルは決め打ちでEDXとECXをセットすることができます。どこに戻るかの情報は</p>
<script type="syntaxhighlighter" class="brush: c"><![CDATA[
struct thread_info {
struct task_struct *task; /* main task structure */
struct exec_domain *exec_domain; /* execution domain */
__u32 flags; /* low level flags */
__u32 status; /* thread synchronous flags */
__u32 cpu; /* current CPU */
int saved_preempt_count;
mm_segment_t addr_limit;
struct restart_block restart_block;
void __user *sysenter_return;
unsigned int sig_on_uaccess_error:1;
unsigned int uaccess_err:1; /* uaccess failed */
};
]]></script>
<p>thread_info 構造体の sysenter_return に入ってます。これがシステムコールハンドラでECXにセットされます。</p>
<p>最後の謎は gs:[10h] って何?というところですが、Linux の x86 では gs は thread local storage を指しているそうです。で、ここに glibc が起動時に vdso のこのアドレスを探してきて保存しているようでした。</p>
<p>というわけで sysenter って int 80h のようなノリで使うものじゃ無いっぽいですね。 Windows も同じような仕組みだったのでしょうか。 x64 で使用している syscall 命令は、RCX に RIP を保存するので、ユーザープログラムのどこからでも syscall できるみたいです。</p>
<h2>参考文献</h2>
<ul>
<li><a href="http://wiki.bit-hive.com/north/pg/vsyscall">vsyscall - Linuxの備忘録とか・・・(目次へ)</a></li>
<li><a href="http://wiki.osdev.org/SYSENTER">SYSENTER - OSDev Wiki</a></li>
<li><a href="http://www.win.tue.nl/~aeb/linux/lk/lk-4.html">The Linux kernel: System Calls</a></li>
</ul>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com1tag:blogger.com,1999:blog-1525000888954072121.post-57829968441023892152014-05-08T18:32:00.000+09:002014-05-08T21:30:19.664+09:00LinuxでTCP_DEFER_ACCEPTが有効でもaccept後readできない理由<p><a href="http://blog.nomadscafe.jp/2014/05/listenbacklogtcp-defer-accept.html">listen()のbacklogが不足した際のTCP_DEFER_ACCEPTの動作について - blog.nomadscafe.jp</a>という記事の中で、listen backlog があふれた後に accept(2) すると、その後の read(2) が EAGAIN を返したり、接続が不安定になるという事象が説明されていました。気になったので調べてみたことをまとめます。</p>
<p>結論から言うとこれはLinuxの仕様です。manのtcp(7)を見ると、</p>
<blockquote>
<p> TCP_DEFER_ACCEPT (since Linux 2.4)</p>
<p> Allow a listener to be awakened only when data arrives on the socket. Takes an integer value (seconds), this can bound the maximum number of attempts
TCP will make to complete the connection. This option should not be used in code intended to be portable.</p>
</blockquote>
<p>「TCP_DEFER_ACCEPTで指定した秒数を過ぎるまではacceptを遅らせるよ!」と書いてあります。つまりこれを過ぎると、データが到着していなくてもacceptできてしまう場合があります。</p>
<p>なんでこんなことになっているのか、パッチを見てみましょう。<a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/net/ipv4?id=d1b99ba41d6c5aa1ed2fc634323449dd656899e9">tcp: accept socket after TCP_DEFER_ACCEPT period</a>というパッチにヒントがあります。要約すると</p>
<blockquote>
<p>タイムアウトでSYN-ACKを再送するたびにACKを返してくるクライアントに対しては、TCP_DEFER_ACCEPTで指定した秒数を過ぎたらESTABLISHEDにしたほうが良い。そうしたらサーバープログラムがもっと待つか、エラーとして接続を閉じるか選ぶことができる。副作用としてはaccept(2)したら必ずデータがあると思ってるアプリケーションに対しては副作用があるけど、もともとTCP_DEFER_ACCEPTが有効でも無効でも動作するように設計するほうが良いよね。</p>
</blockquote>
<p>とあります。</p>
<p>そもそもTCP_DEFER_ACCEPTはどのような動作になっているのでしょうか? tcp_minisocks.c の tcp_check_req() を見ると、単にACKを落とすだけの処理になっています。</p>
<pre class="brush: c">
/* While TCP_DEFER_ACCEPT is active, drop bare ACK. */
if (req->num_timeout < inet_csk(sk)->icsk_accept_queue.rskq_defer_accept &&
TCP_SKB_CB(skb)->end_seq == tcp_rsk(req)->rcv_isn + 1) {
inet_rsk(req)->acked = 1;
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPDEFERACCEPTDROP);
return NULL;
}
</pre>
<p>この状態でクライアントが次にデータを送ってくると、そのままSYN_RECVからESTABLISHEDにしてしまうようになっています。言い換えると、SYN_RECVの状態のソケットでもデータを受信する場合があり、ESTABLISHEDな状態になるということです。ここでaccept backlogがいっぱいだとlisten overflowになり、だまってパケットが落とされます。この時サーバーはSYN_RECVのままですが、クライアントはESTABLISHEDという奇妙なことになります。サーバー側はタイムアウトを迎えSYN+ACKを再送します。クライアント側はそれに対応するACKを返送しますが、やっぱり無視されます。そのうちクライアントは再送タイムアウトを迎えデータを再送します。それでもaccept backlogがいっぱいだと再びパケットが落ちます。そのうち指定秒数過ぎた後にSYN+ACKがサーバー側から再送(この時点ではソケットの状態はSYN_RECV)されてきてクライアントがACKを返し、さらにそのタイミングでaccept backlogに空きがあった場合にデータの存在しないソケットができる事になります。クライアントは再送タイムアウトを迎えた後データを送信します。</p>
<p>追記: ブコメの指摘で、頻繁にSYN+ACK を再送するのは古い動作だということがわかりました。<a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0c3d79bce48034018e840468ac5a642894a521a3">Patch: tcp: reduce SYN-ACK retrans for TCP_DEFER_ACCEPT</a>
この場合、SYN+ACKが最初に再送されるのはTCP_DEFER_ACCEPTでの指定秒数が経過してからとなります。</p>
<p>というわけで、 TCP_DEFER_ACCEPT はあくまで「遅らせる」だけなので、accept(2)すれば必ずread(2)できるということを保証しないということでした。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-59505025870649117702014-03-28T17:54:00.000+09:002014-03-28T17:54:02.906+09:00WebScaleSQLとは何か(まとめと想像)<p><a href="http://webscalesql.org/">WebScaleSQL</a>が公開されました。 これはFacebook, Google, LinkedInそしてTwitterのMySQLエンジニアが、大規模環境で使用する際に必要な変更点をまとめて、違う名前をつけてリリースしたものです。</p>
<h2>MySQLとの違い</h2>
<p><a href="http://webscalesql.org/faq.html">FAQ</a>にまとまってるものと、<a href="https://github.com/webscalesql/webscalesql-5.6/commits/webscalesql-5.6.16">GitHubのcommits</a>を見ればなんとなくわかります。</p>
<ul><li>変更点それぞれについて全部のテストを自動で走らせるようなフレームワークを追加</li>
<li>ストレステストと自動化された性能テストを追加</li>
<li>テストを整理して、安全な変更が余計なテストを壊さないようにした</il>
<li>NUMA interleave、innodb バッファプールフラッシュの最適化、いくつかのクエリに対する最適化など性能改善</li>
<li><a href="https://github.com/webscalesql/webscalesql-5.6/commit/4142091449dd439d473ab22f2e5d60b326e01dc7">super_read_only</a>と、1秒以下の精度でタイムアウトを指定するといった、web scaleで必要な変更</li>
</ul>
<p>super_read_only とは、SUPER な権限を持った人でも read only にしてしまう機能のようです。</p>
<h2>なぜ独立のブランチなのか</h2>
<p>WebScaleSQLと新しく名前がついた割にはそこまで大きな変更点はなく、なぜリリースされたのかと疑問に思いました。私の想像ですが次のような感じなのかなぁと思っています。根拠なしなので間違ってたらごめんなさい。</p>
<ul>
<li>お互いにエンジニア同士が交流する中、「それウチも困ってる!」というのが増えた</li>
<li>Oracle にパッチを投げるには<a href="https://wikis.oracle.com/display/mysql/Contributing+Code+to+MySQL">少し面倒な手続きが必要</a></li>
<li>もう少し身軽に、様々な機能を取り込んで速いペースで試せる共通基盤がほしい</li>
<li>そうだ、名前をつけて公開してしまえば開発も加速できるしライセンスもはっきり</li>
</ul>
<p>もう一度書きますが根拠レスです。あとはテストが彼らの求める水準としてはcommunity版には含まれていなくて、そういうのをもうちょっと気軽にメンテしておきたいんじゃないかとも思いました。</p>
<h2>今後の見通し</h2>
<p>しばらくはMySQLの最新プロダクションリリースに対するパッチセットのような感じで、"fork"と言わず"branch"と名乗って開発を続けるようです。コミットを見ていると1年以上前のコミットも多くて、とりあえずまとめてみました、ここからスタートですという感じに受け止めました。</p>
<p>最近また新しい機能の追加がぽつぽつ行われているようなので、しばらくするともう少し変わったものになるのかもしれません。</p>
<h2>蛇足</h2>
<p>きちんとかっこいいWebを作って、プレスリリースも出して、ニュースにもなってというのはすごいなぁと思いました。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-71542257609708245752014-03-17T20:00:00.000+09:002014-03-17T20:22:34.353+09:00JAWS Days 2014 で「最強のAWS」について発表しました<p><a href="jawsdays2014.jaws-ug.jp/">JAWS Days 2014</a>に登壇させていただき、「最強のAWS」というテーマで発表しました。</p>
<p>モデレーターの<a href="https://twitter.com/con_mame">@con_mame</a>さんからは「AWSのここが良くなればいいのに」とか「この機能が無いのはどうよ」みたいな話をしてほしいと言われてました。でもAWSの怖いところは、「この機能があれば良いのに」と思っていると気づかないうちに実装されていたり、あまりに機能が多いので「実は存在した」というオチがありそうなところ。話題の選定には気を遣いましたが、結果的にAWSの中の人に「いいね!」と言ってもらえてよかったです。</p>
<p>今回の話題は大きく2つ。ひとつは「レイテンシ」、もうひとつは「テスト」です。レイテンシは、やはりクラウドや仮想技術につきものというか、どうしても物理環境よりも長くなってしまうので「もうひと押し!」のような考えで書きました。発表後に聞いたのですが、c3インスタンスでplacement groupを有効にすると非常にレイテンシが小さくなるとのこと。試してみたいですね。</p>
<p>もう一つの話題は「テスト」です。AWSのWeb Consoleはすごく充実しているけど、実はWebインタフェースで作業するのって"Infrastructure as Code"に反していると思うんですよね。再利用できないし、事前のレビューもできない。そこで多くの利用者はSDKを使って自動化していると思うんですけど、もう少し中間的な、お手軽に"Code"っぽいことができたらなぁという発想です。</p>
<p>発表に用いたスライドは以下です。</p>
<iframe src="http://www.slideshare.net/slideshow/embed_code/32345966" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px 1px 0; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/Yuryu/jaws-days-2014-what-makes-aws-invincible" title="What makes AWS invincible? from JAWS Days 2014" target="_blank">What makes AWS invincible? from JAWS Days 2014</a> </strong> from <strong><a href="http://www.slideshare.net/Yuryu" target="_blank">Haruka Iwao</a></strong> </div>
<p>当日の参加者の皆様と関係者の皆様、ありがとうございました。</p>
<h2>See also</h2>
<ul>
<li><a href="http://d.conma.me/entry/2014/03/17/192848">JAWS DAYS 2014で「これで最強のAWSに」のセッションをやりました - まめ畑</a></li>
<li><a href="http://blog.takus.me/2014/03/17/jawsdays-2014/">#jawsdays の #最強のAWS で「ぜんぶ AWS でやらないワケ」という話をしてきた - TAKUMI SAKAMOTO'S BLOG</a>
</ul>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-29711608433341873062014-01-28T09:35:00.000+09:002014-01-28T10:21:17.821+09:00somaxconnの上限値は65535<p>Linuxのネットワークパラメータの一つに、net.core.somaxconnというのがあります。これはlisten(2)の第二引数backlogの上限値となっています。このsomaxconnは一見intに見えますが、実はunsigned shortの範囲の数値しか受け付けません。それを超える数値を入れると黙って切り捨てられます。つまり</p>
<ul>
<li>-1→65535</li>
<li>0→0</li>
<li>65535→65535</li>
<li>65536→0</li>
<li>65537→1</li>
</ul>
<p>と同じような動作を内部的にします。なので、この値は絶対に0~65535の範囲を超えてはいけません。以下、詳しい説明です。</p>
<p>おことわり: この仕様はLinux 3.11以降<a href="https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/net/core/sysctl_net_core.c?id=5f671d6b4ec3e6d66c2a868738af2cdea09e7509">変更されており</a>、範囲外の数値を設定できないようになっています。ここに書いてある内容が再現するのは、Linux 3.10以前の古いカーネルのみです。</p>
<p>まずsysctlの定義ですが</p>
<p><a href="http://lxr.free-electrons.com/source/net/core/sysctl_net_core.c?v=3.10#L201">net/core/sysctl_net_core.c</a></p>
<pre class="brush: c;">
static struct ctl_table netns_core_table[] = {
{
.procname = "somaxconn",
.data = &init_net.core.sysctl_somaxconn,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec
},
</pre>
<p><a href="http://lxr.free-electrons.com/source/include/net/netns/core.h?v=3.10#L11">include/net/netns/core.h</a></p>
<pre class="brush: c;">
struct netns_core {
/* core sysctls */
struct ctl_table_header *sysctl_hdr;
int sysctl_somaxconn;
struct prot_inuse __percpu *inuse;
};
</pre>
<p>以上のようにしっかりと"int"と書かれています。</p>
<p>さて、この値がどう使われているかというと、listen(2)でbacklogの最大値として利用された後inet_listenに引き渡されます。</p>
<p><a href="http://lxr.free-electrons.com/source/net/ipv4/af_inet.c#L195">net/ipv4/af_inet.c</a></p>
<pre class="brush: c;">
int inet_listen(struct socket *sock, int backlog)
{
struct sock *sk = sock->sk;
unsigned char old_state;
int err;
(途中省略)
sk->sk_max_ack_backlog = backlog;
err = 0;
out:
release_sock(sk);
return err;
}
</pre>
<p>という感じで、socket.sk_max_ack_backlogに渡されています。この値の宣言を見ると</p>
<p><a href="http://lxr.free-electrons.com/source/include/net/sock.h#L295">include/net/sock.h</a></p>
<pre class="brush: c;">
struct sock {
(途中省略)
unsigned short sk_ack_backlog;
unsigned short sk_max_ack_backlog;
</pre>
<p>unsigned shortとなっています。intをunsigned shortにそのまま代入してますね。なので、一番上に書いたようにオーバーフローします。黙ってオーバーフローします。net.core.somaxconnの値は正しくセットされるのが余計にたちが悪いですね。</p>
<p>ところでbacklog=0ってなんでしょうか?全くacceptできないように思えますが、実はキューの長さは</p>
<p><a href="http://lxr.free-electrons.com/source/include/net/sock.h?v=3.10#L723">include/net/sock.h</a></p>
<pre class="brush: c;">
static inline bool sk_acceptq_is_full(const struct sock *sk)
{
return sk->sk_ack_backlog > sk->sk_max_ack_backlog;
}
</pre>
<p>という感じで不等号で比較されているので、最低一つはaccept待ちのソケットが使用できます。</p>
<p>これはTCPのコードですが、unix domain socketでも似たような事象が起こります。</p>
<p>あと何年かすれば役に立たなくなる感じの知識ではありますが、今のところsomaxconnは16bitです。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-90328128226334265472014-01-22T20:05:00.001+09:002014-01-22T20:05:42.186+09:00ssh で id_rsa と違うキーの id_rsa.pub が置いてあるとログイン出来ない<p>sshでログインする際にローカルホストで使用する鍵は.ssh/id_rsaですが、この時このid_rsaと異なる鍵の公開鍵がid_rsa.pubとして置かれていると、そちらを参照してしまいログインできないという状況が発生しました。</p>
<p>再現手順は以下のとおり。</p>
<ol><li>ssh-keygen -t rsa -b 2048 で適当に鍵を作る</li>
<li>mv .ssh/id_rsa .ssh/id_rsa2 としてバックアップ</li>
<li>ssh-keygen -t rsa -b 2048 でもう一つ鍵を作る</li>
<li>mv .ssh/id_rsa2 .ssh/id_rsa として秘密鍵を戻す</li>
</ol>
<p>これで正しい秘密鍵を見ているはずなのに、ログインできなくなります。デバッグ出力には</p>
<pre class="brush: text;">
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/yuryu/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/yuryu/.ssh/id_dsa
debug1: Trying private key: /home/yuryu/.ssh/id_ecdsa
debug1: Next authentication method: password
</pre>
<p>と出力されています。この「Offering RSA public key」が、.pubを見ているという出力です。 もし.pubが存在しないと</p>
<pre class="brush: text;">
debug1: Next authentication method: publickey
debug1: Trying private key: /home/yuryu/.ssh/id_rsa
debug1: read PEM private key done: type RSA
</pre>
<p>といったログ出力になります。</p>
<p>この公開鍵がなぜ使われているのかまでは調べていませんが、おそらく公開鍵の計算をサボるために、公開鍵がすでに存在したら読み込むといった感じで使っているのではないかと思います。</p>
<p>ぐぐってもパーミッションの設定を間違えているケースばかりで、このハマり方をしている人はいませんでした。無駄に2時間ぐらい悩みました...</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com2tag:blogger.com,1999:blog-1525000888954072121.post-55935755652119111162014-01-15T13:02:00.000+09:002014-01-15T13:02:32.735+09:00Linux Kernel Updates Vol.2013.12 の Kindle版を出しました<p><a href="http://blog.yuryu.jp/2013/12/c85-preview.html">コミケ85で頒布した</a>、Linux Kernel Updates Vol.2013.12 の Kindle版を出しました。</p>
<p><a href="https://www.amazon.co.jp/dp/B00HU81QOY">Linux Kernel Updates 2013.12の購入はこちらから!<img border="0" src="http://2.bp.blogspot.com/-vz2NaE0akR8/UiKwQCRtfDI/AAAAAAAAKVo/Emq70llbzJg/s1600/assocbutt_or_buy._V371070157_.png" style="vertical-align: middle;" /></a></p>
<p>以下は冊子版のプレビューです</p>
<h2>目次</h2>
<ul>
<li>What's New in Linux 3.11?</li>
<li>What's New in Linux 3.12?</li>
<li>TCP/IPチューニング特集</li>
</ul>
<p>
<a href="http://2.bp.blogspot.com/-jGDyjuvZpIY/UrwsWNyxiII/AAAAAAAALqo/jAXP1JzOu3M/s1600/c85-preview0.png" imageanchor="1"><img border="0" height="320" src="http://2.bp.blogspot.com/-jGDyjuvZpIY/UrwsWNyxiII/AAAAAAAALqo/jAXP1JzOu3M/s320/c85-preview0.png" width="235" /></a><a href="http://3.bp.blogspot.com/-urXTIUZ0TPU/UrwsV3oKg9I/AAAAAAAALqU/8r7GpN69OoQ/s1600/c85-preview1.png" imageanchor="1"><img border="0" height="320" src="http://3.bp.blogspot.com/-urXTIUZ0TPU/UrwsV3oKg9I/AAAAAAAALqU/8r7GpN69OoQ/s320/c85-preview1.png" width="216" /></a><a href="http://4.bp.blogspot.com/-1mZi1Bto6pY/UrwsV6VbaZI/AAAAAAAALqY/mxkV2w0GYME/s1600/c85-preview2.png" imageanchor="1"><img border="0" height="320" src="http://4.bp.blogspot.com/-1mZi1Bto6pY/UrwsV6VbaZI/AAAAAAAALqY/mxkV2w0GYME/s320/c85-preview2.png" width="211" /></a><a href="http://4.bp.blogspot.com/-wL7YcRlw9BI/UrwsWuRiprI/AAAAAAAALqc/he3gmIDkr0Y/s1600/c85-preview3.png" imageanchor="1"><img border="0" height="320" src="http://4.bp.blogspot.com/-wL7YcRlw9BI/UrwsWuRiprI/AAAAAAAALqc/he3gmIDkr0Y/s320/c85-preview3.png" width="216" /></a>
</p>
<p>TCP/IPチューニング特集はsysctlで設定できるパラメーターについて詳しく説明しています。紛らわしい設定、間違えやすい設定についてカーネルコードを参照しながら正確な説明を心がけました。</p>
<p><a href="https://www.amazon.co.jp/dp/B00HU81QOY">Linux Kernel Updates 2013.12の購入はこちらから!<img border="0" src="http://2.bp.blogspot.com/-vz2NaE0akR8/UiKwQCRtfDI/AAAAAAAAKVo/Emq70llbzJg/s1600/assocbutt_or_buy._V371070157_.png" style="vertical-align: middle;" /></a></p>
Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-54572026092312390642014-01-09T19:52:00.001+09:002014-01-09T19:52:30.927+09:00VMware Fusionの中からPXE Bootする方法<p>VMware Fusionで仮想マシンを立ち上げた時に、外にあるサーバーからPXE Bootしたいと思いました。ところが普通にやってもfilenameやnext-serverが取れないので、起動できません。いろいろググったところ、下記のようにするのがよさそうでした。</p>
<h2>dhcpd.confを編集</h2>
<p>/Library/Preferences/VMware Fusion/vmnet8/dhcpd.conf を編集します。vmnet8というのは使っているネットワークのインタフェースになります。設定ファイルをのぞいてみて、IPのレンジが現在使っているものと一致すればいいと思います。私の環境にはvmnet1とvmnet8がありました。</p>
<p>dhcpd.confを開くと</p>
<pre>
###### VMNET DHCP Configuration. Start of "DO NOT MODIFY SECTION" #####
</pre>
<p>という行がありますから、その<strong>手前</strong>に</p>
<pre>
allow booting;
filename "pxelinux.0";
next-server 192.168.123.45;
</pre>
<p>という3行を追加します。 next-server の右側はPXE用のサーバーのアドレスです。</p>
<h2>dhcpdを再起動</h2>
<p>一番簡単な方法はOSを再起動することです。もし何らかの理由で再起動できない時は、psすると</p>
<pre>
root 581 0.0 0.0 2467008 468 ?? Ss 7:36PM 0:00.00 /Applications/VMware Fusion.app/Contents/Library/vmnet-dhcpd -s 7 -cf /Library/Preferences/VMware Fusion/vmnet8/dhcpd.conf -lf /var/db/vmware/vmnet-dhcpd-vmnet8.leases -pf /var/run/vmnet-dhcpd-vmnet8.pid vmnet8
</pre>
<p>というようなプロセスがいるので、これを kill して同じパラメータで起動しなおせば動くと思います。</p>
<h2>まとめ</h2>
<p>以上の手順でVMware Fusion上の仮想マシンからPXE Bootすることができました。</p>Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com0tag:blogger.com,1999:blog-1525000888954072121.post-32321063228998263702013-12-26T22:23:00.000+09:002013-12-26T22:26:09.332+09:00コミケ85にLinux本を出します(3日目西せ18a)<p>コミケ85に「<a href="https://webcatalog.circle.ms/Circle/11018436">低級はっかーズ</a>」として出展します。3日目(火曜日)西せ18aです。<br /></p>
<p>今回の新刊は "Linux Kernel Updates 2013.12" です。価格は300円です。内容は
<ul>
<li>What's New in Linux 3.11?</li>
<li>What's New in Linux 3.12?</li>
<li>TCP/IPチューニング特集</li>
</ul>
です。下にプレビューを掲載します!</p>
<p>
<a href="http://2.bp.blogspot.com/-jGDyjuvZpIY/UrwsWNyxiII/AAAAAAAALqo/jAXP1JzOu3M/s1600/c85-preview0.png" imageanchor="1"><img border="0" height="320" src="http://2.bp.blogspot.com/-jGDyjuvZpIY/UrwsWNyxiII/AAAAAAAALqo/jAXP1JzOu3M/s320/c85-preview0.png" width="235" /></a><a href="http://3.bp.blogspot.com/-urXTIUZ0TPU/UrwsV3oKg9I/AAAAAAAALqU/8r7GpN69OoQ/s1600/c85-preview1.png" imageanchor="1"><img border="0" height="320" src="http://3.bp.blogspot.com/-urXTIUZ0TPU/UrwsV3oKg9I/AAAAAAAALqU/8r7GpN69OoQ/s320/c85-preview1.png" width="216" /></a><a href="http://4.bp.blogspot.com/-1mZi1Bto6pY/UrwsV6VbaZI/AAAAAAAALqY/mxkV2w0GYME/s1600/c85-preview2.png" imageanchor="1"><img border="0" height="320" src="http://4.bp.blogspot.com/-1mZi1Bto6pY/UrwsV6VbaZI/AAAAAAAALqY/mxkV2w0GYME/s320/c85-preview2.png" width="211" /></a><a href="http://4.bp.blogspot.com/-wL7YcRlw9BI/UrwsWuRiprI/AAAAAAAALqc/he3gmIDkr0Y/s1600/c85-preview3.png" imageanchor="1"><img border="0" height="320" src="http://4.bp.blogspot.com/-wL7YcRlw9BI/UrwsWuRiprI/AAAAAAAALqc/he3gmIDkr0Y/s320/c85-preview3.png" width="216" /></a>
</p>
<p>TCP/IPチューニング特集は主にsysctlのパラメータを解説しています。自称日本語で一番詳しい解説になっています!</p>
<p>表紙は毎度おなじみ<a href="http://asema.ciao.jp/">きのとなおと</a>さんに描いていただきました。</p>
<p>前回までの既刊2冊も持っていきます。こちらも一冊300円です。よろしくお願いします!</p>
Emma Haruka Iwaohttp://www.blogger.com/profile/15485542556003251314noreply@blogger.com1