ブログ

Armadillo Base OS でファイルやパッケージの変更・追加・削除を永続化する方法

at_shiita.ishigaki
2022年6月13日 8時28分

Armadillo BaseOS ではルートファイルシステムに overlayfs を採用しています。
そのため、ファイルを変更した後 Armadillo-IoT G4 の電源を切ると変更内容は保持されません。
rootfs の変更内容を保持するには、変更したファイルに対して persist_file コマンドを使用します。
persist_fileコマンドの使い方を以下に示します。

[armadillo ~]# persist_file -h
Usage: /usr/bin/persist_file [options] file [more files...]

Mode selection:
  (none)         single entry copy
  -d, --delete   delete file
  -l, --list     list content of overlay
  -a, --apk      apk mode: pass any argument after that to apk on rootfs
  -R, --revert   revert change: only delete from overlay, making it
                 look like the file was reverted back to original state

Copy options:
  -r, --recurse  recursive copy (note this also removes files!)
  -p, --preserve make the copy persist through baseos upgrade
                 by adding entries to /etc/swupdate_preserve_files
  -P, --preserve-post   same, but copy after upgrade (POST)

Delete options:
  -r, --recurse  recursively delete files

Common options:
  -v, --verbose  verbose mode for all underlying commands

Note this directly manipulates overlayfs lower directories
so might need a reboot to take effect

ファイルの変更を永続化する方法を以下に示します。
※ここでは例として、hoge・fugaという2つのファイルを作成し、変更を永続化しています。

[armadillo ~]# touch hoge
[armadillo ~]# echo fuga > fuga
[armadillo ~]# persist_file hoge fuga

ファイルの削除を行った場合も永続化を行う場合は、persist_fileコマンドを実行する必要があります。
※ここでは例として、piyoというファイルを作成し、変更を永続化してから、ファイルを削除して、変更を永続化しています。

[armadillo ~]# touch piyo
[armadillo ~]# persist_file piyo
[armadillo ~]# rm piyo
[armadillo ~]# persist_file piyo

ディレクトリ内全てのファイルの変更を永続化するには -r オプションを使用します。

[armadillo ~]# mkdir dir
[armadillo ~]# touch dir/tmp1 dir/tmp2 dir/tmp3
[armadillo ~]# persist_file -r dir/

永続化したファイルを確認するには -l オプションを使用します。

[armadillo ~]# persist_file -l
directory          /
directory          /root
opaque directory   /root/dir
regular empty file /root/dir/tmp3
regular empty file /root/dir/tmp2
regular empty file /root/dir/tmp1
regular file       /root/fuga
whiteout           /root/piyo		#削除したファイルはwhiteoutと表示される
regular empty file /root/hoge
regular file       /root/.ash_history

パッケージの変更に対しても、永続化を行う場合はpersist_fileコマンドを使用する必要があります。
パッケージの変更には -a オプションを使用します。 -a オプションはapkコマンドと同様に扱うことができます。

[armadillo ~]# persist_file -a add strace	#パッケージの追加
fetch https://download.atmark-techno.com/alpine/v3.15/atmark/aarch64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/main/aarch64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/community/aarch64/APKINDEX.tar.gz
(1/3) Installing fts (1.2.7-r1)
(2/3) Installing libelf (0.185-r0)
(3/3) Installing strace (5.14-r0)
Executing busybox-1.34.1-r5.trigger
OK: 217 MiB in 205 packages
Install succeeded, but might not work in the running system
Please reboot if installed program does not work

[armadillo ~]# persist_file -a del starce	#パッケージの削除
persist_file -a del strace
(1/3) Purging strace (5.14-r0)
(2/3) Purging libelf (0.185-r0)
(3/3) Purging fts (1.2.7-r1)
Executing busybox-1.34.1-r5.trigger
OK: 215 MiB in 202 packages
Install succeeded, but might not work in the running system
Please reboot if installed program does not work

armadillo:~# persist_file -a upgrade swupdate	#パッケージのアップデート
OK: 217 MiB in 205 packages
Install succeeded, but might not work in the running system
Please reboot if installed program does not work