Pukiwiki 1.4.5_1 (EUC)を Pukiwiki 1.5.0(UTF-8)に更新したときのメモ (2021/4)

研究室で使ってるpukiwikiが突如真っ白

かなり昔から使っていたのですが表示ができなくなり更新しました.文字列がEUCで作成していたのでUTF-8にする必要があります.かなり苦労したので少しメモを残しておきます.web上の記述もほとんどないですね.(3ヶ月前に行ったときの記憶で書くので少し違うかも知れません)

やること

  1. pukiwiki1.4.5_1を pukiwiki1.5.0に更新
  2. EUCで書かれている部分を全部 UTF-8にする (これがホントに大変)

(ただし attacheの部分はできていません.更新の際に捨てました)

新規pukiwiki1.5.0のインストール

これはほとんど問題なし.公式を参考にdowload先から utf8版のpukiwiki1.5.0を選択してdownload./var/wwwなど htmlを展開しているところに置くとまずすぐ動いた.

旧pukiwiki (EUCで書かれている) を文字列を変更して移行

/var/www などの下でおいている pukiwiki/ 以下のバックアップをとる

基本的にattach、backup、cache、counter、diff、wiki の以下のファイルをpukiwiki1.5.0と同じ場所に置くと良い.ただし,ファイル名がDEC9CDF8.txtなどとencodeされていて,これが全部EUCになっているものをUTF-8にしないと表示されない...

encs.phpを使って各EUCエンコードされたファイル名(中身もEUC)のものはUTF-8エンコードしたファイル名(中身はEUCのまま)に変換する

まずencls.phpというものをdownload(公式のどこかに指示がありました).しかし使い方に説明無し.これは 1) 指定したディレクトリについて 2) 指定した suffixのファイルを (.txt) を読み込んで 3)指定した文字エンコードにencodeした名前を stdoudに出力するだけです.なので実行しても基本的になにも変化がありません.

そこでencs.phpを下記のように書き換えました(一部表示).やっていることは1)指定のディレクトリのファイル.suffixを読み込んで 新規に サブディレクトリ tmp/の下に UTF-8のファイル名でファイルをコピーしたものを作るというものです.wikiのデイレクトリがだいたい本体で.txtだけですが cache (pukiwikiだと左側の更新リストで表示されるところ)が .refとかあるので,それぞれのデイレクトリで少しずつ実行して UTF-8のタイトルに変更した(かつ中身の文字列もEUCからUTF-8)ファイルを作成します.

// Do
mb_internal_encoding(SOURCE_ENCODING);
mb_detect_order('auto');
$write_dir = './tmp/'; //これ加えた
$matches = array();
foreach ($argv as $arg) {
if (preg_match('/^(.+)(\.[a-zA-Z0-9]+)$/', $arg, $matches)) {
$name = $matches[1];
$suffix = $matches[2];
} else {
$name = $arg;
$suffix = '';
}
//echo $name . $suffix . "\n"; // As-is
if ($f_decode) {
// Decord
echo decode($name) . $suffix . "\n";
} else {
// Decord -> convert -> encode
echo encode(mb_convert_encoding(decode($name),
TARGET_ENCODING, SOURCE_ENCODING)) .
$suffix . "\n";
// copy files with new names <<<< ここを書き換えている.ここから copyまで
$euc_f_name = $name . $suffix ;
$utf8_f_name = $write_dir . encode(mb_convert_encoding(decode($name),
TARGET_ENCODING, SOURCE_ENCODING)) .
$suffix;
copy($euc_f_name,$utf8_f_name);
}
//echo "\n";
}

上記の部分は単に tmpファイルに ファイル名をUTF-8に変換するだけです.

まず自分のpukiwikiの全体をコピー作業用puwkiwkiを /home/jibun/old_pukiwikiとして, wikiのディレクトリについて作業するとします.
先に,/home/jibun/old_pukiwiki/wiki/tmp を作成しておきます

mkdir /home/jibun/old_pukiwiki/wiki/tmp

それで下記のように実行します

cd /home/jibun/old_pukiwiki/wiki
php (enc.phpへのパス)/encls.php --all 

すると /home/jibun/old_pukiwiki/wiki/tmp の下に utf-8名になったファイルがコピーされます (中身の文字はEUCのまま).

次に, /home/jibun/old_pukiwiki/wiki/tmp の下のファイルの中身をEUCから UTF-8に変更します.
nkfを使いました.CentOS7上では下記のように実行しました.

cd /home/jibun/old_pukiwiki/wiki/tmp
find . -type f -print0 | xargs -0 -n 256 nkf --overwrite -w -Lu

この内容を pukiwiki1.5.0の wikiの下にコピーすると見えます.他のディレクトリも同様です.

cacheの変換

cacheディレクトリの場合は他のタイプのファイルもあるのでそれも変換します.

