プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Webサイトを静的サイトにしました : Netlify でホスティング(2/3)

さて、前の記事で hugo による静的サイトが(一応)できたので、次はこのサイトをホスティングします。

静的サイトホスティング先の選定

いろいろありますねー。

Amazon S3, GitHub Pages, Bitbucket, etc 今回はそんななかでも、 Netlify というホスティングサービスを利用することにしました。

当初は、S3 で考えていたのですが、自分の場合のアクセス数から考えると Netlify の無料版で十分かなというのと、 github や bitbucket と連動して、コミット -> デプロイ を自動でやってくれるというのが魅力的です。

無料プランの範囲でも結構いろいろなことができるようなので、とりあえずはこれで十分かと思います。

(参考) yoshidashingo.hatenablog.com

git リポジトリにコミット

Netlify は GitHub や Bitbucket のアカウントがあれば、すぐに使い始めることができます。 でも、その前に git リポジトリにコミットしておきます。

準備1:下書きの解消

hugo で記事を作成した際に

mor@DESKTOP-RLA4CF1:~/tmp/mor$ hugo new news/test.md

のようにすると、ドラフト状態になっているかもしれません。念のため content/news/test.md のフロントマターを見ると

---
title: "Test"
date: 2018-01-11T14:45:14+09:00
draft: true
---

のように draft が true になっていました。

そこで、リポジトリにコミットする前にドラフト状態にある記事を公開状態に変更しておきます。

mor@DESKTOP-RLA4CF1:~/tmp/mor$ for post in `hugo list drafts`;do hugo undraft content/$post; done

準備2:テーマのインストール方法の変更

hugo のテーマをダウンロードする際は git clone で使っていたと思いますが、このままサイト全体をアップしようとすると themes/hugo-universal-theme/.git ディレクトリを削除する必要があります。

でも、これって、テーマ自体が git で管理されているのに、自分のローカルリポジトリに clone したものを再度コミットする形になって、ちょっと気持ち悪いですよね?

これって、hugo のサイトに解決方法が書いてありました。 git submodule を使えばよいとのことですs。

Host on Netlify | Hugo

この記事に従って submodule に変更してみます。

mor@DESKTOP-RLA4CF1:~/tmp/mor$ cd themes
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$ rm -rf hugo-universal-theme/
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$ cd ..
mor@DESKTOP-RLA4CF1:~/tmp/mor$
mor@DESKTOP-RLA4CF1:~/tmp/mor$ git init
Initialized empty Git repository in /home/mor/tmp/mor/.git/
mor@DESKTOP-RLA4CF1:~/tmp/mor$ cd themes/
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$ git submodule add https://github.com/devcows/hugo-universal-theme
Cloning into 'themes/hugo-universal-theme'...
remote: Counting objects: 1004, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 1004 (delta 0), reused 0 (delta 0), pack-reused 1002
Receiving objects: 100% (1004/1004), 9.17 MiB | 3.12 MiB/s, done.
Resolving deltas: 100% (529/529), done.
Checking connectivity... done.
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$

途中で今回 git リポジトリにアップするサイト全体に対して git init を行っています。

準備3: .gitignore の作成

.gitignore を作成しておきます。

mor@DESKTOP-RLA4CF1:~/tmp/mor$ touch .gitignore
mor@DESKTOP-RLA4CF1:~/tmp/mor$ echo /public >> .gitignore

ローカルリポジトリの状態を確認して、

mor@DESKTOP-RLA4CF1:~/tmp/mor$ git status
On branch master

最初のコミット

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitmodules
        new file:   themes/hugo-universal-theme

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .gitignore
        archetypes/
        config.toml
        content/
        data/
        i18n/
        layouts/
        static/

mor@DESKTOP-RLA4CF1:~/tmp/mor$ git add .
mor@DESKTOP-RLA4CF1:~/tmp/mor$ git commit -m 'initial commit'

Bitbucket 上にリポジトリを作成して、その後コミットします。

mor@DESKTOP-RLA4CF1:~/tmp/mor$ git remote add origin https://xxxxx@bitbucket.org/xxxxx/yyyyy.git
mor@DESKTOP-RLA4CF1:~/tmp/mor$ git push origin master

Netlify でホスティング

