OpenVZ(Fedora Core 4 デスクトップ編)

OpenVZ(Open Virtuozzo)はSWsoft社が中心になって開発しているオープンソースのOS仮想化ソフトです(ハードウェアの仮想化は行いません)。
Virtuozzo自体は有償ですがそのオープンソース版がOpenVZという位置付けとなります。
OpenVZは将来的にFedora Coreに標準で組み込まれる可能性もあります。

※OpenVZに類似したソフトウェアとしてLinux-VServerがあります。

OpenVZ環境上で動作するOSを仮想プライベートサーバ(VPS:Virtual Private Server)と呼びます。
OpenVZはOSレベルで仮想化を実現しておりOpenVZ自体を導入できるOSも現状では限られています。
※OSレベルでの仮想化とはホストOSのカーネルでVPSを動作させ、ホストOSのファイルシステムの一部をVPSに割当てることを指します。
VPSの最初のインストールは予め用意されたOpenVZ対応パッケージからOpenVZ用ツールを使用して行います。
このためVPSとなるOSも限られています。

OpenVZは以下の特徴を持ちます。


本来のOpenVZはVPSをサーバ用途に使用するものなのですがVPSをGUI操作したいというニーズもあるかと思います。
そこでここではホストOSへのOpenVZの導入、デフォルトVPSの作成、及びそのVPSをGUI操作する環境構築の手順例を紹介します。

[環境]
・ホストOS: CentOS 4.3
・OpenVZカーネル: 2006年3月リリース版
・VPS: FC4(Fedora Core 4)

