Time-stamp: "Sep 04 2003"

Bugzilla - ソースコードからのインストール

バグトラッキングシステム Bugzilla 2.16 に必要なデータベースシステム (MySQL)・ Perl モジュール・ Web サーバ (Apache) をソースコードからコンパイル・インストールする方法、そして設定方法について説明します。

このページは FreeBSD 5.1 へのインストールを説明します。 Perl 5.8.0, Apache 2.0.x, MySQL 4.0.x という現在 (2003-08-29) の最新安定版を使用します。
Perl 5.8.0 は Packages を使用してインストールしました。MySQL, Apache なども Ports/Packages でインストールすることができますが今回は ソースコードからインストールします。

MySQL

アカウント作成

インストールの前に、セキュリティを高めるため MySQL 専用の Unixアカウントを作成します。

# echo mysql:::::::/home/mysql:tcsh:mysql | adduser -f -

グループ名・ユーザ名ともに mysql にします。パスワードも mysql にしました。上の方法は FreeBSD において何も聞かれることなくいっぺんにユーザを設定する方法ですが、# adduser とすることで一つひとつ質問に答える形でアカウントを作成することもできます。

Linux の場合はこうなります。
# groupadd mysql
# useradd -g mysql mysql

ソース取得・コンパイル・インストール

MySQL ダウンロードページ で MySQL 4.0 を選択し、画面の一番下にある Source downloadsTarball (tar.gz) を取得します。2003-09-01 の最新版は 4.0.14 でした。

ソースコードを展開してそのディレクトリの中で configure を実行します。詳しくは展開したソースの中にある INSTALL-SOURCE というファイルをみてください。

% ./configure --prefix=/usr/local/mysql --with-extra-charsets=all --with-charset=ujis

オプションの説明ですが、--prefix=<ディレクトリ> でインストール先のディレクトリを指定します。デフォルトでは /usr/local なので実行ファイルは /usr/local/bin に入りますが上の指定だと /usr/local/mysql/bin 以下に入ることになります。 charset 関連は文字コードを指定しています。--with-charset=ujis で EUC-JP という文字コードをデフォルトで使用するよう指定しています。

次にコンパイル・インストールします。上記のインストールマニュアルには GNU Make を使えと書いてあったので gmake を使用します。

% gmake
# gmake install
FreeBSD には GNU 製ではない BSD Make が make という名で入ってるので、GNU Make は gmake というコマンド名になってしまっています。Linux なら GNU Make が make という名前で入っているんですけどね。

MySQL をインストールした直後はデータベースファイルが存在しません。ソースコードを展開したときのディレクトリで scripts/mysql_install_db スクリプトを実行することでデータベースを初期化できます。

# scripts/mysql_install_db

データベースファイルのディレクトリはインストールしたままの状態だと /usr/local/mysql/var になっています。このディレクトリ以下の所有ユーザは MySQLサーバを動作させるUnixユーザ (今回は mysql) と同じでなければならないので、chown コマンドで所有ユーザ・グループを変更しておきます。これを忘れると MySQL サーバが起動できないので気をつけましょう。

# chown -R mysql:mysql /usr/local/mysql/var

MySQL サーバの起動と停止

MySQL サーバを起動・停止するには次のようにします。

# /usr/local/mysql/bin/mysqld_safe --user=mysql &

# /usr/local/mysql/bin/mysqladmin shutdown

もし停止がうまくいかないようなら、次のようにしてください。

# /usr/local/mysql/bin/mysqladmin -u root -p shutdown

FreeBSD を起動したとき MySQL サーバも自動的に起動させるには以下のようなスクリプトを /usr/local/etc/rc.d/ に置き、実行権を与えます。スクリプトの --skip-networking とは他のマシンからネットワーク越しには MySQL サーバに接続できないようにしてセキュリティを高めます。

# cp mysql.sh /usr/local/etc/rc.d/
# chmod 755 /usr/local/etc/rc.d/mysql.sh
mysql.sh:
#!/bin/sh
cd /usr/local/mysql/bin
./mysqld_safe --user=mysql --skip-networking &

MySQL ユーザ作成

MySQL サーバにアクセスするためには、MySQLユーザというものを作る必要があります。これは Unix のユーザとは別物なので、Unix では root ユーザになっていなくても MySQL の root ユーザは使用できます。

