.

.

東京エリア Debian 勉強会
資料.
上川 純一 dancer@debian.or.jp
IRC nick: dancerj

2009 年 1 月 17 日.

.
..

設営準備にご協力くださいAgenda

注意事項
飲食禁止
政治/宗教/営利活
動禁止
ustream にて試験
ストリーミング中

最近の Debian 関連のイベント
前回の勉強会

Debian クイズ
2009 年企画会議
冬休みの宿題紹介2008 年 12 月

注意事項
飲食禁止
政治/宗教/営利活
動禁止
ustream にて試験
ストリーミング中

最近の Debian 関連のイベント
前回の勉強会、Debconf

Debian の 2008 年をふりかえり、2009 年を予想する
ライトニングトーク

Debian JP 定例会議 on IAX

2009 年 1 月 9 日
IAX
サーバ:asterisk 、クライアント:iaxcomm
課題
アナウンスを 1 月 3 日にしたが、当日まで準備していない人が大半
MacBook のマイクを動かせている人が少なかった
iaxcomm の品質が悪い、他のクライアント?

Debian 常識クイズ

Debian の常識、もちろん知ってますよね? 知らないなんて恥ずかしくて、知らないとは言えないあんなことやこんなこと、みんなで確認してみましょう。
今回の出題範囲は
debian-devel-announce@lists.deban.org に投稿された内容と Debian Project News からです。

事前課題の紹介

事前課題
2012 年の正月、僕は実家に帰って旧友を深めるべく喫茶店にいた。最近ここらへんには立ち寄っていないなぁ。そういうことをつらつらと思っているとふと人影が目に入る。
「おぉ、待たせたな」「あぁ。久しぶり」「どうした」「いや」
そして僕は手元の Debian デバイスから目をはなす。
「お、Debian の調子はどうよ、最近はどんな使い方しているの?」この質問をいま僕にするなんて。血圧がすこし上がるのを感じながら僕は饒舌になりすぎないように説明する。
「(A)」
問題.. Debian に関しての、2009 年の抱負を述べよ
1.. 「2012 の Debian」と題して (A) を埋めよ
2.
.

上川純一

Debian に関しての、2009 年の抱負使っているパッケージをメンテナンス、使ってないパッケージを捨てる
今止まっている pbuilder / cowdancer / qemubuilder のリグレッ
ションテストサーバを復活させる

2012 の Debian
この時計なんだけどさ、タッチスクリーンとプロジェクタがついていて、それで動くんだぜ。おっと、あまり頭をうごかさないでくれ、こいつが敵として認識して攻撃してしまう。

山本 浩之Debian に関しての、2009 年の抱負
メンテナンスしているパッケージを地味に増やしていく。
2012 の Debian
順調に squeeze のリリースも遅れてますな。

岩松 信洋Debian に関しての、2009 年の抱負
DD になる。
他のサブプロジェクトにも積極的に参加する。

SH の開発を継続する。
2012 の Debian
まだ目で操作するのは慣れないな。メガネで操作するのはつらいぜ。

小林 儀匡Debian に関しての、2009 年の抱負
DD になる。
upstream へのパッチの積極的な投稿を続ける。
2012 の Debian
おまえみたいに久し振りに会う奴の名前や好きな話題がとっさに出てこないから、その辺りの情報を瞬時にこの超小型イヤホンに送ってもらって1 ……いや何でもない。いたって普通に、生活で使うデバイス全般で動かしているよ。
それよりのび太、おまえ、噂によれば最近、Debian の乗った、猫耳のついたロボットを開発しているそうじゃないか。

1

元ネタ: 星新一『ささやき』。

キタハラ

Debian に関しての、2009 年の抱負
会社で消滅した debian で動作しているサーバを復活させる。
2012 の Debian
相変わらず調子はいいよ。でも、これ Android だよ。
（画面は自宅サーバのリモートコンソールだったのだ! ちゃんちゃん!!）まえだこうへい

Debian に関しての、2009 年の抱負
ヨメを連れてスペインに行く。（行きたい。）
スペイン前までにヨメを洗脳する。（わら2012 年の Debian時計なんだけどさ、電波時計のボタンと見せかけて、半径 10m 以内にDebian 信者がいるか分かるんだぜ。

