2016年12月28日水曜日

ZABBIX ファイルログ監視

1) 設定→テンプレート→テンプレートの作成。
  テンプレート名:CXD_Template_linux_messages
  グループ 所属グループ:該当グループ
  ホスト/テンプレート:該当ホスト/テンプレート
2) 設定→該当テンプレート→アプリケーション→アプリケーションの作成
  名前:Linux messages監視
3) 設定→該当テンプレート→アイテム→アイテムの作成
  名前:Linux messagesログの監視
  タイプ:Zabbixエージェント(アクティブ)
  キー:log[/var/log/messages,ERROR,,,,,]
  データ型:ログ
  更新間隔(秒):30(任意)
  ヒストリ保存期間(日):90(任意)
  説明:/var/log/messagesの監視。
  有効:チェック
4) 設定→該当テンプレート→トリガー→トリガーの設定
  名前:Linux messagesログの監視
  深刻度:重要な障害
  条件式:{CXD_Template_linux_messages:log[/var/log/messages,ERROR,,,,,].logsource()}=0
  有効:チェック


 ホストに作成したテンプレートを追加。
5)設定→ホスト→該当ホスト→テンプレート
 新規テンプレートをリンク→選択→追加




【messagesファイルのパーミッション】
1) /var/log/messagesファイルのパーミッション変更
 chgrp zabbix /var/log/messages
   chmod 0640 /var/log/messages

2) vi /etc/logrotete.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
    create 0640 root zabbix
}
~



windows イベント監視

1) 設定→テンプレート→テンプレートの作成
  テンプレート名:CXD_Template_Win_EventLog
  所属グループ:該当グループ
  ホスト/テンプレート:該当ホスト
2) 設定→テンプレート→該当テンプレート→アプケーション→アプリケーションの作成
  名前:EVENTLOG
3) 設定→テンプレート→該当テンプレート→アイテム→アイテムの作成
  名前:イベントログ(アプリケーション)の監視
  タイプ:Zabbixエージェント(アクティブ)
  キー:eventlog[application]
       データ型:ログ
  更新間隔(秒):30(任意)
  ヒストリ保存期間(日):90(任意)
  有効:チェック
4) 設定→テンプレート→該当テンプレート→アイテム→アイテムの作成
  名前:イベントログ(システム)の監視
  タイプ:Zabbixエージェント(アクティブ)
  キー:eventlog[system]
       データ型:ログ
  更新間隔(秒):30(任意)
  ヒストリ保存期間(日):90(任意)
  有効:チェック
5)   設定→テンプレート→該当テンプレート→トリガー→トリガーの作成
  名前:イベントログ[アプリケーション]の監視トリガー
  深刻度:重要な障害
  条件式:{CXD_Template_Win_EVENTLOG:eventlog[application].logseverity()}>1
  有効:チェック
6)   設定→テンプレート→該当テンプレート→トリガー→トリガーの作成
  名前:イベントログ[システム]の監視トリガー
  深刻度:重要な障害
  条件式:{CXD_Template_Win_EVENTLOG:eventlog[system].logseverity()}>1
  有効:チェック


ホストに作成したテンプレートを追加。
7)設定→ホスト→該当ホスト→テンプレート
 新規テンプレートをリンク→選択→追加


2016年12月26日月曜日

Zabbix agentのインストール

1. Zabbix_agentdのインストール(windows エージェント)

【追記】
# yum install https://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-agent-3.2.11-1.el7.x86_64.rpm

