RHEL/CentOS6でSolarisみたいなsyslog出力を行う


Solarisからの移行ユーザからこんなことを言われた。

Solarisだとログ出力にFacitilyとPriorityがあるのに、Linuxはなんで無いの?

Solarisの例

Aug 21 18:30:26 solaris hme: [ID 517527 kern.info] SUNW,hme0 : Internal Transceiver Selected.
Aug 21 18:30:26 solaris hme: [ID 517527 kern.info] SUNW,hme0 :   100 Mbps Full-Duplex Link Up
Aug 21 18:30:54 solaris savecore: [ID 570001 auth.error] reboot after panic: [AFT1] errID 0x00090886.6bd9286c UE Error(s)
Aug 21 18:30:54 solaris     See previous message(s) for details
Aug 21 18:30:54 solaris ntpdate[175]: [ID 558275 daemon.notice] adjust time server 158.211.134.200 offset 0.350887 sec
Aug 21 18:30:58 solaris xntpd[186]: [ID 702911 daemon.notice] xntpd 3-5.93e Mon Sep 20 15:47:11 PDT 1999 (1)
Aug 21 18:30:58 solaris xntpd[186]: [ID 301315 daemon.notice] tickadj = 5, tick = 10000, tvu_maxslew = 495, est. hz = 100
Aug 21 18:30:59 solaris xntpd[186]: [ID 798731 daemon.notice] using kernel phase-lock loop 0041
Aug 21 18:30:59 solaris last message repeated 1 time
Aug 21 18:31:09 solaris pseudo: [ID 129642 kern.info] pseudo-device: tod0
Aug 21 18:31:09 solaris genunix: [ID 936769 kern.info] tod0 is /pseudo/tod@0

Linuxの例

Aug 26 17:11:52 centos6 postfix/postfix-script[32480]: stopping the Postfix mail system
Aug 26 17:11:52 centos6 postfix/master[32414]: terminating on signal 15
Aug 26 17:11:52 centos6 postfix/postfix-script[32552]: starting the Postfix mail system
Aug 26 17:11:52 centos6 postfix/master[32553]: daemon started -- version 2.6.6, configuration /etc/postfix

ふむ・・・確かに

/etc/rsyslog.confを編集して実現してみた。
参考資料
・Red Hat Enterprise Linux 6導入ガイド :「第20章 ログファイルの表示と管理

さすがにデフォルト出力を変えてしまうと、Linux側のツールでsyslogを処理した場合に問題が生じるので
Solaris互換のログファイルは別ファイルで出力させることにした。

設定を行った「/etc/rsyslog.conf」のサンプルは以下。

$template FacilityTmpl,"%timereported% %HOSTNAME% %syslogtag% [ID %MSGID% %syslogfacility-text%.%syslogseverity-text%]%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
mail.*                                         /var/log/solaris-compati.log;FacilityTmpl

その出力例

Aug 26 17:11:52 centos6 postfix/postfix-script[32480]: [ID - mail.info] stopping the Postfix mail system
Aug 26 17:11:52 centos6 postfix/master[32414]: [ID - mail.info] terminating on signal 15
Aug 26 17:11:52 centos6 postfix/postfix-script[32552]: [ID - mail.info] starting the Postfix mail system
Aug 26 17:11:52 centos6 postfix/master[32553]: [ID - mail.info] daemon started -- version 2.6.6, configuration /etc/postfix

「%MSGID%」に具体的な値が出力されず、「-」になってしまうというのは、Linux側の仕様なのかどうなのか???

まぁ、とりあえず、おおむね実現できたのでよしとした。

Orange pi2/Allwinner H3関連のメモ


SoCとしてAllwinner H3を採用しているOrange pi2/Orange pi plusについての開発メモ。

・Allwinner用Linux kernelの総本山
 →Linux-sunxi
・総本山にあるOrange pi関連の資料
  Xunlong Orange Pi 2
  Xunlong Orange Pi Plus
・ビルドに必要らしい.fexのファイル
  https://github.com/vonfritz/sunxi-boards/tree/H3/sys_config/H3
・総本山にあるH3向けビルドガイド
 →H3 Manual build howto
・Allwinner H3のアーキテクチャ名は「sun8iw7p1」らしい

・Orange pi向けだけどBanana Linuxをビルドした話
  [TUTO] How to compile Kernel & Headers (from banana pi github)
  Orange piはAllwinner A20であることに注意