あけどDebian に関しての、2009 年の抱負
(挫折中の) 翻訳の査読を進める
管理している Debian な公開サーバがあるのですが、これを仮想サーバにサービス無停止で移行しようかと思っています。また、この移行に関する資料を作成・公開したいと思います。

2012 年の Debian
これ、ぱっと見ると電子辞書なんだけどこうすると動画とか見れるんだ
な、実は携帯端末で自宅サーバと VPN 接続しててこれだけで大抵の仕事ができたりするんだ。そんでこの端末とか自宅のルータ＆サーバは全部 Debian なのよじつかた2009 年の Debian 抱負
パッケージ作成の勉強を進める

Debian サーバ導入 (仕事)2012 年の Debian「この携帯、Debian で動いてるんだよ。」

2009計画年

発表したい内容

自分が発表したい内容を考えて教えてください。

発表したい内容2009 年計画..1. 新年の企画 (アンサンブル荻窪開催)..2. OSC Tokyo
VAIO P インストール記録、カーネル読書会 ディストリビューション大集合 (小..3. 林さん)(東京大学?)..4. Git Handson (岩松)(あんさんぶる荻窪?)..5. 家 Debian サーバ vs 職場のネットワーク (千代田区都立図書館?2 )..6. Asterisk (東京大学?)..7. スペインにて開催..8. Debconf 報告会..9. OSC Fall?
..10. udev + HAL..11. 3D graphics 開発..12. Debian サーバ+VMware + 各種 OS、他の仮想化ツール (vserver etc.)、忘年会

2

http://www.library.chiyoda.tokyo.jp/

2009 年からのフロー (案)

前回の勉強会で発表内容を打ち合わせ(2/21)

二週間後にドラフト作成 (3/7)
三週間後に資料のテクニカルレビュー・メーリングリ
ストで議論 (3/8-3/14)
印刷発注準備 (3/15-3/19)
四週間後に発表 (3/21)

冬休みの宿題

楽しかった冬休みももう終わりました。どんな Debian ハックをしたのか、冬休みの宿題、ということで発表してもらいます。
上川純一
前田耕平
小室文

id774
山本浩之
岩松信洋

上川純一

Debian 勉強会資料 Git ワークフロー

2008 年 10 月の資料から Git format-patch で事前課題提出を依頼
うまくコンフリクトを解消できないなどの事例多数
どうする?

ブランチで作業する

毎月 git format-patch のためのブランチを作成する$ git pull
$ git checkout -b newbranchmaster にはマージされた後の内容が反映される

マージングuekawa1

localwork1

merged-uekawa2

localwork2

uekawa3

マージ専用の捨てブランチをつくる

uekawa4

master は alioth のツリーの内容にしておく

uekawa5

newwork1

newwork2uekawa6

前田耕平

黒 MacBook の Lenny/Sid 64bit 化 でのハマりポイント
まえだこうへい mkouhei@debian.or.jp
IRC nick: mkouhei

Agenda... 用意したインストールイメージ... 簡単なインストール手順... 起動させると…。
... 回避方法... もっと簡単な回避方法。
1
2
3
45

用意したインストールイメージ

Lenny のスナップショットイメージ
Debian GNU/Linux testing ”Lenny” - Official Snapshot
amd64 NETINST Binary-1 20090104-09:09

簡単なインストール手順... expert install での起動。
... 日本語ロケール、米国キーボードを指定。
... パーティションの指定し直し。
... 基本パッケージのインストール。
... シェルモードへ移行。
... gptsync, refit パッケージのインストール、 gptsync の1
2
3
4
5
6実行。
..7 apt-line の変更、apt-get {update,upgrade,dist-upgrade}の実行。
.8. 再起動。

.
.

起動させると…。

Kernel Panic となってしまいます。
RAMDISK: Couldn’t find valid RAM disk image staring at 0.
List of all partitions:No filesystem could mount root, tried:
Kernel panic - not syncing: VFS: Unable to mount root fs on
unknown-block(8,4)

回避方法
レスキューモードで起動。
シェルモードになり、 /target へ chroot 。
カーネルソースを展開。

