[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian リファレンス
第 13 章 - プログラミング


実行用テストファイルの名前として "test" を使うのは止めましょう。 test というコマンドがシェル組込みコマンドにあります。


13.1 始め方

参考文献をいくつか挙げます。

多量の info 文書が書籍として GNU から得られます。

次の 4 サブセクションには、newusers プログラムのような バッチプロセッサを用いて /etc/passwd にアカウント情報を 追加するための数種類の言語によるサンプルスクリプトが含まれます。スクリプトは first_name last_name password の形式の数行の入力ファイルを必要と します。(実際ユーザのホームディレクトリはこれらのスクリプトによって 作成されません。)


13.2 シェル

Unix ライクなシステムの働きを理解する 最良の方法は、 シェルスクリプトを読むことです。ここで、シェルプログラムに関する いくつかのポイントと注意を与えます。間違いから学ぶには、 Shell Mistakes を読んでください。


13.2.1 Bash – GNU 標準の対話シェル

Bash の参考文献をいくつか挙げます。

次に短いプログラム例を示します。(標準入力から newusers 用の アカウントエントリを作成)

     #!/bin/bash
     # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
     pid=1000;
     while read n1 n2 n3 ; do
     if [ ${n1:0:1} != "#" ]; then
     let pid=$pid+1
     echo ${n1}_${n2}:password:${pid}:${pid}:,,,/home/${n1}_${n2}:/bin/bash
     fi
     done

13.2.2 POSIX シェル

Debian では、数種類のパッケージが POSIX シェルを供給します。

移植性を考慮してシェルスクリプトを作成している場合、POSIX シェルスクリプト としてスクリプトを書くのが最良です。シェルスクリプトの POSIX 互換性を テストするには、ash (又は dash) にリンクされた /bin/sh を使用してください。"bashism" 又は "zshism" を用いた スクリプトを作るのは避けましょう。 例えば、次のような表現は避けましょう。

本文書におけるシェルの記述方法は POSIX タイプのシェルのみを用いており、 それゆえ、tcsh を含む csh タイプのシェルは 使用していません。


13.2.3 シェルパラメータ

いくつかの特別なパラメータを覚える必要があります。

     $0      = シェル又はシェルスクリプトの名前
     $1      = シェルの第 1 引数
      ...
     $9      = シェルの第 9 引数
     $#      = ポジショナルパラメータの数
     "$*"    = "$1 $2 $3 $4 ... $n"
     "$@"    = "$1" "$2" "$3" "$4" ... "$n"
     $?      = 最後のコマンドの 終了ステータス
     $$      = シェルスクリプトの PID 
     $!      = 最後に起動されたバックグラウンドジョブの PID

基本的な パラメータ拡張 を覚える必要があります:

         形式         var がセット      var がセットされていない
     ${var:-string}  $var                string
     ${var:+string}  string              null
     ${var:=string}  $var                string 
                                         (そして var=string を起動)
     ${var:?string}  $var                (echo string して終了する)

ここで、これらの演算子全てにおいて、コロン `:' は実際は無くても構いません。

覚えておくべき基本的な パラメータ置換 には次があります。

         形式        結果
     ${var%suffix}   最小のsuffix パターンを削除
     ${var%%suffix}  最大の suffix パターンを削除
     ${var#prefix}   最小の prefix パターンを削除
     ${var##prefix}  最大の prefix パターンを削除

13.2.4 シェルリダイレクト

覚えておくべき基本的な リダイレクト を次に挙げます。 (ここで [n] はファイルディスクリプタを指定するための任意の 番号)

     [n]> file      stdout (又はn) を file にリダイレクト。
     [n]>> file     stdout (又はn) を file に追加
     [n]< file      file から stdin (又はn) にリダイレクト
     [n1]>&n2       stdout (又は n1) を n2 にリダイレクト
     2> file  >&2   stdout と stderr を file にリダイレクト
      > file 2>&1   stdout と stderr を file にリダイレクト
     | command      stdout を command にパイプする
     2>&1 | command stderr と stdout を command にパイプする

ここで、

です。

シェルは任意のファイルディスクリプタにより exec 組込み コマンドを用いてファイルを開くことができます。

     $ echo Hello >foo
     $ exec 3<foo 4>bar  # ファイルを開く
     $ cat <&3 >&4       # 標準入力を 3, 標準出力を 4 にリダイレクト
     $ exec 3<&- 4>&-    # ファイルを閉じる
     $ cat bar
     Hello

ここで n<&-n>&- はファイルディスクリプタ n を閉じることを意味します。


13.2.5 シェルの条件文

コマンドは条件文の表現に使われる 終了ステータス を返します。

ここでは 0 の値を "真" の意味で使っていますが、 これは他の計算分野で使われている慣習とは異なることに注意してください。 又、`[' は test コマンドと等価であり、 条件文表現として `]' まで引数を評価します。

覚えておくべき基本的な 条件イディオム を次に挙げます。

     command && if_success_run_this_command_too || true
     command || if_not_success_run_this_command_instead
     
     if [ conditional_expression ]; then  
      if_success_run_this_command
     else
      if_not_success_run_this_command
     fi

ここで || は、シェルが -e フラグを呼び出した時に このシェルスクリプトが誤ってこの行で終了しないことを保証するために必要でした。

条件文表現内での ファイル 比較演算を次に挙げます。

     -e file         file が存在する場合に真
     -d file         file というディレクトリが存在する場合に真
     -f file         file という普通のファイルが存在する場合に真
     -w file         file が存在し、書き込み可である場合に真
     -x file         file が存在し実行可能出ある場合に真
     file1 -nt file2 file1file2より (更新時間が)新しい場合に真
     file1 -ot file2 file1file2 よりも (更新時間が) 古い場合に真
     file1 -ef file2 両者が同じデバイスであり、同じ inode 番号を持つ場合に真

条件文表現内での 文字列 比較演算を次に挙げます。

          -z str    str の長さが 0 の場合に真
          -n str    str の長さが 0 ではない場合に真
     str1 == str2   二つの文字列が等しい場合に真
     str1 =  str2   二つの文字列が等しい場合に真
         ("=" は厳密な POSIX 互換なシェルの場合、 "==" の代わりに使用するべき)
     str1 != str2   二つの文字列が等しくない場合に真
     str1 <  str2   str1 が50音順で str2 の前に来る場合に真 (ロケール依存)
     str1 >  str2    str1 が50音順で str2 の後に来る場合に真 (ロケール依存)

条件文表現内での 算術 整数比較演算には、 -eq, -ne, -lt, -le, -gt そして -ge があります。


13.2.6 コマンドライン処理

シェルは次のようにスクリプトを処理します。

"" 内の '' には何も効果はありません。

シェル内で set -x を実行するか、-x オプション付きで シェルを起動すると、シェルにコマンドの実行結果を全て表示させます。 これはデバッグにはとても便利です。


13.3 Awk

Awk の参考文献をいくつか挙げます。

(newusers のコマンドエントリを作成する) 短いプログラム例 を示します。

     #!/usr/bin/awk -f
     # Script to create a file suitable for use in the 'newusers' command,
     # from a file consisting of user IDs and passwords in the form:
     # first_name last_name password
     # Copyright (c) KMSelf Sat Aug 25 20:47:38 PDT 2001
     # Distributed under GNU GPL v 2, or at your option, any later version.
     # This program is distributed WITHOUT ANY WARRANTY.
     
     BEGIN {
         # Assign starting UID, GID
         if ( ARGC > 2 ) {
             startuid = ARGV[1]
             delete ARGV[1]
         }
         else {
             printf( "Usage:  newusers startUID file\n" \
               "  where:\n" \ 
               "    startUID is the starting userid to add, and\n" \
               "    file is an input file in form:\n" \
               "      first_name last_name password\n" \
             )
             exit
         }
     
         infile = ARGV[1]
         printf( "Starting UID: %s\n\n", startuid )
     }
     
     /^#/ { next }
     
     {
         ++record
         first = $1
         last = $2
         passwd = $3
         user= substr( tolower( first ), 1, 1 ) tolower( last )
         uid = startuid + record - 1
         gid = uid
         printf( "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n",  \
             user, passwd, uid, gid, first, last, user \
             )
     }

Debian では、POSIX 互換の awk を供給するパッケージ が二種類あります。


13.4 Perl

これは Unix ライクシステムの インタプリタ です。

Perl の参考文献をいくつか挙げます。

(newusers のコマンドエントリを作成する) 短いプログラム例 を示します。

     #!/usr/bin/perl
     # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
     $pid=1000;
     while (<STDIN>) {
             if (/^#/) { next;}
             chop;
             $pid++;
             ($n1, $n2, $n3) = split / /;
             print $n1,"_",$n2,":", $n3, ":",$pid,
                       ":",$pid,",,,/home/",$n1,"_",$n2,":/bin/bash\n"
     }

Perl モジュール module_name は次のようにインストールします。

     # perl -MCPAN -e 'install module_name'

13.5 Python

すばらしいオブジェクト指向なインタプリタです。

Python の参考文献をいくつか挙げます。

(newusers のコマンドエントリを作成する) 短いプログラム例 を示します。

     #! /usr/bin/env python
     import sys, string
     
     # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
     # Ported from awk script by KMSelf Sat Aug 25 20:47:38 PDT 2001
     # This program is distributed WITHOUT ANY WARRANTY.
     
     def usages():
         print \
     "Usage:  ", sys.argv[0], " start_UID [filename]\n" \
     "\tstartUID is the starting userid to add.\n" \
     "\tfilename is input filename. If not specified, standard input.\n\n" \
     "Input file format:\n"\
     "\tfirst_name last_name password\n"
                     return 1
     
     def parsefile(startuid):
         #
         # main filtering
         #
         uid = startuid
         while 1:
             line = infile.readline()
             if not line:
                 break
             if line[0] == '#':
                 continue
             (first, last, passwd) = string.split(string.lower(line))
             # above crashes with wrong # of parameters :-)
             user = first[0] + last
             gid = uid
             lineout = "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n" %  \
                 (user, passwd, uid, gid, first, last, user)
             sys.stdout.write(lineout)
             +uid
     
     if __name__ == '__main__':
         if len(sys.argv) == 1:
             usages()
         else:
             uid = int(sys.argv[1])
             #print "# UID start from: %d\n" % uid
             if len(sys.argv) > 1:
                 infilename   = string.join(sys.argv[2:])
                 infile = open(infilename, 'r')
                 #print "# Read file from: %s\n\n" % infilename
             else:
                 infile = sys.stdin
             parsefile(uid)

13.6 Make

Make の参考文献をいくつか挙げます。

シンプルな自動変数。

ルールシンタックスを示します。

     target: [ prerequisites ... ]
      [TAB]  command1
      [TAB]  -command2 # エラーを無視
      [TAB]  @command3 # suppress echoing

ここで [TAB] はタブの文字コードです。 各行は make 変数置換を行った後にシェルにより解釈されます。 2行以上にわたってスクリプトを続けるには、行の末尾に \ を 書いてください。シェルスクリプトでの環境変数のため $ を入力 するには、$$ を使用してください。

ターゲット前提 のための 暗黙のルール は、例えば次のように書けます。

     %: %.c header.h

又は

     %.o: %.c header.h

ここで、ターゲット には % (正確のはこれらのうちの一つ) が含まれます。% は実際のターゲットのファイル名にある 空でないあらゆる文字列にマッチします。前提 は 同様に実際のターゲット名に関連する名前がどのようなものかを示すために % を使います。

サフィックスルールmake のために厳密なルール を定義するためには 時代遅れ です。互換性のために、 GNU make ではまだサポートされていますが、可能な限り 次のような等価なパターンルールを使用しましょう。

     古いサフィックスルール   --> 新しいパターンルール
     .c:             --> %  : %.c
     .c.o:           --> %.o: %.c

ルールのための自動変数。

     foo.o: new1.c new2.c old1.c new3.c
     $@ == foo.o                         (ターゲット)
     $< == new1.c                        (最初の依存関係)
     $? == new1.c new2.c new3.c          (新しい依存関係)
     $^ == new1.c new2.c old1.c new3.c   (全ての依存関係)
     $* == `%' はターゲットパターンにマッチした語幹です。

変数のリファレンス。

     foo1 := bar    # 一回だけの展開
     foo2  = bar    # 再帰展開
     foo3 += bar    # 追加
     SRCS := $(wildcard *.c)
     OBJS := $(foo:c=o)
     OBJS := $(foo:%.c=%.o) 
     OBJS := $(patsubst %.c,%.o,$(foo)) 
     DIRS  = $(dir directory/filename.ext) # "directory" を展開
      $(notdir NAMES...), $(basename NAMES...), $(suffix NAMES...) ...

自動の内部ルールを見るには、make -p -f/dev/null を 起動してください。


13.7 C

次をインストールして C を使う準備をしましょう。

     # apt-get install glibc-doc manpages-dev libc6-dev gcc

C の参考文献をいくつか挙げます。


13.7.1 シンプルな C プログラム (gcc)

example.clibm ライブラリを用いて コンパイルして run_example 実行ファイルを作成するための シンプルな例です。

     $ cat > example.c << EOF
     #include <stdio.h>
     #include <math.h>
     #include <string.h>
     
     int main(int argc, char **argv, char **envp){
             double x;
             char y[11];
             x=sqrt(argc+7.5);
             strncpy(y, argv[0], 10); /* prevent buffer overflow */
             y[10] = '\0'; /* fill to make sure string ends with '\0' */
             printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
             return 0;
     }
     EOF
     $ gcc -Wall -g -o run_example example.c -lm
     $ ./run_example
             1, 2.915, ./run_exam,     (null)
     $ ./run_example 1234567890qwerty
             2, 3.082, ./run_exam, 1234567890qwerty

ここで、sqrt() を使うためにライブラリ libm をリンクするには -lm が必要です。実際のライブラリは /lib/libm.so.6 という名前で存在し、 これは libm-2.1.3.so のシンボリックリンクです。

出力テキストの最後のパラメータを見てください。%10s が指定されているにも係わらず10以上の文字があります。

境界チェックを行わずに sprintfstrcpy のような ポインタを用いるメモリ操作関数を使うのは上記のオーバーラン効果を利用する バッファオーバーフロー攻撃を防ぐために時代遅れになっています。 その代わりに、snprintfstrncpy をご利用下さい。


13.7.2 デバッグ


13.7.2.1 gdb を用いたデバッグ

準備

     # apt-get install gdb

gdb の参考文献をいくつか挙げます。

-g オプション付きでコンパイルされたプログラムをデバッグするには gdb を使用します。多くのコマンドには省略形が存在します。 タブ拡張もシェルと同様に扱えます。

     $ gdb program
     (gdb) b 1                # ブレークポイントを一行目に設定
     (gdb) run arg1 arg2 arg3 # プログラムを起動
     (gdb) next               # 次の行
     ...
     (gdb) step               # 前に進む
     ...
     (gdb) p parm             # parm の内容を表示
     ...
     (gdb) p parm=12          # 値を 12 に設定

Emacs からデバッグするには、エディタのコマンドのサマリ (Emacs, Vim), 第 11.3.4 節 をごらんください。

インストールされる全てのバイナリは Debian システムでは標準で stripped される べきですので、ほとんどのデバッグシンボルは削除されています。Debian パッケージのデバッグに役立つように gdb を利用するには、 次の方法で該当するパッケージを再構築する必要があります。

詳細は Policy 10.1 をごらんください。


13.7.2.2 ライブラリの依存性をチェック

プログラムがどのライブラリに依存しているかを調べるには、 ldd を使用します。

     $ ldd /bin/ls
             librt.so.1 => /lib/librt.so.1 (0x4001e000)
             libc.so.6 => /lib/libc.so.6 (0x40030000)
             libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
             /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

lschroot された環境で動かすには、 上記に示したライブラリを chroot された環境に置く 必要があります。

次に挙げるコマンドも役立ちます。


13.7.2.3 メモリリーク検知ツールを用いたデバッグ

数種類のメモリリーク検知ツールを Debian で使用できます。

Debugging Tools for Dynamic Storage Allocation and Memory Management. も調べてみてください。


13.7.3 Flex – Lex の改良版

flex は高速な字句解析器生成器です。

flex の参考文献をいくつか挙げます。

ライブラリ無しでコンパイルできるように、次のように見える main()yywrap() 又は program.l を供給する必要が あります。(yywrap はマクロです。 %option main は暗黙に %option noyywrap になります)

     %option main
     %%
     .|\n    ECHO ;
     %%

その代わりに、cc コマンドラインの最後に (AT&T-Lex の -ll のように) -lfl リンカオプション を付けてコンパイルできます。この場合、 %option は必要ありません。


13.7.4 Bison – Yacc の改良版

Debian では Yacc 互換な LALR パーサジェネレータパッケージが いくつか供給されています。

bison の参考文献をいくつか挙げます。

main()yyerror() を供給する必要があります。 main()yyparse() を呼び出し、これは yyparse() を呼び出します。さらにこれは 通常 FleX により生成される yylex() を呼び出します。

     %%
     
     %%

13.7.5 Autoconf

autoconf は GNU ビルドシステム全体を使用する 多種の UNIX ライクなシステムに適合するようにソフトウェアのソースコード パッケージを自動で設定するシェルスクリプトを生成するための ツールです。

autoconfconfigure と呼ばれる 設定スクリプトを生成します。configureMakefile.in テンプレートを用いて自動的に カスタマイズされた Makefile を生成します。


13.7.5.1 プログラムのコンパイルとインストール

Debian は/usr/local/ 以下にあるファイルに触りません。 (多様性のサポート, 第 2.5 節 参照) ですから、ソースからプログラムをコンパイルして /usr/local/ 下に置いても Debian とは干渉しません。

     $ cd src
     $ ./configure --prefix=/usr/local
     $ make
     $ make install # システム上にファイルをインストールする

13.7.5.2 プログラムのアンインストール

プログラムを削除したいが、ソースをまだ持っており、autoconfautomake を使っていてコンパイル時の設定を覚えていたならば、 次の手順でアンインストールができます。

     $ ./configure all-of-the-options-you-gave-it
     # make uninstall

代わりに、インストール手順で /usr/local/ の下にしか ファイルを置いておらず、重要なものは何もないことを絶対確信している なら、全ての内容を次のように削除できます。

     # find /usr/local -type f -print0 | xargs -0 rm -f

どこにファイルをインストールしか確信できない場合、アンインストールのための クリーンな道筋を供給してくれる checkinstall の使用を 考えるべきです。


13.8 Web

基本的なインタラクティブで動的な web ページは 以下の手順で作られます。

安全上、勝手に作ったいい加減なプログラムで CGI パラメータを読むのは 賢明でないとされています。Perl (Perl, 第 13.4 節 参照) や Python (Python, 第 13.5 節 参照) の確立したモジュールが有ります。 PHP は このような機能を自身で持っています。 クライアントサイドでデータ保持が必要な場合はクッキーが用いられます。 クライアントサイドでデータ処理が必要な場合は javascript がよく用いられます。

詳細はThe Common Gateway InterfaceThe Apache Software FoundationJavaScript を参照下さい。

Google で "CGI tutorial" を探すのに http://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial というエンコードされた URL を直接ブラウザのアドレスに打ち込むことは、 CGI スクリプトの Google サーバ上での動きを知るための良い方法です。


13.9 ドキュメントの準備


13.9.1 roff 植字

伝統的に、roff は主要な Unix テキスト処理システムです。

roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) そして info groff をご覧下さい。

-me マクロに良質のチュートリアルが存在します。 groff (1.18以後) をインストールしている場合、 /usr/share/doc/groff/meintro.me.gz を見付けて次を実行してください。

     $ zcat /usr/share/doc/groff/meintro.me.gz | \
          groff -Tascii -me - | less -R

次の手順は完全なプレインテキストファイルを作成します。

     $ zcat /usr/share/doc/groff/meintro.me.gz | \
         GROFF_NO_SGR=1 groff -Tascii -me - | col -b -x > meintro.txt

印刷するには、PostScript 出力を使いましょう。

     $ groff -Tps meintro.txt | lpr
     $ groff -Tps meintro.txt | mpage -2 | lpr

13.9.2 SGML

次のパッケージをインストールして SGML を使う準備を行います。

     # apt-get install debiandoc-sgml debiandoc-sgml-doc

debiandoc-sgml の参考文献をいくつか挙げます。

SGML により複数の文書フォーマットの管理を行えます。簡単な SGML システムの一つ が Debiandoc であり、本文書でも用いられています。Debiandoc は オリジナルのテキストファイルから次の文字について些細な変換が必要です。

セクションを印刷不可能なコメントとしてマークするには、次に示すような 内容を挿入します。

     <!-- State issue here ... -->

セクションを変換可能なコメントとしてマークするには、次に示すような内容を 挿入します。

     <![ %FIXME; [ State issue here ... ]]>

SGML では、エンティティの 最初の定義 が優先されます。例えば、

     <!entity % qref "INCLUDE">
     <![ %qref; [ <!entity param "Data 1"> ]]>
     <!entity param "Data 2">
     &param;

では、"Data 1" になります。最初の行が "INCLUDE" ではなく "IGNORE" を 含んでいる場合は、"Data 2" となります。(二行目は条件文) 又、フレーズの繰り返しは内容からあらかじめ分けて定義できます。

     <!entity whoisthis "my">
     Hello &whoisthis; friend.
     This is &whoisthis; book.

これは次のような結果となります。

     Hello my friend.
     This is my book.

examples にある短い SGML のサンプルの sample.sgml をご覧下さい。

SGML 文書が巨大になった場合、バックエンドテキストプロセッサとして 使われる TeX が時々エラーを起こす場合があります。TeX/LaTeX, 第 13.9.3 節 をごらんください。


13.9.3 TeX/LaTeX

準備:

     # tasksel # その他 --> TeX/LaTeX 環境 を選択して
     TeX/LaTeX をインストールしましょう。

LaTeX の参考文献をいくつか示します。

TeX は最強の植字環境です。多くの SGML プロセッサは TeX をバックエンド テキストプロセッサとして使っています。lyx, lyx-xforms 又は lyx-qt により供給される Lyx や、 texmacs により供給される GNU TeXmacs は見栄えの良い LaTeX 用のWYSIWYG 編集環境を提供しますが、 多くの人はソースの編集のためには Emacs や Vim を選択しています。

多くのオンラインのリソースが得られます。

文書が巨大になった場合、TeX はエラーを起こす場合がときどきあります。 この問題を修正するには、/etc/texmf/texmf.cnf の pool サイズ を増大させる (又は /etc/texmf/texmf.d/95NonPath を適切に編集して update-texmf を起動する) 必要があります。


13.9.4 Literate Programming

文書を含むコードを書く代わりに、文芸的プログラマはコードを含む文書 を書くものです。この手法はプログラムのための良い文書を保証します。

文芸的プログラムについては、 Literate Programming をごらんください。


13.9.4.1 Noweb

準備

     # apt-get install nowebm

Noweb の参考文献をいくつか挙げます。

これは WEB ライクな文芸的プログラムツールであり、よりシンプルですが 拡張性と言語との独立性を供給します。 [66] noweb が起動されると、プログラムのソースコードを noweb ファイルで言及されている出力ファイルに書き出し、文書の植字のために TeX ファイルを出力します。

Debian の ifupdown パッケージが良い例です。

     $ apt-get source ifupdown
     $ cd ifupdown*
     $ make ifupdown.pdf ifupdown.ps

13.9.4.2 Doxygen

準備

     # apt-get install doxygen doxygen-doc doxygen-gui

Doxygen (created by doxygen!) の参考文献をいくつか挙げます。

C++, C, Java, IDL, さらにある程度は PHP と C#も含めて プログラムに関する HTML, RTF, Unix マニュアルページ, PostScript そして PDF (LaTeX を用いて) 文書を生成できます。Doxygen は JavaDoc (1.1), Qt-Doc, KDOC と互換性があり、 Troll Tech の Qt ツールキットを利用する プロジェクトが用いるために特別に設計されていました。 Doxygen はドキュメント化されていないプログラムであっても、依存グラフ、 協同ダイアログ、そしてグラフィカルなクラス階層グラフを含む内容を生成します。 この出力は Qt のドキュメントに似ています。


13.10 パッケージング

準備

     # apt-get install debian-policy developers-reference \
                       maint-guide dh-make debhelper
     # apt-get install packaging-manual # if Potato

パッケージのための参考文献をいくつか挙げます。


13.10.1 単独のバイナリをパッケージングする

Joey Hess による単独のバイナリをパッケージングするためのクイックハックな 方法です。

     # mkdir -p mypkg/usr/bin mypkg/DEBIAN
     # cp binary mypkg/usr/bin
     # cat > mypkg/DEBIAN/control
     Package: mypackage
     Version: 1
     Architecture: i386
     Maintainer: Joey Hess <joeyh@debian.org>
     Description: my little package
      Don't expect much.
     ^D
     # dpkg-deb -b mypkg

13.10.2 ツールを用いたパッケージング

dh-make パッケージにある dh_make を使って パッケージのベースラインを作成します。そして、 dh-make(1) にある指示に従って処理します。 これは debian/rules 内で debhelper を利用します。

古いアプローチでは debmake にある deb-make を使います。この方法は debhelper を利用せず、シェルのみに 依存します。debmake は使わないようにしましょう。

複数のソースパッケージの例としては、"mc" (dpkg-source -x mc_4.5.54.dsc をごらんください。これは Adam Heath による "sys-build.mk" を利用しています。又、"glibc" (dpkg-source -x glibc_2.2.4-1.dsc) は Joel Klecker (espy@debian.org) による他のシステムを利用しています。


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian リファレンス

CVS, 2007年 1月 18日 木曜日 11時54分01秒 UTC時間

Osamu Aoki (青木 修) osamu#at#debian.org
翻訳: 角田 慎一 tsuno#at#ngy.1st.ne.jp
著者, 第 A.1 節