epubcheckというEpub向けのW3C製の構文チェッカーがあります。 実行するとありがたい指摘をしてくれるのですが、次のエラーだけは原因が分かりませんでした。
$ java -jar epubcheck.jar ~/tmp/main.epub EPUB version 3.2 のルールを使って検証します. ERROR(PKG-006): /home/Artisan/tmp/main.epub(-1,-1): mimetypeファイルエントリが存在しないか、アーカイブの先頭以外の場所に存在しています. チェックは終了しましたがエラーが検出されました メッセージ: 0 件の致命的エラー / 1 件のエラー / 0 件の警告 / 0 件の情報 EPUBCheck 完了
調べたところ、次のようなやりとりを発見。
どうやら、mimetype を圧縮せずに zip し、その後その他のリソースを圧縮して追加せよとのことらしい。 詳細はよくわからんが、次のようにすればOKらしい。本当はしっかりオプションを理解しないとだめなんだろうけど…。
$ zip -X0 ../main.epub mimetype $ zip -9 -r ../main.epub META-INF OEBPS