Armadilloフォーラム

VSCodeからインストールディスク作成がERRORとなる

maeda7690

2024年7月16日 15時04分

お世話になっております。
前田と申します。

Armadillo-640のインストールディスクを作成しようとしています。
VSCode(ABOSDE)で”make_installer_usb.swu”を作成し、インストールを行いましたが、
エラーとなってしまいます。
原因、またはその調査方法を教えていただけないでしょうか?

ABOSDEのログを添付します。

以上、よろしくお願いいたします。

ファイル ファイルの説明
error.log
コメント

at_dominique.m…

2024年7月17日 9時03分

maeda7690さん

お世話になっています、
マルティネです。

> VSCode(ABOSDE)で”make_installer_usb.swu”を作成し、インストールを行いましたが、
> エラーとなってしまいます。
> 原因、またはその調査方法を教えていただけないでしょうか?

VSCode からインストールディスクを生成する際に安全な物を作りたいので、ここでの質問が自動的に断られてインストールディスクが生成されませんでした:

{"stdout":"[INFO ] : SWUPDATE running :  [read_lines_notify] : WARNING: Could not remount the rootfs read-only, something might still be modifying it.\n"}
{"stdout":"[INFO ] : SWUPDATE running :  [read_lines_notify] : If rootfs changes while we copy it some data may be corrupted, consider rebooting first.\n"}
{"stdout":"[INFO ] : SWUPDATE running :  [read_lines_notify] : Continue anyway? [y/N]\n"}

エラーの後のメッセージで分かりにくくて申し訳ないですが、そのとおりに Armadillo を再起動すると成功するようになると思います。

このメッセージの原因としては、persist_file (rootfs の overlayfs のデータを永続化するコマンド)で何かのファイルを更新して、古いファイルがまだどこかでアクセスされている状態となっています。
再起動することでそういう古いファイルが完全に削除されますので、エラーがなくなります。

よろしくお願いします。

maeda7690

2024年7月17日 9時32分

> maeda7690さん
>
> お世話になっています、
> マルティネです。
>
> > VSCode(ABOSDE)で”make_installer_usb.swu”を作成し、インストールを行いましたが、
> > エラーとなってしまいます。
> > 原因、またはその調査方法を教えていただけないでしょうか?
>
> VSCode からインストールディスクを生成する際に安全な物を作りたいので、ここでの質問が自動的に断られてインストールディスクが生成されませんでした:
>

> {"stdout":"[INFO ] : SWUPDATE running :  [read_lines_notify] : WARNING: Could not remount the rootfs read-only, something might still be modifying it.\n"}
> {"stdout":"[INFO ] : SWUPDATE running :  [read_lines_notify] : If rootfs changes while we copy it some data may be corrupted, consider rebooting first.\n"}
> {"stdout":"[INFO ] : SWUPDATE running :  [read_lines_notify] : Continue anyway? [y/N]\n"}
> 

>
> エラーの後のメッセージで分かりにくくて申し訳ないですが、そのとおりに Armadillo を再起動すると成功するようになると思います。
>
> このメッセージの原因としては、persist_file (rootfs の overlayfs のデータを永続化するコマンド)で何かのファイルを更新して、古いファイルがまだどこかでアクセスされている状態となっています。
> 再起動することでそういう古いファイルが完全に削除されますので、エラーがなくなります。
>
> よろしくお願いします。

再起動は何度も試しているのですが、同じエラーになってしまいます。
どこかに古いファイルが残っていると言う事でしょうか?
それを確認する方法はありますか?

これを書いていて思ったのですが、
現在作っているシステムでは自動的にpersist_fileを使って永続化するような処理はありません。
ただ、自動起動のコンテナから最初にWebAPI経由で下記のようにしてホストに対して時計合わせを指示しています。
  curl -k -u :xxx  https://10.88.0.1:58080/api/time/ntp_config -X POST -d "servers=server 192.168.0.1 iburst" -d "initstepslew=5 192.168.0.1"
もしかしてこれでpersist_fileが呼ばれているのでしょうか?

maeda7690

2024年7月17日 10時42分

