トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

NetBSDでXenXen動くよ(6.1+LVM編)

OSC 2014 Tokyo/FallJNUGブースで展示しました。

はじめに

NetBSD/xenについて、NetBSD/amd64でDom0、NetBSDやそれ以外のOSをDomU、を試してみた、めも。

試行錯誤の結果をまとめてみた。

前回と同様、

  • できるだけ、準仮想化で動かす。 NetBSD以外、まだできてません...。
  • 各DomUのネットワークは、ブリッジで接続することにする。
  • メモリは4Gしかないので、上で動かすOSは、32bitなものにする。

前回からの大きな変更点

NetBSD 6が出たので、Linuxと同じようにな、LVMが使えるようになった。

また、Xen 4.2がpkgsrcから使えるようになっているので、それを使うことにする。

リンク集

 LVM

 Xen

  • NetBSD/xen: かんけつですばらしいまとめ。
  • NetBSD/xen環境の構築: すばらしいまとめ。64bit版も読もう。
  • How to set up a Xen Dom0 running NetBSD 6.1: NetBSD Wikiのチュートリアル。
  • NetBSD/xen Howto: あいかわらず古いままの本家のHowto。grubで起動するところは、NetBSD 5.0からは、NetBSD付属のブートローダを使えるので、読み替えが必要。(別にgrubを使ってもいいんだけど。)
  • XL: 4.2でxmコマンドから完全に置き換わったxlコマンドとは何か。Xen Wikiより。
  • pygrub with NetBSD domU: pygrubが動く条件を調べて、かんたんなHowtoにしてくれたとてもありがたい方のメール。port-xen MLより。

Dom0の準備

 NetBSD/amd64の通常インストール

NetBSD/amd64 6.1.5を準備。Xenは4.2(sysutils/xen*42)を使うことに。

インストール自体は、NetBSDの通常のインストールと同じ。カーネルもGENERICカーネルをインストールしておく。

DOM0カーネル kern-XEN3_DOM0.tgz をいったんどこかに保存しておく。

 Xenのインストールと修正

インストール

pkgsrcより、

  • sysutils/xenkernel42
  • sysutils/xentools42

をインストールする。(NetBSD Wikiのとおり、pkginでバイナリーパッケージをインストールしてもよい。)

Xenカーネルを/にコピーしておく。(これは、/usr等を別パーティションにしている人だけでいいのだが、しておく。)

 # cp /usr/pkg/xen42-kernel/xen.gz /

/boot.cfgを以下のように書き換える。

 banner=Welcome to NetBSD
 banner==================
 banner=
 banner=Please choose an option from the following menu:
 menu=Boot normally:rndseed /var/db/entropy-file;boot netbsd.generic
 menu=Boot single-user:rndseed /var/db/entropy-file;boot netbsd.generic -s
 menu=Boot Xen w/ dom0 :load /netbsd console=pc root=wd0a;multiboot /xen.gz dom0_mem=512M
 menu=Boot Xen w/ dom0 in single-user mode:load /netbsd -s root=wd0a;multiboot /xen.gz dom0_mem=512M
 menu=Go to command line (advanced users only):prompt
 timeout=5
 default=3
 clear=1

/usr/pkg/share/examples/rc.d/xen* を/etc/rc.d 以下にコピーする。

 # cp -p /usr/pkg/share/examples/rc.d/xen* /etc/rc.d

/etc/rc.confを書き換え、

xend=YES
xenbackendd=YES
xencommons=YES
xenwatchdog=NO
# xendomains=""

を追加する。

修正

もし、ハードウェア起動時、自動起動するDomUをxendomainsに指定しておく場合は、複数起動する場合、起動が重なると、起動に失敗することがあるので、/etc/rc.d/xendomainsに以下の変更を加えるとよい。

 @@ -62,6 +62,7 @@
  			file=`printf "${xendomains_config}" $domain`
  			if [ -f "$file" ]; then
  				${ctl_command} create "$file"
 +				sleep 5
  			fi
    		fi
  	done

