簡易的なメールスクリプト

Windows環境において、自作バッチファイルやアプリなどのエラー判定時にメール連携させたい場合があります。エラー判定時に呼び出しすることでメール送信できる簡易的なスクリプトのテンプレートを公開します。また、メールが成功しない場合の切り分けツールとしても有効です。

以下内容を拡張子vbsで保存します。ここではmailsend.vbsとして保存します。

'Option Explicit
Set oMsg = CreateObject("CDO.Message")

'送信元アドレス
oMsg.From = "from@test.domain"

'送信先アドレス(To)
oMsg.To = "to@test.domain"

'送信先アドレス(Cc)
oMsg.Cc = "cc@test.domain"

'件名
oMsg.Subject = "test"

'本文(& vbCrLf _は改行)
oMsg.TextBody = "test1" & vbCrLf _
& "test2" & vbCrLf _

'送信方法(固定)
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'SMTPサーバー
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.domain"

'SMTPポート
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587

oMsg.Configuration.Fields.Update
oMsg.Send

保存したスクリプトをコマンドプロンプト上で呼び出します。

cscript mailsend.vbs

以上

vsftpdログの日本語文字化けを解消する

vsftpdは、デフォルト状態のログでは日本語含むファイル名が文字化けします。これを解消するためには、ソースを編集したオリジナルパッチを適用する必要があります。

環境
OS:CentOS7.6
vsftpdバージョン:3.0.2

  1. vsftpdのソースをダウンロードします。
    # wget http://vault.centos.org/7.6.1810/os/Source/SPackages/vsftpd-3.0.2-25.el7.src.rpm
  2. rpm作成環境を準備します。
    # yum -y install rpm-build
    # useradd -s /sbin/nologin mockbuild
  3. vsftpfをrpmでインストールします。
    # rpm -ivh vsftpd-3.0.2-25.el7.src.rpm
  4. vsftpdのソースを展開し、ソースをバックアップします。
    # tar xvfz rpmbuild/SOURCES/vsftpd-3.0.2.tar.gz
    # mkdir backup
    # cp -p vsftpd-3.0.2/logging.c vsftpd-3.0.2/logging.c.org
    # cp -p rpmbuild/SOURCES/vsftpd-3.0.2.tar.gz backup/
  5. ソースのロギングライブラリを編集し、オリジナルパッチを作成します。

    # vi vsftpd-3.0.2/logging.c
      str_replace_unprintable(p_str, '?');
      →/*str_replace_unprintable(p_str, '?');*/
    # echo "diff -up vsftpd-3.0.2/logging.c.org vsftpd-3.0.2/logging.c" > vsftpd-3.0.2-logging_charset.patch
    # diff -up vsftpd-3.0.2/logging.c.org vsftpd-3.0.2/logging.c >> vsftpd-3.0.2-logging_charset.patch
    # mv vsftpd-3.0.2-logging_charset.patch /root/rpmbuild/SOURCES/
    # cp -p rpmbuild/SPECS/vsftpd.spec backup/
    # vi rpmbuild/SPECS/vsftpd.spec
      Release: 25%.{?dist} → Release: 25.tcs%{?dist}
      # Patch51: vsftpd-3.0.2-logging_charset.patch
      # %patch51 -p1 -b .org_version
    # tar cvfz vsftpd-3.0.2.tar.gz vsftpd-3.0.2/
    # cp -p vsftpd-3.0.2.tar.gz rpmbuild/SOURCES/
  6. ソースをコンパイルする環境の準備

    # yum -y install pam-devel
    # yum -y install libcap-devel
    # yum -y install openssl-devel
    # yum -y install tcp_wrappers-devel
    # yum -y install gcc
    # rpmbuild -ba rpmbuild/SPECS/vsftpd.spec
    
  7. オリジナルパッチの適用

    # rpm -ivh rpmbuild/RPMS/x86_64/vsftpd-3.0.2-25.org.el7.x86_64.rpm

    以上

ZabbixAgentのソースコンパイル手順

