Armadilloフォーラム

FTPでファイルの変更があった際の自動コミットのやり方

koike3

2023年6月20日 11時41分

お世話になっております。

現在、Armadillo-IoT G4でFTPサーバの構築を行っています。
コンテナ名:ftp_example
イメージ名:ftp_example:v1.0.0

ファイルの変更をした際に、Armadilloの電源を落とすと、変更が消えてしまうことで困っています。

FTPでファイルの変更があった際に自動でイメージをコミットする方法はありますでしょうか。

ftp_example.confの中身は以下の通りになります。

set_image localhost/ftp_example:v1.0.0
set_command sleep infinity
add_ports 21:21 21100-21110:21100-21110
add_args --env=PASV_ADDRESS=192.168.100.228
set_command podman exec -it ftp_example sh
set_command vsftpd /etc/vsftpd/vsftpd.conf

コメント

at_dominique.m…

2023年6月20日 12時23分

koike3 さん

お世話になっています、
アットマークテクノのマルティネです。

> ファイルの変更をした際に、Armadilloの電源を落とすと、変更が消えてしまうことで困っています。
>
> FTPでファイルの変更があった際に自動でイメージをコミットする方法はありますでしょうか。

ボリュームを使ってください。

コンテナを起動する度に作り直していますので、開発のための「abos-ctrl podman-storage --disk」モードでもデーターが永続されません。
podman のストレージが壊れやすいため --tmpfs モードで運用する想定ですので、ボリュームで必要なディレクトリだけを保存する仕組みです。

例えば、コンテナのコンフィグファイルに「add_volumes /var/app/volumes/ftp_data:/data」を追加するとコンテナ内に /data ディレクトリに永続したいデーターを保存できます。

 

ちなみに、コンフィグファイルも「add_volumes vsftpd:/etc/vsftpd」等で /etc/vsftpd ディレクトリの中身をコンテナイメージ外に運用することも便利かもしれません。コンフィグファイルを変更する度にコンテナを作り直すのは手間ですので。
/var/app/volumes と相対パスのディレクトリの違いはマニュアルの「9.4.2.6. コンテナの変更を保存する」に説明されてます:
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

 

よろしくお願いします。

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

> 例えば、コンテナのコンフィグファイルに「add_volumes /var/app/volumes/ftp_data:/data」を追加するとコンテナ内に /data ディレクトリに永続したいデーターを保存できます。

ftp_example.confにadd_volumeを追加しましたが、ファイルの変更が保存されません。
もう一度、ご教授いただければ幸いです。

at_dominique.m…

2023年6月20日 13時28分

koike3さん

マルティネです。

> ftp_example.confにadd_volumeを追加しましたが、ファイルの変更が保存されません。

/etc 等の rootfs の部分も、コンテナ同様に overlayfs を使って変更はメモリ上だけに保存しています。
SWU でファイルを新しく転送するか、直接に編集するばあいは「persist_file /etc/atmark/containers/ftp_example.conf」コマンドで永続化してください。

よろしくお願いします。

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

> /etc 等の rootfs の部分も、コンテナ同様に overlayfs を使って変更はメモリ上だけに保存しています。
> SWU でファイルを新しく転送するか、直接に編集するばあいは「persist_file /etc/atmark/containers/ftp_example.conf」コマンドで永続化してください。

先ほどの質問をした時点で、persist_fileコマンドでconfファイルの永続化は完了しています。

FTPで変更したファイルなどは、手動で保存する必要があるということでしょうか。

at_dominique.m…

2023年6月20日 15時26分

koike3さん

> 先ほどの質問をした時点で、persist_fileコマンドでconfファイルの永続化は完了しています。

何の変更に対したコメントを理解できずすみませんでした。
コンフィグではなく、ftp のデーターが消えてしまうということですね。

> FTPで変更したファイルなどは、手動で保存する必要があるということでしょうか。

ボリューム内であれば自動的に保存されるはずです。

先ほどの例では「/data」のディレクトリだけが保存されますので、そのパスを vsftpd のデーターディレクトリに合わせてますでしょうか。
また、いい忘れてましたがコンフィグの変更を適用するために再起動か「podman_start ftp_example」によるコンテナの再起動が必要です。

確認のため、Armadillo からコンテナに入って df コマンドを実行すればちゃんとマウントされていることを確認できます。

以下の様に /dev/mmcblk2p5 がマウントされるはずです:

armadillo:~# podman exec -ti ftp_example df 
Filesystem     1K-blocks    Used Available Use% Mounted on
overlay          6778860 4094460   2212964  65% /
tmpfs              65536       0     65536   0% /dev
/dev/mmcblk2p5   6778860 4094460   2212964  65% /data
(省略)

よろしくお願いします。

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

長々と申し訳ございません。

vsftpdを起動して、ファイルを送信すると、/home/ユーザー名のディレクトリにファイルが受信されますが、受信先を/dataに変える必要があるということでしょうか。
その場合、起動時に読み込まれるディレクトリを/dataに変更することはできますでしょうか。

at_dominique.m…

2023年6月20日 15時57分

マルティネです。

> vsftpdを起動して、ファイルを送信すると、/home/ユーザー名のディレクトリにファイルが受信されますが、受信先を/dataに変える必要があるということでしょうか。
> その場合、起動時に読み込まれるディレクトリを/dataに変更することはできますでしょうか。

vsftpd で使われていたコンフィグが分からないため /data を「add_volumes」コマンドの引数に例として使いましたが、その引数をコンフィグに合わせればと思います。

書き方は add_volumes [armadillo側ディレクトリ]:[コンテナ側ディレクトリ] で、armadillo側としては /var/app/volumes が保存されるディレクトリになっています。

一つだけご注意ください: コンテナ内にすでにデーターがあった場合はボリュームによって見えなくなります(例えば、コンテナ側のディレクトリを /home にした場合にユーザーのホームディレクトリが消えるように見えます)。
その場合はボリュームを追加する前にボリュームの保存先にコピーしておいてください。以下の様なコマンドでできます。

armadillo:~# podman mount ftp_example
/var/lib/containers/storage/overlay/a78ec169e236d19cbba1311529e90e34c25b55c2949d9587803b131b9a883439/merged
armadillo:~# cp -a $(podman mount ftp_example)/home/. /var/app/volumes/ftp_data

よろしくお願いします

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

> vsftpd で使われていたコンフィグが分からないため /data を「add_volumes」コマンドの引数に例として使いましたが、その引数をコンフィグに合わせればと思います。
>
> 書き方は add_volumes [armadillo側ディレクトリ]:[コンテナ側ディレクトリ] で、armadillo側としては /var/app/volumes が保存されるディレクトリになっています。

コンテナ側のディレクトリの場所がいまいち理解できていないです。
vsftp.confがある場所をコンテナ側のディレクトリに指定すればよいのでしょうか。

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

解決しました。
長々と失礼しました。
ご回答ありがとうございました。