NAS上のコンパイラー、ランタイム、ビルド環境
QTSにはコンパイラーがありません。Bucket & Code Server IDEは言語ランタイム、クロスコンパイラー、ビルドに使うLinuxシステム一式をダウンロードし、各ファイルのsha256を確認してデータフォルダーに保持します。このガイドでは新しいものはインストールしません。既存のビルド環境とGoランタイムのツールを使い、小さなプログラムをコンパイルしてNASで動作することを確認します。
- カタログランタイム、コンパイラー、システム
- ランタイムeval "$(bvs use …)"
- 環境ビルドに使うLinuxシステム
- ビルドbvs env run
- 確認ELFインスペクター
画像はテスト用NASのBucket & Code Server IDEパネルのものです。データフォルダーは/share/CACHEDEV1_DATA/BucketVSです。
01Toolchainsページの機能
Toolchainsページには、タブに分かれたカタログが表示されます。
| 種類 | 内容 | 例 |
|---|---|---|
| ルートファイルシステム | 環境に展開するLinuxシステム | Debian 12と13、Ubuntu 22.04と24.04、Alpine 3.22 |
| クロスツールチェーン | 別のプロセッサー向けにビルドするコンパイラー | aarch64、x86-64、armv7向けのBootlinツールチェーン。glibcまたはmuslを使用 |
| ランタイム | 言語またはビルドツール | Python, Go, Node.js, Zig, Rust, CMake, Ninja, Java |
| QNAP | QNAP独自のビルドキット | QDK 2.5.0。bvs qbuildとExport as QPKGで使用 |
- Installには管理者ロールが必要です。ジョブはデータフォルダーの
toolchains/cache/にアーカイブをダウンロードし、sha256をカタログと照合して、不一致ならファイルを削除します。その後、ランタイムまたはクロスツールチェーンをtoolchains/<kind>/<id>に展開します。進行状況はJobsページに表示されます。中断したダウンロードは、インストールを再開すると続きから取得されます。 - 別のプロセッサー向けの項目は非表示です。Bootlinのクロスツールチェーンはx86_64上で動作するため、ARM NASでは提供されません。
- カタログはパッケージに付属します。pub.qnaputilities.comの署名付きカタログにより、パッケージを更新せずに項目を追加できます。Refresh the catalogで直ちに取得でき、組み込みのcronジョブでも毎日取得します。
02シェルでランタイムを使う
インストール済みの項目でbvs useを開くと、シェルでその項目を利用するための行が表示されます。エディターのターミナルやcronジョブなどで使えます。
# エディターのターミナルで実行(Editor settingsページのOpen the editorで開く)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go
GoランタイムはCGO_ENABLED=0を設定するため、生成されるプログラムは静的で、同じプロセッサーを搭載したどのNASでも動作します。クロスツールチェーンも同じように使えます。eval "$(bvs use bootlin-aarch64-glibc-stable)"でARM 64ビット機向けのコンパイラーが使えるようになります。
03ビルド環境
環境とは、データフォルダーのenvs/<name>に展開されたLinuxシステムです。内部にパッケージをインストールでき(DebianまたはUbuntuではapt install build-essential)、インストール内容は保持されます。データフォルダーのプロジェクトフォルダーは、環境内では/projectsとして利用できます。
- ビルドに必要なものをすぐにそろえるには、AppsページのExamplesにあるプリセットを使います(管理者)。Ubuntu 24.04 builderは、環境が一覧に表示される前にapt-getでビルドツールをインストールします。glibcは2.39で、このパッケージが動作するNASの中で最も低いバージョンなので、そこでビルドしたものはそれらすべてのNASで動作します。

- New environment(管理者)は、指定した名前で素のルートファイルシステムを展開します。未インストールの場合は先にダウンロードします。

- 各環境には、環境内のターミナルを備えたエディターを開くOpen a shellのほか、Clone、Export、Deleteがあります。

04環境内でプログラムをコンパイルする
NAS上の任意のターミナルから、bvs env shell <name>で環境に入り、bvs env run <name> -- <command>で環境内のコマンドを1つ実行できます。どちらも呼び出したフォルダーで開始します。プロジェクトフォルダー配下のフォルダーは、環境内では/projects配下の同じフォルダーに対応します。
# projects/内のフォルダーにあるhello.cpp。エディターのターミナルで実行
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello
コンパイラーとそのライブラリーは環境のものを使い、生成したプログラムはNAS本体で実行します。そこで必要なものが見つかるかを次の手順で確認します。
05ELFインスペクターで確認する
ToolchainsページのELF inspectorタブ(開発者ロール)は、何も実行せずにプログラムまたはライブラリーと対象自身のローダーデータを読み取り、このNASまたは環境に必要なものがそろっているかを表示します。ファイルの場所(アプリのビルド、プロジェクトフォルダー、環境、管理者の場合はNAS上の任意のファイル)と対象を選び、Inspectを押します。
What it needsは、プログラム、ロードするライブラリー、各ライブラリーの場所と要求されるバージョンを図で表示します。このC++プログラムにはlibstdc++.so.6とlibc.so.6が必要で、このNASには要求されるバージョンを定義した両方のライブラリーがあります。
- ライブラリーの欠落、ライブラリーが提供しないバージョン、対象より新しいglibcは、理由付きの検出結果になります。対象に環境を選ぶと、同じプログラムがそこで動作する場合の条件を確認できます。
- NAS上では
bvs ldd <file>が同じ内容を出力します。環境についてはbvs ldd --env <name> <file>を使います。 - 配布するプログラムについては、App Builderがすべてのビルドの全ファイルを確認し、Dependenciesタブで修正方法を提示します。