第 85 回 東京エリア Debian 勉強会資料

2012 年 2 月 18 日

れ
こ
れ
あ
環境
Ｅ
Ｄ
Ｋ
の
者
発
開
ａｎ
ｉ
ｂ
ｅ
Ｄ
特集１：
ｅｒ
ｐ
ｌ
ｅ
ｂｈ
ｅ
Ｄ
刊
月
：
２
集
特

る
み
て
っ
つか
ｅ
ｋ
ａ
ｍ
ｃ
：
３
特集

第 85 回 東京エリア Debian 勉強会 2012 年 2 月

1 Introduction
野島 貴英

今月の Debian 勉強会へようこそ。これから Debian ので出会える場を提供する。

– Debian の た め に な る こ と を 語 る 場 を 提 供

世界にあしを踏み入れるという方も、すでにどっぷりとつかっているという方も、月に一回 Debian について語りまする。

– Debian について語る場を提供する。

せんか？

Debian 勉強会の目的は下記です。

Debian の勉強会ということで究極的には参加者全員が• Debian Developer (開発者) の育成。

Debian Package をがりがりと作るアクティブな開発者に• 日本語での「 開発に関する情報」を整理してまとなっ た姿を妄想しています。情報の共有・ 活用を通してDebian の今後の能動的な展開への土台として、「 場」とめ、アップデートする。

• 場 の提供。

しての空間を提供するのが目的です。

– 普段ばらばらな場所にいる人々が face-to-face1デビアン勉強会

目次

5.4

KDE 環境の開発の特徴 . . . .

5.5

Debian での KDE 環境のパッケージ開発 . . . . . . . . . .

9
10

1

Introduction

1

2

事前課題

3

の Debian パッケージを作って

2.1

鈴木崇文 . . . . . . . . . . .

3

みる . . . . . . . . . . . . . .

10

2.2

dictoss(杉本 典充) . . . . .

3

5.7

おわりに

. . . . . . . . . . .

11

2.3

yamamoto. . . . . . . . .

3

5.8

参考文献

. . . . . . . . . . .

11

2.4

野島 貴英

. . . . . . . . .

3

2.5

日比野 啓

. . . . . . . . .

3

5.6

ング報告

3.1

12

6.1

パッケージの make の前に… .

12

6.2

一連の dh ほげほげコマンドへ

4

東京エリア Debian 勉強会 84
回目報告

月刊 Debhelper

6

最近の Debian 関連のミーティ

3. . . . . . . . . . .

4

Debian Trivia Quiz

5

Debian 開発者の KDE 環境あ

45

超簡易的に KDE 用プログラムの追加の仕組み . . . . . . . .

12

6.3

dh dpatch patch コマンド . .

13

6.4

autotools だって使いたい . . .

13

6.5

おわりに

. . . . . . . . . . .

14

7cmake 使ってみる

15

れこれ

6

7.1

cmake とは . . . . . . . . . .

15

5.1

利用者としての KDE 導入方法

6

7.2

使ってみる . . . . . . . . . .

15

5.2

開発者としての experimental

7.3

IDE 用のプロジェ クトファ イ

版 KDE 導入方法 (KVM+spice)

5.3

7

Debian と KDE 環境のバージ
ョン . . . . . . . . . . . . . .

29ルを生成してみる . . . . . . .

17

7.4

おわりに

. . . . . . . . . . .

17

7.5

参考文献

. . . . . . . . . . .

17

第 85 回 東京エリア Debian 勉強会 2012 年 2 月

2 事前課題
野島 貴英

今回の事前課題は以下です:

