2008/12/23

C言語: ファイルサイズの取得

C言語の標準関数では直接ファイルサイズを取得する関数が無い.
そこで,fseekとfgetposを使ってファイルポインタの位置を調べることで
間接的にファイルサイズを取得するそうな.
fpos_t fpos;
FILE *fp = fopen(fname, "rb");

fseek(fp, 0, SEEK_END);
fgetpos(fp, &fpos);
fclose(fp);

fpos.__pos; // これがファイルサイズ


// Reference
ファイルサイズの取得方法
半年くらい前にはまったこと
標準C言語関数

2008/12/20

Linux Command: eog

eogはGnome標準の画像ビューア.
コマンドラインから画像を確認したい際に使う.

# eog *.png


[Reference]
Desktop Linux Memo - ビューア(画像・動画・文書等)

2008/12/15

likely / unlikely

likely / unlikelyマクロはコンパイラに分岐予測のヒントを与える.
分岐予測ミスによる投機実行ペナルティを減らすために使う.

プログラムのアルゴリズムには影響を与えないため,ソースを読む際には無視して良い.



// Example
int i = 0;
while (1) {
 i++;
 if (unlikely(i > 100))
  break;
}
上記の例では,ループを抜ける条件式の
if ( unlikely(i > 100) )
が成り立つのは,101回の比較の中で1回のみである. よって,この場合はunlikelyがあった方がコンパイラは 最適化されたコードを生成する.はず.


// Reference
likely()-linux2.6 - LinuxKernelHackJapan

2008/12/14

Intel CPU: Fixed Performance Counter (FPC)

Fixed Performance Counter(FPC) // 勝手な命名
は固定のパフォーマンスイベントをカウントするMSR.
最大で3つで,CPUがいくつサポートしているかは,以前のエントリ
パフォーマンスカウンタの情報を表示
の "Number of fixed-function PCs" で得られる.

以下FPCの詳細.

[IA32_FIXED_CTR0(MSR_PERF_FIXED_CTR0)]
Register Address: 0x309
Performance Event: Inst_Retired.Any
実行した命令数をカウントする.

[IA32_FIXED_CTR1(MSR_PERF_FIXED_CTR1)]
Register Address: 0x30A
Performance Event: CPU_CLK_Unhalted.Core
CPUがHalt状態でない時のCPUサイクル数をカウントする.

[IA32_FIXED_CTR2(MSR_PERF_FIXED_CTR2)]
Register Address: 0x30B
Performance Event: CPU_CLK_Unhalted.Ref
CPUがHalt状態でない時のバスクロック数をカウントする.


【使用時の注意】
FPCはデフォルトではdisableになっている.
enableにするには,FPCの動作をコントロールするMSRである
IA32_FIXED_CTR_CTL(MSR_PERF_FIXED_CTR_CTL)
Register Address: 0x3BD
の値を変更する必要がある.
IA32_FIXED_CTR_CTLは,3つのFPCのenable/disableの設定を行う.


[bit fields]
0-4: IA32_FIXED_CTR0の設定
0: EN0_OS(CPL=0の時にenable)
1: EN0_Usr(CPL>0の時にenable)
2: Reserved
3: EN0_PMI(カウンタがオーバーフローした時にPMIを発生)
4-7: IA32_FIXED_CTR1の設定,0-3と同様
8-11: IA32_FIXED_CTR2の設定,0-3と同様


[Reference]
IntelR 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: APPENDIX B
MODEL-SPECIFIC REGISTERS (MSRS)

__attribute__

gccの拡張機能.
関数,変数,型に属性を付加する.

[section]
__attribute__((section("name")))
関数または変数が格納されるセクションを明示的に指定するために使用する.


【参考】
yunoの雑記帳 - gcc-attribute
__attribute__で設定できる属性一覧

Linux カーネルで使われている gcc の拡張機能

Xenソースコード英単語

Linuxカーネルソースコードが元になっているが,細部が結構異なっている.
コメントとかで使われている単語の意味をメモ・

【Xen単語】
crank: クランクを回す,不安定な
expiry: 満期,終了
idler: 怠け者
tickle: 満足させる

C言語: マクロ展開マクロ

Xenのコードを眺めていたらマクロを展開するためのマクロを見つけたのでメモメモ.
下記のようなマクロが定義されているものとする.

#define EXPAND_MACRO(_MACRO) \
 _MACRO(a) \
 _MACRO(b) \

#define DEFINE(_X) int _X;
#define FUNC(_X) do { func(_X); } while (0);

このとき,
EXPAND_MACRO(DEFINE);
は下記のように展開される.
int a;
int b;

同様に
EXPAND_MACRO(FUNC);
は下記のように展開される.
func(a);
func(b);

便利そうな気もするけど多用すると混乱しそう.

local_irq_save / local_irq_restore

[local_irq_save]
この関数を呼び出したCPUの割り込み禁止/許可状態(EFLAGSレジスタ)を引数で与えた値に保存する.

[local_irq_restore]
この関数を呼び出したCPUの割り込み禁止/許可状態(EFLAGSレジスタ)を引数で与えた値に設定する.

// Reference
local_irq_save()-linux2.6 - LinuxKernelHackJapan
local_irq_restore()-linux2.6 - LinuxKernelHackJapan
spin_lock_irqsave()-linux2.6 - LinuxKernelHackJapan
_spin_lock_irqsave()-linux2.6 - LinuxKernelHackJapan
EFLAGS - 通信用語の基礎知識

BUG

[BUG]
(i386の場合)ud2命令を実行し,未定義命令例外を発生させる.

[BUG_ON]
真ならBUGを呼ぶ(パニックで落ちる).

【参考】
Omicron Linux-カーネルハッキング入門
アジアのペンギン アセンブラの勉強方法 3

__alignof__

__alignof__はgccのCコンパイラの拡張機能.
あるオブジェクトがどのようにアライメントされるか,
または,ある型が通常必要とする最小アライメント値を調べることができる.

[Example]
__alignof__(int) == 4
__alignof__(double) == 8

struct test { int x; char y; }  t;
__alignof__(t) == 4;

[Reference]
Using and Porting GNU CC - C 言語ファミリに対する拡張

2008/12/11

Intel CPU: パフォーマンスイベントUmask

モニタリングするパフォーマンスイベントのUmaskでTable 18-11, 18-13, 18-14を見るべし.
という指示がちょくちょくあったのでメモ.
intel manual Vol. 3 capter 18 p59-60 より,


