hnakamur’s blog

ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ

ラベル ubuntu の投稿を表示しています。 すべての投稿を表示
ラベル ubuntu の投稿を表示しています。 すべての投稿を表示

2009-10-09

keychainでssh-agentを管理

man keychainによるとkeychain - re-use ssh-agent and/or gpg-agent between loginsというものだそうです。

$ sudo aptitude install keychain
$ vi ~/.bash_profile

以下の内容で作成します。

# keychain
eval `keychain --nogui --eval ~/.ssh/id_rsa`

~/.ssh/id_rsa.pubも置いておかないとなんかエラーか警告が出たので置くようにしました。

yum infoで探すとCentOSでもrpmforgeにありました。が、今の構成では不要なので試してはいません。

2009-09-29

virsh consoleを使うためにUbuntuのシリアルコンソール設定

ゲストOSのシリアルコンソール設定

SerialConsoleHowto - Community Ubuntu Documentationを参考にしました。ゲストOSを起動してシリアルコンソールを設定します。

$ sudo vi /etc/event.d/ttyS0
以下の内容で新規にファイルを作成します。
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5

stop on runlevel 0
stop on runlevel 1
stop on runlevel 6

respawn
exec /sbin/getty 115200 ttyS0
grubの設定を行います。
$ sudo vi /boot/grub/menu.lst

titleの前にserialとterminalの行を追加し、kernelパラメータにconsoleのパラメータを2つ追加します。

...
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 # ←この行を追加
terminal --timeout=5 serial console # ←この行を追加
title           Ubuntu 9.04, kernel 2.6.28-15-serveruuid            0ede7815-2475-4811-83b6-1970ab826e32
kernel          /boot/vmlinuz-2.6.28-15-server root=UUID=0ede7815-2475-4811-83b6
-1970ab826e32 ro quiet splash console=tty0 console=ttyS0,115200n8 # ←consoleパラメータを2つ追加
initrd          /boot/initrd.img-2.6.28-15-server

title           Ubuntu 9.04, kernel 2.6.28-15-server (recovery mode)uuid            0ede7815-2475-4811-83b6-1970ab826e32
kernel          /boot/vmlinuz-2.6.28-15-server root=UUID=0ede7815-2475-4811-83b6
-1970ab826e32 ro  single
initrd          /boot/initrd.img-2.6.28-15-server
...

ホストOS側のlibvirtのドメイン設定

DOMの設定ファイルにConsoles, serial & parallel devicesのconsoleタグが入っていなければゲストOSの設定を変更。

$ sudo vi /etc/libvirt/qemu/ubuntu.xml

以下のようにconsoleタグを追加。

...
    <console type='pty'>
      <source path='/dev/pts/4'/>
      <target port='0'/>
    </console>
  </devices>
</domain>

ゲストOSを止めた状態で反映。

$ sudo virsh define /etc/libvirt/qemu/ubuntu.xml

KVM/libvirtでUbuntu 9.04 server 64bit版サーバーをホストOS、32bit版サーバーをゲストOSとする環境構築

背景

Javaで4GB以上の最大メモリを使いたくてUbuntu 9.04 server 64bit版上で64bit版のJavaを使用していたのですが、32bit版でしか動かないバイナリのみ提供のとあるプログラムを動かす必要が出てきました。

Ubuntu Linux 64bit版で32bit向けバイナリを使えるようにする | おいぬま日報を参考にia32-libsを試してみましたが、いくつかライブラリが自動でインストールされたものの、お目当ての実行ファイルは結局動作せず。

武藤さんのdebian-amd64のページを見るとchrootでできるみたいですが、chrootがよくわかってない私がやるとはまりそうなのでこの道は止めました。

ということで、Ubuntu 9.04 server 64bit版をホストOSとし、Ubuntu 9.04 server 32bit版をゲストOSとする環境構築を行いました。

Ubuntu 9.04 Server 32bit版をゲストOSとしてインストール

うまくいかなかった手順

当初はKVMでCentOSをテキストモードでインストールすると同様にUbuntu 9.04 Server 32bit版のCD-ROM ISOイメージからインストールしようとしました。しかし、"640 x 480 Graphic mode"からリターンキーで進んでも一旦コンソールになったあと再び"640 x 480 Graphic mode"になってしまいます。手元の環境でVirtualBoxでインストールしながら同じようにリターンキーを押していくということも試しましたが、進んでるかどうかさっぱりわからないので止めました。

作業環境からホストOSにvnc viewerでアクセスできるようなネットワーク構成を組んでいればそれでもよかったのですが、このときは外出先からアクセスしていてsshとhttp/httpsでしかアクセスできないのでこの手は使えませんでした。

ubuntu-vm-builderを使うと簡単にインストールできます(でも結局vncは必要)

ubuntu-vm-builderでのゲストOSインストール

調べてみるとKVM Create Guests - Community Ubuntu Documentationでubuntu-vm-builderという便利なものが紹介されていました。これだと自動でインストールしてくれます。

