去年の暮れ、やる事もやったのでブログ用の新年絵でも描こうかと思った時、ふと 「 ポートフォリオサイトを作ってみたい 」 という思いに駆られました。
QNAP に Zenphoto アプリが有ったのを思い出し、導入してみようと思ったのが悪夢の始まりでした。

Zenphoto - The simpler media website CMS

ご注意

いつものお決まりですが、Zenphoto のインストールは自己責任でお願い致しまする。
「 QNAP のデータが消えた! 」 とかなっても僕にはどうする事も出来ません。

また、僕が持っている TS-220 での解説ですので、他の機種では異なる操作が必要になるかもしれません。

僕はサーバーとか Linux とか全く分からないので、セキュリティ面などで完全でない可能性が有ります。

Zenphoto の感想

Zenphoto どうでしょうかねぇー。
「 まだまだ洗練されていない 」 というのがファーストインプレッションでしょうか。
例えば

  • Colorbox を ON にする設定がテーマとプラグインとで別々だったり
  • サムネイルの表示列数を変更しても無視されたり
  • 機能の解説が意味不明だったり

します。
まあこれは、慣れであったりテーマごとの実現可不可に気づけるかどうかの問題なので、時間をかければ解決するかもしれません。
でも最もイタダケナイのが、既存のテーマがショボ過ぎだった事です。
デザインが10年以上前の雰囲気を醸し出しています。
まあこれも、フルカスタマイズ出来るはずですので気に入らなければ自分で作れば良いのかなと思ったりもします。
全く別物だと思うので比べるのはどうかと思いますが、Wordpress に慣れている方であればそちらの方がカスタマイズし易いかもしれません。情報も多いでしょうからね。

Zenphoto についての情報はここが分かりやすいでしょうか。
第1回 Zenphotoとは:ZenphotoでかんたんWebギャラリー|gihyo.jp … 技術評論社

QNAP App Center の Zenphoto はそのままでは使いません

QNAP に入っている Zenphoto は、バージョンが 1.4.0.4 と非常に古く、セキュリティーにも問題が有ります。
試してみなけりゃ分からない? 古いWebアプリの脆弱性(1):古い「ZenPhoto」でXSS脆弱性のリスクを確認 (12) - @IT

App Center の表示にも Beta と書かれている事から、どんな感じで動くのかローカルで試してみる程度の物と思っておいた方が良いです。

インストール場所について

QNAP に Zenphoto をインストールする場所としては

  • Web フォルダに新しいバージョンをインストールする
  • App Center でインストールした Zenphoto の場所に新しいバージョンを上書きする

が考えられます。(熟練者ならもっと良い場所を知っているかもしれません。)

素人の僕が思う利点・欠点を挙げてみます。

前者 利点
  • 後者に比べて余分なファイルが発生せず綺麗にインストール出来る
  • 後者に比べて作業手順が少ない
欠点 FTP ソフトで Zenphoto フォルダが見える
後者 利点
  • QNAP デスクトップに Zenphoto アイコンが表示される
  • Web フォルダにはシンボリックリンク(ショートカットみたいなもの)が有るだけなので FTP ソフトでフォルダが見えない
欠点 古いバージョンのファイルを削除する必要がある

欠点を改善する方法は有ると思いますし、利点が利点でないと思う方も居ると思います。
どちらかと言うと、前者が良いと思いますが、僕はなんとなく後者で行いました。

準備

SSH 接続

QNAP と SSH で接続出来る様にして下さい。
ここでは、PuTTY を使います。
QNAP Turbo NAS 取扱説明書
FileMaker って、、、あれかなぁ ターミナルエミュレータを使って QNAP の状態を確認する

PuTTY の配色は、特にディレクトリを表す青色が意味不明なくらい見辛いです。
下記サイト様の配色は非常に見やすいのでおススメです。
PuTTYの配色を見やすくした - 情報科学屋さんを目指す人のメモ(FC2ブログ版)

ちょっと設定が面倒臭いですが、見づらいよりは断然良いでしょう。
設定の保存をお忘れなく (Configuration 画面の Session より )。

