%Y%m%d形式でファイルを扱いたい場合はDate::Simple::D8使うと楽でいいです

バックアップファイルとかつくる時に
「%Y%m%d」形式で保存したい場合、

こんな感じでDate::Simple::D8モジュール使うと
カジュアルに「%Y%m%d」形式を利用できるのでオススメしたい感じです。

Perl書き始めて半年ぐらい経ちますが
初めてYAPCに行くのでとても楽しみです。

netcatを使って踏み台を踏む手順を省く

拝啓

全国1億5千万の踏み台サーバ好きのみなさま
元気に踏み台サーバを踏まれているでしょうか。

社内で利用していながらよく理解していなかったので
改めてカジュアルに学び直したメモを書いておきます。

参考

クラアント -> 踏み台サーバ -> 対象サーバ

という時に、毎回踏み台サーバに入って、対象サーバに入るのは面倒くさいので


「~/.ssh/config」へ

Host fumidai
    Hostname 203.0.113.1
    User kenjiskywalker

Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh fumidai nc -w 300 %h %p

このように設定することによって

$ ssh hoge-web01 

このコマンドだけで、fumidaiを踏んでhoge-web01サーバへ
ログインしてくれるのである。実に助かる。

踏み台サーバを.ssh/configに記載しない場合に気を付けないといけないのは

Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh 203.0.113.1 nc -w 300 %h %p

とやってしまってうと

Permission denied (publickey,gssapi-with-mic).
ssh_exchange_identification: Connection closed by remote host

とエラーになってしまう。原因は簡単で

ssh 203.0.113.1 => kenjiskywalker@203.0.113.101 ということで
踏み台サーバのログインアカウントを指定し忘れている状態になる。

というのを1人であれれーってやってた。恥ずかしい。。

色々調べていると、最近ではnetcat使うよりもsshの-Wオプション使う人が多いっぽい。
-w付けないと居残り組が発生する事象もないし、踏み台側にnetcat入れなくても
大丈夫なので、これから始める人はssh -Wで良さそう。

netcat
Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh -l kenjiskywalker 203.0.113.1 nc -w 300 %h %p
ssh -W
Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh -W %h %p -l kenjiskywalker 203.0.113.1 


また、同一セグメントに対しても
ホスト名を一意に設定して、相互認識できるようにしておけば

Host fumidai
    Hostname 203.0.113.1
    User kenjiskywalker

Host hoge-*
    User kenjiskywalker
    ProxyCommand ssh fumidai nc -w 300 %h %p

こんな感じで楽ができるって知った。
@fujiwara++

netcat自体は原始的であるが故に強力で
発想さえあれば色々と面白いことができるのがいい。

中2要素がふんだんに詰まっているのがいい。

( '~')

「プロのためのLinuxシステム・10年効く技術」を超絶おすすめいたします

プロのためのLinuxシステム・10年効く技術

ウェブオペレーションという言葉が一般的になってきた今日、
Linux上で様々なソフトウェアを駆使し、多種多様なウェブサービスが次々と生まれ
その産まれた様々なサービスを、陰ながら支えるエンジニアも増えてきました。

ウェブオペレーションエンジニアとか、インフラエンジニアとか
サーバエンジニアとか、色々と呼称はあるかとは思いますが
日常的にLinuxを扱う人は、本書籍はマストアイテムです。

「はじめて読む486」、「はじめて読む8086」などを読み
どうやってノイマン型コンピュータが動いているのか
メモリの仕組みはどうなっているのか、HDDにどうやってデータを
書き込んでいるのか、工学系の知識が足りないながら調べたりもしましたが
この書籍があれば、深い知識の森を迷うことなく、整備された美しい一歩の道を、
Linuxの知識へと続く道を歩いていくことができます。

第1章 知らないと損するぞ! 押さえておきたいLinux内部構造

この第1章だけで、本書籍を購入した価値がありました。
LinuxはどのようにしてCPU、メモリ、HDDを利用し、
データを扱っているのか、必要最低限の情報をわかりやすく
完結に記載されています。

記載されている以上深い情報を知るなら、他の書籍、
またはソースコードで確認すれば良い。

