Download - 東京エリアDebian勉強会 - 第102回 2013年7月度...iori というツール(最近話題のdocker みたいなの) の開発環境として 使っています。 2 今は特にないですが、今後ARM
東京エリアDebian勉強会第102回 2013年7月度
上川純一
2013年7月20日
設営準備にご協力ください。
会場設営よろしくおねがいします。
Agenda
注意事項飲食禁止
最近あったDebian関連のイベント報告
第 100回東京エリアDebian勉強会2013 大統一Debian勉強会
Debian Trivia Quiz
事前課題紹介
イベント報告
第100回東京エリアDebian勉強会
大統一Debian勉強会 2013
DWN quiz
Debian 常識クイズ
Debian の常識、もちろん知ってますよね? 知らないなんて恥ずかしくて、知らないとは言えないあんなことやこんなこと、みんなで確認してみましょう。今回の出題範囲は[email protected],[email protected] に投稿された内容とDebian Project Newsなどからです。
問題1. Stefano Zacchiroli さんが新しく作成したサービスは?
A chiebukuro.debian.net
B 2ch.debian.net
C sources.debian.net
問題1. Stefano Zacchiroli さんが新しく作成したサービスは?
A chiebukuro.debian.net
B 2ch.debian.net
C sources.debian.net
答えは:
C
問題1. Stefano Zacchiroli さんが新しく作成したサービスは?
解説: Stefano Zacchiroli さんが、Debian パッケージで提供されているソースコードすべてを閲覧・検索出来るsources.debian.netを作った
問題2. 新しく FTP master チームに入った人は?
A Gergely Nagy
B Kouhei Maeda
C Joerg Jaspert
問題2. 新しく FTP master チームに入った人は?
A Gergely Nagy
B Kouhei Maeda
C Joerg Jaspert
答えは:
A
問題2. 新しく FTP master チームに入った人は?
解説: Paul Tagliamonte,Scott Kitterman,Luke Faraone,Gergely Nagy が加入
問題3. Debian GNU/Hurd がリリースされましたが、バージョンはいくつでしょう。
A 2013
B 3.141592
C 7.0
問題3. Debian GNU/Hurd がリリースされましたが、バージョンはいくつでしょう。
A 2013
B 3.141592
C 7.0
答えは:
A
問題3. Debian GNU/Hurd がリリースされましたが、バージョンはいくつでしょう。
解説:
事前課題
koedoyoshida
1 お使いのマシンにARMはありますか?もしあるのでしたら、どのように使っているか教えてください。Raspberry Piを使ってます。とりあえずリモートアクセス用がメインですが、 I2Cとかを使って外部 IOをやってみたいと思っています。
2 Debian のARM に期待していること、お願いしたいことがあれば教えてください。省電力な環境を生かしてReadOnlyboot(でも定期的にセキュリティupdateはしたい)で放置できる環境とかが作れるとよいですね。
吉野
1 地図マシンです
2 なし
dictoss
1 CuBoxを持っている。 eSATA端子があるのでファイルサーバのバックアップをするマシンとして使おうとしたが、USBポートから電源供給量が不足のため、HDDが動かず使えていない。そのため単なるarmelバイナリのお試しマシンになっている。
2 新Nexus7でDebianが動いてほしい。
mtoshi.g
1 お使いのマシンにARMはありますか?ないっす
2 Debian のARM に期待していること、お願いしたいことがあれば教えてください。今のところないっす
野島 貴英
1 昔売っていたB&NのNookColorをARM機材実験ボードとして未だに使ってます。この電子書籍端末は 2012/4の東京エリア debian勉強会,2012/6の大統一 debian 勉強会で喋ったとおり、特定ブートフォーマットの SDカードを用意して SDカードスロットへ入れちゃうと、うっかりそのままブートしちゃうという隠れ (?) 機能が大変便利です。おまけに連続 8回起動失敗するとリカバリーが始まるという非文鎮化機能まで搭載しています。そのままでも pdfリーダ、ポータブルmp4ビデオ/mp3鑑賞機材として、また、 debian ARMのnativeブートの可能性を秘めた hack機材としても楽しくお使いいただけます。
2 NookColor用の debianネイティブブートが可能なイメージ( というかインストーラ)が欲しいといってみるテスト。
岩松信洋
1 お使いのマシンにARMはありますか?もしあるのでしたら、どのように使っているか教えてください。たくさんある。開発用とかビルドマシンとして使っています。Raspberry Pi は家のゲートウェイマシンとして動いています。
2 Debian のARM に期待していること、お願いしたいことがあれば教えてください。マルチメディア系が弱いので整備して欲しい。
上川純一
なし
まえだこうへい
1 Armadillo Jで自宅内のDHCPサーバとして使っています (notDebian)。OpenBlockS AX3を、昨年夏ごろにカッとなって作ったioriというツール (最近話題の dockerみたいなの)の開発環境として使っています。
2 今は特にないですが、今後ARMサーバの製品版が出てきた時に d-iでインストールできることでしょうか。
armmp
月刊 Deb-helper
今月のコマンド
dh strip
dh stripの機能
実行バイナリ、共有ライブラリ、静的ライブラリから、デバッグシンボルを取り除く。取り除いたデバッグシンボルをデバッガが見つけれるようにして、*-dbgパッケージが作りやすいようにビルドディレクトリ以下に配置する
どうやって*-dbgパッケージを作る?
そんなあなたに、
2012年大統一Debian勉強会「 debug.debian.net」のプレゼン資料がおすすめ!
http://gum.debian.or.jp/2012/
とりあえず、すでに発表済みなので、ここでは省略。
dh stripのコマンドラインオプション(その1)
man debhelperに記載されているdebhelper共通オプション 他の月刊debhelperの発表でなされているとおりなので、ここでは割愛。-Xitem,–exclude=itemitemという名前を持つファイル名に対しては処理を行いません。複数指定したければ、“dh strip -Xfoo1 -Xfoo2”と複数ならべて指定ができます。–dbg-package=package*-dbgパッケージを作る際に、デバッグシンボルを格納するパッケージ名を指定する為に利用します。debhelperのCOMPATIBILITY LEVELによって振る舞いが変わります。 (後述)
dh stripのコマンドラインオプション(その2)
-kデバッグシンボルをバイナリパッケージに含めてしまいます。つまり、バイナリがインストールされると同時に、対応したデバッグシンボルも/usr/lib/debug/以下にインストールされるようなパッケージを作成するときに使います。なお、–dbg-packageも指定されると、–dbg-packageの方の動作が優先されます。
dh stripのCOMPATIBILITY LEVELの動作の違い(その1)
以下は–dbg-package指定時のdh stripの振る舞いの違い。
4以下 “dh strip –dbg-package=xxxx –dbg-package=yyyy”のように–dbg-package を複数指定する事が出来ます。ここで、こちらで指定した名前 (xxxxや、 yyyy)に合致するパッケージを処理する際、”パッケージ名-dbg”というパッケージ名を*-dbgパッケージのパッケージ名として自動的に利用します。また、このCOMPATIBILITY LEVELの場合、ソースパッケージに含まれるdebian/controlには、これら*-dbgパッケージの為の記述を必要とはしていません。
dh stripのCOMPATIBILITY LEVELの動作の違い(その2)
5以上–dbg-packageは1つ指定するのが原則となります。もし複数指定した場合は、最初に指定された内容のみ利用されます。また、–dbg-package=xxxxxとすると、デバッグシンボルを格納するパッケージ名として、 xxxxxがそのまま使われます。例えば、 libfo oパッケージと、 fooパッケージを構築し、これらパッケージに含まれているバイナリのデバッグシンボルを foo-dbgパッケージに全部入れるには、–dbg-package=foo-dbgと指定します。また、ソースパッケージに含まれるdebian/controlには、生成予定の*-dbgパッケージの為の記述は必須となり、万一記載されていない場合はエラーとして扱われ、この場合はdh stripはエラーを表示して終了します。
dh stripのCOMPATIBILITY LEVELの動作の違い(その3)
以下は-k/–dbg-package指定時の出来上がるデバッグシンボルファイルの違い
8以下“/usr/lib/debug/+バイナリのインストール先パス/+バイナリファイル名”に格納されるようにデバッグシンボルファイルが生成されます。また、デバッグに関する情報はコンパイラが生成したままの形で保存されるため、デバッグシンボルファイルのサイズは大きくなりがちです。
dh stripのCOMPATIBILITY LEVELの動作の違い(その4)
9以上バイナリがBuildIDを含んでいる場合は、“/usr/lib/debug/.build-id/BuildIDの上位2桁/+BuildIDの残りの桁+.debug” に格納されるようにデバッグシンボルファイルが生成されます。BuildIDを含んでいなければCOMPATIBILITY LEVEL 8以下と同様のファイル名となります。また、BuildIDの有無にかかわらず、デバッグに関する情報は zlibにより圧縮されて格納されます。そのため、デバッグシンボルファイルのサイズはできるだけ小さくなるようになっています。
ところでBuildIDって
fileコマンドでバイナリを調べると出てきます。
$ file /usr/bin/gst-launch/usr/bin/gst-launch: ELF 64-bit LSB executable,x86-64, version 1 (SYSV), dynamically linked(uses shared libs), for GNU/Linux 2.6.26,BuildID[sha1]=9b42db476118ab2b81041acd80e45e89e4289ea2,stripped
詳しくは2013年大統一Debian勉強会「 gdb+python拡張を使ったデバッグ手法」(http://gum.debian.or.jp/2013/slide_data_list)に記載してます。
デバッグシンボルファイルの形式
Debianの i386/amd64用 linuxシステムでは、デバッグシンボルファイルの形式としてほぼDWARFなデバッグシンボルファイルが利用されています。DWARFは実行ファイルの形式であるELFフォーマットをベースに作られているため、DWARFを理解する時には、ELFもあわせて知っておくと良いです。
DWARF文献
DWARFについて:
本家http://www.dwarfstd.org/
結構良い解説記事http://www.ibm.com/developerworks/jp/
opensource/library/os-debugging/
http://ja.wikipedia.org/wiki/DWARF
DWARFを理解する為のお供にELFもどうぞ!http://ja.wikipedia.org/wiki/Executable_and_
Linkable_Format
デバッグシンボルファイル覗いてみるまず、俯瞰してみたいので、各ヘッダ、各セクションを俯瞰してみます。
$ sudo aptitude install binutils/sid php5-dbg$ env LANG=C readelf -e /usr/lib/debug/usr/bin/php5ELF Header:Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00Class: ELF64
..中略...Start of program headers: 64 (bytes into file)Start of section headers: 19669080 (bytes into file)
...中略...Section Headers:[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align...中略...[ 1] .interp NOBITS 0000000000400238 00000238
000000000000001c 0000000000000000 A 0 0 1...中略...[28] .debug_aranges PROGBITS 0000000000000000 000002d0
0000000000006190 0000000000000000 0 0 1...中略...
ここでは紙面がせまいので、皆さんお手元のdebianマシンで確認してみてくださいませ。
readelf -e の結果を図示してみる
ソースの情報を見てみる(その1)
.debug infoセクションにDWARFのとおりに格納されている。で、こちらのデコードには readelf -wiが便利。
$ env LANG=C readelf -wi /usr/lib/debug/usr/bin/php5Contents of the .debug_info section:
Compilation Unit @ offset 0x0:Length: 0x15bf3 (32-bit)Version: 4Abbrev Offset: 0x0Pointer Size: 8
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)<c> DW_AT_producer : (indirect string, offset: 0x1832):
GNU C 4.8.1 -mtune=generic-march=x86-64 -g -O2 -fstack-protector -fPIC--param ssp-buffer-size=4
<10> DW_AT_language : 1 (ANSI C)<11> DW_AT_name :(indirect string, offset: 0x1955): /tmp/buildd/php5-5.5.0+dfsg/ext/date/php_date.c
<15> DW_AT_comp_dir : (indirect string, offset: 0x6f0):/tmp/buildd/php5-5.5.0+dfsg/cli-build
ソースの情報を見てみる(その2)
readelf -wiの結果から、こちらのCompilation Unit(以下CU)に記載されているソースファイル (以下DW AT name)は、/tmp/buildd/php5-5.5.0+dfsg/ext/date/php date.cであり、コンパイルが行われたディレクトリ (以下DW AT comp dir)は/tmp/buildd/php5-5.5.0+dfsg/cli-buildとなります。
Use the SOURCE!(その1)
.debug infoのCUのDW AT nameが絶対パスで記載されているような場合は、gdbで、 set substitute-pathにDW AT nameの絶対パス部分を指定します具体例↓
2013年大統一Debian勉強会「 gdb+python拡張を使ったデバッ
グ手法」のプレゼン資料http://gum.debian.or.jp/2013/slide_data_list
Use the SOURCE!(その2)
.debug infoのCUのCUのDW AT nameが相対パス (あるいは、ファイル名そのもの)で記載されているような場合は、gdbで、 set substitute-pathにはDW AT comp dirの絶対パス部分を指定します。具体例↓
$ env LANG=C readelf -wi /usr/lib/debug/.build-id/9b/42db476118ab2b81041acd80e45e89e4289ea2.debug...中略...
<11> DW_AT_name : (indirect string, offset: 0x57a): gst-run.c<15> DW_AT_comp_dir : (indirect string, offset: 0x36b):
/tmp/buildd/gstreamer0.10-0.10.36/tools...中略...$ gdb --args gst-launch(gdb) set substitute-path /tmp/buildd/ /home/yours/debian-src/gstreamer/(gdb) b main(gdb) run(gdb) l313 return candidates;314 }315316 int317 main (int argc, char **argv)319 GHashTable *candidates;320 gchar *dir;
Use the SOURCE!(その3)
gdbは、ソースの位置を求めるときに以下のアルゴリズムに従ってソースの位置を求めようとします。
CUに記載されているファイル名が絶対パスの時:そのままソースファイルの位置として扱う。また、この時DW AT comp dirの情報は無視される。CUに記載されているファイル名が相対パスの時:ソースのファイル名を”DW AT comp dirの値”+”/”+”DW AT name”として扱う。
なので、先ほどの通り set substitute-pathの元ディレクトリ情報として指定するパス情報が異なります。
参考: COMPATIBILITY LEVEL9だと...(その1)
デバッグシンボルがCOMPATIBILITY LEVEL9の元で作成されていると...
$ sudo aptitude install libgstreamer0.10-0-dbg$ env LANG=C readelf -e /usr/lib/debug/.build-id/9b/42db476118ab2b81041acd80e45e89e4289ea2.debug...中略...[28] .zdebug_aranges PROGBITS 0000000000000000 000002d0
000000000000002f 0000000000000000 0 0 1[29] .zdebug_info PROGBITS 0000000000000000 000002ff
0000000000000ccd 0000000000000000 0 0 1...中略...
全部、”.z+debug+なんとか”にセクション名が変更されています。
参考: COMPATIBILITY LEVEL9だと...(その2)
.zdebug infoセクションをダンプしてみた。
$ env LANG=C readelf -x .zdebug_info /usr/lib/debug/.build-id/9b/42db476118ab2b81041acd80e45e89e4289ea2.debugHex dump of section ’.zdebug_info’:0x00000000 5a4c4942 00000000 00001b3f 789c7d59 ZLIB.......?x.}Y0x00000010 7b7454c5 199fefee 6e76b3d9 2497cd7b {tT.....nv..$..{0x00000020 370b2109 012e0482 243c13d8 84f01079 7.!.....$<.....y0x00000030 05437988 0887444f 44501e25 94a788b6 .Cy...DODP.%....
というわけで、ZLIBで圧縮されてます。
おわりに
質問などおねがいしますー
raspberry pi
raspberry pi
raspbian
armel: armv4
raspbian: armv6 (VFP2)
armhf: armv7 (NEON)
raspbianのインストール
SD-card にイメージを書き込んでそれから起動する
サブマシンを使う時の便利技
mosh: ssh 張りっぱなしな感じにできて、ノートパソコンサスペンドしてもリジュームしたらまた繋げられる。avahi-daemon: DHCPの環境で面倒なことしなくてもホスト名指定でアクセスできるようになる。 raspberrypi.local
sshfs: ssh でつながるホストのディレクトリを sshfsを使って透過的にマウントできる。NFSでユーザ IDを調整したりSMBの設定を頑張ってしたりしていたのは過去のことに。
小技: sshfs
sshfs corei7.local:path/to/work ./mnt/
raspbianのセンサー
CPU温度センサーを使ってみた
Mon Tue Wed
40
45
50
55
60
timestamp
temperature C
sqlite + R
時系列データを sqlite で保存
create table temperature(timestamp TEXT default current_timestamp,temperature INTEGER);
定期的にシェルスクリプトで温度を書き込み
while sleep 5m; dotemp=$(cat /sys/class/thermal/thermal_zone0/temp)echo "insert into temperature(temperature) " \
"values($temp);" | \sqlite3 sensor.db
done
R でグラフ作成
タイムゾーンUTCのPOSIXct 形式の文字列として解釈されるのでそれで処理してグラフ作成
library("RSQLite")drv <- dbDriver("SQLite", max.con=1)conn <- dbConnect(drv, dbname=’sensor.db’)r <- dbGetQuery(conn, ’SELECT * from temperature’)r$posix <- as.POSIXct(r$timestamp, tz=’UTC’)plot((temperature / 1000) ~ posix, r,
xlab=’timestamp’,ylab=’temperature C’,ylim=c(40,60), type=’l’)
僕のraspberry piの今後
多分こんなことします。1000円くらいで手に入る WebCamつけて監視システム温度計つけて温度測定
今後のイベント
今後のイベント
2013年8月 Debian勉強会
今日の宴会場所
今日の宴会場所
未定