2006年02月05日

Xenによる仮想マシンの導入 - 仮想マシンの設定と動作

これまで「ホストOSのインストール」および「ゲストOSのインストール」で準備を整えた。個人的にはディスククラッシュがあり、構築しなおす羽目になったが、このブログに手順をまとめてあったので、すぐに構築しなおせた。やはり手順は残すものだ。

ゲストOSのインストールについて補足。ブートローダーはインストールしないとは述べたが、実際には、追加設定やパッケージの追加で起動する必要があるので、ホストOS側の/boot/grub/menu.lst に直接記述して起動するとよい。

さて、とうとう仮想マシンを起動する段階に来た。現在、xm コマンドを打つと次のような状態になっている。

# xm list
Name              Id  Mem(MB)  CPU VCPU(s)  State  Time(s)
Domain-0           0      322    0      1   r----     18.0

メモリを買い足し、さらにビデオメモリとして share していた分量も調整し、メインメモリに322MBを確保できていることがわかる。しかしこれをホストOSに全部を割り当てると、仮想ホストを動作させることができない。それで次のように xm コマンドを実行し、メモリの使用量を調節する。

# xm mem-max 0 128
# xm mem-set 0 120

以上を実行すると、次のようになる。

# xm list
Name              Id  Mem(MB)  CPU VCPU(s)  State  Time(s)
Domain-0           0      120    0      1   r----     20.6

これで適正なメモリを設定できた。しかしこの設定は、Xenが起動するたびに必要だ。このメモリの値をどこでセットしよう。e-ueda が考えたのは、/etc/xen の下に scripts というディレクトリがあるので、そこに memory という名のスクリプトを置き、rc スクリプトの start および restart の条件の時に /etc/xen/scripts/memory を呼び出すことにした。

memory スクリプト (/etc/xen/scripts/memory)

#!/bin/bash
xm mem-max 0 128
xm mem-set 0 120

rc スクリプト (/etc/rc.d/init.d/xend)

・
中略
・
case "$1" in
  start)
        /usr/sbin/xend start
        await_daemons_up
        /etc/xen/scripts/memory  ←ここを追加
        ;;
・
中略
・

これでいいのか分からないが、もっとXenの流儀にかなったやり方を発見したら、あらためてご報告する。

次に仮想マシンの設定ファイルを記述する。/etc/xen/VM_1 を一台目の仮想ホスト用設定ファイルとする。ファイル名は任意の名前が付けられる。

kernel = "/boot/vmlinuz-2.6.12-1.1454_FC4xenU"       ← ゲストOS用カーネル
memory = 100                                         ← 割り当てるメモリの量
name = "VM1"                                         ← 仮想ホストの名前
disk = [ 'phy:hda3,hda3,w','phy:hda5,hda5,w' ]       ← 認識させるディスク
root = "/dev/hda5 ro"                                ← ルートデバイス

カーネルはホストOS側でインストールした /boot/vmlinuz-2.6.12-1.1454_FC4xenU を利用。いくつ仮想ホストを起動させようと、カーネルはひとつでよい(共用すればよい)ので、/boot にインストールしたゲストOS用カーネルを指定する。

以上の設定ファイルを記述し配置したら、xm コマンドで仮想ホストを起動させる。コンソールからでも、ssh のターミナルからでも起動できる。

# xm create -c VM_1

-c オプションは、カレントのコンソールに仮想ホストを起動する指定である。VM_1は設定ファイル名。/etc/xen/のパスはxmコマンドが補完する。設定に間違いがなければ、いとも簡単にゲストOSが起動する。

RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize
Xen virtual console successfully installed as tty1
Event-channel device installed.
xen_blk: Initialising virtual block device driver
Registering block device major 3
xen_net: Initialising virtual ethernet driver.
xen_net: Using grant tables.
md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27
NET: Registered protocol family 2
IP: routing cache hash table of 256 buckets, 4Kbytes
TCP established hash table entries: 4096 (order: 4, 65536 bytes)
TCP bind hash table entries: 4096 (order: 3, 49152 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
Initializing IPsec netlink socket
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem) readonly.
Freeing unused kernel memory: 156k freed
  ***************************************************************
  ***************************************************************
  ** WARNING: Currently emulating unsupported memory accesses  **
  **          in /lib/tls libraries. The emulation is very     **
  **          slow. To ensure full performance you should      **
  **          execute the following as root:                   **
  **          mv /lib/tls /lib/tls.disabled                    **
  ** Offending process: init (pid=1)                           **
  ***************************************************************
  ***************************************************************
  ***************************************************************
Continuing...
SELinux:  Disabled at runtime.
SELinux:  Unregistering netfilter hooks
INIT: version 2.85 booting
                Welcome to Fedora Core
                Press 'I' to enter interactive startup.
Starting udev:  [FAILED]
Initializing hardware...  storage network audio done[  OK  ]
Setting clock  (localtime): 2006 xx xx xx xx:04:10 JST [  OK  ]
Setting hostname Virtual_Server_1:  [  OK  ]
Setting up Logical Volume Management:   No volume groups found [  OK  ]
Checking filesystems
Checking all file systems.
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/hda5
/backup: clean, 56898/526592 files, 304265/526120 blocks [  OK  ]
Remounting root filesystem in read-write mode:  [  OK  ]
Mounting local filesystems:  [  OK  ]
Enabling local filesystem quotas:  [  OK  ]
Enabling swap space:  [  OK  ]
INIT: Entering runlevel: 3
Entering non-interactive startup
Checking for new hardwaremmap /dev/mem: Resource temporarily unavailable
mmap /dev/mem: Resource temporarily unavailable  [  OK  ]
Bringing up loopback interface:  [  OK  ]
Bringing up interface eth0:  [  OK  ]
Starting system logger: [  OK  ]
Starting kernel logger: [  OK  ]
Starting automount: [  OK  ]
Starting sshd: [  OK  ]
Starting xinetd: [  OK  ]
Starting sendmail: [  OK  ]
Starting sm-client: [  OK  ]
Starting udev:  [FAILED]
Fedora Core release 4 (Stentz) Kernel 2.6.12-1.1454_FC4xenU on an i686
Virtual_Server_1:

