日本語で全文検索できそうだと思って。しかし日本語を含めるとビルドできなかった。
日本語できない版
日本語が不要なら以下で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はビルドするときメモリリークしているっぽい。至るところでメモリ不足エラーが出ているようだ。
- https://github.com/rust-lang/rust/issues/60294
- https://github.com/rust-lang/rust-clippy/issues/920
- https://github.com/rust-lang/rust/issues/70035
今回は必ず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
どうしても日本語を使わせないつもりか。助けて。