V-antena and Tanimoto's page

谷本の備忘録・雑記帳・work

>

カテゴリー: Raspberry pi

CATEGORY ARCHIVE

raspberry piでサーバー運用しているので稼働状況をメールで自動的にメールで送らせるようにする。

前提条件

OS : raspberry pi OS (buster)
mail server: postfix+dovecot (これでないといけないというわけではない)
範囲 : LAN内でのみ使用 (securityは考えない)

方針

  • LAN内でのみ使用
  • postfixでサポートのsendmailインターフェースを使う
    (mutt でトライしたがうまく動かせず断念)
  • 簡単のためシェルを使う
  • メールのsubjectにはアルファベットを使う。
  • 計測するデータは、cpuの温度、メモリー使用状況、SSD使用容量、smart状況

メール送信用コマンド

mytools/health.sh | sendmail -i -t

mytools/health.shが計測用シェル兼sendmailへのインターフェース部

シェルの中身

#!/bin/bash

echo from: sender_name@domain_name
echo to: receiver_name@domain_name
echo subject: raspi server status report
echo Content-Type: text/plain;charset="UTF-8"
echo

echo ------  date and time ----------
date
echo

echo ----- cpu temparature -----------
vcgencmd measure_temp
echo
echo  ------- memory usage -----------
free -h
echo

echo -------- device usage  ---------
df -h
echo

echo ------- SSD smart data ----------
smartctl -d sat -A /dev/sda

sender_name, receiver_name, domain_name, /dev/sdaは実際の値に調整する。

ユーザー追加

sudo useradd sender_name -s /sbin/nologin
sudo passwd sender_name
sudo mkdir /home/sender_name
sudo chown sender_name:sender_name /home/sender_name

下2行の必要性がよくわからないが、/var/log/mail.errに出てくるエラーを消すためにいろいろしていて、その結果上記の様にしたところメール送信ができたため。

cronの設定

次の様な内容のファイル(例えばhealthcheck)を作成し、/etc/cron.dに配置する。
なお、オーナーをrootにしておかないとcronがエラーになったのでrootにする。
超参考となったサイト:https://www.server-memo.net/tips/etc-crontab.html

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

 7 10 * * * root  /home/pi/mytools/health.sh | sendmail -i -t
 7 22 * * * root  /home/pi/mytools/health.sh | sendmail -i -t

sudoがcronの中で使おうとすると、"TTY onknown"となったのでsudoを使わないようにするsmartctlをcronの中で使えるようにする。従ってユーザーもrootとする。

最後は、メーラ側の設定を行いおしまい

WEBサーバーの異常をメールで知るためにLan内専用のメールサーバーを構築する事にした。

いろんなサイトを参考にしたが、"Job for dovecot.socket failed." が発生して手こずったので記録として残す。

環境・前提条件

OS   : Raspberry pi OS (Buster)
SSL   : letsencrypt
protocol : とりあえずエラーにならなかったもの 

lan内に限るので、認証やsslは取り合えず行わない。また、当面メールボックスで行う

参考にしたサイト

Job for dovecot.socket failed. が発生することが多く、最終的に下記サイトを参考にした。
'https://qiita.com/bzy/items/6edc8cfe48cba3eacb18'

パラーメタの説明は、下記サイトが参考になる
' https://w.atwiki.jp/sanosoft/pages/155.html '

ユーザーの追加

sudo useradd user-name -s /sbin/nologin
sudo passwd user-name

パスワードを入れ間違えたときは
sudo passwd -d user-name    でパスワード消去して登録しなおす

sudo mkdir /home/user-name
sudo chown user-name:user-name /home/user-name

postfixのインストール

ほとんど設定は上記サイトに従った。それゆえ詳細は上記サイトの方が詳しいです。
なお、aptでのインストール中の質問に対しては、 'http://memorandum.cloud/2020/09/22/メールサーバー構築postfixdovecot-raspberry-pi%EF%BC%88ラズベリーパイ/' を参考にした。

sudo apt install postfix
sudo nano /etc/postfix/main.cf
myhostname = mydomain.com
mydomain = mydomain.com
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

ポート番号を25から587に変更する

sudo nano /etc/postfix/master.cf
587      inet  n       -       y       -       -       smtpd

dovecotのインストール