[Table 18-11. Core Specificity Encoding]
Bit 15:14
11B All cores
10B Reserved
01B This core
00B Reserved

Some microarchitectural conditions allow detection specificity only at the boundary of physical processors. Some bus events belong to this category, providing specificity between the originating physical processor (a bus agent) versus other agents on the bus. Sub-field encoding for agent specificity is shown in Table 18-12.


[Table 18-12. Agent Specificity Encoding]
Bit 13
0 This agent
1 Include all agents

Some microarchitectural conditions are detectable only from the originating core. In such cases, unit mask does not support core-specificity or agent-specificity encodings. These are referred to as core-only conditions. Some microarchitectural conditions allow detection specificity that includes or excludes the action of hardware prefetches. A two-bit encoding may be supported to qualify hardware prefetch actions. Typically, this applies only to some L2 or bus events. The sub-field encoding for hardware prefetch qualification is shown in Table 18-13.

[Table 18-13. HW Prefetch Qualification Encoding]
Bit 13:12
11B All inclusive
10B Reserved
01B Hardware prefetch only
00B Exclude hardware prefetch

[Table 18-14. MESI Qualification Definitions]
Bit Position 11:8
Bit 11 Counts modified state
Bit 10 Counts exclusive state
Bit 9 Counts shared state
Bit 8 Counts Invalid state

// よく使いそうな16進マスク
//--------------------------------------------------
[Table 18-11. Core Specificity Encoding]
0xc000: All cores
0x4000: This core

[Table 18-12. Agent Specificity Encoding]
0x0000 This agent
0x2000 Include all agents

[Table 18-13. HW Prefetch Qualification Encoding]
0x3000: All inclusive
0x1000: Hardware prefetch only

[Table 18-14. MESI Qualification Definitions]
0x0f00: 全部


// Reference
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: APPENDIX A
PERFORMANCE-MONITORING EVENTS

RDMSR / WRMSR

// RDMSR
ECXで指定したアドレスのMSRを読み込む.
読み込んだデータはEDX:EAXに格納される.
特権レベル0でのみ実行可能.
(ex)
unsigned low, high;
asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr_addr));

// WRMSR
ECXで指定したアドレスのMSRにEDX:EAXを書き込む.
特権レベル0でのみ実行可能.
(ex)
asm volatile("wrmsr" : : "c"(msr_addr), "=a"(low), "=d"(high) : "memory");

// Reference
wrmsr()/linux2.6 - LinuxKernelHackJapan
rdmsr()/linux2.6 - LinuxKernelHackJapan

Linuxカーネルプログラミングメモ

・浮動小数点は使えない
・使えないC言語標準関数が結構ある(文字列関係とか)
・普通のプログラムなら警告で済むものもコンパイルエラーになる(未使用な変数がある,等)
・関数宣言でint test(void)のように省略しないで宣言する必要がある
・int test()はコンパイルエラーになる.

2008/12/10

C言語: ハードウェアパフォーマンスカウンタの情報を表示

CPUIDでハードウェアパフォーマンスカウンタの情報を表示するプログラム.
#include 
#include 

#define BIT(x, bit) (((x) >> (bit)) & 0x00000001)

int main()
{
  unsigned int a, b, c, d;
  unsigned char eax_07_00, eax_15_08, eax_23_16, eax_31_24;
  unsigned char edx_04_00, edx_12_05;

  asm volatile ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "a"(0x0a));

  printf("CPUID(EAX=0AH): Architectural Performance Monitoring\n");

  eax_07_00 = (unsigned char)(a & 0xff);
  eax_15_08 = (unsigned char)((a >> 8) & 0xff);
  eax_23_16 = (unsigned char)((a >> 16) & 0xff);
  eax_31_24 = (unsigned char)((a >> 24) & 0xff);
  printf(" Version ID of architectural PM: %d\n", eax_07_00);
  printf(" Number of general-purpose PMC per logical processor: %d\n", eax_15_08);
  printf(" Bit width of general-purpose PMC: %d\n", eax_23_16);
  printf(" Length of EBX bit vector: %d\n", eax_31_24);
  printf("\n");
 
  printf(" Core cycle event not available: %d\n", BIT(b, 0));
  printf(" Instruction retired event not available: %d\n", BIT(b, 1));
  printf(" Reference cycles event not available: %d\n", BIT(b, 2));
  printf(" Last-level cache reference event not available: %d\n", BIT(b, 3));
  printf(" Last-level cache misses event not available: %d\n", BIT(b, 4));
  printf(" Branch instrunction retired event not available: %d\n", BIT(b, 5));
  printf(" Branch mispredict retired event not available: %d\n", BIT(b, 6));
  printf("\n");

  if (eax_07_00 > 1) {
    edx_04_00 = (unsigned char)(d & 0x1f);
    edx_12_05 = (unsigned char)((d >> 5) & 0xff);
    printf(" Number of fixed-function PCs: %d\n", edx_04_00);
    printf(" Bit width of fixed-function PCs: %d\n", edx_12_05);
  }

  return 0;
}

2008/12/09

Linux2.6スケジューラの特徴

・SMPシステムに対応
・O(1)のスケジューラ
 ・(タスクの数が増えても,スケジューリングのオーバーヘッドは不変)
・マルチコアの場合でも,CPU毎にタスクのrunqueueを持つことで,タスクを特定のCPUに関連付けできる
・カーネルモードではプリエンプトされない(カーネル内部の処理を単純化するため)

スケジューラのソースは
/usr/src/linux/kernel/sched.c

[Reference]
Linux スケジューラーの内側
ITmedia エンタープライズ:プロセススケジューラの実装――プロセススケジューリング(その4)
Linuxカーネルの基本機能 第3回 プロセス・スケジューリング
Linuxのプロセス管理

gccインラインアセンブラ

gccのasm命令を使うことで,Cの中でインラインアセンブラを使える.

【構文】
asm volatile ("アセンブラテンプレート"
: "出力オペランド"
: "入力オペランド"
: "アセンブラの実行で変更されてしまうもの");

[アセンブラテンプレート]
ニーモニックを指定する.
"cpuid"とか"mov"とか.
複数指定することもできる.

[出力オペランド]
下記のように指定する
"=a" (出力先変数), "=b" (出力先変数)
ex)
"=a (buf)" はeaxレジスタの内容を変数bufに出力することを示す.