1. 皆さんの Debian desktop 環境と、利用にあたって何か工夫があれば 200 文字以内でアピールください。 (contrib
目標/未来指向なアピールはさらに絶賛歓迎）
この課題に対して提出いただいた内容は以下です。
デスクトッ プとしての見た目は、壁紙すらデフォ ルトのまま

2.1

で、改造してませんが、機体としては家の LAN にぶら下がった

鈴木崇文

マシン間を「 何か (?)」が行き来する、魔改造スクリプトがいく

gnome で desktop を利用しています。工夫というほどではないですが、便利なツールとして KDE 系のアプリや EBView を使っています。リモートデスクトップ (RDP) ＆ VNC 用には、
KRDC を使い、スクリーンショット用には KSnapshot を使っています。あとは英辞郎を購入して、 EBView でいつでも翻訳

つか仕込んであり、ものぐさな私にはとっても快適です。

できるようにしています。

はもの足りず、 experimental から upgrade して引っ 張っ て

2.4

野島 貴英

GNOME 3.2.2 を Debian で利用しています。 unstable できてます。特にクールなカスタマイズは何もしてないですが、

2.2

gnome-shell が javascript など解釈できるということから、将来

dictoss(杉本 典充)

ちょっとしたガジェットぐらい作ってみたいなーと思うこの頃で低性能マシンは startx ＋ icewm、中高性能マシンは gdm ＋

す。あと、 gxconsole( http://gnomefiles.org/content/

xfce4 か gnome と使い分けています。 KDE は最近使ってないです。
（ KDE は重そうなイメージがある）カスタマイズしていshow.php/gxconsole?content=132145 ) が GNOME3.2.2になっても、やっぱり欲しかったので、 GNOME 3.2.2 用に移植したい...

るのは、ページャ の個数を６つに増やしている、複数のターミ
ナルを重ならないように同時起動するシェルスクリプトを作り一発で画面をターミナルで埋め尽くせるようにしています。
（ 昔タ

2.5

イル型ウィンドウマネージャ使えばいいのに、とか突っ込まれま
した）

日比野 啓

普段はタイル型ウィンドウマネージャの XMonad を使っています。マルチディスプレイに対するサポートが使いやすくてプレ

2.3

ゼンのときにも便利で気にいっています。最近、趣味のプログラ

yamamoto

ミングのメインで使っている言語が Haskell なので、 Haskell で

メ イ ン に 使っ て い る の は 、 録 画 サ ー バ も 兼 ね た Debian

カスタマイズできることも魅力です。 gnome-session との組合

squeeze (amd64) です。外出時は気分次第で、 sid の i386
ネットブックと sid の amd64 ノート PC を選んでいます。どれも、特に何の変てつもない、ただの KDE 環境です。

せも使ってみましたが、なぜか sid ではうまく動かなくて残念。
あと、画面の上下が狭くなるのが嫌なので、なんとかする方法が
知りたい。

3

第 85 回 東京エリア Debian 勉強会 2012 年 2 月

3 最近の Debian 関連のミーティング報告
野島 貴英

3.1 東京エリア Debian 勉強会 84 回目報告
1 月の東京エリア Debian 勉強会は久しぶりにあんさんぶる荻窪にて行われました。上川さんから、 Debian 勉強会予約システムに関する脆弱性と考察、また、 Debian の使える VPS に関する発表、岩松さんから Debian をつかった twitter
連携について発表がありました。また恒例の月刊 Debhelper は山田さんにより発表が行われ、 dh コマンドまわりをさらに深堀りした件と、 dh builddeb コマンドに関して発表が行われました。
今後ますます WEB システム用途にも Debian は使われていくと思います。このあたりを意識した発表が多かったのが印象的でした。

4

第 85 回 東京エリア Debian 勉強会 2012 年 2 月

4 Debian Trivia Quiz
野島 貴英

ところで、みなさん Debian 関連の話題においついていますか？ Debian 関連の話題はメーリングリストをよんでいると追跡できます。ただよんでいるだけでははりあいがないので、理解度のテストをします。特に一人だけでは意味がわからないところもあるかも知れません。みんなで一緒に読んでみましょう。
今回の出題範囲は debian-devel-announce@lists.debian.org や debian-devel@lists.debian.org に投稿された内容と Debian Project News からです。
問題 1. 2/14 頃に wheezy に関して公募が行われました。
問題 6. インストール/アップグレード/消去テストを担う

何の公募でしょうか？

QA チームの強力なツールの名前は？

□ A I18N 関係のサーバーシステム再構築の公募□ A init□ B 応援団長/イメージタレントの公募□ B piuparts□ C Look and Feel のアート分野に関する公募□ C upstart
問題 2. 今年 2 月にセキュリティアップデートが終了した
問題 7. 2/18 最新の Debian の安定版のリリース番号はい

Debian のバージョンは何でしょう?

くつでしょうか？

□ A lenny□ A 6.0.1□ B sarge□ B 6.0.2□ C woody□ C 6.0.4
問題 3. 1/25 に alioth になにがおきたか問題 8. Debian Games Team から 2/25,2/26 に行われ□ A vasks.debian.org が起動しなくなったる作業協力の呼びかけがアナウンスされてます。何でしょ□ B wagner.debian.org が起動しなくなったうか?

□ C churro が起動しなくなった□ A バグ取りパーティー (BSP) の呼びかけ
問題 4. 今年の DebConf12 はいつ開かれる予定?

□ B Games Team の IRC 会議参加の呼びかけ□ A 2012/7/1-7/7□ C ゲームのスクリーンショット取り協力の呼びかけ□ B 2012/7/8-7/14
問題 9. W3Techs の調査によると、世界で利用されている□ C 2012/のお盆Linux ベースの Web サーバーで 2012 年 1 月で僅差では問題 5. wheezy に入る予定の Linux カーネルバージョンあるものの No.1 になったディストリビューションは何ではいくつでしょう？

しょう？

□ A 3.0 系列□ A Debian に決まってるじゃないか□ B 3.1 系列□ B CentOS□ C 3.2 系列□ C Ubuntu Server5

第 85 回 東京エリア Debian 勉強会 2012 年 2 月

5 Debian 開発者の KDE 環境あれこれ
野島 貴英

最近の Debian をそのままインストールすると、特に指定しない場合 GNOME というデスクトップ環境がインストー
ルされます。しかしながら、 Debian ではいくつもデスクトップ環境が用意されており、ユーザは自由にこれらを選んで使うことができます。デスクトップ環境はユーザにとってはいつも使う環境ですから、いろいろとこだわりもあるかとおもいます。今回はそんな中、 KDE というデスクトップ環境についてあれこれ語ってみます。

5.1 利用者としての KDE 導入方法
Debian の安定版の利用を検討していて、 KDE 環境をいわゆる利用者として使う為にインストールするやり方について簡単に述べます。

1. 安定版の Debian のインストール DVD を用意します。
2. インストーラのメニュー画面が出ましたら、 TAB キーをおすと画面下の方に編集可能な行が現れますので、以下の例ように”desktop=kde” という文言を追加します。なお、日本語 106 キーボードを使っている場合、キートッ
プの刻印の通りに”=” を押しても”=” 文字が入力できない場合がありますが、この場合は”^” の刻印のキーを押すと”=” 文字が入力できます。
/install.amd/vmlinuz vga=788 initrd=/install.amd/initrd.gz --- quiet desktop=kde

図 1 安定版インストール画面で TAB キーを押したときの様子

3. あとは通常どおりインストールを行います。インストールを進めていくと「 インストールするソフトウェアの選
択:」のメニューが現れますので、”Debian desktop environment” を選択しておいてください。

6

4. インストールが完了しましたら、リブートを行います。
5. KDE 環境が起動します。
以上となります。簡単ですね。

5.2 開発者としての experimental 版 KDE 導入方法 (KVM+spice)
東京エリア Debian 勉強会にいらっしゃるような方々には、前述のインストールと環境ではきっと「 ぬるゲー（ 笑）」
な感じのはずです。その場合、是非とも experimental 版の KDE 環境を利用いただき、 BTS 書き/パッチ開発/翻訳/デバッグなどの開発活動に勤しんでみましょう。ここでは、開発者向け KDE 環境導入について簡単に述べます。

• 開発者向けに experimental 版導入を前提にします。
• 仮想環境である KVM を利用して仮想環境上に導入します。これなら、ディスクイメージファイルをとっておけ
ば、うっかり experimental 環境で aptitude full-upgrade して全く立ち上がらなくなっても（ 実話）あっさり復帰できます。

• サウンドももちろん欲しいので仮想デスクトップ環境として spice を使います。
• いつでもどこでも開発できるようにモバイル環境に構築します。
図 2 の KDE 開発環境の用意を想定します。

図 2 KDE 開発環境

以下は導入に関しての流れです。
（ 細かい事は割愛します。操作にあたっては適宜 root 権限が必要だったりします）

1. HostOS となる PC の BIOS を操作して、 CPU の仮想技術支援機構のスイッ チを ON にしてブートしておきます。

2. HostOS に http://www.debian.org/CD/netinst から名刺サイズの CD イメージを落として置きます。
3. HostOS の/etc/network/interfaces に以下の追記を行い、 br0 を作っておきます。
# 追記はここから。 aptitude install bridge-utils はやっておくこと。
auto br0
iface br0 inet static
address 192.168.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
bridge_maxwait 0

4. HostOS の/etc/sysctl.d/bridge-filter-workaround.conf を 作 り 、 sysctl -p /etc/sysctl.d/bridge-filterworkaround.conf を実行して、 br0 のフィルタを無効化しておきます。
# /etc/sysctl.d/bridge-filter-workaround.conf の中身
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

7

5. HostOS の/etc/ppp/ip-up.d/kvm-bridge-up,/etc/ppp/ip-down.d/kvm-bridge-down を作っ ておきます。他にフィルタとか必要であれば適当にどうぞ。
#!/bin/sh# /etc/ppp/ip-up.d/kvm-bridge-up の中身
PATH=/bin:/usr/bin:/sbin:/usr/sbin
CDPATH=sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o $PPP_IFACE -j MASQUERADE
iptables -A FORWARD -i br0 -o $PPP_IFACE -j ACCEPT#!/bin/sh# /etc/ppp/ip-down.d/kvm-bridge-down の中身#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
CDPATH=sysctl -w net.ipv4.ip_forward=0
iptables -t nat -D POSTROUTING -o $PPP_IFACE -j MASQUERADE
iptables -D FORWARD -i br0 -o $PPP_IFACE -j ACCEPT

6. HostOS に kvm/libvirt/spice-client-gtk パッケージを導入しておきます。
7. HostOS にて GuestOS 用の kde-test.xml を以下の雛形で作成して virsh define kde-test.xml しておきます。*1<domain type=’kvm’><name>kde-test</name><memory>1048576</memory><vcpu>1</vcpu><os><type arch=’x86_64’ machine=’pc-1.0’>hvm</type><boot dev=’hd’/><boot dev=’cdrom’/><bootmenu enable=’yes’/></os><features><acpi/><apic/><pae/></features><clock offset=’utc’/><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>restart</on_crash><devices><emulator>/usr/bin/kvm</emulator><disk type=’file’ device=’disk’><driver name=’qemu’ type=’raw’ cache=’writeback’/><source file=’/var/lib/libvirt/images/kde-test.img’/><target dev=’vda’ bus=’virtio’/></disk><disk type=’file’ device=’cdrom’><driver name=’qemu’ type=’raw’/><!-- directory of cdimage は適当に変更ください --><source file=’/directory of cdimage/debian-6.0.4-amd64-businesscard.iso’/><target dev=’hdc’ bus=’ide’/><readonly/></disk><controller type=’ide’ index=’0’/><interface type=’bridge’><!-- mac アドレスは適当に変更ください --><mac address=’52:54:00:31:cd:5a’/><source bridge=’br0’/><model type=’virtio’/></interface><serial type=’pty’><target port=’0’/></serial><console type=’pty’><target type=’serial’ port=’0’/></console><input type=’mouse’ bus=’ps2’/><graphics type=’spice’ port=’5900’ autoport=’no’><clipboard copypaste=’yes’/></graphics><sound model=’ac97’\><video><model type=’qxl’ vram=’9216’ heads=’1’/></video><memballoon model=’virtio’></memballoon></devices></domain>

8. HostOS で仮想環境用のディスクを 10GB ぐらいで作っておきます。
*1 virt-install は何故か自分の experimental な環境では Segmentation Fault で落ちてしまうのでここでは使いません。 BTS しときます。

8

qemu-img create -f raw /var/lib/libvirt/images/kde-test.img 10G

9. HostOS で KVM を起動して、 spice クライアントを接続します。
virsh start kde-test; spicy -h 127.0.0.1 -p 5900 &10. GuestOS の Debian インストーラが起動したら、 TAB キーを押し、画面下に現れた編集可能な行に、”priority=medium” を以下のように入力してインストールを開始します。
/install.amd/vmlinuz vga=788 initrd=/install.amd/initrd.gz --- quiet priority=medium

インストール途中「 Debian アーカイブのミラーを選択」のメニューにて”sid” を選択し、「 インストールするコン
ポーネント」として「 ssh サーバー」のみ (他は選択しない) とします。

11. インストールが完了すると、テキストコンソールから Debian sid な GuestOS へログインできるようになります。
12. GuestOS にログインして以下の行を/etc/apt/source.list へ付け加えます#追加内容
deb http://ftp.jp.debian.org/debian/ experimental maindeb-src http://ftp.jp.debian.org/debian/ experimental main

13. GuestOS の/etc/apt/preference.d に Debian KDE チーム製の experimental パッケージ用 preference ファイ
ルをインストールします。
cd /etc/apt/preference.d && wget http://pkg-kde.alioth.debian.org/files/kde-experimental

14. GuestOS で以下を実行し、 experimental な KDE 環境を一気に入れてしまいます。
aptitude update;aptitude aptitude install task-kde-desktop task-japanese-kde-desktop;aptitude clean

15. インストールが終わったら、 GuestOS をリブートします。 GuestOS で KDE の experimental 版が起動し、グラフィカルなログイン画面が現れます。

5.3 Debian と KDE 環境のバージョン
Debian のバージョンと KDE のバージョンの対応を表 1 に載せます。
Debianstabletesting

unstable

experimental

upstream

KDE

4.4

4.6

4.6

4.7.4

4.8.0

表 1 Debian のバージョンと KDE のバージョン

KDE の upstream は 2012 年 1 月 25 日に 4.8.0 をリリースしたばかりなので、まだ experimental も追いついていな
い状態です。

5.4 KDE 環境の開発の特徴
KDE 環境の開発は以下のような特徴があります。
1. Qt（ キュート）ライブラリを使う。
2. C++ のコードが基本
3. autotools の代わりに cmake が使われる
このため、 Debian ではパッケージ開発の為に pkg-kde-tools パッケージが用意されています。

9

5.5 Debian での KDE 環境のパッケージ開発
Debian では KDE 環境のパッケージ開発用に pkg-kde-tools というパッケージを別に用意しています。こちらを導入す
ると KDE 環境のパッケージ構築の際に便利な機能が使えるようになります。
項番

拡張されるもの

拡張

備考

1

dh

–with kde

debhelper に kde 用の拡張を指定

2

dh auto *–buildsystem=kde

dh auto *が cmake を使うようになる、 KDE 環境用の設定を行う等

3

CDBS

kde.mkCDBS で KDE 用の拡張が利用できるようになる

4

その他

variables.mk など

debian/rules の中で$(DEB CMAKE KDE4 FLAGS) などが使える等

表 2 pkg-kde-tools をインストールした時の拡張

5.6 超簡易的に KDE 用プログラムの Debian パッケージを作ってみる
ここでは超簡易的に KDE 用プログラムの Debian パッケージを作ってみます。
まず、事前準備として、•

環境は 5.2 章の experimental 環境を用意ください。

• 必要なパッケージ (cmake パッケージ等) *2
次に khello-1.0.0/なるディ レクトリに http://techbase.kde.org/Development/Tutorials/First_programにある、 main.cpp と CMakeLists.txt を配置します。
$ cd khello-1.0.0$ ls
CMakeLists.txt main.cpp$

次に、オリジナルの tar.gz アーカイブを作成しておきます。
$ cd ..
$ tar czf khello_1.0.0.orig.tar.gz khello-1.0.0$ ls -Fkhello-1.0.0/ khello_1.0.0.orig.tar.gz$

dh make を使って debian/ディレクトリを仕込みます。あとは rules ファイル以外いつも通り、パッケージを作成する
ようにファイルを作成しておきます。
$ cd khello-1.0.0/debian$ ls -F
README.Debian changelog
README.source compat$

control
copyright

docs
rules

source/pkg-kde-tools パッケージを利用する rules ファイルを記載します。
# pkg-kde-tools を使った KDE 開発用 debian/rules ファイルの中身。
%:
dh $@ --with kde

あとは、 dpkg-buildpackage -uc -us -rfakeroot を実行してビルドします。

*2 KDE 環境向けの開発が全く初めての人は、細かい事が判ってくるまで、 aptitude build-dep kdeutils しておいて KDE パッケージ開発に必

要なパッケージをあらかじめまとめて導入しておくという手もあります10

$ dpkg-buildpackage -us -uc -rfakeroot
dpkg-buildpackage: source package khello... 中略...
dpkg-source: info: building khello in khello_1.0.0-1.debian.tar.gz
dpkg-source: info: building khello in khello_1.0.0-1.dsc
debian/rules build
dh build --with kde
dh_testdir
dh_auto_configure --buildsystem=kde-- The C compiler identification is GNU-- The CXX compiler identification is GNU... 中略...

無事、–buildsystem=kde が利用され、 cmake が実行されています。
しばらく待つと無事に khello 1.0.0-1 amd64.deb などが出来上がります。
ほら、 pkg-kde-tools のおかげでパッケージ開発も簡単でしょ ?でしょ？

5.7 おわりに
今回は、 Debian 開発者の為の KDE 環境の構築と、簡単なパッケージ作成について、一通り記載してみました。これを機に、 KDE 環境に関する開発をされる方が増えるとうれしいと思っています。

5.8 参考文献• http://pkg-kde.alioth.debian.org/ Debian KDE Team のホームページ。
• http://techbase.kde.org KDE Techbase• http://kde.org/ KDE 本家• http://www.spice-space.org/ SPICE 仮想デスクトップデバイス本家

11

第 85 回 東京エリア Debian 勉強会 2012 年 2 月

6 月刊 Debhelper
山本 浩之

6.1 パッケージの make の前に…
先月までに学んできたように、 Debhelper は、基本的にビルドに必要な一連の dh ほげほげコマンドを自動実行します。
例えば Debhelper は、 dh auto configure というコマンドを提供しており、これはご想像の通り、./configure --build=’dpkg_architecture_value("DEB_BUILD_GNU_TYPE")’ --prefix=/usr --includedir=/usr/include \--mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --localstatedir=/var \--libdir=/usr/lib/\$multiarch --libexecdir=/usr/lib/\$multiarch --disable-maintainer-mode \--disable-dependency-tracking --host=’dpkg_architecture_value("DEB_HOST_GNU_TYPE")をしているだけです。
しかし、メンテナによって autotools を利用し、 confugure スクリプトをビルドの度に毎回 configure.ac から生成したい人もいるでしょうし、もしかすると Makefile の元となる Makefile.in だって、毎回 Makefile.am から生成したい人もいるでしょう。また、 Debian パッケージオリジナルのパッチをあててパッケージを作るのは、ごく当たり前のように行な
われています。
そこで今月は、一連の dh ほげほげコマンドへの追加の仕組みと、その例として、 dpatch パッ ケージで提供される

dh dpatch patch コマンドと、 autotools-dev パッケージで提供される dh autotools-dev updateconfig コマンドの追加について解説しましょう。

6.2 一連の dh ほげほげコマンドへの追加の仕組み
基本となる一連の dh ほげほげコマンドは、大元のコマンドである dh スクリプトに記述してあり、すべてについては先月や先々月に話されているので、割愛します。
特に make 直前に実行されるものは、
dh_testdir #カレントディレクトリの確認
dh_auto_configure #./configure の実行だけです。
勿論、これだけではパッチもあてられないですし、 configure スクリプトの再生成もできません。
そこで dh スクリプトは、一連の dh ほげほげコマンドを列挙する配列にし、これを$sequences$sequence のスカラ変数として保持しています。 (この辺は perl にあまり詳しくないので、ちょっと間違っているかも…)
また、この$sequences から dh ほげほげコマンドを除いたり (remove command)、ある dh ほげほげコマンドの前に追加する (insert before) サブルーチンも用意されています。

dh スクリプトは、/usr/share/perl5/Debian/Debhelper/Sequence/ディレクトリのなかにあるファイルを参照して
おり、ここに

12insert_before("dh_auto_configure", "dh_追加ほげほげ")という記述のあるファイル (アドオン) が追加されると、 dh auto configure の前に dh 追加ほげほげコマンドが実行されるようになります。
ただし、 rules の
dh $@ --with 〜でアドオンが指定されない限り評価はされないので、ビルドに不必要な dh ほげほげコマンドを入れていても大丈夫なはずです。

6.3 dh dpatch patch コマンド
dpatch パッ ケ ー ジ を イ ン ス ト ー ル す る と 、/usr/share/perl5/Debian/Debhelper/Sequence/ディ レ ク ト リ にdpatch.pm ファイルが入り、これには、
insert_before("dh_auto_configure", "dh_dpatch_patch")insert_before("dh_clean", "dh_dpatch_unpatch")という記述があります。これは見て想像できるとおり、 make の直前に実行される./configure のさらに直前に、

dh dpatch patch を加えています。また、下の記述は、以前にビルドしたことがある場合に、パッチする前の状態にする
dh dpatch unpatch コマンドも追加されています。
この dh dpatch patch は、パッケージソースの debian/patches/00list に記述されたファイル名のパッチを先頭からパッチするコマンド、 dpatch スクリプトを実行します。
すなわち、もし configure スクリプトに dpatch でなんらかのパッチをあてて実行したければ、 dpatch パッケージをBuild-dep し、 debian/patches/ディレクトリにパッチファイルとそれに合わせた 00list ファイルを用意し、
dh $@ --with dpatchと rules ファイルに記述しておけば良いはずです。

make だけしたいならば、ターミナルで、$ dh_dpatch_patch$ ./configure 〜$ makeでも大丈夫です。

6.4 autotools だって使いたい
ビルドするマシンの環境に合わせて、 configure スクリプトなどを調整してくれるツールとして、 GNU autotools というものがあります。次にこの GNU autotools を Debhelper で利用する方法について述べましょう。

dh-autoreconf パッ ケージをインストールすると、依存関係で automake、 autoconf と、 automake に依存してautotools-dev がインストールされます。 autotools-dev パッケージは/usr/share/perl5/Debian/Debhelper/Sequence/
ディレクトリに autotools-dev.pm ファイルが入ります。これには、
insert_before("dh_auto_configure", "dh_autotool-dev_updateconfig")
insert_before("dh_clean", "dh_autotool-dev_restoreconfig")と記述されています。

dh autotool-dev updateconfig コマンドは、カレントディレクトリ以下で実行しているシステムタイプの標準名を推測するための config.guess と config.sub ファイルを探し、 config.guess.dh-orig と config.sub.dh-orig ファイルに名前を換え、それぞれ/usr/share/misc/ディレクトリにある最新 autotool-dev の config.guess と config.sub をコピーしてき

13

ます。

dh-autoreconf パッケージは/usr/share/perl5/Debian/Debhelper/Sequence/ディレクトリに autoreconf.pm ファ
イルが入ります。これには、
insert_before("dh_auto_configure", "dh_autoreconf")
insert_before("dh_clean", "dh_autoreconf_clean")と記述されています。

dh autoreconf コマンドは、簡単に言うと、 automake、 autoconf をしてくれる autoreconf スクリプトを呼び出し、
configure や Makefile.in を再生成します。
dh autoreconf を使いたいときは、このパッケージに Build-dep し、
dh $@ --with autoreconfと rules ファイルに記述しておけば良いはずです。 debian/autoreconf ファイルにディレクトリのリストがあれば、そこだけ configure や Makefile.in を更新してくれます。

autoreconf.pm ファイルでは「 dh auto configure より前だよ」という指定しかありませんから、 dh autoreconf が実行されてパッチがあてられるのか、パッチがあてられてから dh autoreconf が実行されるのかまでは記述されていません。 dh スクリプトを見た限りでは「 –with」オプションの順でリストされているようです。つまり、 dh-autoreconf パッ
ケージを利用するソースパッケージの Makefile に対して BTS でパッチを書く場合は、「 –with」オプションの順を確認する必要がありそうです。

6.5 おわりに
今回は make を実行する前に使用される configure スクリプトなどの、 Debhelper を使ったカスタマイズ法について、駆け足で説明してみました。

14

第 85 回 東京エリア Debian 勉強会 2012 年 2 月

7 cmake 使ってみる
野島 貴英

7.1 cmake とは
KDE 環境の開発に使われているツールに cmake があります。これは従来の autotools のようなものです。が、autotools に比べて次に述べる代表的な特徴があります。
• バイナリのプログラムである
autotools は、ご存知の通り、中は sh スクリプトとなっています。これは/bin/sh を基本コマンドとして持つ従来の UNIX 系の OS で使うなら非常に都合がよいのですが、そもそも/bin/sh を持たないシステムの元で利用しようとすると動作できません。これでは、例えば、標準的な C プログラムをコンパイル出来る環境なのに、/bin/sh が無いという本質ではない理由の為に移植性を損なうのはちょっと残念です。

cmake はバイナリのプログラムなので、コマンド単体で動作することができ、/bin/sh など UNIX のコマンドが無い場所でも問題なく動作できます。

• 様々なプラットフォーム用の構築システムに対応できる
autotools は make に特化したツールとなります。ここで、そもそも Makefile が一般的ではない開発環境（ 例：Microsoft Visual Studio 等の様々な IDE) の場合、 Makefile よりも IDE のプロジェクトファイルを生成できた方がより都合がよかったりします。 cmake は一本の CMakeLists.txt を用意するだけで、 Makefile や、 IDE 環
境用のプロジェクトファイルを生成できたりする能力があります。この為、 autotools を利用したソースパッケー
ジのように、 Makefile.am と、例えば.vcproj ファイルを別々に修正して UNIX/Windows 間の移植性を保つというような作業から開発者が開放される可能性を意味します。

