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
コメント
koike3
at_dominique.m…
koike3
お世話になっております。
koike3です。
> /etc 等の rootfs の部分も、コンテナ同様に overlayfs を使って変更はメモリ上だけに保存しています。
> SWU でファイルを新しく転送するか、直接に編集するばあいは「persist_file /etc/atmark/containers/ftp_example.conf
」コマンドで永続化してください。
先ほどの質問をした時点で、persist_fileコマンドでconfファイルの永続化は完了しています。
FTPで変更したファイルなどは、手動で保存する必要があるということでしょうか。
at_dominique.m…
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
at_dominique.m…
マルティネです。
> 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
お世話になっております。
koike3です。
> vsftpd で使われていたコンフィグが分からないため /data を「add_volumes」コマンドの引数に例として使いましたが、その引数をコンフィグに合わせればと思います。
>
> 書き方は add_volumes [armadillo側ディレクトリ]:[コンテナ側ディレクトリ]
で、armadillo側としては /var/app/volumes が保存されるディレクトリになっています。
コンテナ側のディレクトリの場所がいまいち理解できていないです。
vsftp.confがある場所をコンテナ側のディレクトリに指定すればよいのでしょうか。
koike3
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…
よろしくお願いします。