0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AS/400 × Gemini 再挑戦:Rustは動いた、SDKは無理だった

0
Last updated at Posted at 2026-05-15

前回までのあらすじ

前回、IBM i (AS/400) で Google Gen AI SDK を pip install しようとして pydantic-core の Rust ビルドができず、結局 REST API を直接呼び出して IBM i から Gemini を使うようにしていました。

その後 IBM Open SDK for Rust on AIX 1.92.0 を見つけたので、IBM i 7.6 PASE で再度 Google Gen AI SDK を試してみたいと思います。

依存関係おさらい

やったこと

1. AIX Toolbox の rpm で Rust SDK をインストール

BASE=https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.3/rust
mkdir -p /tmp/rustrpm
cd /tmp/rustrpm
curl -O $BASE/rust1.92-1.92.0-1.aix7.3.ppc.rpm
curl -O $BASE/rust1.92-std-static-1.92.0-1.aix7.3.ppc.rpm
curl -O $BASE/rust1.92-community-license-1.92.0-1.aix7.3.ppc.rpm
curl -O $BASE/cargo1.92-1.92.0-1.aix7.3.ppc.rpm
curl -O $BASE/rust-1.92.0-1.aix7.3.ppc.rpm
curl -O $BASE/cargo-1.92.0-1.aix7.3.ppc.rpm
rpm -ivh --nodeps --ignoreos *.rpm

公式手順は Fix Central + rustndi ですが、Fix Pack 単体では完結せず GA tarball が必要です。しかし Fix Pack 1 リリース後は Fix Central から GA リンクが消えていて入手不可。そこで AIX Toolbox に rpm 直置きがあったのでこちらから取得しました。

2. IBM Open XL C/C++ Runtime から libunwind / libc++ / libc++abi を抜いて配置

Fix Central から IBM_OPEN_XL_CPP_RUNTIME_17.1.4.0_AIX.tar.Z を入手。

cd /tmp/xl
zcat IBM_OPEN_XL_CPP_RUNTIME_17.1.4.0_AIX.tar.Z | tar -xvf -
restore -xqf libunwind.rte
restore -xqf libc++.rte
restore -xqf libc++abi.rte

mkdir -p /opt/freeware/lib/openxl
cp usr/lpp/xlC/lib/libunwind.a /opt/freeware/lib/openxl/
cp usr/lpp/xlC/lib/libc++.a /opt/freeware/lib/openxl/
cp usr/lpp/xlC/lib/libc++abi.a /opt/freeware/lib/openxl/

rustc / cargo は libunwind.a(libunwind.so.1)libc++.a(shr2_64.o) を要求するが、AIX 7.3 では IBM Open XL C/C++ Runtime 経由で入っているこのパッケージが、IBM i 7.6 PASE のデフォルトには入っていないので、入手したファイルから展開しました。

PASE標準の libc++.a を上書きしたくないので別ディレクトリに展開しています

3. PASE の OpenSSL 3 を cargo が期待する形式に再パッケージ

mkdir -p /tmp/ssl-extract && cd /tmp/ssl-extract
ar -X64 -x /QOpenSys/pkgs/lib/libssl.so.3
mv shr_64.o libssl.so.3
ar -X64 -rv libssl.a libssl.so.3
cp libssl.a /opt/freeware/lib/openxl/

mkdir -p /tmp/crypto-extract && cd /tmp/crypto-extract
ar -X64 -x /QOpenSys/pkgs/lib/libcrypto.so.3
mv shr_64.o libcrypto.so.3
ar -X64 -rv libcrypto.a libcrypto.so.3
cp libcrypto.a /opt/freeware/lib/openxl/

cargo が期待するのは libssl.a アーカイブの中の libssl.so.3(OpenSSL 3.x)メンバーですが、PASE 標準の libssl.a には 1.0 系までしか入っていなかったです。
そのため yum で導入された /QOpenSys/pkgs/lib/libssl.so.3 が 3.x なので、これを libssl.a として再アーカイブしました。crypto でも同じ事をしています。

4. wrapper script の LIBPATH を書き換え

for f in rustc rustdoc cargo; do
  cp /opt/freeware/lib/RustSDK/1.92/bin/$f /opt/freeware/lib/RustSDK/1.92/bin/$f.bak
  sed 's|export LIBPATH=/usr/lpp/xlC/lib|export LIBPATH=/opt/freeware/lib/openxl:/usr/lpp/xlC/lib|' \
    /opt/freeware/lib/RustSDK/1.92/bin/$f.bak > /opt/freeware/lib/RustSDK/1.92/bin/$f
done

先ほど作成した /opt/freeware/lib/openxl/ に置いた新しい libc++ / libssl / libcrypto を PASE標準より優先して読ませたいので、LIBPATH の先頭に追加します。

5. Hello, world!

$ rustc --version
rustc 1.92.0 (e74881c9b 2026-03-10) (IBM Open SDK for Rust on AIX 1.92.0.1)
$ cargo new hello && cd hello && cargo build && ./target/debug/hello
Hello, world!

ここまでやってやっと Rust 単体が動くようになりました。

6. pydantic-core のビルドを試す → これ以上はむり

pip install pydantic

ここで pydantic-core の Rust ビルドが始まり、build.rs の段階に行きましたが、以下で失敗します

error: failed to run custom build command for `anyhow v1.0.102`
Failed to clean up /.../out/probe: Not a directory (os error 20)

anyhow の build.rs

  1. probe ディレクトリを作る
  2. rustc を走らせる
  3. fs::remove_dir_all で片付ける

という流れですが、この3の remove_dir_all が PASE では AIX と挙動が違って ENOTDIR を返してきて失敗します。

anyhow1個なら build.rs を上書きパッチで突破できますが

ANYHOW=~/.cargo/registry/src/github.com-*/anyhow-1.0.102
cat > $ANYHOW/build.rs <<'EOF'
fn main() { println!("cargo:rerun-if-changed=src/nightly.rs"); }
EOF

ですが、pydantic-core の依存 crate は数十個あって、それぞれが build.rs を持っています。全部にパッチを当て続けるのは現実的じゃないので、ここで諦めました😢

結論

Rust 単体は動くようになりました。でも Python SDK 系の pip install は無理でした。なのでIBM iでGeminiを使う場合は REST API を直接コールするか、RustがIBM i標準になるまで待つのが正解だとおもいました。残念

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?