• その他
詳しいサマリは、 DDJ ジャーナルの http://drdobbs.com/cpp/184405251 にサマリされているような機能がある模様です（ まだ自分は未評価です。）
この記事からいくつか抜粋すると、– QT ライブラリの moc コマンド/ITK の CABLE/VTK のラッパー生成コマンドに対応したステートメント– 静的ライブラリ、動的ライブラリの生成を容易に切り替えれるようにする機能– ファイルの依存関係の自動生成、並列ビルドのサポートがある模様です。

7.2 使ってみる百聞は一見にしかずなので、ちょっと使ってみます。

cmake パッケージをシステムに導入します。

15

aptitude install cmake

次に以下のソース (hello.c,config.h.in) を用意します。
/*hello.c*/#include <stdio.h>#include "config.h"
int main(int argc,char **argv){
printf("hello world\n");#if defined(HAVE_EXIT)
printf("yes, this system has exit()\n");#endifreturn(0);}/*config.h.in*/#cmakedefine HAVE_EXIT

次に、 CMakeLists.txt を用意します。
# cmake のバージョンは 2.8 以上
cmake_minimum_required(VERSION 2.8)
# project の名前を宣言
project(hello)# cmake 提供のマクロをロードする。ここでは関数がシステムにあるかを確かめるマクロ# を使ってみる。
include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)# exit() 関数をチェックしてみる。あれば HAVE_EXIT を定義せよという意味。
check_function_exists(exit HAVE_EXIT)
configure_file ("${PROJECT_SOURCE_DIR}/config.h.in""${PROJECT_BINARY_DIR}/config.h")# cc -I に何指定するか
include_directories ("${PROJECT_BINARY_DIR}")# hello は hello.c から出来るという事を指定
add_executable(hello hello.c)

