Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2022 when it's begining after/with CORONA Virus.

RaspberryPiのログをGmailにして送る

11月
26
2022
Back
Alt+HOME


図はD-STAR Gatewayのログファイルから最新の一部を取り出してメールにしたものです。今回は簡単な平テキストの物に限って、取り敢えずメールにしてみたいと思います。これが出来たら第二段階で圧縮ファイルにしたり、暗号化した添付ファイルを送るメールについて考えたいと思っています。

取り敢えず、(圧縮)ファイルを添付したメールを送る (Postfixを使わない方法)について追記しました。

Bookworm(Pi OS 12)で、SendEmailによる送信が出来ないケースが有りましたので、 別途 RasPiのログをGmailにして送る(Bookworm)を掲載しました。

獨協医科大学D-STARリピータ管理者髙田様より
ご提供戴いたスクリプトを使用させて戴きました


複数のログファイルから必要な行数を取り出し一つのファイルを作成


  1. メールとして送信する内容のファイルを作成するスクリプト

  2.   GNU nano 5.4                               gatewaylog
    #!/bin/bash
    
    ## 各ログファイル最新の20行を読み取ってhomeディレクトリにファイルを作成
    cd /var/log
    echo [rpi-dsgwd.log]                            >> /home/user/DSTARLOG
    tail -n20 /var/log/rpi-dsgwd.log                >> /home/user/DSTARLOG
    echo [rpi-xchange.log]                          >> /home/user/DSTARLOG
    tail -n20 /var/log/rpi-xchange.log              >> /home/user/DSTARLOG
    echo [rpi-dprs.log]                             >> /home/user/DSTARLOG
    tail -n20 /var/log/rpi-dprs.log                 >> /home/user/DSTARLOG
    echo [rpi-dstatus.log]                          >> /home/user/DSTARLOG
    tail -n20 /var/log/rpi-dstatus.log              >> /home/user/DSTARLOG
    echo [rpi-multi_forward.log]                    >> /home/user/DSTARLOG
    tail -n20 /var/log/rpi-multi_forward.log        >> /home/user/DSTARLOG
    echo [rpi-decho.log]                            >> /home/user/DSTARLOG
    tail -n20 /var/log/rpi-decho.log                >> /home/user/DSTARLOG
    cd /home/user
    

  3. /var/log フォルダに入って tail コマンドで -n20 つまり20行ずつ各ファイルから取得し、次々に /home/user のファイル DSTARLOG に書き加えていきます。最後にホームディレクトリに戻ります。 ここまでスクリプトが書けたら一度保存します。

  4. ファイルの属性を変更して起動できるようにします。

  5. $ sudo chmod +x gatewaylog

  6. コマンドとしてパスの通っている /usr/local/bin へ移動します。

  7. $ sudo mv gatewaylog /usr/local/bin

  8. コマンドを実行してみます。

  9. $ gatewaylog
    $ ls
    DSTARLOG

    ホームディレクトリを一覧してみると、ログを集めたファイルが出来ているのが確認できると思います。