第2章 仮想化でここまでできるインフラ環境構築

KVM自宅サーバ内に子サーバをつくり
HA環境や自宅ネットワークを構築して勉強するための
下地作りとして参考になります。
ただしbindは使わない方が良いかと。

第3章 10番勝負! 自作スクリプトでコマンド活用

shell scriptマイスターになるのも良いですが
最近Ops系ツールが良く生まれるRuby
サーバサイドプログラムが豊富なPerlPython
スクリプトを書くのをおすすめします。

本書籍ではPerlを扱っているので
試して打って、自分の好きな言語で書き換えてみて
色々試してみるきっかけになるかと。

第4章 最後の砦! カーネルソースを読む

ここでカーネルソースの読み方まで教えてくれて
本章まで来ると
「親切な幼馴染のお兄さんが実はエンジニアで、
手取り足取りきっかけづくりに強力してくれている」
という妄想の世界に突入していきます。


第5章 一歩先を行く! RHEL6新機能の総まとめ

そして最終章として、RedHatのバージョン6について
anacron、Upstart、cgroupsの説明などがわかりやすくされていて
涙なしで終わることなどできるはずがありません。
「兄ちゃん、RHEL6から採用されたTicklessカーネルについても教えてよ!」
「気付かないのか?お前はもう自分で調べることができる力を手に入れているんだよ」
「!!?」

ということで、パソコンなんてこの仕事をするまで知らなかったよー、
プログラムはそこそこわかるけどLinuxとかはよくわからないなー。
本当に自分はLinuxのことを知っているのだろうか、
という方へ、是非ともおすすめしたい書籍でございます。


( '-')b

夏が終わった。LimeChatからirssiに変えてみようと、僕はそう思った。

充実したIRC生活を過ごされていますでしょうか。

某所ではIRCは死んだ、これからはGoogle+だ。
なんて記事があったりしますが、commit-hook的なことをしたり
心の荒みやすい現代に、どんなことでもうんうん。とうなずいてくれる
うなず君botを泳がせたり、IRCは相変わらず良いものです。

仕事でIRCをよく利用しているのですが、
hilightに対してレスポンス高めに反応したいなと思い、
irssiでhilightをim.kayacに通知する環境をつくりました。
これでもfujiwaraさんのレスポンスには敵わないです。
きっとマグネットコーティングされているんだと思います。

インストールメモ。

参考:

全体のログを別ウィンドウに表示する

in the box / IrssiでLimeChatの全体ログ

hilightをim.kayacで受けとる

unknownplace.org / AnyEventでirssiプラグインを書く


環境:

IRC <- znc <- PC[irssi]
           <- iPhone[LimeChat]

ZNCに繋ぐ際に、ローカルホストですが
諸事情があって、ドメインネームでアクセスしています。
あとSSLとか有効になっていたりします。