LinuxOSにパッケージをインストールする際に、ハードウェア都合によるアーキテクチャの仕様により、パッケージがリポジトリに公開されておらず、インストールできないケースがあります。この場合、ソースをコンパイルしてインストールすることで解決できることがありますので、実際にZabbixAgentで実施した手順を公開します。

環境
H/W:OpenBlocks A6
アーキテクチャ:armel
OS:Debian 7.11(Wheezy)
要件:armelアーキテクチャのOSにZabbixAgentをインストールする

# groupadd zabbix
# useradd -g zabbix zabbix
# apt-get install gcc
# wget https://cdn.zabbix.com/zabbix/sources/stable/3.0/zabbix-3.0.31.tar.gz
(実際に必要なバージョンを指定してください)
# tar -zxvf zabbix-3.0.31.tar.gz
# cd zabbix-3.0.31
# ./configure --enable-agent
# make install

※confはZabbixデフォルトの/etc/zabbix/配下に配置したいところですが、ソースのデフォルトが/usr/local/etc/になっていたため、ソースのデフォルトを優先しました。

# cp /usr/local/etc/zabbix_agentd.conf{,.org}
# vi /usr/local/etc/zabbix_agentd.conf
  PidFile=/var/run/zabbix/zabbix_agentd.pid
  LogFile=/var/log/zabbix/zabbix_agentd.log
  Server=xxx.xxx.xxx.xxx
# mkdir /var/log/zabbix
# chown -R zabbix:zabbix /var/log/zabbix
# cp -p /etc/init.d/zabbix-agent{,.org}
# cp zabbix-3.0.31/misc/init.d/debian/zabbix-agent /etc/init.d/
# vi /etc/init.d/zabbix-agent
  #PID=/tmp/$NAME.pid
  PID=/var/run/zabbix/$NAME.pid
# /etc/init.d/zabbix-agent start

以上

DNSサーバ運用編

DNSサーバ正系副系の2環境のサービスイン後、新たにレコード追加し、正系副系の両方に同期させる手順です。

要件:efg.test.domainを192.168.1.201に名前解決させる

  1. 正系DNSサーバーにログインし、正引き/逆引きゾーンファイルをバックアップします

    # cp -p /etc/bind/test.domain.lan{,.yyyymmdd}
    # cp -p /etc/bind/1.168.192.db{,.yyyymmdd}
  2. 正引きゾーンファイルを修正します

    # vi /etc/bind/test.domain.lan
    シリアルを更新する yyyymmdd01 ; serial
    レコードを追記する efg IN A 192.168.1.201
    
  3. 逆引きゾーンファイルを修正します

    # vi /etc/bind/1.168.192.db
    シリアルを更新する yyyymmdd02 ; serial
    レコードを追記する 201 IN PTR test.domain.
  4. Bind9を再起動します
    # rndc reload
  5. 副系サーバにログインし、ゾーン転送されていることを確認します

    # cat /etc/bind/slaves/test.domain.lan
    # cat /etc/bind/slaves/1.168.192.db

以上

DNSサーバ 副系サーバ構築編

「DNSサーバ 正系サーバ構築編」の冗長化として、副系サーバの構築手順を公開します。正系サーバがダウンしても副系サーバで稼働します。構築手順は正系サーバとほとんど同じですが、一部コンフィグにおいて正系サーバを指定する箇所があります。

環境は以下のとおりです。

HW:OpenBlocks A6
OS:Debian7.11(Wheezy) ※OpenBlocks A6標準搭載
DNSサーバ:Bind9
正系サーバIPアドレス:192.168.1.100/24
副系サーバIPアドレス:192.168.1.101/24
名前解決要件:abc.test.domainを192.168.1.200として名前解決する

DNSサーバ類のインストール

# aptitude -y install bind9 bind9utils dnsutils

Bindのコンフィグ作成

# cp -p /etc/bind/named.conf{,.org}
# vi /etc/bind/named.conf
  #include "/etc/bind/named.conf.default-zones";
  include "/etc/bind/named.conf.internal-zones";

