第 64 回 関西 Debian 勉強会資料
関西 Debian 勉強会担当者 佐々木・ 倉敷・ のがた・ かわだ
2012 年 9 月 23 日
第 64 回 関西 Debian 勉強会 2012 年 9 月
1 Introduction
Debian JP
関西 Debian 勉強会は Debian GNU/Linux のさまざまなトピック (新しいパッケージ、 Debian 特有の機能の仕組、
Debian 界隈で起こった出来事、などなど)について話し合う会です。
目的として次の三つを考えています。
• ML や掲示板ではなく、直接顔を合わせる事での情報交換の促進
• 定期的に集まれる場所
• 資料の作成
それでは、楽しい一時をお楽しみ下さい。
1
関西Debian 勉強会
目次
1 Introduction 1
2 最近の Debian 関係のイベント報告 3
3 事前課題 4
4 clang によるパッケージビルド 6
5 月刊 Debian Policy 第 6 回「 文書」 9
6 今後の予定 15
7 メモ 16
2
第 64 回 関西 Debian 勉強会 2012 年 9 月
2 最近のDebian関係のイベント
報告
Debian JP
2.1 第 63 回関西 Debian 勉強会
63 回目の関西 Debian 勉強会は 8 月 26 日に福島区民センターで行ないました。
「 Debian ではじめる Kerberos 認証」と特別ゲストの Ralf Treinen さんによる「 News from EDOS: finding
outdated packages」でした。
Ralf さんには DebConf12 のセッ ションそのままに発表していただきちょっとした DebConf 体験ができたと思い
ます。
2.2 第 92 回東京エリア Debian 勉強会
92 回目の東京エリア Debian 勉強会は 9 月 8 日に開催された OSC2012 Tokyo/Fall で行なわれました。
セッションでは「 次期安定版 Debian 7.0 ”Wheezy” の紹介」を行ない、ブースはインフォグラフィックスやチート
シートが好評で多くの方に立ち寄っていただけたようです。「 Grand Unified Debian(あんどきゅめんてっどでびあん
2012 夏号)」も完売しました。
2.3 第 0 回 Debian パッケージング道場 @楽天
9 月 22 日に楽天にて第 0 回目となる Debian パッケージング道場が開催されました。
丸一日、 Debian 漬けで Debian パッケージを作るコアな企画ですが事前申し込み者が 23 名と盛況だったようです。
関西でもこのようなイベントをやりたいですね。
3
第 64 回 関西 Debian 勉強会 2012 年 9 月
3 事前課題
Debian JP
今回は以下の課題を出題しました.
1. Debian を使ってやってみたいことを教えてください。
参加者の皆さんの解答は以下の通りです。
3.1 川江
kvm による WebServer 等々の作成
3.2 かわだてつたろう
そろそろ開発などを。
3.3 yyatsuo
Debian は手段ではなく目的なので特に無し。
強いて言うならば free の精神を広めること。
3.4 岡野孝悌
翻訳とかしたいですね。
でもって、 Debian 関係の翻訳に関する情報をまとめて発表とかしたいですね。
ていうか、かわださんによると近いうちにやることになってますよ
*
1
。やばい、やばいよ! まずは DDTP に参加だー!
3.5 木下
• 複数の Debian マシンで分散コンパイル
→できたらいいな的なレベルです^^;
現在 AndroidOS 開発に携わっているのですが、
Android2.3 以降、ターゲットボードのソースをクリーンビルドすると、
数時間かかるので、これを複数の Debian マシンで分散コンパイルして
時間短縮できればいいな的な・・・
*
1
https://twitter.com/t3rkwd/status/248404019607904256
4
• DTM 等 DAW 環境として使えたら等・・・
• 今更ながらですが、 VR 等、サイバースペースサーバみたいなシステムとして・・・
※この辺、ドシロートです。
3.6 lurdan
Debian の開発
3.7 清野陽一
自由でオープンな社会の発展
3.8 山城の国の住人 久保博
ソフトウェア開発作業、翻訳作業、 Twitter, 年賀状作りなど PC でやる作業全般。そのための環境作りをぼちぼちやっ
て行きたいです。
最近、 Xen の準仮想化環境作りに挑戦して、失敗しています。これもやってみたいことの一つです。
5
第 64 回 関西 Debian 勉強会 2012 年 9 月
4 clangによるパッケージビ
ルド
かわだ てつたろう
4.1 はじめに
「 Build of the Debian archive with clang」 [1] という Debian のアーカイブを clang で再ビルドするプロジェクト
が行なわれています。 clang でパッケージをビルドすることで何がうれしいのかなどを紹介します。
4.2 clang とは
clang
*
2
は C/C++、 Objective C/C++ を対象としたコンパイラです。 LLVM(Low Level Virtual Machine)
*
3
を
バックエンドとして使用し LLVM の一部としてリリースされています。
clang のサイトに挙げられている機能、目的をいくつかみてみると
• コンパイルの高速化とメモリ使用低減
• 親切なメッセージ
• GCC 互換
• 高い規格準拠度
• BSD ライクなライセンス
• モジュール化されたライブラリ構成
といったところがあります。
現在、絶賛開発中なコンパイラです。
4.3 「 Build of the Debian archive with clang」の目標と状況
プロジェクトの目標は
• clang が現実的な選択肢であるか (そうでないか) を証明すること
• 異なるコンパイラを使ってビルドすることによって提供される異なったチェック、警告でソフトウェアのコードの品
質を向上すること
が挙げられています。
*
2
http://clang.llvm.org/
*
3
http://llvm.org/
6
プロジェクトの成果として、 2012 年 6 月時点の状況は 17710 のパッケージが再ビルドされその内 2137 のパッケージ、
全体の 12.1% がビルドに失敗しています。この結果には clang を用いたビルドに失敗したがノーマルな sid 環境でのビル
ドに成功したもの、つまり clang のバグと思われるものは含まれていません。
また、過去には clang2.9、 clang3.0 を用いてビルドされています。
clang Ver 日付 対象パッケージ数 失敗したパッケージ数 失敗したパッケージの割合
2.9 2011/09 16398 2372 14.5%
3.0 2012/01 15658 1381 8.8%
3.1 2012/06 17710 2137 12.1%
4.4 追試
プロジェクトのサイトにはビルド環境のセットアップコードが載せられています。これを用いることで簡単に試してみる
ことができますので試してみましょう。
ただし、セットアップコードを見ていただければ分かりますが/usr/bin{g++,gcc,cpp}-VERSION を一旦削除して
clang のシンボリックリンクに置き換えることになります。常用環境では実行しないほうがよいでしょう。
ここでは pbuilder を用いて追試してみました。
pbuilder には環境を変更するための手段として hook が用意されています。そこで、先のセットアップコードを hook
として仕込み既存の pbuilder 環境を壊すことなく容易に clang ビルド環境のセットアップができるようにします。
$ mkdir ~/clanghook
$ cd ~/clanghook
$ cat << EOS > A10replaceclang
#!/bin/sh
echo "Install of clang"
#apt-get update
apt-get install --yes --no-install-recommends clang -t unstable
echo "Replace gcc, g++ & cpp by clang"
VERSION=4.7
cd /usr/bin
rm g++-$VERSION gcc-$VERSION cpp-$VERSION
ln -s clang++ g++-$VERSION
ln -s clang gcc-$VERSION
ln -s clang cpp-$VERSION
cd -
echo "Block the installation of new gcc version"
echo "gcc-4.6 hold"|dpkg --set-selections
echo "cpp-4.6 hold"|dpkg --set-selections
echo "g++-4.6 hold"|dpkg --set-selections
echo "gcc-4.7 hold"|dpkg --set-selections
echo "cpp-4.7 hold"|dpkg --set-selections
echo "g++-4.7 hold"|dpkg --set-selections
echo "Check if gcc, g++ & cpp are actually clang"
gcc --version|grep clang > /dev/null || exit 1
EOS
$ chmod +x A10replaceclang
$ ln -s A10replaceclang F10replaceclang
シンボリックリンクを作成することで login または execute 時にもセットアップされるようにしておきます。
これで準備が整いましたので後は pbuilder でパッケージをビルドする時に hook を指定すれば clang を使ってビルドさ
れるようになります。
$ sudo pbuilder --build --hookdir ~/clanghook hello_2.8-2.dsc
いくつかのパッケージを試してみましたが確かに clang を用いたビルドの方がエラーチェックが厳しいようです。しか
し gcc で出力されていた警告が clang では出力されなくなるケース
*
4
もありました。この辺りはコンパイラへのオプショ
*
4
例えば sl 3.03-17
7
ンによって変わってくるのかもしれません。
4.5 libc++
libc++ は clang と同じ LLVM のプロジェクトで C++11 をターゲットにした C++ 標準ライブラリです。新しい仕
様である C++11 への対応は clang のみではなく標準ライブラリの対応も必要で、 clang による C++11 への対応といっ
た場合は libc++ を用いた場合か libstdc++ へパッチを当てたものになるようです。 [2]
この libc++ を使うことはプロジェクト展望に「 libc++ を libstdc++ の代替として提供する」 [3] として含まれてい
ます。この試みは順調に進んでおり、 2012/07/31 には libc++ が experimental に入りました。まだ libc++ 自体に問
題が多いようですがそれなりに使えています。
パッケージは i386 と amd64 版しか用意されていませんが、試してみようと思われる方は apt-line に experimental を
追加し libc++-dev と libc++abi-dev をインストールしてください。
$ sudo apt-get -t experimental libc++-dev libc++abi-dev
そして、適当に C++ のコードを書いて、コンパイラへオプションで標準ライブラリに libc++ を指定してビルドしま
す。出来上がった実行ファイルを ldd で表示してみると libstdc++ ではなく libc++ がリンクされていることが確認でき
ます。 [4]
$ clang++ -stdlib=libc++ foo.cpp -o foo
$ ldd foo|grep c\\+\\+
ldd foo|grep c\\+\\+
libc++.so.1 => /usr/lib/x86_64-linux-gnu/libc++.so.1 (0x00007f8b5ec60000)
$ g++ -nostdlib -lc++ -lc++abi -std=c++11 \
/usr/lib/x86_64-linux-gnu/crt1.o \
/usr/lib/x86_64-linux-gnu/crti.o \
/usr/lib/x86_64-linux-gnu/crtn.o \
-isystem /usr/include/c++/v1 -lc -lgcc_s \
foo.cpp -o foo
$ ldd foo|grep c\\+\\+
ldd foo|grep c\\+\\+
libc++.so.1 => /usr/lib/x86_64-linux-gnu/libc++.so.1 (0x00007f5098ce8000)
libc++abi.so.1 => /usr/lib/x86_64-linux-gnu/libc++abi.so.1 (0x00007f5098a9a000)
さらに C++11 の機能を使ってやってみようと思う方は 8 月の東京エリア Debian 勉強会の資料を参考にして試してみ
てください。
参考文献
[1] Build of the Debian archive with clang, http://clang.debian.net/
[2] C++98 and C++11 Support in Clang, http://clang.llvm.org/cxx_status.html
[3] Provide an alternative to libstdc++ with libc++, http://wiki.debian.org/SummerOfCode2012/
Projects#Provide_an_alternative_to_libstdc.2B-.2B-_with_libc.2B-.2B-
[4] Article complet: libc++: New C++ standard library in Debian, http://sylvestre.ledru.info/blog/
sylvestre/2012/08/15/libc_new_c_standard_library_in_debian
8
第 64 回 関西 Debian 勉強会 2012 年 9 月
5 月刊 Debian Policy 第6回
「 文書」
岡野孝悌
Debian ユーザーでもないのに今回の担当となりました おかの です。
今回読むのは第 12 章の「 文書」についてです。多くのソフトウェアパッケージにはマニュアルなどの文書が附属してい
ますし、文書のみからなるパッケージもあります (debian-policy 自体がまさにそうです)。また、マニュアル類のほか、
設定ファイルのサンプルや、変更履歴、著作権情報といったものもあります。
5.1 マニュアル (man ページ)
ベル研で Unix が誕生したころ、文書処理システムという口実で予算を取っていたりして、 Unix 関係の文書といえば
roff でした
*
5
。本章でも man ページの説明に多くを割いています。
5.1.1 インストール場所
roff ファイルを gzip -9 で圧縮して、/usr/share/man 以下の適切な場所にインストールします。英語マニュアルは
/usr/share/man 直下、それ以外は /usr/share/man/locale 以下の、セクション別のディレクトリ (man1, man2, ...,
man9) に置きます。詳細は FHS 参照といいつつ、 FHS とは以下のような差異があります。
• 英語マニュアルは /usr/share/man/en 以下ではなく /usr/share/man 直下に置く。 (FHS でこれが許される
のは、英語マニュアルしかない場合)
• セクション 9 が存在する (FHS では 1 から 8 までのみ)
man ページの整形には時間がかかるので、整形済みのマニュアルをあらかじめインストールしておけば
*
6
、いきなり
ページャーで表示することができて快適になりますが、パッケージが整形済みマニュアルをインストールしてはいけま
せん。
5.1.2 パッケージへの同梱
man ページ以外の文書は、 foo-doc のようにソフトウェア本体と別パッケージに分離することがありますが、 man
ページはソフトウェア本体と同じパッケージに含めるのが原則です。
プログラムのマニュアルが存在しない場合、それはバグとして扱われます。上流にマニュアルを追加してもらうか、
Debian パッケージで独自にマニュアルを追加する必要があります。といっても、「 info 見れ」「 この URL 見れ」だけ
のマニュアル
*
7
でも可です。
*
5
History of UNIX Manpages http://manpages.bsd.lv/history.html が参考になります。
*
6
FreeBSD のベースシステムなどでは整形済みのマニュアルが標準で配布されています。
*
7
そのようなマニュアルの実例としては、 (いずれも上流由来ですが) GNU cpio や netpbm があります。
9
5.1.3 複数名をもつマニュアル
grep, fgrep, egrep のように、同じマニュアルが複数の名前で参照されることがあります。
Linux Man Page Howto
*
8
では、 (シンボリックリンクを持たないシステムに配慮し) roff の .so マクロを使う方法が
もっとも望ましいとされていますが、 Debian では必ずシンボリックリンクがあるためか、原則として .so マクロを使わ
ずにシンボリックリンクを使うよう求めています。ただし、上流で .so マクロを使っている場合は、無理にシンボリックリ
ンクに直す必要はありません。
たとえば grep パッケージ (GNU grep) では、 egrep.1.gz, fgrep.1.gz はいずれも grep.1.gz へのシンボリックリンク
となっています。いっぽう、 manpages-ja パッケージにはこれらの (古い) 日本語訳がありますが、こちらでは egrep.1
や fgrep.1 は .so マクロを使って grep.1 を参照しています。
なお、これとは逆に、複数の異なるマニュアルが同じ名前で参照されることがあります。たとえば vim と nvi は、
通常どちらも vi という名前で参照されます。本章では言及されていませんが、これは Appendix F で説明されている
update-alternatives で扱うことができます。また、 editor(1) と pager(1) について 11 章で言及されています。
5.1.4 翻訳マニュアル
マニュアル以外の文書にも翻訳はありますが、 debian-policy ではマニュアルについてのみ翻訳に触れています。マ
ニュアルはガンガン更新されるので、せっかく翻訳してもすぐ古くなってしまいます。利用者が古い翻訳マニュアルを鵜呑
みにしないように、翻訳が古い可能性について言及したりするよう求めています。
apt など、 Debian 独自ツールのマニュアル翻訳では、 po4a を使って翻訳し (訳が古くなった場合、その部分は原文
が表示されるようになる)、かつ注意書きをすることで、この指針が守られているようです。一方、 manpages-ja をはじ
め、上流で翻訳されたマニュアルでは、守られていないように見えます。
エンコーディングは UTF-8 のほか、一部のレガシーエンコーディング (日本語の場合は EUC-JP) も使えます
*
9
。
5.2 info 文書
info 文書について述べています。 info 文書は必須ではありません。
• info 文書は /usr/share/info 以下へインストールする
• gzip -9 で圧縮する
• install-info 用のセクションとディレクトリエントリ情報を含める
5.3 追加文書
man, info 以外の形式の文書がパッケージに含まれている場合の扱いを述べています。
• info は /usr/share/doc/package 以下へインストールする
• 大容量で必要性の低い文書は別パッケージにするべき
• ソフトウェアの動作が /usr/share/doc/package 以下のファイルに依存してはいけない
• /usr/share/doc/package 自体を他へのシンボリックリンクとできる条件 (著作権関連情報の節にも記載がありま
すが、適切な copyright ファイルを機械的に抽出できる必要があります)
• /usr/doc から /usr/share/doc への移行に関する説明
*
10
*
8
http://www.schweikhardt.net/man_page_howto.html (JF に古い日本語訳あり)
*
9
man のエンコーディングに関する議論は Bug#440420 参照
*
10
脚注にも説明がありますが、 FSSTND 1.2 までは、 man や doc 等は/usr/ 直下に置くこととなっていました。 FHS 2.0 (1997 年) で、
BSD の流儀を取り入れ、/usr/share/ 以下に置くよう改められています。 Debian では potato で移行しています。当時の議論は 1999 年か
らの debian-ctte メーリングリストのログで見ることができます。
10
5.4 好ましい文書形式
DocBook などをもとに同じ文書を複数形式で提供するケースがありますが、そのような場合は可能な限り HTML をイ
ンストールします。 HTML 以外の形式をどうするかはメンテナーの裁量にまかされています。
5.5 著作権関連情報
パッケージに含まれるものの著作権、ライセンスに関する文書 (copyright ファイル) の扱いについて述べています。
このファイルは必須です。
Debian パッケージでは debian/copyright に含めておき、/usr/share/doc/package/copyright にインストー
ルします。
このファイルには、パッケージの著作権、ライセンス情報を、元のままで含める必要があります (ただし、 GPL などの
よく使われるライセンスは /usr/share/common-licenses にあらかじめ置かれているものを参照する形にします)。内
容の改変はもとより、文書形式の変換もしてはいけません。また、このファイルを圧縮したりシンボリックリンクにしたり
してはいけません。
copyright ファイルには、著作権、ライセンス情報のほか、以下の情報を含める必要があります。
• 上流のソースの入手元
• パッケージの原作者名
また、以下の情報を含めるべきです。
• Debian パッケージ作成に関与した Debian メンテナ名 (3.9.3.0 で削除されました; 後述)
• (contrib, non-free の場合) 当該パッケージが Debian の一部ではないことと、その簡潔な理由
5.6 設定例など
設定ファイルやソースファイルなどの例を提供する場合の扱いを述べています。
• /usr/share/doc/package/examples 以下にインストールする。
• ただし、アーキテクチャー依存のファイルは/usr/lib/package/examples 以下にインストールし、シンボリック
リンクを張る。
• 前述のとおり、動作が /usr/share/doc 以下のファイルに依存してはいけないので、ここに置かれたファイルをプ
ログラムから参照してはいけない。
• foo-examples のような、例そのものを提供するパッケージは、パッケージそのものを /usr/share/doc/package
にインストールしてもよい。
5.7 Changelog ファイル
変更履歴の扱いについて述べています。
Debian 由来でないパッケージは、上流の変更履歴と Debian パッケージの変更履歴を区別することを求めています。
• Debian ソースツリー内の debian/changelog の圧縮されたコピーを/usr/share/doc/package/changelog.Debian.gz
としてアクセスできるようにしなければならない。
• 上流の changelog がある場合は、プレインテキスト形式で、/usr/share/doc/package/changelog.gz として
アクセスできるようにすべき。
• changelog ファイルが HTML 形式の場合は、/usr/share/doc/package/changelog.html.gz で参照できる
11
ようにすべき。
• 上流のファイル形式の違いによって、別のファイル名を参照しないといけないなどというのはウンコなので、 Lynx
を使って HTML をプレインテキストに変換したものを /changelog.gz で提供すべき。
• gzip -9 で圧縮すべき
5.8 最近の変更点
日本語訳版がある Version 3.9.1.0 から Version 3.9.4.0 までに加えられた変更点を押さえておきましょう。
5.8.1 Version 3.9.2.0
•「 Debian GNU/Linux ディストリビューション」が「 Debian ディ ストリビューション」と改められました。
(Bug#594656)
• debmake で生成される man のサンプルについて言及されていましたが、 lenny 以降では debmake は削除されて
いるため、この記述が削除されました。
5.8.2 Version 3.9.3.0
• copyright ファイルに Debian パッケージのメンテナーを記述することとされていましたが、 changelog ファイ
ルに書かれているものなので、 copyright ファイルへの記述がなくなりました。 (Bug#593533)
Version 3.9.2.0 policy.sgml:9771
In addition, the copyright file must say where the up-
stream sources (if any) were obtained. It should name
the original authors of the package and the Debian
maintainer(s) who were involved with its creation.
また、著作権情報ファイル中には元となった上流のソース
をどこから手に入れたかを記載しなければなりません。ま
たパッケージの原作者の名前とパッケージ作成に関与した
Debian メンテナの名前を載せるべきです。
Version 3.9.3.0 policy.sgml:9863
In addition, the copyright file must say where the
upstream sources (if any) were obtained, and should
name the original authors.
また、著作権情報ファイル中には元となった上流のソース
をどこから手に入れたかを記載しなければなりませんし、
パッケージの原作者の名前を載せるべきです。
12
•「 機械的に抽出」できるようにするもの (copyright ファイル) が何を指しているかが、明確に記述されるように
なりました。 (Bug#617516)
Version 3.9.2.0 policy.sgml:9704
/usr/share/doc/package may be a symbolic link to
another directory in /usr/share/doc only if the two
packages both come from the same source and the
first package Depends on the second. These rules are
important b ecause copyrights must b e extractable by
mechanical means.
/usr/share/doc/package は、/usr/share/doc 以下
の他のディレクトリ中のシンボリックリンクの相手先と
同じソースファイルから作成されたものであること、およ
び相手先に対して”Depends” で依存していることが宣言
されていること、の二つの条件を満たすときのみ、シンボ
リックリンクとすることができます。この規則は、著作権
関連ファイルが機械的に抽出できるようにするために大切
になるものです。
Version 3.9.3.0 policy.sgml:9796
/usr/share/doc/package may be a symbolic link to
another directory in /usr/share/doc only if the two
packages both come from the same source and the first
package Depends on the second. These rules are im-
portant because copyright files must be extractable
by mechanical means.
/usr/share/doc/package は、/usr/share/doc 以下
の他のディレクトリ中のシンボリックリンクの相手先と
同じソースファ イルから作成されたものであること、お
よび相手先に対して”Depends” で依存していることが宣
言されていること、の二つの条件を満たすときのみ、シ
ンボリックリンクとすることができます。この規則は、
copyright ファイルが機械的に抽出できるようにするた
めに大切になるものです。
• 機械可読な著作権情報ファイルに関する記述が追加されました。ライセンス衝突などの問題を自動的にチェックした
りできることが期待できますが、今のところはオプション扱いです。
Version 3.9.3.0 policy.sgml:9928
Machine-readable copyright information
A specification for a standard, machine-readable for-
mat for debian/copyright files is maintained as part
of the debian-policy package. This document may be
found in the copyright-format files in the debian-
policy package. It is also available from the De-
bian web mirrors at http://www.debian.org/doc/
packaging-manuals/copyright-format/1.0/.
Use of this format is optional.
機械可読な著作権情報
標 準 の た め の 仕 様 と し て 、 機 械 可 読 な 形 式 の
debian/copyright ファ イルが、この debian-policy
パッ ケージの一部として保守されています。この文
書は debian-policy パッ ケージに copyright-format
フ ァ イ ル と し て 含 ま れ て い ま す 。 ま た 、 De-
bian web ミ ラ ー の http://www.debian.org/doc/
packaging-manuals/copyright-format/1.0/ に も
あります。
この形式を使うかどうかは任意です。
13
5.8.3 Version 3.9.3.1
(変更なし)
5.8.4 Version 3.9.4.0
• copyright ファイルのエンコーディングに関する一文が追加されました。 (Bug#661933)
Version 3.9.1.0 policy.sgml:10673
All copyright files must be encoded in UTF-8.
copyright ファイルはすべて UTF-8 でエンコードしなけ
ればなりません。
5.9 最後に
次回の月刊 Debian Policy は。。。
14
第 64 回 関西 Debian 勉強会 2012 年 9 月
6 今後の予定
Debian JP
6.1 関西 Debian 勉強会
次回、第 65 回関西 Debian 勉強会は、 10 月 28 日 (日) に港区民センターで行ないます。
その次の第 66 回関西 Debian 勉強会は、 11 月 9 日 (金)、 10 日 (土) に行なわれる関西オープンソース 2012 で行な
います。
6.2 東京エリア Debian 勉強会
10 月 20 日 (土) に 93 回目の東京エリア Debian 勉強会が開催されます。
15
第 64 回 関西 Debian 勉強会 2012 年 9 月
7 メモ
16
17
18
関西Debian 勉強会
Debian 勉強会資料
2012 年 9 月 23 日 初版第 1 刷発行
関西 Debian 勉強会( 編集・ 印刷・ 発行)
19