Windows エクスプローラーで QNAP の Web フォルダを見られるようにする

表題の通りです。Windows のネットワークから表示させて下さい。

MySQL の有効化

MySQL は QNAP のコントロールパネルから有効にしてください。
この時、TCP/IP ネットワークを有効にしないと phpMyAdmin のログインで失敗します。

Zenphoto 用のデータベース作成 ( phpMyAdmin のインストール )

phpMyAdmin も同時に App Center よりインストールし、Zenphoto 用のデータベースを作成しておきます。

ログイン

phpMyAdmin を立ち上げたら、以下の情報でログインします。
( 初めてのログインの場合 )

ID : root
pass : admin

パスワードの変更をお勧めします。
ホーム画面の一般設定から設定変更できます。

データベースの作成

データベースタブに移動してデータベースを作成します。

データベース名 : zenphoto
照合順序 : utf8_general_ci

インストール

Zenphoto のダウンロード

最新版は Zenphoto のトップページからダウンロード出来ます(現在最新は 1.4.6)。
Zenphoto - The simpler media website CMS

過去のバージョンはこちらから。
Older versions archive - User guide - Zenphoto - The simpler media website CMS

さて、どのバージョンをインストールするかですが、最新版の Zenphoto (1.4.6)は PHP 5.4以上を強く推奨し、MySql 5.5.0以上を推奨しています。
しかし、Qnap 4.1.1 はそれを満たしておらず、インストール時に警告が表示されてしまいます。

必須条件は満たしているのでインストールは出来ますし動作もする様ですが、どんな不具合が有るかは分かりません。
下に、Qnap 4.1.1 でインストール時に警告が出ないバージョンを記しておきますので、判断してダウンロードして下さい。

Zenphoto バージョン 推奨条件
1.4.3.1 以上 満たさない
1.4.3 以下 満たす
1.4.2.4 以下 危険

因みに僕は 1.4.6 をインストールしました。

Zenphoto の設置

Windows のエクスプローラで Qnap の Web フォルダを表示させます。

さて、先程書きました通り2つの方法が考えられますので、2通りの方法を書いておきます。

Web フォルダにインストール

Web フォルダに zenphoto フォルダを作成して、解凍したフォルダの中身をそこへコピーします。

Web
 ┗ zenphoto
App を上書き

Web フォルダに適当なフォルダ(例えば zenphoto2)を作成し、さらにその中に zenphoto フォルダーを作成し、解凍したフォルダの中身をそこへコピーします。

Web
 ┗ zenphoto2
    ┗ zenphoto

App Center からインストール(上書きの人のみ)

Qnap の App Center から Zenphoto - Beta (エンターテインメント)をインストールします。
まだセットアップは行いません。

App を上書き(上書きの人のみ)

SSH で QNAP にログインし、次のコマンドを実行します。

cp -rf /home/Qhttpd/Web/zenphoto2/zenphoto /share/MD0_DATA/.qpkg/ZenPhoto/

※zenphoto2 はご自身で決めたフォルダ名です。
※機種によってディレクトリが違うかもしれません。

セットアップの実行

http://QNAP の IPアドレス/zenphoto/zp-core/setup.php

ブラウザに上記アドレスを入力すると Zenphoto のセットアップ画面が表示されます。

ここで、エラーや警告が表示されていますので、潰して行きます。
僕の環境では以下の項目でエラーor何らかの注意書きがありました。

  1. zp-data security [is compromised]
  2. PHP magic_quotes_gpc [is enabled]
  3. PHP setlocale() failed
  4. PHP mbstring package [Your internal character set is ISO-8859-1]
  5. File/Folder Permissions [are unknown (744)] Notice! click for details
  6. Database setup in zp-config.php

※細部は環境によって異なるかもしれません。

File/Folder Permissions 警告を潰す!

File/Folder Permissions はファイル・フォルダの権限が設定されていないという注意の様です。