[入力オペランド]
"a" (入力)のように指定する
"0"(入力)と指定すると,1番目に指定した出力オペランドの制約条件を流用する.
ex)
"a" (0) はEAXレジスタに入力として0を与えることを示す.

【オペランドの制約条件】
"=" asmが終わった後に変更された結果が指定された変数に代入される
"a" eax
"b" ebx
"c" ecx
"d" edx
"A" edx:eax(上位bitにedx,下位bitにeax)
"g" gccが適当なレジスタに割り当てる

【例】
unsigned int a, b, c, d;
asm volatile ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "a"(0));
// 変数a,b,c,dにcpuidで取得した情報が格納される


【参考】
GCC-インラインアセンブリ-HOWTO (日本語訳)
gccのx86インラインアセンブリに関して

Binary Hacks ―ハッカー秘伝のテクニック100選

2008/12/01

Intel CPU: Hardware Performance Counter(HPC)

intel CPUのハードウェアパフォーマンスカウンタ(HPC)は
自分で監視するイベントを指定できる汎用的なカウンタと
固定のイベントを監視する固定カウンタの二種類がある.

Core 2では汎用カウンタは2個,固定カウンタは3個ある.
固定カウンタで監視するイベントは
Inst_Retired.Any: 完了した命令の数
CPU_CLK_Unhalted.Core: HLT状態でないCPUのクロックサイクル数
CPU_CLK_Unhalted.Ref: 上記のreference cycle版

【用語】
CCCR: Counter Configuration ContRol
ESCRで選択されたイベントをフィルタリングしてカウントする場合に使用する.
CPL: Current Privilege Level
ESCR: Event Selection ContRol
LLC: Last Level Cache
MSR: Model Specific Register
PEBS: Precise Event-Based Sampling
PMC: PerforMance Counter
PMI: Performance Monitoring Interrupt

【命令】
(RD/WR)MSR: MSRをRead/Writeする命令
RDPMC: PMCをReadする命令

【制限】
MSRをRead/Writeする命令を実行できるのは特権モード(ring 0)のみ.
アプリケーション(ring 3)からはPMCのReadのみ可能.

【イベント】
[リタイアイベント]
リタイアしたイベントとは,マシンステートを確定した命令によるイベントのみを含む.

[非リタイアイベント]
非リタイアイベントは,マイクロアーキテクチャーにおける
アウトオブオーダーの推測による流れで発生する.

[L2キャッシュイベント]
・MEM_LOAD_RETIRED.L2_LINE_MISS
L2キャッシュのミスで発生したロード数

・MEM_LOAD_RETIRED.L2_MISS


【参考資料】
インテルCoreマイクロアーキテクチャー・プロセッサーのパフォーマンス・カウンター
MEM_LOAD_RETIRED.L2_LINE_MISS
MEM_LOAD_RETIRED.L2_MISS

rdmsr - 通信用語の基礎知識
CPU-CPUID-MSR - SyncHack
CPU-MSR - SyncHack
linux2.6-include-asm-i386-msr.h - LinuxKernelHackJapan

Intel® 64 and IA-32 Architectures Software Developer's Manuals

2008/11/30

CPUID

【命令】
[引数]
EAX:

[返値]
EAX, EBX, ECX, EDX:


引数の値によって取得できるCPU情報が変わる.
詳しくはintel manual vol.2AのCPUIDの項を参照.


【補足】
linuxではCPUIDから抽出した情報を出力するcpuinfoがある.
# cat /proc/cpuinfo


【例】
unsigned int a, b, c, d;
asm volatile ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "a"(0));


【参考資料】
Intel® 64 and IA-32 Architectures Software Developer's Manuals
sandpile.org -- IA-32 architecture -- CPUID
LHR-proc-cpuinfo - SyncHack
/proc/cpuinfoの中身 [備忘録]
CPUID - Wikipedia

2008/11/29

dbench

[Install]
dbenchのオフィシャルサイト
http://samba.org/ftp/tridge/dbench/
http://samba.org/ftp/tridge/dbench/dbench-4.0.tar.gz

からソースを持ってくる.

# ./autogen.sh
# ./configure
# make
# make install

[ドメインUでのインストール]
# yum groupinstall development-tools -y
popt.hが足りない.と怒られたので
# yum install popt-devel -y

[How to use]
# dbench [Number of Processes]

[Reference]
つれづれ ベンチマークツールdbenchを使用したディスク性能の評価

sysbench

sysbenchはCPU,  file IO, Memory, OLTPをテストできる包括的なベンチマーク.

// Install
sysbenchのソースを下記URLから取得する.
http://sourceforge.net/projects/sysbench/

解凍してできた sysbench-[version] ディレクトリ中で次のコマンドを実行する.

このとき,mysqlを使わない(OLTPベンチを使わない)場合は"--without-mysql"オプションを付ける.


# ./configure

コンパイル,インストール
# make
# make install


// How to use
# sysbench [common-options] --test=name [test-options] command
各項目の詳細は下記

[common-options]
全テスト共通のオプションの指定.
--num-threads: The total number of worker threads to create (default=1)
--max-requests: Limit for total number of requests. 0 means unlimited (default=10000)
--max-time: Limit for total execution time in seconds. 0 (default) means unlimited

[--test]
ベンチマークする項目の選択,下記の4種類を指定できる.
cpu
memory
fileio
oltp

[test-options]
各ベンチマーク項目専用のオプション.
・memory
--memory-total-size: Total size of data to transfer(default = 100G)

・fileio
--file-test-mode={seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}

[command]
prepare(fileio, oltpのみ): ベンチマークの準備(テスト用ファイルの作成等)
run: ベンチマークの実行
clean(fileio, oltpのみ): prepareで生成されたファイルの削除


// Reference
SysBench manual
MySQL-ベンチマーク

2008/11/27

シェルスクリプトの基本

シェルスクリプトの実行
シェルスクリプトを実行する際には,下記のようにシェルを指定して実行する(例ではbashを指定).
$ bash [script file]

スクリプトファイルの先頭の行に
#!/bin/bash

を記述することでシェルを指定することができる.


シェルスクリプトに実行権限を与えるには,下記のコマンドを実行する.
$ chmod u+x [script file]

実行権限を与えたシェルスクリプトファイルは下記コマンドで実行できる(ファイルはカレントディレクトリにあるものとする).

$ ./[script file]



シェルスクリプト中の変数
シェルスクリプト内での変数宣言は下記のように型を指定しない.
var=xxx
このとき,代入の前後にスペースを入れてはいけない.