/boot 以下の該当の kernel config をカーネルソースツリーにコピー。
kernel をビルドし、インストール。
REVISION=$(date +%Y%m%d.%H%M)
make-kpkg --initrd --revision $REVISION kernel_image
dpkg -i ../kernel-image-2.6.26_20090105.2330_amd64.deb/ramdisk ディレクトリを作り、 initrd を展開。
mkdir /ramdisk
cd /ramdisk
zcat /boot/initrd-2.6.26 | cpio -i

回避方法 (cont.)
先ほどインストールした kernel をアンインストール。
dpkg --purge kernel-image-2.6.26.config の ”INITRAMFS SOURCE” を書き換え、–initrd
オプションなしで kernel をリビルド。
sed -i ’s:INITRAMFS_SOURCE="":INITRAMFS_SOURCE="/ramdisk":’ .config
make-kpkg --revision $REVISION kernel\_image

できた kernel パッケージをインストール。

lilo.conf の ”initrd=/initrd.img” をコメントアウトし、lilo を書き込み。

もっと簡単な回避方法。

lilo をやめて、grub2 にしてしまいましょう。
# apt-get install grub-pc# update-grub# grub-install /dev/sda3

これで、initrd を作ってもちゃんとブートできます。

小室文Namazu みたいに Google AJAX Search API
小室文

自己紹介

小室 文
aya@popowa.com

目的

自分のウェブサイトの検索用にわざわざ Namazu を導入しなくても.. サイト内検索の機能を1.
... 簡単に... デザインもカスタマイズ
2
3

したかった。

Google AJAX Search API

選択肢.. JavaScript あり
1.

... 自分で JavaScript を組む... ウィザードを使う
1
2... JavaScript なし
2

基本的に HTML ファイル (もしくは PHP など) をウェブサーバに置けば動きます。

JavaScript あり、なし両方

Google AJAX Search API の KEY を事前に取得しておきます。
.. Google アカウント
1.. 使いたい FQDN
2.. 利用承諾に同意
3で Key が発効されます。

.
.
.

JavaScript あり... HTML ファイルの中で Google AJAX Search API
1

JavaScript ライブラリをロード.2. 検索をするオブジェクトを作成.. 検索準備 (サーチャーメソッド追加、表示オプション、
3
サイト制限設定など).. 検索する
4.
.
.

JavaScript なし... http://ajax.googleapis.com/ajax/services/1

search/web に引数を渡してリクエスト.2. JSON 形式でレスポンスが得られる.. 見やすいように処理
3.
.

パラメーター

パラメータq?
v=1.0
key?
start?
cx?
lr?

項目
検索したいキーワード、検索式
プロトコル番号の指定
Google AJAX Search API の Key
検索結果の開始インデックス
カスタム検索エンジンの ID
特定の言語のドキュメントを検索対象とする