click for details から strict 以上を選んでおけば良いと思います。
もし権限が厳格過ぎて Zenphoto がうまく動作しない場合は、このセットアップ画面に戻ってきてより緩い権限に設定しなおしてみて下さい。

PHP の設定変更 magic_quotes_gpc 警告を潰す!

magic_quotes_gpc とは、掲示板などで変なスクリプトを入力されないようにする(サニタイジング)為のものだそうです。
しかしその効果は薄く、逆に弊害がある為最新版の PHP では削除されているそうです。
詳しくは下記参考サイトをご覧ください。

SSH でログイン

表題の通り、SSH でログインします。

php.ini のバックアップ

php.ini を触りますので、念の為にバックアップを取ります。

  cp /mnt/HDA_ROOT/.config/php.ini /mnt/HDA_ROOT/.config/php.ini.org

※PuTTY は右クリックで貼り付け出来ます。

php.ini の編集開始

vi エディタで php.ini の編集を行います。

vi /mnt/HDA_ROOT/.config/php.ini

magic_quotes_gpc の検索と編集

magic_quotes_gpc の文字列を検索します。

/magic

magic_quotes_gpc = off にする

magic_quotes_gpc = on となっている箇所がありますので、off に書き換えてやります。

下に vi エディタの使い方を書いておきます。

viの編集方法
コマンドモードに戻る(編集モード離脱) Esc キー
編集モード(挿入) i
編集モード(置換) R
1文字削除 x
viの終了(保存しない) :q
viの終了(保存) :wq

詳しくは ⇒ viエディタの使い方

【magic_quotes_gpc に関する参考サイト】
[PHP]サーバ設定でmagic_quotes_gpcがOnの時の対策|シラサヤ備忘館
今更ながらmagic_quotes_gpcの欠点 - T.Teradaの日記
サニタイズとは - IT用語辞典 Weblio辞書

PHP の設定変更 PHP mbstring package 警告を潰す!

日本語を扱うためにマルチバイト文字列の拡張モジュールを有効にして、設定まで行います。
何かをインストールする必要はありません。

SSH でそのまま [mbstring] を探し、次の行に以下の文字を追記します。
(vi の場合は o で次の行に挿入になります)

extension=php_mbstring.dll
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.strict_detection = Off
;mbstring.http_output_conv_mimetype=

【mbstring package に関する参考サイト】
日本語利用の為の設定(mbstring) - php.iniの設定 - PHPインストールと初期設定

PHP setlocale() failed 警告を潰す!

詳しい事は分かりませんが、サイト内でボタン一発で別の国の言語に変換出来るようにする(多言語化)ための、日本語のデータ(ロケールファイル)が存在しないようです。
そのロケールファイルを追加する作業です。

translit_cjk_variants の取得と設置

Country Locale - QNAPedia
の「Download the full set of ...」に続くリンクをダウンロードします。

ファイルを解凍したら LOCALES フォルダ内の translit_cjk_variants ファイルを QNAP の”Web”フォルダにコピーします。

translit_cjk_variants ファイルを /usr/share/i18n/locales/ に下のコマンドでコピーします。

cp /home/Qhttpd/Web/translit_cjk_variants /usr/share/i18n/locales/translit_cjk_variants

ロケールファイルの取得と設置

Locale Helper ja_JP
の Export in glibc format を右クリックで QNAP の”Web”フォルダに保存します。

保存したロケールファイルを”ja_JP”に改名します。

ロケールファイルを /usr/share/i18n/locales/ に下のコマンドでコピーします。

cp /home/Qhttpd/Web/ja_JP /usr/share/i18n/locales/ja_JP

ロケールの生成

下のコマンドでロケールを生成します。

localedef -i ja_JP -f UTF-8 ja_JP.UTF8

生成を確認します。

locale -a

で ja_JP.utf8 が一覧に入っていればOK

Apache の再起動

Apache を再起動させます。

/etc/init.d/Qthttpd.sh restart

Starting Qthttpd services: OK
が表示されれば完了です。

