Closed20

prismaでopensslのバージョンエラーが出た

ピン留めされたアイテム
omihirofumiomihirofumi

いろんなエラーが入り混じってたので、まとめる

出てたエラー(以下はそれぞれ別の問題)

omihirofumiomihirofumi

prisma: 6.0.0使ってる。

Dockerで動かしたら以下のエラーが出るようになった。

prisma:warn Prisma failed to detect the libssl/openssl version to use, and may not work as expected. Defaulting to "openssl-1.1.x".
...
The Prisma engines do not seem to be compatible with your system. Please refer to the documentation about Prisma's system requirements: https://pris.ly/d/system-requirements
...

https://www.prisma.io/docs/orm/reference/system-requirements
system requirements見てみると、

Debian or others 1.0.x glibc 2.19+
Debian or others 1.1.x, 3.x glibc 2.24+

https://answers.launchpad.net/debian/bookworm/+source/glibc
どっちだ。と思ったけど、使ってるベースイメージはglibc 2.24+使ってそうだから、後者かな?

$ docker run -it node:20-bookworm-slim bash
# ldd --version
ldd (Debian GLIBC 2.36-9+deb12u9) 2.36

だとしても、1.1系で良さそうだけど。

omihirofumiomihirofumi

とりあえず、3系にアップデートしてみる。

...
# Use node image for base image for all stages.
FROM node:${NODE_VERSION}-bookworm-slim AS base

# Set working directory for all build stages.
WORKDIR /usr/src/app

# Update openssl 3.x
+ RUN apt-get update && apt-get upgrade openssl -y \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/*
...

エラー解消された。

omihirofumiomihirofumi

こっからは調査

prisma 6にアップデートしたから、出るようになったのかな?
調べる。

omihirofumiomihirofumi

そういえば、schema.prismaにbinaryTargets指定してたの忘れてた。

omihirofumiomihirofumi

こっからは別の問題だった。

うまくいってた頃。もともとはnode:20-apineを使ってた。(いまはnode:20-bookworm-slim)

Prisma: 5.21.1
----
binaryTargets = ["native", "rhel-openssl-1.0.x"]  // なんでこうしたんだっけか?
---
base image: node:20-alpine

エラー出た。

omihirofumiomihirofumi

まずこうしてみる。

Prisma: 6.0.0
----
binaryTargets = ["native", "linux-musl-arm64-openssl-1.1.x"] 
---
base image: node:20-alpine3.16 // opensslは1.1x

成功した。

omihirofumiomihirofumi

次はこう。

Prisma: 6.0.0
----
binaryTargets = ["native", "linux-musl-arm64-openssl-1.1.x"] 
---
- base image: node:20-alpine3.16 // opensslは1.1x
+ base image: node:20-alpine3.17 // opensslは3.x

できた。

omihirofumiomihirofumi

alpine3.16, 3.17でbinaryTargets:"rhel-openssl-1.0.x"

Prisma: 6.0.0
----
binaryTargets = ["native", "rhel-openssl-1.0.x"]  // なんでこうしたんだっけか?
---
base image: node:20-alpine3.16 // opensslは1.1x
base image: node:20-alpine3.17 // opensslは3.x

できた。

binartTargetsは関係ないのか?
あ、今はローカルで検証中。

omihirofumiomihirofumi

alpine指定せずに、binaryTargetsをいじる。

Prisma: 6.0.0
----
binaryTargets = ["native", "linux-musl-arm64-openssl-3.x"] 
---
base image: node:20-alpine

ビルドができなかった。
やっぱ、binaryTargets関係あるよな。

prisma:warn Prisma failed to detect the libssl/openssl version to use, and may not work as expected. Defaulting to "openssl-1.1.x".
omihirofumiomihirofumi
Prisma: 6.0.0
----
- binaryTargets = ["native", "linux-musl-arm64-openssl-3.x"]
+ binaryTargets = ["native", "linux-musl-arm64-openssl-1.1.x"] 
---
base image: node:20-alpine

buildはできたけど、エラー

omihirofumiomihirofumi

alpineのバージョン指定しない時だけエラー。
でも、3.18を見てるはずで、alpine3.18にしたときは、エラーでなかった。

いや、3.21見てるか。
3.21指定したら同じエラー出たからそうだ。

omihirofumiomihirofumi

binaryTargetsを3系にすると、ビルド失敗する。

10.55 Error: Unknown binary target linux-musl-arm64-openssl-3.x in generator client.
10.55 Possible binaryTargets: darwin, darwin-arm64, debian-openssl-1.0.x, debian-openssl-1.1.x, debian-openssl-3.0.x, rhel-openssl-1.0.x, rhel-openssl-1.1.x, rhel-openssl-3.0.x, linux-arm64-openssl-1.1.x, linu
x-arm64-openssl-1.0.x, linux-arm64-openssl-3.0.x, linux-arm-openssl-1.1.x, linux-arm-openssl-1.0.x, linux-arm-openssl-3.0.x, linux-musl, linux-musl-openssl-3.0.x, linux-musl-arm64-openssl-1.1.x, linux-musl-arm
64-openssl-3.0.x, linux-nixos, linux-static-x64, linux-static-arm64, windows, freebsd11, freebsd12, freebsd13, freebsd14, freebsd15, openbsd, netbsd, arm, native

が出るぞ。

Prisma: 6.0.0
----
binaryTargets = ["native", "linux-musl-arm64-openssl-3.x"] 
---
base image: node:20-alpine
omihirofumiomihirofumi

おっと、ビルド通らないのは凡ミスだ。

Prisma: 6.0.0
----
- binaryTargets = ["native", "linux-musl-arm64-openssl-3.x"]
+ binaryTargets = ["native", "linux-musl-arm64-openssl-3.0.x"]
---
base image: node:20-alpine

3.0.xにして、RUN ln -s /usr/lib/libssl.so.3 /lib/libssl.so.3したらうまくいきました。

omihirofumiomihirofumi

まとめると。
alpineのバージョンを指定してなかったので、3.21にバージョン上がった時にopensslの場所が変わってエラーが出てた。

このスクラップは2024/12/13にクローズされました