WinSCPで更新したプログラムの更新日付が変わらない ~プログラム研究室~


 こんにちは!
 ナビゲータのEVEです。
データ.jpg
 本日憂鬱なことがあり、だらだらと過ごしてしまいました。
 まっ、こういう日もあります。

[障害報告]
 ということで、今日は、Studyingの問題数問解いただけで、あまり、開発のほうは手付かずなのですが、ここ数日やっていて問題があった点について報告します。
 Prototype EVEでは、データベースだけでなく、ディレクトリ及びファイルについても管理システムから直接アクセスできるようなインターフェースを用意しています。分かりやすく話すと、Windowsにインストールされている、エクスプローラーのWeb版です。
 それを、今回データベース管理システムを修正するついでに動かしてみたのですが、動かない。アクセス権エラーになります。そういえば、現在のテスト環境をVMWare上で構築したとき、WinSCPでただアップロードしただけでした。それでは、アクセス権エラーになるはずです。
 そのエラーの対応策として、フォルダ・ファイルの所有権をApacheに変更し、アクセス権を所有者及びグループに属するユーザーにフルアクセスできるように変更しました。
 これで、問題がなくなったと思ったのですが、WinSCPでサーバーのファイルを直接修正しようとするとエラーになります。エラーになった後、ファイルを閉じて再表示すると内容が変わっているところからどうも更新はできているようです。
 メッセージをよく見ると、タイムスタンプエラーとなっています。

[インターネットで調べてみると・・・]
 とりあえず、どうしてなのか知識がないので、インターネットで調べまくりました。そして、分かったこと・・・。Linuxってタイムスタンプの更新は所有者しかできないらしい???ただ、ChatGPTに質問すると、そんなことはありませんという解答がありました???現に、ファイルに対する権限を所有者と同じものを持っていて、WinSCPではタイムスタンプを更新しない設定にしてくださいという案内がきています。
 じゃ、ということで、WinSCPでroot権限でログインできないのか調べたところ、できないようですね・・・。セキュリティ的には合格ですが使い勝手が悪すぎます・・・。

[ChatGPTとの対話]
 原因が分からないので、引き続きChatGPTと対話をしてみました。ChatGPTが考える原因に、以下の3つを上げています。


❶ファイルシステムの設定の問題
❷WinSCPの設定の問題
❸ファイルの所有者や権限の問題

 ❷について調査をすると、WinSCPからは「ファイルのタイムスタンプの更新をしない設定にすればエラーになりません」っと回答がありました。現在は❷の設定で運用しています。手順としては、以下の通りです。

1)[メニュー]をクリックする
2)表示したメニューから[オプション]を選択
3)表示した画面から[環境設定]を選択
4)(左画面)[転送]を選択
5)(右画面テキストボックス)[デフォルト]を選択
6)(右画面)[編集(E)]を選択
7)[共通設定]を選択
8)タイムスタンプを保存する(M)からチェックボックスを外す

以上の操作によりエラーメッセージは出力されなくなります。但し、タイムスタンプは変更されません。
 ❸については、ログインするユーザーに、Apacheの権限、Ubuntuでは、www-dataなのですが、そのグループを追加しています。
 では、問題は❶でしょうか?

[タイムスタンプを更新したい]
 やはりタイムスタンプを更新したいということで、❶について深掘りしてみました。問題は、ext4というファイルシステムを採用していないとこのような可能性があるようです。では、ext4とはどういうファイルシステムなのでしょうか?ChatGPTに聞いてみました。

 ext4(Fourth Extended Filesystem)は、Linuxにおいて広く使用されているファイルシステムの一つです。以下は、ext4 ファイルシステムに関する主な特徴や概要です:
❶拡張性と性能向上
 ext4 は、前身である ext3 からの進化により、ファイルシステムの拡張性と性能が向上しています。特に、ファイルシステムのサイズの制限が増加し、大容量のディスクやファイルに対応しています。
❷ジャーナリング
 ext4 はジャーナリングファイルシステムであり、ファイルシステムの安定性と復旧性を向上させます。ジャーナルにより、予期せぬシステムクラッシュや電源の突然の切断などからの回復が迅速に行えます。
❸バックワード互換性
 ext4 は ext3 とのバックワード互換性があります。そのため、ext3 ファイルシステムからアップグレードすることができます。これにより、既存のシステムを ext4 に移行する際の手続きが簡略化されています。
❹大容量サポート
 ext4 は非常に大きなファイルシステムをサポートしており、数エクサバイト(1エクサバイト = 1億ギガバイト)のサイズのファイルシステムを処理できます。
❺データの保存形式
 ファイルやディレクトリのメタデータはBツリー構造を使用しています。これにより、検索や更新の効率が向上しています。
 ext4 は多くのLinuxディストリビューションでデフォルトのファイルシステムとして使用されており、信頼性と性能のバランスを取ったファイルシステムです。

以上です。ただ、以上のファイルシステムを採用しているだけではだめで、mountコマンド等で設定が有効かどうか確認してみます。

# mount | grep ext4
/dev/mapper/ubuntu–vg-ubuntu–lv on / type ext4 (rw,relatime)
/dev/sda2 on /boot type ext4 (rw,relatime)

mountコマンドから見ると、Ubuntuではタイムスタンプの更新に制限をかけていないようです。ちなみに「cat /etc/fstab | grep ext4」で実行した結果からは判断できませんでした。

[あとがき]
 これ以上調べるのは時間の無駄なので、不都合が生じたら深掘りしたいと思います。暫定的な対応として、WinSCPを使用してプログラムファイルを更新する場合、クライアント側にダウンロードして、修正しタイムスタンプが変わったものをサーバーサイトへアップロードするという運用にします。
 Prototype EVEを自宅で開発していた時は、Sambaを使用していました。しかし、今回は、Xserver上にシステムを構築するため、Sambaというわけにはいきません。そこで、採用したのが、WinSCPです。TeraTermだといちいちコマンド打たなきゃいけないし、効率性が失われるので、WinSCPでの開発はマストです。
 ちょっと、うだうだしていて、気分が晴れました。明日からはがんばりましょう!ただ、開発に軸足を置くのか、勉強に軸足を置くのか現在考えています。システムに軸足を置いた場合、一日ってあっという間に過ぎてしまいます。多分勉強する時間は取れないのでしょうね?どうしようかな???
 では、また!!!
■Samba [ソフトウェア研究室](2023年7月02)
https://fanblogs.jp/bahamuteve/archive/343/0

コメント