# Geeklogのインストール

- 用語
- インストールに必要なもの
  - 必要なソフトウェア
  - 必要な技術力
- 新規インストール
- 旧バージョンからのアップグレード
- よくある問題と解決法

## 用語

- ディレクトリ: フォルダと同じ。
- パス: Webサーバ上で、ファイルやディレクトリが実際にある場所。Windowsのパスはドライブ文字(`c:/inetpub/wwwroot/`)で始まり、*nix系列のパスは `/var/www/` のようにルート(`/`)から始まる。
- URL: `http://www.foo.com/` などの、Web上での情報のありかを示すもの。

## インストールに必要なもの

### 必要なソフトウェア

Geeklogをインストールして使用するには、ApacheやMicrosoft IISなどのWebサーバとPHPのバージョン4.1.0以降が必要です（訳注：PHPの4.x系列はほぼメンテナンスが終了していますので、今さら選択する理由はありません。5.x系列のできるだけ新しいバージョンを選ぶとよいでしょう。2008年6月16日の時点では、最新バージョンは5.2.6です）。また、データベースとして、MySQL 3.23.2以降か、Microsoft SQL Server 2000以降が必要です。

### 必要な技術力

はじめてGeeklogをインストールするなら、次のことを確認しましょう。

- Webディレクトリのルート（ドキュメントルート）の決め方を知っている(パスとは?)。
- ダウンロードしたGeeklogのターボール（圧縮ファイル）を伸張（解凍）できる。
- データベースを新規作成するか、既存のデータベースにアクセスできる。
- WebサーバにSSHやFTPでアクセスして、いくつかのファイルとディレクトリのパーミッションを変更できる。

## 新規インストール

1. Geeklogの現バージョンのターボール（圧縮ファイル）をGeeklog.netやGeeklog.jpからダウンロードします。

2. 次のコマンドを実行して、ダウンロードしたターボールを伸張（解凍）します。

   `tar -zxvf geeklog-1.5.1.tar.gz`

   注意: WinZipを使用すると、そのバージョンによっては、ファイルが壊れると報告しているユーザがいます。こうなるとインストールの最中にエラーになるので、ローカルでファイルを解凍する必要がある場合は、WinZipの代わりに7-ZipやWinRARを使うことを強くお勧めします。

3. MySQLやMicrosoft SQLを使用し、空のデータベースと変更権限のあるユーザを作成します。ホスティング会社がデータベースを作成してアカウントを作成している場合もあるので、必要ならホスティング会社に尋ねてみてください。

4. `geeklog-1.5.1/public_html/` ディレクトリの中身をWebサーバのドキュメントルートに転送します。ドキュメントルートには、"public_html"や"htdocs"、"www"などの名前がつけられていることが多いです。

   次に、`geeklog-1.5.1/` ディレクトリの中身の残りをドキュメントルートの親ディレクトリ（お勧め!）かWebからアクセスできないディレクトリに転送します。インストールウィザードはこれらの場所を自動的に検出しようとします。検出できない場合は、インストールの過程でパスを入力するよう要求されます。インターネットからのアクセスを防ぐセキュリティ対策としてこのような仕様になっています。

   注意: ホスティング会社がドキュメントツリーの外にファイルを置くことを許可していない場合は、

   1. ドキュメントルート内に推測されにくい名前でディレクトリを作成します(つまり、"geeklog"などと名付けるのはダメ)。
   2. 作成したディレクトリ内に残りのファイルを転送します。
   3. .htaccessファイルなどを用いて、そのディレクトリにBASIC認証をかけます。

5. Webブラウザを起動し、Geeklogのインストールウィザードを実行します（`http://サイトのURL/admin/install/index.php` をアドレス欄に入力します）。Geeklogのファイルをサブドメインに置いた場合は、`http://サイトのURL/サブドメイン名/admin/install/index.php` などとなります。

   Geeklogのインストールウィザードは自動的にインストールを行うので、単に表示される手順に従ってください。

6. インストールが終了したら、必ず、 `admin/install` ディレクトリを削除してください。サイトに最初に表示される記事を読んで、管理者としてのログイン情報を知り、初期値として設定されているパスワードを速やかに変更してください。

## 旧バージョンからのアップグレード

データベースが既に存在していて更新する必要があるということを除けば、アップグレードは新規インストールと全く同じです。

現在インストールしているGeeklogの中で自分で変更したカスタムコードがあれば（特に `lib-custom.php`。カスタマイズしたコードはすべてこのファイルの中に入れることをお勧めします）、必ずバックアップを取っておいてください。修正したテーマ、画像、静的ページのバックアップを必ず取っておいてください。

