# Geeklogのインストール

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

## 用語

- ディレクトリ: フォルダと同じです。
- パス: Webサーバ上で、ファイルやディレクトリが実際にある場所です。Windows上でパスはドライブ文字(`c:/inetpub/wwwroot/`)で始まり、*nix系OS上でパスは `/var/www/` のようにルート(`/`)から始まります。
- public_html: URLでアクセスされる、公開領域の一般的なディレクトリ名(その他: htdocs, www)です。
- URL: Uniform Resource LocatorはWeb上の情報の特定の部分を表すアドレス(`http://www.foo.com/`)です。

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

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

Geeklogをインストールして使用するには、ApacheやMicrosoft IISなどのWebサーバとPHPのバージョン4.1.0以降が必要です（訳注：PHPの4.x系列は2008年8月でセキュリティ対応を含めた保守が終了しています。PHP 5.x系列のできるだけ新しいバージョンを選ぶことをお勧めします。2009年11月12日の時点では、5.2系列の最新バージョンは5.2.11、5.3系列の最新バージョンは5.3.0です）。また、データベースとして、MySQL 4.0.18以降か、Microsoft SQL Server 2000以降が必要です。

### 必要な技術力

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

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

## 新規インストール

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

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

   `tar -zxvf geeklog-1.7.1.tar.gz`

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

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

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

   次に、`geeklog-1.7.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.7.1.tar.gz`

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

3. `geeklog-1.7.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` などのバックアップしておいたコードやテーマなどのファイル類を戻します。

## 移行

インストール・スクリプトの「移行」オプションは、他のサーバやドメイン名からサイトの移動の手助けとなります。これはデータベースに保持されている構成情報を更新と、記事にようなコンテンツに含まれる(変更するGeeklogサイトのドメイン名やURLである)URLも更新できます。

「移行」をクリックした後は、いつものように(新しい)データベース・サーバの認証情報を入力しなければなりません。移行オプションは自動的に検出するので、テーブルの接頭子を入力する必要はないことに注意してください。

次に、あなたのコンピュータからデータベースのバックアップをアップロードするか、サーバ(のGeeklogの`backups`ディレクトリ)に既に存在するバックアップから取り込むか、既に他の手段で取り込んでいる場合に現在のデータベースを使用するか、オプションから選択します。

注意: あなたのコンピュータからバックアップをアップロードするには、バックアップ・ファイルの大きさがサーバのアップロードの制限の最大値以下の場合だけ動作します。許可されている最大のサイズは、このオプションを選択すると表示されます。バックアップ・ファイルの大きさが制限を越えている場合はバックアップ・ファイルを圧縮する(zipやgzipが使用できます)か、他の2つのオプションを使用してください。

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

先に進む前に、 `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 であることと、*加えて* その中のファイルのパーミッションが少なくとも 644 であることを確認してください。755 と 644 のパーミッションで動作しない場合は、(それぞれ) 775 または 777 と 664 または 666 といったパーミッションにする必要があるかもしれません。同様に、ディレクトリ `public_html/backend` と (その中の)ファイル geeklog.rss も同じパーミッションであることを確認してください。

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

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

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

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

   なお、サポートについて詳しくは、ドキュメント「サポート」をご覧ください。