【ロケールに関する参考サイト】
QNAP(QTS)に新しいロケールを追加する方法 - tranphonic’s blog
Linuxカーネルの基本機能 - 第10回 ファイル名の文字コード:ITpro

データベースの設定 Database setup in zp-config.php 警告を潰す!

再び Zenphoto セットアップ画面へ戻ります。
http://IPアドレス/zenphoto/zp-core/setup.php

ロケールの生成がうまく行っていれば、セットアップ画面が日本語になっていると思います。

Database setup in zp-config.php の項目で、準備の時点で作成したデータベースの情報を元に空欄を埋めます。

全て入力して保存すると、新たな警告が発生すると思います… orz

ファイルシステムの文字セット定義は・・・ 警告を潰す!

警告の文中にあるリストから 「 UTF-8 」 を選んで、「 適用 」 をクリックします。

【この警告に関する参考ホームページ】
Zenphoto - セットアップ

不満が残る方

上記方法は完全な解決方法ですが、【テストは実行されません】 が残って気持ち悪い方は以下の方法で解消します。

エクスプローラーから
Web/zenphoto/zp-data
内の
tést.jpg

charset_tést.jpg
に改名して、セットアップ画面をリロードして下さい。

ファイルシステムの文字セット定義はUTF‑8です【確認済】
に更新されます。

つまり、zp-data フォルダに " é " の様なアクセント付き文字の有るファイル(例えば charset_tést.txt : 中身は何も入れなくて良い)を入れると、それが正しく扱われるか自動でテストする様です。

・・・は削除するべきです 警告を潰す!

すいません、メモしてなかったので正確な表記が分かりません。
拡張機能関連のファイルなど、かなり多数のファイル名が列挙されます。

これは、App を上書きした人のみ現れる警告です。
恐らく古いバージョンのファイルは消す必要が有ったのでしょう。

親切にも 「 拡張ファイルを削除 」 ボタンが有りますのでクリックしてサクッと削除してあげて下さい。
セットアップ画面をリロードすると消えてなくなっています。

削除できませんでした!?

焦りますが、もう一度リロードすると消えていると思います。

zp-dataセキュリティ 警告を潰す!

さあ、これで最後のはずです。もう一踏ん張りです!

僕はこの警告が意味不明すぎて1日以上悪戦苦闘してしまいました。
しかし、分かってみれば簡単な事で、zp-data フォルダの中にパーミッション(権限)が 600 以外のファイルが存在すると発生する警告でした。

ただ、このフォルダ中に 「 0644である必要があります 」 とされるファイルが自動で生成される為、永久にイタチゴッコになってしまいます。

ここはもう、完全に潰す事は諦めましょう。
zp-data フォルダ内の php ファイルが 600 であれば良いかと思います。

zp-data フォルダの php ファイルを 600 に

SSH にて zp-data へ、下のコマンドでディレクトリを移動します。

Web フォルダに
インストール
cd /home/Qhttpd/Web/zenphoto/zp-data/
App を上書き cd /share/MD0_DATA/.qpkg/ZenPhoto/zenphoto/zp-data/

下のコマンドでファイルの詳細を見る事が出来ます。

ls -l

左端に -rwx------ などの記号があると思いますが、これが権限を表す記号です。
もし php が -rwx------ ( 600 ) 以外の表記だったなら、-rwx------ に修正します。

chmod 600 任意のファイル名

変更したら再度 ls -l で確認しましょう。

【アクセス権限に関する参考サイト】
Linuxコマンド集 - 【 chmod 】 ファイルやディレクトリのアクセス権を変更する:ITpro
Linuxコマンド逆引き大全 - 【 アクセス権限とは 】:ITpro

それでも不安がある場合は

zp-data フォルダ自体のパーミッションを厳しくするのも手かもしれません。
ただし、600 にしてしまうとセットアップが続行不能になってしまいますので、それ以外になるかと思います。

潰せるだけ潰せました?

後残っている警告は

  • zp-dataセキュリティ
  • PHP のバージョン
  • mySQL のバージョン

