UbuntuにKVM環境を構築する

Linux仮想マシン基盤を構築しようとしたとき、幾つかの選択肢がありますが、
KVM(Kernel-based Virtual Machine)は、Kernel2.6.30以降標準で利用可能です。
プロジェクトページ:KVM

余談ですが、KVM以前よりLinuxで仮想化を担ってきたXenについては、Kernel3.0
よりメインラインに加わったそうです。
SORCEFOGE.JP Managin:Linux 3.0がついにリリース、バージョン番号付けルールが変更に | OSDN Magazine

アーキテクチャ

KVMは、完全仮想化を提供するハイパーバイザで、仮想化支援機能を持つCPUで
動かすことが必須になります。
このため、Intel系ではIntel VT-x。AMD系ではAMD-V対応CPUである必要があります。

ここでは、以下のような構成でシステムを構築したいと思います。

KVM/QEMU KVM基本構成KVM
libvirt 仮想環境管理用APIlibvirt: The virtualization API
virt-manager 仮想環境GUI管理ツールhttp://virt-manager.org/index.html

なお、KVM自体の仕組みについては下記の記事が参考になるでしょう。
http://www.computerworld.jp/topics/602/%E4%BB%AE%E6%83%B3%E5%8C%96/111429/%E3%80%8CKVM%E3%80%8D%E2%80%95%E2%80%95Linux%E6%A8%99%E6%BA%96%E3%81%AE%E4%BB%AE%E6%83%B3%E5%8C%96%E6%A9%9F%E8%83%BD%E3%81%AE%E5%BE%97%E6%84%8F%E9%A0%98%E5%9F%9F%E3%82%92%E7%9F%A5%E3%82%8B
Linux標準の仮想化技術「KVM」の仕組み (1/2):知って見るみるKVM(1) - @IT

インストール手順

Ubuntuへのインストールは、すべてapt-getにて標準リポジトリからインストール
可能です。
■パッケージ情報・インストール済みソフトウェアの最新化

$ sudo apt-get update
$ sudo apt-get upgrade

KVM/QEMUのインストール
$ sudo apt-get install kvm kvm-pxe

■Network(Bridge)の設定
ここでは、eth0を利用したブリッジインタフェースを作成する手順です。
$ sudo vi /etc/network/interfaces
--
# The primary network interface
auto eth0
iface eth0 inet manual

# The KVM Bridge network interface
auto br0
iface br0 inet static
        address         192.168.xxx.ooo
        netmask         255.255.255.0
        network         192.168.xxx.0
        broadcast       192.168.xxx.255
        gateway         192.168.xxx.254
        dns-nameservers 192.168.xxx.254
        bridge_ports    eth0
--
$ sudo /etc/init.d/networking restart
$ sudo ifconfig

libvirtおよび、virt-managerのインストール
$ sudo apt-get install libvirt0 libvirt-bin virt-manager

※インストール後、管理ツールを利用するユーザをkvmと
 libvirtdグループに所属させる必要がある

$ sudo /etc/init.d/libvirt-bin restart

以上。

Ubuntu 11.04でHDD Active Protection Systemを使う

若干毛色の違うエントリーですが、最近余剰なThinkPad X61を入手したので
Linux Desktopマシンとして利用しようと思い立ち、Ubuntu Desktop 11.04を
インストールしてみた。

ThinkPadを利用するからには"HDD Active Protection System"というLenovo(旧IBM)の
加速度センサーを用いた、振動(衝撃)によるHDD障害を防ぐ機能を使用したいと思い
Linuxで利用可能かどうか調べてみた結果、Kernelモジュールで対応できるようだ

インストール手順

いろいろと調べた結果、TP SMAPIというKernelモジュールを導入することにより
利用可能なようで、Tp smapi - ThinkWikiを参考に以下の手順でインストールを行ってみた。

# apt-get install hdapsd
# lsmod | grep hdaps
hdaps                  14062  0 
input_polldev          14007  1 hdaps

# apt-get install tp-smapi-source
# rmmod hdaps
# modprobe -a hdaps tp_smapi
# lsmod | grep hdaps
hdaps                  19207  0 
thinkpad_ec            14450  2 tp_smapi,hdaps

