Xenの仮想サーバでclockを設定

VPSのXenの仮想サーバで時刻がずれていた。
ntpdで設定されるようにしているが、ずれたまま。
DomUの時刻は、Dom0からのみ更新できるというXenの仕様によるものらしい。
検閲Tech: XenのDomUでNTPを使う
ということは、Dom0の時刻がずれているのか。

DomUでNTPを使って時刻が設定できるようにした。

# echo 1 > /proc/sys/xen/independent_wallclock

/etc/sysctl.conf

xen.independent_wallclock = 1

ntpdをセットアップ。

$ sudo yum install ntp
$ sudo /sbin/chkconfig ntpd on
$ sudo /etc/init.d/ntpd start

ntpdが時刻を同期する様子は以下で確認できる。

# ntpq -p

時刻が大幅にずれている場合はntpdでは時刻が補正されないので、ntpdateで時刻を合わせておく。

# /etc/init.d/ntpd stop
# ntpdate <ntpサーバ>
# /etc/init.d/ntpd start

ただし注意!

時刻が戻るとdovecotがダウンした。dovecotの仕様らしい。

/var/log/maillog

Feb 23 19:40:48 mail dovecot: Time just moved backwards by 105 seconds. This might cause a lot of problems, so I'll just kill myself now. http://wiki.dovecot.org/TimeMovedBackwards

dovecotのリスタートが必要だった。
この現象は、Dom0の時刻がずれている限り、DomUを再起動するたびに起きてしまう。
つまり、DomUを再起動したら、dovecotを再起動しないといけない。

TextMateで全角スペースや行末のスペースをハイライト

TextMateのBundleをあまりよく分かっていない。(分かろうともしていない)
TextMateで全角スペースや行末のスペースをハイライトしたいとき、セットアップのたびにいつも苦労するので、メモしておく。
Bundles -> Bundle Editor -> Edit Languages... で、各languageに下記のように追加。

Ruby

トップレベルブロックの patterns = () の中。

{
	...
	patterns = (
		...
		{	name = 'invalid.trailing-whitespace';
			match = '\s+$';
		},
		{	name = 'invalid.zenkaku-whitespace';
			match = ' ';
		},
		...

PHP

トップレベルと
repository > language ブロックの patterns = () の中。

{
	...
	patterns = (
		...
		{	name = 'invalid.trailing-whitespace';
			match = '\s+$';
		},
		{	name = 'invalid.zenkaku-whitespace';
			match = ' ';
		},
	);
	repository = {
		language = {
			patterns = (
				...
				{	name = 'invalid.trailing-whitespace';
					match = '\s+$';
				},
				{	name = 'invalid.zenkaku-whitespace';
					match = ' ';
				},
			);
		};

HTML

repository ブロックの中。

	repository = {
		...
		zenkaku-whitespace = {
			patterns = (
				{	name = 'invalid.zenkaku-whitespace';
					match = '( )';
				},
			);
		};
	};
}

patterns()の中。

{
	...
	patterns = (
		{	include = '#zenkaku-whitespace'; },
		

repository > php ブロックの中。

	repository = {
		php = {
			begin = '(?=(^\s*)?<\?)';
			end = '(?!(^\s*)?<\?)';
			patterns = ( 
				{ include = 'source.php'; },
				{ include = '#zenkaku-whitespace'; },
			);
		};

GDBでポインタを配列として表示する

配列はprintコマンド(p)で参照できるが、配列を引数で受け取った場合などポインタになっている場合は、@演算子を用いるとうまく表示できる。
@演算子は、左項をアドレスとみなし、左項の型のデータを右項の数だけ配列のように表示する。

(gdb) list
34
35	void func(int v[], int len)
36	{
(gdb) p v[0] @ len
$1 = {4470, 5197, 2482, 1016, 4154, 9986, 8313, 6873, 8517, 5857, 9019, 8002, 349, 9817, 365, 1018, 2269, 9759, 7092, 8674, 4902, 3890, 9746, 7668, 792, 3842, 4053, 6422, 630, 4880, 9996, 7164, 8392, 8469, 2959, 8380, 6533, 1795, 4296, 9964, 8259, 7474, 72, 2948, 3681, 501, 3994, 508, 9544, 941, 8054, 2186, 7418, 8684, 3224, 7322, 3822, 5022, 3085, 8341, 2296, 4073, 1034, 9839, 7067, 1197, 739, 7028, 2809, 6610, 8633, 483, 3017, 9634, 4758, 8101, 7604, 4018, 2174, 5014, 6600, 3754, 2854, 4798, 3921, 2124, 9889, 1147, 2409, 6105, 224, 6973, 5937, 2953, 8614, 9101, 3399, 8431, 2226, 3548}
(gdb) p *v @ len
$2 = {4470, 5197, 2482, 1016, 4154, 9986, 8313, 6873, 8517, 5857, 9019, 8002, 349, 9817, 365, 1018, 2269, 9759, 7092, 8674, 4902, 3890, 9746, 7668, 792, 3842, 4053, 6422, 630, 4880, 9996, 7164, 8392, 8469, 2959, 8380, 6533, 1795, 4296, 9964, 8259, 7474, 72, 2948, 3681, 501, 3994, 508, 9544, 941, 8054, 2186, 7418, 8684, 3224, 7322, 3822, 5022, 3085, 8341, 2296, 4073, 1034, 9839, 7067, 1197, 739, 7028, 2809, 6610, 8633, 483, 3017, 9634, 4758, 8101, 7604, 4018, 2174, 5014, 6600, 3754, 2854, 4798, 3921, 2124, 9889, 1147, 2409, 6105, 224, 6973, 5937, 2953, 8614, 9101, 3399, 8431, 2226, 3548}

Source: Arrays - Debugging with GDB