$ sudo aptitude install ubuntu-vm-builder
$ sudo ubuntu-vm-builder --addpkg vim openssh-server --libvirt qemu:///system

デフォルトで作られるアカウントのID/パスワードはubuntu/ubuntuでした。

--libvertオプションはlibvirtの管理下に登録するために必要とのこと。

--addpkgでopenssh-serverを指定しておくと最初からsshサーバーがインストールされて、ゲストOSを起動後ホストOSからsshでアクセスできるとのことなんですが、なんかうまくいかなかったようです。で、この作業をしていたときは家だったのでゲストOS起動後、LAN経由でvnc viewerでアクセスできたので、なんとかなりました。ただし、vncサーバーがデフォルトではlocalhostからしかアクセスできないようになっているので設定変更と反映が必要でした。

ゲストOSのIPアドレスを固定するようにホストOSのDHCPを設定

まずゲストOSの設定ファイルを見て

$ sudo vi /etc/libvirt/qemu/ubuntu.xml

MACアドレスを確認します。

    ...
    <interface type='network'>
      <mac address='52:54:00:52:42:d9'/>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
    ...

DHCPの設定を変更します。

$ sudo vi /etc/libvirt/qemu/networks/default.xml

適当に自動割り当てのrangeを狭くして、MACアドレスを指定した行を追加します。

<network>
  <name>default</name>
  <uuid>ae240447-f8ad-b557-a039-4e8bae931331</uuid>
  <forward mode='nat'/>
  <bridge name='virbr1' stp='on' forwardDelay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.100' end='192.168.122.254' />
      <host mac='52:54:00:52:42:d9' name='ubuntu' ip='192.168.122.11' />
    </dhcp>
  </ip>
</network>

保存したらdnsmasqを再起動します。

まずdnsmasqのPIDを調べてkillします。KVM以外でdnsmasqを動かしていなければ以下のコマンドで調べてそのままkillできます。

$ sudo kill `ps --no-heading -o pid -C dnsmasq`

ネットワーク設定をlibvirtに反映します。

$ sudo virsh net-define /etc/libvirt/qemu/networks/default.xml

ゲストOS上のvncサーバーにホストOS以外のマシンからアクセスできるようにする設定

まず現状どうなっているかの確認はpsでkvmのコマンドラインを見ます。

$ ps ww -C kvm

ホストOS上で以下の設定を行います。

$ sudo vi /etc/libvirt/qemu/ubuntu.xml

このファイルについてはlibvirt: Domain XML formatに説明があります。

以下のように<devices>のセクションにvncのエントリを追加し、listen='0.0.0.0'を追加します。

    ...
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
  </devices>
</domain>

編集したら以下のコマンドで反映します(ゲストOSは予め止めておきます)

$ sudo virsh define /etc/libvirt/qemu/ubuntu.xml

なおGraphical framebuffersの説明によるとport='-1'という書き方は古くてautoport='yes'と書けとのことでしたが、virsh defineで反映すると勝手にport='-1'も追加されていました。

再度以下のコマンドを実行して

$ ps ww -C kvm

-vncのパラメータが-vnc 0.0.0.0:0となっていればOKです。

ホストOSと同一LANにある別のマシンからゲストOSにアクセス

上の-vncのパラメータのコロンの後がディスプレイ番号(ポート番号はディスプレイ番号+5900)なので、そこにアクセスします。

MacBook/Snow LeopardからChicken of the VNC | Get Chicken of the VNC at SourceForge.netを使ってアクセスしました。

ゲストOS上にsshサーバーをインストール

vnc viewerでつなぐとコンソールのログインプロンプトが出ているのでログインしてopenssh-severをインストールします。

$ sudo aptitude install openssh-server

2009-08-20

既存のKVMのゲストOSイメージをlibvirtに登録

手順

既存のKVMのゲストOSイメージをlibvirtに登録するのは、通常の手順としては用意されていないそうです。インストールに見せかけて即座に失敗するがエントリは作られるという方法で実現します。

ここでも--os-variant=centos5を試してみたのですがやはりエラーになってしまいました。

$ sudo virt-install -n vm10 -r 512 --vcpus=1 -f vm10.qcow2 -s 12 \
> --os-type linux --accelerate --network=bridge:br0 --hvm -c /dev/null --nographics -m 52:54:00:12:34:56 --os-variant=centos5
ERROR    OS variant 'centos5; does not exist in our dictionary for OS type 'linux'
Traceback (most recent call last):
  File "/usr/bin/virt-install", line 709, in 
    main()
  File "/usr/bin/virt-install", line 590, in main
    guest.set_os_variant(options.os_variant)
  File "/usr/lib/python2.6/dist-packages/virtinst/Guest.py", line 683, in set_os_variant
    {'var' : val, 'ty' : self._os_type}
ValueError: OS variant 'centos5; does not exist in our dictionary for OS type 'linux'

--os-variantをつけずに実行するとOKでした。