# vi /etc/zabbix/zabbix_agentd.conf
 PidFile=/var/run/zabbix/zabbix_agentd.pid
 LogFile=/var/log/zabbix/zabbix_agentd.log
 LogFileSize=2
 Server=192.168.25.199
 ServerActive=192.168.25.199:10051
 Hostname=CentOS7-5
 HostMetadata=CentOS
 HostMetadataItem=system.uname
 Include=/etc/zabbix/zabbix_agentd.d/*.conf

# systemctl enable zabbix-agent
# systemctl start zabbix-agent

エラーがあればSElinux対処
# jornalctl -xe
# ausearch -c 'zabbix_agentd' --raw | audit2allow -M my-zabbixagentd
# semodule -i my-zabbixagentd.pp


■Zabbix agent 入手

http://www.zabbix.com/download.php

zabbix_agents_3.2.0.win.zip

1)c:\zabbix_agentに配置。

c:\zabbix_agent\conf> copy zabbix_agentd.win.conf zabbix_agentd.conf

c:\zabbix_agnet\conf> vim zabbix_agentd.conf

LogFile=c:\zabbix_agent\log\zabbix_agnetd.log
Server=192.168.1.10
EnableRemoteCommands=1
ServerActive=192.168.1.10:10051
HostnameItem=system.hostname
HostMetadata=Windows
HostMetadataItem=system.uname

 
2) zabbix_agentd.exeのプロパティの互換性タブ→「□管理者としてこのプログラムを実行する」にチェック
3)コントロールパネル->Windowsファイアウォール->詳細設定->受信の規制→「新しい規則」でポート10050を追加。

4)インストール
 cd C:\zabbix_agent\bin\win64
zabbix_agentd.exe --config c:\zabbix_agent\conf\zabbix_agentd.conf --install

5) サービスの開始
zabbix_agentd.exe --start
※コントロールパネル→管理ツール→サービスからも開始可能。 
 
 
【参考】
サービス停止               zabbix_agentd.exe --stop
サービスアンインストール    zabbix_agentd.exe --uninstall 
 
 
■Zabbixサーバの設定
1)ホストの自動登録
設定→アクション→イベントソースを自動登録
名前:Windowsサーバの自動登録
新規条件:ホストメタデータ含まれるWindows
 
※エージェント側のzabbix_agentd.conf内に、HostMetadata=Windowsを設定する。 
 

2)実行内容
デフォルトの件名:Auto registration: {HOST.HOST}
デフォルトのメッセージ:
     Host name: {HOST.HOST}
     Host IP: {HOST.IP}
     Agent port: {HOST.PORT}
実行内容→実行内容のタイプ:ホストを追加
        //              :ホストグループに追加
        //              :テンプレートとのリンク作成(Template OS Windows)
 
 
 
一覧の戻って
ステータス:有効
 
 
2)  Zabbix_agentのインストール(Linux エージェント CentOS7)
■Zabbix agent 入手
http://www.zabbix.com/download
Zabbix 3.2 Red Hat Enterprise Linux CentOS Oracle Linux x86_64

-----------------------------------
※ 追記(20211117)
# export HTTP_PROXY=http://192.168.100.254:3128
# export HTTPS_PROXY=http://192.168.100.254:3128
# wget https://cdn.zabbix.com/zabbix/binaries/stable/5.4/5.4.6/zabbix_agent-5.4.6-linux-4.12-ppc64le-static.tar.gz
# mkdir tmp
# cd tmp
#  tar xvzf zabbix_agent-5.4.6-linux-4.12-ppc64le-static.tar.gz
# cd zabbix_agent-5.4.6-linux-4.12-ppc64le-static
# cp -r etc /
# cp -r usr / 
-------------------------------------
※ 追記(こっちの方がいい)
# dnf install  https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-apache-conf-5.4.7-1.el8.noarch.rpm
# dnf install  https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-agent2-5.4.7-1.el8.x86_64.rpm

# vi /etc/zabbix/zabbix_agentd.conf
# firewall-cmd --add-port=10050/tcp --zone=public --permanent
# firewall-cmd --reload
# systemctl start zabbix-agent2
# systemctl enable zabbix-agent2

-------------------------------------


# yum localinstall zabbix-agent-3.2.3-1.el7.x86_64.rpm
 
# vi /etc/zabbix/zabbix_agentd.conf

 PidFile=/var/run/zabbix/zabbix_agentd.pid
 LogFile=/var/log/zabbix/zabbix_agentd.log
 LogFileSize=2
 Server=192.168.1.10
 ServerActive=192.168.1.10:10051

 Hostname=CentOS7-5
 HostMetadata=CentOS
 HostMetadataItem=system.uname
 Include=/etc/zabbix/zabbix_agentd.d/*.conf

# systemctl enable zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
# systemctl start zabbix-agent
Job for zabbix-agent.service failed because a configured resource limit was exceeded. See "systemctl status zabbix-agent.service" and "journalctl -xe" for details.

エラーが出たのでSELinux Troubleshooterの解決策を実行。
# ausearch -c 'zabbix_agentd' --raw | audit2allow -M my-zabbixagentd
# semodule -i my-zabbixagentd.pp
 
 
3) Zabbix_agentのインストール(Redhat6.5) 
■Zabbix agent 入手
http://www.zabbix.com/download
 
Zabbix 3.2 Red Hat Enterprise Linux CentOS Oracle Linux  Version 6  x86_64
 
# yum localinstall zabbix-agent-3.2.6-1.el6.x86_64.rpm
 
# vi /etc/zabbix/zabbix_agentd.conf
 PidFile=/var/run/zabbix/zabbix_agentd.pid
 LogFile=/var/log/zabbix/zabbix_agentd.log
 LogFileSize=0
 EnableRemoteCommands=1
 Server=192.168.1.10
 ServerActive=192.168.1.10:10051
 Hostname=redhat65
 HostMetadata=redhat
 HostMetadataItem=system.uname

 Include=/etc/zabbix/zabbix_agentd.d/*.conf
 
# vi /etc/sysconfig/iptables
Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# service iptables restart 

# service zabbix-agent start
# chkconfig zabbix-agent on







2016年12月21日水曜日

ZABBIX メール通知

1) 管理→メデイアタイプ Emailを選択
名前: Emergenxy Gmail
タイプ:メール
SMTPサーバ:smtp.gmail.com
SMTPサーバポート番号:465
SMTP helo:任意
送信元メールアドレス:xxxxxx@gmail.com
接続セキュリティ: SSL/TLS
SSLビア検証:なし
SSLホスト検証:なし
認証:パスワード
ユーザ名:xxxxxx@gmail.com
パスワード:xxxxxxxx
有効:チェク

一覧に戻って、ステータス→有効。

2) 設定→アクション  一覧から「Report Problems to Zabbix administrators」選択、またはアクション作成

・実行内容
デフォルトのアクション実行ステップ間隔:3600
デフォルトの件名:【障害】{TRIGGER.STATUS}: {TRIGGER.NAME}
デフォルトのメッセージ:

【重要度】    {TRIGGER.SEVERITY}
【状態】     {TRIGGER.STATUS}
【検出日時】   {EVENT.DATE} {EVENT.TIME}
【ホスト名】   {HOSTNAME}
【IPアドレス】  {IPADDRESS}
【アイテム名】  {ITEM.NAME}
【アイテムキー】 {TRIGGER.KEY}
【アイテム値】  {ITEM.VALUE}
【コメント】   {TRIGGER.COMMENT}

Trigger: {TRIGGER.NAME}
Trigger status: {TRIGGER.STATUS}
Trigger severity: {TRIGGER.SEVERITY}
Trigger URL: {TRIGGER.URL}

Item values:

1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}

Original event ID: {EVENT.ID}

メンテンナンス期間内の実行内容補修:チェック
実行内容→実行内容詳細:
ステップ:1-1
ステップ間隔:0
実行内容のタイプ:メッセージの送信
ユーザーブループに送信:Zabbix administrators
ユーザに送信:
次のメディアのみ使用:すべて
デフォルトのメッセージ:チャック
実行条件:

・復旧時実行内容
実行な内容:以前障害メッセージを送った先に通知
実行内容のタイプ:復旧メッセージの送信
デフォルトのメッセージ:チャック


一覧に戻って、ステータス→有効

3) 管理→ユーザ  一覧から該当ユーザの選択→メディア→追加
タイプ:Emergenxy Gmail
送信先:xxxxxx@xxxxx.co.jp
有効な時間帯:1-7,00:00-24-00
指定した深刻の時に使用;必要な項目にチェック
有効:チェック



【メール内容のカスタマイズ】
https://www.zabbix.com/documentation/jp/2.0/manual/appendix/macros/supported_by_location










2016年12月20日火曜日

ZABBIX サーバ死活監視(PING監視)

1) 「設定」→「ホストグループ」→「ホストグループの作成」
グループ名: Server_Group

2) 「設定」→「テンプレート」→「テンプレートの作成」
テンプレート名:SV_Template_Ping
所属グループ :Server_Group

3) 「設定」→「テンプレート」 SV_Template_Ping行の「アプリケーション」→「アプリケーションの作成」
名前:ping

4)  「設定」→「テンプレート」 SV_Template_Ping行の「アイテム」→「アイテムの作成」
名前:PING監視(任意)
タイプ:シンプルチェック
キー:icmpping[,3,5000,68,3000]
値のマッピングの使用:Service state(0 ⇒ Down, 1 ⇒ Up)
アプリケーション:ping

※参考
icmpping[<target>,<packets>,<interval>,<size>,<timeout>]
target - ホストのIPまたはDNS名
packets - パケット数
interval - 連続するパケットの間隔(ミリ秒)
size - パケットサイズ(バイト)
timeout - タイムアウト(ミリ秒)

5) 「設定」→「テンプレート」 SV_Template_Ping行の「トリガー」→「トリガーの作成」
名前:{HOST.NAME} Ping
条件式:{A_Template_Ping:icmpping[,3,5000,68,3000].last()}=0      
深刻度:致命的な障害


※条件式は、追加→関数→「最新(T秒前/T個前)の値=N」 で挿入。

6) 「設定」→「ホスト」 ホスト選択後、「テンプレート」からSV_Templete_Pingを追加。

2016年12月19日月曜日

ZABBIX SNMP Trap 設定

【snmp/snmptrap】

# yum -y install net-snmp
# yum -y install net-snmp-utils
# yum -y install snmptt
# yum install perl-Sys-Syslog


# firewall-cmd --permanent --zone=public --add-service=snmp
# firewall-cmd --permanent --zone=public --add-service=snmptrap
# firewall-cmd --reload
# firewall-cmd --list-all

# vi /etc/snmp/snmptrapd.conf<< __EOF__

authCommunity execute public
traphandle default /usr/sbin/snmptthandler

__EOF__

【参考】Vendor MIBの登録(snmptt使用時は、必ずしも必要ではない。)

# mkdir /usr/share/snmp/vendors-mibs               <-- Vendor固有のMIB格納場所
# ls /usr/share/snmp/vendors-mibs
 FORTINET-CORE-MIB.MIB
 FORTINET-FORTIGATE-MIB.MIB

# vi /etc/snmp/snmp.conf
MIBDIRS /usr/share/snmp/mibs:/usr/share/snmp/vendors-mibs
MIBS all

# snmptranslate .1.3.6.1.4.1.9.9.46.2.0.7              <-- 確認

※MIBファイルからsnmptt.confファイル作成
# snmpttconvertmib --in /usr/share/snmp/vendors-mibs/FORTINET-CORE-MIB.MIB --out snmptt.conf.core.fortinet

# snmpttconvertmib --in /usr/share/snmp/vendors-mibs/FORTINET-FORTIGATE-MIB.MIB --out snmptt.conf.fortigate.fortinet


# vi /etc/sysconfig/snmptrapd
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/vendors-mibs -m all"

# vi  /etc/snmp/snmptt.ini
mode = daemon
log_file = /var/log/snmptt/snmptt.log
date_time_format = %Y/%m/%d %H:%M:%S

syslog_enable =1
           ↓
syslog_enable = 0


■Zabbixサーバの設定と再起動

# vi /etc/zabbix/zabbix_server.conf

SNMPTrapperFile=/var/log/snmptt/snmptt.log

# StartSNMPTrapper=0
               ↓
StartSNMPTrapper=1


# systemctl restart zabbix-server
# systemctl enable zabbix-server

(参考-クライアントの起動)
# systemctl restart zabbix-agent
# systemctl enable zabbix-agent


■SNMPTTの設定。
# vi /etc/snmp/snmptt.ini

snmptt_conf_files = <<END
/etc/snmp/conf.d/snmptt.conf.generic
/etc/snmp/conf.d/snmptt.conf.cisco
/etc/snmp/conf.d/snmptt.conf.f5
/etc/snmp/conf.d/snmptt.conf.yamaha
/etc/snmp/conf.d/snmptt.conf.core.fortinet
/etc/snmp/conf.d/snmptt.conf.fortigate.fortinet
END

# mkdir /etc/snmp/conf.d
このディレクトリに各社の変換したファイルを格納。

■ZABBIX Webへの設定
「設定」→ホスト 該当ホスト選択後、
SNMPインタフェース にIPアドレス入力。

■ZABBIXの設定

1) テンプレート作成
設定→テンプレート→テンプレートの作成
テンプレート名:CXD_Template_SNMP_Trap
所属グループ:必要な所属グループを選択
 Managemant Servers
 Network Devices



■Templatesの作成

2) アプリケーション作成
設定→テンプレート→テンプレート行のアプリケーションを選択し、アプリケーションの作成
名前:SNMP Trap 受信アプリケーション

3) アイテムの作成
設定→テンプレート行のアイテムを選択し、アイテムの作成
名前:SNMP Trap  受信アイテム
タイプ:SNMPトラップ
キー:snmptrap
データ型:ログ
ログの時間の形式:yyyy/MM/dd hh:mm:ss
ヒストリ保存期間:90
説明:SNMP TRAPを受信しました。
有効:チェック

3) トリガーの作成
設定→テンプレート行のトリガーを選択し、トリガーの作成
名前:SNMP Trap の受信 from {HOST.NAME}
深刻度:重要な障害
条件式:
障害:{CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].str(Failure)}<>0
復旧:{CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].str(Recovered)}<>0
手動でクローズ許可:○
説明:{HOST.NAME}からSNMP TRAPを受信しました。


一覧にも戻ってステータスを有効に変更。

※設定→ホスト→ホスト行のトリガー で確認する不明になっていて!マークがついている。???


最後に、該当ホストにテンプレートを設定する。

設定→ホスト選択後、 テンプレートタブを選択し、作成したテンプレートを選択。


■コミュニティ名の変更
管理→一般→マクロ
{$SNMP_COMMUNITY} ⇒ public    ←変更


復旧(参考)
{CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].str(Trap Recovered)}=0&(({TRIGGER.VALUE}=0& {CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].regexp(.*)}=1}| {TRIGGER.VALUE}=1)


({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(ファン障 害)}=1)or(({TRIGGER.VALUE}=1)and({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(ファン復旧)}=0))

({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(リンクアグリケーション障 害)}=1)or(({TRIGGER.VALUE}=1)and({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(リンクアグリケーション復旧)}=0))







【参考】


【YAMAHA】
#vi /etc/snmp/snmptt.conf.yamaha

#
#
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar Device reinitialized coldStart
SDESC
YAMAHA Router coldStart
EDESC
#
#
#
EVENT warmStart .1.3.6.1.6.3.1.1.5.2 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar Device reinitialized warmStart
SDESC
YAMAHA Router warmStart
EDESC
#
#
#
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar Link Down on LAN interface $1.
SDESC
YAMAHA Router LAN Link Down Event
EDESC
#
#
#
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar Link Up on LAN interface $1.
SDESC
YAMAHA Router LAN Link Up Event
EDESC
#
#
#
EVENT PPlinkDown .1.3.6.1.4.1.1182.2.3.0.2 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar Link Down on PP interface $1.
SDESC
yrIfPpLinkDown
EDESC
#
#
#
EVENT PPlinkUp .1.3.6.1.4.1.1182.2.3.0.3 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar Link Up on PP interface $1.
SDESC
yrIfPpLinkUp
EDESC
#
#







Variable substitution is performed on this string using the following variables:
$A – Trap agent host name (see Note 1)
$aA – Trap agent IP address
$Be – securityEngineID (snmpEngineID) (see Note 7)
$Bu – securityName (snmpCommunitySecurityName) (see Note 7)
$BE – contextEngineID (snmpCommunityContextEngineID) (see Note 7)
$Bn – contextName (snmpCommunityContextName) (see Note 7)
$c – Category
$C – Trap community string
$D – Description text from SNMPTT.CONF or MIB file (see Note 6)
$E – Enterprise trap OID in symbolic format
$e  – Enterprise trap OID in number format
$Fa  – alarm (bell) (BEL)
$Ff  – form feed (FF)
$Fn  – newline (LF, NL)
$Fr  – return (CR)
$Ft  – tab (HT, TAB)
$Fz  – Translated FORMAT line (EXEC only)
$G  – Generic trap number (0 if enterprise trap)
$H  – Host name of the system running SNMPTT
$S  – Specific trap number (0 if generic trap)
$N
最後に、該当ホストにテンプレートを設定する。

設定→ホスト選択後、 テンプレートタブを選択し、作成したテンプレートを選択。




復旧(参考)
{CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].str(Trap Recovered)}=0&(({TRIGGER.VALUE}=0& {CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].regexp(.*)}=1}| {TRIGGER.VALUE}=1)


({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(ファン障 害)}=1)or(({TRIGGER.VALUE}=1)and({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(ファン復旧)}=0))

({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(リンクアグリケーション障 害)}
最後に、該当ホストにテンプレートを設定する。

設定→ホスト選択後、 テンプレートタブを選択し、作成したテンプレートを選択。




復旧(参考)
{CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].str(Trap Recovered)}=0&(({TRIGGER.VALUE}=0& {CXD_Template_SNMP_Trap:snmptrap[EMERGENCY].regexp(.*)}=1}| {TRIGGER.VALUE}=1)


({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(ファン障 害)}=1)or(({TRIGGER.VALUE}=1)and({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(ファン復旧)}=0))

({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(リンクアグリケーション障 害)}=1)or(({TRIGGER.VALUE}=1)and({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(リンクアグリケーション復旧)}=0))

=1)or(({TRIGGER.VALUE}=1)and({CXD_Template_SNMP_Trap:snmptrap["Status Events"].str(リンクアグリケーション復旧)}=0))

– Event name defined in .conf file of matched entry
$i  – Event OID defined in .conf file of matched entry (could be a wildcard OID)
$O – Trap OID in symbolic format (see Note 4)
$o – Trap OID in numerical format (see Note 4)
$R, $r  – Trap hostname (see Note 1)
$aR, $ar – IP address
$s  – Severity
$T  – Uptime:  Time since network entity was initialized
$X  – Time trap was spooled (daemon mode) or current time (standalone mode)
$x  – Date trap was spooled (daemon mode) or current date (standalone mode)
$# – Number of (how many) variable-bindings in the trap
$$  – Print a $
$@ – Number of seconds since the epoch of when the trap was spooled (daemon mode) or the current time (standalone mode)
$n  – Expand variable-binding n (1-n(see Note 2,5)
$+n  – Expand variable-binding n (1-n) in the format of variable name:value (see Note 2,3,5)
$-n  – Expand variable-binding n (1-n) in the format of variable name (variable type):value (see Note 2,3,5)
$vn  – Expand variable name of the variable-binding n (1-n)(see Note 3)
$*  – Expand all variable-bindings (see Note 5)
$+*  – Expand all variable-bindings in the format of variable name:value (see Note 2,3,5)
$-*  – Expand all variable-bindings in the format of variable name (v
#vi /etc/snmp/snmptt.conf

下記追加

#
# Zabbixテスト用
#
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*

※snmptt.confについては、下記を参照。

# systemctl enable snmptt
# systemctl start snmptt

# systemctl enable snmptrapd
# systemctl start snmptrapd


【snmptrap確認】
# snmptrap -v 2c -c public  localhost '' .1.3.6.1.6.3.1.1.5.3
# snmptrap -v 2c -c public 192.168.25.199 '' systemStats 1 s "TEST TRAP Message"
# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "SNMP Trap test message"


# cat /var/log/snmptt/snmptt.log を確認。

ariable type):value (see Note 2,3,5)

出展: https://log4hc.wordpress.com/2011/09/19/snmp-trap-translator-v1-3/

参考:http://ricemalt.blog98.fc2.com/blog-category-5.html










#vi /etc/snmp/snmptt.conf

下記追加

#
# Zabbixテスト用
#
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*

※snmptt.confについては、下記を参照。
http://snmptt.sourceforge.net/docs/snmptt.shtml

# systemctl enable snmptt
# systemctl start snmptt

# systemctl enable snmptrapd
# systemctl start snmptrapd


【snmptrap確認】
# snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3
# snmptrap -v 2c -c public 192.168.25.199 '' systemStats 1 s "TEST TRAP Message"
# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "SNMP Trap test message"


# cat /var/log/snmptt/snmptt.log を確認。

#vi /etc/snmp/snmptt.conf

下記追加

#
# Zabbixテスト用
#
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*

※snmptt.confについては、下記を参照。
http://snmptt.sourceforge.net/docs/snmptt.shtml

# systemctl enable snmptt
# systemctl start snmptt

# systemctl enable snmptrapd
# systemctl start snmptrapd


【snmptrap確認】
# snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3
# snmptrap -v 2c -c public 192.168.25.199 '' systemStats 1 s "TEST TRAP Message"
# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "SNMP Trap test message"


# cat /var/log/snmptt/snmptt.log を確認。






ログローテートの設定

#vi /etc/logrotate.d/snmptt
/var/log/snmptt/snmptt*.log /var/log/snmptt/snmptthandler.debug {
 weekly
 notifempty
 missingok
}

/var/log/snmptt/snmptt.debug {
 weekly
 notifempty
 missingok
 postrotate
 /etc/init.d/snmptt reload >/dev/null 2>/dev/null || true
 endscript
}
#vi /etc/snmp/snmptt.conf

下記追加

#
# Zabbixテスト用
#
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*

※snmptt.confについては、下記を参照。
http://snmptt.sourceforge.net/docs/snmptt.shtml

# systemctl enable snmptt
# systemctl start snmptt

# systemctl enable snmptrapd
#vi /etc/snmp/snmptt.conf

下記追加

#
# Zabbixテスト用
#
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*

※snmptt.confについては、下記を参照。
http://snmptt.sourceforge.net/docs/snmptt.shtml

# systemctl enable snmptt
# systemctl start snmptt

# systemctl enable snmptrapd
# systemctl start snmptrapd


【snmptrap確認】
# snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3
# snmptrap -v 2c -c public 192.168.25.199 '' systemStats 1 s "TEST TRAP Message"
# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "SNMP Trap test message"


# cat /var/log/snmptt/snmptt.log を確認。

# systemctl start snmptrapd


【snmptrap確認】
# snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3
# snmptrap -v 2c -c public 192.168.25.199 '' systemStats 1 s "TEST TRAP Message"
# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "SNMP Trap test message"


# cat /var/log/snmptt/snmptt.log を確認。




#vi /etc/snmp/snmptt.conf

下記追加

#
# Zabbixテスト用
#
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*

※snmptt.confについては、下記を参照。
http://snmptt.sourceforge.net/docs/snmptt.shtml

# systemctl enable snmptt
# systemctl start snmptt

# systemctl enable snmptrapd
# systemctl start snmptrapd


【snmptrap確認】
# snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3
# snmptrap -v 2c -c public 192.168.25.199 '' systemStats 1 s "TEST TRAP Message"
# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "SNMP Trap test message"


# cat /var/log/snmptt/snmptt.log を確認。



















RTX1210
console character en.ascii
ip route default gateway 192.168.25.220
ip lan1 address 142.1.5.220/24
switch control use lan1 on
ip lan2 address 142.1.4.220/24
switch control use lan2 on
ip lan3 address 192.168.25.220/24
switch control use lan3 on
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 142.1.5.2-142.1.5.100/24
dns server 128.1.41.5 128.1.30.81
snmp host 192.168.25.199 public public
snmp trap host 192.168.25.199
snmp trap community public
snmpv2c host 192.168.25.199 public public
snmpv2c trap host 192.168.25.199
snmpv2c trap community public
snmpv3 host 192.168.25.199 user 1
snmpv3 trap host 192.168.25.199 user 1
snmp trap enable snmp all
snmp sysname RTX1210
dashboard accumulate traffic on




2016年12月16日金曜日

CentOS7 ネットワークコマンドが変わった。(nmcliによるネットワーク設定)

ifconfig →ip a(addr) / ip l(link)
route    →ip r(route)
netstat →ss
netstat -i →ip -s link
arp       →ip n(neighbor)

1) HOST名を設定するには、
# nmcli general hostname XXXXXXXX

・確認
# nmcli general hostname
# hostname
# cat /etc/hostnmame

2) デバイスを確認
# nmcli device
DEVICE         TYPE              STATE                     CONNECTION 
ens3              ethernet      接続済み                 VLAN100    
virbr0            bridge          接続済み (外部)    virbr0     
lo                     loopback   管理無し                  --         
virbr0-nic    tun                管理無し                  --
# nmcli connection
NAME          UUID                                                                            TYPE            DEVICE 
vlan100     74d76747-f9f6-4bb2-b85a-b45b211635da   ethernet    ens3   
virbr0         606cf9e5-c995-4ae7-98cf-164f9e4f406f         bridge        virbr0 
enp1s0      3f028be9-84bd-462e-be1a-3443a2f69d75    ethernet  --
  
# nmcli device show  [device]

3) OS起動時にネットワーク自動接続するには、

# nmcli connection modify enp0s25 connection.autoconnect yes

確認は、
nmcli -p connection show enp0s25

4) 固定IPを使うには、

切断状態からは、
nmcli connection delete enp1s0
nmcli connection add ifname enp1s0 con-name enp0s3 type ethernet autoconnect yes ipv4.method auto
# nmcli connection modify で設定変更 
nmcli connection add ifname enp0s3 con-name enp0s3 type ethernet
nmcli connection modify enp0s3 autoconnect yes
nmcli connection modify enp0s3 ipv4.method auto
nmcli connection up enp1s0
# nmcli connection modify vlan100 ipv4.method manual
# nmcli connection modify vlan100 ipv4.addresses 192.168.25.199/24 
# nmcli connection modify vlan100 ipv4.gateway 192.168.25.254
# nmcli connection modify vlan100 ipv4.dns 192.168.25.254
5) インターフェースを再起動するには、
# nmcli device
# nmcli connection down vlan100
# nmcli connection up  vlan100
6) これらの設定を有効にするには、 
# systemctl restart NetworkManager
7) 動的IPを使うには
# nmcli connection modify vlan100 ipv4.method auto
# nmcli connection modify vlan100 ipv4.connection.autoconnect yes
8) スタティックルートを設定するには
# nmcli connection modify vlan100 +ipv4.routes "192.168.25.0/24 192.168.1.220"

【まとめ】
# nmcli general hostname
# nmcli general hostname XXXXXXXX                                 /* ホスト名設定 */
# nmcli device                                                                               /* デバイス状態確認 */
# nmcli device show eno1                                                        /* デバイス設定確認 */
# nmcli connection modify eno1 ipv4.method manual
# nmcli connection modify eno1 ipv4.addresses 192.168.1.199/24
# nmcli connection modify eno1 ipv4.gateway 192.168.1.254
# nmcli connection modify eno1 ipv4.dns 192.168.1.254
# nmcli connection down    eno1
# nmcli connection up          eno1
# nmcli connection modify eno1 connection.autoconnect yes
# systemctl restart NetworkManager                                  /* 全ネットワーク再起動 */