ところで MySQLデータベースシステムのデータ構造について少し述べておきます。
  • データの最も大きなくくりは データベース になります。たとえば mysql データベースは MySQLユーザを管理するためなどに使用されます。 Bugzilla のデータは全部この後で作る bugs データベースに記録されます。
  • データベースの中に テーブル があります。テーブルというのは縦横に線が引かれている表のことです。表計算ソフトの画面を思い出していただければよいです。
  • テーブルの中に カラム (項目・列・column) があります。また 行 (row) もあります。

以下の図には 緑の枠で囲まれた 1つの データベース があります。その中には 2つの テーブル があります。そのテーブルの中に書いてある「名前」「性別」「年齢」といった項目が カラム です。黄色く (オレンジのも含みます) 塗ってあるのが です。

名前 性別 年齢 職業
Robert Male 11 Student
David Male 33 Businessman
Michael Male 55 Columnnist
名前 電話番号 住所
Robert 123-3210 CA
David 888-8887 UT
Michael 456-7890 AZ

Bugzilla はデフォルトでは bugs というユーザで MySQL サーバにアクセスします。このユーザは手動で作る必要があります。パスワードも考えておきましょう。

MySQL クライアント (mysql コマンド) で MySQLサーバにアクセスして、SQL文を手で入力します。

% /usr/local/mysql/bin/mysql -uroot -p
Enter password:
             (MySQL ユーザの root のパスワードを設定していない場合は
             何も入力せずに Enter を押しましょう。)
mysql> use mysql;
             (mysql データベースを使用します)
mysql> grant select,insert,update,delete,index,
    -> alter,create,drop,references, lock tables,
    -> create temporary tables on bugs.* to bugs@localhost
    -> identified by 'password';
             (bugs ユーザを作り、bugs というデータベースに対して
             書き込み読み込みができる権限を与えます。ちなみに
             bugs データベースはまだ作成していませんが権限は与えられ
             ます。"password" の部分は自分で考えたものを入力して
             ください。MySQL 3.23.x と MySQL 4.0.x ではここの SQL 文が
             少し異なるので注意) 

mysql> flush privileges;
             (権限を今すぐ有効にします)
mysql> quit;

もうひとつ。
MySQLの root ユーザも Unixの root ユーザと同じくすべての権限をもっています。しかしその MySQL の root のパスワードは最初は空になっているので、適切なパスワードを設定しておいたほうがよいでしょう。

% /usr/local/mysql/bin/mysql -uroot -p
Enter password:
mysql> set password for root=PASSWORD('password');
mysql> flush privileges;

Perl モジュール

インストール方法

Perl モジュールのインストール方法にはいろいろ方法があります。

  1. ソースコードを取得して一つづつコンパイル・インストールする。
  2. CPAN.pm を使用して各モジュールを個別にインストールする。
  3. CPAN.pm を使用して Bundle::Bugzilla をインストールすると、必要なモジュールがすべてインストールされる。

CPAN.pm を使ったインストール方法は rpm からのインストールを参考にしてください。

上記の選択肢のうち 2), 3) の CPAN.pm は使うとラクなのですが、エラーが出て止まることがあり、そうなるとどうすればいいのか分かりにくいことなど欠点もあります。 今回は選択肢 1) の ソースコードからのインストール を説明します。

Perl モジュールリスト

必要となる Perl モジュールは以下のものです。

  1. DBI
  2. Data::ShowTable
    Msql-Mysql-modules が必要とする
  3. Msql-Mysql-modules
    インストールするときいくつか質問されるので注意。このモジュールの代わりに同じ作者DBD::mysql をインストールしてもよいらしい。
  4. Data::Dumper
    Perl に標準添付なのでインストール必要なし
  5. CGI::Carp
    Perl に標準添付なのでインストール必要なし
  6. Date::Parse (TimeDate)
    TimeDate モジュールに含まれている
  7. AppConfig
    Template Toolkit が必要とする
  8. Template Toolkit
  9. Text::Wrap
  10. File::Spec
  11. File::Temp
  12. XML::Parser
  13. GD
    「統計」ページのグラフ画像を作成しないなら必要ない。
    libgd が必要。PNG画像作成のために libpng も必要。
  14. Chart::Base
    「統計」ページのグラフ画像を作成しないなら必要ない

