新しいM1MacでSolanaの開発を始めたばかりの場合は、今すぐ髪を抜いている可能性があります。Solanaの公式インストールガイドに従い、solana
CLIコマンドを初めて実行したため、すべてが順調に進んでいました。しかし、solana-test-validator
コマンドを使用してバリデーターを起動しようとするとすぐに、次のエラーメッセージが表示されます。
dyld: Library not loaded: /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib
Referenced from: /Users/123/.local/share/solana/install/active_release/bin/solana-test-validator
Reason: image not found
zsh: abort solana-test-validator
たぶん、あなたはエラーメッセージを読み、賢くなり、OpenSSLをインストールしました…ただ別のエラーメッセージに出くわすだけです:
Ledger location: test-ledger
Log: test-ledger/validator.log
⠁
zsh: illegal hardware instruction solana-test-validator
🧐😕
ここでの問題は、新しいM1 MacがARMベースのアーキテクチャを使用しているのに対し、Solana開発ツールはIntelベースのx86チップ用に作成されていることです。ここでの解決策は、光沢のある新しいMacbookを販売したり、古いラップトップを取り出したりすることではありません。幸い、Rosettaという便利なツールを使用して、Appleシリコンで実行される方法でソースコードからSolanaを再コンパイルできます。
1.最初からやり直します
Solanaのガイドに従って環境をセットアップしようとした場合、最初に行うことは、すべてをアンインストールして最初からやり直すことです。
Finderでターミナルアプリを見つけることから始め、⌘I
キーストロークを使用してFinderのインスペクターウィンドウを開きます。[ Rosettaを使用して開く]オプションが無効になっていることを確認し、ターミナルを再起動します。
これで、先に進んですべてをきれいにアンインストールできます。まず、Solanaをアンインストールしましょう。
rm -rf /Users/USERNAME/.local/share/solana/
rmコマンドは、FILE...
に指定したファイルと空のディレクトリを削除します。ディレクトリを削除する場合には、そのディレクトリ配下にファイルやディレクトリがあってはいけません。ただし、オプション「-r」を指定すると、空でないディレクトリを削除できます。
- ① -f
- 通常、
FILE...
に指定したファイルやディレクトリが存在しない場合には、エラーが発生します。しかし、このオプションを指定するとファイルやディレクトリの存在するものだけを削除し、エラーは発生しません。 - ② -i
FILE...
に指定したそれぞれのファイルやディレクトリの削除の前に、削除するかどうか問い合わせます。- ③ -r
FILE...
に指定したディレクトリが空でなくても削除します。- ④ -v [Linux][FreeBSD]
- 処理内容を出力します。
次に、Rustをアンインストールします。
rustup self uninstall
2.ロゼッタを設定します
SolanaとRustをアンインストールすると、ローカルの開発環境はクリーンな状態になり、最初からやり直すことができます。今回は、最初にRosettaをインストールすることから始めましょう。
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
次に、Finderウィンドウに戻り、ターミナルアプリケーションの複製コピーを作成します。
ターミナルの2つのバージョンを作成します。1つはRosettaを使用し、もう1つは使用しません。複製したTerminalインスタンスにTerminalRosettaという名前を付けることをお勧めします。これにより、使用しているバージョンが常に明確になります。
ターミナルRosettaバージョンでRosettaを有効にするには、⌘I
もう一度キーストロークを使用してFinderのインスペクターウィンドウを表示し、[Rosettaを使用して開く]オプションが有効になっていることを確認します。
これ以降は、ターミナルRosettaアプリのみを使用するため、既存のターミナルウィンドウを閉じるか最小化して、混乱しないようにすることをお勧めします。次のセクションのために、ターミナルロゼッタウィンドウを開いてください。
3.依存関係をインストールします
Solanaを実行するために必要なすべての依存関係を詳しく調べてインストールしましょう。でターミナルロゼッタシェル、錆をインストールするには、次のコマンドを実行します。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
次に、Homebrewをインストールしましょう。コマンドはarch -x86_64
プレフィックスで始まることに注意してください。これにより、Rosettaはx86命令セットを使用して次のコマンドを実行するように指示されます。
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
OpenSSLもインストールしましょう:
arch -x86_64 brew install openssl@1.1
次に、CargoがマシンのRustコードをコンパイルする方法を認識できるように、構成ファイルを設定する必要があります。で新しいファイルを作成し、~/.cargo/config
次のビルド構成に貼り付けます。
[target.x86_64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
[target.aarch64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
4.Solanaをインストールしてビルドします
Solanaソースコードを保存できる安定したディレクトリに移動します。たとえば、のすべてのプロジェクトにアンブレラフォルダを使用しています~/Developer
。
Solanaリポジトリのクローンを作成してから、Solanaディレクトリに移動します。
git clone https://github.com/solana-labs/solana.git
cd solana
次に、Cargoを使用してSolanaソースコードをコンパイルしましょう。
cargo build
次に、インストールスクリプトを実行します。少し時間がかかりますので、お気軽にコーヒーをお召し上がりください。
./scripts/cargo-install-all.sh .
エラーが出たのでこれを試した。https://swaroopmaddu.medium.com/solana-installation-in-macbook-m1-b08582d50db1
最後に、PATH
ターミナルがSolanaCLIコマンドの場所を認識できるように更新します。
export PATH=$PWD/bin:$PATH
質問のコマンドを実行すると、エラーメッセージが表示されます。
$ PATH =$PATH:`pwd`
bash: PATH: command not found
スペースがタイプミスであり、実際にこれを実行する場合:
PATH=$PATH:`pwd`
次に、現在のシェルセッション(ターミナルを閉じた場合)の間、現在のディレクトリ(現在のディレクトリpwd
のパスを`pwd`
出力し、の出力に置き換えられるコマンドpwd
)をPATH
変数に追加します。説明する:
$ pwd
/home/terdon/foo ## I am in /home/terdon/foo
$ echo $PATH ## the current PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ PATH=$PATH:`pwd`
$ echo $PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/terdon/foo
現在のディレクトリ/home/terdon/foo
がPATH
変数の最後に追加されていることに注意してください。
たたーみなるあたらたーみなるあたらsターミナル新しく開いたら動かなくなった
.zshenv
- ログインシェル、インタラクティブシェル、シェルスクリプト、どれでも常に必要な設定を定義する
- zsh が起動して、必ず最初に読み込まれる設定ファイル
- 対話形式のシェル設定をここですると、シェルスクリプト誤作動の原因になるため注意する
- 影響範囲が大きいので記述は必要最低限にするべき
.zprofile
- ログインシェルに必要な設定だけを記述する
- zshenv の次に読み込まれる設定ファイル
- zsh ログイン時の一回だけ読み込まれる
.zshrc
- ログインシェル、インタラクティブシェルの場合に読み込まれる
.zlogin
- ログインシェルに必要な設定だけを記述する
- 最後に読み込まれる
- 役割は
.zprofile
とほぼ一緒。混乱を避けるため併用しないこと
.zlogout
exit
コマンドで zsh を抜けたときに読み込まれる
https://suwaru.tokyo/zshenv/
環境変数というのは、solanaとかのコマンドを打ったときに本当はフルパスでコマンドを指定しなきゃいけないんだけど、PATHを設定しておくとそのPATHの中にあるファイルの中からsolanaを探して実行してくれるというもの。
PATHの確認 echo $PATH
PATHの変更 ユーザーディレクトリにある .zshenvに、使いたいコマンドがあるパスを追加する。
.npmとか、今ユーザーディレクトリ直下にインストールしているコマンドはPATHを設定していなくても動く。
exportでは一時的にしか動かない。
5.遊んでください!
ここまでできたら、おめでとうございます!これで、Solanaソースコードが正常にダウンロードされ、Rosettaを使用してコンパイルしてM1Macで実行できるようになりました。 すべてが期待どおりに機能していることを確認しましょう。まず、SolanaCLIコマンドを使用できることを確認してください。
solana
そして今、真実の瞬間のために、ローカルテストバリデーターを起動しましょう!
solana-test-validator
すべてが正しく構成されている場合、バリデーターは実行を開始し、次のようにステータスを出力します。
今、あなたのローカルマシン上で実行されているソラナバリデータを持っているなどのコマンドを実行することができますsolana balance
し、solana transfer
あなた自身の個人的なDevNetのにトランザクションを提出します。
ノート
このガイドのフォロー中に問題が発生した場合は、コメントでお知らせいただくか、TwitterでDMを送信して、改訂版を公開してください。あなたが作ったものを見るのが待ちきれません!