- 履歴一覧
- ソース を表示
- 履歴 を表示
- Network/Script/cclist は削除されています。
- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-12-11T22:40:26+09:00","default:nowsky","nowsky")
*Raspbian [#r27708e6]
-[[Raspbian:+https://www.raspberrypi.org/downloads/raspbian/]]
Raspberry Pi用としてメンテナンスされているDebian系ディストリビューションの一つ。
Debian系なのでAPT(apt-get)を利用してパッケージをインストールする事が出来る。
初期設定を簡素化する為にRaspbian特有のシェルスクリプトが準備されており、
Linux初心者でも楽に最低限のOS設定をする事が出来るようになっている。
~
*イメージバックアップ [#j190abcc]
Raspberry PiではSDカードにOSをインストールする事を前提としている為、
ddコマンドによるイメージバックアップ・リストアが簡単に実行できるが、
小さい容量のSDカードへリストアすると、SDカード容量不足でddが欠落してしまう。
よって、Raspberry Pi(Raspbian)では専用のOSコピー(バックアップ)コマンドが用意されており、
こちらを利用する方が正確にコピーを取得する事が出来る。
#region(&color(#ff0000){rpi-clone};)
-&font(b){参考サイト};
[[billw2/rpi-clone:+https://github.com/billw2/rpi-clone]]
[[Raspberry PiでIoTなシステム開発:+http://www.homu.net/raspberry-pi%E3%81%A7iot%E3%81%AA%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%96%8B%E7%99%BA%EF%BC%9Asd%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%AFrpi/]]
-&font(b){コマンド実行};
バックアップ取得前に、コピー先SDカードをRaspberry Piに接続しておく。
今回はSDカードが、&color(#ff0000){"/dev/sda"};に接続されているとする。
# git clone https://github.com/billw2/rpi-clone
# ./rpi-clone sda -f
---
Do you want to initialize the destination disk /dev/sda? (yes/no): "yes"
You may enter a label for the destination rootfs /dev/sda2: [Enter]
Final check, is it Ok to proceed with the clone (yes/no)?: "yes"
Starting the filesystem rsync to sda
(This may take several minutes)...
---
Hit Enter when ready to unmount the /dev/sda partitions... [Enter]
unmounting /mnt/clone/boot
unmounting /mnt/clone
#endregion
~
*Crystal Signal Pi [#y41ce6f9]
Raspberry Piでパトライト(回転灯)を実装する追加モジュール。
(株)インフィニットループが開発・販売をしており、[[amazon:+https://www.amazon.co.jp/dp/B06XW4C8YD]]で購入出来る。
APIも用意されている為、監視システムからパトライト代わりに光らせる事も可能。
~
&size(16){&font(b){1. インストール};};
詳細は[[オフィシャルページ:+http://crystal-signal.com/]]のマニュアル参照。
インストール先やapacheのスクリプト設定は固定となるが、インストール用スクリプトが用意されている。
インストールにはroot権限が必要なのでrootユーザか、sudoでスクリプトを実行する。
スクリプト実行時はシェルをbashにする必要があるので、bash以外を利用している人は注意する。
# curl -O https://raw.githubusercontent.com/infiniteloop-inc/crystal-signal/master/install.sh
# ./install.sh
~
&size(16){&font(b){2. アップデート};};
Crystal Signal Piのミドルウェアアップデートもスクリプトから実行する。
OSアップデートと同時にCrystal Signal Piのミドルウェアもアップデートする場合、
下記のオプションを[fullupdate]に変更して実行する
# curl -O https://raw.githubusercontent.com/infiniteloop-inc/crystal-signal/master/install.sh
# ./install.sh update
~
&size(16){&font(b){3. スクリプト修正};};
apacheのListenを[0.0.0.0]からIPアドレス指定に変更している場合、
スクリプトからAPIを叩けなくなり、結果としてCrystal Signal Piのアラート停止ボタンも使えなくなる。
停止ボタンを使えるようにするには、下記コマンドを実行してスクリプトを修正する。
・apacheのListenを192.168.0.1にしている場合
---
# cd /var/lib/crystal-signal/scripts/
# mv Ack.sh Ack.sh-
# mv AckNewestOnly.sh AckNewestOnly.sh-
# cat Ack.sh- | sed -e 's/localhost/192.168.0.1/g' > Ack.sh
# cat AckNewestOnly.sh- | sed -e 's/localhost/192.168.0.1/g' > AckNewestOnly.sh
# chmod 755 Ack.sh AckNewestOnly.sh
# rm Ack.sh- AckNewestOnly.sh-
~
&size(16){&font(b){4. APIスクリプト};};
Crystal Signal PiはAPIを備えているので、スクリプトを用意すればパトライト代わりに光らせる事が出来る。
参考までに作成したスクリプトを掲載。
バーストした時にLEDへ負荷が掛からないように、一度APIを叩くと1分間はAPIを叩けないようにしてみた。
~
#region(&color(#ff0000){スクリプト [zabbix_csp.pl]};)
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
###
### Const variable
###
my $OPT_DEBUG = 0;
my $OPT_FORCE = 0;
my $OPT_LEVEL = 0;
my $OPT_HELP = 0;
my @LINE;
my $DATE = time;
my $DELTA = 0;
my $LOCK = "/tmp/zabbix_csp";
my $INTERVAL = 60;
my $BIN_CURL = "/usr/bin/curl";
my $OPT_CURL = "-o /dev/null --silent";
my $PROT = "http://";
my $FQDN = "192.168.0.1";
my $TYPE = 0;
my $API = 0;
my %ALERT;
$ALERT{'clear'} = '?ack=1&info=CLEAR';
$ALERT{'information'} = '?color=000,128,000&mode=1&repeat=5&period=1000&info=INFORMATION';
$ALERT{'warning'} = '?color=064,064,000&mode=1&repeat=5&period=1000&info=WARNING';
$ALERT{'average'} = '?color=064,032,000&mode=1&repeat=5&period=1000&info=AVERAGE';
$ALERT{'high'} = '?color=064,000,000&mode=1&repeat=5&period=1000&info=HIGH';
$ALERT{'disaster'} = '?color=128,000,000&mode=1&repeat=5&period=1000&info=DISASTER';
###
### Main program
###
## Set of execution options
##
foreach my $tmp_OPT(@ARGV){
# Default value
if(($tmp_OPT eq '-d')||($tmp_OPT eq '--debug')){ $OPT_DEBUG++; };
if(($tmp_OPT eq '-f')||($tmp_OPT eq '--force')){ $OPT_FORCE++; };
if(($tmp_OPT eq '-h')||($tmp_OPT eq '--help' )){ $OPT_HELP++; };
# Alert type
if(($tmp_OPT =~ '^-l=')||($tmp_OPT =~ '^--level=')){
$OPT_LEVEL++;
$tmp_OPT =~ s/^-l\=//;
$tmp_OPT =~ s/^--level=\=//;
$TYPE = lc($tmp_OPT);
}
}
if($OPT_DEBUG){
print "VALUE::OPT_DEBUG $OPT_DEBUG\n";
print "VALUE::OPT_FORCE $OPT_FORCE\n";
print "VALUE::OPT_LEVEL $OPT_LEVEL\n";
print "VALUE::OPT_HELP $OPT_HELP\n";
print "-----\n";
}
## Print script help
##
if($OPT_HELP){
print "usage: zabbix_csp [-l=\"AlertType\"] [-d DebugMode]\n";
print " [-f ForceExecute] [-h OutputHelp]\n";
print "examp: zabbix_csp -l=warning\n";
print " zabbix_csp -l=warning -d\n";
print " zabbix_csp -l=warning -f\n";
exit 0;
}
## Check last log
##
# Read log
if(-f $LOCK){
open(READ, "$LOCK");
foreach(<READ>){
@LINE = split(/,/, $_);
}
close(READ);
# Get of delta
$DELTA = $DATE-$LINE[0];
if($OPT_DEBUG){
print "VALUE::TYPE $TYPE\n";
print "VALUE::LINE(OLD) $LINE[0]\n";
print "VALUE::DATE(NEW) $DATE\n";
print "VALUE::INTERVAL $INTERVAL\n";
print "VALUE::DELTA $DELTA\n";
print "-----\n";
}
if(!$OPT_FORCE&&($DELTA<$INTERVAL)){
exit 0;
}
}
# Write log
open(WRITE, "> $LOCK");
print WRITE "$DATE,$TYPE";
close(WRITE);
## Running the API
##
if(($OPT_LEVEL)&&(exists($ALERT{$TYPE}))){
$API = $PROT.$FQDN."/ctrl/".$ALERT{$TYPE};
if($OPT_DEBUG){
print "VALUE::API $API\n";
print "-----\n";
}else{
system("$BIN_CURL $OPT_CURL \"$API\"");
}
}else{
print "ERROR:: Hash key does not exist.\n";
exit 1;
}
#endregion
~
#region(&color(#ff0000){実行方法};)
・レベル4(重度の障害)でスクリプト実行
---
# zabbix_csp.pl -l=HIGH
・LED消灯(停止)の実行
---
# zabbix_csp.pl -l=CLEAR
・1分間インターバルを無視して強制実行
---
# zabbix_csp.pl -l=HIGH -f
・変数表示などのデバッグモード
---
# zabbix_csp.pl -l=HIGH -d
#endregion