やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

zola 0.13.0 をビルドする(静的サイトジェネレータ)

 日本語で全文検索できそうだと思って。しかし日本語を含めるとビルドできなかった。

日本語できない版

 日本語が不要なら以下で80分かければビルドできる。遅すぎる。

TARGET_VERSION=0.13.0
[ ! -f "zola-${TARGET_VERSION}.zip" ] && wget https://github.com/getzola/zola/archive/v${TARGET_VERSION}.zip
[ ! -d "zola-${TARGET_VERSION}" ] && unzip "*${TARGET_VERSION}.zip"
cd "zola-${TARGET_VERSION}"
cargo build --release

日本語版

 ビルドできなかた。ビルドする前に設定ファイルをいじる。

./zola-0.13.0/components/search/Cargo.toml

before

elasticlunr-rs = {version = "2", default-features = false, features = ["da", "de", "du", "es", "fi", "fr", "it", "pt", "ro", "ru", "sv", "tr"] }

after

elasticlunr-rs = {version = "2", default-features = false, features = ["ja"] }

 ビルドする。

cargo build --release

 しばらくするとエラー。メモリ不足。

LLVM ERROR: out of memory
error: could not compile `lindera-ipadic`.

Caused by:
  process didn't exit successfully: `rustc --crate-name lindera_ipadic --edition=2018 /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/lindera-ipadic-0.3.3/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -Clinker-plugin-lto -C codegen-units=1 -C metadata=59a4e142ba601c92 -C extra-filename=-59a4e142ba601c92 --out-dir /home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps -L dependency=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps --extern bincode=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps/libbincode-47ac5fd5960400a9.rmeta --extern byteorder=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps/libbyteorder-3ae3e7c3799c21a3.rmeta --extern lindera_core=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps/liblindera_core-6c31dee018e2788e.rmeta --cap-lints allow` (signal: 6, SIGABRT: process abort signal)
warning: build failed, waiting for other jobs to finish...
error: build failed

 どうもrustはビルドするときメモリリークしているっぽい。至るところでメモリ不足エラーが出ているようだ。

 今回は必ずlindera-ipadicでメモリ不足となる。

 調べてみると以下でドンピシャ。どうやら日本語固有のバグらしい。クソすぎ。

 しかも執筆時点で解決していないっぽい。

rust アップデート

rustup update

before

$ cargo --version
cargo 1.46.0 (149022b1d 2020-07-17)
$ rustc --version
rustc 1.46.0 (04488afe3 2020-08-24)

after

$ cargo --version
cargo 1.49.0 (d00d64df9 2020-12-05)
$ rustc --version
rustc 1.49.0 (e1884a8e3 2020-12-29)

 再びビルドするも同じエラー。

LLVM ERROR: out of memory
error: could not compile `lindera-ipadic`.
rustc --crate-name lindera_ipadic --edition=2018 /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/lindera-ipadic-0.3.3/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C linker-plugin-lto -C codegen-units=1 -C metadata=6b94e085e2fda2c8 -C extra-filename=-6b94e085e2fda2c8 --out-dir /home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps -L dependency=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps --extern bincode=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps/libbincode-78e1d597be74c59a.rmeta --extern byteorder=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps/libbyteorder-9f71c1273ddcefa1.rmeta --extern lindera_core=/home/pi/root/sys/env/tool/src/ssg/zola-0.13.0.ja/target/release/deps/liblindera_core-faeb4c1055ca210e.rmeta --cap-lints allow

 やはりメモリリークしているっぽい。

lindera

 問題のlinderaを個別にビルドしてみるも失敗。同じくメモリ不足エラー。

VERSION="0.7.1"
wget "https://github.com/lindera-morphology/lindera/archive/v${VERSION}.zip"
unzip "v${VERSION}.zip"
cd "lindera-${VERSION}"
cargo build --release

 数十分ほどかけた結果、失敗。クソが。

...
   Compiling lindera v0.7.1 (/tmp/work/lindera-0.7.1/lindera)
LLVM ERROR: out of memory
error: could not compile `lindera-ipadic`

感想

 メモリ安全な言語とは一体……。ビルドの時点でリークしまくってんじゃねーか。それとも本当に4GB以上必要なの? ほかに何もアプリ起動してなかったから3GBは確実に空いていたはずなんだが。ビルド要件かいてくれよ。

追記

git clone https://github.com/getzola/zola
cd zola/components/search/
cargo build --features search/indexing-ja

 上記はビルド成功したが、続けて本体のビルドをするとエラーになった。

cd ../../
cargo build

 どうしても日本語を使わせないつもりか。助けて。