お世話になっております。
前田です

コンテナからのWebAPI経由の時計合わせを停止したところ、インストールディスクの作成が成功しました。

即時に時計を合わせたく、この方法を用いましたが、毎度ファイルの書き換えが行われるのはあまり好ましくないです。
他に、コンテナからchronydに即時に時計合わせを指示する方法はあるでしょうか?
ntpdateコマンドのような物があれば良いのですが...

以上、よろしくお願いします。

at_dominique.m…

2024年7月17日 11時41分

前田さん

お世話になっています、
マルティネです。

> ただ、自動起動のコンテナから最初にWebAPI経由で下記のようにしてホストに対して時計合わせを指示しています。
> もしかしてこれでpersist_fileが呼ばれているのでしょうか?

はい、コンフィグファイルを保存するために persist_file を実行します。
その場合はコンフィグファイルを書き換えた後にサービスを再起動しますのでそこで問題にならないと考えていましたが、問題の詳細を再度確認しようと思います。

> 即時に時計を合わせたく、この方法を用いましたが、毎度ファイルの書き換えが行われるのはあまり好ましくないです。

確かにそうですね…

> 他に、コンテナからchronydに即時に時計合わせを指示する方法はあるでしょうか?
> ntpdateコマンドのような物があれば良いのですが...

Armadillo 起動時の chronyd サービススタートにネットワーク接続ができた際、あるいはその後に初めてネットワーク接続ができた際に即時に時刻の取得を行っていますので、基本的には特に意識しなくていいと考えています。
コンテナで取得が確実にされていることを確認したい場合は "/api/time/ntp_info" の情報を取得して、ntp_server_ip が記載されている場合に同期ができていることになります(initstepslew ではなく本来の ntp の同期なので、chronyd サービスリスタート直後は数秒 null として帰ってきます)。

それを確認してループで何回か少し待つ実装では少々効率わるいですが、コンフィグファイルを置き換えるよりよさそうに見えます。いかがでしょうか?

よろしくお願いします。

maeda7690

2024年7月17日 13時19分

> 前田さん
>
> お世話になっています、
> マルティネです。
>
> > ただ、自動起動のコンテナから最初にWebAPI経由で下記のようにしてホストに対して時計合わせを指示しています。
> > もしかしてこれでpersist_fileが呼ばれているのでしょうか?
>
> はい、コンフィグファイルを保存するために persist_file を実行します。
> その場合はコンフィグファイルを書き換えた後にサービスを再起動しますのでそこで問題にならないと考えていましたが、問題の詳細を再度確認しようと思います。
>
> > 即時に時計を合わせたく、この方法を用いましたが、毎度ファイルの書き換えが行われるのはあまり好ましくないです。
>
> 確かにそうですね…
>
> > 他に、コンテナからchronydに即時に時計合わせを指示する方法はあるでしょうか?
> > ntpdateコマンドのような物があれば良いのですが...
>
> Armadillo 起動時の chronyd サービススタートにネットワーク接続ができた際、あるいはその後に初めてネットワーク接続ができた際に即時に時刻の取得を行っていますので、基本的には特に意識しなくていいと考えています。
> コンテナで取得が確実にされていることを確認したい場合は "/api/time/ntp_info" の情報を取得して、ntp_server_ip が記載されている場合に同期ができていることになります(initstepslew ではなく本来の ntp の同期なので、chronyd サービスリスタート直後は数秒 null として帰ってきます)。
>
> それを確認してループで何回か少し待つ実装では少々効率わるいですが、コンフィグファイルを置き換えるよりよさそうに見えます。いかがでしょうか?
>
> よろしくお願いします。

マルティネさん
返信ありがとうございます。

時計合わせの方法については今すぐには変更できないので、後ほど検討してみます。

インストールディスク作成に話を戻します。
現状、特定の条件でpersist_fileが実行されるようなアプリケーションが含まれている場合、
Armadillo実機ではインストールディスクを作る事が出来ないケースがあると認識したのですが、それであっているでしょうか。

