mysql のログ

一般クエリログ、スロークエリログ、バイナリクエリログ、エラーログ、があるらしい。
エラーログは、意識しなくても標準で吐くようになっていることが多いと思う。
設定は my.cnf で行なうとして、設定方法はぐぐってもらうとして、各ログについて調べた内容とか自分の運用で知ったことをメモっておく。

エラーログ
mysql のエラー出力をログっているっぽい。
普通に稼動していると、起動時と停止時のログしか出てこない。
なんかエラー起こすとログに残るけど、その直前に実行されていた SQL 文とかサッパリ不明。
ざっと 1ヶ月くらい運用していて、サーバが DB エラーで 3 回~ 4 回くらい停止したのだけれど、クラッシュしたよ、ってメッセージしか残ってなくて原因がワケワカメ。
だみだこりゃ。
一般クエリログ
発行された全SQL文を残すらしい。これをオンにして再起動かけたら、一発でログのサイズが 6KB, 100行以上 とかになる。
これを吐きながら、月に 3回程度のエラーを待つのは容量の面やいざエラーが起こった時の解析量から見て面倒くさい。
多分、最後の手段。
スロークエリログ
インデックスを使わなかったクエリ、とか 1回の実行に○秒以上要したクエリ、とかを残せる。
中期的に観察するのに、ログを間引くのにはいいかも。でもこれで原因が特定できなかったら一般エラーログに託すことになるんだろーなー。
ちゃんとインデックスを作ってないと、めっちゃログ出るっぽい。

なんかインデックスを適切に作るには、explain select ほげほげ って感じでやるらしい。
ログ見て、特定のsql文が沢山出てきたら、ちゃんと調べよう。

バイナリログ
トランザクションとかの情報らしくって、DB のレプリケーションとか、復元後、最新状態までロールフォワードしたりするのに使われるらしい。
ファイル出力の設定が my.cnf にコメントアウト状態で書かれているけど、web で調べると DB 内に溜まったバイナリログを見たり消したりする方法が出てくる。
そも、他のログも DB 内に溜められるはずだけど。
まー個人運用レベルでは必要なさげ。例えば我が家では、定期的に mysqldump して、別 HDD に書き出している。とりあえずうちの鯖くらいなら、これで良いと思う。

zsh カスタマイズ

zsh で引数つきの alias を設定するには、
function で関数を定義するほかない。

function rmCR() {
    if test $# -ne 2; then
        return 1
    fi
    if test $1 = $2; then
        return 1
    fi
    tr -d \\r <$1 >$2
}

例えばこんな感じ。

(ついでに、特殊変数のメモ。)

$#
引数の数
$1 .. $n
n 番目の引数
$@, $*
引数全部をスペース区切りで列挙。@ と * の違いは不明。
$$
そのコマンドが実行された時の PID。

(その他)

set -o
setopt で設定されるオプションの一覧と現在の設定状況。アンダーバーを入れても無視される。(例: setopt vi = setopt v_i )
setopt no...
setopt で on に設定したオプションの打ち消し。でも、setopt novi しても、vi モードは完全には解除されなかった。
setopt transientrprompt
コマンド実行後、右プロンプトを消す。コピペしたい時に便利。

ufw の kern.log への出力を抑制する

/etc/rsyslog.d/20-ufw.conf で、 #&~ と書かれている行のコメントアウト「#」を消す。
rsyslog を再起動。
デフォルトのままで、/var/log/ufw.log にログは出ているので、そっちを見れば問題なし。

Contact Form 7 でメール送信できない

サーバ移転してできなくなっていたので、色々と可能性を考えたが、原因は SMTP を叩く sendmail 相当の機能がサーバにないからだった。
何のコマンドが必要かは分からんが heirloom-mailx を入れても解決しなかったので、mail コマンドではないっぽい。
とりあえず、SMTP 叩けるプラグインを入れてしのぐことにした。

前のサーバでも、SMTP 送信できるようにした記憶はないのだが…うーむ?
ローカル配送だったからかな…
(未解決)

NOOK Color へ MROM-encore

CM ベースのカスタム ROM であるらしい、MROM-encore | TechnoGeek を入れてみた。
私の端末は、nook color (買った時の記事) なので、CM9 以降 (Android 4.0 以降) はもっさりで FA らしい。
つーことで、MROM-7-encore を入れた。

CMW 導入済なので、相変わらず簡単に入れられる。

  1. 1gb_clockwork-3.2.0.1-eyeballer を microSD に焼く。気になる人は MiniTool Partition Wizard あたりでパーティションを広げる。
  2. micro SD カードに「MROM-7-20130401-encore.zip」「MROM-gapps-gb-02082013.zip」「gapps-gb-20110828-signed.zip」を入れて、NOOK Color に挿して起動。
  3. cache とか data とか advanced から Dalvik とか、まぁ気になる範囲を wipe する。
  4. install zip from sdcard を選んで、MROM-7-20130401-encore.zip → gapps-gb-20110828-signed.zip → MROM-gapps-gb-02082013.zip の順でインストール。
  5. sd card 抜いて再起動すれば OK。

MROM は、早いよ。これ使った感じはいい感じ。

んで、恒例の adb shell から不要アプリを消す (disable にする) ことにする。
もはや、このリストをメモるためにこの記事起こしたようなもんだ。
もし目当てのパッケージを特定できるんだったら、こんなコマンドを使うと早い。

# pm list packages -f | grep hogehoge(特定するためのgrepをn回連結) | sed -e 's/.*=//' | xargs pm disable

