PHP7 で yrmcds クライアントの拡張を動くようにした

先日 PHP のメジャーバージョンである [PHP7][] がリリースされました。 性能向上のために内部構造が大きく変更されているため、PHP5 向けの拡張モジュールは大幅に書き直しが必要です。

拡張モジュールを開発したことがある人はご存知の通り、PHP の内部 API は公式の解説がほとんどありません。 必然、先人の資料や本体のコードを読み漁ってなんとかするわけで、以下の資料を大いに参考にいたしました。

続きを読む

先頭行だけ grep してファイル名を表示したい

/usr/local/bin にある #!/usr/bin/python3 をみつけたい、場面です。

こんな感じ。

find /usr/local/bin -type file | xargs awk '/python3/ {print FILENAME} {nextfile}'

1行目だけ検査したらさっさと nextfile で次に移るので OK というわけ。

nextfile Stop processing the current input file. The next input record read comes from the next input file. FILENAME and ARGIND are updated, FNR is reset to 1, and processing starts over with the first pattern in the AWK program. If the end of the input data is reached, the END block(s), if any, are executed.

追記

FNR (行番号)を if で判定して nextfile することで、任意の行数を処理できます。
あと、grep といいつつ awk なタイトル詐欺ですみません。

手軽に Go スクリプトを実行する

Linux 限定ですが、binfmt_misc を使えば shell script や Python と同じように実行ビットを立てるだけで実行できるようになります。

  1. 以下のスクリプト/usr/local/bin/gorun とでもして保存

     #!/bin/sh
     exec go run "$@"

  2. Debian/Ubuntu なら update-binfmts があるので以下を実行

    sudo update-binfmts --install go /usr/local/bin/gorun --extension go

  3. Go スクリプトに実行ビットを立てる

    chmod a+x hello.go

  4. hello.go が直接実行できるようになる

     $ ./hello.go
     Hello World!

小ネタで頻出と思いますけど。

スプリットブレインが起きたら ARP フラッシュが必要になった

これまた誰かの役に立てばということで。

keepalivedVRRP)はその仕組み上、ネットワーク分断時にマスターが二つ以上できます。俗にいう、スプリットブレインというやつです。

ネットワーク分断が解消したのち、マスターは一つに収束します。ネットワークスイッチの類であれば大概の場合これで問題はありません。ええ、問題はないはずでした。

続きを読む

PERC9 H730 RAIDコントローラーで Non-RAID Disk を扱う

(誰かの)お役立ちメモ。

Dell 13世代機の RAID コントローラーには pass through モード、またの名を Non-RAID Disk に設定する機能があります。 PERC9 とか H730 とかいう世代のものです。(←検索キーワード)

一部の HDD を RAID (たとえば RAID1)にしながら、残りの HDD を OS にそのまま使用させられる機能で、たとえば ZFS や Btrfs のように HDD を自力で RAID として取り扱えるモダンなファイルシステムにうってつけです。

続きを読む