これら 3 つのファイルを hello-src/以下に配置します。
$ ls -lR.:
合計 4drwxr-xr-x 2 nojima nojima 4096

2 月 17 03:15 hello-src./hello-src:
合計 8-rw-r--r-- 1 nojima nojima 46 2 月 17 03:15 CMakeLists.txt-rw-r--r-- 1 nojima nojima 34 2 月 17 04:21 config.h.in-rw-r--r-- 1 nojima nojima 91 2 月 17 03:10 hello.c$

今回はビルド用ディレクトリ (hello-build) を作り、移動します。
$ ls
hello-src$ mkdir hello-build$ cd hello-build

cmake を実行します。
$ cmake ../hello-src-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler: /usr/bin/gcc-- Check for working C compiler: /usr/bin/gcc -- works... 中略...
-- Looking for exit-- Looking for exit - found-- Configuring done-- Generating done-- Build files have been written to: /.../cmake-test/hello-build$ lsCMakeCache.txt CMakeFiles Makefile cmake_install.cmake config.h

自動的に環境チェックが行われ Makefile/config.h が出来上がります。 exit 関数も見つかったとの表示が行われまし16

た。ここで make してみます。
$ makeScanning dependencies of target hello[100%] Building C object CMakeFiles/hello.dir/hello.c.oLinking C executable hello[100%] Built target hello$ ls -F
CMakeCache.txt CMakeFiles/ Makefile cmake_install.cmake$ ./hello
hello world
yes, this system has exit()$

