Armadilloフォーラム

aptとwgetコマンド実行時にRead-only file systemというエラーが出て失敗してしまう。

ysugie

2024年7月19日 19時31分

Base OS以上でwgetやaptコマンドを実行すると以下にようなエラーが発生し、失敗してしまいます。
回避策を教えてください。
armadillo:/home/atmark# apt update
ERROR: Unable to lock database: Read-only file system
ERROR: Failed to open apk database: Read-only file system

尚、インターネットは問題なく接続できることを確認しています。

コメント

koga

2024年7月21日 11時17分

アットマークテクノの古賀(休日モード)です。

ysugieさん:
>Base OS以上でwgetやaptコマンドを実行すると以下にようなエラーが発生し、失敗してしまいます。
>回避策を教えてください。
>armadillo:/home/atmark# apt update
>ERROR: Unable to lock database: Read-only file system
>ERROR: Failed to open apk database: Read-only file system
>
>尚、インターネットは問題なく接続できることを確認しています。

上では、apt コマンドを実行した時の出力しか示されていませんが、wget を実行した場合は、どのようなエラーになるのでしょうか?
また、apt コマンドは Armadillo Base OS に存在していないのですが、ご自分でインストールされたのでしょうか?
さて、「回避策」について、以下に説明します。

Armadillo Base OS (ABOS) では、Debian や Ubuntu の apt に相当するパッケージマネージャは apk です。apk は、ABOS がベースにしている Alpine Linux のパッケージマネージャです:
 https://kleinblog.net/alpine-apk-cmd
 https://blog.stormcat.io/post/entry/alpine-entry-apk/
 https://blog.kasei-san.com/entry/2020/08/25/084430
 https://wiki.alpinelinux.org/wiki/Comparison_with_other_distros
以下のコマンドであればエラーしないはずですので、試してみてください:

armadillo:/home/atmark# apk update

さて、apt をお使いになろうとしていらっしゃるということは、何らかのパッケージをインストールしてお使いになりたいのだと思います。
ABOS では、提供していないパッケージを ABOS 上に直接インストールすることは推奨しておらず、追加パッケージやアプリケーション用のコンテナを作ってコンテナにインストールして使うことを推奨しています。
これは、セキュリティの向上とアプリケーション用のルートファイルシステムの可搬性向上のための方策です。
 https://armadillo.atmark-techno.com/guide/armadillo-base-os

apt を使ってパッケージをインストールしたい場合は、まず Debian のコンテナを作り、Debian コンテナで apt を実行してください。
Armadillo-IoT G4 用に Debian 11 (bullseye) のコンテナイメージを提供していますので、それをダウンロードして使うのが簡単です。
 https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g4…
以下に、Debian 11 コンテナで bash を起動するまでの手順を示します:

(1) Debian 11 のコンテナイメージをダウンロードする

armadillo:~# cd /var/app/volumes
armadillo:/var/app/volumes# wget https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/container/at-debian-image-v1.0.11.tar

(2) ダウンロードしたコンテナイメージをコンテナエンジン(podman)にロードする

armadillo:/var/app/volumes# abos-ctrl podman-storage --disk
armadillo:/var/app/volumes# podman load -i at-debian-image-v1.0.11.tar
armadillo:/var/app/volumes# abos-ctrl podman-storage --tmpfs --cleanup=copy

(3) Debian 11 のコンテナを起動時に自動作成・起動する設定ファイルを作成する(設定ファイルのサンプルをコピーして永続化)

armadillo:/var/app/volumes# cd /etc/atmark/containers
armadillo:/etc/atmark/containers# cp at-debian-image.conf.example at-debian-image.conf
armadillo:/etc/atmark/containers# persist_file at-debian-image.conf

(4) Debian コンテナを作成・起動して bash を起動

armadillo:/etc/atmark/containers# podman_start at-debian-image
armadillo:/etc/atmark/containers# podman exec -it ad-debian-image /bin/bash

Debian コンテナの bash が起動したら、apt コマンドを実行してみてください。期待通りに動作するはずです。
なお、apt コマンドで Debian コンテナにインストールしたパッケージは、ABOS を再起動すると消えてしまいます。つまり、コンテナのルートファイルシステムに加えた変更は、再起動時に消えてしまいます。
コンテナのルートファイルシステムに加えた変更を保存するには、マニュアルの「コンテナの基本的な動作」の節にある、「コンテナの変更を保存する」で説明している podman commit コマンドを使います:
 https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

以下に、apt コマンドで Debian コンテナにパッケージをインストールした後、コンテナのルートファイルシステムに加わった変更をコンテナイメージに保存する手順を示します:

(5) bash を終了して Debian コンテナを停止した後、コンテナの変更内容をコンテナイメージに保存する

root@0c2d3d2a757a:~# exit
armadillo:/etc/atmark/containers# podman stop at-debian-image
armadillo:/etc/atmark/containers# podman commit at-debian-image localhost/at-debian-image:latest

(6) コンテナイメージの保存内容を永続化する

armadillo:/etc/atmark/containers# abos-ctrl podman-storage --disk --cleanup=copy
armadillo:/etc/atmark/containers# abos-ctrl podman-storage --tmpfs --cleanup=copy

こうすれば、これ以後 ABOS を再起動しても apt でコンテナにインストールした内容が失われず、'podman exec -it ad-debian-image /bin/bash' でコンテナの bash を起動すれば、Debian コンテナにインストールしたパッケージを Debian コンテナ上で対話操作できます。

その他の使い方については、マニュアルの「コンテナ」をご覧になってみてください:
 https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

以上、参考になりましたら幸いです。