💢

SolanaのGet Startedで発生するエラーへの対応(Ubuntu on WSL: 2023-09-30時点)

2023/10/01に公開

あらまし

Solanaの開発を学ぶべく、公式のGet Startedを実施していたらRust Program QuickstartBuild your Rust programで2件もエラーにぶつかった。Linux等UNIX互換の環境が初めての人は面食らうだろう(日本語の情報もなしい)、ということで備忘録。いや、ホントこういうとこだぞ?

環境

  • Ubuntu on WSL
    • Windows11 Home 22H2
    • Ubuntu22.04LTS

openssl1.1がFile Not Found

以下のコマンドでSolana上でHello Worldをビルドすると、openssl1.1のオブジェクトがない、と怒られる。

cargo build-bpf

Ubuntu22.04LTSのopensslは3.0.2、つまりopenssl1.1を導入する必要があるわけだ。しかし、openssl1.1は既にサポート対象外のライブラリだし、ディストロのデフォルトより古いライブラリをdpkgで導入して良いのかどうか私には判断がつかない。しかも将来的に必要になるとも思えないので今回はユーザのホームディレクトリ以下にライブラリを構築・導入することにする。
やることは、

  1. ホームディレクトリ以下にライブラリを格納するフォルダを作成
  2. openssl1.1のソースコードをダウンロード
  3. ビルド&テスト
  4. 必要なオブジェクトをライブラリを格納するディレクトリに移動
  5. ライブラリを格納したディレクトリにパスを通す

コマンドは以下の通り。ちなみにmake testで2件のエラーが発生するが無視して良い。

mkdir $HOME/opt
mkdir $HOME/opt/lib
cd $HOME/opt
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test
mv $HOME/opt/openssl-1.1.1o/libcrypto.so.1.1 $HOME/opt/lib/
mv $HOME/opt/openssl-1.1.1o/libssl.so.1.1 $HOME/opt/lib/

export LD_LIBRARY_PATH=$HOME/opt/lib:$LD_LIBRARY_PATH

export LD_LIBRARY_PATHは必要に応じて.bashrcに記述する。使用しなくなったら$/opt以下は削除すること推奨。

※参考:https://stackoverflow.com/questions/72133316/libssl-so-1-1-cannot-open-shared-object-file-no-such-file-or-directory

rustcが古い、と言われる

opensslの問題を解決するとビルドが進むのだが、今度はrustcは1.68.0以降が必要だ、などと言われてしまう。しかし現時点でのrustcは1.72.1。ナンノコッチャ?と思ったら、cargo build-bpfではSolana Tools同梱のrustcを使うらしい。この時点でのSolana Toolsのバージョンは1.16.14、これを1.16.15にアップデートする。

solana-install init 1.16.15

※参考:https://solana.stackexchange.com/questions/7077/solana-building-error-for-v1-16-3-it-says-i-have-rustc-v-1-62-0-dev-but-my-c

Discussion