未分類」カテゴリーアーカイブ

リストを比較して、ない項目を抽出する。

IMG00016

※写真と本文は関係ありません。


join コマンドを使う。

それぞれのリストsortしてから、joinする。

$ cat pref.list # 県リストスペース区切り
saga 佐賀
nagasaki 長崎
kumamoto 熊本
oita 大分
miyazaki 宮崎


$ cat mixed.list # 雑多な地名リスト
kumamoto
america
canada
thai
saga

mixed.list(雑多な地名リスト)からpref.list(県名リスト)にないものを抽出したい場合。

$ join -v 1 <(cat mixed.list | sort -u ) <(cat pref.list | sort -u) america canada thai

※『sort -u』は unique オプション。

-v SIDE
like -a SIDE, but suppress joined output lines.
結合できなかった行だけ表示する。SIDEはどちらをベースにするかを選択する。

like -a SIDE と言われたので -a も試してみるとこうなる。
結合されたものも表示される

$ join -a 1 <(cat mixed.list | sort -u ) <(cat pref.list |sort -u) america canada kumamoto 熊本 saga 佐賀 thai

-a -v 付けないと、結合できたものだけ表示される

$ join <(cat mixed.list | sort -u ) <(cat pref.list |sort -u) kumamoto 熊本 saga 佐賀

Nagiosのアラート発報をコマンドラインから停止する。

2015-08-02 13.25.39-1

※写真と本文は関係ありません。


何台かサーバ止めたときに、アラートの発報もまとめて停止したい。
NagiosのWeb画面からぽちぽちやっても出来るけど、コマンドラインで入力すれば一気に出来る。(ぽちぽちすると監視再開の時に戻し忘れてるかも知れない…)

nagios.cmdを使う。場所は環境によって、『/usr/local/nagios/var/rw/nagios.cmd』か『/var/rw/nagios.cmd』あたりにあるはず。

Usageはここにまとまっている。(ちょっと古い)
http://old.nagios.org/developerinfo/externalcommands/commandlist.php

たとえばサーバのサービス全部のアラートを一気に止めたいときは、DISABLE_HOST_SVC_NOTIFICATIONSを使う。
※host1が止めたいホスト名



#!/bin/sh
# This is a sample shell script showing how you can submit the DISABLE_HOST_SVC_NOTIFICATIONS command
# to Nagios. Adjust variables to fit your environment as necessary.

now=`date +%s`
commandfile='/usr/local/nagios/var/rw/nagios.cmd'

/bin/printf "[%lu] DISABLE_HOST_SVC_NOTIFICATIONS;host1\n" $now > $commandfile


disableとenableはセットなのでこんなスクリプト書いた。



#/bin/sh

now=$(date +%s)
commandfile='/usr/local/nagios/var/rw/nagios.cmd'

ENABLE_OR_DISABLE=$1

case ${ENABLE_OR_DISABLE} in
disable|DISABLE) SWITCH='DISABLE' ;;
enable|ENABLE) SWITCH='ENABLE' ;;
*) echo 'You input enable or disable. Abort!'
exit 1 ;;
esac

HOSTNAMES='kintai2012_jp
new_server
switch-l3
rtx1000
user_router'

for HOST in ${HOSTNAMES}
do
printf "[%lu] ${SWITCH}_HOST_NOTIFICATIONS;${HOST}\n" $now > $commandfile
printf "[%lu] ${SWITCH}_HOST_SVC_NOTIFICATIONS;${HOST}\n" $now > $commandfile
done


HOSTNAMESにリストされてるサーバを、
./disable_NOTIFICATIONS_nagios.sh disable
./disable_NOTIFICATIONS_nagios.sh enable
でアラートOn/Off切り替えが出来る。

GMOクラウドのS3互換オブジェクトストレージを使う。

どこでもドア(ゆびつめ注意)

※写真と本文は関係ありません。


GMOクラウドのVPSとパブリッククラウド(ALTUS)を利用中。

内部のVPSとパブリッククラウドからだと転送量かからないし、S3互換なのでs3fs、s3cmd、cyberduckなんかが使える。(内部から使うときはエンドポイントをGMOクラウドの内側エンドポイントを設定する。通信料無料。)