JavaScript なし:レスポンス形式{"responseData": {"results": [{"GsearchResultClass": "GwebSearch","unescapedUrl": "http://en.wikipedia.org/wiki/Paris_Hilton","url": "http://en.wikipedia.org/wiki/Paris_Hilton","visibleUrl": "en.wikipedia.org","cacheUrl": "http://www.google.com/search?q\u003dcache:TwrPfhd22hYJ:en.wikip"title": "\u003cb\u003eParis Hilton\u003c/b\u003e - Wikipedia, the free ency
"titleNoFormatting": "Paris Hilton - Wikipedia, the free encyclopedia","content": "\[1\] In 2006, she released her debut album..."},...
],"cursor": {"pages": [{ "start": "0", "label": 1 },{ "start": "4", "label": 2 },{ "start": "8", "label": 3 },{ "start": "12","label": 4 }],"estimatedResultCount": "59600000","currentPageIndex": 0,"moreResultsUrl": "http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf}}, "responseDetails": null, "responseStatus": 200}

現状の問題点

Google AJAX Search API のかえしてくる「検索結果」の総数には問題があります。
JavaScript あり: setSiteRestriction でドメインを指定して検索をしようとした場合、検索結果の総数が検索するたびに変わります。
JavaScript なし:?q=DMC\%20site:http://www.debian.or.jp/とするとドメイン検索は出来るが、start?で引数を渡すたびに同じように結果総数が変わります。

まとめ

当初の目的は達成出来ませんでした。
.1. estimatedResultCount は estimate らしいです。

.
... Yahoo Web 検索でも発生します。
... Yahoo!は検索リクエストがある度に検索結果を積算し23ている、と免責してます。

id774

山本 浩之岩松信洋

Linux カーネルコンフィグ変換ツールを作ってみた
岩松 信洋 iwamatsu@debian.or.jp
IRC nick: iwamatsu

冬休み赤ちゃんが生まれました
赤ちゃんが生まれたので、世話をしていました。

今回作ったもの

今回作ったもの

システム情報を元にシステムに必要なカーネルモジュールを組み込み指定に変換した
カーネルコンフィグファイルを出力する
スクリプト

今回作ったもの

たいしてものではないですなぜこれを作ろうと思ったのか... ひさびさにあまり使ってないマシンのカーネルコン
1フィグレーションをした。

... コンフィグレーションが多すぎる。
... 特に PC だと何を指定していいものやら。
... 自動化できるんじゃね？
... 自分は正規表現が苦手。正規表現の勉強のため。
... Perl を学習する必要があった。
... これらができて、アウトプットのできるものを作りま
234567すか。
..8 帰省の新幹線内で。

.

これができると... カーネルコンフィグに悩まされずにすむ... 取り合えず動くカーネルはできる（はず）... 一般ユーザから vanila カーネルアクセスへの敷居が下
123がる（かも）そういや、カーネルコンパイル！コンパイル！ってうるさい人たちいるよね？

なぜ彼らはカーネルをリコンパイルするのか？

カーネルをリコンパイルする理由カーネルハックのため。
カーネル BTS の深追い。
最新のカーネルは新しいドライバや機能が使えるから。
ドライバを組み込みにして、起動の高速化。
ドキドキ感を味わうことができる。
無駄に CPU を使いたい。(反エコ)カーネルをリコンパイルすることによるデメ
リット

失敗したら動かなくなるかもしれない。
コンパイルに CPU リソースを食いすぎる (CPU が遅いため)。

なぜ彼らはカーネルをリコンパイルするのか？

ここにいるひとたちには後者なんて気にしないと思いますが。

内容

必要なデータ

使うカーネル
Debian で提供しているカーネル (lenny では 2.6.26)
入力するデータ.... カーネルソースコード.. 動いているカーネルのコンフィグファイル/boot/config-2.6.26-1-xxx.
.
. システム情報
123

出力されるデータ
システム情報を元にシステムに必要なカーネルモジュールが組み込み状態になっているカーネルコン
フィグファイル

システム情報の取得方法

どのようにして、システム情報を取得するか。
コマンド
dmidecode
lspci
lsusb
dmesg
lsmod

内容
BIOS からシステム情報を出力する
PCI の情報を出力する
USB の情報を出力する
カーネルデバッグメッセージを出力する
ロードしてるモジュールを出力する

Table: 起動しているカーネルから得られる情報

システム情報の取得方法

今回利用したもの
コマンド
lsmod

内容
ロードしてるモジュールを出力する

Table: 起動しているカーネルから得られる情報

ロードしているモジュール＝現在の Linux システムに必要なものなので、わかりやすい。

簡単な流れ簡単な流れ1. データとして、.. カーネルソースコードへのパス
1.. 動作しているカーネルコンフィグファイル
2.. lsmod の出力結果3を指定する。

.
.
.

簡単な流れ2. lsmod からロードしているドライバモジュール一覧を取得する
lsmod を実行すると、以下のような内容が出力される。
$ lsmod
Module
i915
drm
ipv6
rfcomml2cap........

Size
25280
65256
23530028272
17248

Used by2
3 i915102
9 rfcomm簡単な流れ3. ドライバモジュール名 と modinfo コマンドから ドライバモジュールのパスを取得する。
modinfo コマンドを使うと、指定したドライバモジュール名の情報を取得することができます。-n オプションを使うと、ドライバオブジェクトファイルのパスが出力される。
$ modinfo -n i915
/lib/modules/2.6.26-1-amd64/kernel/drivers/char/drm/i915.ko簡単な流れ$ modinfo -n i915
/lib/modules/2.6.26-1-amd64/kernel/drivers/char/drm/i915.ko

上の結果を例にすると、/lib/modules/2.6.26-1-amd64/kernel/ 以下と カーネル
ソースコードのパス構造は同じなため、ドライバモジュー
ル名 i915 の Makefile のあるパスはdrivers/char/drm/Makefile になる。
また、ドライバオブジェクトファイルは i915.ko であることが分かる。

簡単な流れ
4. 先で取得した Makefile へのパスとドライバオブジェク
トファイル名より、対象になるドライバコンフィグ名を取得する。
ドライバオブジェクトファイル (i915.ko) とドライバモジュール名 (i915) は必ずしも一致するとは限らないので、ドライバモジュール名を使って、ドライバコンフィグ名を検索する。(例えば snd hda intel).....
obj-$(CONFIG_DRM_I830)
obj-$(CONFIG_DRM_I915)
obj-$(CONFIG_DRM_SIS).....

+= i830.o+= i915.o <- これ+= sis.o簡単な流れ5. 取得したドライバコンフィグ名を保存する。

簡単な流れ6. 動作しているカーネルコンフィグファイルのドライバコンフィグを書き換える。
正規表現を使って書き換えると、以下のようになる。m はモジュールを意味し、y は組み込みを意味する。
変更前....
CONFIG_DRM_I830=m
CONFIG_DRM_I915=m
CONFIG_DRM_MGA=m
....

変更後
....
CONFIG_DRM_I830=m
CONFIG_DRM_I915=y <- 書き換えCONFIG_DRM_MGA=m....

簡単な流れ

7. 変更したものをファイルに出力する。

実際に使ってみる

実際に使ってみる$ moge -hmoge - Script to Kernel Module Enabler from lsmod command output
Copyright (C) 2008,2009 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Usage: moge [options]-c, --configfile <file>
Kernel config file name-k, --kernel
Kernel source path-o, --output <file>
outout file-l, --lsmod
lsmod command output file-h, --help
display this help screen and exit-v, --version
show the version and exitBy Nobuhiro Iwamatsu <iwmatsu@nigauri.org>$ moge -o sage -c config-2.6.26-1-686 -l lsmod.list -k \/usr/src/linux-2.6-2.6.26/

作成されたコンフィグ
ファイルを使ってカーネルをコンパイルするカーネルコンパイルをする作成されたコンフィグファイルを使ってカーネルをコンパイルしてみる。
$ sudo apt-get update$ sudo apt-get install linux-source-2.6.26 kernel-package$ cd /usr/src/linux-source-2.6.26$ make oldconfig$ fakeroot make-kpkg --revision=yourpc00 kernel_image kenrel_header$ ls ../
linux-image-2.6.26_yourpc00_i386.deb
linux-headers-2.6.26_yourpc00_i386.deb.......

lsmod の結果
eeePC で試してみて、どれぐらい変わったのか調べてみた。
変更前 61 モジュール$ lsmod
Modulei915
drm
ipv6
rfcomm

Size
25280
65256
23530028272

Used by2
3 i915
102

96168
28428
18672
1181601 ide_pci_generic00
5 uvcvideo,usb_storage,ehci_hcd,

15228
32576
4164
10856

0
2 thermal0
4 video,thermal,processor,fan......
ide_core
ehci_hcd
uhci_hcd
usbcoreuhci_hcd
thermalprocessor
fanthermal_syslsmod の結果

変更後 0 モジュール$ lsmodModuleSize

Used bybootchartbootchart でどれぐらい起動が速くなったか、調べてみました。

bootchart 変更前

bootchart 変更後

モジュールロード部分

今後の予定... make-kpkg に入れる？
... パッケージ化？
... カーネルコンパイル Web サービスの提供？
... ドライバオブジェクトファイルとドライバモジュール12
3
4

名が一致しないやつを直す。

次回の勉強会

次回の勉強会

次回 2008 年 2 月 は OSC Tokyo です。
2008 年 3 月 21 日は東京大学で開催予定です。

宴会場所

宴会場所
本日の宴会は「卯」です。
参加者はフロアに集合し、全員で移動しましょう。
片付け
部屋を片付けるのにご協力ください。