Unofficial
このページの内容
  1. 01Toolchainsページの機能
  2. 02シェルでランタイムを使う
  3. 03ビルド環境
  4. 04環境内でプログラムをコンパイルする
  5. 05ELFインスペクターで確認する

NAS上のコンパイラー、ランタイム、ビルド環境

QTSにはコンパイラーがありません。Bucket & Code Server IDEは言語ランタイム、クロスコンパイラー、ビルドに使うLinuxシステム一式をダウンロードし、各ファイルのsha256を確認してデータフォルダーに保持します。このガイドでは新しいものはインストールしません。既存のビルド環境とGoランタイムのツールを使い、小さなプログラムをコンパイルしてNASで動作することを確認します。

  1. カタログランタイム、コンパイラー、システム
  2. ランタイムeval "$(bvs use …)"
  3. 環境ビルドに使うLinuxシステム
  4. ビルドbvs env run
  5. 確認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
QNAPQNAP独自のビルドキットQDK 2.5.0。bvs qbuildとExport as QPKGで使用
Runtimesタブ:Go 1.27はインストール済みでbvs useとRemoveを表示。Zig 0.15にはInstallボタン
  • Installには管理者ロールが必要です。ジョブはデータフォルダーのtoolchains/cache/にアーカイブをダウンロードし、sha256をカタログと照合して、不一致ならファイルを削除します。その後、ランタイムまたはクロスツールチェーンをtoolchains/<kind>/<id>に展開します。進行状況はJobsページに表示されます。中断したダウンロードは、インストールを再開すると続きから取得されます。
  • 別のプロセッサー向けの項目は非表示です。Bootlinのクロスツールチェーンはx86_64上で動作するため、ARM NASでは提供されません。
  • カタログはパッケージに付属します。pub.qnaputilities.comの署名付きカタログにより、パッケージを更新せずに項目を追加できます。Refresh the catalogで直ちに取得でき、組み込みのcronジョブでも毎日取得します。
QNAPタブ:QNAP QDK 2.5.0(qbuild)はインストール済み

02シェルでランタイムを使う

インストール済みの項目でbvs useを開くと、シェルでその項目を利用するための行が表示されます。エディターのターミナルやcronジョブなどで使えます。

Toolchainsページのインストール済みGo 1.27項目:ビルド対象、ディスク上の場所、bvs use go-1.27-x86_64の出力。ランタイムのbinフォルダーを含むexport PATHとexport CGO_ENABLED=0
# エディターのターミナルで実行(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で動作します。 Ubuntu 24.04 builder (full)のサンプルカード:作成ジョブがインストールするパッケージ、必要なルートファイルシステム、Use this example
  • New environment(管理者)は、指定した名前で素のルートファイルシステムを展開します。未インストールの場合は先にダウンロードします。 New environmentダイアログ:Nameはdeb12、Root filesystemはDebian 12 bookworm、glibc 2.36、Createボタン
  • 各環境には、環境内のターミナルを備えたエディターを開くOpen a shellのほか、Clone、Export、Deleteがあります。 debian12-builder(glibc 2.36)とubuntu2404-builder(glibc 2.39)の環境。各環境にOpen a shell、Clone、Export、Deleteとbvs env shellコマンド

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を押します。

ELFインスペクター:プロジェクトフォルダーを選択、Pathはhello/hello、TargetはThis NAS (x86_64)、LD_LIBRARY_PATHは空欄 検出結果:NAS上で確認、x86_64、glibc 2.43、6個のELFファイルを読み取り、エラー0件、警告0件。問題なし:6ファイルのすべての要件が、ライブラリーで定義されたバージョンで見つかる

What it needsは、プログラム、ロードするライブラリー、各ライブラリーの場所と要求されるバージョンを図で表示します。このC++プログラムにはlibstdc++.so.6とlibc.so.6が必要で、このNASには要求されるバージョンを定義した両方のライブラリーがあります。

必要なもの:helloからNASのld-linux-x86-64.so.2、libc.so.6、libgcc_s.so.1、libm.so.6、libstdc++.so.6への接続と、必要なGLIBC_2.34、GLIBCXX_3.4.32などのバージョン
  • ライブラリーの欠落、ライブラリーが提供しないバージョン、対象より新しいglibcは、理由付きの検出結果になります。対象に環境を選ぶと、同じプログラムがそこで動作する場合の条件を確認できます。
  • NAS上ではbvs ldd <file>が同じ内容を出力します。環境についてはbvs ldd --env <name> <file>を使います。
  • 配布するプログラムについては、App Builderがすべてのビルドの全ファイルを確認し、Dependenciesタブで修正方法を提示します。