お引越し

定年間近。定年後は大学の奥村研究室のサーバを継続利用できるかどうか微妙だ。そこで,定年後の引越し先の整備を兼ねて,以前から借りていたさくらのレンタルサーバライトから,さくらのVPS(1G)に引っ越した。ドメインは以前から持っていたokumuralab.orgをそのまま使う。

さくらのVPSにはCentOS 7をインストールした。レンタルサーバライトからVPSへのokumuralab.orgドメイン移行が最初よくわからず,さくらの質問フォームで問い合わせたが,回答がいまいち。ふと気づいて,まずレンタルサーバライト側でokumuralab.orgを削除したら,VPS側で設定することができた。

あとは大学の研究室のサーバからの引越しである。これは急ぐ必要がないので,少しずつやればよい。

安いVPSのプランゆえ,リソースが限られているので,MySQLを使ったコンテンツはなるべく避けたい。特に,古いブログはDrupal 6で作ってあり,凍結してスタティックなページに移行したい。

サイトのコンテンツをそのままコピーするにはいつもwgetを使っている。

wget --mirror --no-parent --no-clobber --adjust-extension --convert-links --page-requisites http://...

のような感じでやればよい。ただ,Drupalの個別URLには拡張子が付かない。--adjust-extension(wget 1.12から --html-extension が改名)を付けるとURLに .html が付き,今までのURLと変わってしまう。そこで,このオプションを外してアーカイブする。.html が付かなくてもtext/htmlで送り出される。問題が起こるのは node?page=1 のようなファイルで,これをGETしようとすると ? 以下が無視されて node ディレクトリのリスティングが送られてくる。これを避けるには node?page=1 へのリンクを node%3Fpage=1 へのリンクに書き換えればよい(ファイル名は ? を含むままでよい)。

リンクやURLの書き換えは,次のようなRubyスクリプトで一度にできる:

ARGV.each do |file|
  buf = File.open(file, "r") do |f|
    f.read
  end
  buf.gsub!(/href="http:\/\/oku\.edu\.mie-u\.ac\.jp\//, 'href="/')
  buf.gsub!(/src="http:\/\/oku\.edu\.mie-u\.ac\.jp\//, 'src="/')
  buf.gsub!(/action="http:\/\/oku\.edu\.mie-u\.ac\.jp\//, 'action="/')
  buf.gsub!(/href="node\?/, 'href="node%3F')
  buf.gsub!(/href="index\.html"/, 'href="./"')
  buf.gsub!(/href="..\/index\.html"/, 'href="../"')
  File.open(file, "w") do |f|
    f.write(buf)
  end
end

これ以外に .css.js だけをコピーするにはrsyncが使える:

rsync -avm --include='*.css' -f 'hide,! */' src/ dest
rsync -avm --include='*.js' -f 'hide,! */' src/ dest

あとは試行錯誤でやっているうちに,引越しができたようである。


[2016-09-20追記] wget に --convert-links を付けると,せっかくリロケータブルになるように相対URLにしてあるものが,絶対URLになってしまう。また,上記の方法では Drupal の node/ 以下が全部取得できるわけではない。単純に

for i in `seq 1 2586`; do
  wget http://oku.edu.mie-u.ac.jp/~okumura/blog/node/$i
done

で node/ 以下を取得するだけのほうが確実だ。