【まとめ2】
# nmcli device
# nmcli connection

nmcli d
nmcli c
nmcli c delete internet
nmcli c delete vlan100 
nmcli general hostname zabbix

nmcli c add type ethernet ifname enp1s0 con-name "internet" ethernet.mtu 1500
nmcli c mod internet ipv4.method auto
nmcli c mod internet connection.autoconnect yes
nmcli c up internet

nmcli c add type ethernet ifname enp7s0 con-name "vlan100" ethernet.mtu 1500
nmcli c mod vlan100 ipv4.addresses 192.168.100.254/24
nmcli c mod vlan100 ipv4.method manual
#nmcli c mod vlan100 ipv4.gateway 192.168.100.254
#nmcli c mod vlan100 ipv4.dns 8.8.8.8
#nmcli c mod vlan100 +ipv4.routes "172.18.0.0/16 192.168.100.1"
nmcli c mod vlan100 connection.autoconnect yes
nmcli c up  vlan100

systemctl daemon-reload
# systemctl restart NetworkManager

( # systemctl restart network.service )

 簡易GUIツールで設定するには、 
#ip addr show
#nmtui       <- ツール起動 メニューに沿って設定
#systemctl restart network.service
(アドレスの確認)
#ip addr show
  
 
4) ルーティングを設定するには、