変数をスクリプト内で使用するには変数名の前に'$'を付ける.
(example)
var=1
echo $var


引数の利用
シェル実行時の引数をスクリプト内で利用するには $n を使う.
$0: スクリプト名
$i: i番目の引数

(example)
引数で指定した名前のディレクトリを生成し,生成したディレクトリをカレントディレクトリとするシェルスクリプトを生成する.
test.sh を作成し,下記の内容を記述する.

#!/bin/bash
mkdir $1
cd $1

シェルスクリプトに実行権限を与える.
$ chmod u+x test.sh

シェルスクリプトを実行する.
$ ./test.sh hoge
ディレクトリhogeが作成され,hogeに移動する.


Reference
bashで始めるシェルスクリプト基礎の基礎

jiffies: タイマ割り込みカウンタ

jiffiesはカーネル内での時間経過の管理に使われる変数.
Linuxカーネルが起動してから,定期的に発生するタイマ割り込みが発生する度にインクリメントされる.

タイマ割り込みの頻度は、"HZ" として定数で定義されている.
linux 2.4カーネルでは100(10ms間隔でタイマ割り込みが発生)
linux 2.6カーネルでは1000(1ms間隔でタイマ割り込みが発生)
つまり,HZの値はタイマの精度を表していると言える.


// Reference
jiffies
路地裏 ソース解読研究所 時間は無限
Linux 2.6へ

2008/11/26

make

【makeコマンドオプション】
[install]
コンパイルしたファイルを任意のディレクトリにコピーする.

[oldconfig]
ディレクトリにある.configからデータを とって、それ以外の部分だけ聞いてくる.
他のディレクトリの.configをコピーしてから 上記を実行すると古い設定が有効になる.

[menuconfig]
コンフィグメニューを表示する.変更は.configに反映される.

[-j*]
マルチコアの場合は,このオプションを付けると,
ジョブが並列化されて,コンパイルが速くなる.
*はスレッド数を入れる.コア数と同じくらいの値がよさげ.


【カーネルコンパイルオプション】
[modules]
モジュールを作成する.

[modules_install]
作成されたモジュールを /lib/modules/[kernel version]内のサブディレクトリにコピーする.


【※捕捉 コンフィグ】
.configの各コンフィグメニューの設定の値の意味は下記の通り.
y: カーネルに静的に取り込む
m: カーネルモジュールとして設定する
n: 設定を無効化
?: Helpを見る


【参考資料】
Linux kernelの再構築
make の -j オプションの良値
Linux Module-HOWTO モジュールユーティリティ
Linuxでのカーネル再構築方法

マルチプロセッサー環境でKernelをビルドする

2008/11/25

Xenインストール(仮): ドメインUネットワーク設定

先輩によるとゲストUのネットワークが接続できなかった理由は
iptableが自分宛ではないパケットを廃棄しているために
ゲストUへのパケットをフォワーディングしてなかったっぽい.

[iptablesの状態表示]
# chkconfig --list | grep iptables

[ドメイン0とドメインUのiptablesをoffにする]
# chkconfig iptables off
# service iptables restart

※リスタートが失敗する場合は再起動

[その他]
当然ながらドメイン0のネットワークが正しく動いてないと,
ドメインUのネットワークも動かない.


【参考資料】
第3回 Xenによる仮想環境のネットワーク構築:ITpro

Xenoprof: Xenのパフォーマンスカウンタ

OProfile はカーネルも含めたシステム全体のプロファイリングを行うもの.
XenoprofはOProfileの拡張.

xenoprofを使うためには圧縮されていない,XenとLinuxのカーネルイメージが必要
(/boot/xen-syms-[version]とXenのコンパイルツリーのトップにあるvmlinux)

vmlinuxとvmlinuzは別物.
vmlinuzはvmlinuxを圧縮したもの?
展開の仕方は不明.

// OProfileを有効にする
# make menuconfig


Instrumentation Support --->
[*] Profiling support (EXPERIMENTAL)
OProfile system profiling (EXPERIMENTAL)

上記がチェックされていることを確認し,再コンパイル.

[opcontrol]
Active domains

--passive-domains
データを取るドメインUのIDを指定する.


[opreport]
opreport event:[EVENT]
指定したイベントのプロファイルのみ表示する.

opreport cpu:[number]
指定したCPUのプロファイルのみ表示する.


// Reference
[OProfile]
OProfileとは
Benchmark-OProfile - PukiWiki
Omicron OProfile
OProfileを使ってCPUプロファイリングをとる

OProfile documentation
OProfile manual

[xenoprof]
Opensource.hp.com - Welcome

[xenperf]
Linux Virtualization Guides - Xen 3.0 User Guide - Xen Build Options
Xen/Xen Tools/xenperf - PukiWiki

http://prdownloads.sourceforge.net/oprofile/oprofile-0.9.4.tar.gz

Linux Command: パスワードの変更

Linuxでログイン中のパスワードを変更するには下記コマンドを実行する.

$ passwd
(旧パスワードを1回,新パスワードを2回入力)

特権ユーザが任意のユーザのパスワードを変更するには下記コマンドを実行する.

# passwd USER_NAME

パスワードは
/etc/passwd
/etc/shadow
あたりに保存されている.


// Reference
passwd ユーザのパスワードを変更する - UNIXコマンド辞典:CodeZine(コードジン)
【 passwd 】 ユーザーのパスワードを変更する - Linuxコマンド集:ITpro

2008/11/24

起動ログ

起動時のログ(エラー含む)はだいたい

/var/log/

に出力される.(dmesgとか)

Linux: 上書き確認しないファイルコピー

デフォルトではcpコマンドは必ず上書き確認をしてくる.
これは,下記のようにエイリアスによってオプションが指定されているため.
alias cp='cp -i'
多数のファイルをまとめてコピーする際等に,上書き確認を抑制するには下記のようにcpコマンドを実行する.

$ /bin/cp (src) (dest)

[cpのオプション]
-a: コピー先で元のファイルの構成と属性を保持する
-r: 再帰的にコピーする
-v: コピーするファイル名を出力する
-i: 上書き確認する

[Reference]
Manpage of CP

2008/11/23

Linuxの警告音を無効化

pcspkr(ビープ音のドライバ)が無ければビープ音は鳴らなくなる.
一時的に無効化するには下記のコマンドを実行する.

# modprobe -r pcspkr

-r はモジュールの削除.