パッケージ特定に apk 名が不要な場合は、–f オプションが不要な代わりに sed の正規表現が "s/package://" とかになるのかな。

またこの ROM は、ホーム画面のショートカットを右上の info にドラッグすることで、そのショートカットの飛び先のアプリを表示してくれる。
Phone.apk を消しても Phone のショートカットが消えなかった時は驚いたが、どうやら Contacts が activity として Phone を持っていることが分かった。
SystemCleanup で Contacts の Phone activity のみ disable したら、ショートカットも消えた。

イーサネットコンバータ

WLI-UTX-AG300/C というイーサネットコンバータを買った。けっこう前に。
このイーサネットコンバータで、電話線から離れた部屋にPCを置いている。
親機が11n未対応なので、せっかくの 11n 対応による 300Mbps の効果は全く感じられないが、普通の USB 無線子機では届かない入り組んだ部屋の奥へ、無線+有線で LAN を届かせることができ、おおむね満足な性能である。
なにより、安い。

しかし…無線区間を 300Mbps のくせに、「USBは電源供給のみ」かつ「有線 I/F は 1 ポートのみ」かつ「有線 I/F は Fastether (最大 100Mbps)」とか、設計ミスとしか思えん。
有線ポートがボトルネックとか、11n 対応に期待していたら怒りまくっているところだ。

AWSについてメモ書くよ

ここに追記していく。まとまったら、またapacheの時みたく整理して記事にし直すかも。

Apache の設定 その1

/home/hoge/public_html を DocumentRoot とする時、/home/hoge が標準で 700 のため、403 が返る。
vhost を使う場合、httpd.conf の NameVirtualHost *:80 を生かして VirtualHost ディレクティブを書けば動く。
未指定の vhost を殺すには、ServerName any でデフォルト設定が書けるので、Order deny,allow かつ deny from all とする。
不要モジュール等については後日。

Amazon Linux の設定とか

sudo がパスワード無しで動いてしまう。そもそも、visudo で権限付与を見てもデフォルトユーザの ec2-user に sudo 権限ついてないしおかしい…
と思ったら、/etc/sudoers.d/cloud-init に記載されていたよ。
NOPASSWD: というのを消せば、パスワードを要求されるようになる。

httpd がサーバの OS とか apache のバージョンとか垂れ流してしまう。
ServerTokens OS の行をコメントアウトし、ServerSignature は Off とする。

まずは使い始め

AWS で Amazon Linux のインスタンスを作ってみる。
yum でパッケージ管理してるし CentOS チックだなーって思いながら apache の設定とか調べ中。
なんだこれ…

  • /etc/httpd 配下かよ
  • a2enmod とか a2ensite とかないの?どうやって有効化するの?

とか初見殺しの山。
なんか調べてみると、とにかく httpd.conf に書きまくっている感じ。debian も昔はこんな感じだった記憶があるなぁ。CentOS は今でもこうなのか。
いらん設定を消していかなければいかんらしい。

モジュールはともかく、vhost のディレクティブはまっさらから綺麗に書きたい衝動にかられる。
DocumentRoot とかベタに書くのやーめーてー

Sleep as Android のデータ

睡眠データ

Sleep as Androidという睡眠計を使ってみたが、Export される csv が意味不明なので、ちょっと読み解いてみた。

データフィールドの指定はExcel で読み込んだ時の表記で記載する。例えば、1行目1列目データはA1と書く。

項目 セル
測定開始時刻 A2 (unix timestamp のミリ秒表記)
測定間隔 記載されていないので、F2 の測定期間(h)をデータ数で割る。今のところ、0.00294 (excel 日時) = 254秒。

データの取り方は、テキトーに設定して枕元に置くだけ。
とってみたデータはグラフの通り。
子供と寝ているので、子供の反応もまじってるかも。

睡眠データ
睡眠データ

CentOS を使う

とあるプロダクトの動作保証環境の関係で、CentOS に手を出すことになった。
そのプロダクトの指定は、CentOS 5.7 なのだが、そんなものは、手に入らない。
とりあえず CentOS 公式から落とせる 5.9 を簡易インストールした。

ubuntu との差分はこんな感じ。
インストールできるパッケージが古かったり少なかったりして、あんま使えない。
パッケージ管理は yum/rpm
yum makecache (apt-get update 相当) が一般ユーザにもできる。
パッケージのバージョン違いのためか、動作が違う。(sudo は、-E オプションをつけないと、sudo 前のユーザの環境変数を引き継いでくれないなど)

これは、使いにくい…

7z でヘッダも暗号化

zip とか 7z でファイルを暗号化圧縮する時、通常の設定ではヘッダ情報が暗号化されない。
なので、暗号化されているアーカイブなのに、ファイルリストが取得できたりする。
こうすると、そのファイルの中身は読めなかったとしても、ファイル名から中身を推測することができるため、暗号化の効果が減じる。

コマンドライン版 7z を使った場合、7z のみヘッダの暗号化オプションを備えているので、これを使えばどんなファイルが格納されているのかすら、パスワードなしでは表示できなくなる。

# 7za a -mhe -pPASSWORD ARCHIVENAME FILENAME1 FILENAME2 ...

web の情報によれば、ヘッダの書式が固定であるため、ヘッダの暗号化部分に対して辞書型攻撃を仕掛けて解読される場合がある、との記載があった。
辞書に登録されるようなパスワードを使う場合には、適切でないかも知れない。