尚、VPSのGUI操作はVNCクライアントまたはXサーバからの接続となります。


  1. ホストOSへのOpenVZの導入


  2. FC4テンプレートキャッシュのダウンロード
    http://openvz.org/download/template/cache/から下記をダウンロードします。
    (1)fedora-core-4-i386-default.tar.gz ※111MBあります。
    ダウンロードしたこのファイルは/vz/template/cache/に移動させておく必要があります。
    # mv fedora-core-4-i386-default.tar.gz /vz/template/cache/

    [補足]
    fedora-core-4-i386-default.tar.gzは通常のファイルシステムにある/bin,/dev./etc,/usr等のディレクトリ/ファイルを圧縮したファイルです。
    (デスクトップ環境用ファイルは含まれません)
    関心のある方はfedora-core-4-i386-default.tar.gzに含まれるディレクトリ/ファイル一覧をご欄下さい。

  3. VPSの作成と基本設定
    VPSの作成は以下のコマンドで行います(1〜2分程度で完了します)。
    101はVPSに付与する識別番号でVPSIDと呼ばれるものです。
    ※同じテンプレートキャッシュから識別番号の異なる複数のVPS群を作成することも可能です。

    # vzctl create 101 --ostemplate fedora-core-4-i386-default

    上記コマンドでVPSにインストールされるパッケージ一覧はこちらです。
    作成されたVPSの/boot/や/lib/modules/は空の状態ですがそのままで問題ありません。

    次にVPSの設定を以下のように行います。
    ここで設定した内容は/etc/sysconfig/vz-scripts/101.confに保存されます。
    # vzctl set 101 --hostname vzfc4 --save
    # vzctl set 101 --ipadd VPSのIPアドレス --save
    # vzctl set 101 --nameserver DNSアドレス --save
    # vzctl set 101 --diskspace 4194304:4613736 --save (※ディスク容量の4GB化用)

    [補足]
    VPS作成の段階ではVPS内にはVPS用ネットワーク環境は構築されません。
    VPS内でのVPS用ネットワーク環境構築は実際にVPSを起動した際にOpenVZ/vzctlによって自動的に行われます。

  4. VPS設定ファイルのチューニング
    VPSの作成で自動作成されるVPS設定ファイル(/etc/sysconfig/vz-scripts/101.conf)はサーバ用途向けになっています。
    しかしデスクトップ用に使用する場合には若干の設定変更が必要です。
    ここでのVPS設定ファイルのチューニングは以下のようにします。

    [変更前]
    AVNUMPROC="40:40"
    NUMPROC="65:65"
    VMGUARPAGES="6144:2147483647"  *VPSに割り当てるページ数(4KB単位)
    KMEMSIZE="2752512:2936012"    *kernel用のメモリ
    DCACHESIZE="1048576:1097728"
    CPUUNITS="1000"
    

    [変更後]
    AVNUMPROC="256:256"
    NUMPROC="256:256"
    VMGUARPAGES="131072:2147483647"  *VPSに割り当てるページ数(4KB単位)で131072は512MBを示します。
    KMEMSIZE="2147483647:2147483647" *kernel用のメモリを実質制限しない設定です。
    DCACHESIZE="1048576:2147483647"  *この設定は特に重要でシステム全体のメモリを効率的に使用できます。
    CPUUNITS="5000"
    

  5. VPSの起動とrootパスワード設定
    (1)VPSの起動
    # vzctl start 101

    [補足]
    VPSの起動時VPS設定ファイルに基づいてVPS内のネットワーク環境がOpenVZ/vzctlによって自動的に構築されます。
    例えば下記ファイルが設定されます。
    ・/etc/sysconfig/networkへのVPSのゲートウェイアドレスやホスト名の設定
    ・/etc/sysconfig/network-scripts/ifcfg-venet0とifcfg-venet0:0の設定
    ・/etc/resolv.confの設定
    ・/etc/hostsへのVPSホスト名設定

    (2)rootパスワードの設定
    # vzctl exec 101 passwd
    New UNIX password: ********
    Retype new UNIX password: ********
    Changing password for user root.
    passwd: all authentication tokens updated successfully.
    
    「vzctl exec」を使用することでVPS内のコマンドを自由に実行することが可能となります。

  6. VPSへのssh接続と/etc/sysconfig/networkの変更
    ssh root@vzfc4でVPSにsshでログインします。
    /etc/sysconfig/networkを編集してゲートウェイアドレスを変更します。
    ※OpenVZ/vzctlがデフォルトで設定した仮想ゲートウェイアドレスではかなり低速となるため実際のゲートウェイアドレスにします。
    変更後、下記コマンドでネットワークを再起動します。
    # /etc/init.d/network restart

  7. VPS内へのyumのインストール
    OpenVZでのVPS用テンプレート(パッケージ)にはyumは含まれていません。
    そこでyumを以下の操作で導入します。

    下記の指定例はある時点のURLとパッケージバージョンのものです。
    実際にはyum導入時点の最新のURLとパッケージバージョンに読み替える必要があります。
    # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/core/updates/4/i386/yum-2.4.1-1.fc4.noarch.rpm
    # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/core/updates/4/i386/libxml2-python-2.6.20-1.FC4.i386.rpm
    # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/core/4/i386/os/Fedora/RPMS/python-elementtree-1.2.6-4.i386.rpm
    # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/core/4/i386/os/Fedora/RPMS/python-sqlite-1.1.6-1.i386.rpm
    # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/core/updates/4/i386/rpm-python-4.4.1-22.i386.rpm
    # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/core/4/i386/os/Fedora/RPMS/python-urlgrabber-2.9.6-1.noarch.rpm
    
    # rpm -ivh libxml2-python-2.6.20-1.FC4.i386.rpm
    # rpm -ivh python-elementtree-1.2.6-4.i386.rpm
    # rpm -ivh python-sqlite-1.1.6-1.i386.rpm
    # rpm -ivh rpm-python-4.4.1-22.i386.rpm
    # rpm -ivh python-urlgrabber-2.9.6-1.noarch.rpm
    # rpm -ivh yum-2.4.1-1.fc4.noarch.rpm
    
  8. /etc/yum.repos.d/fedora.repoのgpgkey変更
    /etc/yum.repos.d/fedora.repo中の「gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora」を
    「gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY」に変更します。

  9. X Window System環境構築用前提パッケージのインストール
    パッケージの依存関係の都合上、"X Window System"をインストールする前にその前提パッケージとなるmodule-init-toolsをインストールします。
    module-init-toolsのインストール中にvzdevとdummy-fedora-core-4のパッケージが自動的にアンインストールされてしまいます。
    特にvzdevパッケージのアンインストールでは/devに残るのはinitctl,log,ptsだけです。
    /dev/random(urandom)が存在しなければVPSにログインすることもできなくなってしまいます。
    そこでmodule-init-toolsインストールはファイルのバックアップ、回復含めて以下のように行います。

    # cp -a /tmp/dummy-fedora-core-4-file /tmp/dummy-fedora-core-4-file.org
    # cp -a /dev /dev.org
    # yum install module-init-tools
    # mv /tmp/dummy-fedora-core-4-file.org /tmp/dummy-fedora-core-4-file
    # mv /dev /dev.notuse
    # cp -a /dev.org /dev

  10. "X Window System"パッケージグループのインストール

    # yum groupinstall "X Window System"

    /etc/X11/xorg.confは無くてもVNCやCygwin/X(Xサーバ)からの接続はできます。
    しかしここではダミーのxorg.confファイルを用意しておくことにします。
    その内容のサンプルはこちらです。

  11. "GNOME Desktop Environment"パッケージグループのインストール

    # yum groupinstall "GNOME Desktop Environment"

  12. "XFCE"パッケージグループのインストール
    GNOME起動ではいくつかのエラーが発生します。
    そのためOpenVZ環境で安定動作する"XFCE"パッケージグループのインストールをお奨めします。

    # yum groupinstall "XFCE"

  13. KDEのインストール
    KDEのパッケージグループの他にKDE日本語化パッケージ(kde-i18n-Japanese)もインストールします。

    # yum groupinstall "KDE (K Desktop Environment)"
    # yum install kde-i18n-Japanese

  14. Xアプリケーションのインストール(任意)
    ここではfirefoxとgimpをインストールしてみます。

    # yum install firefox
    # yum install gimp* (ワイルドカード指定でインストール)

  15. 日本語環境の構築


  16. Xvfbの導入とgdm設定
    vncserverでgdmを使用する場合、Xサーバを必要とします。
    Xサーバはtty0を必要としますがVPS環境には/dev/tty0がありません。
    このため通常のXサーバ使用ではgdm起動時にtty0がないため起動できないという問題があります。
    その対策としてtty0を前提としないXサーバとしてXvfbを導入します。


  17. glibc-commonのupdate
    gdm画面のメニューを日本語表示させたり、言語メニューに「日本語」が表示されるようにglibc-commonをupdateします。

    # yum update glibc-common

  18. VPSの再起動
    ホスト側より以下のコマンドでVPSを再起動させます。

    # vzctl stop 101
    # vzctl start 101
    または
    # vzctl restart 101

  19. VNC接続利用
    WindowsのVNCクライアントから「vzfc4:1」指定で接続します。


  20. Cygwin/X接続利用
    Cygwin/XによるVPSとの接続用に以下のような内容をもつbatファイルを用意します。

    @echo off
    chdir C:\cygwin\usr\X11R6\bin
    set PATH=C:\cygwin\bin
    xwin -screen 0 1024 768 -query vzfc4 -from Windows側ホストアドレス -fp "tcp/vzfc4:7100"
    

    以下はCygwin/X接続でのスクリーンショットです。



    下記画像はMetacity + Nautilusでのデスクトップです(gnome-sessionは未使用)。
    ※gdmでのセッションとして「フェール・セーフの端末」を選択してログイン後、metacity &とnautilus &を実行。



  21. OpenVZカーネルのアップグレード方法
    (1)最新カーネルパッケージのダウンロード
    例:ovzkernel-2.6.8-022stab076.1.i686.rpm

    (2)アップグレードコマンドの実行
    # rpm -Uvh ovzkernel-2.6.8-022stab076.1.i686.rpm
    これによって古いOpenVZカーネル/カーネルモジュールは自動削除されます。
    またgrub.confのOpenVZ用エントリも自動更新されます。
    尚、OpenVZカーネルをアップグレードする際VPS自体は基本的に何も変更する必要はありません。


  22. ホストをFC4にした場合
    ホストとVPSのOSを一致させた場合デスクトップ操作が安定するかも知れないと考えて共にFC4で試してみました。
    結果的には「ホスト(CentOS 4)とVPS(FC4)」の方が「ホスト(FC4)とVPS(FC4)」よりも安定動作しました。

    以下の画像はFC4上のVPS(FC4)をVNCで操作している様子です。