# route add -net 128.1.1.0 netmask 255.255.255.0 gw 192.168.1.1


# 恒久的に設定するには
# vi /etc/sysconfig/network-scripts/route-ens33
128.1.1.0/24 via 192.168.1.1

ip route add 128.1.1.0/24 via 192.168.1.1



5)  【telnetdインストール】
# yum -y install telnet telnet-server

# systemctl enable telnet.socket  ←自動起動をON
# systemctl start telnet.socket


# firewall-cmd –permanent –add-rich-rule='rule family="ipv4" source address="192.168.24.0/24" service name="telnet" log prefix="telnet" level="info" limit value="1/m" accept'


# firewall-cmd  --reload


GUIツール
# firewall -config


【VLANを作る】

# nmcli connection add type ethernet ifname enp0s3 con-name enp0s3

# nmcli c add type vlan ifname vlan11 con-name vlan-vlan11 dev enp0s3 id 11
# nmcli c mod vlan-vlan11 ipv4.method manual ipv4.address 192.168.1.101/24
# nmcli c u vlan-vlan11


※インターフェースの命名規則

* Two character prefixes based on the type of interface:
*   en -- ethernet
*   sl -- serial line IP (slip)
*   wl -- wlan
*   ww -- wwan
*
* Type of names:
*   b<number>                             -- BCMA bus core number
*   ccw<name>                             -- CCW bus group name
*   o<index>[d<dev_port>]                 -- on-board device index number
*   s<slot>[f<function>][d<dev_port>]     -- hotplug slot index number
*   x<MAC>                                -- MAC address
*   [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
*                                         -- PCI geographical location
*   [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
*                                         -- USB port number chain



【例】
# nmcli general hostname ホスト名
# nmcli c mod eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24
# nmcli c mod eth0 ipv4.gateway 192.168.1.1
# nmcli c mod eth0 ipv4.dns 192.168.1.1
# nmcli c mod eth0 connection.autoconnect yes # 起動時自動接続
# nmcli con mod eth0 ipv4.may-fail no       # IP4 only
# nmcli con mod eth0 ipv6.method ignore # IPV6無効
# nmcli con up eth0

# systemctl restart network.service
# systemctl stop guacd
# systemctl stop zabbix-agent
# systemctl stop zabbix-server
# systemctl stop httpd
# systemctl stop tomcat

# systemctl start tomcat
# systemctl start httpd
# systemctl start zabbix-server
# systemctl start zabbix-agent
# systemctl start guacd

# systemctl list-unit-files -t service
# nmcli -p connection show
# ip a

2016年12月15日木曜日

zabbix3.2 ソースからインストール

1) ここ(http://www.zabbix.com/download)の Zabbix Sourcesから、zabbix-3.2.2.tar.gzをダウンロードして解凍。


2)configureを起動してインストール

# cd zabbix-3.2.2
# ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2

エラーがでるので対処。
# yum install mysql-devel
# yum install libxml2-devel
# yum -y install net-snmp net-snmp-devel
# yum -y install curl libcurl libcurl-devel

# make install


zabbixサーバとエージェントを起動
$ zabbix_server

$ zabbix_agentd

2016年12月14日水曜日

zabbix3.2をCentOS7.3 にインストール

CentOSをダウンロード
http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso

サーバ(GUI使用)でインストール。


OS      CentOS Linux release 7.3.1611 (Core)
Zabbix    Zabbix 3.2.3              Red Hat Enterprixe Linux
                         CentOS
                         Oracle Linux 用
Apache     Apache/2.4.6 (CentOS)          CentOS標準
PHP      PHP 5.4.16              CentOS 標準
mysql     5.7.17


1)LAMP環境インストール
Webアプリケーション開発環境(Linux/Apache/MySQL/PHP(perl,python))を次の順で構