バックアップ用にストレージを消費するのももったいないので、VPSなどのバックアップで使おうと思ったのですが、いろいろ制限があったので書いておく。

普通にs3fsでマウントしてrdiff-backupでバックアップしたかったけど…(よく使うパターン。世代管理したい&何も考えずに差分バックアップ出来る。ちょう便利!)

/etc をバックアップするとこんな感じでエラー

[foo@hogee-01-2015 test]# rdiff-backup /etc/ /mnt/s3fs/test21222/
Warning: hard linking not supported by filesystem at /mnt/s3fs/test21222/rdiff-backup-data

『hard linking not supported by filesystem』と言われる、rdiff-backup って 『hard link』使ってるんだ…

ならばとrsyncでバックアップ(S3内に0-6というディレクトリ作成して毎日バックアップ)しようとすると…

rsync: rename "/mnt/s3fs/rsync-backup/0/home/mie-mie/public_test/templates_c/.%%EE^EED^EED7C342%%index.html.php.uJtrYL" -> "mie-mie/public_test/templates_c/%%EE^EED^EED7C342%%index.html.php": No such file or directory (2)
rsync: rename "/mnt/s3fs/rsync-backup/0/home/mie-mie/public_test/templates_c/.%%E2^E2E^E2E15ECE%%layout_C.inc.php.WIfN7s" -> "mie-mie/public_test/templates_c/%%E2^E2E^E2E15ECE%%layout_C.inc.php": No such file or directory (2)

/home をrsyncしようとするとエラー。バックアップ先にはphp.logだけ。templates_cはphpのsmartyのキャッシュファイル。
原因は『使用できるObject名(=ファイル名)に制限がある』のでコピーできない。(%,^)

無理矢理ファイルコピーしたら、そのファイルどころかのそのファイルの入ったフォルダも消せななくなりました!\(^o^)/

使えないファイル名はこのあたりに。
オブジェクトキーとメタデータ – Amazon Simple Storage Service

どんなファイル名でファイルを作られるか制御できないので、不採用で…。

他にはオブジェクトストレージ内のファイルの移動はできない。
s3fsの制限だとおもう。ディレクトリに見えるけどオブジェクトなのでまあそうだよなぁ。。

[foo@hogee-01-2015 scripts]# cd /mnt/s3fs/afio/5/ # /mnt/s3fs は s3fsマウントしたディレクトリ。
[foo@hogee-01-2015 5]# ls
tree flower
[foo@hogee-01-2015 5]# mv tree fish
mv: cannot move `tree' to `fish': サポートされていない操作です

最終的には、afioでバックアップファイルをローカルに作成後、オブジェクトストレージにコピー。(テープバックアップみたいに、バックアップを直接オブジェクトに書き込むととても時間がかかる…)
使用量をケチるために週単位で差分バックアップ。
cronで月曜日にバックアップファイルを週単位で削除する。
みたいな感じで運用。

バックアップから戻すことはほとんどないのでまあこれでしばらく試してみる。

※2015/08/25追記
afioでバックアップファイルをオブジェクトストレージにコピー(移動)するところで、(長時間コピーした挙句)高確率でエラーとなるのでオブジェクトストレージ使うのやめました。(rdiff-backupで社内のストレージサーバにバックアップする運用に変更)
rdiff-backup偉大だ…。小さいファイル置き場ならエラーにならないのかなー。

今期のスキーバッジテスト

2015-04-12 15.02.50

※写真はかぐらの大回り検定バーン。


2回受験
今期も合格せず…

1回目:苗場

去年よりうまくなった気がするし、気が大きいまま受験して…
大回り/小回り/不整地/横滑り 68/68/69/68 計274点(280点以上で合格)
去年(大回り/小回り/不整地/横滑り 69/69/70/69 計277点)より点数低い。
後傾、内倒。ストックワークなどなどダメなところをたくさん指摘された。
もう少し早い時期に1回目を受けたらいいと思う。(早めに誰かに指摘されたい)

2回目:かぐら

惜しかった。
大回り/小回り/不整地/横滑り 70/70/70/69 計279点(280点以上で合格)
とても重い春の雪で、全体的に不整地。
最後の大回りは斜面のコブがひどくて『不整地中回り』な感じでした。(上の写真。検定員も苦笑いでスタート位置が下げられた)