Linux起動時にpcspkrが読み込まれなくなるようにするには下記コマンドを実行する.

# echo blacklist pcspkr >> /etc/modprobe.d/blacklist


※追記
Fedoraではシステムメニューの
[設定] > [システム] > [ハードウェア] > [サウンド] > [ビープ音]
の"システムのビープ音を有効にする"のチェックを外すことでも無効化できる.


// Reference
Linuxでビープ音を無効にする

Xen: VMの管理コマンド

動作中のVM一覧の表示
# xm list

VMの設定ファイルに従ってドメインを作成
# xm create [VM設定ファイル]-c: 作ったVMのコンソールを起動

VMのシャットダウン(-eで全VM対象)# xm shutdown [ドメインID or ドメイン名]

VMの強制終了(-eで全VM対象)
# xm destroy

動作中のVMのコンソールを使う
# xm console [ドメインID or ドメイン名 or コンソール番号]
動作中のVMのVCPU一覧の表示
# xm vcpu-list

CPU Affinityを設定する
# xm vcpu-pin [ドメインID vcpu pcpu]指定ドメインのVCPUを,指定の物理CPUでのみ動作させる.
全てのCPUを指定するときは,"all"を指定する.
カンマで区切ることで複数のCPUを指定することもできる.

e.g.) domUのvcpu 0をpcpu 0 or 1で動かす
# xm vcpu-pin domU 0 0,1

e.g.) domUの全VCPUを任意の物理CPUで動かす
# xm vcpu-pin domU all all

VMに割り当てるメモリを変更する.
# xm mem-set ドメインID メモリ容量(MB)

ログの表示
# xm dmesg

【参考】
仮想化技術の大本命「Xen」を使ってみよう ~ Xen対応カスタムカーネル構築編 ~
第4回 動的に仮想マシンを移動し,可用性を向上:ITpro
xmコマンドのオプション
Manpage of DMESG
@IT:実践! Xenで実現するサーバ統合(1)
xm(1): Xen management user interface - Linux man page

2008/11/22

起動スクリプトの管理

chkconfigコマンドで起動スクリプトの管理を行う

【例】
[スクリプト一覧]
# chkconfig --list

[起動スクリプトのon/off]
# chkconfig [service] on/off


【参考】
chkconfigコマンド

2008/11/21

ファイル内の文字列の置換

# sed -i 's/検索文字列/置換文字列/g' 対象ファイル名
または
# perl -p -i -e 's/検索文字列/置換文字列/g' 対象ファイル名


【参考】
【 sed 】 文字列の置換,行の削除を行う
sed - ストリーミングエディタ
複数ファイル内の文字列を置換して上書き保存する

Linux: SELinuxの有効/無効化

SELinuxの有効/無効の設定変更は下記の手順で行う.

[SELinuxの状態確認]
# getenforce

Enforcing: 有効
Permissive: 無効

[SELinuxの有効/無効化]
# setenforce 0(無効化)/1(有効化)

[起動時のSELinuxの有効/無効化]
/etc/sysconfig/selinux
を変更する
SELINUX=enforcing
のenforcingをdisabledにすると無効化できる.

2008/11/19

Xenインストール2.5:ドメイン0ネットワーク設定

Xenのドメイン0が起動するようになったものの,
ドメイン0でネットワークに繋がらない状態になってしまいました.

先輩によると,原因はネットワークドライバが古かったことのようです.
intelから新しいドライバをダウンロード,インストールすることで解決した模様.
※追記:再インストールしてたらやり方がわかりました


[※補足:ネットワークインターフェースの型番を調べる方法]
ネットワーク設定ファイル
/etc/sysconfig/network-script/ifcfg-eth0
にネットワークコントローラの型番(今回は82566DM-2)が書いてある.
intelのドライバダウンロードページから型番検索で
対応するドライバ(e1000e-0.4.1.12.tar.gz)が見つかる.


[ドライバのインストール]
ドライバ解凍後にできるe1000e-0.4.1.12/srcで

# make

# make install

これだけだと"eth0が見つかりません"とかエラーメッセージが出る.
lsmodしてもネットワークドライバ(e1000e)が見つからない.
make installだけだとinsmodされないらしく,insmodしたらネットワークにつながった.
システム起動時にドライバを読み込むようにするには

/etc/modprobe.conf

を修正する必要がある.

alias eth0 e1000e

を追加すると起動時にドライバを読み込んでくれる.

※追記
# modprobe e1000e
で上記の操作をしてくれる?


[※ネットワーク設定ファイルの場所]
/etc/sysconfig/network-scripts/ifcfg-eth0


[ネットワークサービスのリスタートコマンド]
# service network restart

[起動スクリプトでネットワークがonになっているかを確認]
# chkconfig --list network

onになっていなければ

# chkconfig network on
[ネットワークインターフェースが認識されないとき]
# service network restart# xend restart

それでもだめなら再起動


[※追記]
カーネルを更新するとドライバもmakeとmake installし直す必要があるっぽい.


【参考】
Linux技術トレーニング 基本管理コース II 第1章 カーネル

2008/11/18

Linux Command: uname

unameコマンドはシステム情報を表示する.

[Example]
$ uname -r
2..18.8-xen

[Reference]
【 uname 】 システム情報の表示

Linuxでのネットワーク設定の確認

現在のネットワーク設定を表示する.
Windowsではipconfigコマンドを使うが,Linuxではifconfigコマンドを使う.

# ifconfig -a

はWindowsのipconfig /allにあたる.

2008/11/16

RPM関連コマンド

[インストールされているRPMパッケージを探す]
# rpm -qa | grep [package]

[RPMパッケージの情報を表示する]
# rpm -qi [package]

[インストール]
# rpm -ivh [package]

[アンインストール]
# rpm -e [package]
--nodepsオプションを付けると依存関係のチェックをしないで強制的にアンインストールする.

[RPMファイルをcpioファイルに変換]
# rpm2cpio [package]

RPMファイルに含まれるファイルの一覧表示
# rpm2cpio [package] | cpio --list

RPMファイルに含まれるファイルの展開
# rpm2cpio [package] | cpio --id


【参考】
RPMパッケージをインストール/アンインストールするには
RPMパッケージの情報を調べるには
RPMパッケージからファイルを取り出すには
RPM コマンドの使い方

システム起動時にマウントされるデバイスの設定

システム起動時にマウントされるデバイスは、/etc/fstabで設定されている.

【参考】
/etc/fstabに記述されている数字の意味

