ChatGPTでサクッとインフラ構築はどこまでできるか?

こんにちは、カトーです。

最近、健康を意識して散歩を取り入れているおかげで、お酒がより一層美味しく感じています。

話は変わりますが、ChatGPTを始めとするAI関連のサービスを最近よく目にするようになりましたね。今後はAIや事前学習のAPIを活用したサービスが一層浸透していくことでしょう。私たちのインフラ業務は多岐にわたるため、「主に運用の際のアラートやログの監視に活用するのかな?」と初めは考えていました。しかし、現在では構築フェーズでもどれだけ利用できるかを検討しています。

ざっとした要件を伝えて、速やかにコマンドを提供してもらい、それを適用するだけでの構築完了が理想的です。既存のメモやコンテナを利用することも考えられますが、新規構築の際のリサーチ時間を削減できる点は魅力的です。

結論として、システムの正確な設置方法やデバイスの確認、ファイル権限の設定等、詳細な指示が欠かせません。これらの要件を押さえておけば、非常に効果的に利用できると感じています。

 

Raspberry Piを使用して、Webカメラで定期的に画像を撮影してメールで送信

WEB利用のLAMPやLEMP環境だと少しつまらないので、会社に余っているラズパイでWEBカメラを付けて定期メール送信をまずは作ってみます。
今回は要件を軽く聞いて、どう答えるか見てみます。

シングルボードのラズパイで、WEBカメラを利用して定期的に撮影画像をメール送信する方法を教えてください

意外と無茶ぶりな気がしますが……

シングルボードのラズパイで、WEBカメラを利用して定期的に撮影画像をメール送信する方法を教えてくださいおお、いい感じ答えてくれます。
では早速、そのまま各コマンドを入れてみます。

コマンドぶち込み

sudo apt-get update
sudo apt-get install fswebcam

ふむ、いいですね。特にアップデート入れてあるあたり、基本に忠実ですね。SEあるあるで、アップデートはまずは初っ端基本ですしね。

sudo apt-get install msmtp msmtp-mta mailutils

ほう、簡単にメール送信するならたしかにMSMTPがいいですよね。

$ 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) のトリガを処理しています ...

続けて、Gmailを使う設定がアナウンスされます。

nano ~/.msmtprc
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
注意: your_email@gmail.comとyour_app_passwordを実際のものに置き換えてください。
GmailのApp Passwordは、2段階認証を有効にした後に生成できます。

おお、丁寧にアナウンスされる。では、1個Gmailアカウントを作成、しかし、なぜホームディレクトリなのだろうか?システムワイドで使うことは指定してないからでしょうか。


参考までにGoogle公式ではアプリパスワード手順こちら
https://support.google.com/mail/answer/185833?hl=ja

撮影とメール送信のスクリプト作成

nano camera_mailer.sh
#!/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
chmod +x camera_mailer.sh
crontab -e
0 * * * * /path/to/camera_mailer.sh

CRONで毎時0分か、ちとテストなので、5分(*/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

あ、あれ? tmpファイルを確認してみるが、画像がないな、そもそもコマンドでfswebcamで画像撮影コマンドは

#!/bin/bash
IMAGE_PATH="/tmp/camera_image.jpg"

# 画像を撮影
fswebcam $IMAGE_PATH

で、コケてるのか?一度ここだけコマンドを打ってみます。あ、

/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

カメラ認識していないのか、では認識させて再度

 ./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

お、画像は撮影できましたが、メールエラーを吐いていますね

mail: cannot send message: Process exited with a non-zero status
$ echo $?
36

36?なんだろうか環境だろうか

MSMTPで一度テストしてみることに。

ChatGPTでは、以下だったが、

echo "Here's your image from the Raspberry Pi camera." | mail -s "Raspberry Pi Camera Image" -a $IMAGE_PATH 設定メールアドレス

mail: No recipients specified とエラー

まずはバージョン確認とディレクトリーを確認

msmtp --version
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もインストールしておく

sudo apt install s-nail
 /home/ユーザー/.msmtprc: contains secrets and therefore must have no more than user read/write permissions

ああ、所有者をmsmtpに変更してみます。rootだとダメなのか?
権限を変えておきます。またchmod +x camera_mailer.shがありましたが、etc側にも置いておきます

sudo touch /etc/msmtprc
sudo chown msmtp:msmtp /etc/msmtprc
sudo chmod 640 /etc/msmtprc

送信完了

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で書きましたが、どうでしょう(笑)

 

 

最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG