myfinderの技術や周辺的活動のblog

2009年6月30日火曜日

ハードディスクをまるっとコピーして引っ越す

ハードディスクが壊れそうになってきたり、もっと大きい容量に乗り換えたい時にやる手として、増設したHDDにデータをcpやらmvやrsyncなんかで移動させたりすることもあるかなと思う。
が、それだと数十GB単位のデータをコピーするときにとんでもねぇ時間がかかったりして、大変非効率的。
そんな時にはddコマンドを使うのがよい。

利点
  1. LinuxでもWindowsでも、この手でHDDをまるっとコピーすることができる。
  2. 容量の大きいHDDにコピーした場合は新たなパーティションとして、空き容量部分を追加できる。
  3. もとのディスクのパーティションがLVMで作られていれば、空き容量部分を利用して、既存の領域を拡張できちゃう。
やり方
空いているPCに、コピー元HDDとコピー先HDDを積んで、以下のコマンド一発でOK。
この場合はsdaがコピー元、sdbがコピー先です。間違えるとカオスなので、絶対に確認してからコマンドを打つべし!

# dd if=/dev/sda of=/dev/sdb bs=1024M conv=sync,noerror


処理時間の目安
容量時間
20GB10
80GB40分
160GB80分
250GB2時間
500GB4時間

某社様が、たいそう参考になる資料をUPしてくれています。感謝

補足
経験値的にはPATAだと40GBで30~40分かかります。

Xenで仮想サーバ環境構築 その1

先日衝動買いしてスペックアップさせたサーバで、Xenを利用したクラスタを構築することにした。
今運用しているreposサーバでは、構築する時にちょうどVMware Server 2.0がリリースされたのでそれを利用してみたが、今回はXenでやった。

ホストとなるOSのインストールはCentOS5.3を利用する、そのインストールについては割愛。
今回はXenのセットアップまで。

Xenのインストール
CentOSインストール時点で「仮想化」のサポートを有効にしていない場合は下記コマンドでXenをインストールしておく。


# yum groupinstall Virtualization


Xenの設定

「/etc/modprobe.conf」の最下行に「alias scsi_hostadapter xenblk」を追加。


#vi /etc/modprobe.conf
・・・
alias scsi_hostadapter xenblk


Xen対応のKernelを利用するので「/etc/sysconfig/kernel」の「DEFAULTKERNEL=kernel」行を「DEFAULTKERNEL=kernel-xen」に変更。


# vi /etc/sysconfig/kernel

#DEFAULTKERNEL=kernel
DEFAULTKERNEL=kernel-xen


Xen対応のKernelで起動させるため、「/boot/grub/menu.lst」「default=X」の番号を変更。


# vi /boot/grub/menu.lst

#default=1
default=0


ここまでできたら再起動する。
再起動後、「xm list」と入力し、以下のように表示されればXenの最初の一歩は完了。


# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 454 1 r----- 16.5


今日はとりあえずここまで。

2009年6月28日日曜日

強度の高いパスワードを作りたいときのTips

Linuxのアカウントを作るときやら、どこぞのWebサービスなどに会員登録するときにパスワードを考える必要があるタイミングは多いと思う。
が、考えるのはめんどい上に、自分で考えたパスワードの強度が高いとは限らない。

そんなときに使える一手に、apgコマンドがある。
apgコマンドは、ある程度音読可能で強度の高めなパスワードが生成できる。
cygwinでもインストール可能なので、Windowsの人でもいけます><

apgは標準では入ってないので、aptやyumでインストールすること。

使用例

$ apg -n 10 -m 10 -x 10 -M NCL -E 0O1I -t
wujcewHod8 (wuj-cew-Hod-EIGHT)
Lalj6quoig (Lalj-SIX-quoig)
(途中省略)
GoujAmbij8 (Gouj-Am-bij-EIGHT)

これで作ったパスワードが本当に強いパスワードなのかどうかを、MSのパスワードチェッカーを使うなどして確認するとmore betterなんじゃないかと。

2009年6月27日土曜日

ApacheでHTTPメソッドを制限したいときにやる事

Subversionを使うときは大抵WebDAVを使うと思うのですが、認証のオーバーヘッドを減らす工夫の一つとして「読み出しの時だけBasic認証をかけない」というやり方があるのでメモ。