あっけないほど簡単だ。起動途中に

modprobe: FATAL: Could not load /lib/modules/2.6.12-1.1454_FC4xenU/modules.dep: No such file or directory

というようなメッセージが出るので、ログインして、

# depmod

とやっておく。
いくつかコマンドを打ってみる。

# free
             total       used       free     shared    buffers     cached
Mem:         97204      36328      60876          0       3184      23076
-/+ buffers/cache:      10068      87136
Swap:       506036          0     506036

割り当てたとおり、およそ100MBのメモリを使用して、仮想ホストが動作していることが分かる。

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda5              2038472   1151112    782136  60% /
/dev/shm                 48600         0     48600   0% /dev/shm
# uname -a
Linux Virtual_Server_1 2.6.12-1.1454_FC4xenU #1 SMP Fri Sep 9 00:45:34 
EDT 2005 i686 athlon i386 GNU/Linux

基本コマンドを実行しても、問題なく動作しており、まるで仮想ホストであることを忘れさせる。

ホストOSに戻りたいときは、「Ctrl」キーを押しながら「 ] 」(要するにエスケープキャラクター)を押せばよい。
そうしたらxm コマンドで動作状況を見てみよう。

# xm list
Name              Id  Mem(MB)  CPU VCPU(s)  State  Time(s)
Domain-0           0      120    0      1   r----     77.9
VM1                2       99    0      1   -----     12.0


Domain-0の名がついたホストOSと、VM1という名の仮想ホストがちゃんと動作していることが分かる。
この状態から仮想ホストのコンソールに切り替えたいときは、次のようにする。

# xm console VM1

仮想ホスト側でシャットダウンをかけると、ホストOSのコンソールに戻る。

以上が仮想ホストの設定と動作である。思いのほか簡単である。簡単すぎてつまらない。しかし、これで満足してはいけない。使っているうちにいくつか不安定な現象に直面したし、正常に実行されないコマンドもある。それに仮想ホストを増やすために、いちいち新しいパーティションにインストールするなんてナンセンスだ。

今後は、不安定動作に対する対処を行ないたい。また、仮想ホストの雛形を作り、それをコピって使い回しができるような手法を見出したいと考えている。

Posted by e-ueda at 21:19

2006年01月21日

Xenによる仮想マシンの導入 - ゲストOSのインストール

今回はゲストOSのインストールと動作させるところまでを述べたい。前回の「ホストOSのインストール」の作業が前提となるので、そちらを先に読んでいただきたい。

残しておいた領域の /dev/hda5 に、ゲストOSをインストールする。こちらは前回と違い、実際の用途で使用するし、できればこれを元にゲストOSのイメージをいくつも作りたいので、パッケージをきちんと取捨選択しつつ、完璧な環境を構築しよう。

インストールプロセスにおける注意点としては、

  • スワップ領域はとりあえずホストOSと共有する(新たに確保はしない)
  • ブートローダーのインストールはしない
  • ホスト名やIPアドレスはゲストOS独自のものをきちんと設定する

などだろうか。また、必要のないサービスを削ぎ落とす方法などは、ホストOSのインストール時と同様に行なえる。

インストール後、Xenの動作に必要な追加パッケージをインストールする。

# rpm -ivh bridge-utils-1.0.4-6.i386.rpm sysfsutils-1.2.0-4.i386.rpm 
python-twisted-1.3.0-4.i386.rpm SDL-1.2.8-3.2.i386.rpm (実際には一行)

以上が済んだら、ホストOSで起動。ゲストOSがインストールされたパーティションをマウントし、作業できるようにする。

mount -t ext3 /dev/hda5 /mnt

カーネルは、/boot にインストールした「kernel-xenU-2.6.12」を使う。そのため、そのカーネルにあったモジュールファイルをゲストOS側にコピーする。

# cp -a /lib/modules/2.6.12-1.1454_FC4xenU /mnt/lib/modules/.

必要なデバイスファイルがないと動作に支障が出たり、コンソールからの操作ができなくなるので、念のためデバイスファイル群もコピーしておく。