それであれば、Debian版のようにATDE上でコンテナを含むインストールディスクを作る事はできるでしょうか?
 ※build-rootfsでできるのかと思ったのですが、わかりませんでした。

もしくは、
Armadillo実機でインストールディスクを作成する際に、オプション等で変分のチェックを行わないようにすることはできるでしょうか?

以上、よろしくお願いします。

at_dominique.m…

2024年7月17日 13時55分

前田さん

> 時計合わせの方法については今すぐには変更できないので、後ほど検討してみます。

了解しました。

> インストールディスク作成に話を戻します。
> 現状、特定の条件でpersist_fileが実行されるようなアプリケーションが含まれている場合、
> Armadillo実機ではインストールディスクを作る事が出来ないケースがあると認識したのですが、それであっているでしょうか。

はい、申し訳ないですがそうなります。
手動に実行する場合はこのワーニングを無視しても問題ないと考えていますが、「一応確認した方がいい」という状態なので自動的にはビルドできないようにしています。
(また、このエラーはそう簡単に発生する物ではないと認識していましたが、今回は意外でした。今後のアップデートで回避できる可能性もあります。)

> それであれば、Debian版のようにATDE上でコンテナを含むインストールディスクを作る事はできるでしょうか?
>  ※build-rootfsでできるのかと思ったのですが、わかりませんでした。

少しのためになりますが、build-rootfs でできます。
コンテナを含む場合は build-rootfs に直接に入れるのではなく、インストールの最後に swu を展開する形になります。
a600/image_installer/installer_swus ディレクトリを生成してそこに swu ファイルを置くと、インストールディスクで停止する前にインストールします。

ただし、そこまでするのであれば swu で Base OS + コンテナを展開する swu で armadillo に初期化風なアップデートをインストールした方がはやいと思いますが、どうでしょうか。

> もしくは、
> Armadillo実機でインストールディスクを作成する際に、オプション等で変分のチェックを行わないようにすることはできるでしょうか?

デフォルトno のyes/no 質問で VScode で実行する場合に yes を選べないだけなので、実機で実行する場合は特にオプションが不要です(逆に言えばチェックしないオプションはありません)

また、rootfs を btrfs に切り替えるとそちらで問題が発生しないので、以下の方法で切り替えるとこのエラーがなくなります:

1- 最新の ABOS の場合(cat /etc/atmark-release が「3.19.2-at.5」)

# B面を btrfs に変換します
armadillo:~# abos-ctrl rollback-clone --fstype btrfs
# B面に切り替えて再起動します
armadillo:~# abos-ctrl rollback --reboot
# 確認
armadillo:~# findmnt -no fstype /live/rootfs
btrfs

2- それ以前のバージョンであれば、何かの swu を 「MKSWU_ROOTFS_FSTYPE=btrfs swupdate -i file.swu」 でインストールするか swu のdesc ファイルに「swdesc_option ROOTFS_FSTYPE=btrfs」を記載するとインストール先が btrfs に変換されます。
一度 btrfs に切り替えたらずっと btrfs を使いますので一度だけでいいです。

よろしくお願いします。

maeda7690

2024年7月17日 15時55分

マルティネさん
返信ありがとうございます。

> > それであれば、Debian版のようにATDE上でコンテナを含むインストールディスクを作る事はできるでしょうか?
> >  ※build-rootfsでできるのかと思ったのですが、わかりませんでした。
>
> 少しのためになりますが、build-rootfs でできます。
> コンテナを含む場合は build-rootfs に直接に入れるのではなく、インストールの最後に swu を展開する形になります。
> a600/image_installer/installer_swus ディレクトリを生成してそこに swu ファイルを置くと、インストールディスクで停止する前にインストールします。
>
 なるほど、コンテナはswuでインストールするのですね。
 ついでにお聞きしたいのですが、/var/app/volumesにファイルを配置する場合はどのようにすれば良いでしょうか?
 一度、resourcesにディレクトリイメージを置いてみたのですがうまくできませんでした。