mkdir /home/jibun/old_pukiwiki/cache/tmp
cd /home/jibun/old_pukiwiki/cache/
php (enc.phpへのパス)/encls.php --suffix='.ref' --all
php (enc.phpへのパス)/encls.php --suffix='.rel' --all

これとファイル名がautolink.datなど英語表記で変換しないものもあるのでそれはコピーします.

cp *.dat tmp/
cp *.html tmp/

このあと中身をutf-8にします

cd /home/jibun/old_pukiwiki/cache/tmp
find . -type f -print0 | xargs -0 -n 256 nkf --overwrite -w -Lu

cache/tmpの内容を 新規  pukiwiki1.5.0の cacheの下に置くと左側に履歴がでると思います

あとのbackupなどはほとんど使って無かったので変換しましたが確認していません.
あと,attacheですが,ファイル名との関係が複雑で (attacheファイルが windowsの shift-jisのテキストなどいろいろあり,また何番目のファイルがattacheされていかなど管理されているのですが,そこを復元するのが難しいそうなのでしませんでした.

CentOS7.3 に owncloud9.1.5をインストール(2017/12/13)

CentOS7.3 にowncloudを入れる場合,いろいろ分からないことがあったのでメモ.ここでは全て書かずに,ポイントだけ書きます
概要とポイント

  1. yum などで必要なプログラムはインストールしておく
  2. mysqlなどでowncloud DBを owncloudユーザからアクセスできるようにする
  3. owncloud自身もソースではなく,yumで入れた (9.1.5が入った (2017/12現在))
  4. CentOS7.3のコンソール画面で(VNC) firefoxを立ち上げlocalでアクセス
  5. adminなどでログインして動くことを確認

以上までの手続きは下記あたりを参考にした (リンクは切ってます)
http://blog.livedoor.jp/rappazubon/archives/52202106.html

(http://noaboutsnote.hatenablog.com/entry/owncloud90#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
ところが,他のパソコンから画面が見えない..ここからがこのページの本題
localhost以外のアクセスでのエラー
例えば

 http://192.168.1.30/owncloud

などipaddressや

http://owncloud/owncloud

などドメインでアクセスした場合に下記のようなエラーが出ました.

You don't have permission to access /owncloud on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

アクセスできない.これは実はpermissionのせいでは無く,意図して出されているようです.
yum でインストールした

の方法で入れたところ owncloud 9.1.5がインストールされました.
このとき,上記のエラーに関連する設定ファイルは下記です.

/etc/httpd/conf.d/owncloud.conf

そしてowncloud.confを読むと,改変しないことと外部からアクセスするときはシンボリックリンクを作るように指示が出ています.なのでそれを作成

cd etc/httpd/conf.d/
ln -s /etc/httpd/conf.d/owncloud-access.conf.avail /etc/httpd/conf.d/z-owncloud-access.conf
systemctl restart httpd

これで,http://192.168.1.30/owncloud など,localhost以外のマシンからアクセスしても上記のエラーは出なくなりました.
しかし,アクセスすると今度は trusted domain ではない下記のようなエラーが出ます.
(信頼されないドメインからサーバーにアクセスしています)

このtrustedの意味が上記の日本語のメッセージと異なり実は「owncloud2」というホスト名が問題でこれを登録することが解決方法となります.
(注: 上記のエラーメッセージ(日本語)では,アクセス元のパソコンのドメインが問題のように解釈できますが違うようです)
上記の問題に関連するファイルは

/usr/share/owncloud/config/config.php

で関連する部分はここです

'trusted_domains' =>
  array (
    0 => 'localhost',
  ),

ここがlocalhostという名前しか登録してないので http://localhost/owncloudという名前しか受け付けないというものです.前の0などの数字を増やしながらいくらでもかけるようです.しかし,このファイルは直接書き込むことは推奨されていません.owncloudが自分で書きに来ます.
上記のtrusted domainのエラーが出ると同時に「owncloud2を信頼できるドメイン名に追加」とあります.押してもアクセスできないのでエラーになります.なのでそのリンクだけコピーします.
そしてVNCなど,owncloudサーバのコンソール上でfirefoxを立ち上げて先ほどのパスを投入します.すると下記のように信頼するけど「ok」ですかと尋ねられるのでokを押すと外部からアクセスできます.


よってこの変更は例えば http://192.168.1.30/owncloudでもアクセスしたい場合はこれも同様に登録する必要があります.

さて,上記の変更後さきほどの

/usr/share/owncloud/config/config.php

を確認すると追加されていることがわかります.

'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => 'owncloud2',
    2 => '192.168.1.30',
  ),

なので確認はしてないですが,これを直接書いても同様にアクセスできると思います.
また3,4などさらに違う名前でアクセスしたい場合は増やせるようです.