背景
数年前に構築したrustとvueの開発環境を、また触ってみようと思って動かしてみたら動かなくて困ったときのお話。
主たる原因は、Opensslが2.0->3.0になったことによって、もろもろの依存関係が解決できなくってしまっていた事に依るものである。
ここでは、その解決方法をまとめておく。万人に適用できるかは不明なので悪しからず。
環境
- win10のOS上にdocker desktopをインストールし、コンテナを立ち上げている。
- コンテナイメージは、dockerfileを用いてdocker-composeでビルドしている。
- コンテナイメージにはubuntuを使用している。
- ubuntu上に、nodeとrustをインストールし開発環境を構築している。
現象
OpensslとNode18間で依存関係が解決できない。(npm run serveできない。yarnでも同様。)
やったこと
dockerfileの中身を以下変更した。
libssl(2行目)とnode(最後の行)の変更以外は、本題とはあまり関係ありません。
解決前 | 解決後 | 理由 |
---|---|---|
ubuntu 21 | ubuntu 23 | 気分 |
libssl-dev | libssl-dev=3.0.8.-1ubuntu1.1 | イメージビルド時のapt-getで勝手に更新されたくないため固定 |
rustup install nightly | rustup install nightly-2023-4-25 | 同上(stablehではないのは開発環境の都合) |
記述なし | cargo install cargo-check; cargo update | crateの依存関係を解決するため |
apt-get -y node | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash; . ~/.nvm/nvm.sh && nvm install 16.20.0 | openssl 3.0とNode 18.xの依存関係を、nodeのバージョンを下げて解決するため |
openssl 3.0とNode 18.xの依存関係を、解決する方法はいくつかありますが、
情報をあさってもイカした方法がなかったので、使えるNodeバージョンを指定するという方法が無難でした。
イカしてない方法:Opensslをダウングレードするとか、nodeで--openssl-legacy-providerをつけるとopenssl3.0の古い暗号モジュールを使えるようにするとか脆弱性に成り得る。
構成管理をしっかりやれば良いだけなんですけどね。。。