ApacheのディレクティブにはLimitExceptというものがあり、ディレクティブの引数に含まれていないHTTPのアクセスメソッドに対して適用するためのアクセス制御ディレクティブを記述することができる。

設定例
#---------------------------------
AuthType Basic
AuthBasicProvider ldap
AuthName "Basic Auth"
AuthzLDAPAuthoritative off
AuthLDAPURL ldap://hogehoge?uid
<limitexcept>
require valid-user
</limitexcept>
#---------------------------------
こうしておけば、書き込みを伴う(コミットするとか)アクセスに対してだけ認証をかけ、読み出しに対しては認証がかからなくなる。

Unicode::EastAsianWidthを使う

文字列を特定サイズの画像に埋め込むプログラムを書く機会があり、文字幅を計算する必要に迫られた。
すなわち「全角」を2文字「半角」を1文字分として数えたい、というケース。
(画像に埋め込むフォントは等幅を想定してます)

文字幅を計算する必要がある、ということはlengthなんかの文字数でのカウントはできない。

そこでいろいろ考えたりググったりしてみたところ、tokuhiromさんのblogでUnicode::EastAsianWidthの話を見つけた。

このモジュールはUnicodeコンソーシアムの定めるEastAsianWidthに基づき「全角に該当する文字」「半角に該当する文字」etcにあたるUnicode属性を提供するもので、useすると下記のようなUnicode属性が正規表現で使えるようになる。

/(?:(\p{InFullwidth}+)|(\p{InHalfwidth}+))/g

これを使うと「文字幅」をカウントできるようになるのです。
下記はそのプログラムの一例

use strict;
use warnings;

use Unicode::EastAsianWidth;
use utf8;

sub visualLength {
my $text = shift or '';

my $length = 0;

while ($text =~ /(?:(\p{InFullwidth}+)|(\p{InHalfwidth}+))/g) {
# 全角に該当すれば2、そうでなければ1インクリメント
$length += ($1 ? length($1) * 2 : length($2));
}

return $length;
}

my $text1 = "あいうえお"; # 10
my $text2 = "hogehoge"; # 8

print visualLength($text1), "\n";
print visualLength($text2), "\n";

多少冗長なコードかも。

ちなみにその「EastAsianWidth」の定義ってどんなん?という疑問がわいた方はここを見ると全部のってます。

補足
Unicode関係で超参考になったページ
http://totonica.s41.xrea.com/doc/delphi_tiburon/doc_unicode/eastasianwidth.htm

BloggerでPerlをシンタックスハイライトする

最近Perlプログラマになったので、このBloggerでもSyntaxハイライトをちゃんとできるようにしたいと思い調べてみた。

Bloggerで使えて結構良い感じなのが下記なのだが、これがPerlをサポートしていない。
http://code.google.com/p/syntaxhighlighter/

が、有志がPerl対応のためのコードを投稿してくれていた。
http://nevstokes.com/includes/syntax/scripts/shBrushPerl.js

これをガジェットのJavaScriptに追加すれば、晴れてBloggerでもPerlのコードを載せられる。
いままでは適当にrubyとか指定していたが、今後はこれでやりたい。

ちなみにそのコードを踏襲すればどんな言語でもいける。
(というか自分でやればよかった。。。)

Syntax HighlightのPerlサポートテスト

perlサポートのテスト

use strict;

my $text = "Apple";

while ($text =~ /(?:(A)|(p)|(l)|(e))/g) {
if ($1) {
print $1, "\n";
}
elsif ($2) {
print $2, "\n";
}
elsif ($3) {
print $3, "\n";
}
elsif ($4) {
print $4, "\n";
}
else {
warn;
}
}

2009年6月21日日曜日

「サーバを箱から出してセットアップして使えるようにするまでをやる会」を開催した。

NTT-X Storeで安売りしていたExpress 5800 110Geを先日衝動買いしたので、セットアップする会を開催してみた。

http://atnd.org/events/826

atndとTwitterだけでゆるりと募集してみたところ、意外と反応があり、最終的に7人の方にお越しいただく事ができた。
今回は普段あまり触れない、いわゆる「箱もの」サーバに手を入れてセットアップしてみるまでをやった。

今回は思いつきで開催したにも関わらず、cesareさんとの新たな出会いもあったので、自分が思った以上に収穫があった。

細かい話は写真を誰かがUPしてくださると思うのでそちらを待ちつつ、110GeをCentOSで使うときの問題なんかをまとめておきたい。