Hatena::ブログ(Diary)

Yet Another Hackadelic

2009-04-16

今日のワンライナー

以前から最初の何行かをスキップってやりたかったんだけども。

$ perl -le 'for (1..10) { print }' | sed '1,2d'
3
4
5
6
7
8
9
10

sed で出来たのか!!!

追記 (2009-04-16T17:32:50+09:00)

id:tokuhirom に tail -n '+3' と、$. (Perl の特殊変数)を教えて貰った件。

2009-03-15

ipcs, ipcrm のメモ

ipcs コマンドで message queue, shared memory, semaphore の状態を見ることが出来る。ipcrm でそれぞれ削除できる。

ところが全部消すってなるとそういうコマンドが無いので仕方ないからワンライナー。

ipcs -m | perl -e '<STDIN> for(1..3); while (<STDIN>) { my $semid = ((split /\s+/)[1]); system("ipcrm -m $semid"); }'

ipcs のオプションと icprm のオプション*1が一致してるのがミソ。

*1:この例だと -m

2009-02-09

自宅サーバーがあぼーんになった件

まず、id:amachang の資料がおいてあったので、先に謝っておきます、ごめんなさいごめんなさい><

なんでここで謝るかと言うと、ブログでトラックバック打たないと本人気づかないっぽぃのでw

何が起きたか

どうも、うちの子供が電源を切った為にソフトウェアRAID1で組んでたディスクのsyncがおかしくなり、一部ファイル読めなくなったりしてて、変だなーとか思ったらカーネルパニックで起動すらしなくなったという現象orz...

一応 fsck -y とかやってみたんだけど、これを最初にやったのが間違いの元だった気がする。

  • fdisk -l とかでデバイス一覧を出して、マウント可能かどうかを真っ先に調べる
  • あるいは他の HDD 足して dd とかで真っ先に退避?

いずれにせよ早い段階で救えるデータをどこかに退避するのが一番大事かなぁと><

この手の障害の時のベストプラクティスについてご存知の方、後学の為に教えて頂けると嬉しいです。

で現状

とりあえず lost+found にサルベージ出来たファイルが結構転がってる模様なので、今度の祭日に復旧を試みようと思います。amachang のデータもあるっぽかったです。全部かどうかは分からないけど。

2009-01-14 そふとんでまんどじゃないお!

C でリライトされてるジョブサーバー gearmand を試した

いつの間にやら no title にて、gearman library 0.1 が C で書き直されてました。MySQL で有名な Brian Aker らが開発しているようです。

これは期待出来るかも?

追試 (2009-01-16T21:49:11+09:00)

0.02 がリリースしてたので試してみました。下のサンプルは正常に安定して動いてました。

一応報告。

インストール

CentOS 5.2 で試してみました。

libevent のインストール

CentOS の libevent は yum でインストールすると、1.1a と言うとんでもなく古いもので、これでは gearman library はコンパイル出来ません。従ってソースからインストールします。

$ cd /usr/local/src
$ wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
$ tar xfz libevent-1.4.9-stable.tar.gz
$ cd libevent-1.4.9-stable
$ ./configure --enable-shared
$ make && make install

とかこんな感じで。

gearman のインストール

こっちもソースからインストールします。

$ cd /usr/local/src
$ wget http://launchpad.net/gearmand/trunk/0.1/+download/gearmand-0.1.tar.gz
$ tar xfz gearmand-0.1.tar.gz
$ cd gearmand-0.1
$ ./configure --enable-shared --with-event=/usr/local
$ make && make install

試してみる

以前書いた奴をコピペした。

ソース

worker.pl

#!/usr/bin/perl

use strict;
use warnings;

use Gearman::Worker;
use Storable qw(thaw);
use List::Util qw(sum);

my $worker = Gearman::Worker->new;
$worker->job_servers('localhost');

$worker->register_function(
    sum => sub {
        my $job = shift;
        my @args = @{thaw($job->arg)};

        return sum @args;
    }
);

$worker->work while(1);

client.pl

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dump qw(dump);
use Perl6::Say;
use Storable qw(freeze thaw);
use Gearman::Client;
use Gearman::Task;

my $client = Gearman::Client->new;
$client->job_servers(qw|localhost|);

my $args = freeze([1..9]);

my $result_ref = $client->do_task("sum", \$args, {});
say dump($$result_ref);
試してみる

gearmand を起動してみる。今回はテスト目的なので -v つけておく。

$ /usr/local/bin/gearmand -v

でどうなったかと言うと、

Method for libevent: epoll
Listening on port 7003



      127.0.0.1:49696 Connected (1 current, 1 total)



      127.0.0.1:49697 Connected (2 current, 2 total)
      127.0.0.1:49697 Disconnected
Segmentation fault

って感じ。client のコード一回実行して結果が返ってきたんだけど、結局 Seg って落ちた><

まだまだ安定版とは言えなさそうですね。

ちなみに Client Library も提供されてるので C や C++ で worker や client を記述する事が可能みたいです。

安定してきたら面白そう。

そういえば、Storable じゃなくて JSON 形式でデータ扱えばいいのかな。そっちのがポータブルですよね。

とりあえず皆、Q4M 使っとけって事かなw

SEE ALSO

2009-01-11 あけおめりんこ

Samba の設定 (VMWare で CentOS をゲストにした場合)

いずれ手持ちの windows を再インストールするのでメモ。

VMWare Player を使って CentOS をインストールするのは、

が分かりやすいです。

ネットワーク設定

nat にしておきます。んでもって dhcp は使わない。

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:50:56:7E:06:58
IPADDR=192.168.249.10
NETMASK=255.255.255.0
GATEWAY=192.168.249.2
ONBOOT=yes

こんな感じで設定しておく。変更した場合は、

$ sudo /sbin/service network restart

で反映。

samba の設定

[global]
workgroup = WorkGroup
server string = VMWare Server
netbios name = vmware
security = share

[public]
comment = Public Stuff
path = /home/zigorou
read only = no
public = yes
writable = yes
printable = no
guest only = yes
guest ok = yes
browseable = yes
force user = zigorou

こんな感じで zigorou ユーザーにてファイル共有が出来ます。

はまりどころ

  • SELinux が有効になっている
  • iptables で許可されてない

とかが FAQ の模様。はまったらこの辺りを真っ先に疑う。