また、完全仮想化のDomUがある場合、ハードウェアのshutown時、DomUがうまく落ちないことがあるので、以下の変更を行っておくとよい。

 @@ -90,7 +91,7 @@
  	#
  	echo "Stopping xen domains."
  	for domain in $(xendomains_list); do
 -		${ctl_command} shutdown $domain
 +		${ctl_command} shutdown $domain -F
  	done
  	while [ $timeout -gt 0 ]; do
  		livedomains=$(xendomains_list)

今回の例のように、/boot.cfgにDom0のメモリ量を指定している場合は、/usr/pkg/etc/xl.confにautoballoon=0を追加する。(コメントアウトされているので、それをはずす。)

 Xen対応カーネルへの入れ替え

Xen対応カーネルに入れ替える前に、GENERICを退避しておく。

 # cp -p /netbsd /netbsd.generic

Xen対応カーネルに入れ替える。

 # tar xzpf kern-XEN3_DOM0.tgz -C /

再起動し、xlコマンドで確認。

 # xl list
 Name                                        ID   Mem VCPUs      State   Time(s)
 Domain-0                                     0   512     1     r-----      10.9

 LVM

今回はXen用にひとつディスクを用意し、LVMで用いる。

lvmコマンド

NetBSDのlvmコマンドは、LinuxのLVMコマンド群のような感じで使える。具体的には、lvmコマンドの引数として用いる。たとえば、pvdisplayは、

lvm pvdisplay

のような感じ。

ただし、Linuxで慣れた人には、"lvm "をいちいち書くのはめんどくさい。そこで、以下のような、/usr/local/bin/lvmwrapper を作り、chmod a+xしたあと、rootで、

# /usr/local/bin/lvmwrapper create

すると、(/usr/local/binにPATHを通せば、)"lvm "を書かなくてもよいようになる。

#!/bin/sh
LVMCOMMAD=/sbin/lvm
[ "${0##*/}" = lvmwrapper -a $# -eq 0 ] && exec $LVMCOMMAD 2>&1
if [ "${0##*/}" = "lvmwrapper" -a $# -eq 1 ]; then
  case $1 in
  create) 
    for h in $($LVMCOMMAD 2>&1 | egrep '^[ 	]*(lv|pv|vg)' | awk '{print $1}')
    do
      [ -f $h ] && continue 
      echo ln -sf $0 ${0%/*}/${h}
           ln -sf $0 ${0%/*}/${h}
    done; exit;;
  remove)
    for h in $(ls ${0%/*}/lv* ${0%/*}/pv* ${0%/*}/vg* 2>/dev/null)
    do
      [ "${h##*/}" = "lvmwrapper" ] && continue
      [ ! -h $h ] && continue
      echo rm $h
           rm $h
    done; exit;;
  *)      exit 1;;
  esac