depmod

カーネルモジュールの依存リスト(modules.dep)とマップファイルを作成する.

# depmod [version]

を実行すると /lib/modules/[version] 以下のモジュールの依存リストを
/lib/modules/[version]
に作成する.


// Example
初期RAMディスク(initrd)の生成のためにカーネルモジュール依存リストを利用する.
下記のコマンド例では,depmodコマンドで2.6.18.8-xen カーネルのモジュール依存リストを作成している.


# depmod 2.6.18.8-xen


依存リストを利用するコマンドとしてmkinitrdがある.
下記コマンド例では,上記コマンドで作成したモジュール依存関係を元に,

 /boot 以下に起動ディスクのイメージファイル(.img)を生成する.



# mkinitrd /boot/initrd-2.6.18.8-xen.img 2.6.18.8-xen


// Reference
Manpage of depmod
Linuxカーネルの基本機能 第17回 モジュール機構:ITpro

Linux: ブートローダー

ブートローダの役目は大きく2つ.
・システム電源投入後,HDD上などのファイルシステムに 保存されているカーネルをメモリに読み込むこと
・読み込まれたカーネルにオプションを指定してCPUに実行させること

x86向けパッケージでのFedoraのデフォルトのブートローダーはGRUB(GRand Unified Bootloader).

カーネル起動に関する設定ファイルは
/boot/grub/gurb.conf
/etc/grub.conf/boot
/grub/menu.lst
等複数あるが,ディストリビューションによってファイルの有無が異なるため
/boot/grub/menu.lst
を編集するのが無難.menu.lstは大体どのディストリビューションにもあるらしい.


【設定ファイルの共通設定】
timeout: 起動時のOS選択メニューまでの時間(秒単位)
default: デフォルトで起動するOS(titleの順番に0,1,2…)
hiddenmenu: 入れるとtimeoutで設定した期間後にdefaultで設定したOSが起動する
splashimage: ブートの起動画面の背景画像


【各行先頭の予約語】
title: GRUBのブートメニューで表示される名前
root: (デバイス名,パーティション位置)
kernel: 読み込むカーネルモジュールのパス(/bootからの相対パス)
initrd: 読み込むRAMディスクのパス(/bootからの相対パス)


【オプション】
ro: read only
root: ルートのマウントブロックデバイス
console: コンソールサイズ
rhgb: redhat graphical boot
quiet: 全ての詳細なカーネルメッセージがブート時に抑制されていることを示す


【tips】
"vmlinuz"から始まる名前のファイルはカーネル本体のファイル.
"initrd"から始まる名前のファイルは初期RAMディスクファイル.


【例】


【参考】
GRUBのインストール、基本設定
ブートローダ/カーネル起動/初期ラムディスク展開の比較
GRUB の rhgb quiet って何?

2008/11/14

ちょっと気になる英単語

英語の論文や資料を読んでいるときに
気になった英語の表現・単語などをメモ!

[単語]
tarball: tarファイルそのもの、またはそれを圧縮したものを指す

[熟語]
state of the art: 最先端の
break down: 分類する,分析する

Larrabeeアーキテクチャ

メニーコアになると演算速度よりも,バスの帯域がボトルネックになるそうな.
確かにコア数が増えるほど,コア同士の通信も増えるので納得.

メモリ帯域をセーブするLarrabeeアーキテクチャ

Intel CPU: ターボモード

マルチコアCPUで,あるコアがアイドル状態 or 稼働率が低いとき
チップ全体のTDPで考えると,他のコアに余裕ができる.
TDP的に余裕があるため,アクティブな他のコアをオーバークロックすることができる.
ハードウェアを変更することなく,コアの性能を
最大20%近く引き上げることができるため,注目されている技術だそうな.

[Reference]
Nehalemの性能を引き上げる切り札「ターボモード」

LDAP

Lightweight Directory Access Protocolの略で
ディレクトリデータベースへアクセスするためのプロトコル.
ディレクトリサービスとは、ネットワークを利用する
ユーザ名やマシン名などの様々な情報を管理するためのサービスのこと.

[Reference]
LDAPとは何をするもの?

2008/11/13

Linux Command: initrd

mkinitrdコマンドはinitrdイメージを作成するためのコマンド.

[書式]
mkinitrd [作成されるイメージ] [バージョン]
-v: イメージファイル作成の経過を表示
-f: 既存のイメージファイルの上書き許可
--with: 初期RAMディスクに含めるモジュール?

[例]
# mkinitrd -v -f --with=aacraid --with=sd_mod --with=scsi_mod initrd-2.6.18-xen.img 2.6.18
xenaacraid: sataのモジュール,RAID用?
scsi_mod: scsi機器を使用するためのモジュール
sd_mod: scsiのディスクサポートモジュール


【initrd】
Linuxが起動する際に一時的に利用されるファイルシステムのイメージ.


【参考】
initrd

2008/11/12

Xenインストール2:ドメイン0構築

Xenのインストール.
dom0を構築して起動するまで.


// 初期RAMディスクの作成
depmodで作成したカーネルモジュールの依存関係リストからmkinitrdで,起動用の初期RAMディスクを作成する.

# depmod 2.6.18.8-xen
# mkinitrd -v -f --with=aacraid --with=sd_mod --with=scsi_mod /boot/initrd-2.6.18.8-xen.img 2.6.18.8-xen

モジュールが足りていないためにmkinitrdが失敗する場合はLinuxカーネルからモジュールをコピーする.今回は
/lib/modules/2.6.xxx/kernel/drivers/
から
ata, message, scsi, usb
下にあるモジュールを
/lib/modules/2.6.xx-xen0/kernel/drivers/
にコピーした.

[設定確認(PAEが有効時のみ)]
menuconfigで
Processor type and features -> High Memory Support (4GB) ->
( ) off
( ) 4GB
(X) 64GB

になっていることを確認.


// パッケージ更新
Xenのデーモン(xend等)はpythonで書かれているので,
pythonをインストール/アップデートしておく.


// ブートローダの設定
/boot/grub/menu.lst
に下記を追加してXenを起動するようにする.
menu.lst は grub.conf へのシンボリックリンクになっている.

title Xen 3.3 / XenLinux 2.6.18.8
root (hd0,0)
kernel /xen.gz console=vga
module /vmlinuz-2.6.18.8-xen ro root=/dev/VolGroup00/LogVol00 rhgb console=tty0
module /initrd-2.6.18.8-xen.img