config.hhello*

CMakeLists.txt から無事に実行バイナリ (hello) が出来上がりました。また、 defined(HAVE EXIT) も True となり、 exit() 関数がある時のコードもコンパイルされています。

7.3 IDE 用のプロジェクトファイルを生成してみる
cmake を引数無しで実行すると、 help が出てきます。このヘルプの文章の中に、どんな IDE 用のプロジェクトファイ
ルを生成できるかについて説明があります。試しに手元の Debian マシンで実行すると、$ cmake... 中略..
The following generators are available on this platform:
Unix Makefiles= Generates standard UNIX makefiles.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
KDevelop3= Generates KDevelop 3 project files.
KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files.
$

ここでは試しに先ほどの hello-build ディレクトリ以下で KDevelp3 project ファイルを生成してみます。
$ cmake -G KDevelop3 ../hello-src... 中略...
$ ls
MakeCache.txt Makefile
CMakeFiles
cmake_install.cmake$config.hhello.kdevelop

hello.kdevelop.filelist
hello.kdevses

確かに KDevelp3 用のプロジェクトファイル (hello.kdevelop 等) が生成されています。

7.4 おわりに
cmake は KDE の他にも mysql でも採用されています。また、 wikipedia(http://ja.wikipedia.org/wiki/
CMake) によれば、利用しているアプリケーションも続々増えている模様です。
使いこなせると強力なツールとなりそうな感じです。皆さんも使ってみてはいかがでしょうか？ Debian なら aptitude
で簡単に導入できますので、是非試してみてください。

7.5 参考文献• http://www.cmake.org/ cmake 本家• http://www.cmake.org/cmake/help/cmake_tutorial.html cmake チュートリアル• http://drdobbs.com/cpp/184405251?pgno=1 DDJ ジャーナルの記事

17

18

Debian 勉強会資料
2012 年 2 月 18 日
初版第 1 刷発行
東京エリア Debian 勉強会（ 編集・ 印刷・ 発行）

19