ブログ

Armadillo Base OS:コンテナ内でUSBメモリやSDカードを使用する方法

at_shinya.matsumoto
2022年12月22日 16時14分

本ブログはArmadillo Base OS搭載製品で、コンテナ内でUSBメモリやSDカードを使用する方法を紹介します。
常時ストレージとして使う場合を想定して自動マウントする方法も併せて紹介します。

コンテナへの権限付与について

コンテナを使用する際にはコンテナにアクセス権限を付与しますが、脆弱性が見つかった場合などセキュリティリスクを
考慮して、この権限付与は必要最低限に留めて置く事を推奨致します。本ブログでは外部ストレージにアクセスする際に
必要最低限のアクセス権限(ボリュームマウントのみ)で実行する方法をご説明します。

実施手順

1.USBメモリ/SDカードを自動マウントする

Armadillo起動時に既に挿入されているデバイスについてはfstabのみで自動マウントする事が可能です。
ただし、使用するデバイスの認識するタイミングがfstabの処理よりも遅くなる場合はマウントされません。
その場合は、デバイスを挿入(認識)したときに自動マウントする様に設定する事で対応出来ます。

ここでは例として、以下の様に設定します。デバイス名は適宜調整下さい。
SDカード(/dev/mmcblk1p1):Armadillo起動時にvfatで自動マウント
USBメモリ(/dev/sda1):挿入(認識)時にvfatで自動マウント

fstabに最後の2行を追加
[armadillo]# cat /etc/fstab
/dev/root       /                               ext4    ro                              0 0
tmpfs           /tmp                            tmpfs   nosuid,nodev                    0 0
/dev/mmcblk2p3  /var/log                        ext4    defaults,noatime                0 0
<中略>
/dev/mmcblk1p1  /var/app/volumes/sd             vfat    defaults                        0 0   //SDカードのマウント例
/dev/sda1       /var/app/volumes/usb            vfat    noauto                          0 0   //USBメモリのマウント例(noautoにしておく)

編集したfstabを永続化
[armadillo]# persist_file /etc/fstab

これでSDカード(/dev/mmcblk1p1)は起動時に/var/app/volumes/sd にvfat形式でマウントします。
USBメモリはこの時点ではnoauto指定している為、起動時に自動マウントしません。

次に、USBメモリを挿入(認識)したときに自動マウントする設定を行います。

udevのrulesファイルを作成します。(ファイル名の99は実行される順番、usb_memは任意の名前)
[armadillo]# cat /etc/udev/rules.d/99-usb_mem.rules
KERNEL=="sda1",SUBSYSTEM=="block",ACTION=="add", RUN+="/bin/mount /var/app/volumes/usb"

追加したrulesファイルを永続化~有効化します。
[armadillo]# persist_file /etc/udev/rules.d/99-usb_mem.rules
[armadillo]# udevadm control -R

以上でストレージの自動マウントの設定は完了です。
armadilloをリブートした後にmountコマンド実行で、SDカードとUSBメモリが自動マウントされている事が
確認できます。

2.自動マウントしたディレクトリをコンテナでマウントする

次にコンテナ内から上記でマウントしたデバイスにアクセスします。
SDカードは"/var/app/volumes/sd"に、USBメモリは”/var/app/volumes/usb”にマウントしている為、
コンテナのコンフィグファイルのボリュームマウントを下記のように設定します。

コンテナ"test"のコンフィグファイルを作成(test.confのtest部分がコンテナ名)
armadillo:~# cat /etc/atmark/containers/test.conf
set_image debian:bullseye
# SD and USB storage mount
add_volumes /var/app/volumes/sd:/root/sd   //SDを/root/sdにマウント
add_volumes /var/app/volumes/usb:/root/usb   //USBを/root/usbにマウント
add_args -it
set_autostart no
set_command /bin/bash

test.confの永続化
[armadillo]# persist_file /etc/atmark/containers/test.conf

コンテナ"test"の起動
[armadillo]# podman_start test
Starting 'test'
0c5204e425d99348704a6ab86e622ed6141013f79d82398b75b9f9ef19ae3dae

コンテナ内に入る
[armadillo]# podman attach test
[container]# cd
[container]# ls
sd  usb
[container]# ls sd
sd.txt   //分かりやすくする為、予めSDカードにSDと分かるテキストを配置
[container]# ls usb
usb.txt   //分かりやすくする為、予めUSBメモリにUSBと分かるテキストを配置

以上で、コンテナ内からSDカード及びUSBメモリにアクセスする事が出来ました。
ストレージを外す場合はumountまたはpoweroff後に取り外してください。

注意事項

ストレージに書き込む場合は必ずデバイスがマウントされている事を確認してから書き込みをする様にしてください。
(例:上記の様なSD、USBが分かる様なファイルを配置する等)
マウント出来ていない場合、Armadillo内にデータを書き込む事になり、eMMCの容量オーバーやメモリ不足に陥ります。