※rootのパスは環境により異なる.この場合はLVMを使っている. /etc/fstab を見ればルートのパスが書いてある.カーネルモジュールの場所が通常のカーネルと同じならroot指定をコピペすればおっけー.XenのREADME通りにパスを設定すると動かないので要注意.
※カーネル,モジュールの指定はパーティションの定義によって異なる./boot が定義されていれば/boot からのパスを書くが,定義されていない場合は /boot を含む絶対パスを書く.
/boot が定義されているかは menu.lst のコメントを見ればわかる.

[捕捉]
FDDが無いときBIOSで有効になっていると,ゲストOS起動中に下記のエラーが出て起動に時間がかかる.
end_request: I/O error, dev fd0, sector 0
よって,FDDが無い場合はBIOSでFDDを無効にしておいた方が良い.



ここで一旦再起動する.



// Xenツール
xenが起動してdom0が立ち上がったものの,xendが起動できない.

下記コマンドを実行してからXenツールをリビルドするとうまくいくよ.
という記事を発見したので早速やってみる.


$ rm -fr /usr/lib/python/xen/
$ rm -fr /usr/lib/python2.5/site-packages/xen/

$ cd [Xenソースを展開したディレクトリ]/xen-[version]/tools
$ make
$ make install


// xendの起動・設定
# xend start
# xm list
# chkconfig xend on

ドメインのリストが出た!!
というわけで,無事にdom0とxendが動きました.めでたしめでたし.
次はdomUを作成して動かします.


// Reference
xen-3.2のインストール手順
Xen3.0環境構築中のエラー
Xen環境作成メモ(その2)

yumの使い方

パッケージのインストール
# yum install (package)

パッケージの検索
# yum search (package)

インストール済みのパッケージのアップデート
# yum update (package)

パッケージのアンインストール
# yum remove (package)

インストール済みパッケージの一覧
# yum list installed

古いカーネルを削除する
# yum install yum-utils
# package-cleanup --oldkernels

[Reference]
@IT:yumコマンドでよく利用するコマンド
古いカーネルを削除するには - @IT

エラーのリダイレクト

端末に色々表示されるとエラーだけ表示したいときもあります.
そんな時はこれ!

[command] 2> [output file name]

リダイレクトの前の'2'が標準エラー出力をリダイレクトする.
ということを示している.

Linux端末の設定変更

Fedora 9のGNOME端末の設定を変更する方法.

スクロール行数の設定変更をしてみる.
[端末のメニュー] > [編集] > [現在のプロファイル] > [スクロール]
から[スクロールバックのサイズ]を増やせばオッケー.

サイズを増やすとメモリを食うみたいなので,サイズは適宜変更しましょう.

2008/11/04

Windows CEにおける文字コード

Windows CEでのプログラミング中に文字コードの扱いに苦労したのでメモメモ.

Windows CEではunicodeのみしかサポートされていないためCE上でchar型の引数を取る関数(printfとかstrcpy等)を実行すると強制終了する.
よって,char型の代わりにTCHAR型(もしくはwchar)を使う必要がある.
tchar.hにTCHAR型におけるprintfやstrcpyに対応する関数が定義されているので,こちらを使いましょう.

[tcharの対応表]http://palepoli.skr.jp/content/cpp/tchar.php

ちなみにchar型を引数にとっても大丈夫な関数もある,socket関数とか.
あと,データを格納する変数としてchar型を利用するのはセーフなもよう.

char型とTCHAR型の文字列を相互変換する関数を以下に示す.

[char to TCHAR]
MultiByteToWideChar( CP_ACP, // ANSI コードページ
MB_PRECOMPOSED, // 規定の方法
str, // 変換する文字列
-1, // 変換文字列の長さを自動計算
tbuf, // 変換後のバッファ(ワイド文字)
BUFFER_SIZE // バッファサイズ(ワイド文字数単位)
);


[TCHAR to char]
WideCharToMultiByte(
CP_ACP, // 変換に使うコードページ
0, // マッピング方法,0以外だと失敗した
str, // 変換する文字列(ワイド文字)
-1, // 変換文字列の長さを自動計算
cbuf, // 変換後のバッファ
BUFFER_SIZE, // バッファサイズ(ANSI文字数単位)
NULL, // マップできない文字の既定値のアドレス
NULL // 既定の文字を使ったときにセットするフラグのアドレス
);

2008/10/23

Windows: ローカルエリア通信の許可

ローカルエリアでの通信もファイアウォールで遮断されるようなのでファイアウォールの設定を変更.

[コントロールパネル] > [Windowsファイアウォール] > [詳細設定] > [ローカル エリア接続を選んで設定] > [サービス タブで 追加] > [通信を許可するローカルエリア内の端末のIPアドレスとポート番号を入力]

2008/10/22

Xenインストール1: Xenカーネルコンパイル(追記:11/14)

Fedoraのインストールと設定が終わったので,Xenのインストール開始 .

[Xenソースのダウンロード]
http://xenbits.xensource.com/
http://www.xen.org/products/xen_source.html
から,最新版のXen (現時点では3.4.2)をダウンロードする.
http://bits.xensource.com/oss-xen/release/3.4.2/xen-3.4.2.tar.gz

# wget [xen source url]
# tar xvzf xen-[version].tar.gz

[Xenのコンパイルの準備]
解凍した xen-[version]/tools/check フォルダ内で

# ./chk build
# ./chk install

を実行すると不足しているパッケージを確認できる.
不足している場合はyumでinstall or updateする.

[不足パッケージ]
エラーメッセージだけだと何のパッケージが足りてないのかわかりづらいのでメモ.
./chk build でx11_develがNG -> libX11-devel が不足
./chk install でbrctlがNG -> bridge-utils が不足
make時に libgcrypt-devel が不足
tools のmake時に dv86 が不足

[mercurialのインストール]
バージョン管理ツールがないとLinuxカーネルソースの取得ができないようなので,mercurialというツールをインストールする.しかし,デフォルトのレポジトリではmercuriusはインストールできないそうなのでRPMFORGEというレポジトリを登録しまっす.
これを登録するとyumでインストールできるパッケージが増えるらしい.

http://dag.wieers.com/rpm/packages/rpmforge-release/
から対応するLinuxカーネルのrpm
(rpmforge-release-0.3.6-1.fc3.rf.[i386 or x86_64].rpm)をDL.
Fedoraは3までしか無かったけどインストール出来たのでいっか.
http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
もダウンロードして

