# Geeklogのインストール

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

## 用語

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

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

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

Geeklogをインストールして使用するには、ApacheやMicrosoft IISなどのWebサーバとPHP 5.6.4(8.1もサポートしています)以降が必要です。PHPのエクステンションで必要なものは:

- mbstring
- bzip2
- mysqlかmysqli (MySQLをサポートするため)
- pgsql (Postgresqlをサポートするため)
- OpenSSL (OAuthによるログインを有効にするため)
- JSON (ファイルマネージャーとデータベースツールのため)
- fileinfo (記事で画像のサムネールをサポートするため)

また、データベースとして、MySQL 4.1.3以降か、(MariaDB 5.1以降も可), PostgreSQL 9.1.7以降が必要です。

データベースを作成するときに、どの照合順序を使用するかを理解してください。以下に示すのは、Geeklogがインストールでサポーストする言語の文字セットと対応するデータベース文字セット及び推奨する照合順序です:

言語 | サイトの文字セット | MySQLの文字セット | MySQLの照合順序 | PostgreSQLの文字セット | PostgreSQLの照合順序
--- | --- | --- | --- | --- | ---
英語 | iso-8859-1 | latin1 | latin1_swedish_ci | LATIN1 | ?
英語 (UTF-8) | utf-8 | utf8/utf8mb4 | utf8_general_ci/utf8mb4_general_ci | UTF8 | en_US.UTF-8
日本語 | utf-8 | utf8/utf8mb4 | utf8_general_ci/utf8mb4_general_ci | UTF8 | ja_JP.UTF-8
ドイツ語 | iso-8859-15 | latin1 | latin1_swedish_ci | LATIN9 | ?
ヘブライ語 | utf-8 | utf8/utf8mb4 | utf8_general_ci/utf8mb4_general_ci | UTF8 | he_IL.UTF-8
中国語(簡体字) | utf-8 | utf8/utf8mb4 | utf8_general_ci/utf8mb4_general_ci | UTF8 | zh_CN.UTF-8
中国語(繁体字) | utf-8 | utf8/utf8mb4 | utf8_general_ci/utf8mb4_general_ci | UTF8 | zh_TW.UTF-8

Geeklog 2.2.2以降、新規インストールの際には、お使いの言語とは無関係に、サイトの既定言語及びデータベースの文字セットでUTF-8が必須になります。データベースの文字セット/照合順序がUTF-8をサポートしていることを確認してください(MySQLの場合は utf8mb4_general_ci/utf8_general_ci、PostgreSQL の場合は ja_JP.UTF-8)。

アップグレードの際には、データベースの文字セットは変更されません。アップグレード後に、 phpMyAdminやAdminerなどのツールを使用してデータベースの文字セットをUTF-8変更する場合は、手動で "db-config.php"の $_DB_charset の値を 'utf8' か 'utf8mb4' に、"siteconfig.php"の $_CONF['default_charset'] の値を 'utf-8' に変える必要があります。

Geeklogはインストール時に使用できない言語でも運用時にはサポートしています。これらの言語をサポートする最も簡単な方法は、データベースの文字セット/照合順序で UTF-8 を使用することです。いったんインストールが終了すれば、コンフィギュレーションで自分が使用したい言語を選択すれば良いのです。自分が使用している言語に特有の文字セット/照合順序をデータベースで使用するなら、同じ文字セットを使用している言語をインストール時に選ぶか、インストール後に手動で siteconfig.php と dbconfig.php の設定を正しいものに変更する必要があります。その場合には、データベース、テーブル、列の文字セット/照合順序を更新する必要があります。他の言語がどんな文字セットを使用しているか知るには、Geeklogの language ディレクトリ内にある言語ファイルを確認する必要があります。

PostgreSQLユーザーのための注意: 現在、GeeklogではPostgresオプション standard_conforming_strings を off に設定する必要があります(PostgreSQL 9.1以降はデフォルトで on になっています)。

MySQLユーザーのための注意:MySQLのバージョン5.5.3以降は4バイト文字をサポートしています。絵文字をサポートしたい場合は、utf8mb4_general_ci などの照合順序を使用する必要があります。既存のGeeklogのデータベースで異なる照合順序を使用している場合は、phpMyAdminなどのツールを使用して照合順序を変更します。変更する前の照合順序によっては、テーブルのデータを更新する必要があります。

### 必要な技術力

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

- Webディレクトリのルート(ドキュメントルート)のパス(パスとは?)を見つけ出す方法を理解している。
- ダウンロードしたGeeklogのターボール(圧縮ファイル)を展開(解凍)できる。
- データベースを新規作成するか、既存のデータベースにアクセスできる。
- データベースを変更できるユーザーアカウントを持っている。MySQLの場合、これにはデータベースのすべての特権が付与されたユーザーを含む(加えて、権限を付与するときにALL権限に含まれていないLOCK権限)。
- WebサーバーにSSHやFTPでアクセスして、いくつかのファイルとディレクトリのパーミッションを変更できる。

## 新規インストール

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

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

   `tar -zxvf geeklog-2.2.2.tar.gz`

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

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

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

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

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

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

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

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

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

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

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

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

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

警告しましたよ!

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

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

   `tar -zxvf geeklog-2.2.2.tar.gz`

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

3. `geeklog-2.2.2/` ディレクトリの中身を、現在インストールしているバージョンの同じディレクトリに転送します。たとえば、現在のバージョンを `/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のインストールウィザードを実行します(`https://サイトのURL/admin/install/index.php` をアドレス欄に入力します)。Geeklogのファイルをサブドメインに置いた場合は、`https://サイトの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. https://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で検索していると、同じエラーが発生している壊れたページが表示されることもあります。

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