築する。
1.エンタープライズLiux用拡張パッケージのインストール(EPEL)
2.レポジトリの追加
3.PHPのインストール
4.Apacheのインストール
5.mysqlのインストール
6.サーバの起動
 
# yum install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum -y install php php-mysql
# yum -y install httpd
# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
# yum info mysql-community-server
# yum -y install mysql-community-server


# systemctl enable httpd.service
# systemctl enable mysqld.service

# systemctl start httpd.service
# systemctl start mysqld.service

【参考】バージョン確認方法。
# cat /etc/redhat-release
# httpd -v
# php –v
# mysql –u root –p
mysql> select version();


※mysql57は、上記コマンドでエラーが発生。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 次のコマンドで仮パスワードを検索して入力する。
# cat /var/log/mysqld.log | grep 'password is generated'
新しいパスワードに更新。
mysql> set password= 'xxxxxxxxx';


■mysqlパスワードを忘れてしまった場合。(mysql 5.7まで)
# vi /etc/my.cnf
skip-grant-tables           <-最後に追加

# systemctl restart mysqld
# mysql -u root
mysql> use mysql
Database changed
mysql> update user set authentication_string=password('New_Password') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye

# vi /etc/my.cnf
skip-grant-tables           <-削除
# systemctl restart mysqld
# mysql -u root -p

■mysqlパスワードを忘れてしまった場合(mysql8.0)
微妙に変わっている。
# vi /etc/my.cnf
skip-grant-tables
# mysql -u root
mysql> use mysql
mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
mysql> flush privileges;

エラー発生、設定できない。
Column count of mysql.user is wrong. Expected 50, found 49. Created with MySQL 80012, now running 80013. Please use mysql_upgrade to fix this error.

# mysql_upgrade -u root で直た。

以降通常モードで、

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPassword';


2) zabbixインストール

zabbixリポジトリ追加

# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

# yum search zabbix       (確認)


# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese
# yum -y install zabbix-agent
# yum -y install zabbix-get
 



【参考】RPMパッケージをダウンロードしてインストールする場合。
# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-server-mysql-3.2.3-1.el7.x86_64.rpm
# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-web-3.2.3-1.el7.noarch.rpm
# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-web-japanese-3.2.3-1.el7.noarch.rpm
# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-agent-3.2.3-1.el7.x86_64.rpm
# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-get-3.2.3-1.el7.x86_64.rpm
# rpm –ivh zabbix-server-mysql-3.2.3-1.el7.x86_64.rpm zabbix-web-3.2.3-1.el7.noarch.rpm zabbix-web-japanese-3.2.3-1.el7.noarch.rpm
# rpm –ivh zabbix-agent-3.2.3-1.el7.x86_64.rpm
# rpm –ivh zabbix-get-3.2.3-1.el7.x86_64.rpm



3)Zabbix DBとユーザ作成

# mysql -uroot -p
   create database zabbix character set utf8;
   grant all on zabbix.* to zabbix@localhost identified by '<パスワード>';
   quit;

# cd /usr/share/doc/zabbix-server-mysql-3.2.4/
# zcat create.sql.gz | mysql -uzabbix -p zabbix
Enter password:<パスワード>