※正常にKernelモジュールがロードされたことを確認
# dmesg
[ 1257.149709] hdaps: inverting axis (3) readings.
[ 1257.149712] hdaps: LENOVO ThinkPad X61 detected.
[ 1257.151298] input: hdaps as /devices/platform/hdaps/input/input7
[ 1257.151380] hdaps: driver successfully loaded.
[ 1382.830373] hdaps: driver unloaded.
[ 1417.814238] thinkpad_ec: thinkpad_ec 0.40 loaded.
[ 1417.816537] hdaps: LENOVO ThinkPad X61 detected, setting orientation 6
[ 1417.817672] hdaps: initial mode latch is 0x05
[ 1417.817816] hdaps: setting ec_rate=250, filter_order=2
[ 1417.818038] hdaps: device successfully initialized.
[ 1417.820640] input: ThinkPad HDAPS joystick emulation as /devices/virtual/input/input8
[ 1417.822413] input: ThinkPad HDAPS accelerometer data as /devices/virtual/input/input9
[ 1417.824002] hdaps: driver successfully loaded.
[ 1417.825902] tp_smapi 0.40 loading...
[ 1417.827913] tp_smapi successfully loaded (smapi_port=0xb2).

# vi /etc/modules
※下記3行を追記
# ThinkPad ActiveProtection
tp_smapi
hdaps

# /etc/init.d/hdapsd start

以上。

実行可能なjarでlogbackが正常に動作しない

slf4j+logbackな環境で、コマンド実行するプログラムを書いた際、
ログ出力がうまくいかず、苦労したので備忘録に。。。

"URL [rsrc:logback.xml] is not of type file"ってなに?

eclipseで実行していたときには、正常にロギングされていたのだが、
いざ、jarに固めコマンドプロンプトから実行すると、下図のエラー
メッセージが表示され、正常に動作させることが出来なかった。


コンソール出力されたメッセージを追ってみると以下のような
エラーメッセージを発見。

21:01:57,765 |-ERROR in ch.qos.logback.core.joran.spi.Configuration
WatchList@12558d6 - URL [rsrc:logback.xml] is not of type file
ここから長い調査の旅が始まったのですが、結論を説明するとコレ。
[LOGBACK-150] Logback complains if logback.xml is in a jar - QOS.ch JIRA
logback 0.9.28の既知のバグの様で、設定ファイルであるlogback.xml
JARやWARなど、アーカイブされている場合に発生するようです。

回避策

さてここで、logback.xmlファイルの設置場所について
もう一度考えると「CLASSPATHが通してある場所」である。

カレントディレクトリがデフォルトでCLASSPATHに含まれている事を
前提としてjarからlogback.xmlを排除し、カレントディレクトリに
生のlogback.xmlを配置することで正常に動作させることが出来た。

検証プログラム

ライブラリ
slf4j-api-1.6.1.jar
logback-core-0.9.28.jar
logbacl-classic-0.9.28.jar

プロジェクト構成

App.java

package example.logback_test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class App 
{
	private static Logger logger = LoggerFactory.getLogger(App.class);
	
    public static void main( String[] args )
    {
    	logger.info("Hello slf4j+logback World!!");
        System.out.println( "Hello slf4j+logback World!!" );
    }
}

logback.xml


	
		System.out
		
			[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level] %class - %msg%n
		
	
  
	
		
			logs/applog.%d{yyyy-MM}.log
			1
		
		
			UTF-8
			[%-5level][%d{yyyy-MM-dd HH:mm:ss.SSS}] %class - %msg%n
		
	

	
		
		
		
	
  

今月の読本

以前、Vol.1を紹介しましたがVol.2が出ていたのでこちらも購入。

ITアーキテクトのやってはいけないVol.2 (日経BPムック)

ITアーキテクトのやってはいけないVol.2 (日経BPムック)

クラウドiPhone/Androidなど、注目のキーワードについて書かれており、
手元に置いておくと、ふとしたときの参考になりそうです。

今月の読本

このところ、触手の働く雑誌・書籍にめぐり合えていなかったのですが、
今月はこの2冊の雑誌を購入してみました。

日経ソフトウエア

日経ソフトウエア 2011年 03月号 [雑誌]

日経ソフトウエア 2011年 03月号 [雑誌]

まだ、購入したばかりなので隅々まで目を通していないのですが、
特集記事がかなり面白そう。
とくに「特集2」と「特集3」。