sudo apt install dovecot-pop3d
sudo nano /etc/dovecot/dovecot.conf
disable_plaintext_auth = no
# Enable installed protocols
protocols=pop3
listen = *
sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain
sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
sudo nano /etc/dovecot/conf.d/10-master.conf
unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  #  port = 995
  #  ssl = yes
  }
}
sudo nano /etc/dovecot/conf.d/15-mailboxes.conf
# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf.
namespace inbox {
  inbox = yes           #  <-   この部分を追加

再起動

sudo systemctl restart postfix
sudo systemctl restart dovecot

一応、これでようやく動いた  (いろいろ行ったので一部記入もれあるかも)

postfixとdovecotを動かすのが大変だったのでtelnetを入れ、テストに使う

想定環境

telnetで接続される側: raspberry pi OS
コマンド投入端末側 : windows
試験する機能    : raspberry piにインストールしたpostfix 及び dovecotによるメール機能
           

telnetサーバーのインストール

sudo apt install telnetd

windows側でtelnetクライアント有効化

コントロールパネルの「プログラムと機能」の中から、「windowsの機能の有効化または無効化」を選び、その中から「telnetクライアント」を有効化する

送信機能の確認(postfix)

telnet raspiのIPアドレス ポート番号で開始する
mail from: 送信元メールアドレス
rcpt to: 送信先アドレス
data
blablabla
.
quit
の順で行う

telnet 192.168.1.234 587
mail from: sender@mydomain
rcpt to: receiver@mydomain
data
blablabla
.
quit

受信機能の確認(dovecot)

telnet raspiのIPアドレス ポート番号  で接続
user 受信者のメイルアカウント
pass パスワード
list
retr メイル番号
quit

telnet 192.168.1.234 110
user receiver
pass  password
list
retr 2
quit

サーバー変更してletsencryptを引っ越しました。

raspberry piで組んでいたWordPressのサーバーを変更しましたので、その際の備忘録です。

旧環境と新環境

旧環境: raspberry pi 3 B+ + raspbean(wheezy) + apache
新環境: raspberry pi 4 (4GB) + raspberry OS(Buster) + apache

参考にしたサイト

方針やコマンド等は下記を参考にさせていただいた。
http://www.ubuntu-perl-web.com/blog/20200619081050.html
https://blog.fileshelfplus.com/vps/280

参考にさせていただいたサイトによると、/etc/letsencrypt を旧環境から新環境にそのまま移せばよさそうだったので、その様にした。

旧環境での準備(/etc/letsencryptを固める)

sudo tar cfv letsencrypt.tar.gz /etc/letsencrypt

固めたファイルは新環境に移しておく

新環境でのletsencryptの準備

sudo apt install certbot
sudo apt install python-certbot-apache

/etc/letsencryptの展開

sudo tar xfv letsencrypt.tar.gz

SSLの有効化

有効化は下記サイトを参考にした
https://qiita.com/HO_Pollyanna/items/aee45b25e2318d39157b

sudo apt install certbot
sudo apt install python-certbot-apache

confファイルの調整

sudo nano /etc/apache2/sites-enabled/default-ssl.conf

1.Document rootの調整

    <VirtualHost _default_:443>
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html

2. pemファイルの指定(SSLEngine on の後ろに追加:sample.comの部分を書き換える)

SSLCertificateFile      /etc/letsencrypt/live/sample.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/sample.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/sample.com/chain.pem

apache再起動

sudo systemctl restart apache2

PHP version up from PHP7.3 to PHP7.4 by WordPress request

WordPressの管理画面からPHPをPHP7.4へバージョンアップしろと怒られたので、PHPをPHP7.3からPHP7.4へ更新したのでその記録です。OSはRaspberry OS、ブラウザはApacheです。

環境
OS: Raspberry OS (Buster)
Brawser: Apache2
WordPress: Version 5.4
PHP: PHP7.3

Step1: PHP更新用のリポジトリーを登録する

どのリポジトリーが良いのかわからなかったけど、https://emc-craft.xyz/raspberrypi/php74-inst/ を参考にしてpackages.sury.org を登録した。

sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update

Step2: PHPを更新する

PHP7.3の時は、php-mbstringでインストールしたが今回それで行うとphp8.0-mbstringがインストールされ、まだダメとWordPressに怒られる。従って、php7.4-mbstringと指定すること。

sudo apt remove php*
sudo apt install php7.4
sudo apt install php7.4-zip php7.4-mysql php7.4-xml php7.4-gd  php7.4-curl
sudo apt install php7.4-mbstring

Step3: Apache2の設定を更新する

これを行っていないと、WordPressからPHP7.3だと怒られる。

sudo a2dismod php7.3
sudo a2enmod php7.4

Step4: php.iniを再設定する

php.iniの設定値は、https://www.javadrive.jp/php/install/index8.html のサイトに従った。

sudo nano  /etc/php/7.4/apache2/php.ini

下記を設定
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.strict_detection = Off

Step5: Apacheを再起動する

sudo systemctl restart apache2

Voice3 kitを購入しセットアップした。

なお、マニュアルと違う点が以下あり

1.sudo apt install at-spi2-core が必要だった
2.デモプログラムの位置は
src/examples/voice/assistant_library_demo.py
3.エラーになると、rm ~/.asoundrc が必要かも

あと、英語で話してもなかなか認識してくれない

V-antena and Tanimoto's page

あなたはIPv4でアクセスしています