・Banana pi向けDebianの作り方
  https://github.com/igorpecovnik/BananaPI-Debian
  Banana piはAllwinner A20であることに注意

・Banana piの開発元Lemakerのlinux-sunxi
  https://github.com/LeMaker/linux-sunxi

・Orange pi以外のAllwinner H3搭載機 HYH-TBH3
  linux-sunxiでの情報:HYH-TBH3
  STB風のもの
  Aliexpressの販売ページ: /
・Orange pi以外のAllwinner H3搭載機 Tronsmart Draco H3
  メーカページ:Tronsmart Draco H3
  メーカのサポートページ:Category Archives: Tronsmart Draco H3
   SDKやAndroid firmwareがある
   720p用kernelと1080p用kernelがあるのが興味深い
  Linux-sunxiにはまだ情報はない(2015/06/24)

Debian/proxmoxでのmpt-statusdによるRAIDステータスの監視


リモートでやるのが怖くて、実施できていなかったProxmoxのメジャーバージョンアップを実施した。

Debianのメジャーバージョンアップ、ということになるのだが、案の定、失敗。
(アップデートに必要なファイル群が404エラーで取得できなかった)
調査が面倒だったので、さくっと消去して新バージョンで再インストールした。

で、使用しているサーバはLSI Logic系のRAID/SCSIカードを使っているので、mpt-statusdによるRAIDステータス監視が行える。

古いバージョンのときは、以下のような/etc/default/mpt-statusdを書いていた。

# cat /etc/default/mpt-statusd
modprobe mptctl
ID="3 -n"
#

(「modprobe mptctl」を書かないと/dev/mptctlが作られず、mpt-statusがエラーになる)

通常は「ID=”3″」にするのだと思うが、これだと、syncのパーセンテージとかが表示されないという欠点がある。

root@ns5:/etc/init.d# mpt-status -i 3
ioc0 vol_id 3 type IM, 2 phy, 231 GB, state OPTIMAL, flags ENABLED
ioc0 phy 0 scsi_id 9 ATA      WDC WD2502ABYS-1 3B04, 232 GB, state ONLINE, flags NONE
ioc0 phy 1 scsi_id 4 ATA      WDC WD5000AAJS-5 3B01, 465 GB, state ONLINE, flags NONE
#

このため、syncのステータスが表示される「-n」オプション付にすることにしていた。

# mpt-status -i 3 -n
ioc:0 vol_id:3 type:IM raidlevel:RAID-1 num_disks:2 size(GB):231 state: OPTIMAL flags: ENABLED
ioc:0 phys_id:0 scsi_id:9 vendor:ATA      product_id:WDC WD2502ABYS-1 revision:3B04 size(GB):232 state: ONLINE flags: NONE sync_state: 100 ASC/ASCQ:0x11/0x00 SMART ASC/ASCQ:0xff/0xff
ioc:0 phys_id:1 scsi_id:4 vendor:ATA      product_id:WDC WD5000AAJS-5 revision:3B01 size(GB):465 state: ONLINE flags: NONE sync_state: 100 ASC/ASCQ:0xff/0xff SMART ASC/ASCQ:0xff/0xff
scsi_id:0 100%
scsi_id:1 100%
#

同期中のサンプル

# mpt-status -i 3 -n
ioc:0 vol_id:3 type:IM raidlevel:RAID-1 num_disks:2 size(GB):231 state: DEGRADED flags: ENABLED RESYNC_IN_PROGRESS
ioc:0 phys_id:0 scsi_id:9 vendor:ATA      product_id:WDC WD2502ABYS-1 revision:3B04 size(GB):232 state: ONLINE flags: NONE sync_state: 1 ASC/ASCQ:0x11/0x00 SMART ASC/ASCQ:0xff/0xff
ioc:0 phys_id:1 scsi_id:4 vendor:ATA      product_id:WDC WD5000AAJS-5 revision:3B01 size(GB):465 state: ONLINE flags: OUT_OF_SYNC sync_state: 1 ASC/ASCQ:0xff/0xff SMART ASC/ASCQ:0xff/0xff
scsi_id:0 1%
scsi_id:1 1%
#

壊れているときのサンプル

