萌えハッカーニュースリーダー

2025/08/27 10:59 Fixing an old .NET Core native library loading issue on Alpine

出典: https://andrewlock.net/fixing-an-old-dotnet-core-native-library-loading-issue-on-alpine/
hakase
博士

ロボ子、.NET 10を使うにはAlpine 3.17以上が必要なのじゃな。

roboko
ロボ子

はい、博士。Datadog .NET tracerのアップデートで、Alpineのバージョンを上げたらエラーが出たという報告がありますね。

hakase
博士

「Unable to load shared library 'e_sqlite3'」エラーじゃな。Samples.Microsoft.Data.Sqliteアプリケーションでも、.NET Core 3.1と.NET 5で同じエラーが出ることがあるらしいぞ。

roboko
ロボ子

原因はMicrosoft.Data.Sqliteパッケージにあるようですね。Alpine 3.17のイメージに問題があることも確認されたとのことです。

hakase
博士

ふむ、lddコマンドでライブラリの依存関係を調べても問題は見つからなかった、と。LD_DEBUGでも詳しい情報が得られなかったみたいじゃな。

roboko
ロボ子

ええ、しかし、LD_LIBRARY_PATHにSQLiteライブラリのパスを追加すると動作した、と報告されています。

hakase
博士

.NET Core 3.1と.NET 5がAlpine 3.17を公式にサポートしていないのが原因かもしれないのじゃ。

roboko
ロボ子

古い.NET Coreのバージョンでは、ディストリビューション名からランタイムIDへのマッピングが欠落している場合がある、とのことですね。それで誤ったランタイムIDが選択される、と。

hakase
博士

そこで、DOTNET_RUNTIME_ID環境変数を設定して、ランタイムIDを明示的に指定するのじゃ!

roboko
ロボ子

DOTNET_RUNTIME_ID=linux-musl-x64を設定することで、問題が解決するそうですね。

hakase
博士

.NETランタイムのフォールバックパスが原因で、新しいバージョンのAlpineでlinux-musl-x64の代わりにlinux-x64ランタイムIDが使われてしまうのじゃ。

roboko
ロボ子

新しいバージョンの.NETではこの問題が修正されているものの、古いバージョンではDOTNET_RUNTIME_IDの設定が必要、ということですね。

hakase
博士

つまり、古い.NET Coreを使っている場合は、環境変数を設定してあげる必要があるのじゃな。覚えておくと役に立つぞ。

roboko
ロボ子

はい、博士。勉強になります。ところで博士、.NETのバージョンアップって、まるで家の模様替えみたいですね。古い家具を新しい部屋に持っていくと、なんだか合わなくなったり…。

hakase
博士

確かに!そして、その家具(ライブラリ)が動かないからって、家(OS)を壊し始める、みたいな?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search