3.3 パッケージの作成をする #
エッジゲートウェイではパッケージ管理システムを利用できます。ユーザーが作成したアプリケーションをパッケージとして管理することで、パッケージ同士の依存関係の管理することも可能です。
ここでは、ネイティブ開発環境でパッケージを作成する方法について説明します。
注意: インストールしたパッケージは rootfs 領域に入るため、ファームウェアの全体更新で削除されます。全体更新の後も使う方法は『2.3.5 パッケージを残す』を参照してください。
補足: パッケージ管理システムの詳細については、Ubuntuのサイトで詳細を確認してください。
3.3.1 準備 #
必要なアプリケーションをインストールします。
関連パッケージのインストール
実行環境: エッジゲートウェイ
admin@amnimo:~$ sudo apt update
admin@amnimo:~$ sudo apt upgrade
admin@amnimo:~$ sudo apt install devscripts cdbs debhelper dh-make
サンプルアプリケーションのソースコード
サンプルプログラムには、『1.3.2 クロスビルドの実行』のサンプルコードを利用します。また、サービスのユニットファイルには、『3.2.1 ユニットファイルの作成』で作成したユニットファイルを利用します。
main.c
#include <stdio.h>
#include <unistd.h>
int main(void)
{
while(1){
printf("Hello World!\n");
sleep(10);
}
return 0;
}
Makefile
『1.3.2 クロスビルドの実行』のMakefileに、サービスユニットのインストール処理を追記します。
CC = gcc
CFLAGS = -O3 -Wall
DESTDIR :=
LIBS =
OBJS = main.o
PROG = amnimo-sample-app
UNITFILE = amnimo-sample-app.service
all: $(PROG)
$(PROG): $(OBJS)
$(CC) $(OBJS) $(LIBS) -o $(PROG)
clean:
rm -f *.o $(PROG)
install: $(PROG)
install -D -s $(PROG) $(DESTDIR)/usr/sbin/$(PROG)
install -D -m 644 $(UNITFILE) $(DESTDIR)/lib/systemd/system/$(UNITFILE)
amnimo-sample-app.service
[Unit]
Description=amnimo sample application
After=syslog.target
[Service]
Type=simple
ExecStart=/usr/sbin/amnimo-sample-app
[Install]
WantedBy=multi-user.target
ディレクトリ構造とファイル配置を以下に示します。
実行環境: エッジゲートウェイ
admin@amnimo:~/sample$ tree
.
├── amnimo-sample-app.service
├── main.c
└── Makefile
3.3.2 パッケージの作成 #
パッケージのテンプレートの作成
dh_makeを使用して、サンプルアプリケーションのディレクトリ内にパッケージのテンプレートを作成します。
実行環境: エッジゲートウェイ
admin@amnimo:~$ cd sample
admin@amnimo:~/sample$ dh_make --native --single --email support@amnimo.com --packagename amnimo-sample-app_1.0.0
Maintainer Name: unknown
Email-Address : support@amnimo.com
Date : Wed, 19 Aug 2020 10:33:40 +0000
Package Name : amnimo-sample-app
Version : 1.0.0
License : gpl3
Package Type : single
Are the details correct? [Y/n/q] ← 「Y」キーに続けてEnterを入力し、一旦終了する
admin@amnimo:~/sample$
補足: 上記の実行例で使用しているdh_makeのオプションを以下に示します。
オプション 設定内容 --native ネイティブ形式(upstream のソースの tar アーカイブを別に持たない形式)のパッケージの作成 --single アプリケーションの作成 各ファイル上のメールアドレスの設定 --packagename 各パッケージファイルのパッケージ名 また、上記の例で設定している各パラメーターを以下に示します。
パラメーター 設定内容 パッケージ名 amnimo-sample-app バージョン 1.0.0
補足: 例ではセマンティックバージョニング2.0.0の形式で指定しています。
https://semver.org/lang/ja/
バージョンの比較は Debian のバージョン番号の規則に従います。
https://www.debian.org/doc/debian-policy/ch-controlfields.html#versionメールアドレス support@amnimo.com
注意: 例のアドレスです。作成するパッケージの保守担当者(Maintainer)のアドレスになるため、お客様のアドレスを指定してください。
パッケージのテンプレートを作成すると、debian ディレクトリとその配下のファイルが出力されます(「←」を付けたもの)。
補足: 実行例はファームウェア Ver.1(Ubuntu 18.04 LTS)の dh_make の出力です。dh_make の版によって、生成されるファイルの種類は異なる場合があります。ライセンスの既定値(GPL3)も、お客様のパッケージに合わせて
copyrightを書き換えてください。
実行環境: エッジゲートウェイ
admin@amnimo:~/sample$ tree
.
├── amnimo-sample-app.service
├── debian ← 作成(配下のファイルすべて)
│ ├── amnimo-sample-app.cron.d.ex
│ ├── amnimo-sample-app.doc-base.EX
│ ├── amnimo-sample-app-docs.docs
│ ├── changelog
│ ├── compat
│ ├── control
│ ├── copyright
│ ├── manpage.1.ex
│ ├── manpage.sgml.ex
│ ├── manpage.xml.ex
│ ├── menu.ex
│ ├── postinst.ex
│ ├── postrm.ex
│ ├── preinst.ex
│ ├── prerm.ex
│ ├── README
│ ├── README.Debian
│ ├── README.source
│ ├── rules
│ └── source
│ └── format
├── main.c
└── Makefile
主な生成ファイル
| ファイル名 | 内容 |
|---|---|
| control | パッケージ管理ツールが使用する情報です。 |
| copyright | パッケージの著作権やライセンスに関する情報です。 デフォルトは、GPLv3です。 補足: 本ファイルは必須ではありません。 |
| changelog | パッケージのバージョン番号、リビジョン、ディストリビューション、緊急度(urgency)を識別するために利用します。 以下のフォーマットに従って記載する必要があります。 https://www.debian.org/doc/debian-policy/ch-source.html 補足: debchangeコマンドで、フォーマットのテンプレートを取得できます。 |
| rules | パッケージを作成するためのルールが記載されています。 基本的なMakefileの記述(all、clean、installなど)の場合は、特に変更する必要はありません。 |
補足: パッケージ情報をカスタマイズする場合は、Debianのサイトの詳細情報を確認してください。
パッケージの作成
dh_makeを実行したことで、パッケージの作成に必要なファイルは作成されています。続いて、debuildでパッケージを作成します。
実行環境: エッジゲートウェイ
admin@amnimo:~/sample$ debuild -us -uc -ui
実行すると、以下に示すファイル(「← 作成」を付けたもの)が出力されます。パッケージ関連のファイルは、実行ディレクトリの1つ上の階層に出力されます。
実行環境: エッジゲートウェイ
admin@amnimo:~/sample$ tree ../
../
├── amnimo-sample-app_1.0.0_arm64.build ← 作成
├── amnimo-sample-app_1.0.0_arm64.buildinfo ← 作成
├── amnimo-sample-app_1.0.0_arm64.changes ← 作成
├── amnimo-sample-app_1.0.0_arm64.deb ← 作成
├── amnimo-sample-app_1.0.0.dsc ← 作成
├── amnimo-sample-app_1.0.0.tar.xz ← 作成
├── sample
│ ├── amnimo-sample-app ← 作成
│ ├── debian
│ │ ├── amnimo-sample-app ← 作成(配下のファイルすべて)
│ │ │ ├── DEBIAN
│ │ │ │ ├── control
│ │ │ │ └── md5sums
│ │ │ ├──lib
│ │ │ │ └── systemd
│ │ │ │ └──system
│ │ │ │ └── amnimo-sample-app.service
│ │ │ └── usr
│ │ │ ├── sbin
│ │ │ │ └── amnimo-sample-app
│ │ │ └── share
│ │ │ └── doc
│ │ │ └── amnimo-sample-app
│ │ │ ├── changelog.gz
│ │ │ ├── copyright
│ │ │ └── README.Debian
│ │ ├── amnimo-sample-app.cron.d.ex
│ │ ├── amnimo-sample-app.doc-base.EX
│ │ ├── amnimo-sample-app-docs.docs
│ │ ├── amnimo-sample-app.substvars ← 作成
│ │ ├── changelog
│ │ ├── compat
│ │ ├── control
│ │ ├── copyright
│ │ ├── debhelper-build-stamp ← 作成
│ │ ├── files ← 作成
│ │ ├── manpage.1.ex
(略)
│ │ └── source
│ │ └── format
│ ├── main.c
│ ├── main.o ← 作成
│ └── Makefile
主な生成ファイル
| ファイル名 | 内容 |
|---|---|
| amnimo-sample-app_1.0.0_arm64.deb | バイナリパッケージです。 dpkgコマンドを使ってインストール/アンインストールすることができます。 |
| amnimo-sample-app_1.0.0.dsc | ソースコード内容の概要です。 |
| amnimo-sample-app_1.0.0_arm64.changes | リビジョンパッケージにおける変更点がすべて記載されているファイルです。 |
| amnimo-sample-app_1.0.0_arm64.build | パッケージ生成時のログです。 |
| amnimo-sample-app_1.0.0_arm64.buildinfo | パッケージの依存情報、ビルド時刻などが記載されています。 |
| amnimo-sample-app_1.0.0.tar.xz | ソースコードtarアーカイブです。 sampleディレクトリ内にあるdebianディレクトリの中身が含まれています。 |
作成したパッケージの内容確認
作成したdebパッケージのアーカイブの中身を確認します。
実行環境: エッジゲートウェイ
admin@amnimo:~$ dpkg -c amnimo-sample-app_1.0.0_arm64.deb
drwxr-xr-x root/root 0 2020-01-02 00:53 ./
drwxr-xr-x root/root 0 2020-01-02 00:53 ./lib/
drwxr-xr-x root/root 0 2020-01-02 00:53 ./lib/systemd/
drwxr-xr-x root/root 0 2020-01-02 00:53 ./lib/systemd/system/
-rw-r--r-- root/root 163 2020-01-02 00:53 ./lib/systemd/system/amnimo-sample-app.service
drwxr-xr-x root/root 0 2020-01-02 00:53 ./
drwxr-xr-x root/root 0 2020-01-02 00:53 ./usr/
drwxr-xr-x root/root 0 2020-01-02 00:53 ./usr/sbin/
-rwxr-xr-x root/root 5864 2020-01-02 00:53 ./usr/sbin/amnimo-sample-app
drwxr-xr-x root/root 0 2020-01-02 00:53 ./usr/share/
drwxr-xr-x root/root 0 2020-01-02 00:53 ./usr/share/doc/
drwxr-xr-x root/root 0 2020-01-02 00:53 ./usr/share/doc/amnimo-sample-app/
-rw-r--r-- root/root 193 2020-01-02 00:53 ./usr/share/doc/amnimo-sample-app/README.Debian
-rw-r--r-- root/root 145 2020-01-02 00:53 ./usr/share/doc/amnimo-sample-app/changelog.gz
-rw-r--r-- root/root 1412 2020-01-02 00:53 ./usr/share/doc/amnimo-sample-app/copyright
3.3.3 パッケージのインストール/アンインストール #
生成したパッケージは、dpkgコマンドでインストール/アンインストールすることができます。
パッケージのインストール
パッケージファイル名を指定します。
インストールする前に、-s(シミュレーション)オプションを付けて実行し、削除されるパッケージ(The following packages will be REMOVED:)がないことを確認してください。理由は、このページの最後の「注意」を参照してください。
実行環境: エッジゲートウェイ
admin@amnimo:~$ sudo apt -s install /home/admin/amnimo-sample-app_1.0.0_arm64.deb
以下は、/home/admin配下にあるパッケージをインストールする例です。
実行環境: エッジゲートウェイ
admin@amnimo:~$ sudo apt install /home/admin/amnimo-sample-app_1.0.0_arm64.deb
インストールしたパッケージの確認
パッケージ名を指定します。
実行環境: エッジゲートウェイ
admin@amnimo:~$ apt list amnimo-sample-app
Listing... Done
amnimo-sample-app/now 1.0.0 arm64 [installed,local]
パッケージのアンストール
パッケージ名を指定します。
実行環境: エッジゲートウェイ
admin@amnimo:~$ sudo apt remove amnimo-sample-app
注意: パッケージのインストール・アンインストール時の注意
一部のUbuntuパッケージはアムニモのアプリケーションとの依存性があり、アンインストールすると連動してアムニモのアプリケーションが削除される場合があり、製品として必要な機能を失い、製品が動作しない恐れがあります。
以下はntpのパッケージをインストールする例です(ファームウェア Ver.1 の出力例)。
The following packages will be REMOVED:にアムニモのパッケージ(amnimo-cli、amnimo-meta-ag など)が表示された場合は、インストールを中止してください(Do you want to continue? [Y/n]に「n」を入力します)。事前にsudo apt -s install パッケージ名で確認できます。ntpパッケージはエッジゲートウェイのNTP機能を実現しているchronyパッケージと競合し、インストールするとchronyパッケージとともに依存しているアムニモのアプリケーションも削除されます。この場合、エッジゲートウェイは正常に起動できないようになります。実行環境: エッジゲートウェイ
admin@amnimo:~$ sudo apt install ntp Reading package lists... Done Building dependency tree Reading state information... Done ・・・ The following additional packages will be installed: libevent-core-2.1-7 libevent-pthreads-2.1-7 libopts25 sntp Suggested packages: ntp-doc The following packages will be REMOVED: amnimo-api amnimo-cli amnimo-gui amnimo-meta-ag amnimo-mobile amnimo-shell chrony libag-cfg libag-ctl The following NEW packages will be installed: libevent-core-2.1-7 libevent-pthreads-2.1-7 libopts25 ntp sntp 0 upgraded, 5 newly installed, 9 to remove and 0 not upgraded. Need to get 834 kB of archives. After this operation, 45.0 MB disk space will be freed. N: Ignoring file 'amnimo.list.staging' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extension Do you want to continue? [Y/n] n

注意: インストールしたパッケージは rootfs 領域に入るため、ファームウェアの全体更新で削除されます。全体更新の後も使う方法は『
補足: パッケージ管理システムの詳細については、Ubuntuのサイトで詳細を確認してください。