> ただし、そこまでするのであれば swu で Base OS + コンテナを展開する swu で armadillo に初期化風なアップデートをインストールした方がはやいと思いますが、どうでしょうか。

 確かにそうなのですが...
 今開発している物には現行品(Debian版)があるので、
 インストールする環境や手順は変えたくないと言う気持ちがあります。

> > もしくは、
> > Armadillo実機でインストールディスクを作成する際に、オプション等で変分のチェックを行わないようにすることはできるでしょうか?
>
> デフォルトno のyes/no 質問で VScode で実行する場合に yes を選べないだけなので、実機で実行する場合は特にオプションが不要です(逆に言えばチェックしないオプションはありません)
>
 実機で実行とはどのように行えばよいのでしょうか。手順を教えていただけると助かります。
 「abos-ctrl make-installer」による手順は、Armadilloからインターネットに接続できない環境のため、できませんでした。

> また、rootfs を btrfs に切り替えるとそちらで問題が発生しないので、以下の方法で切り替えるとこのエラーがなくなります:
>
> 1- 最新の ABOS の場合(cat /etc/atmark-release が「3.19.2-at.5」)
>

> # B面を btrfs に変換します
> armadillo:~# abos-ctrl rollback-clone --fstype btrfs
> # B面に切り替えて再起動します
> armadillo:~# abos-ctrl rollback --reboot
> # 確認
> armadillo:~# findmnt -no fstype /live/rootfs
> btrfs
> 

> 2- それ以前のバージョンであれば、何かの swu を 「MKSWU_ROOTFS_FSTYPE=btrfs swupdate -i file.swu」 でインストールするか swu のdesc ファイルに「swdesc_option ROOTFS_FSTYPE=btrfs」を記載するとインストール先が btrfs に変換されます。
> 一度 btrfs に切り替えたらずっと btrfs を使いますので一度だけでいいです。
>
 こちらは試してみたいと思います。

何度も申し訳ありません。
以上、よろしくお願いします。

at_dominique.m…

2024年7月17日 16時20分

前田さん、

マルティネです。

>  ついでにお聞きしたいのですが、/var/app/volumesにファイルを配置する場合はどのようにすれば良いでしょうか?
>  一度、resourcesにディレクトリイメージを置いてみたのですがうまくできませんでした。

そうですね、rootfs に展開されるだけですので /var/app/volumes をマウントすると見えなくなりますね…
同じく swu でインストールしていただければ正しい一致に配置されます。
(ちなみに、インストールディスクでの swu のインストールは特別で、swu をインストールした後に再起動しませんので、
00_initial_setup.swu 10_volumes_file.swu 20_container.swu みたいな名前にすれば順番にインストールされます)

>  今開発している物には現行品(Debian版)があるので、
>  インストールする環境や手順は変えたくないと言う気持ちがあります。

了解しました。
製造はインストールディスクを使うことで全く問題ないです。
make-installer よりイメージの内容を把握できていいと思います。

installer_swus ディレクトリについてドキュメンテーションがなくてすみません。

>  実機で実行とはどのように行えばよいのでしょうか。手順を教えていただけると助かります。
>  「abos-ctrl make-installer」による手順は、Armadilloからインターネットに接続できない環境のため、できませんでした。

Armadillo からインターネットをアクセスできない場合はあらかじめイメージファイルをダウンロードすれば実行できます。
zip ファイルをそのまま USB メモリなどに展開して、baseos-600-installer-[version].img を出力ファイルとして設定すれば「イメージをそのまま使いますか?」という質問に ok すれば(デフォルト)インストールされます。

armadillo:~# abos-ctrl make-installer --output /path/to/baseos-600-installer-3.19.2-at.5.img
Checking if /mnt/baseos-600-installer-3.19.2-at.5.img-in-progress can be used safely...
An installer system is already available on image file. Use it? [Y/n]
 
Would you like to create a windows partition?
That partition would only be used for customization script at the end of
install, leave at 0 to skip creating it.
Custom partition size (MB, [0] or 16 - 408): 
(省略)

よろしくお願いします

maeda7690

2024年7月17日 16時37分

マルティネさん
ありがとうございます。

凡そ理解できました。
これから試してみます。
また何かありましたらよろしくお願いいたします。