Raspberry PI での EmbassyOS 2.17 のビルド


Start9 Labs の EmbassyOS はエキサイティングなプロジェクトで、試すのが待ちきれませんでしたが、ソフトウェアに 179 ドル以上を費やすつもりはありませんでした.真の自己主権のためには、無料でオープンソースであるべきなので、私はその道を進みました.残念ながら、私は多くの問題に遭遇したので、エラーの内容とエラーをどのように回避したかを詳しく説明するブログ投稿を正当化するのに十分です.

ガイダンスとして、私は official build guide に従っており、this unofficial guide で補足されています.

EmbassyOS 0.3.0 はまもなく公開される予定なので、これらのヒントは、私が公開する頃には古くなっている可能性が高いことに注意してください.

建物スタック



Raspbian で使用できるのはバージョン 2.1.3 のみであるため、スタックのバージョン 2.5.1 の構築に多くの時間を費やしました.

このガイドでは、stack build --stack-yaml=stack-ghc-84.yaml --system-ghc を使用してスタックを構築するように指示されていますが、raspbian では ghc 8.4 が使用できなくなっているようです.この記事の執筆時点では、8.8.4 がデフォルトの ghc です.スタックをコンパイルしようとすると、次のエラーが発生します.

No setup information found for ghc-8.4.4 on your platform.
This probably means a GHC bindist has not yet been added for OS key 'linux-armv7', 'linux-armv7-ncurses6', 'linux-armv7-tinfo6'.
Supported versions: ghc-7.10.2, ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, ghc-8.2.1, ghc-8.2.2, ghc-8.6.3, ghc-8.10.1, ghc-8.10.2, ghc-8.10.3, ghc-8.10.4, ghc-8.10.5, ghc-8.10.6, ghc-8.10.7, ghc-9.0.1


幸いなことに、スタックには複数の構成ファイルがあります.コンパイラを次のように指定することで、スタックを構築することができました: stack build --stack-yaml=stack-ghc-88.yaml --compiler ghc-8.8.4 は、システムのバージョンと一致します.悲しいことに、次の install コマンドが失敗しました.おそらく、上記の互換性のある ghcs に 8.8.4 がリストされていないためですか?

いずれにせよ、次に stack build --stack-yaml=stack-ghc-86.yaml --compiler ghc-8.6.3 を使用して、互換性があるとリストされている 8.6.3 を使用してみました.これにより、いくつかの新しいエラー、つまり Error: selected processor does not support movt [...] が発生しました.

this issue に続いて、armv7 のコンパイルを強制するように提案されているように ~/.stack/programs/arm-linux/ghc-8.6.3/lib/ghc-8.6.3/settings を編集しました.

("C compiler flags", "-marm -march=armv7-a")
("target arch", "ArchARM {armISA = ARMv7, armISAExt = [VFPv2], armABI = HARD}")


これは機能しているように見えましたが、llvm が利用できないという新しいエラー Warning: Couldn't figure out LLVM version! Make sure you have installed LLVM ghc: could not execute: opt が発生しました.スタックには llvm 6 が必要ですが、apt にはそれがなかったので、9 を使用しました.次のようにパスに llvm を追加しました.

export PATH=/usr/lib/llvm-9/bin:$PATH
export CPLUS_INCLUDE_PATH=$(llvm-config --includedir):$CPLUS_INCLUDE_PAT
export LD_LIBRARY_PATH=$(llvm-config --libdir):$LD_LIBRARY_PATH

stack build は、6 以外のバージョンの llvm を使用していると私に怒鳴り続けましたが、うまくいったようです. stack install --stack-yaml=stack-ghc-86.yaml --compiler ghc-8.6.3 を呼び出すことも同様にうまくいきました.もちろん、ガイドに従って、これが完了したら、パスに ./local/bin を追加する必要があります.

EmbassyOS の構築



この手順ははるかに簡単で、ビルド ガイドに必要な 1 つの変更は、エンジンの互換性のために最新バージョンではなく nodejs 15 をインストールすることでした.これを行うには、 nvm install 15 ではなく nvm install node を使用します.

状態



その後、.img をフラッシュする準備が整いました.実行しましたが、残念ながら、Embassy サービスがエラー /usr/local/bin/agent: /lib/arm-linux/gnueabihf/libm.so.6: version GLIBC_2.29 not found でクラッシュしています. Embassy のチャット チャネルで、この問題のトラブルシューティングを行っています.あなたがそれを通り抜ける方法を見つけたら教えてください!

更新: Embassy チームは、0.3.0 がほぼ完成しており、0.2.17 よりもビルドがはるかに簡単であると教えてくれました.進め!

0.3.0



これは確かに 0.2.17 よりもはるかにスムーズでしたが、それでもいくつかの小さな問題に遭遇しました.
npm --prefix ui run build-prod を実行すると、angular のビルド時にエラーが発生しました: An unhandled exception occurred: Cannot find module 'webpack' . npm --prefix ui install webpack を実行すると、これが修正されました. npm install -g webpack でもうまくいきます.

また、正しい権限で docker: 'buildx' is not a docker command. にインストールした後でも、buildx プラグインのインストールに問題があり、~/.docker/cli-plugins/docker-buildx を取得しました.これは、Debian で apt によってインストールされる docker のバージョンが Docker version 18.09.1, build 4c52b90 であるのに対し、buildx 機能は arrived in v19 であるためと思われます. Ubuntu 21.10 に切り替えると、問題が解決しました.

それを片付けた後、すべてが美しく構築されました.プロダクト キーは embassy-os/product_key.txt にあります.リポジトリと eos.img を安全な場所に置くまで、リポジトリ (またはコンパイルに使用した VPS) を削除しないでください.

これを書いている時点では、EmbassyOS 0.3.0 はまだリリースされていないため、最初にセットアップする際には多くの荒削りな部分があります.大使館ユーザーがセットアップされ、LAN に接続できるようになるまでに、何度も再起動する必要がありました.プロのヒント: イーサネット ケーブルが実際にイーサネット ケーブルであることを確認してください.

大使館を建てて運営するようになったので、取り壊す時が来ました.誤解しないでほしいのですが、私はこのプロジェクトに非常に興奮していますが、すべてのデータを信頼する前に、より安定する必要があります.それまでの間、私は NextCloudPi を試してみたいと思います.もし気に入ったら、Embassy のためにラッピングすることを視野に入れています.