数分で終了。


※mysql 完全バックアップとリロード

# systemctl stop zabbix-server
# mysqldump -uroot -p zabbix >zabbix.dump

# mysql -uroot -p
mysql> create database zabbix character set utf8;
mysql> grant all on zabbix.* to zabbix@localhost identified by '<パスワード>';

# mysql -uroot -p zabbix <zabbix.dump

【mysql に接続して確認】
mysql> show databases;
mysql> show tables from zabbix;


# vi /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=<パスワード>
DBSocket=/var/lib/mysql/mysql.sock


# vi /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Tokyo

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-port=10050/tcp --zone=public --permanent
# firewall-cmd --add-port=10051/tcp --zone=public --permanent
# firewall-cmd --reload

# systemctl restart firewalld
# firewall-cmd --list-all

4) Zabbix サーバーの起動と自動起動設定
# systemctl start zabbix-server
# systemctl enable zabbix-server

# systemctl start zabbix-agent
# systemctl enable zabbix-agent

# systemctl restart httpd

http://localhost/zabbix
データベースパスワードを入力して起動。(あとは、デフォルト)
admin/zabbixでログイン

Administration->General->Defaulttheme : Dark
Administration->Users->Create user takahab

※入力項目は、/etc/zabbix/web/zabbix.conf.phpに格納される。

Zabbix エージェントの動作確認
# zabbix_get -s 127.0.0.1 -k agent.version
3.2.4


5) SElinux有効時

SELinux通知ブラウザを使用して設定。

# ausearch -c 'zabbix_server' --raw | audit2allow -M my-zabbixserver
# semodule -i my-zabbixserver.pp

# ausearch -c 'zabbix_agentd' --raw | audit2allow -M my-zabbixagentd
# semodule -i my-zabbixagentd.pp


# setsebool -P httpd_can_connect_zabbix on
# setsebool -P zabbix_can_network on
# getsebool -a|grep zabbix
無効にする場合は、 
# setenforce 0
永久offは、
vi /etc/selinux/config
 
 
※ZABBIXデータベースの移行
# mysqldump -uzabbix -p zabbix >zabbix-dump.sql  →zabbixDBのパスワード
 
# mysql -uroot -p zabbix< zabbix-dump.sql        →rootのパスワード


※zabbix マップで文字化け

# cd /etc/alternatives

ln -s /usr/share/fonts/dejavu/DejaVuSans.ttf zabbix-web-font
ln -s /usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf zabbix-web-font



 
 

2016年10月12日水曜日

fdを他のプロセスに引き継ぐ。

cc -o send send.c fdtrans.c
cc -o recv recv.c fdtrans.c

別ウインドウで次の順番で起動し、recv画面にキー入力。
① send起動
② recv起動

【fdtrans.c】
#include <stdio.h>
#include <errno.h>

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <fcntl.h>
#include <string.h>
//#include "vncgw.h"
//#include "../android/jni/vncserver.h"

//extern web_gate_settings_t settings;

#define UNIX_DOMAIN_PATH_NAME_REQ "/var/local/netreg/request"
#define UNIX_DOMAIN_PATH_NAME_RES "/var/local/netreg/response"

int listen_un(const char* id )
{
char path[48];
int soc,c_soc;
struct sockaddr_un u_addr;

if( (soc = socket(PF_UNIX, SOCK_SEQPACKET, 0)) < 0 ) {
printf( "ERROR Socket in listen_un %s\n", strerror(errno));
return -1;
}

strcpy(  path, UNIX_DOMAIN_PATH_NAME_REQ );
strncat( path, id, 16 );

memset(&u_addr, 0, sizeof(u_addr));
u_addr.sun_family = AF_UNIX;

        u_addr.sun_path[0] = '\0';  /* abstract namespace */
strncpy(u_addr.sun_path + 1, path, sizeof(u_addr.sun_path));

// handler_msg( "unix domain path (ACCEPT)= %s\n", u_addr.sun_path + 1 );

if( bind(soc, (struct sockaddr*)&u_addr, sizeof(u_addr)) < 0 ) {
printf( "ERROR Bind 1 in listen_un() %s\n", strerror(errno));
c_soc = connect_un( id );

/* // add by takahab 20180724
struct timeval timeout;
fd_set rfds;
char buf[2048];

timeout.tv_sec  = 1;
timeout.tv_usec = 0;

FD_ZERO( &rfds );
FD_SET( c_soc, &rfds );

select(c_soc+1, &rfds, NULL, NULL, &timeout);

if (FD_ISSET(c_soc, &rfds)) {
errno = 0;
recv(c_soc, buf, sizeof(buf), 0);
printf( "Done Dummy reading Beause UNIX DOMAIN SOCKET broken  %s\n", strerror(errno));
}
// add by takahab 20180724 */

close( c_soc );
sleep(1);
errno = 0;
if( bind(soc, (struct sockaddr*)&u_addr, sizeof(u_addr)) < 0 ) {

printf( "ERROR Bind 2 in listen_un() %s\n", strerror(errno));
close( soc );
return -1;
}
}

if( listen( soc, 1 ) < 0 ) {
printf( "ERROR listen in listen_un() %s\n", strerror(errno));
close( soc );
return -1;
}

struct sockaddr_un c_addr;
        socklen_t c_len = sizeof(c_addr);

// handler_msg("Accept in Linsten_un() soc=%d\n", soc);
 
if ( (c_soc = accept(soc, (struct sockaddr*)&c_addr, &c_len)) < 0 ) {
printf( "ERROR Accept in listen_un() %s\n", strerror(errno));
close( soc );
return -1;
}
// handler_msg( "accept form   %s     len:%d    c_soc:%d\n", c_addr.sun_path + 1, c_len, c_soc );
close( soc );

return c_soc;
}

int connect_un(const char* id )
{
char path[48];
int soc;
struct sockaddr_un u_addr;

if( (soc = socket(PF_UNIX, SOCK_SEQPACKET, 0)) < 0 ) {
printf( "ERROR Socket in connect_un() %s\n", strerror(errno));
return -1;
}


strcpy(  path, UNIX_DOMAIN_PATH_NAME_RES );
strncat( path, id, 16 );

memset(&u_addr, 0, sizeof(u_addr));
u_addr.sun_family = AF_UNIX;

        u_addr.sun_path[0] = '\0';  /* abstract namespace */
strncpy(u_addr.sun_path + 1, path, sizeof(u_addr.sun_path));

// handler_msg( "unix domain path (CONNECT)= %s\n", u_addr.sun_path + 1);

if( bind(soc, (struct sockaddr*)&u_addr, sizeof(u_addr)) < 0 ) {
printf( "ERROR Bind in connect_un() %s\n", strerror(errno));
close( soc );
return -1;
}

strcpy(  path, UNIX_DOMAIN_PATH_NAME_REQ );
strncat( path, id, 16 );

memset(&u_addr, 0, sizeof(u_addr));
u_addr.sun_family = AF_UNIX;

        u_addr.sun_path[0] = '\0';  /* abstract namespace */
strncpy(u_addr.sun_path + 1, path, sizeof(u_addr.sun_path));

if ( connect(soc, (struct sockaddr*)&u_addr, sizeof(u_addr)) < 0 ) {
printf( "ERROR connect in connect_un() %s\n", strerror(errno));
close( soc );
return -1;
}

return soc;
}


int recv_un(int soc, void* pid, size_t pid_len)
{
struct msghdr msg;
struct iovec  iov;
char cmsgbuf[CMSG_SPACE(sizeof(int))];

iov.iov_base = pid;
iov.iov_len = pid_len;

msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_control = cmsgbuf;
msg.msg_controllen = sizeof(cmsgbuf);
msg.msg_flags = MSG_WAITALL;

if ( recvmsg(soc, &msg, 0) < 0 ) {
printf( "ERROR Recvmsg in recv_un() %s\n", strerror(errno));
return -1;
}

struct cmsghdr *cmsg = (struct cmsghdr*)cmsgbuf;
return *((int *)CMSG_DATA(cmsg));
}