# mpt-status -i 3 -n
ioc:0 vol_id:3 type:IM raidlevel:RAID-1 num_disks:2 size(GB):231 state: DEGRADED flags: ENABLED
ioc:0 phys_id:1 scsi_id:9 vendor:ATA      product_id:WDC WD2502ABYS-1 revision:3B04 size(GB):232 state: ONLINE flags: NONE sync_state: 100 ASC/ASCQ:0x11/0x00 SMART ASC/ASCQ:0xff/0xff
ioc:0 phys_id:0 scsi_id:4 vendor: product_id: revision: size(GB):232 state: MISSING flags: OUT_OF_SYNC sync_state: 100 ASC/ASCQ:0x00/0x00 SMART ASC/ASCQ:0x00/0x00
scsi_id:1 100%
scsi_id:0 100%
#

これで問題ないだろうと思っていたのですが、ステータス変化が無くても2時間おきにメールが・・・

mpt-statusdってどういう仕組みなのか/etc/init.d/mpt-statusdの中身を確認・・・
単純に一定時間間隔でmpt-statusコマンドを実行し、その結果を比較しているだけ、と判明。

        if (mpt-status -i $ID) |grep -q 'state OPTIMAL' ; then
            BADRAID=false
        else
            BADRAID=true
            logger -t mpt-statusd "detected non-optimal RAID status"
        fi

今回、問題となっているのは上記の部分だった。
-nのときは「state: OPTIMAL」と、コロン入りのステータス表示になっているためだった。

なので、下記のように「state: OPTIMAL」を見るように変更することで解決した。

        if (mpt-status -i $ID) |grep -q 'state: OPTIMAL' ; then
            BADRAID=false
        else
            BADRAID=true
            logger -t mpt-statusd "detected non-optimal RAID status"
        fi

samba 4.xのデータバックアップ手法


samba 4.xにおけるデータのバックアップ手法を調べた。

まず、公式記述:「Backup and Recovery
公式記述「Back up and Restoring a Samba AD DC」(2018/01/30 URLが変更になっていたため修正)

公式記述の要点
・ドメインコントローラを複数用意すれば、どれか1台でも残っていればデータは保持されるので失われることはないよ
・sambaの内部データベースとしてLDBとTDBの2種類ある
・標準ではインストールされないがsourceにsamba_backupというスクリプトが用意されている
・samba_backupを実行すると/usr/local/backupsにtar.bz2形式のバックアップができる
・リストアは、tarコマンドを使って行う

で、samba_backupを使うには、ソースファイルのディレクトリから/usr/local/sbinなどにコピーする必要があります。

[root@ホスト名 samba-4.1.16]# cp ./source4/scripting/bin/samba_backup /usr/local/sbin/
[root@ホスト名 samba-4.1.16]# mkdir /usr/local/backups
[root@ホスト名 samba-4.1.16]# chmod 750 /usr/local/backups
[root@ホスト名 samba-4.1.16]# 

ただ・・・このまま実行すると

samba_backup: line 54: tdbbackup: コマンドが見つかりません
Error while backuping ./private/idmap.ldb

といったエラーが出力されるかも?

これは、tdbbackupがPATHに無いため。
samba_backupスクリプトのWHERE=~行の次ぐらいに
「PATH=/usr/local/samba/sbin:/usr/local/samba/bin:$PATH」といった記述を追加して、tdbbackupコマンドにパスを通します。

[root@ホスト名samba-4.1.15]# /usr/local/sbin/samba_backup
[root@ホスト名 samba-4.1.15]# ls -l /usr/local/backups/
合計 5912
-rw-r--r--. 1 root root     415  3月 12 10:12 2015 etc.120315.tar.bz2
-rw-r--r--. 1 root root 6043216  3月 12 10:12 2015 samba4_private.120315.tar.bz2
-rw-r--r--. 1 root root     481  3月 12 10:12 2015 sysvol.120315.tar.bz2
[root@ホスト名 samba-4.1.15]#

Courier-IMAPからdovecotへの移行


Courier-IMAPの最近のバージョンが使っているcourier-authlibは、vpopmail連携機能が切られてしまい使えなくなってしまっているため代替策を検討中。

まず、dovecotに乗り換え実験中。

Dovecotのwikiを探すと「AuthDatabase/VPopMail」というページを発見。
vpopmail専用のデータベースファイルを使っている場合は、「–with-vpopmail」でコンパイル。
vpopmailからmysqlを使っている場合は、「–with-sql –with-mysql」でコンパイルということが分かる。

次に、設定。

うちの環境では、単純なvpopmailではなく、ユーザ管理にmysqlを利用している。
このため、vpopmail由来のmysqlを使う場合に重要なポイントのみを記載する。

