こんにちはこんにちは! エンジニア川端です。
とつぜん寒くなりましたね。シャツ一枚だと通勤時の視線が痛い、そんな季節が近づいてきました。
寒さが苦手な私は、日に日に動きがにぶくなっています。
そんな担当者と違い、暑かろうが寒かろうがサーバは 24 時間フル稼働です。
今日は、表題の件をふくめ、大ハマリではないけど最初からちゃんとしてればよかった (つまり自分が悪い)、小ハマリ話をお届けします。
Git の hook で umask
最近は「git push して WEB サイト更新」というような記事をあちこちで見るようになりました。
私も個人利用のサーバに git と gitolite を導入して、 hooks/post-update で
cd /var/www/html/hogehoge git --git-dir=.git pull
とかやってますが、最初、ファイルのパーミッションの問題で小ハマリしました。
WEB 公開するコンテンツはパーミッションを 0644 にしたかったのですが、0600 になってしまいます。
解決策 1
post-update の中で
umask 0022
して解決しました。でも釈然としない。なんで umask 0077 になっているのか。
解決策 2
で、もっとよく見ていくと、~/.gitolite.rc の中で UMASK が定義されていたので、そこを変更したら post-update で何もしなくてもよくなりました。
全部同じでいいなら、ここでやってしまえばよさそう。
解決策 3
gitolite を使わない場合はどうなるか、そのうち検証しようと思います。
教訓
あちこちのサイトでいろんなことの簡単な手順が公開されていますので、ついお手軽にやってしまいがちですが、基本はドキュメント & ソースコード。
余談ですが、.git は WEB サーバの設定で見れなくしておく方がよいですね。
あと、gitolite は Perl で作られたツールです。git LOVER サンは Perl をディスるの禁止。
いつのまにかディスク容量が……
某格安 VPS サーバから「ディスク容量やばす」メールが届きました。まだまだ余裕があるはずなんだが、と確認してみたところ……
サーバ 1 = 某プラン (旧) Filesystem Size Used Avail Use% Mounted on /dev/hda2 17G 11G 5.0G 69% / <= /dev/hdb1 99G 3.5G 91G 4% /home <= tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/hda1 99M 18M 76M 19% /boot サーバ 2 = 某プラン (現) Filesystem Size Used Avail Use% Mounted on /dev/vda3 392G 5.5G 367G 2% / <= tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/vda1 243M 71M 160M 31% /boot
警告が出たのは、サーバ 1 = 某プラン (旧) の方です。
プラン名自体は変わらないのですが、旧プランの時は、/ 以下のディスク容量は少なく、/home に大きいディスクがマウントされています。油断して現環境と同じように使ってたら、/var/log/ が大変なことに!
最近、自分で作る時は /boot 以外全部 / にしてしまうことが多かったので、あまり気にしていませんでした。反省。
教訓
サーバも人間もいっしょ。一人一人の個性を意識して大切に。
Linux で自動復元圧縮ファイル
最後は「ネタ、もう 1 つくらい欲しいな」と無理矢理でっちあげようとしてハマったネタを。
使うあてもないんですが、自動解凍(復元) 形式の .tar.gz ファイルを作っていて、小ハマリしました。
サンプル
base.sh
#!/bin/bash LINE=`expr $(wc -l < $0) - 5`; tail -n $LINE $0 | tar zxfvp - exit;
最後に空行をいれるのを忘れないでください (後ほど目視でわかりやすいよう、わざと空行いれてます)。
次に、元となる .tar.gz ファイルを用意して、base.sh と連結します。
cat base.sh hoge.tar.gz > selfextract.sh
中をのぞいてみましょう。
selfextract.sh
#!/bin/bash LINE=`expr $(wc -l < $0) - 5`; tail -n $LINE $0 | tar zxfvp - exit; a?O??? ?0?q?? ?M?q= ?EBPJ????@?"??}??^??<???V봫??"S}?RZm?T:?2??LR??N??=?ruOwr??[???s?}?u'|?є?????=?R ??i??6:IEĞF???????}`???????濴??7?2???????Г???????6u???? ???(
selfextract.sh を実行すると、.tar.gz ファイルが展開されます。
解説
selfextract.sh は
- 自分自身の行数を数えて
- base.sh の行数を差し引いて tail して、tar.gz 部分を取り出して、
- tar に渡して復元する
という感じで実行されます。
ポイントは、base.sh は 6 行なのに、引き算では -5 していることろ。
これは、wc でカウントする時に 1 行少なくカウントされてしまうからです。
.tar.gz ファイルの最後に改行が含まれていませんので、wc で行数を数えると 1 行少なくカウントされます。
一方 tail は、最終行に改行コードが含まれていなくても 1 行です。この改行 1 つ分の差を調整しているわけです。
教訓
用のないものは作らない。
……というような他愛ないことを日々一緒に語り合えるステキエンジニア募集中です。
こぞってご応募ください!
ひとつひとつは小さなことでも積み重ねるとけっこうなボリュームになるので、こういう小ハマリを減らして、エンジニア力を高めていきたいものです。
皆様も、小さな無理を積み重ねて風邪などひかれませぬよう、ご自愛ください。特に心の風邪は長引きますので、お気をつけくださいね。