ソフトウェアアップデートのビルドとパッケージ
このチュートリアルでは、シンプルな 「Hello World」 アプリケーションを C 言語でビルドし、Debian の .deb
パッケージとしてパッケージ化する手順を説明します。これは、DigiCert® Device Trust Manager を使って Debian Linux ベースの IoT デバイスにデプロイできるソフトウェアアップデートを作成する入門書になります。
注記
Device Trust Manager を通してデバイスにソフトウェアアップデートをデプロイするには、アドバンスプラン以上が必要です。
目的
基本的な C 言語のアプリケーションを開発する: ARM と x86 の両アーキテクチャに対応したシンプルな 「Hello World」 プログラムを C 言語で記述してからコンパイルし、クロスプラットフォームのソフトウェア開発の基礎を築きます。
アプリケーションを Debian パッケージにパッケージ化する: Debian
.deb
パッケージの作成方法を学び、Debian ベースのシステムに簡単に配布・インストールできるようにアプリケーションを準備します。インストールと実行をテストする: パッケージ化されたアプリケーションが正しくインストールされ、サポートされているデバイスで動作することを確認し、デプロイ前に機能を検証します。
要件
Ubuntu 22.04 x64 または互換性のある Linux システム: アプリケーションのコンパイルとパッケージングに必要な環境になります。
ARM64 および x86-64 用の GCC クロスコンパイラ: 複数のアーキテクチャ用にアプリケーションをコンパイルするときに必要。このチュートリアルでは
gcc-x86-64-linux-gnu
とgcc-aarch64-linux-gnu
を使用します。ターミナルコマンドに関する基本的な知識: コマンドラインに慣れていると、チュートリアルのステップを進んでいくのに有利です。
テキストエディタ:
nano
やvim
などで C プログラムやスクリプトを記述します。このチュートリアルではnano
を使用します。
まず、システムでソフトウェアアップデートをコンパイルしてパッケージ化する準備ができていることを確認します。その一環として、ARM64 および x86-64 アーキテクチャの両方でアプリケーションをビルドするときに必要な GCC クロスコンパイラをチェックし、必要に応じてインストールします。
重要
このチュートリアルは Ubuntu 22.04 x64 でテスト済みです。これとは異なるディストリビューションを使用している場合は、パッケージ名やインストールコマンドが異なる場合もあります。
GCC クロスコンパイラの確認
Device Trust Manager は各種アーキテクチャの IoT デバイスをサポートしているため、x86-64 と ARM64 の両方に対応する GCC コンパイラが必要です。
ターミナルで以下のコマンドを実行して、x86-64 と ARM64 の GCC コンパイラを確認してください。
x86_64-linux-gnu-gcc --version aarch64-linux-gnu-gcc --version
これらのコマンドでバージョン情報が返された場合はコンパイラがインストールされているので、ステップ 2 に進むことができます。
必要な場合は、不足しているコンパイラを以下のコマンドでインストールできます:
sudo apt install gcc-x86-64-linux-gnu gcc-aarch64-linux-gnu
これで必要なコンパイラの環境が整い、アプリケーションを記述してコンパイルする準備ができました。
このステップでは、「「Hello World」」と出力する簡単な C プログラムを作成し、クロスプラットフォームデプロイメントのために x86-64 と ARM64 の両アーキテクチャ用としてコンパイルします。
hello world プログラムの記述
まず、helloworld.c
というファイルを新規に作成します。
nano helloworld.c
では、コンソールに「DigiCert Hello World!」と出力する簡単な C プログラムを書いてみましょう。これがソフトウェアアップデートの基礎になります。次のコードをファイルに追加します。
#include <stdio.h> int main() { printf("DigiCert Hello World!\n"); return 0; }
ファイルを保存して閉じます。nano
で Ctrl + X
を押し、Y
で確定して、Enter
キーで保存します。
プログラムのコンパイル
各種のデバイスとの互換性を確保するために、両方のアーキテクチャ用にプログラムをコンパイルする準備が、これで整いました。
x86-64 デバイス用にコンパイルします。
x86_64-linux-gnu-gcc helloworld.c -o hello_x86-64
ARM64 デバイス用にコンパイルします。
aarch64-linux-gnu-gcc helloworld.c -o hello_arm64
コンパイルしたアプリケーションのテスト
コンパイルが終わったら、アプリケーションが意図したアーキテクチャ上で意図したとおりに動くかどうか確認することが重要です。実行ファイルをそれぞれ適切なアーキテクチャで実行します。
x86-64 システムの場合:
./hello_x86-64
ARM64 システムの場合:
./hello_arm64
正しく実行された場合、出力は次のようになるはずです。
DigiCert Hello World!
これで、クロスプラットフォームの 「Hello World」 アプリケーションを記述してコンパイルすることに成功しました。次に、これを Debian パッケージとしてパッケージ化し、デバイス間でデプロイできるようにします。
アプリケーションのコンパイルまで済んだので、Debian .deb
ファイルとしてパッケージ化することができます。これにより、互換性のあるデバイスへの配布とインストールが容易になります。パッケージ化には、標準構造の作成、パッケージメタデータの定義、アーキテクチャ固有のバイナリを管理するためのインストール後のスクリプトの追加などの手順があります。
Debian パッケージ構造のセットアップ
まず、Debian パッケージに必要なディレクトリ構造を作成します。
mkdir digicert-hello-world-all mkdir digicert-hello-world-all/DEBIAN
パッケージメタデータの定義
Debian の各パッケージには、パッケージ名やバージョン、説明といったメタデータを定義する制御ファイルがあります。新しい制御ファイルを開いて、この情報を追加します。
nano digicert-hello-world-all/DEBIAN/control
制御ファイルに以下の内容を追加します。
Package: digicert-hello-world-all Version: 0.1 Section: custom Priority: optional Architecture: all Essential: no Installed-Size: 1024 Maintainer: digicert.com Description: Sample Hello World Debian package - for demo purposes
注記
このパッケージには複数のアーキテクチャ(x86 と ARM)用のバイナリが含まれているため、Architecture
フィールドは all
に設定されています。
この情報を追加したら、Ctrl + X、Y の順に押して確定し、Enter キーでファイルを保存して閉じます。
コンパイルしたバイナリの追加
コンパイルしたアプリケーションバイナリを、パッケージ構造内の適切なディレクトリに配置します。
mkdir -p digicert-hello-world-all/usr/bin cp hello_x86-64 hello_arm64 digicert-hello-world-all/usr/bin/
インストール後スクリプトの作成
インストール後スクリプトでは、デバイスのアーキテクチャに基づいた正しいバイナリへのシンボリックリンクが作成されます。これで、helloworld
コマンドが各アーキテクチャに適したバイナリを示すようになります。
postinst
ファイルを作成します。sudo nano digicert-hello-world-all/DEBIAN/postinst
スクリプトに次のコードを追加します。
#!/bin/bash ARCH=$(dpkg --print-architecture) if [ "$ARCH" = "arm64" ]; then ln -sf /usr/bin/hello_arm64 /usr/local/bin/helloworld elif [ "$ARCH" = "amd64" ]; then ln -sf /usr/bin/hello_x86-64 /usr/local/bin/helloworld fi
注記
上記のスクリプトは、
dpkg --print-architecture
を使用してアーキテクチャ(ARM64 または x86-64)を検出し、正しいバイナリへのシンボリックリンクを作成しています。インストール中に正しく実行されるように、
postinst
ファイルを実行可能ファイルに設定します。sudo chmod 775 digicert-hello-world-all/DEBIAN/postinst
パッケージ構造の確認
パッケージ構造が正しく設定されているかどうかを確認するには、tree
コマンドを使用します。このコマンドでディレクトリの内容がリストされ、ファイルが正しく配置されていることを確認できます。
tree -L 3 digicert-hello-world-all
出力は次のようになります。
digicert-hello-world-all ├── DEBIAN │ ├── control │ └── postinst └── usr └── bin ├── hello_x86-64 └── hello_arm64
Debian パッケージのビルド
パッケージ構造が完成したら、dpkg-deb
を使って .deb
パッケージファイルを生成します。
dpkg-deb --build digicert-hello-world-all
dpkg-deb --build
コマンドは、digicert-hello-world-all
ディレクトリから .deb
パッケージを作成します。これは、ローカルでのテストや互換性のあるデバイスへのデプロイに使用できます。
.deb
パッケージの準備ができたら、Linux デバイスにインストールしてテストし、すべてが意図したとおりに機能することを確認しましょう。
パッケージのインストール
パッケージをインストールするには、dpkg -i
コマンドを使います。次のコマンドは digicert-hello-world-all
パッケージをデバイスにインストールします。
sudo dpkg -i digicert-hello-world-all.deb
アプリケーションの実行
インストールが済んだらアプリケーションを実行し、正しく実行されることを確認します。
helloworld
パッケージが正常にインストールされていれば、次のような出力が表示されるはずです。
DigiCert Hello World!