・「/etc/dovecot/dovecot-sql.conf.ext」

password_query = SELECT CONCAT( pw_name,'@', pw_domain ) AS user,\
        pw_passwd AS password \
        FROM vpopmail  \
        where pw_name='%n' AND pw_domain='%d' ;
user_query = SELECT pw_dir as home, \
        <vpopmailのUID> AS uid, <vchkpwのGID> AS gid \
        FROM vpopmail \
        WHERE pw_name = '%n' AND pw_domain = '%d'

なお、動作確認時はmysqlを起動して「SELECT CONCAT( pw_name,’@’, pw_domain ) AS user, pw_passwd AS password FROM vpopmail where pw_name=’ユーザ名’ AND pw_domain=’ドメイン名’ ;」という感じで実行して、以下の様な感じで表示されればok。

# mysql -u root --password=パスワード
mysql> use vpopmail;
Database changed
mysql> SELECT CONCAT( pw_name,'@', pw_domain ) AS user, pw_passwd AS password FROM vpopmail where pw_name='ユーザ名' AND pw_domain='ドメイン名';
+---------------------+------------------------------------+
| user                | password                           |
+---------------------+------------------------------------+
| ユーザ名@ドメイン名   | 文字列~                           |
+---------------------+------------------------------------+
1 row in set (0.00 sec)

mysql> quit
Bye
#

・「/etc/dovecot/conf.d/10-auth.conf」と「/etc/dovecot/conf.d/auth-sql.conf.ext」
上記で作成したsql設定ファイルをここで指定
10-auth.confでは、下記の「sql」に関するところだけを修正。(vpopmailはいじらない)

!include auth-sql.conf.ext

auth-sql.conf.extでは、dovecot-sql.conf.extのパスがきちんと指定されていることを確認。

・「/etc/dovecot/conf.d/10-mail.conf」
Maildirを操作する際のユーザ権限のチェックをしている項目の設定を変更する。
今回は元々vpopmailの1アカウントのみで全ユーザを動かしていたため、UIDを1つだけ指定している形になる。

first_valid_uid=<vpopmailのUID>
last_valid_uid=<vpopmailのUID>
first_valid_gid=<vchkpwのGID>
last_valid_gid=<vchkpwのGID>

なお、この設定をしていないと、POP3などでログインしてみると、/var/log/maillogに以下のようなエラーが出力される。

Feb 25 15:21:46 サーバ名 dovecot: pop3: Error: user ユーザ名@ドメイン名: Mail access for users with UID <vpopmailのUID> not permitted (see first_valid_uid in config file, uid from userdb lookup).
Feb 25 15:21:46 サーバ名 dovecot: pop3: Error: Invalid user settings. Refer to server log for more information.

・POP3の未読管理の移行
標準設定だとPOP3のUIDLコマンドの出力結果が全然違うので、メーラ側の未読管理がリセットされる。
dovecot公式wikiに「Migration」という項目がある。

「/etc/dovecot/conf.d/20-pop3.conf」内の「pop3_uidl_format」を定義することで対処できる、とあるが、20-pop3.conf内に記載されている「Courier: %f or %v-%u (both might be used simultaneosly)」を設定してみると、「%f」と「%v-%u」は、Courier-IMAPでの結果と異なるものになる。

よく見てみると、「Migration/Courier v0.43 and later to Dovecot v1.1+」と専用の項目がある。
「courier-dovecot-migrate.pl」を使って、各Maildir内にある「courierimapuiddb」などをdovecot用の「dovecot-uidlist」にコンバートする、というもの。
コレを実行することで、同じUIDLの結果が得られるようになった。

・「/etc/dovecot/conf.d/15-mailboxes.conf」
IMAP用メールボックスの標準名調整。
いままで下書きフォルダ名「Draft」、スパムメール用「Spam」と設定していた。
dovecotの標準設定では「Drafts」、「Junk」であるため、読み替え設定を入れる

  mailbox Draft {
    special_use = \Drafts
  }
  mailbox Spam {
    special_use = \Junk
  }
  mailbox Trash {
    special_use = \Trash
  }

・・・・・・・

で、ここまでやって気がついたこと。
Courier-IMAPでも、vpopmail関係無く、直接MySQLを見れば良かったんじゃね?ということ。

まぁ、2つのバージョンの並行動作が難しいので、動作確認がしにくく、やりたくはないですがね。