$ sudo virt-install -n vm10 -r 512 --vcpus=1 -f vm10.qcow2 -s 12 \
> --os-type linux --accelerate --network=bridge:br0 --hvm -c /dev/null --nographics -m 52:54:00:12:34:56

ここで別の端末でpsでプロセスIDを調べてkill -9します。

$ sudo virsh
virsh # destroy vm10
virsh # quit

-mで指定するMACアドレスは、一旦VMを起動してifconfigで調べておいたものです。virt-installの前にはシャットダウンしておきます。

man virt-installによるとXenの場合'00:16:3e'で始まる必要があり、QEMUの場合'54:52:00''52:54:00'で始まる必要があるそうです(2011-11-25追記: MACアドレスの値が間違っていました。タイプではなくコピペすべき>自分。←実はマニュアルが修正されていたようです。Bug 620838 – mistype in virt-install manpage - 54:52 should be 52:54)。 -mを指定しないとvirt-installがランダムに生成した値になりました(確か'00:16:3e'で始まっていました)。

この後確認すると/etc/libvirt/qemu/vm10.xmlという設定ファイルが作られていました。

参考にしたページ

Ubuntuでネットワークブリッジを作成

KVM Networking - Community Ubuntu Documentationを参考にしました。

bridge-utilsパッケージをインストールします。

$ sudo aptitude install bridge-utils

/etc/network/interfacesを以下のように書き換えます。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
  address 192.168.11.102
  netmask 255.255.255.0
  gateway 192.168.11.1
  bridge_ports eth0
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

で以下のコマンドを実行します。

$ sudo /etc/init.d/networking restart

libvirt: Wiki: Networkingによると/etc/sysctl.confも変更するらしいです。

$ sudo vi /etc/sysctl.conf

追加内容

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

以下のコマンドを実行して変更を反映。

$ sudo sysctl -p /etc/sysctl.conf

KVMでCentOSをテキストモードでインストールする

KVMのインストール

基本的にはKVM Installation - Community Ubuntu Documentationに従って実行しました。

$ sudo apt-get install kvm libvirt-bin python-vm-builder qemu bridge-utils
$ sudo adduser $USER libvirtd

ゲストOS環境作成

以下のページを参考にしました。

うまく行かなかった手順

$ sudo aptitude install python-virtinst
$ qemu-img create -f qcow2 vm10.qcow2 10G
$ sudo virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=1 -f vm10.qcow2 -s 12 \
  -c CentOS-5.3-i386-bin-DVD.iso --vnc --noautoconsole --os-type linux \
  --accelerate --network=bridge:br0 --hvm

シングルコアなのでvcpusは1に。上記の2つめの記事に従って--os-variant=は指定しない(man virt-installを見ると--os-variant=centos5でよさそうなのだがやってみるとうまくいかない)。インストールは始まるが、途中で"800 x 600 Graphic mode"と表示されてしまいだめだった。

さらに--nographicsオプションをつけて実行してみたが、途中で行頭に?が表示された状態でにっちもさっちもいかなくなった。

Shadows of epiphany » Blog Archive » How to run KVM without Xというページも見つけたがこれは試していない。

うまく行った手順

ググってみるとvirt-installerは使わずに直接KVMを使えばいけるらしい。あと、qemuとkvmはコマンドレベルで互換性があり、qemuと書く代わりにkvmと書けば動くそうだ。試したらそのままいけました。QemuやKVMのドキュメントやmanを見て以下のようにした。

$ qemu-img create -f qcow2 vm10.qcow2 10G
$ sudo kvm -hda vm10.qcow2 -cdrom CentOS-5.3-i386-bin-DVD.iso -boot d -m 256 -curses

大切なのは最初に"640 x 480 Graphic mode"と表示された時。見えないがこのタイミングでCentOS5インストール - CentOSで自宅サーバー構築の1枚目のスクリーンショットの画面が表示されている。単に<ENTER>を押すとGUIインストールが始まってしまうので、linux text<ENTER>と入力すること。

試した環境

ハードウェア
HP ML115G5
CPU
AMD Athlon 1640B (2.7GHz、L2 512KB、45W、AM2)
RAM
8GB
ホストOS
Ubuntu 9.04 server i386
$ uname -a
Linux sunshine12 2.6.28-15-server #49-Ubuntu SMP Tue Aug 18 19:30:06 UTC 2009 i686 GNU/Linux
$ dpkg -l | egrep '(kvm|libvirt-bin|python-vm-builder|qemu|bridge-utils)'
ii  bridge-utils                              1.4-5                             Utilities for configuring the Linux Ethernet
ii  kvm                                       1:84+dfsg-0ubuntu12.3             Full virtualization on i386 and amd64 hardwa
ii  libvirt-bin                               0.6.1-0ubuntu5.1                  the programs for the libvirt library
ii  python-vm-builder                         0.10-0ubuntu2                     VM builder
ii  qemu                                      0.10.0-1ubuntu1                   fast processor emulator

ブログ アーカイブ