はじめに
Webサーバを公開する上で当たり前のことですが、jpegファイルにはGPSの位置情報などがメタデータとして含まれているのでメタデータを消すのは必須です。Wordpressの場合はプラグインを使用する手段などもありますが、よく分からなかったので、シェルスクリプトでの動作にしました。今回はUbuntuでの実行を想定しています。
仕組み
ファイルの変化を読み取るinotifywaitを使用して、アップロードされたjpegファイルを発見し、exiftoolでメタデータを消します。あとは、このスクリプトをサービスに追加し、自動起動するようにするだけです。
inotifywaitはinotify-toolsに含まれるので、apt等でexiftoolと共にインストールして下さい。
手順
以下のスクリプトをvim watch_and_erase_jpeg_meta.sh
などで作成します。
#!/bin/bash
WATCHED_DIR="/var/www/html/"
# inotifywaitコマンドを使用してディレクトリを監視
inotifywait -m -r -e create --format '%w%f' "$WATCHED_DIR" | while read FILE
do
# ファイル拡張子がjpgまたはjpegの場合のみ処理
if [[ $FILE =~ \.jpg$ ]] || [[ $FILE =~ \.jpeg$ ]]; then
echo "New JPEG file added: $FILE"
exiftool -all= -overwrite_original "$FILE"
fi
done
あとは、chmod +x watch_and_erase_jpeg_meta.sh
で実行権限をつけます。
サービスの登録の仕方ですが、sudo vim /etc/systemd/system/watch_and_erase_jpeg_meta.service
で以下の文章を書きます。User=のところは、html/の書き込みを行うのに使用されているユーザを指定して下さい。
[Unit]
Description=Watch and Clean JPEG Files in /var/www/html/
[Service]
ExecStart=/home/ユーザー名/watch_and_erase_jpeg_meta.sh
Restart=always
User=www-data
[Install]
WantedBy=multi-user.target
あとは、
sudo systemctl daemon-reload
sudo systemctl start watch_and_erase_jpeg_meta.service
でスタートさせて、
sudo systemctl enablewatch_and_erase_jpeg_meta.service
で自動起動を設定します。ログは、
journalctl -u enablewatch_and_erase_jpeg_meta.service -f
で見れます。