ソフトウェアエンジニア・インフラエンジニア関係なく抑えておくべき
ポイントではないでしょうか?

Software Design

Software Design (ソフトウェア デザイン) 2011年 02月号 [雑誌]

Software Design (ソフトウェア デザイン) 2011年 02月号 [雑誌]

こちらはまだ立ち読みレベルですが、第一特集がなかなか。
業務で実践できるかは別として、便利そうなコマンドが色々と
紹介されています。

ドキュメント管理については、個人的にはSubversionではなく
Gitのほうがよいのかなと最近思い始めていますが、、、

もっとも、自分自身Gitについては勉強不足なので
まずは理解を深めてみないとw

EclipseでPython

ご無沙汰しております。
先日、Solaris 11 Expressをインストールしてみたところ、
Pythonが標準で含まれていました。

XenGentoo Linuxのemergeなどの制御スクリプトからJythonまで、
様々な分野でPythonが取り入れられている現状を垣間見ると
一技術者として学んでおく必要を感じております。

前置きが長くなりましたが、今回はWindowsクライアントにPython
開発環境を準備した際のメモを残したいと思います。

Python開発環境 Eclipse Plug-in PyDev

最近、Java,PHPの開発環境としてEclipseを使用することが多く、
Pythonの開発環境用Plug-inがないかと探したところ、PyDevを発見しました。
PyDevにはコード補完・シンタックスハイライト・定義へのジャンプ
リファクタリング機能・デバッグ機能等、便利な機能が用意されています。

右も左もわからない中での環境構築が、手間がかかりそうだったので
PleiadesPython開発環境を利用することにしました。

Pleiades Python開発環境

いわずとしれたPleiadesですが、Python用の「Full All in One」を
選択することで、Pythonの実行環境も含め必要な環境が一通り準備可能です。

PleiadesダウンロードサイトEclipse 日本語化 | MergeDoc Project

なお、2010年12/22現在では Eclipse 3.4.2 Ganymede SR2 32bit ベース のものが
Python開発環境の最新です。

ダウンロードしたZipファイルを展開し、適当なディレクトリに設置するだけで
開発環境を準備することが出来ました。

Windows環境変数を設定する。

上記の操作のみでも、開発環境として利用可能なのですが、
ライブラリのインストールなどが便利なように環境変数を設定します。

[設定する環境変数]

環境変数 設定例
PYTHONPATH C:\Developments\python-dev\python\Lib\site-packages
Path C:\Developments\python-dev\python\
※C:\Developments\python-devは私の環境下で設定となっておりますので
 各々のPleiades展開先のパスを指定してください。
※Pathは既存の変数値に追記です。既存の変数値は消さないでください。

とりあえず、以上。

DebianにSun JDK6をインストールする

Debian 5.0.6にSun JDK6をインストールしてみた。
若干めんどくさかったのでメモ

インストール準備

Sun Java JDKはnon-freeとして管理されているため、
/etc/apt/source.listに設定を追加する

deb http://ftp.jp.debian.org/debian lenny main non-free
追記後、"aptitude update"を実行。

また、"jdk-docs"をOracleよりダウンロードし、/tmpに設置しておく必要があるが、
インストールするJDKのアップデートバージョンにより必要となる ファイル名が異なるため、
インストール時のメッセージにあわせてファイルを準備する必要がある
This package is an installer package, it does not actually contain the
JDK documentation.  You will need to go download one of the
archives:

    jdk-6u12-docs.zip jdk-6u12-docs-ja.zip

(choose the non-update version if this is the first installation).
Please visit

    http://java.sun.com/javase/downloads/

now and download.  The file should be owned by root.root and be copied
to /tmp.
※該当のアップデートバージョンのjdk-docsを見つけられなかったため、
 jdk-6u10-docs-ja.zipとjdk-6u22-docs.zipをリネームして利用。

インストール

"jdk-6u12-docs.zip"と"jdk-6u12-docs-ja.zip"を/tmpにrootユーザで配置し、
下記のインストールコマンドを実行する。

# aptitude install sun-java6-bin sun-java6-jdk sun-java6-source sun-java6-fonts sun-java6-doc sun-java6-plugin
以上

Sun Java環境を用意するなら、LinuxであればRHELCentOSなどの
RPMでパッケージ管理している環境がベストだと思ってしまったw