servers = (  {
    {
        address = "wwwXXXX.sakura.ne.jp";
        port = "PORT";
        chatnet = "foo";
        password = "USERNAME1:PASSWORD";
        use_ssl = "yes";
        ssl_verify = "no";
        autoconnect = "yes";
    },
    {
        address = "wwwXXXX.sakura.ne.jp";
        port = "PORT";
        chatnet = "bar";
        password = "USERNAME2:PASSWORD";
        use_ssl = "yes";
        ssl_verify = "no";
        autoconnect = "yes";
    }
);
chatnets = {
    foo = { type = "IRC"; };
    bar = { type = "IRC";};
};

この辺はzncに準じて設定します。


導入しているプラグイン

  • alllogwin.pl
  • adv_windowlist.pl
  • hilight2im.pl
  • nicklist.pl

nicklist

tmux上のpane1でirssiを、pane2で"cat ~/.irssi/nicklistfifo"とコマンドを打って入力を待ちながら
irssiでpane1のirssiで"/nicklist fifo"と入力することで、pane2の画面にユーザ一覧が表示されます。
テクニカルですなー。

こんな感じ。


そしてその他の設定としては

alllogwinを有難く利用させて頂いているため

"/window new, /window name alllog, /layout save"
で、画像の通り、いつでも全体のログが上のウィンドウに出てくるようにしています。

y_mashiro++


そして肝心のhilightをim.kayacで受けとる為に

"/set im_kayac_com_username USERNAME, /save"

として、実際にhilightキーワードを入力して
im.kayacで通知されるかテストをします。通知されればOK。

あと何かやってるとしたら、エリアスのところで

  W = "who";       whoを
  W = "window";    windowに変えてる

にしてウィンドウ切り替えを速くしているぐらいです。

あと、チャンネル一覧で
既読と未読の色変えられないのかなーと思ったのですが、色は変わっているみたいで
iTermとirssiのtheme次第でその色がちゃんと分かれるかどうかが決まるようです。
わたしはchaves.themeで色がわかれました。

irssiはPerlで動いていて、簡単にpluginも書けるようなので
色々と遊べるのではないかと思います。

( '-')-3

Redisのchef recipeを書きました

Redis用のchef cookbooksをつくりました。

https://github.com/kenjiskywalker/cookbooks-redis

オフィシャルからソースファイル持ってきて
ただインストールしているだけなんですが、なかったので
取り敢えずインターネット上にアップロードしました。

複数Portで上がってるRedisをZabbixで監視した日

RedisをKeepalivedでフェイルオーバーする構成案 - 酒日記 はてな支店

こちらの構成でごにょごにょする機会があり
メトリクスの監視する必要があるので
Zabbixで値取れるようにしたメモです。

上記フェイルオーバーまでできるchefのrecipeはまた後日上げます。

https://github.com/rdvn/zabbix-templates

特に問題がなければrdvnさんが上げてくれているこちらのテンプレートを使えば
問題ないのかなと思います。画像がアルパカさんに似てますよね。かわいい。

ただRedisを2つ上げる必要があったので、こちらのテンプレートを若干いじくらせてもらいました。
それと、データの取り方もなんとなくこっちでいいんじゃないのかなって思ったので
その辺もごにょっとやらせてもらいました。

https://github.com/kenjiskywalker/zabbix-templates

RedisでPort指定してZabbixで値を取りたい場合(あんまり需要なさそう)に
ご利用頂ければと思います。

トリガーは入っていないので、よしなに値に対して閾値もうけていけばよいかと思います。

( '-')-3

scpとrsyncの所作の違い。気をつけるところ


scpでダサい作業していたら、riywoさんのポストを見つけて質問してみた。



複数のファイルとかはrsync使うけど
ガバイトくらすの大きいファイルはscpで使い分けてた。

あれ、何で使い分けてるんだっけって...
思い返してみて

「コピー対象のファイルが大きいと、一時ファイルでディスクが逼迫する可能性がある。」

という貧乏臭い理由からだったことを思い出して
赤い実はじけた。

$ rsync -av /tmp/hoge.img /tmp/hoge2.img

とする場合、

$ ls -la /tmp/

をすると、ディレクトリ内に一時ファイルとして
「.hoge2.img.MbWbve」 のようなファイルがつくられているのがわかります。


o scp
コピー対象のファイルを直接書き込む為
途中キャンセルなどした場合、転送先のファイルは不完全な状態になります。

o rsync
転送用の一時ファイルを作成し、転送が完成した時点で
一時ファイルからコピー対象のファイルへ移動する為、転送先の
更新対象のファイルは、転送先で完全にコピーされた後に上書きされます。


ので、ファイルの保全性から考えると
rsyncの方が1クッション置いてるので安全かなと思います。


また、一時ファイルなんか作ってられんって人は
rsync--inplace ってオプション付ければ一時ファイルつくらないで
直接上書きしてくれます。

ソース完全に読んだわけではないので所々足りないところがあると思いますので
誤りなどありましたらご指摘頂ければと思います。

scpでやっていたこと、rsyncでやっていこうかな。

無意識に使ってるコマンドとか、無意識に使ってるオプションとか
当たり前のようになってしまって、その存在自体に疑問を抱かなくなるの老害化の手前なので
常になんでだろう。って考えること忘れないようにしていきたいものです!

( '-')-3