# rpm --import RPM-GPG-KEY.dag.txt
# rpm -Uvh rpmforge-release-[version].rpm

これでRPMFORGEがyumで使えるようになる.ただし,常にこれを有効にするとパッケージが出すぎて邪魔なので,使いたいときだけ有効にできるようにする.
/etc/yum.repos.d/rpmforge.repo
enabled = 1enabled = 0にする.

# perl -p -i -e 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo

RPMFORGEを有効にしたいときは,yumのオプションに
--enablerepo=rpmforge
をくっつける.

前準備が終わったので,RPMFORGEを有効にしてmercurialをインストールする.

# yum --enablerepo=rpmforge install mercurial -y


[mercurialを使ってカーネルソースを取得]
Xenのソースを展開したディレクトリの親ディレクトリでやるといいそうな.

hg clone http://xenbits.xensource.com/linux-2.6.18-xen.hg


[Xenのmake]
デフォルトのまま make world を実行するとエラーが出る(インクルードファイルへのパスが通っていない) ので,Xenソースディレクトリ直下にあるConfig.mkに
EXTRA_PREFIX ?= /usr/lib/gcc/i386-redhat-linux/4.3.0
を追加(gcc/以下は環境によって異なる),これを追加することで,その下の

ifneq ($(EXTRA_PREFIX),)
EXTRA_INCLUDES += $(EXTRA_PREFIX)/include
EXTRA_LIB += $(EXTRA_PREFIX)/$(LIBLEAFDIR)
endif
の部分でEXTRA_PREFIX内のincludeファイルを読み込んでくれる.

# make world
(PAEを有効にする場合は,オプションとしてXEN_TARGET_X86_PAE=yを指定する

makeが成功すると,Xenバイナリ(xen.gz)とdomain 0,domain Uのどちらでも使えるLinuxカーネルとモジュール(vmlinuz-2.6.xx-xen)が生成される.

"linux/compiler.hが見つかりません"
というエラーが出たものの,これは無視していいらしいので先へ.
Config.mkに下を足しておくとエラーがでなくなる?
EXTRA_INCLUDES +=
/usr/src/kernels/2.6.25-14.fc9.i686/include
※入れたら別のところで怒られたのでこれは入れない方がよさげ

# make install
生成したXenバイナリとLinuxカーネルを /boot にインストールする.

※補足
Config.mkのDESTDIRを書き換えると,出力先を変更できる.
makeコマンドはデフォルトだとvmlinuz-2.6.xx-xenという名前でビルドする.
これは,make時にKERNELS=kernelnameを指定することで変更できる.
例えば,
KERNELS="linux-2.6-xen0 linux-2.6-xenU"
を指定すると,domain 0とdomain Uに,それぞれ必要なモジュールだけを含んだ
カーネルを二つ生成する.
# make KERNELS="linux-2.6-xen0 linux-2.6-xenU" world
# make KERNELS="linux-2.6-xen0 linux-2.6-xenU" install

worldを付けるとエラーになる?

※捕捉2
KERNELSでコンパイルするカーネルを指定する代わりに
xen3.3.0/build-linux-2.6.18-xen*_x86_32
ディレクトリでmakeしてもいい.更新する場合は
# make clean
# make && make modules
# make install && make modules_install
モジュールの依存関係とinitrdの更新も忘れずに
# depmod 2.6.18.8-xen0
# mkinitrd (Xenインストール2を参照)

※補足3
.configファイルはドメイン0はデフォルトでも大丈夫だった
ドメインUのときは,色々デバイスが足りてなかったっぽい?
ドメイン0のコンフィグファイルをコピーして使った方が安全?
# cd /***/xen3.3.0/build-linux-2.6.18-xenU_x86_32
# /bin/cp -av /***/xen3.3.0/build-linux-2.6.18-xen0_x86_32 ./
# make oldconfig
# make menuconfig
Xen --->
[ ] Privileged Guest (domain 0)
にする.


とりあえずXenのコンパイルはここまで.
次はブートの設定とかをやります.


【参考】
Xen 3.3.0 README
- 所々嘘が書かれてたりするので気をつけましょう

Xen環境作成メモ(その1)

Xen特集 Xenのインストール VA Linux Systems Japan
- Xenのコンパイルオプションの一覧

Fedora: 日本語入力設定

Fedora 9で日本語入力できなかったので調べてみた.
どうやら日本語のパッケージをインストールをしないと日本語入力できないらしい.

# yum groupinstall 'Japanese Support' --exclude=xorg-x11-server-Xorg

※上記を実行してもfirefoxで日本語入力できなかったものの,firefoxをアップデートしたら直りました.

// Reference
Fedora 9で日本語を入力するには

2008/10/21

Fedora: インストール

Fedora 9のインストール方法.

[GPGキーのインポート]
GPGキーとは,RPMファイルが不正に改竄されていないかをチェックするためのキー情報.これをインポートしておかないと,PRMファイルをインストールできなかったり警告が出たりする.
とりあえずインポートする.

# rpm --import /etc/pki/rpg-gpg/*

(標準GPGキーは/etc/pki/rpg-gpgディレクトリにある)

[yumの設定]
# yum install yum-fastesmirror -y

[カーネルアップデート]
# yum groupinstall development-tools -y
# yum install kernel-devel -y
# yum install fedora-release -y

[emacsのインストール]
# yum install emacs -y

[ファイアウォールを切る(切っても問題ない環境のみ)]
# chkconfig iptables off

# chkconfig ip6tables off
# chkconfig --list | grep table

ping応答の許可

LAN上のWindows端末同士でpingをしようとして失敗した.
応答しないでタイムアウトになってしまう.

Windowsファイアウォール > 詳細設定 > ICMP設定 > echo要求の着信を許可する
にチェックを入れることで解決.
デフォルトのままだとファイアウォールがpingも弾いてしまうらしい.

2008/10/20

書評:Xen 3.0による仮想化サーバの構築

タイトル通りの内容.Xenの仕組み,Xenの動かし方,Domainの構築方法,仮想化サーバの構築方法等について記述している.

これから開発環境としてXenを使うことになりそうなのでお世話になりそうな本.

2008/10/10

ブログできた

勉強用のブログ作ってみました.

読んだ論文/本についてとか,勉強したことを
書いて行きたいと思いまっす.

目標は毎日更新.
がんばって勉強するぞ~.

内容について間違い等ありましたらご指摘のほどをm(_ _)m