こんにちは、カトーです。
最近、健康を意識して散歩を取り入れているおかげで、お酒がより一層美味しく感じています。
話は変わりますが、ChatGPTを始めとするAI関連のサービスを最近よく目にするようになりましたね。今後はAIや事前学習のAPIを活用したサービスが一層浸透していくことでしょう。私たちのインフラ業務は多岐にわたるため、「主に運用の際のアラートやログの監視に活用するのかな?」と初めは考えていました。しかし、現在では構築フェーズでもどれだけ利用できるかを検討しています。
ざっとした要件を伝えて、速やかにコマンドを提供してもらい、それを適用するだけでの構築完了が理想的です。既存のメモやコンテナを利用することも考えられますが、新規構築の際のリサーチ時間を削減できる点は魅力的です。
結論として、システムの正確な設置方法やデバイスの確認、ファイル権限の設定等、詳細な指示が欠かせません。これらの要件を押さえておけば、非常に効果的に利用できると感じています。
Raspberry Piを使用して、Webカメラで定期的に画像を撮影してメールで送信
WEB利用のLAMPやLEMP環境だと少しつまらないので、会社に余っているラズパイでWEBカメラを付けて定期メール送信をまずは作ってみます。
今回は要件を軽く聞いて、どう答えるか見てみます。
シングルボードのラズパイで、WEBカメラを利用して定期的に撮影画像をメール送信する方法を教えてください
意外と無茶ぶりな気がしますが……
おお、いい感じ答えてくれます。
では早速、そのまま各コマンドを入れてみます。
コマンドぶち込み
1 2 |
sudo apt-get update sudo apt-get install fswebcam |
1 |
sudo apt-get install msmtp msmtp-mta mailutils |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
$ sudo apt-get install msmtp msmtp-mta mailutils パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています... 完了 状態情報を読み取っています... 完了 以下のパッケージが自動でインストールされましたが、もう必要とされていません: libfuse2 これを削除するには 'sudo apt autoremove' を利用してください。 以下の追加パッケージがインストールされます: gsasl-common guile-2.2-libs libgc1 libgsasl7 libmailutils7 libmariadb3 libntlm0 libsecret-tools mailutils-common mariadb-common mysql-common 提案パッケージ: mailutils-mh mailutils-doc 以下のパッケージが新たにインストールされます: gsasl-common guile-2.2-libs libgc1 libgsasl7 libmailutils7 libmariadb3 libntlm0 libsecret-tools mailutils mailutils-common mariadb-common msmtp msmtp-mta mysql-common アップグレード: 0 個、新規インストール: 14 個、削除: 0 個、保留: 7 個。 8,133 kB のアーカイブを取得する必要があります。 この操作後に追加で 49.2 MB のディスク容量が消費されます。 続行しますか? [Y/n] y 取得:1 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf gsasl-common all 1.10.0-4+deb11u1 [175 kB] 取得:2 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian bullseye/main armhf libntlm0 armhf 1.6-3 [82.9 kB] 取得:3 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libgsasl7 armhf 1.10.0-4+deb11u1 [183 kB] 取得:4 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian bullseye/main armhf msmtp armhf 1.8.11-2.1 [165 kB] 取得:5 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian bullseye/main armhf msmtp-mta armhf 1.8.11-2.1 [41.6 kB] 取得:6 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian bullseye/main armhf libgc1 armhf 1:8.0.4-3 [227 kB] 取得:7 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf guile-2.2-libs armhf 2.2.7+1-6 [4,927 kB] 取得:8 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian bullseye/main armhf mailutils-common all 1:3.10-3 [728 kB] -- (略)--- sr/bin/dotlock.mailutils を使います update-alternatives: /usr/bin/mailx (mailx) を提供するために自動モードで /usr/bin/mail.mailutils を使います man-db (2.9.4-2) のトリガを処理しています ... install-info (6.7.0.dfsg.2-6) のトリガを処理しています ... libc-bin (2.31-13+rpt2+rpi1+deb11u5) のトリガを処理しています ... |
1 |
nano ~/.msmtprc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
defaults auth on tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.log account gmail host smtp.gmail.com port 587 from your_email@gmail.com user your_email@gmail.com password your_app_password account default : gmail |
1 2 |
注意: your_email@gmail.comとyour_app_passwordを実際のものに置き換えてください。 GmailのApp Passwordは、2段階認証を有効にした後に生成できます。 |
参考までにGoogle公式ではアプリパスワード手順こちら
https://support.google.com/mail/answer/185833?hl=ja
撮影とメール送信のスクリプト作成
1 |
nano camera_mailer.sh |
1 2 3 4 5 6 7 8 9 |
#!/bin/bash IMAGE_PATH="/tmp/camera_image.jpg" # 画像を撮影 fswebcam $IMAGE_PATH # メールで画像を送信 echo "Here's your image from the Raspberry Pi camera." | mail -s "Raspberry Pi Camera Image" -a $IMAGE_PATH your_email@gmail.com |
1 |
chmod +x camera_mailer.sh |
1 |
crontab -e |
1 |
0 * * * * /path/to/camera_mailer.sh |
CRONで毎時0分か、ちとテストなので、5分(*/5)おきにしておくか
さて、結果はどうだ???
1 2 3 4 5 |
$ ./camera_mailer.sh --- Opening /dev/video0... stat: No such file or directory mail: Invalid header: /tmp/camera_image.jpg mail: cannot send message: Process exited with a non-zero status |
1 2 3 4 5 |
#!/bin/bash IMAGE_PATH="/tmp/camera_image.jpg" # 画像を撮影 fswebcam $IMAGE_PATH |
1 2 3 4 5 6 7 8 9 |
/tmp $ fswebcam image.jpg --- Opening /dev/video0... stat: No such file or directory kodak@raspberrypi:/tmp $ lsusb Bus 001 Device 004: ID 1997:2466 Shenzhen Riitek Technology Co., Ltd Wireless Receiver Bus 001 Device 005: ID 0424:7800 Microchip Technology, Inc. (formerly SMSC) Bus 001 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub |
1 2 3 4 5 6 7 8 9 10 11 12 |
./camera_mailer.sh --- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. Adjusting resolution from 384x288 to 352x288. --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... Writing JPEG image to '/tmp/camera_image.jpg'. mail: Invalid header: /tmp/camera_image.jpg mail: cannot send message: Process exited with a non-zero status |
1 2 3 |
mail: cannot send message: Process exited with a non-zero status $ echo $? 36 |
MSMTPで一度テストしてみることに。
ChatGPTでは、以下だったが、
1 |
<span class="hljs-built_in">echo</span> <span class="hljs-string">"Here's your image from the Raspberry Pi camera."</span> | mail -s <span class="hljs-string">"Raspberry Pi Camera Image"</span> -a <span class="hljs-variable">$IMAGE_PATH</span> 設定メールアドレス |
mail: No recipients specified とエラー
まずはバージョン確認とディレクトリーを確認
1 |
msmtp --version |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
msmtp version 1.8.11 Platform: arm-unknown-linux-gnueabihf TLS/SSL library: GnuTLS Authentication library: GNU SASL; oauthbearer: built-in Supported authentication methods: plain scram-sha-1 external gssapi cram-md5 digest-md5 login ntlm oauthbearer IDN support: enabled NLS: enabled, LOCALEDIR is /usr/share/locale Keyring support: Gnome System configuration file name: /etc/msmtprc User configuration file name: /home/ユーザー/.msmtprc Copyright (C) 2020 Martin Lambers and others. This is free software. You may redistribute copies of it under the terms of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent permitted by law. |
/etc/msmtprcふむ……
コマンドを入れるため、s-nailもインストールしておく
1 |
sudo apt install s-nail |
1 |
/home/ユーザー/.msmtprc: contains secrets and therefore must have no more than user read/write permissions |
ああ、所有者をmsmtpに変更してみます。rootだとダメなのか?
権限を変えておきます。またchmod +x camera_mailer.shがありましたが、etc側にも置いておきます
1 2 3 |
sudo touch /etc/msmtprc sudo chown msmtp:msmtp /etc/msmtprc sudo chmod 640 /etc/msmtprc |
送信完了
1 |
echo -e "Subject: Test Mail from Raspberry Pi\n\nThis is a test mail sent from Raspberry Pi using msmtp and Gmail." | msmtp 宛先のメールアドレス |
無事にメールが届きました。
結果としてどうか?
☓ シングルボードのラズパイで、WEBカメラを利用して定期的に撮影画像をメール送信する方法を教えてください
◯ シングルボードのラズパイで、WEBカメラを利用して定期的に撮影画像をメール送信する方法を教えてください
また接続デバイスの確認、設定や実行ファイルの権限なども明確に指示してください
私たちインフラの専門家としては、単に”経験”という言葉では語り尽くせない部分が多々あります。ファームウェアの違いやデバイス接続の確認など、多くの失敗を経験し、それを元に学びを得てきました。そのため、詳細な考慮を怠ると、意図しない結果につながることがしばしばあります。スタッフ間で「LAMP環境を構築し、PHPは7.x系で」といった簡潔な依頼がされることもあるのですが、そのような要望だけでは、十分な結果を期待するのは難しいと感じます。最近のシステムアップデートには初めは驚きましたが、後から考えれば、それは至極当然のことだったと認識し、少し反省しました。
従って、ChatGPTを活用する際には、より具体的で明確な指示を行うべきだと考えています。
ところで、この文章もChatGPTで書きましたが、どうでしょう(笑)