Netlify のアカウントを作成する際は、GitHub や BitbucketのアカウントでログインすればOKです。

Netlify でサイトをパブリッシュします。リンク先のように操作すればOK

qiita.com

あっという間にビルドされました。表示されたURLを見ると、無事、公開されていました。

でも、よく見ると、一部の表示がローカルと異なっています。 原因はよくわかりませんが、netlify で使う hugo のバージョンが怪しそうです。

ということで、下記に従って、 Hugoのバージョンをローカルに合わせて 0.32.2 にして試します。

monaural.net

OK。問題なくなりましたね。 ということで、めでたしめでたし、無事にホスティングできました。

(参考)

まだ、試していないのですが、Netlify CMS を使って、CMSライクに作業するというのができるそうです。

qiita.com

これを試すのもありかなー。

最後は、自分のドメインでこのサイトにアクセスできるようにします。

Webサイトを静的サイトにしました : hugo による静的サイトの作成 (1/3)

個人事業主としての森ソフトのサイトは、さくらインターネットのレンタルサーバー上で Joomla! を使って動かしていました。 当初は、ブログ代わりの技術メモとしていろんなものを載せるために使っていました。ちなみに、Wordpressを選ばなかったのは、当時のさくらのレンサバのDBのバージョンがWordpressのサポート対象外だったためなのと、知り合いがJoomla!使っていたのが理由でした。

