FreeVPS(CentOS 4デスクトップ編)

FreeVPSはLinux-VServerをベースに拡張した仮想サーバソフトです。
この仮想サーバから見える仮想ファイルシステムはホストOSの実ファイルシステムの一部でありchrootの応用技術で実装されています。
仮想サーバが使用するホストOSのカーネルをFreeVPSカーネルと呼びます。
FreeVPSカーネルは通常のカーネルに仮想サーバを動作させるためのパッチを加えたカーネルです。

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


FreeVPS本来の使用方法はH-Sphereと共に使用して仮想的なホスティングサーバを構築・管理するためのものです。
※H-SphereはWebベースでVPSを構築・管理・維持するソフトウェア
しかしFreeVPSの特殊な使用方法としてホストOSのクローンOSをそのホストOSの中に作成してホストOSとそのクローンOSを同時に実行させるという使い方もできます。

ここではデスクトップ環境を含んだCentOS 4のクローンOSをVPSとして構築してそのクローンOSをGUI操作できる環境構築手順を紹介します。


[環境]
・ホストOS/仮想サーバOS: CentOS 4.3
・デスクトップ環境:GNOME及びKDE
・FreeVPSカーネル: kernel-freevps-1.5-7(2006年3月29日リリース版)


  1. ホストOS側での事前準備


  2. ホストOSへのFreeVPSカーネル/管理ツールの導入
    http://www.freevps.com/download/rpms/RH_EL4/から以下のパッケージファイルをダウンロードします。
    ・kernel-freevps-1.5-7.i686.rpm
    ・freevps-tools-1.4-5.i386.rpm(vserver, vserver_ctl等のユーティリティを含む)
    ダウンロードしたパッケージファイルを以下のコマンドでインストールします。
    # rpm -ivh kernel-freevps-1.5-7.i686.rpm
    # rpm -ivh freevps-tools-1.4-5.i386.rpm

    kernel-freevps-1.5-7.i686.rpmのインストールによって/boot/grub/grub.confが自動更新されて以下の内容になります。

    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You do not have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /, eg.
    #          root (hd0,0)
    #          kernel /boot/vmlinuz-version ro root=/dev/hda1
    #          initrd /boot/initrd-version.img
    #boot=/dev/hda
    default=0
    timeout=5
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.9-freevps-1.5-7)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.9-freevps-1.5-7 ro root=LABEL=/ rhgb quiet
            initrd /boot/initrd-2.6.9-freevps-1.5-7.img
    title CentOS-4 i386 (2.6.9-34.EL)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.9-34.EL ro root=LABEL=/ rhgb quiet
            initrd /boot/initrd-2.6.9-34.EL.img
    

  3. ホストOSの再起動
    再起動時のGRUBメニューで「CentOS (2.6.9-freevps-1.5-7)」を選択してブートします。



  4. 仮想サーバ(ゲストOS)の作成
    ホストOSのクローンとなる仮想サーバ(ゲストOS)の作成はvserverコマンドのbuildサブコマンドで行います。

    vserver centos4vps build 101
    
    [補足]
    (1)centos4vpsは仮想サーバ名かつ仮想サーバのホスト名としています。
    (2)101は仮想サーバを識別する番号でコンテキストID(CTX)とも呼ばれます。
    (3)約6.5GBのホストのクローンOS作成に約1時間程掛かります(インターネットアクセスは発生しません)。

  5. 仮想サーバのディレクトリについて
    上記buildサブコマンドにより/vservers/centos4vps/に以下のディレクトリが作成されます。


  6. 仮想サーバ設定ファイルの変更
    buildサブコマンドで仮想サーバを作成するとホストOS側に/etc/freevps/centos4vps.confというVPS設定ファイルが自動作成されます。
    (自動作成されたcentos4vps.confの内容)

    最低限以下の内容を盛り込みます。

    VDEVCFG="eth0:eth0:0:local"
    IPCFG="eth0:VPSのIPアドレス:255.255.255.0"
    ONBOOT=yes
    S_HOSTNAME=VPSのホスト名
    S_FLAGS="fakeinit"

    尚、これらの設定を行ってもVPS起動時にVPS内のネットワーク関連設定ファイルの内容が自動更新される訳ではありません。
    そのためVPSの最初の起動後に設定する必要があります。

  7. 仮想サーバの起動
    仮想サーバ(centos4vps)を以下のコマンドで起動します。
    # vserver centos4vps start
    また以下のコマンドで仮想サーバにrootで無条件ログインできます。
    # vserver centos4vps enter

    ps -efの結果は以下の通りとなります。
    bash-3.00# ps -ef
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  1 21:31 ?        00:00:00 init [5]
    root     26928     1  0 23:10 ?        00:00:00 minilogd
    root     31258 31257  0 23:11 pts/2    00:00:00 -
    

  8. 仮想サーバ内ネットワーク設定ファイルの変更
    以下のファイルの内容を仮想サーバ用に変更します。


    これらのファイルを変更後、「/etc/rc.d/init.d/network start」でネットワークサービスを再起動します。
    この場合、「 error: unknown error 1 setting key 'net.ipv4.ip_forward'」のようなエラーが出ますが無視して結構です。

  9. サービスの自動起動設定
    下記サービスを自動起動するように設定します。

    # chkconfig --level 2345 network on
    # chkconfig --level 2345 syslog on
    # chkconfig --level 2345 iptables on
    # chkconfig --level 345 portmap on
    # chkconfig --level 2345 iiim on
    # chkconfig --level 2345 httpd on
    # chkconfig --level 2345 sshd on
    # chkconfig --level 2345 crond on
    # chkconfig --level 345 xinetd on
    # chkconfig --level 2345 canna on
    # chkconfig --level 2345 ip6tables on(VNC/gdm利用で必要となります)

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

  11. 仮想サーバの停止
    # vserver centos4vps stop
    尚、仮想サーバの再起動は「vserver centos4vps restart」でも行えます。

  12. VPS内/rootへのファイルコピー
    VPS内/rootは空のため以下のようにファイルをコピーします。

    # cp -a /root/.bash_logout /vservers/centos4vps/root
    # cp -a /root/.bash_profile /vservers/centos4vps/root
    # cp -a /root/.bashrc /vservers/centos4vps/root
    # cp -a /root/.cshrc /vservers/centos4vps/root
    # cp -a /root/.tcshrc /vservers/centos4vps/root

  13. 仮想サーバの再起動
    # vserver centos4vps start

  14. 仮想サーバへのssh接続
    PuTTYで仮想サーバにssh接続してみます。



  15. 仮想サーバのWebアクセス
    ホストOS側のhttpdサービスはoffにして仮想サーバのWebアクセステストを行います。

  16. vncviewerによるGUI操作
    ホストOS側のvncviewerで「centos4vps:1」に接続するとgdm画面が表示されます。



    gdm画面で言語:日本語、セッション:GNOMEをそれぞれ選択してrootでログインします。
    エラーは何も出ずにデスクトップ画面が表示されますので自由にGUI操作ができます。




    実寸画像はこちらです。




    尚、WindowsのVNCクライアントからも接続可能です。

    VNC接続でKDE環境も利用できますが日本語入力ができません。

  17. Cygwin/XによるGUI操作



  18. vserver_ctlユーティリティ
    コンテキスト101のステータスを確認する場合は以下のコマンドを実行します。
    # vserver_ctl -c 101 -i (またはvserver_ctl -c 101 --status)

    コンテキスト101のVPSに対するコマンド実行例は以下の通りです。
    # vserver_ctl -c 101 --exec chkconfig --list ip6tables