int send_un(int soc, int fd, void* pid, int pid_len)
{
struct iovec iov;
char buf[CMSG_SPACE(sizeof(int))];

iov.iov_base = pid;
iov.iov_len = pid_len;

struct cmsghdr *cmsg = (struct cmsghdr*)buf;
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
*((int *)CMSG_DATA(cmsg)) = fd;

struct msghdr msg;
memset(&msg, 0, sizeof(msg));
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_control = buf;
msg.msg_controllen = sizeof(buf);
msg.msg_flags = 0;

if (sendmsg(soc, &msg, 0) < 0) {
printf( "ERROR Sendmsg when sending fd in send_un() %s soc=%d\n", strerror(errno),soc);
return -1;
}
return 0;
}


int send_fdesc(int fd, const char* id )
{
int soc, ret;
        pid_t pid; 
// handshake_headers_t headers;

        soc = listen_un( id );

        pid     = getpid(); 

if( soc >= 0 ) {

// memset( &headers, 0 , sizeof( headers ));
// strcpy( headers.version, PROXY_HANDSHAKE_VERSION );
// headers.cmd = PROXY_HANDSHAKE_CMD;
// strcpy(headers.protocols, PROXY_HANDSHAKE_PROTOCOL );
//
// headers.type = PROXY_HANDSHAKE_TYPE_REQ;
// handshakeToTarget( fd, &headers);


ret    = send_un(soc, fd, &pid, sizeof(pid)); 
if( ret != -1 ) {
printf( "Send to  fd:%d from pid:%d\n", fd, pid );
}

}


close (soc);
perror( "close(soc) in send_fdesc()");

// handler_msg( "Go to  close:%d\n", soc );

return ret;
}

int recv_fdesc( const char* id )
{
int soc, ret, fd;
        int pid = 0; 

        soc       = connect_un( id );

if( soc >= 0 ) {
fd  = recv_un(soc, &pid, sizeof(pid));
// handler_msg( "Answer from pid %d( fd:%d)\n", pid, fd );
}

close( soc );
// handler_msg( "Go to  close:%d\n", soc );


        return fd;
}


テストプログラム
【送り手 send.c】
#include <stdio.h>
int main(void)
{
send_fdesc( 1, "/7716618000486" );
   perror("end");
   return 0;
}

【受け手 recv.c 】
int main(void)
{
      int fd = recv_fdesc( "/7716618000486" );
      printf("Recieve file descriptor %d\n", fd);
      char buf[1024];
      ssize_t len; 
      while( (len = read(0, buf, sizeof(buf))) > 0 ) {
          write(fd, buf, len);
      }
}





2016年8月26日金曜日

androidvncserverをビルドしてみた。

$ cd libvncserver
$ ./autogen.sh --without-gnutls --without-crypt --without-ipv6 --without-client-gcrypt --without-websockets --without-jpeg
$ cd examples/android
$ echo "APP_ABI := x86 armeabi armeabi-v7a" > jni/Application.mk

# PATH=$PATH:/home/takaha-m/Android/Ndk # ndkのインストール場所のPATHに設定
# ndk-build

autoreconfを使ってビルド環境構築


rm -rf Makefile.am aclocal.m4 autom4te.cache autoscan.log config.h.in config.log config.status configure configure.ac sample.c install-sh missing
#
# sample.c
#
vi sample.c <<__EOF__
i#include <stdio.h>
int main(int argc, char* argv[])
{
    printf("Hello, world!\n");
    return;
} ^[
ZZ
__EOF__
#
# Makefile.am
#
vi Makefile.am <<__EOF__
iROGRAMS=sample
SOURCES=sample.c ^[
ZZ
__EOF__
autoscan
mv configure.scan configure.ac
#
# configure.ac
#
vi configure.ac <<__EOF__
/FULL
:s/FULL-PACKAGE-NAME/sample/
:s/VERSION/1.0.0/
:s/BUG-REPORT-ADDRESS/hoge@piyo.co.jp/
/AC_INIT
oAM_INIT_AUTOMAKE([-Wall -Werror foreign])^[
ZZ
__EOF__
autoreconf -vfi
ls -l
./configure
ls -l
make


※^[は、viで本当のESCコードになおす。 cntl+v esc

2016年8月24日水曜日

Android studio カスタマイズ


1) viを使えるようにする。
  設定->Pluginsー>Browse repositoriesー>IdeaVimー>install

2) メニューフォントを変更する。
  設定->Appearance&Behavior->表示->"デフォルトのフォントをオーバライドする"

3) glxinfo がインストールされていない。
  apt-get install mesa-utils

4) エラー :A problem occurred configuring project ':app'.
> Buildtools 24.0.1 requires Java 1.8 or above. Current JDK version is 1.7.
     file->setting->project struct->SDK Location
 

Android studio カスタマイズ

1) viを使えるようにする。
  設定->Pluginsー>Browse repositoriesー>IdeaVimー>install
2) メニューフォントを変更する。
  設定->Appearance&Behavior->表示->"デフォルトのフォントをオーバライドする"


2016年8月23日火曜日

eclipse-neonをインストール


1) Install Android SDK

help->Install New software
http://dl-ssl.google.com/android/eclipse/
name: Android SDK
location: http://dl-ssl.google.com/android/eclipse/


下記で必要な表示を設定。
window->parspective->custamize Parspective



2)  eclipseにviをインストール

help->Install New software
http://vrapper.sourceforge.net/update-site/stable

3) eclipseにテーマをインストール
https://www.genuitec.com/tech/darkest-dark

JAVAをインストール



Java SE 10.0.1


jdk-10.0.1_linux-x64_bin.tar.gz


を/usr/lib/jvmに展開



