/
atom.xml
711 lines (532 loc) · 30.1 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Category: debian | @znz blog]]></title>
<link href="http://blog.n-z.jp/blog/categories/debian/atom.xml" rel="self"/>
<link href="http://blog.n-z.jp/"/>
<updated>2014-04-09T09:49:24+09:00</updated>
<id>http://blog.n-z.jp/</id>
<author>
<name><![CDATA[Kazuhiro NISHIYAMA]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[CVE-2014-0160 の OpenSSL の脆弱性対応]]></title>
<link href="http://blog.n-z.jp/blog/2014-04-08-cve-2014-0160.html"/>
<updated>2014-04-08T13:22:28+09:00</updated>
<id>http://blog.n-z.jp/blog/cve-2014-0160</id>
<content type="html"><![CDATA[<p><a href="http://heartbleed.com/">Heartbleed</a>
によると今回の OpenSSL の脆弱性は影響が大きそうなので、
OpenSSL の更新をして再起動だけでも早めにした方が良さそうです。</p>
<p>再起動が必要なものは Debian なら
<a href="http://blog.n-z.jp/blog/2013-12-06-checkrestart.html">debian-goodiesのcheckrestartで再起動が必要なプロセスを調べる</a>
のがオススメです。
Ubuntu なら libssl の更新は OS 自体を再起動した方が良いと思います。</p>
<p>秘密鍵を再生成した方が良いという話もあるようですが、
そこまでの対処は続報を待ってからでも良いかもしれません。</p>
<!--more-->
<h2><code>mod_spdy</code> にも影響</h2>
<p>(<code>mod_spdy</code> について 2014-04-09 に追記)</p>
<p><a href="https://groups.google.com/forum/#!topic/mod-spdy-discuss/0yAGH8BHfQo">mod_spdy</a>
も影響を受けるので、
<code>mod-spdy-beta</code> パッケージの <code>0.9.4.1-r397</code> 以前を入れている場合は最新版 (2014-04-09 リリースの <code>0.9.4.2-r413</code> 以降) に更新する必要があります。</p>
<p><code>mod-spdy-beta</code> に含まれる <code>mod_ssl_with_npn.so</code> は改変した <code>libssl</code> を静的リンクしているようなので、
システム側の OpenSSL が 0.9.8 系などのディストリビューション (wheezy など) でも以下のようになっていて、脆弱性の影響を受けます。</p>
<p>```
$ ldd /usr/lib/apache2/modules/mod_ssl.so</p>
<pre><code> linux-vdso.so.1 => (0x00007fff25b9a000)
libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f6ae2d93000)
libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f6ae299c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6ae277f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6ae23f4000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6ae21f0000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f6ae1fd8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6ae322d000)
</code></pre>
<p>$ ldd /usr/lib/apache2/modules/mod_ssl_with_npn.so</p>
<pre><code> linux-vdso.so.1 => (0x00007fff825ff000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8704d4e000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8704b17000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f87048fa000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f87046f6000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f870436b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8705367000)
</code></pre>
<p>```</p>
<h2>影響を受ける OpenSSL のバージョン</h2>
<p>Heartbleed の <code>What versions of the OpenSSL are affected?</code>
によると、影響を受けるのは OpenSSL 1.0.1 から 1.0.1f で、
OpenSSL 1.0.0 系や OpenSSL 0.9.8 系という古いバージョンは
影響がないようです。</p>
<h2>Debian や Ubuntu への影響</h2>
<p>他の OS も含めた情報は
Heartbleed の <code>How about operating systems?</code>
にまとまっているので、
Debian と Ubuntu に付いてもう少し調べてみました。</p>
<p>Heartbleed にも書いてありますが、
<a href="https://www.debian.org/security/2014/dsa-2896">Debian — Security Information — DSA-2896-1 openssl</a>
によると Debian は oldstable (squeeze) は影響がなくて、
stable (wheezy) だと影響があるようです。
つまりまだ wheezy に上げていないサーバーは大丈夫でした。</p>
<p><a href="http://www.ubuntu.com/usn/usn-2165-1/">USN-2165-1: OpenSSL vulnerabilities | Ubuntu</a>
によると Ubuntu は</p>
<ul>
<li>Ubuntu 13.10 (saucy)</li>
<li>Ubuntu 12.10 (quantal)</li>
<li>Ubuntu 12.04 LTS (precise)</li>
</ul>
<p>にセキュリティアップデートが出ているようです。
10.04 LTS lucid は openssl が古いので影響がなくて、
13.04 (raring) は
<a href="http://www.ubuntu.com/info/release-end-of-life">サポート終了</a>
しているので、セキュリティアップデートは出ていないようです。
ついでに
<a href="http://distrowatch.com/table.php?distribution=ubuntu">DistroWatch.com: Ubuntu</a>
でもう少し調べてみると 1.0.1 になったのが 12.04 からなので、
11.10 以前は影響がないようです。</p>
<h2>攻撃を受けたかどうかの確認はできない</h2>
<p>Heartbleed に
<code>Can I detect if someone has exploited this against me?</code>
<code>Exploitation of this bug leaves no traces of anything abnormal happening to the logs.</code>
と書いてあって、
「このバグを突かれても何か変なことがあったというログは残らない」
ということのようなので、
普通は攻撃を受けたかどうか確認できないということのようです。</p>
<h2>秘密鍵は再生成するべき</h2>
<p>というわけで、
<a href="https://www.debian.org/security/2014/dsa-2896">DSA-2896</a>
に
<code>to the currently available information, private keys should be considered as compromised and regenerated as soon as possible.</code>
と書いてあるように、
秘密鍵は出来るだけ早く再生成した方が良いようです。</p>
<h2>openssh-server の鍵の再生成</h2>
<p>2014-04-08 追記:
<a href="http://undeadly.org/cgi?action=article&sid=20140408063423">OpenSSH は影響を受けない</a>
ようです。</p>
<p>サーバー側では <code>/etc/ssh/ssh_host_*</code> を削除して <code>dpkg-reconfigure openssh-server</code> で再生成するのが良さそうです。</p>
<p><code>
% sudo rm /etc/ssh/ssh_host_*
% sudo dpkg-reconfigure openssh-server
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Creating SSH2 ECDSA key; this may take some time ...
ssh stop/waiting
ssh start/running, process 7230
% sudo service ssh restart
ssh stop/waiting
ssh start/running, process 7339
</code></p>
<p>クライアント側では、
<code>HashKnownHosts no</code>
を設定していれば
<code>~/.ssh/known_hosts</code>
ファイルを直接編集しても良いのですが、
設定していないと、どの行がどのホストかわからないので、
<code>ssh-keygen -R foo.example.jp</code>
のように削除すると良さそうです。</p>
<p>場合によっては
<code>ssh-keygen -R 192.168.1.2</code>
のように IP アドレス側の削除や
<code>ssh-keygen -R '[foo.example.jp]:3843'</code>
のようにポート番号付きでの指定が必要かもしれません。</p>
<p><code>UserKnownHostsFile</code> で <code>known_hosts</code> ファイルを分割しているときは
<code>ssh-keygen -R foo.example.jp -f ~/.ssh/foo.known_hosts</code> のように
<code>UserKnownHostsFile</code> を指定する必要があります。</p>
<h2>その他のサーバーの鍵の再生成</h2>
<p>apache2 とかの Web サーバーなら
初回の設定と同様に再生成すれば良さそうですが、
証明書の再発行も必要なので、
気軽には出来ないということで、
しばらく様子見中です。</p>
<p>OpenVPN はサーバーの鍵は再生成した方が良さそうですが、
CA まで再生成する必要があるのかどうかがわからないので
様子見中です。</p>
<p>以前の Debian での修正ミスで脆弱な鍵しか生成できなくなっていた問題の修正のときの
<a href="https://www.debian.org/security/key-rollover/">Debian — 鍵のロールオーバー</a>
が参考になるかもしれませんが、
今回はサーバー外からでも鍵が抜き出せてしまうという問題のようなので、
LAN 内のサーバーなど、そのサーバーにアクセスできる環境に攻撃者が入れる時点で問題がある環境なら、
アップデートを適用して再起動して今後鍵を抜き取られる可能性をなくしてから、
ゆっくり続報を待ってから対処を考えるということでも良いと思います。</p>
<h2>参考リンク</h2>
<p>2014-04-09 参考リンクを追加</p>
<ul>
<li><a href="http://d.hatena.ne.jp/nekoruri/20140408/heartbleed">CVE-2014-0160 OpenSSL Heartbleed 脆弱性まとめ – めもおきば</a>
<ul>
<li>このリンク先が日本語としては一番情報がまとまっているようです。</li>
</ul>
</li>
<li><a href="http://jvn.jp/vu/JVNVU94401838/">JVNVU#94401838: OpenSSL の heartbeat 拡張に情報漏えいの脆弱性</a>
<ul>
<li>ベンダ情報とか CVSS とか。</li>
</ul>
</li>
<li><a href="http://heartbleed.com/">Heartbleed Bug</a>
<ul>
<li>英語だけど Google Chrome の翻訳機能でもだいたい読めます。</li>
</ul>
</li>
<li><a href="http://www.exploit-db.com/exploits/32745/">OpenSSL TLS Heartbeat Extension – Memory Disclosure</a>
<ul>
<li>実際に情報が抜き出せるチェックツールで、これをみて他のツールの誤検知ではなく <code>mod_spdy</code> が原因だと気付きました。</li>
</ul>
</li>
<li><a href="https://groups.google.com/forum/#!topic/mod-spdy-discuss/0yAGH8BHfQo">CVE-2014-0160 / heartbleed openssl bug & mod_spdy – Google グループ</a>
<ul>
<li><code>mod_spdy</code> の対応の話 (英語) です。日本時間の 2014-04-09 02:00 時点ではまだ対応中で修正版のリリースはされていないようです。</li>
</ul>
</li>
<li><a href="https://groups.google.com/forum/#!msg/mod-spdy-discuss/EwCowyS1KTU/uGm4586P_CQJ">New mod_spdy binary bugfix release (v0.9.4.2) – SECURITY FIX</a>
<ul>
<li>日本時間の 2014-04-09 09:00 時点ではリリースされていました。</li>
</ul>
</li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[第 81 回 関西 Debian 勉強会に参加した]]></title>
<link href="http://blog.n-z.jp/blog/2014-02-23-kansai-debian-meeting.html"/>
<updated>2014-02-23T14:02:06+09:00</updated>
<id>http://blog.n-z.jp/blog/kansai-debian-meeting</id>
<content type="html"><![CDATA[<p><a href="https://wiki.debian.org/KansaiDebianMeeting/20140223">第 81 回 関西 Debian 勉強会</a>
に参加してきました。</p>
<!--more-->
<h2>もくもくの会</h2>
<p>今回ももくもくの会がありました。</p>
<p>前回のもくもくの会の時に作っていた
<a href="https://github.com/znz/rd2markdown-app">rd2markdown</a>
を使って
<a href="https://bugs.ruby-lang.org/projects/ruby/wiki">ruby-lang.org の Wiki</a>
で RD 記法のままになっていたページの変換を試しつつ、
うまく変換できなかった部分を修正して、
ほぼすべてのページを変換していきました。
最終的には家に帰ってから、
このブログ記事を書く前に残りを変換しました。</p>
<p>成果発表などの時にも変換作業をしていたので、
他の人の話はあまり聞けなかったのですが、
<a href="http://i3wm.org/">http://i3wm.org/</a>
や
<a href="https://github.com/sn0w75/MikuMikuPenguin">https://github.com/sn0w75/MikuMikuPenguin</a>
の話などがありました。</p>
<h2>LT</h2>
<p><a href="http://blog.n-z.jp/blog/2014-02-23-upstart-has-missing-features.html">upstartに不足している機能</a>
の話と
<a href="http://blog.n-z.jp/blog/2014-02-23-boot2docker.html">boot2docker</a>
でインストールした docker 環境でのデモをしました。</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[第 80 回 関西 Debian 勉強会に参加した]]></title>
<link href="http://blog.n-z.jp/blog/2014-01-26-kansai-debian-meeting.html"/>
<updated>2014-01-26T14:05:18+09:00</updated>
<id>http://blog.n-z.jp/blog/kansai-debian-meeting</id>
<content type="html"><![CDATA[<p><a href="https://wiki.debian.org/KansaiDebianMeeting/20140126">第 80 回 関西 Debian 勉強会</a>
に参加してきました。</p>
<p>今回は事前課題の発表で話が盛り上がって、その後の佐々木さんの話も盛り上がって長かったので、もくもくの会は少しだけでした。</p>
<p>事前課題で募集があったので、 LT もしました。</p>
<!--more-->
<h2>メモ</h2>
<p>以下 URL などのメモです。</p>
<ul>
<li>Debian で redmine を使う方法
<ul>
<li>stable を使う</li>
<li>gem2deb</li>
<li>deb パッケージの ruby は使わない</li>
</ul>
</li>
<li>UEFI のマシンでのインストールが大変という話</li>
<li><a href="http://www.docker.io/">docker</a> が <a href="http://packages.qa.debian.org/d/docker.io.html">docker.io</a> という名前で Debian に入っている
<ul>
<li>upstream 側の Ubuntu 用のパッケージ名は <a href="http://docs.docker.io/en/latest/installation/ubuntulinux/">lxc-docker</a></li>
</ul>
</li>
<li><a href="http://jenkins-ci.org/">Jenkins</a></li>
<li><a href="http://jenkins-debian-glue.org/">jenkins-debian-glue</a></li>
<li><a href="https://github.com/rcrowley/freight">freight</a> : A modern take on the Debian archive.</li>
</ul>
<h2>LT しました</h2>
<p>さくらの VPS の Debian wheezy で IPv6 設定をした話の LT 用スライドです。</p>
<ul>
<li><a href="https://github.com/znz/sakura-vps-debian-ipv6">https://github.com/znz/sakura-vps-debian-ipv6</a></li>
<li><a href="http://slide.rabbit-shocker.org/authors/znz/sakura-vps-debian-ipv6/">http://slide.rabbit-shocker.org/authors/znz/sakura-vps-debian-ipv6/</a></li>
<li><a href="https://speakerdeck.com/znz/sakurafalsevpsdeipv6she-ding">https://speakerdeck.com/znz/sakurafalsevpsdeipv6she-ding</a></li>
<li>(<code>slideshare.net</code> は 30分以上たっても Conversion in progress のままなので後で)</li>
</ul>
<p>LT ということで 5 分に収まるような軽い話をしました。
内容としては <a href="http://mla.n-z.jp/?debian-users:56921">debian-users:56921</a> に投稿した内容にちょっと説明を足しました。</p>
<h2>もくもくの会</h2>
<p>13時からと勘違いしていたので、早めに到着して、出発前から作成していた <code>rd2markdown</code> の Web アプリ作成の続きをしていました。
もくもくの時間でも引き続き作業していました。
これは後日公開します。</p>
<h2>まとめ</h2>
<p>今回の <a href="https://wiki.debian.org/KansaiDebianMeeting">関西Debian勉強会</a> は今までの発表をきくのがメインだったのを、変えていっている途中でもくもくの会など、今後どういう内容にしていくのが良いのか、試行錯誤中という感じでした。</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[dockerのカスタムベースイメージを作成する]]></title>
<link href="http://blog.n-z.jp/blog/2013-12-13-docker-custom-base-image.html"/>
<updated>2013-12-13T18:49:00+09:00</updated>
<id>http://blog.n-z.jp/blog/docker-custom-base-image</id>
<content type="html"><![CDATA[<p>例などにある ubuntu の base image は
apt-line が archive.ubuntu.com になっていて、
apt-get install などが遅いです。</p>
<p>日本で使うのなら日本のミラーを使った方が良いので、
そういう base image を作ります。</p>
<p>base image はあまりカスタマイズせずに、
派生するイメージにDockerfile などを使って
カスタマイズをした方が望ましいのですが、
ほぼ必須のものを毎回インストールするのは無駄なので、
ついでに日本語 locale を入れるというカスタマイズもしておきます。</p>
<!--more-->
<h2>docker 向けのポイント</h2>
<p>最初に docker 向けのポイントをまとめておきます。</p>
<ul>
<li>最小限にするなら <code>--variant=minbase</code></li>
<li><code>--include=iproute</code> などで <code>iproute</code> パッケージを入れておかないとネットワークにつながらない</li>
<li><code>policy-rc.d</code> とか <code>initctl</code> を対処しておかないとパッケージのインストール時に変なことになるかも</li>
<li><code>dpkg</code> に <code>force-unsafe-io</code> を設定すると <code>apt</code> を高速化できる</li>
<li><a href="https://github.com/dotcloud/docker/blob/master/contrib/mkimage-debootstrap.sh">mkimage-debootstrap.sh</a> をそのまま使う場合も日本のミラーを指定する方が良い</li>
</ul>
<h2>base image の作り方</h2>
<p>公式ドキュメントの
<a href="http://docs.docker.io/en/latest/use/baseimages/">Base Image Creation</a>
を参考にして、基本は
<a href="https://github.com/dotcloud/docker/blob/master/contrib/mkimage-debootstrap.sh">mkimage-debootstrap.sh</a>
の手順を使います。</p>
<p>カスタマイズのため、手順を追いかけるだけで直接は使いません。</p>
<h2>debootstrap の実行</h2>
<p>最初は以下のように <code>/tmp/wheezy64</code> などの適当な場所に
<code>debootstrap</code> で <code>chroot</code> 環境を作成します。
proxy 環境なら <code>sudo http_proxy=$http_proxy debootstrap ...</code>
のように指定すれば良いようです。</p>
<p>Debian での例:
<code>
sudo debootstrap --verbose --variant=minbase --include=iproute --arch=amd64 wheezy /tmp/wheezy64 http://cdn.debian.or.jp/debian
</code></p>
<p>Ubuntu での例:
<code>
sudo debootstrap --verbose --variant=minbase --arch=amd64 precise /tmp/precise64 http://ftp.jaist.ac.jp/pub/Linux/ubuntu/
</code></p>
<h3>variant</h3>
<p><code>variant</code> で <code>minbase</code> を指定するとインストールされるパッケージが減って、
本当に最小限の環境になります。
具体的には <code>Essential: yes</code> のパッケージ
( <code>aptitude search '~E'</code> または <code>aptitude search '?essential'</code> で一覧)
と <code>apt</code> がインストールされます。</p>
<p><code>buildd</code> という <code>variant</code> もあって <code>minbase</code> に加えて
<code>build-essential</code> が追加でインストールされるようなので、
CI 環境用などの base image なら <code>--variant=buildd</code> の方が
良いかもしれません。</p>
<p>デフォルトだと <code>Priority</code> が <code>imporant</code> のパッケージ
( <code>aptitude search '~pimportant</code> または <code>aptitude search '?priority(important)' で一覧)
がインストールされるようです。
インストールされるパッケージの差分は
</code>aptitude search ‘~pimportant!~E`
で調べられます。</p>
<h3>include</h3>
<p>元の <code>mkimage-debootstrap.sh</code> では <code>iproute,iputils-ping</code> と指定してますが、
<code>iputils-ping</code> は必須ではないのでここでは省略しています。</p>
<p><code>iproute</code> は docker 環境では必須です。
このパッケージに含まれる <code>ip</code> コマンドが入っていないとネットワークにつながりません。</p>
<p><code>iproute</code> パッケージは <code>Priority</code> が <code>optional</code> なので
普通に <code>debootstrap</code> を実行しても入らないので、
注意が必要です。</p>
<h3>その他の引数</h3>
<p>arch の指定とか suite の指定とか生成先ディレクトリの指定とか、
ミラーの指定とかは見てわかる通りです。</p>
<h2>docker 向けのカスタマイズ</h2>
<p>次に生成されたディレクトリの中で
<code>mkimage-debootstrap.sh</code>
にデフォルト (<code>-d</code> オプションが指定されなかったとき) の処理をしていきます。</p>
<h3>policy-rc.d</h3>
<p>ファイルの作成方法は何でも良いのですが、
exit status で 101 を返す <code>usr/sbin/policy-rc.d</code> を作成して、
パッケージのインストールやアップデートなどで init スクリプトが
実行されないようにします。</p>
<p>ちなみに
<code>$'...'</code> は bash に <code>\n</code> を解釈させるための書き方なので、
<code>'...'</code> や <code>"..."</code> の間違いではありません。</p>
<p><code>
echo $'#!/bin/sh\nexit 101' | sudo tee usr/sbin/policy-rc.d > /dev/null
sudo chmod +x usr/sbin/policy-rc.d
</code></p>
<p><code>policy-rc.d</code> については <code>invoke-rc.d</code> の man を参照してください。</p>
<h3>sbin/initctl</h3>
<p>initctl を実行してしまう upstart スクリプトがあるらしく、
その対処もします。</p>
<p>policy-rc.d は存在しなかったので、作成するだけでしたが、
<code>sbin/initctl</code> はパッケージ管理のファイルとして存在するので
<code>dpkg-divert</code> でパッケージの更新などで上書きされないようにしています。</p>
<p><code>
sudo chroot . dpkg-divert --local --rename --add /sbin/initctl
sudo ln -sf /bin/true sbin/initctl
</code></p>
<h3>パッケージのキャッシュの削除</h3>
<p><code>
sudo chroot . apt-get clean
</code></p>
<p>を実行して不要な deb ファイルなどを削除して、
イメージのサイズを削減しています。</p>
<p>後で独自カスタマイズのところでパッケージをインストールして、
その後でまた実行するので、その場合はここでは実行しなくてもかまいません。</p>
<h3>apt の高速化など</h3>
<p><code>mkimage-debootstrap.sh</code> のコメントには
<code>dpkg</code> がパッケージの展開後に <code>sync()</code> を呼んでいるのが
原因で無駄に遅くなっているので、
強制的に <code>sync()</code> を呼ばなくさせると書いています。</p>
<p><code>
echo 'force-unsafe-io' | sudo tee etc/dpkg/dpkg.cfg.d/02apt-speedup > /dev/null
</code></p>
<p>それから、 deb ファイルを残さないようにして image ファイルが大きくならないようにしています。</p>
<p><code>
echo 'DPkg::Post-Invoke {"/bin/rm -f /var/cache/apt/archives/*.deb || true";};' | sudo tee etc/apt/apt.conf.d/no-cache > /dev/null
</code></p>
<h3>元に戻す方法</h3>
<p><code>mkimage-debootstrap.sh</code> のコメントに
元に戻す方法も書いてありました。
<code>dpkg-divert</code> 以外はファイルを消すだけです。</p>
<p><code>
rm /usr/sbin/policy-rc.d
rm /sbin/initctl; dpkg-divert --rename --remove /sbin/initctl
rm /etc/dpkg/dpkg.cfg.d/02apt-speedup
rm /etc/apt/apt.conf.d/no-cache
</code></p>
<h3>apt-line の変更</h3>
<p><code>etc/apt/sources.list</code> をみると</p>
<p><code>
deb http://cdn.debian.or.jp/debian wheezy main
</code></p>
<p>だけになっているので、 <code>updates</code> と <code>security</code> を追加します。</p>
<p><code>mkimage-debootstrap.sh</code> もデフォルト
(<code>-d</code> も <code>-s</code> も指定されていないとき)
の動作では追加します。</p>
<p>この例では以下のようにしました。</p>
<p>debian での例:
<code>
deb http://cdn.debian.or.jp/debian wheezy main
deb http://cdn.debian.or.jp/debian wheezy-updates main
deb http://security.debian.org/ wheezy/updates main
</code></p>
<p>ubuntu での例:
<code>
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu precise main universe
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu precise-updates main universe
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu precise-security main universe
</code></p>
<p>main 以外を追加したい場合はここで追加しておくと良さそうです。
<code>mkimage-debootstrap.sh</code> でも ubuntu の場合は <code>universe</code> が追加されていました。</p>
<h2>独自カスタマイズ</h2>
<p>ここから独自カスタマイズになります。</p>
<h3>アップデート実行</h3>
<p>base image にセキュリティアップデートも入れておきたいなら、
更新しておきます。</p>
<p><code>
sudo chroot . apt-get update
sudo chroot . apt-get dist-upgrade
</code></p>
<h3>日本語 locale 追加</h3>
<p>debian の場合は
別環境で <code>debconf-get-selections</code> で調べておいた設定を使って、
<code>debconf-set-selections</code> で設定を入れておいて
<code>DEBIAN_FRONTEND=noninteractive</code> でインストールします。</p>
<p><code>
echo locales locales/locales_to_be_generated multiselect ja_JP.EUC-JP EUC-JP, ja_JP.UTF-8 UTF-8 | sudo chroot . debconf-set-selections
echo locales locales/default_environment_locale select ja_JP.UTF-8 | sudo chroot . debconf-set-selections
sudo chroot . env DEBIAN_FRONTEND=noninteractive apt-get install locales
</code></p>
<p>ubuntu の場合は
<code>language-pack-ja</code> パッケージを入れても良いのですが、
不要なパッケージを入れるのが嫌なら <code>locale-gen</code> コマンドで
生成しても良いです。</p>
<p><code>
sudo chroot . locale-gen ja_JP.UTF-8
sudo chroot . locale-gen ja_JP.EUC-JP
</code></p>
<h3>パッケージのキャッシュの削除</h3>
<p>カスタマイズが終わったら clean を実行しておきます。
<code>etc/apt/apt.conf.d/no-cache</code> を作成していれば不要かもしれません。</p>
<p><code>
sudo chroot . apt-get clean
</code></p>
<h2>イメージ作成と取り込み</h2>
<h3>tarball 作成</h3>
<p><code>mkimage-debootstrap.sh</code> は <code>-t</code> オプションが指定されたときに
docker のイメージではなく tarball を作成します。
直接取り込むならこの手順は不要です。</p>
<p>作成方法としては
最初に <code>touch</code> で一般ユーザー権限のファイルになるようにしておいて、
中身は <code>root</code> 権限で入れるようにしています。</p>
<p><code>
touch /tmp/wheezy64.tar.xz
sudo tar --numeric-owner -caf /tmp/wheezy64.tar.xz .
</code></p>
<h3>イメージ取り込み</h3>
<p><code>sudo docker</code> は root 権限が不要な設定にいていれば <code>docker</code> だけでかまいません。</p>
<p><code>mkimage-debootstrap.sh</code> は安定版や LTS に <code>latest</code> タグを設定したり、
<code>etc/debian_version</code> や <code>etc/lsb-release</code> をみて
タグを設定しているので、必要に応じて設定しておきます。</p>
<p>イメージ名としては「ユーザー名/レポジトリ名」という形式が推奨されていますが、
ここでは例として「ユーザー名」の部分は「local」にしておきます。
そして「レポジトリ名」としては日本語 locale を入れたということで
<code>-ja</code> を付けました。
日本のミラーを使っているということで <code>-ja-jp</code> にしても良かったのですが、
長かったので、 <code>-ja</code> だけにしました。</p>
<p>Debian での例:
<code>
sudo tar --numeric-owner -c . | sudo docker import - local/debian-ja:wheezy
sudo docker tag local/debian-ja:wheezy local/debian-ja:latest
sudo docker tag local/debian-ja:wheezy local/debian-ja:7.2
</code></p>
<p>Ubuntu での例:
<code>
sudo tar --numeric-owner -c . | sudo docker import - local/ubuntu-ja:precise
sudo docker tag local/ubuntu-ja:precise local/ubuntu-ja:latest
sudo docker tag local/ubuntu-ja:precise local/ubuntu-ja:12.04
</code></p>
<h2>まとめ</h2>
<p><a href="https://github.com/dotcloud/docker/blob/master/contrib/mkimage-debootstrap.sh">mkimage-debootstrap.sh</a>
で何をやっているのか、
同じことを手動でやるのはどうするのかということを説明しました。</p>
<p>最初のポイントにも書きましたが
<code>mkimage-debootstrap.sh</code>
を直接使うのも良いですが、
最低限ミラーを指定するのがおすすめです。</p>
<p>目的によっては <code>variant</code> を変更したり、
<code>include</code> でインストールするパッケージを増やしておくだけでも
便利になると思います。</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[mailmanでDKIM-Signatureヘッダを削除する]]></title>
<link href="http://blog.n-z.jp/blog/2013-12-11-mailman-strip-dkim-signature.html"/>
<updated>2013-12-11T12:30:00+09:00</updated>
<id>http://blog.n-z.jp/blog/mailman-strip-dkim-signature</id>
<content type="html"><![CDATA[<p>fml から移行した mailman で Subject の書き換える設定をしていると、
元の <code>DKIM-Signature</code> が残っていると受け取った側で
メールを改ざんしているのと区別がつかないので、
<code>DKIM</code> の検証に失敗してしまいます。</p>
<p>そこで mailman で <code>DKIM-Signature</code> を削除するように設定しました。</p>
<!--more-->
<h2>mailman の設定</h2>
<p><code>REMOVE_DKIM_HEADERS</code> という設定があったので、
<code>/etc/mailman/mm_cfg.py</code> の末尾に</p>
<p><code>
REMOVE_DKIM_HEADERS = Yes
</code></p>
<p>という設定を追加して、
<code>sudo service mailman restart</code>
しました。</p>
<p><code>mm_cfg.py</code> での設定なので、
ML 個別の設定ではなく
mailman 全体の設定になるようです。</p>
<h2>参考</h2>
<p><a href="https://bugs.launchpad.net/mailman/+bug/557493">Bug #557493 “Mailman must not strip DKIM-Signature headers” : Bugs : GNU Mailman</a>
という話があって、設定が追加されたようです。</p>
<p><code>mm_cfg.py</code> で設定できる項目の一覧は
<code>/usr/lib/mailman/Mailman/Defaults.py</code>
にあります。
このファイルを良く見ていれば、もっと早くこの設定項目に気付けたのかもしれません。</p>
]]></content>
</entry>
</feed>