ファイル取得

以上のファイルのうち、いくつかは Perl 本体が既に含んでいる可能性もあります。Perl 5.005 には同梱されていなかったモジュールが Perl 5.8.0 では同梱されるようになったということもあります。

checkPerlModules.shで今たりない Perl モジュールを調べることができます。私のつくった簡易スクリプトなので信頼できないかもしれませんが。 使い方は

$ sh checkPerlModules.sh

です。not found: <モジュール名> と表示されたものが現在インストールされていない Perl モジュールです。

ちなみに私が FreeBSD 5.1, Perl 5.8.0 で試したところ
% sh checkPerlModules.sh
not found: /DBI
not found: /Data/ShowTable
not found: /Mysql
not found: /Date/Parse
not found: /AppConfig
not found: /Template
not found: /XML/Parser
not found: /GD/
not found: /Chart/Base
と出ました。

上記モジュールリストからファイルを取得してください。リンク先ページの画面中央くらいにある [Download] をクリックすると最新バージョンが取得できます。

なお、Perl モジュールのバージョンはそれぞれ最新のものを使用しておけば問題ありません。CPAN.pmBundle::Bugzilla を利用したときも最新バージョンがインストールされます。 参考までに私がインストールしたバージョンを示しておきます。

インストール

Perl モジュールのインストール方法は共通化されていて、どれも同じです。 ファイルを展開したあとで

% perl Makefile.PL && make && make test
# make install

以上の手順でどれもインストールできます。make test が終わったときに All tests successful と表示されればインストール OK です。

make test がうまくいかないとき

もし All tests successful と表示されない場合は問題があります。何か別の Perl モジュールが必要なのかもしれません。エラーメッセージを見て付属のドキュメントを読んで対処してから make test し直してみてください。

インストールする順番によっても make test がうまくいかないことがありますが、上記モジュールリストの順番でインストールすれば問題ないはずです。もしどうしても All tests successful と表示されないなら、make install してしまってもたぶんだいじょうぶなのではないでしょうか..。

コンパイルのとき質問してくる Perl モジュール

コンパイルするとき 選択肢が表示され入力まちになる Perl モジュールがあります。
Msql-Mysql-modules はその一つです。 まず以下のように聞いてきます。

Which drivers do you want to install?

    1)  MySQL only
    2)  mSQL only (either of mSQL 1 or mSQL 2)
    3)  MySQL and mSQL (either of mSQL 1 or mSQL 2)

    4)  mSQL 1 and mSQL 2
    5)  MySQL, mSQL 1 and mSQL 2

Enter the appropriate number:  [3] 1

デフォルトの 3 ではなく 1 と答えます。 次にこう聞いてきます。

Do you want to install the MysqlPerl emulation? You might keep your old
Mysql module (to be distinguished from DBD::mysql!) if you are concerned
about compatibility to existing applications! [n] y

デフォルトの n ではなく y と答えます。 あとは Enter を押していれば問題ないはずです。なおこのモジュールは動作テストのため MySQL サーバと通信をおこないます。ですからあらかじめ MySQL サーバを起動しておいてください。

Template-Toolkit もコンパイルのとき質問してきます。私の場合全部 Enter を押しておけば All tests successful になりました。

Perl の GD モジュールの は、C言語で書かれた libgd を必要としています。グラフ画像として PNG 形式の画像を作るので libpng も必要です。
JPEG 画像の生成 (libjpg が必要) や XPM 画像は Bugzilla でグラフ画像を作るだけなら必要ないので、デフォルトの y ではなく n と答えてかまいません。

Apache

アカウント作成

インストールの前に、MySQL と同様に Apache 専用の Unixアカウントを作成します。

# echo apache:::::::/home/apache:tcsh:apache | adduser -f -

グループ名・ユーザ名ともに apache、パスワードも apache です。

ファイル取得・インストール

2003-09-02 現在の最新版は 2.0.47 でした。ダウンロードページから Unix Source: httpd-<version>.tar.gz を取得します。

コンパイル・インストール方法などで一番参考になるのは Apache HTTP サーバのドキュメントです。このページは日本語版が用意されているので、もし英語で表示された場合画面の中にある
Available Languages: de | en | ja | ko | ru
ja をクリックすると日本語で読めます。

