エントリー

カテゴリー「Cubieboard」の検索結果は以下のとおりです。

ページ移動

  • ページ
  • 1
  • 2
  • 3
  • 4

メールサーバ構築

7月中頃にメールクライアントPCのOSが不良(不調かな)となり,またメールが読めなくなってしまった(実はこの1年半で3度目)

拙者はセキュリティのためメール読み込み用PCを単独で置いてあるのだが,ここのところ何故か良く壊れる

で,ようやく復旧できた訳だが・・・これはタイトルにあるメールサーバ構築を実施するトリガーである

本題はここから

今年の暑さは凄まじく玄箱の設置している部屋の温度も放出した熱で上昇ぎみなので空冷での冷却は無理と判断し玄箱を諦めることに

玄箱ではメールサーバを運用していたのでこれを移行しなければならない

そこでまず試験的に既存サーバにメールサーバを置いて最終的には熱放出の少ないメールサーバに移行することにした

玄箱でのメールサーバは「postfix」と「popa3d」で運用,今回は「exim4」と「dovecot」を使ってみる

参考サイトもあるが,いろいろ嵌ったので記録しておこうと思う(ただしセキュリティの問題があるので非公開部分もある)

尚,当初は簡単に終わるはずだったのだが・・・随分と時間を費やしてしまう

exim4の設定方法

参考サイト1参考サイト2で問題ないが,参考サイト3(英語)が一番良い

前提としてプロバイダ配下のSMTPサーバはOP25対策のためプロバイダのSMTPをリレーしなければならない

①これを踏まえて以下のコマンドでexim4の設定を行う

# dpkg-reconfigure exim4-config 

/etc/exim4/update-exim4.conf.conf が作成される(以下参考)

# /etc/exim4/update-exim4.conf.conf
#
# Edit this file and /etc/mailname by hand and execute update-exim4.conf
# yourself or use 'dpkg-reconfigure exim4-config'
#
# Please note that this is _not_ a dpkg-conffile and that automatic changes
# to this file might happen. The code handling this will honor your local
# changes, so this is usually fine, but will break local schemes that mess
# around with multiple versions of the file.
#
# update-exim4.conf uses this file to determine variable values to generate
# exim configuration macros for the configuration file.
#
# Most settings found in here do have corresponding questions in the
# Debconf configuration, but not all of them.
#
# This is a Debian specific file

dc_eximconfig_configtype='smarthost'
dc_other_hostnames='mail.inoshita.jp; inoshita.jp'
dc_local_interfaces=''
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='xxxx.xxxx.xxx::587' # ::(コロン2個)ポート番号
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

直接編集しても良いが反映させるには

# update-exim4.conf

を実行すること

②/etc/exim4/passwd.clientの編集

プロバイダのSMTPサーバに接続するためのIDとパスワートを書き込む(プレーンテキスト)

# password file used when the local exim is authenticating to a remote
# host as a client.
#
# see exim4_passwd_client(5) for more documentation
#
# Example:
### target.mail.server.example:login:password
smtp.xxx.ne.jp:hoge:hoge-hoge        #プロバイダのSMTP:認証ユーザID:認証パスワード

③/etc/email-addressesの編集

送信元メールアドレスがプロバイダに登録認証されているメールアドレスでないと蹴られるのでメールを送信するUIDに対応した書き換えリストを作成する

# This is /etc/email-addresses. It is part of the exim package
#
# This file contains email addresses to use for outgoing mail. Any local
# part not in here will be qualified by the system domain as normal.
#
# It should contain lines of the form:
#
#user: someone@isp.com
#otheruser: someoneelse@anotherisp.com
user1: hoge@xxxx.xxxx.ne.jp
user1@localhost: hoge@xxxx.xxxx.ne.jp
user2: hoge@xxxx.xxxx.ne.jp

結果,送信元メールアドレスはすべて同じになる