位かと思います。

もし他にも警告が出ている場合は…すみません。なんとか対処して下さい。
※警告が出ていても、セットアップを完了させることが出来る場合もあります。

インストールの完了

ここまで出来たら、セットアップページの一番下にあるボタンを押してインストールを完了させて下さい。
お疲れ様でした。

追加のセキュリティ対策

セットアップが完了したら、セットアップファイルは削除しておいた方が良いそうです。

Zenphotoのセットアップファイルは削除 INCOMPLETE++

サーバー再起動時のエラーについて

QNAP は再起動する毎にデフォルトの設定に戻してしまう機能があるらしいです。
これによって、変にいじっておかしくなっても再起動すれば元に戻るという安心機能でしょう。

上記の手順で構築した場合は問題ないとは思いますが、折角時間を掛けて構築した Zenphoto が白紙にされたら大変です。
色々作りこむ前に一度 QNAP を再起動させて正常に戻るか確認した方が良いでしょう。

再起動したらページが見えなくなる

QNAP を再起動させたら、ページが真っ白になるか 「 もう一度セットアップして下さい 」 みたいなメッセージが表示されます。
これは、Zenphoto が mySQL と通信出来ない為に発生する現象の様です。
因みにこの状態で phpMyAdmin にログインしようとしても ” #2003 ” のエラーが出てログインできません。

QNAP に限らず、サーバーを再起動させても mySQL は自動で起動しないのが通常らしいです。
なのでこの現象は正常な動作と言えます。

QNAP の mySQL を起動させる簡単な方法としては、QNAP にログインし、mySQL の設定を変更して保存すればOKです。

正式な方法としては、SSH で以下のコードを用いるようです。

/etc/init.d/mysqld.sh start

【mySQL 起動に関する参考サイト】
MySQL の起動と停止

その他

phpMyAdmin にログイン出来ない ( #2002 )

#2003 に関しては、僕の知っている解決方法は上の項目で触れた限りです。

この他に #2002 のエラーが出てログイン出来ない場合がありました。
もしかすると、下記方法で解決するかもしれません。

SSH で /share/MD0_DATA/.qpkg/phpMyAdmin/phpMyAdmin に移動します。

cd /share/MD0_DATA/.qpkg/phpMyAdmin/phpMyAdmin

vi で config.inc.php を編集します。

vi config.inc.php  
$cfg['Servers'][$i]['host'] = 'localhost';

$cfg['Servers'][$i]['host'] = '127.0.0.1';

に変更して保存して下さい。

【phpMyAdmin #2002 エラーに関する参考サイト】
phpMyAdmin #2002 MySQL サーバにログインできません office-aship

要らないファイルを消します

App を上書きした人は、Web フォルダの zenphoto2(ご自身で決めた名前) フォルダは、中身も含めて完全に必要ありません。
※zenphoto フォルダは消したらダメですよ!

後はロケールに関するファイルとか要らないですね。

QNAP をバージョンアップしたら・・・

まだ経験していませんが、恐らく php.ini に設定した内容は初期化されるでしょう。
その場合は再度設定してあげる必要が有ると思います。

また念の為、バージョンアップ前には zenphoto フォルダをバックアップしておいた方が良いかもしれません。

最後に

QNAP のアプリって 「 QTSに追加 」 ボタンを押せばすぐに使えるものと思っていたのですが・・・激しく疲れました。
ロケール関連の警告でも1日以上費やしてしまいましたし、正月はもうほとんどこれで、もう何が何やらです。

恐らく、ロリポップなどのサーバーで Zenphoto のインストール機能が付いている場合は瞬殺なのだと思います。
QNAP に正式版を入れようと思ったのが間違いでした。

最初にも書いた通り、これだけ苦労して得られたものにあまり感動が無かったので疲れも倍増です。
まあ、良い感じにカスタマイズできたらサイトを公開してみようかなと思います。

僕と同じ様に QNAP に Zenphoto 正式版を入れてみようとする変人がもし居ましたら、この記事が助けになるかもしれません。