fi
if [ -f ${0%/*}/${0##*/} ]; then
  # echo $LVMCOMMAD ${0##*/} $@
  exec $LVMCOMMAD ${0##*/} $@
else
  echo "${0##*/} not implemented."
  exit 1
fi

注:egrepの後の角括弧(ホチキスカッコ)の中は、スペースとタブ。コピペではもってけないので、そこだけ直して下さい。

PV作成

まず、以前別の用途に使っていたディスク、ということもあるので、先頭を潰しておく。

 # dd if=/dev/zero of=/dev/rwd1d bs=8k count=1

次に、PV (Physical Volume)を作る。

disklabelを書く。先頭を65とする。(NetBSD Guideによる。)以下のようにした。

 # disklabel wd1
 # /dev/rwd1d:
 type: ESDI
 disk: ST3500418AS
 label:
 flags:
 bytes/sector: 512
 sectors/track: 63
 tracks/cylinder: 16
 sectors/cylinder: 1008
 cylinders: 969021
 total sectors: 976773168
 rpm: 3600
 interleave: 1
 trackskew: 0
 cylinderskew: 0
 headswitch: 0           # microseconds
 track-to-track seek: 0  # microseconds
 drivedata: 0
 
 4 partitions:
 #        size    offset     fstype [fsize bsize cpg/sgs]
  a: 976773103        65     4.2BSD      0     0     0  # (Cyl.      0*- 969020)
  d: 976773168         0     unused      0     0        # (Cyl.      0 - 969020)

次に、lvmコマンドで、PVを作成する。

 # lvm pvcreate /dev/rwd1a
   Physical volume "/dev/rwd1a" successfully created

できているか確認する。

 # lvm pvdisplay
   "/dev/rwd1a" is a new physical volume of "465.76 GiB"
   --- NEW Physical volume ---
   PV Name               /dev/rwd1a
   VG Name
   PV Size               465.76 GiB
   Allocatable           NO
   PE Size               0
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               6bF0wB-Urb8-tOH9-zc0z-Ixgc-HBFe-eIxKkW

VG作成

次に、VG (Volume Group)を作る。

 # lvm vgcreate vg00 /dev/rwd1a
   Volume group "vg00" successfully created

できているか確認する。

 # lvm vgdisplay vg00
   --- Volume group ---
   VG Name               vg00
   System ID
   Format                lvm2
   Metadata Areas        1
   Metadata Sequence No  1
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                0
   Open LV               0
   Max PV                0
   Cur PV                1
   Act PV                1
   VG Size               465.76 GiB
   PE Size               4.00 MiB
   Total PE              119234
   Alloc PE / Size       0 / 0
   Free  PE / Size       119234 / 465.76 GiB
   VG UUID               SKD2CL-3UXV-AX8m-dD7X-soUv-03Yx-bigasL

LV作成

次に、いよいよ、LV (Logical Volume)を作成する。これが、ディスクの代わりになる。

たとえば、NetBSDのDOMUをインストールする領域として、30G必要、というときは、

 # lvm lvcreate -L 30G -n lvNetBSD vg00
   Logical volume "lvNetBSD" created

などとつくる。(他も同様に作っておく。)

現状を確認する。

 # lvm lvdiskplay vg00

反映する。

 # lvm vgchange -a y

/etc/rc.confに以下を追記する。

 lvm=YES

NetBSD/i386

 インストールなど

最初は手始めに、NetBSD/i386のDomUから。準仮想化で。

# NetBSD 6 STABLEのisoを使っているのは他意はない。単に手元に作っておいてあったので。

使ったインストール用DomU設定ファイル。この例ではiso imageを用意しているけど、別になくてもよい。(ネットワークからインストールできる。)

 kernel = "/xen/kernels/netbsd32/netbsd-INSTALL_XEN3PAE_DOMU.gz"
 memory = 256
 name = "netbsd32"
 vif = [ 'bridge=bridge0' ]
 disk = [ 'phy:/dev/mapper/vg00-lvNetBSD,0x1,w',
          'file:/opt/tmp/NetBSD-6.1_STABLE-i386.iso,0x2,r' ]
 on_reboot = 'destroy'
 on_crash = 'destroy'
 on_poweroff = 'destroy'

このファイルを/usr/pkg/etc/xen/netbsd32に保存し、xl create netbsd32 -c すると、無事起動した。そのあと、

いつもの、インストーラがみえた。

このあと、"x: Exit Install System"を選択し、プロンプトに落ちた後、MBRパーティションを作成する。

 # fdisk -u xbd0
  • Do you want to change our idea of what BIOS thinks? [n] -> このまま
  • Which partition do you want to change?: [none] -> 0
  • sysid: [0..255 default: 169] -> このまま(169)
  • start: [0..3916cyl default: 63, 0cyl, 0MB] -> このまま(63セクタ、これ重要)
  • size: [0..3916cyl default: 62914497, 3916cyl, 30720MB] -> 全部なのでこのまま
  • bootmenu: [] -> このまま
  • Which partition do you want to change?: [none] -> このまま
  • Should we write new partition table? [n] -> y

MBRパーティション作成後は、"sysinst"と入力してインストーラを起動。続きをやる。

このあとは、いつものとおり。注意点としては、上記の例でいうと、ファイルシステムを(aパーティションは)FFSv1にすること(sysinstのデフォルトはFFSv2)、disklabelの設定の際、aパーティションの開始を63セクタにすること(0になっていて、フォーマットに失敗するので)、である。

インストールが終わったら、DOMUカーネルのインストールを行う。上記の例は、ISOがあるので、

 # mount -t cd9660 /dev/xbd1a /mnt
 # mount /dev/xbd0a /mnt2
 # cp /mnt/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz /mnt2
 # gunzip /mnt2/netbsd-XEN3PAE_DOMU.gz

とする。

最後に、pygrubのための、menu.lstを作る。vi等はないので、edをつかうか、catを使うかして、以下の内容で /mnt2/grub/menu.lstをつくる。(grubのインストールは必要ない。)

default=0
timeout=5

title xbd0: NetBSD 6.1.5 XEN3PAE_DOMU
root (hd0,0)
kernel netbsd-XEN3PAE_DOMU

通常用のDomU設定ファイルと入れ替える。

 bootloader = "/usr/pkg/bin/pygrub"
 memory = 256
 name = "netbsd32"
 vif = [ 'bridge=bridge0' ]
 disk = [ 'phy:/dev/mapper/vg00-lvNetBSD,0x1,w' ]
 on_reboot = 'restart'
 on_crash = 'restart'
 on_poweroff = 'destroy'

起動すると、いたって変わりのないNetBSDのloginプロンプト。

あとは、Howto等をみてこまごま設定。

  • /etc/ttys: constty以外off
  • /etc/rc.conf
    • wscons=YESを消す
    • postfix=NOを追加
    • inetd=NOを追加
    • sshd=YESを追加

 注意点

ディスクの名前

インストールディスクが、設定ファイルのdiskの項の順番どおり、xbd0, xbd1, ... となる。(上の例でいけば、xbd1 がiso imageになるので、インストールをCD-ROMからを選ぶとき、デバイス名を、xbd1aにしないといけないということ。)

Python文法の廃止?

設定ファイルのPython文法のサポートが4系では廃止されている。+= とか使えなくなっている。

OpenBSD/i386

 インストール

OpenBSDは、Xenへの対応は進んでいない。よって、完全仮想化で動かす。

最初に、5.5のiso image (install55.iso)をダウンロードしてくる。

install55.isoは大きすぎる、なんてひとは、ネットワークインストール用のiso imageであるcd55.iso cdemu55.isoを取ってこれば良い。

使ったインストール用DomU設定ファイル。

 builder='hvm'
 memory = 256
 name = "openbsd32"
 vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
 disk = [ 'phy:/dev/mapper/vg00-lvOpenBSD,hda,w',
          'file:/opt/tmp/install55.iso,hdc:cdrom,r' ]
 vnc=1
 vncconsole=0
 vncunused=0
 vncdisplay=0
 vnclisten="10.0.8.8"
 acpi = '1'
 boot='d'
 serial='pty'
 on_reboot = 'destroy'
 on_crash = 'destroy'
 on_poweroff = 'destroy'

以前、ne2k_pciのioemuがないと、通信が安定しなかった(?)ので、今回もそうする。(実際、この設定がないと、実用できない。)

準仮想化と違い、画面はVNCに出すことになる。上記の例では、10.0.8.8(Dom0)にVNCクライアントでアクセスすることになる。NetBSDの場合、pkgsrcのnet/vncviewerを使うとよい。

xl create して起動し、vncviewerで接続したところ。

あとは、通常どおりインストールしていく。

途中、sshdを有効にするかどうかきかれるので、有効にしておく。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

 builder='hvm'
 memory = 256
 name = "openbsd32"
 vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
 disk = [ 'phy:/dev/mapper/vg00-lvOpenBSD,hda,w' ]
 vnc=1
 vncconsole=0
 vncunused=0
 vncdisplay=0
 vnclisten="10.0.8.8"
 acpi = '1'
 boot='c'
 serial='pty'
 on_reboot = 'restart'
 on_crash = 'restart'
 on_poweroff = 'destroy'

vncviewerで接続すると、

起動できた。

そのまま、vncviewer経由でrootでloginして、xl consoleが使えるようにする。

/etc/ttys を

 console   "/usr/libexec/getty std.9600"   vt220  on secure

とする。(off -> on。)

/etc/boot.conf を作成し、

 set tty com0

と書く。

あと、/etc/rc.shutdown の powerdown=YES にする。

いったんshutdown -hp nowして、xl shutdown したあと、設定ファイルをvnc=0に直したあと、再度、xl create -c すると、

xl console からも使えるようになった。

DragonFly BSD/i386

 インストール

DragonFly BSDは、Xenへの対応は進んでいない。よって、完全仮想化で動かす。

最初に、3.8.2のiso image (dfly-i386-3.8.2_REL.iso.bz2)をダウンロードしてくる。

使ったインストール用DomU設定ファイル。

builder='hvm'
memory = 256
name = "dragonflybsd32"
#vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
#vif = [ 'bridge=bridge0, type=ioemu, model=pcnet' ]
vif = [ 'bridge=bridge0' ]
disk = [ 'phy:/dev/mapper/vg00-lvDragonFlyBSD,hda,w',
         'file:/opt/tmp/dfly-i386-3.8.2_REL.iso,hdc:cdrom,r' ]
vnc=1
vncconsole=0
vncunused=0
vncdisplay=0
vnclisten="10.0.8.8"
acpi = '1'
boot='d'
serial='pty'
on_reboot = 'destroy'
on_crash = 'destroy'
on_poweroff = 'destroy'

OpenBSDとほぼ同じ。

xl create して起動し、vncviewerで接続して、しばらくしていると、

あとは、通常のインストールと同じ。最後に、再起動すると、DomUの設定ファイルのとおり、いったんdestroyする。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

builder='hvm'
memory = 192
name = "dragonflybsd32"
#vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
#vif = [ 'bridge=bridge0, type=ioemu, model=pcnet' ]
vif = [ 'bridge=bridge0' ]
disk = [ 'phy:/dev/mapper/vg00-lvDragonFlyBSD,hda,w' ]
vnc=1
vncconsole=0
vncunused=0
vncdisplay=0
vnclisten="10.0.8.8"
acpi = '1'
boot='c'
serial='pty'
on_reboot = 'restart'
on_crash = 'restart'
on_poweroff = 'destroy'

vncviewerで接続すると、

こんな感じで起動して、

起動できた。

そのまま、vncviewer経由でrootでloginして、xl consoleが使えるようにする。

/etc/ttys を

 console	"/usr/libexec/getty std.9600"   vt100  on secure

とする。そして、ttyv[0-8]の行をコメントアウトする。

/boot/loader.conf を

 console="comconsole"

と書く。

いったんshutdown -p nowして、xl shutdown したあと、設定ファイルをvnc=0に直したあと、再度、xl create -c すると、

xl console からも使えるようになった。

FreeBSD/i386

 インストール

Google大明神に訊いてみると、FreeBSD 10のXen環境は前途多難なようで、とりあえず、9の最新(9.2)で動かすことにする。

準仮想化のカーネルは自分でビルドしないとないので、まずは、完全仮想化で動かすことにする。

最初に、9.2のiso imageをダウンロードしてくる。"disc1"だけでよい。

iso imageをとってくるには大きすぎる、なんてひとは、インストール用のiso imageを取ってこれば良い。bootonlyがそれで、必要なものはネットワークからそのつどダウンロードする、いわゆるネットワークインストールになる。

使ったインストール用DomU設定ファイル。

builder='hvm'
memory = 256
name = "freebsd32"
#vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
#vif = [ 'bridge=bridge0, type=ioemu, model=pcnet' ]
vif = [ 'bridge=bridge0' ]
disk = [ 'phy:/dev/mapper/vg00-lvFreeBSD,hda,w',
         'file:/opt/tmp/FreeBSD-9.2-RELEASE-i386-disc1.iso,hdc:cdrom,r' ]
vnc=1
vncconsole=0
vncunused=0
vncdisplay=0
vnclisten="10.0.8.8"
acpi = '1'
boot='d'
serial='pty'
on_reboot = 'destroy'
on_crash = 'destroy'
on_poweroff = 'destroy'

DragonFly BSDとほぼ同じ。

xl create して起動し、vncviewerで接続したところ。

あとは、通常どおりインストールしていく。インストールの最後の方で、sshdを有効にしてくるかどうかをきいてくるので、有効にしておく。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

builder='hvm'
memory = 256
name = "freebsd32"
#vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
#vif = [ 'bridge=bridge0, type=ioemu, model=pcnet' ]
vif = [ 'bridge=bridge0' ]
disk = [ 'phy:/dev/mapper/vg00-lvFreeBSD,hda,w' ]
vnc=1
vncconsole=0
vncunused=0
vncdisplay=0
vnclisten="10.0.8.8"
acpi = '1'
boot='c'
serial='pty'
on_reboot = 'restart'
on_crash = 'restart'
on_poweroff = 'destroy'

vncviewerで接続すると、

起動できた。

そのまま、vncviewer経由でrootでloginして、xl consoleが使えるようにする。

/etc/ttys を

 console	"/usr/libexec/getty std.9600"   vt100  on secure

とする。そして、ttyv[0-8]の行をコメントアウトする。

/boot/loader.conf を

 comconsole_speed="9600"
 console="comconsole,vidconsole"

と書く。

いったんshutdown -p nowして、再度、xl create -c すると、xl console側にちゃんと出てきて、

xl console からも使えるようになった。

MirOS BSD/i386

 インストール

MirOS BSD(MirBSDともいう)は、Xenへの対応は進んでいない。よって、完全仮想化で動かす。

最初に、currentのiso image (cdrom10.iso)をダウンロードしてくる。MirOS BSDは、安定版が2008年より出ておらず、公式として、currentの利用が推奨されている。このISOイメージは、インストーラだけのイメージで、インストール時、ネットワーク接続が必須である。

使ったインストール用DomU設定ファイル。

builder='hvm'
memory = 256
name = "mirbsd32"
vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
disk = [ 'phy:/dev/mapper/vg00-lvMirBSD,hda,w',
         'file:/opt/tmp/cdrom10.iso,hdc:cdrom,r' ]
vnc=1
vncconsole=0
vncunused=0
vncdisplay=0
vnclisten="10.0.8.8"
acpi = '1'
boot='d'
serial='pty'
on_reboot = 'destroy'
on_crash = 'destroy'
on_poweroff = 'destroy'

OpenBSDとだいだいおなじ。

xl create して起動し、vncviewerで接続したところ。

あとは、ふつうにインストールしていく。

途中、sshdを有効にするかどうかきかれるので、有効にしておく。

途中、コンソールをcom0にするかどうかきかれるので、そのようにしておく。

最後までいったら、shudown -hp nowして、終わる。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

builder='hvm'
memory = 256
name = "openbsd32"
vif = [ 'bridge=bridge0' ]
disk = [ 'phy:/dev/mapper/vg00-lvMirBSD,hda,w' ]
vnc=0
vncconsole=0
vncunused=0
vncdisplay=0
vnclisten="10.0.8.8"
acpi = '1'
boot='c'
serial='pty'
on_reboot = 'restart'
on_crash = 'restart'
on_poweroff = 'destroy'

xl create -c すると、

xl console からも使えるようになった。

その他

 BSD系

  • Bitrig: ISOを読んだところで、落ちる。手も足もでない。
  • MidnightBSD: デスクトップ志向のなので、試さなかった。
  • JabirOS: プロジェクトのトップページにダウンロードリンクがないので、やる気がないとみなしている。(実態がないような気もする。)
  • EdgeBSD: NetBSDを立ち直らさせる?のが目的のようなので、いじる価値なし。
  • Debian/kFreeBSD: ISOを読んでところで、落ちる。手も足も出ない。

 Linux

  • CentOS: まだ試していない。
  • Ubuntu: まだ試していない。
  • Debian GNU/Linux: まだ試していない。
  • Gentoo Linux: まだ試していない。
  • Arch Linux: まだ試していない。

 その他

  • OpenIndiana: Xenのサポートがなくなったので、やる気がない。
  • OSv: リクエストがあった。まだ試していない。
  • Windows: 試すつもりがない。(お金がない。)

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2014年10月19日 22時49分21秒