メールソフト導入の前にGoogleのアプリパスワードを入手する



  1. Google アカウントへ移行します。

  2. 左ペインメニューに有る「セキュリティ」をクリックします。

  3. 図のように、2段階認証プロセスオン になっていれば、その中に入ると最下部に[アプリ パスワード]が表示されます。

    > をクリックします。


  4. [アプリを選択、[デバイスを選択]から適当なアプリの名前を付けたら[生成]をクリックします。

  5. 図のような16桁のパスワードが発行されます。

    このパスワードは、いつでも削除したり、生成したり出来ます。 注意点は使用中のパスワードを削除すると、そのパスワードを設定したアプリが使えなくなるなります。

    パスワードの流出には十分な注意を払ってください

    因みに、このパスワードは既に破棄しました^^;




ファイルを添付する方法(圧縮)ファイルを添付したメールを送る (Postfixを使わない方法)へジャンプしてください。

メールソフトPostfixの導入と設定


  1. メールサーバとして働く一般的なPostfixをインストールします。

  2. $ sudo apt install libsasl2-modules

  3. Postfixの設定ファイルを編集します。(元ファイルのコピーを残してください)

  4. $ sudo nano /etc/postfix/main.cf

      GNU nano 5.4                                /etc/postfix/main.cf
    # See /usr/share/postfix/main.cf.dist for a commented, more complete version
    
    
    # Debian specific:  Specifying a file name will cause the first
    # line of that file to be used as the name.  The Debian default
    # is /etc/mailname.
    #myorigin = /etc/mailname
    
    smtpd_banner=$myhostname ESMTP $mail_name (Debian/GNU)
    biff=no
    
    # appending .domain is the MUA's job.
    append_dot_mydomain=no
    
    # Uncomment the next line to generate "delayed mail" warnings
    #delay_warning_time = 4h
    
    readme_directory=no
    
    # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
    # fresh installs.
    compatibility_level=2
    
    
    
    # TLS parameters
    smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    smtpd_tls_security_level=may
    
    smtp_tls_CApath=/etc/ssl/certs
    smtp_tls_security_level=encrypt					#---> mayからencryptに変更
    smtp_tls_session_cache_database=btree:${data_directory}/smtp_scache
    
    
    smtpd_relay_restrictions=permit_mynetworks permit_sasl_authenticated defer_unauth_destination
    myhostname=dstargw						#---> 標準的インストールをすると自動的に設定される
    alias_maps=hash:/etc/aliases
    alias_database=hash:/etc/aliases
    mydestination=$myhostname, dstargw, localhost.localdomain, , localhost
    relayhost=[smtp.gmail.com]:587					#---> Googleのセキュリティポートを設定
    mynetworks=127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    mailbox_size_limit=0
    recipient_delimiter=+
    inet_interfaces=loopback-only					#---> 送信のみに限定する場合(default: all)
    inet_protocols=ipv4						#---> ネットワークで以上が出る場合(default: all)
    
    # Added settings						#---> 以下を追加する
    smtp_sasl_auth_enable=yes
    smtp_sasl_security_options=noanonymous
    smtp_sasl_password_maps=hash:/etc/postfix/sasl/sasl_passwd
    smtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
    		
    		

  5. Googleセキュリティポート認証用ファイルの作成

  6. $ sudo nano /etc/postfix/sasl/sasl_passwd

      GNU nano 5.4                           /etc/postfix/sasl/sasl_passwd
    [smtp.gmail.com]:587 abcde@gmail.com:lfbnuczamptbuanz

    前項で取得したGoogleのアプリパスワードをメールアドレスに続いて書き込み、保存します。

  7. 次に上記認証用ファイルからPostfixが実際アクセスする時に使用するアカウントファイルをマッピングします。

  8. $ sudo postmap /etc/postfix/sasl/sasl_passwd

  9. パスワードに関する2ファイルの属性を変更します。(又はsasl_passwdは削除します。)

  10. $ sudo chmod 600 /etc/postfix/sasl/sasl_passwd
    $ sudo chmod 600 /etc/postfix/sasl/sasl_passwd.db

  11. 最後に設定した環境を認識させるためにサービスを再起動します。

  12. $ sudo systemctl retart postfix

最初に作成したスクリプトの完成と送信テスト


  1. スクリプトにメール送信に関する部分を追加します。(掲載スクリプトは全部)

  2. $ sudo nano /usr/local/bin/gatewaylog

      GNU nano 5.4                           /usr/local/bin/gatewaylog
    #!/bin/bash
    #////////////////////////////////////////////////////////////////
    #       最新ログをまとめGmailサーバを中継してメールする
    #////////////////////////////////////////////////////////////////
    
    ## 各ログファイル最新行を読み取ってhomeディレクトリにファイルを作成
    cd /var/log
    echo [rpi-dsgwd.log]                            >> /home/opendv/DSTARLOG
    tail -n20 /var/log/rpi-dsgwd.log                >> /home/opendv/DSTARLOG
    echo [rpi-xchange.log]                          >> /home/opendv/DSTARLOG
    tail -n20 /var/log/rpi-xchange.log              >> /home/opendv/DSTARLOG
    echo [rpi-dprs.log]                             >> /home/opendv/DSTARLOG
    tail -n20 /var/log/rpi-dprs.log                 >> /home/opendv/DSTARLOG
    echo [rpi-dstatus.log]                          >> /home/opendv/DSTARLOG
    tail -n20 /var/log/rpi-dstatus.log              >> /home/opendv/DSTARLOG
    echo [rpi-multi_forward.log]                    >> /home/opendv/DSTARLOG
    tail -n20 /var/log/rpi-multi_forward.log        >> /home/opendv/DSTARLOG
    echo [rpi-decho.log]                            >> /home/opendv/DSTARLOG
    tail -n20 /var/log/rpi-decho.log                >> /home/opendv/DSTARLOG
    cd /home/opendv
    
    ## メールヘッダーの作成
    MAILTO="abcde@gmail.com"
    MAILFROM="dstargw@localhost"
    MAILSUB="Gateway Log"
    MAILFILE=/home/user/mail.txt
    FILENAME=/home/user/DSTARLOG		# 内容を流し込むファイル
    
    echo "To:"${MAILTO}                             >  $MAILFILE
    echo "FROM:"${MAILFROM}                         >> $MAILFILE
    echo "Subject:"${MAILSUB}			>> $MAILFILE
    echo ""                                         >> $MAILFILE
    
    ## ヘッダーの下にログ本文を流し込む
    cat $FILENAME                                   >> $MAILFILE
    
    ##
    sendmail -i -t < $MAILFILE
    
    rm $MAILFILE
    rm $FILENAME
    		

  3. これで送信が出来るようになりました。

  4. $ gatewaylog

    グーグルメールの受信ボックスに「Gateway Log」と言うメールが届いて居れば成功です。

毎日定時に報告メールが届くようにします。


  1. crondによって定時にコマンドが実行されるようにします。

  2. $ sudo nano /etc/crontab

      GNU nano 5.4                                    /etc/crontab
    #
    00 6    * * *   user  gatewaylog

    午前6時にユーザ名 user の権限にてコマンドgatewaylogが実行され、テストどおりに送信されるはずです。

  3. crontabを保存したら、cronに設定を認識させます。

  4. $ sudo systemctl restart cron

    以上で明日の朝からゲートウェイPCのアプリケーション状況が通達されるように成ります。

次の段階として、圧縮したログレポートファイルを添付する方法を勉強してみたいと思います。

(圧縮)ファイルを添付したメールを送る (Postfixを使わない方法)


  1. アプリパスワードの取得は終わっているものとします。

  2. まだの場合は最初のメールソフト導入の前にGoogleのアプリパスワードを入手するをご覧ください。

  3. 次のアプリケーションをインストールします。既にPostfixが稼働している場合はsendemailのみでOK

  4. $ sudo apt install sendemail libnet-ssleay-perl libio-socket-ssl-perl

  5. スクリプトは次のように成ります。Postfixとの違いはスクリプトの中でgmailサーバのアカウント指定を行うことです。

  6. $ sudo nano /usr/local/bin/gatewaylog

      GNU nano 5.4                           /usr/local/bin/gatewaylog
    #!/bin/bash
    #////////////////////////////////////////////////////////////////
    #       最新ログをまとめGmailサーバを中継してメールする
    #////////////////////////////////////////////////////////////////
    
    ## 各ログファイル最新行を読み取ってhomeディレクトリにファイルを作成
    FILENAME=/home/opendv/DSTARLOG
    cd /var/log
    echo [rpi-dsgwd.log]                            >> $FILENAME
    tail -n20 /var/log/rpi-dsgwd.log                >> $FILENAME
    echo ''                                         >> $FILENAME
    echo [rpi-xchange.log]                          >> $FILENAME
    tail -n20 /var/log/rpi-xchange.log              >> $FILENAME
    echo ''                                         >> $FILENAME
    echo [rpi-dprs.log]                             >> $FILENAME
    tail -n20 /var/log/rpi-dprs.log                 >> $FILENAME
    echo ''                                         >> $FILENAME
    echo [rpi-dstatus.log]                          >> $FILENAME
    tail -n20 /var/log/rpi-dstatus.log              >> $FILENAME
    echo ''                                         >> $FILENAME
    echo [rpi-multi_forward.log]                    >> $FILENAME
    tail -n20 /var/log/rpi-multi_forward.log        >> $FILENAME
    echo ''                                         >> $FILENAME
    echo [rpi-decho.log]                            >> $FILENAME
    tail -n20 /var/log/rpi-decho.log                >> $FILENAME
    cd /home/opendv
    
    ## ファイルを圧縮
    ZIPFILE="dstarlog.zip"
    zip ${ZIPFILE} ${FILENAME}
    
    ## メールヘッダーの作成
    MAILTO="abcde@gmail.com"
    MAILFROM="dstargw@localhost"
    MAILSUB="Gateway Log"
    
    # 圧縮ファイルを添付するとき
    MESSAGE="添付ファイル: dstarlog.zip"
    ATTACHED=/home/opendv/dstarlog.zip		
    
    # テキストファイルのまま添付するとき
    #MESSAGE="添付ファイル: DSTARLOG"
    #ATTACHED=/home/opendv/DSTARLOG			
    
    ## アカウント情報
    ACCOUNT="abcde"					# メールアドレスの@以降を省いたもの
    PASSWD="lfbnuczamptbuanz"			# 先に取得したアプリパスワード
    
    ## メール送信
    sendemail -f ${MAILFROM} -t ${MAILTO} -m ${MESSAGE} -u ${MAILSUB} -a $ATTACHED -s smtp.gmail.com:587 -xu ${ACCOUNT} -xp ${PASSWD} -o tls=yes
    # sendemail -f ${MAILFROM} -t ${MAILTO} -m ${MESSAGE} -u ${MAILSUB} -a $ATTACHED	# 既にPostfix導入済みの場合アカウント情報は不要
    
    ## トランザクションファイルを削除
    rm -f $FILENAME
    rm -f $ZIPFILE
    		

  7. スクリプトを初めて保存した場合は起動可能ファイルにしてください。

  8. $ sudo chmod +x /usr/local/bin/gatewaylog
    

  9. 毎日定時に報告メールが届くようにするには前項を参照してください。



Back
Alt+HOME