また、データベースのバックアップも必ず取っておいてください。ファイル類とデータベースをバックアップする重要性はいくら強調してもし足りないくらいです。

警告しましたよ!

1. Geeklogの現バージョンのターボール（圧縮ファイル）をGeeklog.netやGeeklog.jpからダウンロードします。

2. 次のコマンドを実行して、ダウンロードしたターボールを伸張（解凍）します。

   `tar -zxvf geeklog-1.5.1.tar.gz`

   注意: WinZipを使用すると、そのバージョンによっては、ファイルが壊れると報告しているユーザがいます。こうなるとインストールの最中にエラーになるので、ローカルでファイルを解凍する必要がある場合は、WinZipの代わりに7-ZipやWinRARを使うことを強くお勧めします。

3. `geeklog-1.5.1/` ディレクトリの中身を、現在インストールしているバージョンの同じディレクトリに転送します。たとえば、現在のバージョンを `/usr/home/www/geeklog/` にインストールしているなら、新しいバージョンも `/usr/home/www/geeklog/` に転送します。

4. 旧バージョンからのアップグレード：

   - Geeklog 1.4.1及びそれ以前のバージョンからのアップグレード：`config.php` ファイル（メインの `config.php` と各プラグインの `config.php`）をバックアップしておき、新しいバージョンを転送した後で、コピーをそれぞれの場所に戻してください。インストールウィザードはアップグレードの最中にこれらの設定ファイルからデータを読み取り、新しいコンフィギュレーション用に値を設定します。このステップを省くと、Geeklogとインストール済みプラグインの初期値に戻されてしまいます。

   - Geeklog 1.5.0及びそれ以降のバージョンからのアップグレード：`db-config.php` と `siteconfig.php` をバックアップしておき、新しいバージョンを転送した後で、コピーをそれぞれの場所に戻してください。さもないと、アップグレードの過程でデータベース情報などを再入力することになります。

5. Webブラウザを起動し、Geeklogのインストールウィザードを実行します（`http://サイトのURL/admin/install/index.php` をアドレス欄に入力します）。Geeklogのファイルをサブドメインに置いた場合は、`http://サイトのURL/サブドメイン名/admin/install/index.php` などとなります。

   Geeklogのインストールウィザードは自動的にインストールを行うので、単に表示される手順に従ってください。

6. インストールが終了したら、必ず、 `admin/install` ディレクトリを削除してください。

7. 必要なら `lib-custom.php` などのバックアップしておいたコードやテーマなどのファイル類を戻します。

## よくある問題と解決法

先に進む前に、 `siteconfig.php` を開き、パスを確認してください。パスが不正であったり、間違いがあったりすると、様々な種類のエラーが発生します。

エラーメッセージが出たら、それを注意深く読んでください。PHPに詳しくなくても、エラーに関するヒントは得られます。エラーメッセージに含まれるパス情報に特に注意してください。上述の通り、パスの間違いは最もよく見られる原因です。

複数のエラーメッセージが表示される場合は、必ず最初のエラーメッセージから手をつけてください。最初のエラーを解決したら、残りのエラーが消えることもよくあります。

### よくあるエラー(以下の例で行番号は状況に応じ、違うものになりえます):

- エラー: `Parse error: parse error in /path/to/your/siteconfig.php on line 20`

  答え: Parse errorは、自分のtypo（綴り間違い）が原因で起こることが多いです。表示された行やその直前の行をチェックしてください。

  よくある間違いは:

  - パスをシングルクォート(')できちんと閉じていない
  - 行末のセミコロン(;)が抜けている
  - 文字列内でシングルクォート(')を使っているのにエスケープし忘れている(たとえば、 `Joe¥'s Site` と書かなければならないのに、 `Joe's Site` と書いている)

- エラー: `Warning: main(some/path/to/system/databases/mysql.class.php): failed to open stream: No such file or directory in /path/to/your/system/lib-database.php on line 100`

  `Fatal error: main(): Failed opening required 'some/path/to/system/databases/mysql.class.php' (include_path='.:/some/other/path/') in /some/path/to/system/lib-database.php on line 100`

  答え: `siteconfig.php` 中の `$_CONF['path']` (Geeklogのシステムファイルのパス）の値が正しくありません。また、 絶対 パス、つまり、ファイルシステムのルートから始まるパスを指定しているか確認してください（Unix/Linux系のOSなら / 、Windowsならドライブ文字から始まります)。

- エラー: `1050: Table 'gl_access' already exists`

  答え: 以前インストールを実行したことがあります（たぶん、失敗しているはずです）。念のために、既存のデータベースを削除してから新しく空のデータベースを作り直し、インストールし直した方がよいです。

- エラー: `Parse error: parse error in ../../lib-common.php on line 2231`

  `Fatal error: Cannot instantiate non-existent class: template in ../../lib-common.php on line 335`

  または:

  `Parse error: parse error in /path/to/geeklog/public_html/lib-common.php on line 3036`

  `Fatal error: Call to undefined function: plg_showcenterblock() in /path/to/geeklog/public_html/index.php on line 67`

  または:

  `Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /path/to/geeklog/public_html/lib-common.php on line 3815`

  `Fatal error: Cannot instantiate non-existent class: template in /path/to/geeklog/public_html/lib-common.php on line 709`

  答え: 上記の例はすべて(また、 `lib-common.php` で発生する "parse error" で、エラーが発生した行番号が特に3000から4000台の場合)、 `lib-common.php` が破損していることを示しています。

  このドキュメントの冒頭に示したとおり、このエラーの原因は普通、次のうちの1つです:

  - あるバージョンのWinZipを用いてターボールを伸張（展開）した(WinZipの代わりに7-ZipやWinRARを試してみてください)
  - `lib-common.php` をDreamweaverなどのいわゆるWYSIWYG HTMLエディタで編集した(代わりに、シンプルなテキストエディタを使用してください)
  - `lib-common.php` をCpanelなどの管理ツールに組み込まれているオンラインのエディタで編集した(代わりに、シンプルなテキストエディタを使用してください)

- エラー: `Warning: mysql_connect(): Access denied for user: 'username@localhost' (Using password: YES) in /path/to/geeklog/system/databases/mysql.class.php on line 104
  Cannnot connect to DB server`

  答え: まず最初に、 `siteconfig.php` 中のデータベースの設定が正しいか確認してください。特にMySQLユーザのアカウント名とパスワード、データベース名、MySQLサーバ名。

  自分でサーバを運営しているなら、MySQLのユーザに適切な権限を与える必要があるかもしれません。その場合は、管理者としてMySQLサーバにログインし、次のコマンドを発行してください:

  `GRANT ALL PRIVILEGES ON [database_name] TO [user@host] IDENTIFIED BY '[password]';
  FLUSH PRIVILEGES;`

  [小文字] の部分は適切な値に置き換えてください。

  データベースの権限をもっと制限したい、あるいは制限する必要がある場合でも、少なくとも ALTER, CREATE, DELETE, INSERT, SELECT, UPDATE 権限をデータベースユーザに与える必要があります。ALTER と CREATE 権限は、Geeklogのインストールとアップグレード、プラグインやアッドオン(add-ons)のインストールを行うときしか必要ではありません。

- エラー: `Warning: fopen("/some/path/logs/error.log", "a") - Permission denied in /some/path/public_html/lib-common.php on line 1440`

  答え: logsディレクトリとその中に含まれるファイルの両方に少なくとも 775 のパーミッションがあることを確認します。775 でうまくいかないなら、777 にする必要があるでしょう。同様に、 `public_html/backend` ディレクトリとその中に含まれるファイル(geeklog.rssなど)にも 775 または 777 のパーミッションが必要です。

  ヒント: `http://自分のサイトのURL/admin/install/check.php` を利用して、パーミッションがすべて適切に設定されているか確認するとよいでしょう。

- 誰かがログイン・ログアウトするたびに、次のエラーが発生する:

  `Cannot add header information - headers already sent by (output started at /usr###/home/<userid>/public_html/geeklog/siteconfig.php:589) in /usr###/home/<userid>/public_html/geeklog/system/lib-sessions.php on line 133`

  答え: `siteconfig.php` 末尾の `?>` の後に余分なホワイトスペース（スペース、タブ、改行コードなど）が含まれていないか確認してください。（訳注：ファイル末尾の `?>` がなくてもPHPの動作に支障はないので、取り除くとよいでしょう。）

これでも問題が生じるなら、次のことを試してみましょう。

1. http://www.geeklog.net を訪問して、「サポート(Support)」のセクションを調べてみましょう。サポートセクションには、 よくある質問(FAQ) と 検索(Search)システムがあります。表示されたエラーメッセージを（行番号を除いて）検索してみるとよいでしょう。

2. http://lists.geeklog.net/pipermail/geeklog-users/ に保存されているメーリングリストの過去ログを読みましょう。このメーリングリストを購読し、Geeklogコミュニティに（英語で）質問を投稿してもよいでしょう。

3. `irc.freenode.net, channel #geeklog` のIRCを試しましょう。`siteconfig.php` に含まれるパス情報と `lib-common.php` を手元に用意しておいてください。

4. エラーメッセージをGoogleで検索してみましょう。他の人が同じ問題に遭遇し、解決している可能性があります。Googleで検索していると、同じエラーが発生している壊れたページが表示されることもあります。