cp -ar /dev/* /mnt/dev/.

また、ゲストOS側のfstabも編集しておく必要がある。マウントする領域が、デバイス名ではなくラベル名になっている箇所があったら直しておく。

LABEL=/1
  ↓
/dev/hda5

ホストOS同様ゲストOS側のTLSライブラリも利用できないようにしておく。

mv /mnt/lib/tls /mnt/lib/tls.disabled

ゲストOS側でやることは以上である。次回はいよいよXenの設定を行い、実際にゲストOSを起動する方法を述べたい。

Posted by e-ueda at 23:19

2006年01月15日

Xenによる仮想マシンの導入 - ホストOSのインストール

まず計画としては、パーティションの切り方を決めておく。e-uedaは下記のように切った。

/boot 100MB

/ 30GB (ホストOS)

swap 1GB

/ 5GB (ゲストOS)

/dev/sda1

/dev/hda2

/dev/hda3

/dev/hda5

ホストOSをインストールする領域は、別に小さくても構わない。e-uedaは他にもいろいろ実験しようと思っているので少し大きめに取った。/dev/hda5は、今回は未使用領域にしておき、後でゲストOSをインストールする。

ホストOSのインストールは、CDブートで普通にインストールをする。計画通りパーティションを切り、パッケージ選択の部分では「開発ツール」のみを選択し、他のものは全部チェックを外す。ホストOSなので無駄なものは一切入れないし、必要ない。また、「開発ツール」を選べば、その「開発ツール」の詳細を開けて、チェックのついているものは全部外してもよい。要するに「開発ツール」の基本部分だけが入れば十分だ。(それでも余計なものは入ってしまうが)

インストールが終わったら、追加で必要なパッケージを導入する。

# rpm -ivh bridge-utils-1.0.4-6.i386.rpm sysfsutils-1.2.0-4.i386.rpm 
python-twisted-1.3.0-4.i386.rpm SDL-1.2.8-3.2.i386.rpm (実際には一行)

次にTLSライブラリを無効にする。起動時には毎回「TLSを無効にしろ」とのメッセージが出る。あらかじめその通りにしておく。

# mv /lib/tls /lib/tls.disabled

今度は下記のURIより、XenとXen対応カーネルのパッケージを取得する。
http://people.redhat.com/riel/xen_for_fc4/

必要パッケージは下記の通り

xen-3.0-0.20050912.fc4.i386.rpm
kernel-xen0-2.6.12-1.1454_FC4.i686.rpm
kernel-xenU-2.6.12-1.1454_FC4.i686.rpm

XenパッケージとXen対応カーネルをインストール。

# rpm -ivh xen-3.0-0.20050912.fc4.i386.rpm
# rpm -ivh kernel-xen0-2.6.12-1.1454_FC4.i686.rpm
# rpm -ivh kernel-xenU-2.6.12-1.1454_FC4.i686.rpm

ホストOSはできる限り必要のないサービスは起動しないようにする。インストールの種類を「サーバー」、パッケージ選択の部分では「開発ツール」のみを選択した場合、下記の必要のないサービスが起動していたので、chkconfig コマンドで自動起動しないようにする。

# chkconfig --level 2345 anacron off   (以下、同様のコマンドですべてOFFにする)

anacron
auditd
bluetooth
canna
cups
gpm
iiim
iptables
nfs
nfslock
pcmcia
portmap
rhnsd
rpc
rpcgssd
rpcidmapd
smartd
xfs

仕上げにXenのサービスを自動起動にし、再起動をかける。

# chkconfig --level 2345 xend on
# reboot

起動時にはエラーが出るが気にしない。起動しログインしたら、freeコマンドを実行してみてほしい。必要ないサービスを除いたので、メモリの消費量はごくわずかである (e-uedaの環境で50Mほど)。これこそ必要なサービスに特化した、カスタムメイド環境を可能にするLinuxの醍醐味だ。小さくすればするほど大きな力を発揮するのがLinux。Windowsみたいな自動販売機のようなOSにはできない芸当であろう。

さて、ログインしたら、xmコマンドで状態を見てみよう。

# xm list
Name              Id  Mem(MB)  CPU VCPU(s)  State  Time(s)
Domain-0           0      188    0      1   r----     19.2

Domain-0 と呼ばれるホストOSが動作しているのが分かる。これでホストOSの準備が整った。

とても簡単であることがお分かりいただけたと思う。しかし大切なのは単なる手順ではなく、仮想マシンの概念やXenがどうやって仮想マシンを実現しているのか、それを理解することである。次回はゲストOS側の設定について述べる。

Posted by e-ueda at 19:58

2006年01月14日

仮想化技術「Xen」の検証

土曜日といったら、いつもは子どもと一緒に野球に全力投球のe-uedaであるが、今日は強い雨降りなので、半日、勉強の時間を取り分けることができた。

何をやろうかと思ったが、かねてから強い関心のあったコンピュータの仮想化技術「Xen(ゼン)」にトライしてみた。Xenを使えば、普通は不可能な「一台のマシン上で複数のOSを動作させる」ことも可能になる。

結果としては、思いのほか簡単に仮想マシンを動作させることができた。概要は下記の通り。

利用OS
ホストOSおよびゲストOSの両方にFedora Core 4 を選択。Debianでやろうと思ったが、仕事でFedora CoreやRed Hatを使用することが多いので、Fedora Core 4にした。でもKernelが2.6系であれば、本質的には何でも一緒。

手法
いろいろやり方はあるが、今回は二つのパーティション(/dev/hda1, /dev/hda5)にFC4をインストール。/dev/hda1をホストOSにし、/dev/hda5にインストールした方をゲストOSとして起動する形にした。

もう少し詳しい手順を述べたいが、今日は時間がない。今後小分けにして報告したいと思う。

Posted by e-ueda at 22:26

2005年06月26日

カーネルVerUP & サーバー再起動

このWebサーバーを久しぶりに再起動した。カーネルを2.4系から2.6系にバージョンアップしたからだ。それがこのサーバーにとって何の意味があるのか、よく考えてみたが、特になかった。

Posted by e-ueda at 22:44

2005年05月28日

Debianにおけるサービスのコマンド

Debian に乗りかえたとき、RedHat との違いにとまどった点の一つに、サービスの再起動などを行なう時のコマンドをあげることができる。RedHat では、service コマンドがあって、たとえば apache の設定ファイルを編集し、設定を有効にするためにサービスを再起動したければ、次のようにする。

# service httpd restart

しかし Debian では、service に相当するコマンドがなく(公式サイトのDebianリファレンスを参照)、スクリプトをフルパスで指定して、引数をつけて再起動する。

# /etc/rc.d/apache restart

e-ueda は、いちいち起動スクリプトをフルパスで指定するのもアレなので、下記のようなシンプルな Perl スクリプトを自作し、rcd と名付けて使い続けてきた。

#!/usr/bin/perl -w
use strict;
my $path = '/etc/init.d/';
my ($service,$arg) = @ARGV;
die "usage: rcd servicename argument\n" if ! $arg;
if (-f "$path/$service") {
    print "$service サービスを $arg します\n";
    exec "$path$service $arg";
} else {
    die "no such service\n";
}

次のように実行する。

# rcd apache restart

簡単だが結構重宝している。もしよかったら読者の方にも使っていただきたい。
ところで。もしや Debian にもサービスを上げ下げするコマンドがあるのだろうか?何年も使ってきて今さらだけど。

Posted by e-ueda at 21:55

2005年04月04日

apt の sources.list

最近、apt-get update; apt-get upgrade がコケていた。(testing)

aptラインを http://www.ring.gr.jp/ にしても、http://ring.hosei.ac.jp/ に変えても特定のパッケージがアップデートできない。しかも、login や shadow、tcpd、whois などの基本的なものでコケているのだ。

しかし、http://ftp.jp.debian.org/ に向けたらすんなり upgrade できるではないか。
単にミラーが不完全だっただけなのか。

現在の aptラインは下記の通り。

deb http://security.debian.org/ testing/updates main
deb http://ftp.jp.debian.org/debian/ testing main
deb-src http://ftp.jp.debian.org/debian/ testing main
Posted by e-ueda at 22:05

2005年01月23日

ntpサーバーの指定

スラッシュドット ジャパンの福岡大学NTPサーバの混雑解消にご協力をという投稿が話題になっている。clock.nc.fukuoka-u.ac.jpへのアクセスは毎秒900件ほどになるとのこと。e-uedaもこのntpサーバーを指定したことはあるが、現在は利用していない。ただ、この機会に時刻合わせについての運用を見直してみた。
この記事に対するコメントで指摘されていた通り、自分の利用しているプロバイダが提供しているなら、それを利用すべきであろう。e-uedaが固定IPでお世話になっているプロバイダは、ntpサーバーを提供してるかは未公開だったが、下記のようにしてみたら、ntpサーバーでもあることが分かった。

# ntpdate -q プロバイダのwwwサーバー
# ntpdate -q プロバイダのDNSサーバー

プロバイダ自身がこの情報を公開していないため、FQDN名は書かないことにするが、とにかく自ネットワークのプロバイダがntpサーバーを立てていることが分かったので、そこをピアに指定した。また、福岡大学に次いで有名なntp3.jst.mfeed.ad.jpも指定した。(ntp1は混雑してるようだ。ntp2やntp3を指定する方がよいだろう)

# emacs /etc/ntp.conf
・
(中略)
・
server 210.135.90.xx
server 210.135.90.yy
server ntp3.jst.mfeed.ad.jp

ntpdateを利用するなら、次のようなコマンドラインを、cronに登録しておくと良い。

/usr/sbin/ntpdate ntpサーバー名; /sbin/hwclock -w

これでサーバーの時刻とCMOSクロックを同時に正確なものに保つことができる。

Posted by e-ueda at 20:24

2005年01月16日

DebianでApache2 - ポート設定

/etc/apache2/ports.conf というファイルが存在する。これは、apache1.3 の httpd.conf で言えば、Port 80 のような設定をするためのもので、わざわざ別ファイルとなっている。

中身は次のようになっている。

# cat /etc/apache2/ports.conf
Listen 80

SSLのアクセスを受け付ける場合や、ほかのポートでのアクセスを許可する場合など、下記のような記述を追加する。

Listen 443
Listen 8080

ついでで言うと、httpd.conf、ssl/、conf.d/ は空っぽであり、おそらく互換性のためだけに存在するが、Debian流にあわせて運用するなら、これらは不要なものだろう。むしろ紛らわしいので、消してしまってもいいと思う。その場合、apache2.conf のInclude している二行を下記のようにコメントアウトする。

#Include /etc/apache2/httpd.conf
#Include /etc/apache2/conf.d/[^.#]*
Posted by e-ueda at 21:22

2005年01月12日

DebianでApache2 - ホストやモジュールのコマンド

よく見てみたら、Apache2 の ServerRoot 直下に README ファイルが存在していた。そこには今まで調査したようなことが、大方説明されていたではないか(お恥ずかしい)。その説明の最後に、サイトやモジュールを有効・無効化するコマンドが書かれていた。

ヴァーチャルホストの有効・無効化。

# a2ensite ヴァーチャルホスト名
# a2dissite ヴァーチャルホスト名

モジュールの有効・無効化。

# a2enmod モジュール名
# a2dismod モジュール名

よって、シンボリックリンクを手動で作る必要はないわけだ。

Posted by e-ueda at 23:43 | Comments (0)

2005年01月09日

DebianでApache2 - モジュールの設定ファイル

ヴァーチャルホストと同様、モジュール関係の設定ファイルも別ディレクトリで管理されている。/etc/apache2 以下には、モジュール設定ファイルのありかとして、mods-available と mods-enable が存在する。/etc/apache2/apache2.conf には、次のようになっている。

# Include module configuration:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

つまり /etc/apache2/mods-available の中に拡張子 .conf と .load というファイルで設定されているモジュールが利用可能で、/etc/apache2/mods-enabled にシンボリックリンクがあるモジュールのみが読み込まれ、有効になるわけだ。mod-perl を例にとってみよう。

まずはインストール。

# apt-get install libapache2-mod-perl2

インストールした後、/etc/apache2/mods-available を見ると、設定ファイルもインストールされている。

# cd /etc/apache2/mods-available/
# ls perl.*
  perl.conf  perl.load

perl.load の中身は、

# cat perl.load
LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so

となっており、モジュールを読み込む設定のみが記されている。

perl.conf は

# cat perl.conf
PerlModule Apache2

とあり、最低限の記述となっている。あとは、必要に応じ、.cgiの拡張子がついたものをmod-perlで動かすとか、あるディレクトリでのみmod-perl で動かすなどの設定を、このファイルに施せばよい。

後は /etc/apache2/mods-enabled にシンボリックリンクを作成すれば有効になるわけだが、モジュールをインストールすれば、そこまでは勝手にやってくれる。すでに下記のように、作成されていた。

# cd ../mods-enabled/
# ls -l perl.*
lrwxrwxrwx  1 root root 37 2005-01-08 16:52 perl.conf -> /etc/apache2/mods-available/perl.conf
lrwxrwxrwx  1 root root 37 2005-01-08 16:52 perl.load -> /etc/apache2/mods-available/perl.load

以上である。Debian のApache2 で、ホストやモジュールの設定がそれぞれのファイルに分かれていることで最初は抵抗があった。しかし、調査してみると、元々長大になりやすく、かえって見通しが悪くなっていたhttpd.conf を、非常に管理しやすくするアイデアであるなと思えてきた。シンボリックも自動的に張られるし、煩雑さも感じない。さすがDebian! ほかのディストリビューションではとてもじゃないが出来ない芸当であろう。

Posted by e-ueda at 21:19

2005年01月08日

DebianでApache2 - ホストの設定ファイル

Debian Sarge の Apache2 は特殊な構成になっているが、これを理解すべく調査を始めた。
設定ファイルは /etc/apache2/apache2.conf となっている。

これを開いてみると、言うまでもなくサーバールートは /etc/apache2 である。

ServerRoot "/etc/apache2" 

しかしドキュメントルートの設定は見当たらない。これは、デフォルトのホスト名も含め、ヴァーチャルホストの設定がすべて別のディレクトリに、別々のファイルに分けられて管理されているからである。apache2.conf では、次のようになっている。

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/[^.#]*

よって、sites-enabled 以下のすべてのファイルが読み込まれるわけだ。インストール後は、このディレクトリ内には default という名のファイルがひとつだけある。これが、文字通りデフォルトのホストの設定ファイルで、このファイルをエディタで開くと、DocumentRoot やら ScriptAlias やらの、おなじみの設定を確認することができた。しかし、待てよ、このファイルはシンボリックリンクじゃないか。

# ls -l /etc/apache2/sites-enabled
合計 0
lrwxrwxrwx  1 root root 36 2004-05-08 20:35 default -> /etc/apache2/sites-available/default

実体は、/etc/apache2/sites-available の中の default というファイルであることが分かる。つまり、sites-available の中にあるヴァーチャルホストの設定を有効にしたいときには、/etc/apache2/sites-enabled にシンボリックリンクを張ればよいわけだ。

Posted by e-ueda at 16:20

2005年01月07日

DebianでApache2 - インストールと起動

Debian での Apache2 は、他に類を見ないほどの独特な設定方法になっている。Sarge にアップグレードした際に、ちょっと面食らってしまったが、気を取り直してトライしてみることにした。まずはインストールと起動についてメモしておく。

# apt-get install apache2

インストール後、/etc/default/apache2 の中が NO_START=1 になっており起動できないので、0に書きかえる。

NO_START=0

後はサービスの開始。

# /etc/init.d/apache2 restart

まずはこれでインストールができ、httpd が起動する。続きはまた。

Posted by e-ueda at 00:47

2005年01月01日

syslogので「--MARK--」を出力しないようにする

Debian で /var/log/messages を見ると「--MARK--」が大量に出力されている。これは、syslogdが定期的に吐き出しているもので、markファシリティによるタイムスタンプである。

このタイムスタンプが効力を発揮するのは、複数のサーバーのログをどれか一台のサーバーで集中管理している場合である。クライアントやサーバー同士のシステム時刻が狂っていても、このタイムスタンプで、特定の事象の発生時間を特定できる。

しかし、そのような運用をしていない場合は、この「--MARK--」はちょっと目障りだ。逆にログが見にくくなる。manpage を見ると、これを抑止するためには、syslogd の起動オプションで -m 0 と指定するようだ。指定しない場合、デフォルトでは -m 20 であり、20分ごとにタイムスタンプを出力する。よって、/etc/init.d/sysklogd ファイルのオプション指定の部分で次のように記述した。

SYSLOGD="-m 0"

以前、RedHat系のディストリビューションでは、このような動作はしていなかったが、実は、/etc/rc.d/init.d/syslog には、この「-m 0」がはじめから記述されているのである。

Posted by e-ueda at 10:33

2004年09月04日

Debian on Dell Servers

DELLのサーバーにDebianをインストールするためのサイトがあることを知ったが、そこからたどってゆくとさらに http://linux.dell.com/ なるサイトも発見。blogもある。米国Dellもなかなかやるな。こういうサイトが日本語で欲しい!

[debian-users:41254] kernel 2.4.26 で Kernel panic より引用

DELL PowerEdge750に以下のページからダウンロードした
debian-dell-2.4.26.isoを使用してDebianをインストールして
使用していましたが、そのままではiptablesが使用できないことがわかり、
configを修正してkernelをリコンパイルしたところ、Kernel panicとなり
起動しなくなってしまいました。
http://wiki.osuosl.org/display/LNX/Debian+on+Dell+Servers/

いろいろ試行錯誤してみましたが、うまくいかず行き詰まっています。
何か根本的に間違っているのでしょうか。
アドバイスいただけると幸いです。

出力されるメッセージは以下のとおりです。
-------------------------------------------------------------------
RAMDISK: cramfs filesystem found at block 0
RAMDISK: Loading 928 blocks [1 disk] into ram disk... done.
Freeing initrd memory: 928k freed
FAT: bogus logical sector size 0
sh-2021:reiserfs_read_super: can not find reiserfs on ramdisk(1,0)
Kernel panic: VFS: Unable to mount root fs on 08:03
-------------------------------------------------------------------

実行したこと(以下のページ等を参考にしました)
http://park15.wakwak.com/~unixlife/linux/de-kernel-pkg.html
-------------------------------------------------------------------
# vi /etc/apt/sources.list (stableをsargeに変更)
# apt-get update
# apt-get install initrd-tools
# apt-get install kernel-package
# cd /usr/src
# apt-get install kernel-source-2.4.26
# tar jxvf kernel-source-2.4.26.tar.bz2
# ln -s /usr/src/kernel-source-2.4.26 /usr/src/linux
# cd /usr/src/linux/
# cp /boot/config-2.4.26-bf2.4 .config
# make menuconfig
(Networking options--->IP: Netfilter Configuration--->以下を全部選択)
# make-kpkg clean
# make-kpkg --append_to_version -1-i686 --revision=custom.1.0 --initrd kernel_image
# cd /usr/src
# dpkg -i kernel-image-2.4.26-1-i686_custom.1.0_i386.deb
# lilo -v
# shutdown -r now
-------------------------------------------------------------------

/etc/lilo.confの内容(元のLinuxOLDの方は問題なく起動します)
-------------------------------------------------------------------
lba32
boot=/dev/sda
root=/dev/sda3
install=/boot/boot-menu.b
map=/boot/map
delay=20
prompt
timeout=150
vga=normal
default=Linux
image=/vmlinuz
label=Linux
read-only
initrd=/initrd.img
image=/vmlinuz.old
label=LinuxOLD
read-only
optional
-------------------------------------------------------------------

以下のファイルはリンクファイルで、/boot以下の各ファイルをさしています。
-------------------------------------------------------------------
/initrd.img -> boot/initrd.img-2.4.26-1-i686
/vmlinuz -> boot/vmlinuz-2.4.26-1-i686
/vmlinuz.old -> boot/vmlinuz-2.4.26-bf2.4
-------------------------------------------------------------------

以上よろしくお願いします。

[debian-users:41256] Re: kernel 2.4.26 で Kernel panic から引用

initrdを使うカーネルの場合には、kernel-patch-debian-2.4.26 も入れない
とRAMDISK展開後にエラーになるはずです(インストールしたあとのパッチは
make-kpkgのときに自動的に適用されるはず)。

Posted by e-ueda at 09:34

2004年07月15日

Sambaのごみ箱機能 検証結果

先日Sambaのごみ箱機能について討議されていたMLを貼り付けたが、実際に自分でもやってみた。設定は下記のとおり。まずグローバルセクションで、

[global]
vfs objects = recycle

次にゴミ箱機能を使う共有セクションで、

[share]
recycle:repository = .recycle/%u
recycle:keeptree = 1
recycle:versions = 1

あとは共有内に.recycleディレクトリを作成し、Sambaを再起動するだけだ。これでごみ箱が実現できてしまう。あっけないほど簡単だ。基本的には vfs objects と recycle:repository の指定でOKだ。keeptreeなどのパラメータはお好みでどうぞ。

同じようなもので、マイクロソフトが Windows Server 2003 では共有フォルダのシャドウコピーリストアという機能がある。消しちゃったファイルも元に戻せて、それで物凄いコスト削減になるだなんてテレビコマーシャルでやっていた。でもSambaで十分実現できているのだったら、Sambaのほうが一層のコストダウンになるんじゃないかと思う。設定も簡単だから管理コストもかからないし。

Posted by e-ueda at 22:38

2004年04月26日

dpkgエラーの対処方法

[debian-users:40186] Re: dpkg error? からの引用

現象:dselect や apt にて debconf の dpkg list がエラーになる

原因:/var/lib/dpkg/status が壊れた事で debconf の install 状態が不明になったため

対処:/var/lib/dpkg/status を別の場所から取ってくる
1./var/lib/dpkg/status-old
2./var/backups/dpkg.status.0
3./var/backups/dpkg.status.1.gz
4./var/backups/dpkg.status.2.gz
5./var/backups/dpkg.status.3.gz
6./var/backups/dpkg.status.4.gz
7./var/backups/dpkg.status.5.gz
8./var/backups/dpkg.status.6.gz
9.他のマシンから持ってくる

[debian-users:40238] Re: dpkg error? からの引用

現象:dselect や apt にて debconf の dpkg list がエラーになる

原因:/var/lib/dpkg/info が壊れた事で debconf の install 状態が不明になったため

対処:/var/lib/dpkg/info ディレクトリのファイルが異常に少ないので、別の Linux Box を同様の構成にしてそちらから取ってくる。

Posted by e-ueda at 08:07

2004年04月22日

Mondo Rescue ― システムのリストア成功

先日「Mondo Rescue ― システムを丸ごとバックアップ」にて、実際にバックアップ作業を行なった事を書いた。今回、別マシンにて再度バックアップ作業を行ない、そのCDで見事、寸分違わぬ復元ができたので、その報告をしたい。

今回バックアップするマシンはDesktop用途で使用しているもので、Gnomeが入っており、ファイルシステムもReiserFSである。また実験のため、Apacheなどいくつかのサーバーアプリも稼働している。そんなマシンを下記のようにバックアップしてみた。

# mkdir /var/mondo
# mkdir /var/mondo/iso
# mondoarchive -O -i -L -d /var/mondo/iso -E /var/mondo/iso 
   -l LILO -f /dev/hda -k FAILSAFE -s 640m -F  (実際には一行)

見ての通り、/var/mondo/iso ディレクトリを作成し、そこにマシン全体のバックアップイメージを作成する。バックアップ対象としては /var/mondo/iso を外す。

# ls /var/mondo/iso
1.iso 2.iso

1.iso と 2.iso という形でマシン全体のバックアップが取れているのが分かる。次に、このisoイメージをCDに焼く。

# cdrecord -v speed=4 dev=0,0,0 -data 1.iso

すべてのイメージを正常にCDに焼き終って、早速リストア作業をしてみた。一枚目のCDを入れて再起動をかけた。

CDブートさせると、まずは起動メニューが表示される。デフォルトの Interactive を選んでだ。環境によってはLILO:プロンプトしか出ないかもしれないが、その場合は Interactive と入力しよう。するとCD内のカーネルを読み込んで起動プロセスが進む。メニューが出るのを待つが、これが思ったより長い。数分の時間がかかるが、辛抱して待つ。するといきなり、

                 Partition List

と題する一覧が出てくる。(画面のキャプチャーが取れなくて申し訳ない・・・) これはほとんど /etc/fstab そのものだ。この画面でパーティションサイズやラベルなどを編集できる。

【注意】この動きはほかのディストリビューションのMondoとは違う。たいていは復旧モードをあらためて示すメニュー画面が表示されるようだ。 Debianパッケージ特有のフローだが、Interactiveを指定した以上、その先であらためて復旧モードを指定するのは二度手間なので、 Debianパッケージの方が合理的といえるだろう。

e-ueda は元通りリストアすることを望むので、編集画面右下のOKを押し先に進んだ。次の画面は

                 Fromatting Partitions

だ。ハードディスクをフォーマットする。すると次は

                 Mounting Partitions

と来る。フォーマットしたそれぞれのパーティションに対応したCD内のディレクトリをマウントし、データコピーの準備をするようだ。次に進めると、

                 Alert
Do you want me to restore all of your data?

と聞かれるので、Yes を押す。

                 Restoring From archives

の画面でリストアの進捗状況が表示されながら進んでいく。途中で

                 Alert
Please insert CD #2 and pres Enter

と、2枚目のCDを求められるので、指示通りにする。データの復元が終わると、

                 Alert
Initialize the boot loader?
               Alert
Did you change the mountlist?

と立て続けに聞いてくる。e-ueda はここで両方の質問にYesと答えたが、その後viっぽい編集画面で/etc/lilo.conf と /etc/fstab が開かれて編集状態になった。ここは編集が必要なければNoでよいだろう。

ちなみに、Yesを押してしまうと、

                 Alert
you will now edit fstab and lilo.conf, to make 
sure they match your new mountlist.
                OK

と表示され、vi の編集画面に入る。ZZと終了コマンドを打ち、編集画面を終わらせると、

                 Alert
Label your ext2 and ext3 partitions 
if necessary?

と聞かれ、反射的にYesを押してしまった。ReiserFS なので、意味がないもしくは有害な選択だったかと不安になったが、けっきょくはなんともなかった。

以上でエラーも表示されず無事にリストア作業が終了した。画面のメッセージ下方に

・
(中略)
・
Mondo-restore is exiting (retval=0)
Restore log copied to /tmp/mondo-restore.log on your hard disk

と出ていればOKだ。念のため、ログファイル /tmp/mondo-restore.log を確認してみる。
途中、Formatting /dev/hda8 as reiserfs ...OK などと記録されており、 うまくいっている様子がわかる。

あとはCDを取り出し、 Ctrl + Alt + Del で再起動をかける。何事もなかったかの如く、健全なシステムが元通り起動してきた。(ちょっと感動)今回、以上のような作業で完全なリストアを行なうことができ、信頼性の高さを実感できたので、次回リストアを行なうとすれば、LILOのブートメニューで nuke モードを選んで(もしくはLILO:プロンプトでnukeと入力して)、全自動でやってしまおうと思う。皆さんも試してみてはいかがだろうか。

Posted by e-ueda at 18:23

2004年04月21日

make-kpkgで外部モジュールを導入する

[debian-users:39986] Re: woodyでBroadcomのNICを使いたい からの引用

rootになれると言う前提で
# apt-get install bcm5700-source kernel-source-2.4.18
(kernel-source のバージョンはこれをご希望なんですよね?)
# cd /usr/src
# tar -zxf bcm5700.tar.gz
# tar -jxf kernel-source.2.4.18.tar.bz2
# ln -s kernel-source-2.4.18 linux
# cd linux
# cp /boot/config-2.4.18 .config
(バイナリ配布の kernel-image を使ってるなら config-2.4.18-xxx かも)
# make config | xconfig | menuconfig
一応内容を確認しつつも変更しない
# make-kpkg [--revision xxxxxx ] --bzimage kernel_image modules_image
         ##### 他の事しましょう #####
cd ..
# cd /lib/modules
# mv 2.4.18 2.4.18.bak (現在のモジュールを dir ごと移動)
# cd - ( /usr/src に戻って来るはず)
# dpkg -i で出来上がった kernel-image、bcm5700xxxxx の deb をインストール
# /etc/lilo.conf を内容確認、必要に応じて変更(lilo使用の場合)
# lilo
# init 6 ( shutdown -r now)

私はいつもこんな感じでカーネル外部のモジュールが使えています。
カーネル差替え後最初のブートでは unresolved symbol... が出るかも知れませ
んが。

Posted by e-ueda at 20:02 | Comments (0)

2004年04月19日

Mondo Rescue ― システムを丸ごとバックアップ

サーバーのHDがクラッシュしてしまったら、あなたはどのように復旧するだろうか。一から構築しなおすだろうか? e-ueda も経験がある。以前、このコンテンツを提供しているサーバーがクラッシュしてしまったとき、一から構築した。RedHat Linux 7.3 で運用していたサーバーが壊れ「ええい、この際 Debian でいてまえ」と、3~4時間で作り直した。その時は、構築時の設定ファイルをWindowsマシン側に保存していたので、すぐに構築しなおせたわけだ。それでも RedHat と Debian の違いに少々苦しんだことは、正直に告白しよう。

しかし、やはり構築し直しは不安だらけで心臓に悪い。いつも絶対に数時間で構築しなおせる保障などないし、第一効率も悪い。

理想を言えば、ホットスワップ対応のRAIDユニットを搭載したサーバーがあればいいのだが、そんな金銭的な余裕もない。であれば、せめて、故障したときに何も考えず、一番効率の良い方法でリカバリーできる手法があれば、障害時の復旧も不安なく効率的に行なえる。

そこで、選んだ手法が「Mondo Rescue」だ。Mondo Rescue は、CDにシステムのイメージを焼くことができ、部分的な復旧も、システム全体の復旧もできる。製品でいえば NetJapan の Deploy Center や Norton の Gohst のようなものだ。

先日、実際に Mondo Rescue によるバックアップ作業をしてみたので、その作業メモをアップしておく。

● 必要なパッケージのインストール

下記のパッケージが必要となる。入っていなかったら、あらかじめインストールしておく。

# apt-get install afio buffer bzip2 lzop liblzo1 

CD に焼くので、下記のパッケージも必要となる。

# apt-get install mkisofs cdrecord

cdrecord をインストールする際、SUID で動作させるか聞かれる。普通はデフォルトのNoでいいだろう。

● Mondo Rescue のインストール

では Mondo Rescue のパッケージをインストールしてみよう。

# apt-get install mindi mondo

mindi というのは、Mondo Rescue で作成するイメージCDを、ブート可能にするために必要なパッケージだ。

● デバイスの準備

CD-R(W) ドライブが必要なのは言うまでもないが、これを cdredord で使用するには、SCSI接続の CD-R(W) ドライブか、ATAPI で接続されたCD-R(W) ドライブを、SCSI エミュレートで設定されたドライブが必要となる。(カーネル 2.6 では、もっとスマートにできるらしいが、ここでは触れない)

環境によって違うが、まずは下記のコマンドを打ってみる。

# cat /proc/scsi/scsi

ここで何も CD-R(W) ドライブが表示されなければ、手動で設定する必要がある。(認識され、設定されている方は、この部分を飛ばして構わない)まず dmesg コマンドの出力で、CD-Rドライブがどのデバイスで認識されているか確認する。もし hdc で認識されていれば、/etc/lilo.conf のデフォルトでロードされるカーネルの image セクションに次のように追記する。普通 hdc は IDE デバイスとして認識されてしまうので、これをSCSIサブシステムの管理下に置かなければならない。

append="hdc=ide-scsi"

そして、/dev 下にある cdrom を、SCSIデバイス名にリンクしてしまう。

# cd /dev
# ln -sf scd0 cdrom

次に、/etc/modutiles/aliases に、SCSI 関連のドライバをロードするように記述する。

alias scsi_hostadapter ide-scsi
alias scd0 sr_mod
options ide-cd ignore=hdc

scd0 というのは SCSI CD のデバイス名だ。編集・保存したら、下記のコマンドで設定を有効にする。

# update-modules

以上が済んだら再起動する。
再起動後、設定がうまくいっていれば、

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: MITSUMI  Model: CR-4804TE        Rev: 2.4C
  Type:   CD-ROM                           ANSI SCSI revision: 02

のように認識しているだろう。

ここまでできていれば、cdrecord からも、CD ドライブが認識される。

# cdrecord -scanbus
Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 J g Schilling
Linux sg driver version: 3.1.25
Using libscg version 'schily-0.5'
scsibus0:
        0,0,0     0) 'MITSUMI ' 'CR-4804TE ' '2.4C' Removable CD-ROM
        0,1,0     1) *
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *

ちょっと古いがタイプだが、e-ueda のサーバーについているCD-R ドライブだ。(中古市場では、書き込み速度が遅くてかまわなければ CD-RW ドライブが2000円ほどで手に入る)ここまでくれば、イメージCD作成の準備はすべてできたことになる。

● システムのバックアップ

まず、直接システムをCDに焼くのではなく、2台目のハードディスクに iso イメージを作成してみよう。これは cron などで設定すれば、夜中にでも iso イメージを定期的に作成できるメリットがある。iso イメージを作成してしまえば、CD に焼く作業はいつでも都合の良いときにできる。

2台目のハードディスクは、HARD OFF などの中古ショップで 4GB の HD が2000 ~ 3000円ほどで売られているので、こういう安価なものをバックアップ用の HDにすればよい。

では早速 iso イメージを作成してみよう。下記は2台目の HD を取り付けて、 /bk1 としてマウントしたところに、iso イメージを作成している例である。

# mondoarchive -O -i -L -d /bk1 -E "/bk1 /bk2 /mnt" -l LILO -f /dev/hda
       -k FAILSAFE -s 640m -F    (→実際には一行)

オプション -O は、バックアップを作成すること、-i は ISO イメージを HD に保存すること、-L は lzo 形式で圧縮することを指示する。-d はバックアップ先の指定。-E はバックアップ対象からはずす場所を指定する。当然バックアップファイルの作成先は除外しなければならない。複数指定する場合は空白で区切る。-l では、ブートローダーを、-f ではマスターブートレコードがインストールされているデバイスを明示する。-k でカーネルイメージへのパスを指定するが、Debian ではここを FAILSAFE としないと、CDブートに失敗するようだ。-s のあとにはisoイメージファイルの上限を指定する。

● ISO ファイルを CD に焼く

では、上記のイメージを CD に焼いてみる。 cdrecord -scanbus コマンドの出力結果にあわせて、次のように

# cdrecord -v speed=4 dev=0,0,0 -data 1.iso

いきなり焼くのが不安なら、オプション -dummy でエラーが出ないことを確認してから焼けばよいだろう。サイズに応じて 2.iso、3.iso ・・・とファイルができるので、順次焼いてほしい。

後は作った CD でブートしリカバリー作業をするだけだ。本当に元通りになるのか、検証結果は後日ここで報告するつもりだ。

Posted by e-ueda at 08:50