update-alternatives --install  /usr/bin/java java /usr/lib/jvm/jdk-10.0.1/bin/java 100100 \
--slave /usr/bin/appletviewer appletviewer /usr/lib/jvm/jdk-10.0.1/bin/appletviewer \
--slave /usr/bin/idlj idlj /usr/lib/jvm/jdk-10.0.1/bin/idlj \
--slave /usr/bin/jaotc jaotc /usr/lib/jvm/jdk-10.0.1/bin/jaotc \
--slave /usr/bin/jar jar /usr/lib/jvm/jdk-10.0.1/bin/jar \
--slave /usr/bin/jarsigner jarsigner /usr/lib/jvm/jdk-10.0.1/bin/jarsigner \
--slave /usr/bin/javac javac /usr/lib/jvm/jdk-10.0.1/bin/javac \
--slave /usr/bin/javadoc javadoc /usr/lib/jvm/jdk-10.0.1/bin/javadoc \
--slave /usr/bin/javap javap /usr/lib/jvm/jdk-10.0.1/bin/javap \
--slave /usr/bin/javapackager javapackager /usr/lib/jvm/jdk-10.0.1/bin/javapackager \
--slave /usr/bin/javaws javaws /usr/lib/jvm/jdk-10.0.1/bin/javaws \
--slave /usr/bin/jcmd jcmd /usr/lib/jvm/jdk-10.0.1/bin/jcmd \
--slave /usr/bin/jconsole jconsole /usr/lib/jvm/jdk-10.0.1/bin/jconsole \
--slave /usr/bin/jcontrol jcontrol /usr/lib/jvm/jdk-10.0.1/bin/jcontrol \
--slave /usr/bin/jdb jdb /usr/lib/jvm/jdk-10.0.1/bin/jdb \
--slave /usr/bin/jdeprscan jdeprscan /usr/lib/jvm/jdk-10.0.1/bin/jdeprscan \
--slave /usr/bin/jdeps jdeps /usr/lib/jvm/jdk-10.0.1/bin/jdeps \
--slave /usr/bin/jhsdb jhsdb /usr/lib/jvm/jdk-10.0.1/bin/jhsdb \
--slave /usr/bin/jimage jimage /usr/lib/jvm/jdk-10.0.1/bin/jimage \
--slave /usr/bin/jinfo jinfo /usr/lib/jvm/jdk-10.0.1/bin/jinfo \
--slave /usr/bin/jjs jjs /usr/lib/jvm/jdk-10.0.1/bin/jjs \
--slave /usr/bin/jlink jlink /usr/lib/jvm/jdk-10.0.1/bin/jlink \
--slave /usr/bin/jmap jmap /usr/lib/jvm/jdk-10.0.1/bin/jmap \
--slave /usr/bin/jmc jmc /usr/lib/jvm/jdk-10.0.1/bin/jmc \
--slave /usr/bin/jmod jmod /usr/lib/jvm/jdk-10.0.1/bin/jmod \
--slave /usr/bin/jps jps /usr/lib/jvm/jdk-10.0.1/bin/jps \
--slave /usr/bin/jrunscript jrunscript /usr/lib/jvm/jdk-10.0.1/bin/jrunscript \
--slave /usr/bin/jshell jshell /usr/lib/jvm/jdk-10.0.1/bin/jshell \
--slave /usr/bin/jstack jstack /usr/lib/jvm/jdk-10.0.1/bin/jstack \
--slave /usr/bin/jstat jstat /usr/lib/jvm/jdk-10.0.1/bin/jstat \
--slave /usr/bin/jstatd jstatd /usr/lib/jvm/jdk-10.0.1/bin/jstatd \
--slave /usr/bin/jweblauncher jweblauncher /usr/lib/jvm/jdk-10.0.1/bin/jweblauncher \
--slave /usr/bin/keytool keytool /usr/lib/jvm/jdk-10.0.1/bin/keytool \
--slave /usr/bin/orbd orbd /usr/lib/jvm/jdk-10.0.1/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/lib/jvm/jdk-10.0.1/bin/pack200 \
--slave /usr/bin/rmic rmic /usr/lib/jvm/jdk-10.0.1/bin/rmic \
--slave /usr/bin/rmid rmid /usr/lib/jvm/jdk-10.0.1/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jdk-10.0.1/bin/rmiregistry \
--slave /usr/bin/schemagen schemagen /usr/lib/jvm/jdk-10.0.1/bin/schemagen \
--slave /usr/bin/serialver serialver /usr/lib/jvm/jdk-10.0.1/bin/serialver \
--slave /usr/bin/servertool servertool /usr/lib/jvm/jdk-10.0.1/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/lib/jvm/jdk-10.0.1/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/lib/jvm/jdk-10.0.1/bin/unpack200 \
--slave /usr/bin/wsgen wsgen /usr/lib/jvm/jdk-10.0.1/bin/wsgen \
--slave /usr/bin/wsimport wsimport /usr/lib/jvm/jdk-10.0.1/bin/wsimport \
--slave /usr/bin/xjc xjc /usr/lib/jvm/jdk-10.0.1/bin/xjc



































ここからJDKをダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index.html

/usr/lib/jvm下に展開。

#cd /usr/lib/jvm
#tar xvf jdk-8u101-linux-x64.tar.gz

#update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_101 18101

# update-alternatives --config java

alternative java (/usr/bin/java を提供) には 7 個の選択肢があります。

選択肢 パス 優先度 状態
------------------------------------------------------------
0 /usr/lib/jvm/jdk1.8.0_101/bin/java 18101 自動モード
1 /usr/lib/jvm/java-1.6.0-openjdk-amd64/bin/java 1072 手動モード
2 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 手動モード
3 /usr/lib/jvm/java-6-oracle/bin/java 16043 手動モード
4 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 手動モード
5 /usr/lib/jvm/java-7-oracle/jre/bin/java 16044 手動モード
* 6 /usr/lib/jvm/jdk1.8.0_101/bin/java 18101 手動モード
7 /usr/lib/jvm/jre1.8.0_101/bin/java 18100 手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 6


削除する場合は、
#update-alternatives --remove java /usr/lib/jvm/jdk1.8.0/bin/java

2016年7月21日木曜日

POIを使ってみた ーー>ハマった!!


warファイルデブロイ時、

Caused by: java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException


1) プロジェクトを右クリク
2)プロパティ
3)javaのビルドパス
4) 順序およびエクスポート
5)POIライブラリを2番目へ


2018/3/6更新

ここからダウンロード
https://poi.apache.org/download.html

poi-bin-3.17-20170915.tar.gz (20.11 MB, signature (.asc))

~/eclipse-workspace/Librariesに展開

~/eclipse-workspace/Libaries/poi-3.17$ ls -l
合計 11684
-rw-r--r--  1 takaha-m takaha-m   29950  9月  9 06:04 LICENSE
-rw-r--r--  1 takaha-m takaha-m    1222  9月  9 06:04 NOTICE
drwxrwxr-x 17 takaha-m takaha-m    4096  3月  6 10:10 docs
drwxrwxr-x  2 takaha-m takaha-m    4096  3月  6 10:10 lib
drwxrwxr-x  2 takaha-m takaha-m    4096  3月  6 10:10 ooxml-lib
-rw-r--r--  1 takaha-m takaha-m 2701171  9月  9 06:17 poi-3.17.jar
-rw-r--r--  1 takaha-m takaha-m  374509  9月  9 06:17 poi-examples-3.17.jar
-rw-r--r--  1 takaha-m takaha-m   31218  9月  9 06:17 poi-excelant-3.17.jar
-rw-r--r--  1 takaha-m takaha-m 1479023  9月  9 06:17 poi-ooxml-3.17.jar
-rw-r--r--  1 takaha-m takaha-m 5924600  9月  9 06:17 poi-ooxml-schemas-3.17.jar
-rw-r--r--  1 takaha-m takaha-m 1390360  9月  9 06:17 poi-scratchpad-3.17.jar

eclipse

ファイル→新規→javaプロジェクト
プロジェクト名:PoiSample
実行環境JREの使用:javaSE-1.8
ソースおよびクラス・ファイルのフォルダーを個別に作成

次へ
ライブラリ
外部JARの追加: poi-3.17/poi3.17.jar
外部JARの追加: poi-ooxml-3.17.jar




configure作成

#
# 1.サンプルソース作成
#
cat <<__EOF__> a.c
#include <stdio.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

int main(int argc, char *argv[])
{
fprintf(stdout, "1\n");
fprintf(stderr, "2\n");
return 0;
}
__EOF__

#
# 2.雛形Makefile.in作成
#
cat <<__EOF__> Makefile.in

#
# Makefile
#
CC = @CC@
DEFS = @DEFS@
LIBS = @LIBS@

SRCS = a.c
OBJS = \$(SRCS:.c=.o)
PROG = a

all: \$(PROG)

\$(PROG): \$(OBJS)
 \$(CC) -o \$@ \$(OBJS) \$(LIBS)

.c.o:
 \$(CC) \$(DEFS) -c -o \$@ \$<

clean:
 rm -f \$(OBJS)
__EOF__

#
# 3.autoscanを実行してconfigure.in 作成
#
autoscan
mv configure.scan configure.in
#
# 4.autoheaderを実行してconfig.in 作成
#
autoheader
#
# 5.autoconfを実行してconfigure 作成
#
autoconf
#
# 6.configure実行してMakefile 作成
#
./configure

#
# 7.コンパイル
#
make

2016年7月19日火曜日

exel 数値域に文字列が入ってしまったので一括変換。

対象セルを選択 →データ(D) → 区切り位置 → 次へ → 次へ → G/標準(G) → 完了


選択域を一発変換!!!!   便利。

2016年7月14日木曜日

メトリックを変更する事で、デフォルトルートを変更。 default route

自動メトリックをOFFにして、手動でMetricを設定

ネットワークと共有センター→アダプターの設定の変更→XXXXX接続→プロパティ→インターネットプロトコルバージョン4→プロパティ→詳細設定→自動メトリック

シャットダウン時の後処理 (shutdown)

# vi /etc/systemd/system/drop.service [Unit] Description= stop httpgwd DefaultDependencies=no Before=shutdown.target RefuseManualStart=true ...