これをミスると接続できない旨のログが出て苦しむ(拙者はtelnetで接続確認したがログインできず嵌った)

④/etc/exim4/passwdの編集

MUAから接続するためのIDとパスワートで,/etc/shadow からコピーするか exim-adduser で追加する

形式:

user:password:comment

/etc/shadow からコピーすると3フィールド以上あるが最初の3つしか利用してないので問題なし

送信元メールアドレスがすべて同じになるのが問題なのでSMTPサーバをプロバイダからMyDNSのメールリレーサービスを利用させていただくことにしたが今度は認証しようとするのを外せず断念して「postfix」を使うことに変更(exim4 は色々できるが調整部分が多く面倒すぎる)

postfixの設定

これはこここちらを参考にすれば問題なし

「postfix」の設定はログの扱いを考えるだけで他は問題なし

(追記)

ローカルのMUAからSMTP経由でメールする場合は以下の編集が必要

/etc/postfix/master.cf の編集

submission inet n       -       -       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

/etc/postfix/main.cf の追加編集(「Relay access denied」となる)

mynetworks = 127.0.0.0/8, [メール送信元IP]/32
doveconfの設定

上記の「postfix」の参考サイトにある

pop で悩むのは,mboxの扱いでsmtpソフトとの兼ね合いもあるのだが,最近はディレクトリ展開が当たり前なのか

imap も使うなら ディレクトリ展開 の方が良いけどユーザHOMEディレクトリを作成しないといけないので無駄(popだけならいらない)

なので

mail_location = INBOX=/var/mail/%u

だけにしたのだけど動作不良に陥る(既にimapの環境になってしまっている?)

仕方ないので

mail_location = mbox:~/.mbox:INBOX=/var/mail/%u

として各ユーザのHOMEを作成

メール受信時

pop3(user01): Error: file_dotlock_create(/var/mail/user01) failed: Permission denied 
(euid=1001(user01) egid=100(users) missing +w perm: /var/mail, we're not in group 8(mail),
dir owned by 0:8 mode=0775) (set mail_privileged_group=mail)

というエラーが出て、受信したメールが/var/spool/mail/から消えない,/etc/dovecot/conf.d/10-mail.confに

mail_privileged_group = mail

を追加で解決

メンテナンスとnfsの設定

ラズパイから共有ディレクトリを参照できるようにするためnfsの設定を行う

メンテナンス

パッケージのアップデートを実施

# aptitude safe-upgrade
依存関係を解決中...
以下のパッケージが更新されます:
  apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common
  bind9 bind9-host bind9utils dnsutils exim4-base exim4-config
  exim4-daemon-light libbind9-80 libc-bin libc-dev-bin libc6 libc6-dev
  libdns88 libexpat1 libffi5 libisc84 libisccc80 libisccfg82 libldap-2.4-2
  liblwres80 libonig2 libtasn1-3 libwbclient0 libxml2 linux-libc-dev
  locales multiarch-support perl perl-base perl-modules samba samba-common
  samba-common-bin sudo
更新: 39 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
36.5 M バイトのアーカイブを取得する必要があります。展開後に 46.1 k バイトのディ スク領域が解放されます。
先に進みますか? [Y/n/?] y

(以下略)
nfsサーバのセットアップ
# aptitude install nfs-kernel-server
以下の新規パッケージがインストールされます:
  libgssglue1{a} libnfsidmap2{a} libtirpc1{a} nfs-common{a}
  nfs-kernel-server rpcbind{a}
更新: 0 個、新規インストール: 6 個、削除: 0 個、保留: 1 個。
565 k バイトのアーカイブを取得する必要があります。展開後に 1,394 k バイトのディ スク領域が新たに消費されます。
先に進みますか? [Y/n/?] y

(略)

# vi /etc/exports

(編集)

# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/srv/share xx.xx.xx.xx/xx(rw,sync,no_root_squash)
# service nfs-kernel-server restart
[ ok ] Stopping NFS kernel daemon: mountd nfsd.
[ ok ] Unexporting directories for NFS kernel daemon....
[....] Exporting directories for NFS kernel daemon...exportfs: /etc/exports
[1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.24.0/24:/srv/share".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x

. ok
[ ok ] Starting NFS kernel daemon: nfsd mountd.
#
exports設定のオプション
オプション 説明
rw 読み込みと書き込みの両方を許可する
ro 読み込みを許可する
sync 同期書き込みを有効にする (デフォルト)
async 非同期書き込みを有効にする
secure 1024番ポートより小さいポートからのリクエストのみ受け付ける (デフォルト)
insecure 1024番ポート以降のポートからのリクエストも受け付ける
wdelay 別の書き込み要求が実行中/発生予定の場合、書き込みを遅らせる (デフォルト)
no_wdelay wdelay を無効にする。async と合わせて設定する
subtree_check サブツリーのチェックを行う。(デフォルト)
一般的な指針として、多くは読み込みのみでファイル名の変更があまり行われないようなディレクトリをエクスポートする場合は、 サブツリーチェック有効の方がよいとされる。
no_subtree_check サブツリーのチェックを無効にする。
一般的な指針として、ホームディレクトリのような細かなファイルが多く、変更も多いディレクトリをエクスポートする場合は、 サブツリーのチェックを無効にした方がよいとされる。
root_squash root UID/GID を anonymous UID/GID にマッピングする
no_root_squash root を anonymous UID/GID にマッピングしない
all_squash 全 UID/GID を anonymous UID/GID にマッピングする
no_all_squash 全 UID/GID を anonymous UID/GID にマッピングしない (デフォルト)
anonuid=UID 指定の UID を anonymous UID にマッピングする
anongid=GID 指定の GID を anonymous GID にマッピングする
クライアントセットアップ
# aptitude install nfs-client

(略)

# mount -t nfs xx.xx.xx.xx:/srv/share /share

必ずmountさせるなら/etc/fstabに記述する

xx.xx.xx.xx:/srv/share   /srv/share  nfs     defaults        0       0

ダイナミックにmountするにはautomountを使う

root@retropie:/# aptitude install autofs

(略)

root@retropie:/# vi /etc/auto.master

最終行に

/-      /etc/share.mount

を,追加

root@retropie:/# vi /etc/share.mount

(編集)

root@retropie:/# cat /etc/share.mount
/srv/share -fstype=nfs,rw  xx.xx.xx.xx:/srv/share
root@retropie:/# systemctl restart autofs

 

FANの制御

しばらく気温が下がっていたので何もしないでいた

気温が上がってきたので急遽作成

簡単に仕様を検討

  • HDD温度が○○℃を超えたら設定温度を下回るまでFANを動作させる → 外温度によって下げる温度を変更するようにしたい
  • CPU温度は問題なさそうなので無視 → 90℃とかになったら冷やさないといけないかな

制御プログラム(設定温度などは未調整)

# cat /usr/local/sbin/tempctrl
#!/bin/sh
#
DANGERTEMP=42                   # 超えたらFANを動作する温度
BETTERTEMP=38                   # 下まったらFANを停止する温度
LOCKFILE=/tmp/hddtemp.lock      # 本プログラムの起動状態
FANFILE=/tmp/fanmode.tmp        # FAN動作状態(旧:低速・高速状態)
DEVICE=/sys/class/gpio/gpio7_pg1/value
if [ -f $LOCKFILE ]
then
    /usr/bin/logger -t hddtemp $0 already running
    exit 0
fi
TEMP=`/usr/sbin/hddtemp -n /dev/sda`
if [ 4 -le ${#TEMP} ]
then
    exit 0
fi
if [ "$TEMP" -le $DANGERTEMP ]
then
    echo 0 > $DEVICE            # FANを停止
    exit 0
fi
echo 1 > $DEVICE                # FANを動作
/usr/bin/logger -t hddtemp "Operating the cooling fan for HDD is in the high temperature "`echo $TEMP C`
trap 'rm -rf $LOCKFILE $FANFILE' INT QUIT TERM EXIT
touch $LOCKFILE $FANFILE; chmod 400 $LOCKFILE $FANFILE
while [ -f $FANFILE ]
do
    sleep 60
    TEMP=`/usr/sbin/hddtemp -n /dev/sda`
    if [ "$TEMP" -le $BETTERTEMP ]
    then
      break
    fi
done
echo 0 > $DEVICE                # FANを停止
/usr/bin/logger -t hddtemp "Stop the cooling fan for the HDD is better temperature "`echo $TEMP C`
rm -rf $LOCKFILE $FANFILE
exit 0

これをcronで動作させるためcrontab編集

# EDITOR=vi crontab -e

編集したcrontabは以下

# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
*/6 * * * * /usr/local/sbin/tempctrl

 

先になるが、いろいろ制御方法を変えていこうと考えてる

尚、温度が上がって危険なのはHDDであり60℃を超えないようにする

またHDDは温度変化が無い様に動作させることにより耐久性があがることが知られている

FANをGPIOでON/OFFする

FANを取り付けたが動作はFANの電源コネクタを12Vバッテリに手動接続することで行っている(当然ながら停止も電源コネクタを外すことで行うことになる)

またFAN単体では無音に近いがケース取り付け状態では無音ではないため24時間駆動は行っていない(騒音対策は未実施)

そこでGPIOの使い方を確認する意味もありGPIOでデジタル出力方法は判っているのでソフト的に制御してみようと考えた

先にFANのドライブ確認、FETを使った簡単なスイッチ回路をブレッドボード上に展開

1

  • GPIOのデジタル出力で10mAは流せると考え3.3Vなので330Ω以上 → R1は1KΩにした
  • R2は1KΩ~10KΩ位 → 10KΩにする
  • FANは12V 0.05A仕様だったのでFETを100mAを十分に流せる2N7000にする → 確認して問題なし

2

準備したFANはPC用で回転数が判る3P端子だったので、回転数の確認のため試しに出力をオシロで見てみる

回転数ピンはオープンコレクタらしいので3.3Vを100KΩ直列でプルアップ

3

あんまり綺麗な波形でない、このオシロの限界?

周波数も計測したがどうも正常とは思えない値が出ていた(今回は追及しない)

 

今のところ確認的な物なので回路は空中配線とする

4

 

GPIOはGP1を使用し、以下で動作を確認

# echo 7 > /sys/class/gpio/export
# ls /sys/class/gpio/
export  gpio7_pg1  gpiochip1  unexport
# echo out > /sys/class/gpio/gpio7_pg1/direction
# cat /sys/class/gpio/gpio7_pg1/value
0
# echo 1 > /sys/class/gpio/gpio7_pg1/value (ON)
# echo 0 > /sys/class/gpio/gpio7_pg1/value (OFF)

上記コマンドの説明

GP1はPIN番号7となる(以下)

7を「/sys/class/gpio/export」に出力すると「/sys/class/gpio/」で入出力スペシャルファイルが判る

PINに対して入出力の指定を行い(Read only なら in)操作する

メンテ用記述)GP1には黒色の線が接続されている

gpio_defination_large.png

制御ソフトは後日予定

ページ移動

  • ページ
  • 1
  • 2
  • 3
  • 4

ユーティリティ

検索

エントリー検索フォーム
キーワード

新着コメント

Re:Mozilla FirefoxではNHKプラスを再生できない件
2025/05/09 from Donabeyaki
Re:ATS-25を作製する
2025/03/23 from kazu
Re:ATS-25を作製する
2025/03/22 from admin
Re:ATS-25を作製する
2025/03/22 from kazu
Re:NOAA受信システム復旧
2025/03/20 from admin

過去ログ

Feed