かぐらでは初受験

前の週にバッジテスト対策講習を1日受けた。

  • きっちりストックついてからターンをはじめる練習
  • 肩のラインを斜面と並行に意識する(無理して傾けない)
  • 板に働きかける動き
  • 無理矢理形を作るのではなくて結果的にそうなる

外向・外傾って用語を使っていなかったのが印象的でした。

検定では、滑った直後に採点が出るのは初めて(腰のあたりにぶら下げた電光掲示でとてもわかりにくい)
難易度も苗場とは違うのかなぁ。『自由に滑って!』みたいな感じでした。

それにしても横滑りの高得点のだし方がわからない…。(うまくコントロールできていないってことなんだろうな…)
今期まだかぐらの検定あるけど、もういいよね。。

Useless machine

※音が出ます

Useless machine(自作)

@furu_nobが投稿した動画 –

 


Make:の本に載ってたので、作ってみた。
 タミヤのモータとユニバーサルプレートと、マイクロスイッチと汎用の6Pスイッチ。
マイクロコントローラ的なものは使用せず。

(今調べたら作り始めたの2012年の年末くらいだ…)

LVMのHDDをUSBHDDアダプタで他のサーバにつなぐと『WARNING: Duplicate VG』

IMG_0008
※写真と本文は関係ありません。


H/Wが壊れたサーバのHDDを違うサーバにつないでデータを救出したい。

USBHDDアダプタで接続してpvsコマンドなど使うと

WARNING: Duplicate VG name VolGroup

と怒られる。

こんな感じ

[root@elasticsearch2014 ~]# pvs
WARNING: Duplicate VG name VolGroup: Existing 3teytV-Pjft-YRuh-NEVb-uS0A-vDwA-Nidf3c (created here) takes precedence over aJiBMq-pyNY-cKiy-sJsV-ENIb-uDwZ-D74hV7
WARNING: Duplicate VG name VolGroup: Existing 3teytV-Pjft-YRuh-NEVb-uS0A-vDwA-Nidf3c (created here) takes precedence over aJiBMq-pyNY-cKiy-sJsV-ENIb-uDwZ-D74hV7
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a-- 465.27g 0
/dev/sdb2 VolGroup lvm2 a-- 465.27g 0

VG nameが『VolGroup』でこのサーバのVG nameと重複してる。
→ vgrename コマンドで VG nameを変更する。

vgrenameコマンドはVG UUIDでVGを指定出来るので、変更したいVG UUIDを指定して変更する。

VG UUIDはvgdisplayコマンドで確認出来るので、USBHDDアダプタをつないだり外したりして、該当するHDDのVG UUIDを調べる。

vgrename実行 指定したVG UUIDのVGNAMEを”VolGroup_hoge”にする。

vgrename aJiBMq-pyNY-cKiy-sJsV-ENIb-uDwZ-D74hV7 VolGroup_hoge

vgchange コマンドでアクティブにする。

vgchange -ay VolGroup_hoge

あとは普通にマウントする。

GUIのLinuxサーバを電源ボタンでシャットダウンする。

2014-09-17 10.09.47
※写真と本文は関係ありません。


OS:CentOS release 6.5 (Final)
GUI: GNOME

ディスプレー・キーボードのない環境で運用している、客先に置いてあるファイル共有サーバ。
CUIで起動している時に電源ボタンを押すとシャットダウンするが、GUI(init 5)の時はダイアログが出て動作を選択しないとシャットダウン出来ない。
客先でシャットダウンするときに不便。

/etc/acpi/events/power.conf を編集する。


# cat /etc/acpi/events/power.conf
# ACPID config to power down machine if powerbutton is pressed, but only if
# no gnome-power-manager is running

event=button/power.*
#action=/etc/acpi/actions/power.sh
action=/sbin/shutdown -h now

編集後acpiのdaemonを再起動する。

# /etc/init.d/acpid restart
acpi デーモンを停止中: [ OK ]
acpi デーモンを起動中: [ OK ]

iptables-save が作成した /etc/sysconfig/iptables が間違えている。

2014-08-23 10.41.02
※写真と本文は関係ありません。


古いiptables(recentのときだけかな)

# rpm -qa |grep iptables
iptables-1.2.7a-0vl3
# cat /etc/vine-release
Vine Linux 2.6r4 (La Fleur de Bouard)

