ブログ

Armadillo Base OS:ユーザ独自にパッケージをインストールしたArmadillo Base OSをSWUpdateでアップデートする

at_takuma.fukuda
2022年11月2日 16時15分

はじめに

Armadillo Base OSへのパッケージインストールについて

Armadillo Base OSでは、アプリケーションをコンテナ上で動作させる事が原則であるため、
基本的にはArmadillo Base OS上にユーザが直接パッケージを追加して使用する必要はありません。
Armadillo Base OSに直接パッケージを追加しなければならない場合は、

[armadillo]# persist_file -a add <パッケージ名>

と実行いただくことでパッケージを永続的にインストールすることが出来ます。

アップデートについて

長期的にシステムを運用いただく上で、OSのアップデートは不可欠です。
Armadillo Base OSについては、簡単にアップデート出来るよう当社にてイメージファイルをご用意しています。
SWUpdateによるアップデートでは、下記ファイルにて明示されている以外のファイルは保持されず、削除・上書きされてしまいます。

/etc/swupdate_preserve_files

パッケージについても同様で、アップデートを行うイメージファイルに含まれていないパッケージは削除されてしまいます。
そこで、パッケージを維持しつつアップデートを行うには、以下のいずれかが必要となります。

  • 新しいバージョンのArmadillo Base OSに当該のパッケージをインストールした状態のイメージファイルを作成する
  • Armadillo Base OSを更新した後、当該のパッケージをインストールし直す

前者については、当社から配布しているAlpine Linuxルートファイルシステム ビルドツールを使用する事で実現できます。

具体的な手順は下記をご参考下さい。
9.4.3.2. Alpine Linux ルートファイルシステムをカスタマイズする
後者については、SWUpdateによるアップデート時に都度パッケージのインストールを行うように設定することが出来ます。

SWUpdateでパッケージインストールを行う

cifs-utilsをインストールする場合を例にご説明します。

Armadilloがインターネットに接続されている場合

下記のような内容のdescファイルを作成し、swuファイルをビルドすると、 そのswuファイルを使ったSWUpdate実行時にパッケージのインストールが行われます。

swdesc_command --version extra_os.packages[任意のバージョン表記] "apk update && apk add cifs-utils"

Armadillo Base OSのアップデートとパッケージのインストールを一度に実行できた方が効率が良いので、以下のようなdescファイルとします

[ATDE]# cat pkginstall1.desc
boot image can be generated with atmark imx-boot script
swdesc_boot imx-boot_armadillo_x2_2020.04-at9
 
# base OS is a tar that will be extracted on a blank filesystem,
# after copying just a few key config files.
#
# OS updates are only installed if version is greater than previous update
# so if you install your own updates atmark-techno provided Armadillo Base OS
# updates might not get installed
swdesc_tar "baseos-x2-3.16.2-at.4.tar.zst" \
           --version base_os 3.16.2-at.4.1\
           --preserve-attributes
 
swdesc_command --version extra_os.packages 1.1 "apk update && apk add cifs-utils"

Armadilloがインターネットに接続されていない場合

事前にパッケージのインストールに必要なファイルをダウンロードしておき、swuイメージに含める必要があります。 まずはインターネットと接続されているArmadillo-IoT G4実機上にて以下のコマンドを実行してください。

[armadillo]# apk fetch -R <パッケージ名>

コマンド実行するとカレントディレクトリにファイルがダウンロードされますので、 専用のディレクトリを事前に作成してその中でコマンドを実行するようにしてください。

[armadillo]# mkdir ciifs(任意のディレクトリ名)
[armadillo]# cd cifs
[armadillo]#  apk fetch -R cifs-utils(インストールしたいパッケージ)
Downloading gnutls-3.7.7-r0
Downloading libcap-2.64-r0
Downloading zlib-1.2.12-r3
Downloading libffi-3.4.2-r1
Downloading libcom_err-1.46.5-r0
Downloading keyutils-libs-1.6.3-r1
Downloading samba-util-libs-4.15.7-r0
Downloading libssl1.1-1.1.1q-r0
Downloading gmp-6.2.1-r2
Downloading talloc-2.3.3-r1
Downloading krb5-conf-1.0-r2
Downloading cifs-utils-6.15-r0
Downloading libcrypto1.1-1.1.1q-r0
Downloading p11-kit-0.24.1-r0
Downloading krb5-libs-1.19.3-r0
Downloading nettle-3.7.3-r0
Downloading tevent-0.11.0-r1
Downloading libverto-0.3.2-r0
Downloading libunistring-1.0-r0
Downloading musl-1.2.3-r0
Downloading libwbclient-4.15.7-r0
Downloading libtasn1-4.18.0-r0

ダウンロードしたファイル一式をディレクトリごとtarコマンドでアーカイブ化しておきます。

[armadillo]# tar -czvf cifs.tgz /root/cifs

アーカイブファイルをATDEに移動させ、以下のようなdescファイルを作成してSWUファイルをビルドします。

[ATDE]# cat pkginstall2.desc
# boot image can be generated with atmark imx-boot script
swdesc_boot imx-boot_armadillo_x2_2020.04-at9
 
# base OS is a tar that will be extracted on a blank filesystem,
# after copying just a few key config files.
#
# OS updates are only installed if version is greater than previous update
# so if you install your own updates atmark-techno provided Armadillo Base OS
# updates might not get installed
swdesc_tar "baseos-x2-3.16.2-at.4.tar.zst" \
           --version base_os 3.16.2-at.4.1\
           --preserve-attributes
 
 
swdesc_files --version extra_os.packages 1.1 --dest /root "cifs.tgz"
swdesc_command --version extra_os.packages 1.1 "tar -xzvf /root/cifs.tgz -C /root \
 && apk add --force --no-network /root/cifs/*.apk && rm -r /root/cifs && rm /root/cifs.tgz"

インストールされているかを確認する

apk listコマンドを実行して、Armadillo Base OSにインストールされているパッケージの一覧が表示します。
grepコマンドで表示内容を絞り込み、自分のインストールしたパッケージが含まれていることを確認しましょう。
以下のようにパッケージ名が表示されていればインストールされています。

[armadillo]# apk list | grep cifs
cifs-utils-6.15-r0 aarch64 {cifs-utils} (GPL-2.0-or-later) [installed]