# vi /etc/bind/named.conf.internal-zones
  # 正引きゾーン定義
  zone "test.domain" {
  type slave;
  masters { 192.168.1.100; };
  file "/etc/bind/slaves/test.domain.lan";
  };

  # 逆引きゾーン定義
  zone "1.168.192.in-addr.arpa" {
  type slave;
  masters { 192.168.1.100; };
  file "/etc/bind/slaves/1.168.192.db";
  };

# vi /etc/bind/named.conf.options
  allow-query { localhost; 192.168.1.0/24; };
  allow-transfer { localhost; 192.168.1.0/24; };
  allow-recursion { localhost; 192.168.1.0/24; };
  # listen-on-v6 { any; };

# vi /etc/default/bind9
  OPTIONS="-u bind -4"

# mkdir /etc/bind/slaves
# chown bind. /etc/bind/slaves

Bindの再起動

# /etc/init.d/bind9 restart
または
# rndc reload

正系サーバのbind9を再起動させると、定義ファイル(lanファイル、dbファイル)がslaveディレクトリに同期されます。

以上

DNSサーバ 正系サーバ構築編

LAN環境向けのDNSサーバ構築手順です。Debian前提としておりますが、他のLinux系OSでも類似した手順での構築になると思います。今更ではありますが、まだまだ自社内で構築する機会はゼロではないので記事として公開します。

環境は以下のとおりです。

HW:OpenBlocks A6
OS:Debian7.11(Wheezy) ※OpenBlocks A6標準搭載
DNSサーバ:Bind9
サーバーIPアドレス:192.168.1.100/24
名前解決要件:abc.test.domainを192.168.1.200として名前解決する

DNSサーバ類のインストール

# aptitude -y install bind9 bind9utils dnsutils

Bindのコンフィグ設定

# cp -p /etc/bind/named.conf{,.org}
# vi /etc/bind/named.conf
  include "/etc/bind/named.conf.default-zones";
  include "/etc/bind/named.conf.internal-zones";
# vi /etc/bind/named.conf.internal-zones
  view "internal" {
  # 対象範囲を定義する
  match-clients {
  localhost;
  192.168.1.0/24;
  };

  # 正引きゾーンを定義する
  zone "test.domein" {
  type master;
  file "/etc/bind/test.domain.lan";
  allow-update { none; };
  };

  # 逆引きゾーンを定義する(逆のオクテット名で作成する)
  zone "1.168.192.in-addr.arpa" {
  type master;
  file "/etc/bind/1.168.192.db";
  allow-update { none; };
  };

  include "/etc/bind/named.conf.default-zones";
  empty-zones-enable no;
  };

# vi /etc/bind/named.conf.options
  allow-query { localhost; 192.168.1.0/24; };
  allow-transfer { localhost; 192.168.1.0/24; };
  allow-recursion { localhost; 192.168.1.0/24; };
  # listen-on-v6 { any; };

# vi /etc/resolv.conf
  nameserver 192.168.1.100

# vi /etc/bind/test.domain.lan
  $TTL 86400
  @ IN SOA ns.test.domain. root.test.domain. (
  yyyymmdd01 ;Serial
  3600 ;Refresh
  1800 ;Retry
  604800 ;Expire
  86400 ;Minimum TTL
  )
  IN NS ns.test.domain.
  IN A 192.168.1.100
  ns IN A 192.168.1.100
  abc IN A 192.168.1.200

# vi /etc/bind/1.168.192.db
  $TTL 86400
  @ IN SOA ns.test.domain. root.test.domain. (
  yyyymmdd01 ;Serial
  3600 ;Refresh
  1800 ;Retry
  604800 ;Expire
  86400 ;Minimum TTL
  )

  IN NS ns.test.domain.
  IN PTR test.domain.
  IN A 255.255.255.0
  100 IN PTR ns.test.domain.
  200 IN PTR abc.test.domain.

# vi /etc/default/bind9
  #OPTIONS="-u bind"
  OPTIONS="-u bind -4"

Bindを再起動する

# /etc/init.d/bind9 restart

※インターネット公開向け名前解決は別途external-zonesの構築が必要です。

以上