# /etc/init.d/iptables save 後 restart すると。

# /etc/init.d/iptables restart
現在のすべてのルールとユーザ定義チェインを初期化中: [ OK ]
現在のすべてのルールとユーザ定義チェインを破棄中: [ OK ]
iptablesファイアウォールルールを適用中: [ OK ]
Bad argument `recent:'
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
[失敗]
# LANG=C /etc/init.d/iptables restart
Flushing all current rules and user defined chains: [ OK ]
Clearing all current rules and user defined chains: [ OK ]
Applying iptables firewall rules: [ OK ]
Bad argument `recent:'
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
[FAILED]

こんな感じでエラーになる。
作成された/etc/sysconfig/iptablesのrecentのseconds,hit_countのあたりが間違えていて、手で修正した。
修正後がこんな感じ。

# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.2.7a on Mon Aug 25 13:25:54 2014
*mangle
:PREROUTING ACCEPT [3285:285701]
:INPUT ACCEPT [3285:285701]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2997:3037036]
:POSTROUTING ACCEPT [2997:3037036]
COMMIT
# Completed on Mon Aug 25 13:25:54 2014
# Generated by iptables-save v1.2.7a on Mon Aug 25 13:25:54 2014
*nat
:PREROUTING ACCEPT [191:20311]
:POSTROUTING ACCEPT [2:144]
:OUTPUT ACCEPT [2:144]
COMMIT
# Completed on Mon Aug 25 13:25:54 2014
# Generated by iptables-save v1.2.7a on Mon Aug 25 13:25:54 2014
*filter
:INPUT ACCEPT [4548:396382]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4024:3991116]
:SSH-LOGDROP - [0:0]
#[0:0] -A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent recent: seconds: 1701970164 hit_count: 1953391971 name: side: source -j SSH-LOGDROP
#[0:0] -A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent recent: seconds: 1701970164 hit_count: 1953391971 name: side: source
[0:0] -A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name sshattack --rsource -j SSH-LOGDROP
[0:0] -A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name sshattack --rsource
[0:0] -A SSH-LOGDROP -j LOG --log-prefix "SSH attack: "
[0:0] -A SSH-LOGDROP -j DROP
COMMIT
# Completed on Mon Aug 25 13:25:54 2014

『iptables-restoreの使い方が間違えてる!』って言われるけど、iptables-saveが間違えているという…。

Nagiosの『Next Scheduled Check』が過去の時間になってしまってチェックされない。

2014-05-10 12.08.11-1
※写真と本文は関係ありません。


M/Bの電池が切れたサーバ。時計がずれたまま起動したら、Nagiosの『Next Scheduled Check』が過去の時間になってしまって、チェックされない。

全てのサービスで手動で『Re-schedule the next check of this service』で時間を設定すれば直るけどめんどくさい。
『/usr/local/nagios/var/retention.dat』を削除すると、StatusがPENDINGになるのでチェックが再開される。

javascriptでページタイトルとURLをredmineのリンクに整形する。

2014-05-04 10.42.02
※写真と本文は関係ありません。


redmineに社内WikiのURLを書くとき、日本語ページのURLがエンコードされてかっこわるいので、こんな感じに手で書いてたんだけど…。


"テストページ - 社内Wiki":http://wiki.example.jp/%83e%83X%83g

いちいちのめんどくさいのでRedmineのリンクに整形するjavascriptを書いた。
表示してるページでブックマークを表示すると、alartで


"javascriptでページタイトルとURLをredmineのリンクに整形する。 | ひとにやさしく":http://frym.jp/?p=1144&preview=true

と整形されて表示される。これをコピペする。
(コピーまで自動化出来るのかしら?)→追記:[JavaScript] テキストをクリップボードにコピーする → ヒマがあったらやる…かな。


javascript:function get_title_and_url(){
var d=document,
t=d.title,
u=d.URL;
alert('"' + t +'":' + u);
}
get_title_and_url()

デコードして。

javascript:function%20get_title_and_url(){%20var%20d=document,%20%09t=d.title,%20%09u=d.URL;%20%09alert('"'%20+%20t%20+'":'%20+%20u);%20}%20get_title_and_url()

これをブックマークとして登録。