ちなみに、あれこれやってた時の記事がまだ残ってました (^^; 思い出にリンク張っときます。

でも、一昨年から技術メモの部分はブログとして、はてなブログに移行したので、そんなに大そうな頻度で更新することもなくなりました。 となってくると気になってくるのがサーバー代です(サイト分だけでなくバックアップサーバーも立ち上げているので2台の料金がかかっています)。

昨今、あれこれ見てると静的サイトホスティングでサイトを公開するというのが流行っているようです。先祖返りな気もしますが、gitなどと連携できればそんなに悪くないかな?という印象です。 ということで、今回思い切って、自分のサイトを静的サイトホスティングに切り替えてみましたので、備忘録としてメモっときます。

ツールの選定

静的サイト作成に使えるツールですが、調べ始めたら、山のようにあって困りました。 例えば、下記サイトなどでは、どのようなツールがあるのか、いろいろとガイドしてくれていますが、数が多すぎてる正直よくわかりません。

上記以外にもあれこれと比較記事を探して読んでみたのですが、なかなかこれだ!という風には見つかりませんでした。

まあ、その中でも、 hugo が静的サイトのビルドが早いということで、どうも良さそうです。

これ以上は、実際に試したほうが早そうだということで、今回は hugo を使うことにしました。

全体の構成

ツールの選定と合わせてあれこれ調べると、静的サイトのホスティングをやってくれるサービスもあることが分かりました。 そんなのを受けて、今回は次のような構成で作業を行いました。

  • ホスティング : Netlify (当然、無料プランです)
  • gitリポジトリ : Bitbucket
  • 静的サイトジェネレータ : Hugo, 0.32.2
  • 開発環境 : Windows 10 build 1709 上 Bash on Ubuntu On Windows (16.04.3 LTS相当)
  • 移行元 : Joomla! 3.6.5

hugo のインストール

まずは hugo のインストールから始めます。 Bash on Ubuntu on Windows 上から

sudo apt-get install hugo

とするだけでインストールできました。が、しかし、これだとバージョンが 0.15 相当になり、ちょっと古めです(この記事を書いている時点で 0.32.2)。なので、

wget https://github.com/gohugoio/hugo/releases/download/v0.32.2/hugo_0.32.2_Linux-64bit.deb
sudo dpkg -i hugo_0.32.2_Linux-64bit.deb

として作業時の最新版をインストールしました。

なお、バイナリ(パッケージ版はバイナリです)を使う場合は、GOの開発環境は不要だそうです。

(参考) 下記のインストール手順を参考にしました

hawksnowlog: Ubuntu 16.04 で hugo を試してみた

hugo の試用

インストールが成功したら、さっそく hugo のサイトにあるQuick Start を試してみます。

Quick Start | Hugo

一通り作業をしてみると、問題なくローカルサイトでサイトを見ることができました。

移行するコンテンツの選定

さて、既存サイトのコンテンツを移動する前に改めてコンテンツを確認してみました。 技術メモ部分はなくなっているのでよいとして、それ以外でも内容が結構古くなっているものが多々あります。 こういう古いものも含めて移行するかは、ちょっと悩ましいところです。いろいろ考えたのですが、次の理由からとりあえず現時点では移行しないことにしました。

  • 今更、内容的に更新するつもりがない
  • 自分自身でも参考にすることがすくない(というかここ数年、見てもいなかった)
  • 既存サイトは非公開にするけど、削除はしない(プライベートでは閲覧可能にしておく)

もし、必要がありそう or 需要がありそうなら、追って追加することにします。

そうなると、移行するべきコンテンツは自分自身の紹介など、ごく最小限のものとなり、わざわざ移行ツールなどを使わなくても簡単にできそうです。

(参考)

今回は使いませんでしたが、もし、Joomla! のコンテンツが山ほどあり、手作業で移行するのが大変そうな場合は、Joomla! -> hugo の移行をサポートしてくれるツールがあります。

Migrate to Hugo | Hugo

一度試してみるといいかもしれません。

hugo でのサイト構築

ということで、サイトに載せるコンテンツとしては、一から作り直すことにします。

ただ、Webサイトですので、デザインまで自分で作るのは厳しいものがあります。 ということで、デザインに関しては、既存のhugoのテーマを選んで、それをベースに載せるべき内容を作り、必要があれば見た目もカスタマイズする方法を取ります。

hugoのテーマは、

Complete List | Hugo Themes

ここから選べます。タグがあるので、それを手掛かりにしてみていきます。あと、多くのテーマには、デモサイトへのリンクもあるので、それで実際に動作を確認しながら選びます。 今回は、 universal というテーマを選びました。

themes.gohugo.io

まずはサイトを作ります(サイト名は mor としてます)。

mor@DESKTOP-RLA4CF1:~/tmp$ hugo new site mor

テーマを適用

universal テーマのサイトの説明に従って、

mor@DESKTOP-RLA4CF1:~/tmp/mor$ cd themes/
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$ git clone https://github.com/devcows/hugo-universal-theme
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes$ cd hugo-universal-theme/exampleSite/
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes/hugo-universal-theme/exampleSite$
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes/hugo-universal-theme/exampleSite$ cp config.toml ../../../config.toml

とします。 このまま、hugo server で確認するとエラーがでたので、何点か修正します。

  • config.toml の themesDir が設定されていますが、これがうまく動いていませんので、コメントアウトしておきます
  • carousel(カルーセル、サイトのトップとかで画像が複数スライドしていくやつ), Features, Testimonials(いわゆるお客様の声かな?), Clients は data ディレクトリ以下に所定のyamlファイルが一つもないとエラーになります。なので、それぞれ config.toml の params.carousel, params.features, params.testimonials, params.client の enable を false にしておきます。

修正が終わったら、ローカルサーバーを起動します。

mor@DESKTOP-RLA4CF1:~/tmp/mor$ hugo server -D

これで一応表示されました。

カスタマイズ

ここからカスタマイズです。 だいたい次の順にカスタマイズしました。

  • このテーマの内容に沿って、 config.toml を変更します
  • 先ほどの carousel, features, testimonials, client については必要に応じてyamlファイルを作成します(必要のないところは enabled = false のままです)
  • サイトのディレクトリ直下に i18n ディレクトリを作り、 cp themes/hugo-universal-theme/i18n/en.yaml i18n/ja.yaml として、必要に応じて日本語訳を入れておきます

この辺の変更方法は universal のテーマのページに載っています。

テンプレートの修正

次に、表示している各部分の細かいところでデザインを変更したい箇所を修正します。

サイトの作成にあたって、最初にテーマを使うところから始めましたが、hugo に関する記事などを読むと、サイトのディレクトリ(ここでは ~/tmp/mor)以下にある layouts 以下のファイルがテンプレートとして表示を制御しているようです。 で、テーマはそれをまとめて配布可能にしたもので、 themes ディレクトリに配置されるものになります。

両者は共通の構造をとっていて、サイトのディレクトリ以下にある layouts が優先されます(テーマから見ると、オーバーライドすることができます)。

この構成がわかれば、あとは、自分が修正したい箇所がどこにあるかを調べて、その html ファイルを サイトのディレクトリ/layouts にコピーして、変更を行います。

例えば、サイトで表示されるトップページのレイアウトを変更するのであれば、

mor@DESKTOP-RLA4CF1:~/tmp/mor$ cp themes/hugo-universal-theme/layouts/index.html layouts/index.html

として、 サイトディレクトリ/layouts/index.html に記載されている各パーツの表示順などを見直します。

一覧ページのタイトル

univesal テーマの場合『ブログ』を選択すると、ブログの一覧が表示されるようになっています。 この時、デフォルトのままだと、ブログ記事が入れてある contents/blog のディレクトリ名をセクション名として扱い、このセクション名が表示されます。 ついでに書いておくと、英文の場合、セクション名が自動的に複数形で表示されるとのことです。

この表示を変更したかったので、 contents/blog の下に _index.md を追加して、そこに title を設定することで、自分でタイトルを決めることができるようになります。

詳しくは hugo の該当ドキュメント を見てください。

記事を入れるフォルダ名の変更

ちなみに、記事に入れるフォルダ名を contents/blog から contents/news に変更しています。 残念ながら、これは config.toml では変更できませんでした。

参考までにこれを行った方法を書いておきます。

mor@DESKTOP-RLA4CF1:~/tmp/mor/themes/hugo-universal-theme/layouts$ grep -r -i -n blog ./*
./_default/list.html:23:                    <div class="col-md-9" id="blog-listing-medium">
./_default/list.html:25:                        {{ $paginator := .Paginate (where .Data.Pages "Type" "blog") }}
./_default/single.html:25:                    <div class="col-md-9" id="blog-post">
./_default/single.html:40:                    <!-- /#blog-post -->
./partials/footer.html:21:            <div class="blog-entries">
./partials/footer.html:22:                {{ range first 3 (where .Site.Pages "Type" "blog") }}
./partials/recent_posts.html:15:            <!-- *** BLOG HOMEPAGE *** -->
./partials/recent_posts.html:19:                {{ $posts := .Paginate (where .Data.Pages "Type" "blog") }}
./partials/recent_posts.html:22:                    <div class="box-image-text blog">
./partials/recent_posts.html:61:            <!-- *** BLOG HOMEPAGE END *** -->
mor@DESKTOP-RLA4CF1:~/tmp/mor/themes/hugo-universal-theme/layouts$

としてテーマを調べると、Paginate 関数の引数に blog というセクション名がハードコードされています。 なので、これを news に変更しました。 具体的には _default/list.html, partials/footer.html, partials/recent_post.html になります。

ご参考までに。

robots.txt

あと、表示だけでなく robots.txt も正しく生成されるようにしておきます(ここなどを参照)。config.toml に

enableRobotsTXT = true

を追加します。 デフォルトの robots.txt から変更したい場合は、 layouts にひな型になる robots.txt を置いておきます。こんな感じです。

mor@DESKTOP-RLA4CF1:~/tmp/mor/layouts$ cat robots.txt

User-agent: *

Sitemap: {{ .Site.BaseURL }}sitemap.xml

sitemap.xml は何もしなくても生成してくれるようです。

細かいところはよくわかっていませんが、こんな感じで進めると、とりあえずカスタマイズもある程度できました。

(参考) hugo テーマのカスタマイズについてはいろんな方が記事を書かれているので、そちらを参考にしてください

https://www-he.scphys.kyoto-u.ac.jp/member/shotakaha/dokuwiki/doku.php?id=toolbox:hugo:start

動作確認

カスタマイズが終わったら、動作確認をしておきます。 とりあえずローカルサーバーで正しく表示されれば、OKです。

次はnetlify を使ってホスティングします。

OpenStreetMap のタイルサーバーの更新設定:エラーへの対応

前の記事で、タイルサーバーの地図データの自動更新も設定したので、『調子はどうかな?』なんて軽い気持ちでログを見ると、あれ?途中から error の文字が・・・

よくよくみると、 osm2pgsql で、差分データを反映させるところでエラーになっています。 『年末の忙しい時に、困ったなー』、と思いつつ、エラーを調べて、対応したので、顛末をメモっときます。

状況

もう一度、エラーの出方をよく見ます。ログは、 /var/log/tiles 以下にあります。実行時に概要のログは、 run.log ファイルにかかれています。 run.log を見ると、更新設定後しばらくの間はエラーも出ず、快調に動いています。 でも、ある時(あるシーケンス番号の更新)から、エラーとなっています。

ログはこんな感じでした。

[2017-12-29 22:06:01] 6654 start import from seq-nr 46396, replag is 1 day(s) and 2 hour(s)
[2017-12-29 22:06:01] 6654 downloading diff
[2017-12-29 22:07:05] 6654 filtering diff
[2017-12-29 22:07:52] 6654 importing diff
[2017-12-29 22:08:10] 6654 [error] osm2pgsql error
[2017-12-29 22:08:10] 6654 resetting state

一度、エラーになると、そのシーケンス番号が反映されていない、と判断されるためか、その後ずっと同じシーケンス番号を更新しようとしてはエラーをはく、というのが続いていました。 これはこれでエラー通知を入れとかないとひどいことになりそうですね。

エラー原因の確認

更新に使っている openstreetmap-tiles-update-expire の処理の概要はこんな感じかな?と理解しています。

  • state.txt(シーケンス番号)に基づいて、差分データを取得する (osmosis)
  • 更新したい地域のデータのみにフィルタリング (trim_osc.py)
  • データベースに反映 (osm2pgsql)
  • 地図データの無効化 (render_expired)

まさにデータベースに反映する処理のところで、エラーになっているようです。

/var/log/tiles にはそれぞれの個別処理毎のログもあるので、 osm2pgsql.log を見ると詳細なエラーが載っています。

Using XML parser.
Processing: Node(7k 0.4k/s) Way(8k 0.12k/s) Relation(0 0.00/s)node cache: stored: 7640(100.00%), storage efficiency: 33.19% (dense blocks: 1, sparse nodes: 7412), hit rate: 3.27%
Osm2pgsql failed due to ERROR: result COPY_END for planet_osm_line failed: ERROR:  invalid input syntax for integer: "'"
CONTEXT:  COPY planet_osm_line, line 1, column layer: "'"

一番最後の行の planet_osm_line がDBのテーブル名で layer がタグ名 ということに気づくのに随分と時間がかかってしまいました。 それさえわかれば、 planet_osm_line というテーブルの layer というカラムが integer なのにデータが '(シングルクォート)になっている、ということが理解できます。

もし、類似のエラーでお困りの時は、

osm@map:~/src/mod_tile$ psql -d gis
psql (9.5.10)
Type "help" for help.

gis=> \dt
              List of relations
 Schema |        Name        | Type  | Owner 
--------+--------------------+-------+-------
 public | planet_osm_line    | table | osm
 public | planet_osm_nodes   | table | osm
 public | planet_osm_point   | table | osm
 public | planet_osm_polygon | table | osm
 public | planet_osm_rels    | table | osm
 public | planet_osm_roads   | table | osm
 public | planet_osm_ways    | table | osm
 public | spatial_ref_sys    | table | osm
(8 rows)

gis=> 

としてテーブル一覧を確認したり、

gis=> \d planet_osm_line

とかして、関連するテーブル(ここでは planet_osm_line)のカラム名と型などを確認するのも有効かもしれません。

エラー内容の確認

とはいえ、layer タグのどういうところで具体的にエラーになっているのか?というのが気になります。

そこで、上記の更新処理を手作業で行ってみて、データを直接確認してみます。 適当に作業ディレクトリを作成して、

osm@map:~$ mkdir tmp
osm@map:~$ cd tmp
osm@map:~/tmp$ cp -p -R /var/lib/mod_tile/.osmosis osmosis_test 
osm@map:~/tmp$ osmosis  --read-replication-interval workingDirectory=./osmosis_test --simplify-change --write-xml-change sample.osc.gz 
osm@map:~/tmp$ ../src/regional/trim_osc.py -d gis -p osmosis_test/region.poly -z sample.osc.gz filtered.osc.gz 

/var/lib/mod_tile/.osmosis の作業ディレクトリを手元にコピーして使います。state.txt はエラーが発生したタイミングなので、 49396 のシーケンス番号が書かれているはずです。 ここまでは問題なく動作します。では、実際に差分ファイルの中身を確認します。

osm@map:~/tmp$ gunzip filtered.osc.gz 
osm@map:~/tmp$ grep -n layer filtered.osc 

とすると、運よく最下部に

207860:      <tag k="layer" v="'"/>
207868:      <tag k="layer" v="'"/>

と出ていました。なるほど確かにシングルクォートですね。で、エディタで開いて 207860 行付近を確認します。

    <way id="549551378" version="1" timestamp="2017-12-28T12:51:49Z" uid="192905" user="ribbon" changeset="54982406">
      <nd ref="5308380768"/>
      <nd ref="5308380769"/>
      <tag k="bridge" v="yes"/>
      <tag k="highway" v="steps"/>
      <tag k="incline" v="up"/>
      <tag k="layer" v="'"/>
    </way>

となってます。編集時のチェンジセットの番号もわかりますね。地図上で確認したければ、

OSMCha

などのサービスを使って、フィルタリングして表示してみるとよいと思います。

ちなみに、このOSM の layer タグってどんなものなのか?というのもよくわかっていないので、併せて確認すると、

JA:Key:layer - OpenStreetMap Wiki

にあるように、地物の上下関係を示すのに使うタグのようです。

これが、整数を期待しているのに、文字(シングルクォート)だったのが直接の原因でした。

対応策

エラーの原因ですが、osm2pgsql のバグとかではなく、大元のOSMのデータの不整合が原因でした。 この不整合箇所を修正すれば、インポート自身はきっと成功するでしょう。でも、毎回エラーをはくたびにいちいち調べてそんなことやってられません。

どうしたものかと思案していると、ちょっと待てよと。 冷静に考えると、一番最初にOSMのデータをインポートしていますが、それに一切不整合が含まれていない、ということはあり得るのでしょうか?たまたま自分がインポートしたタイミングだけ、不整合が無かったのでしょうか? いやいや、いま自分の住んでる田舎のようにほとんでデータの更新もない地域ならいざ知らず、日本全土を対象にデータをインポートしていれば、一つや二つ不整合はあるでしょう、きっと。自分が layer タグを知らないからと言って、layer タグがマイナーで滅多に出てこないタグと断定できるはずもありません。

であれば、初回のインポート時には、データの不整合があった場合に、何らかの処理を行っているはずだ、となります。 そこで、初回インポートの処理をこちらから再確認してみます。

osm2pgsql -d gis --create --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 2500 --number-processes 1 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/azerbaijan-latest.osm.pbf

--tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua なんかそれっぽいのがありますねー。 ここで指定した lua スクリプトで tag の処理をしてくれるようです。

lua スクリプトはよくわかりませんが、中身を見てみますとlayer タグに対して何らかの処理を施してくれているようです。

ここまでわかれば、このオプションを差分の追加時に渡せば問題なく動きそうかな?と予想が立ちます。 改めて、openstreetmap-tiles-update-expire の中身を確認すると

#------------------------------------------------------------------------------
# The OSM2PGSQL_OPTIONS here only need setting if a tag transform script is
# in use.  See https://github.com/SomeoneElseOSM/SomeoneElse-style and
# http://wiki.openstreetmap.org/wiki/User:SomeoneElse/Ubuntu_1404_tileserver_load
#------------------------------------------------------------------------------
OSMOSIS_BIN=osmosis
OSM2PGSQL_BIN=osm2pgsql
OSM2PGSQL_OPTIONS="-d gis"
#OSM2PGSQL_OPTIONS="--flat-nodes /path/to/flatnodes --hstore"

と、そのものずばり、 tag transform script に関するコメントがあります。 ということで、この部分を

OSM2PGSQL_OPTIONS="-d gis -G --tag-transform-script /home/$RENDERACCOUNT/src/openstreetmap-carto/openstreetmap-carto.lua --hstore"

と書き換えてみます。ちなみに、 -G --hstore のオプションもインポート時のスクリプトにはあったので、つけるようにしました。

書き換え後、しばらく待ってみると今度は無事にエラーが出ずに成功していました! やった!

なかなか一筋縄ではいかないものですね。