それではコンパイルします。

% ./configure --enable-cgi --enable-so
% make
# make install

configure のときに prefix を特になにも指定しないと、/usr/local/apache2 以下にファイルがインストールされます。

設定

以下の条件をみたすように、設定ファイル /usr/local/apache2/conf/httpd.conf を編集します。

  1. Web サーバ を動作させるユーザ・グループを apache という名にする。
  2. Web サーバにアクセスしたとき、Bugzilla のページが開かれるようにする。
  3. CGI スクリプトを有効にする。
  4. .htaccess というアクセス制限をおこなうためのファイルを有効にする。
  5. http://domain/ という URLが要求されたとき http://domain/index.cgi というファイルが読み込まれるようにする。
  1. → 以下の部分を書き換える。
    --- httpd.conf.org      Wed Sep  3 14:51:02 2003
    +++ httpd.conf  Wed Sep  3 14:53:09 2003
    @@ -263,8 +263,8 @@
     #  when the value of (unsigned)Group is above 60000;
     #  don't use Group #-1 on these systems!
     #
    -User nobody
    -Group #-1
    +User apache
    +Group apache
     </IfModule>
     >/IfModule>
    
  2. → 今回 Bugzilla は /var/www/bugzilla/ に置くことにする。以下のように書き換える。
    @@ -303,7 +303,7 @@
     # documents. By default, all requests are taken from this directory, but
     # symbolic links and aliases may be used to point to other locations.
     #
    -DocumentRoot "/usr/local/apache2/htdocs"
    +DocumentRoot "/var/www/bugzilla"
    
     #
     # Each directory to which Apache has access can be configured with respect
    @@ -328,7 +328,7 @@
     #
     # This should be changed to whatever you set DocumentRoot to.
     #
    -<Directory "/usr/local/apache2/htdocs">
    +<Directory "/var/www/bugzilla">
    
     #
     # Possible values for the Options directive are "None", "All",
    
  3. → 上で書き換えた <Directory "/var/www/bugzilla"> のすぐ下の部分を以下のように書き換える。
    @@ -342,7 +342,8 @@
     # http://httpd.apache.org/docs-2.0/mod/core.html#options
     # for more information.
     #
    -    Options Indexes FollowSymLinks
    +    Options -Indexes FollowSymLinks ExecCGI
    +    AddHandler cgi-script .cgi
    
     #
     # AllowOverride controls what directives may be placed in .htaccess files.
    
  4. <Directory "/var/www/bugzilla"> の下にある以下の部分を書き換える。
    @@ -349,7 +349,7 @@
     # It can be "All", "None", or any combination of the keywords:
     #   Options FileInfo AuthConfig Limit
     #
    -    AllowOverride None
    +    AllowOverride Limit
    
     #
     # Controls who can get stuff from this server.
    
  5. → 以下の部分を書き換える。
    @@ -390,7 +390,7 @@
     # negotiated documents.  The MultiViews Option can be used for the
     # same purpose, but it is much slower.
     #
    -DirectoryIndex index.html index.html.var
    +DirectoryIndex index.html index.html.var index.cgi
    
     #
     # AccessFileName: The name of the file to look for in each directory
あと Apache2.0.x で必要になったことですが、日本語の文字化けを防ぐため以下の書き換えもしておきます。
@@ -791,7 +792,7 @@
 # reasons in browsers, related to javascript and URL parsing
 # which encourage you to always set a default char set.
 #
-AddDefaultCharset ISO-8859-1
+#AddDefaultCharset ISO-8859-1

 #
 # Commonly used filename extensions to character sets. You probably

設定ファイルを書き換えたあとは、Apache Web サーバを再起動してください。

Apache Web サーバの起動・停止

Apache Web サーバの起動・停止はそれぞれ以下のようにおこないます。
# /usr/local/apache2/bin/apachectl start

# /usr/local/apache2/bin/apachectl stop

FreeBSD を起動したとき Apache Web サーバも自動的に起動させるには 以下のスクリプトを /usr/local/etc/rc.d/ に置き、実行権を与えます。

# cp apache.sh /usr/local/etc/rc.d/
# chmod 755 /usr/local/etc/rc.d/apache.sh
apache.sh:
#!/bin/sh
cd /usr/local/apache2/bin
./apachectl start

itouh