Xen環境dom0の構築

作成日:2016/07/10
最終更新日:2020/07/05

Xen環境dom0の構築

作成日:2016/07/10
最終更新日:2020/07/05

概要

子供用のPC(とはいってもRaspberry Piですが)を設置するにあたり自宅のネットワークの見直しをしつつサーバー環境をメンテナンスすることにしました。 サーバー環境は仮想化していますが、以下の順番で変遷してきました。

  1. PC実機数台構成
  2. FreeBSD jailによる仮想化
  3. VirtualBoxによる仮想化

今回、Xenを導入してみることにしました。 必要があれば、Xenの上でVirtualBoxを動かしたり、FreeBSD jailによる仮想化をおこないたいと考えています。

Xenとは

Xenはハイパーバイザ型の仮想化環境です。 準仮想化も完全仮想化も可能です。

Xenの管理用に導入するOSをdom0と呼び、Xenに導入するゲストOSをdomUと呼びます。

dom0

今回、dom0はUbuntu Serverを選定しました。

Interop Tokyo 2016でマーク・シャトルワース氏の基調講演を聴講したところ、Ubuntuがクラウド上で採用されるOSで70%のシェアを獲得しているようです。 サーバー環境も数年に1度再構築しているので、LTSな16.04を用いれば、Ubuntu Serverを選択しても特に問題はなさそうに感じています。

HDDのフォーマット

UbuntuでXenを利用する場合、HDDをGPT+UEFIでパーティションを作成してはいけません。 これはリリースノートにも記載されています。

Ubuntu ServerをそのままインストールするとGPT+UEFIでパーティションを切るので、 Ubuntuのインストールメディアを使用して先にHDDのパーティションを切ります。

今回、1TBのHDDを使用するので以下のように切ることにします。

表1. パーティション構成
デバイス サイズ タイプ 用途
/dev/sda1 20GB Linux dom0環境用
/dev/sda2 2GB swap dom0用swap
/dev/sda3 40GB Linux domU用
/dev/sda4 拡張領域
/dev/sda5 40GB Linux domU用
/dev/sda6 40GB Linux domU用
/dev/sda7 80GB Linux domU用
/dev/sda8 80GB Linux domU用
/dev/sda9 残り Linux 共用

パーティションを切り終えたら再起動し、Ubuntu Serverのインストールメディアに入れ替え起動します。

Ubuntu Server 16.04のインストール

言語選択

言語選択が出ます。 今回はサーバー用途で使用するのでEnglishを選択します。

F3キーを押下し、Keymapの選択を呼び出します。 Japaneseを選択します。

必要に応じて他のオプションを変更します。 上記以外はそのままで問題ないかと思います。

Install Ubuntu Serverを選択します。

Select a language

言語設定の画面が開きます。 先ほどと同じく英語を選択します。

Select your location

地域の設定をします。 表示されている項目にないのでotherを選択します。 Asiaを選択します。 Japanを選択します。

Configure locales

システムのデフォルトの言語設定をします。 United States - en_US.UTF-8のままで良いかと思います。 エラーメッセージの調査をするときに英語で出力されるほうが情報を集めやすいので、 日本語にしないほうが良いかと思います。

その後、一見ハングアップしたような状態になりますがハングアップしたわけではないので根気よく待ちます。

Counfiguration the network

ホスト名の設定をします。 サーバー機のホスト名を入力してEnterキーを押します。

Set up users and passwords

サーバー機にログインするためのユーザ名のFull nameを入力します。 ユーザー名を入力します。 パスワードを入力します。 パスワードを再入力します。 homeディレクトリを暗号化するか聞かれるので No を選択します。

Configure the clock

タイムゾーンを確認されます。 Asia/Tokyoで良いか聞かれるので Yes を選択します。

Partition disks

パーティションの設定をします。 既にパーティションは作成しているのでManualを選択し手動で設定します。 各パーティションはフォーマットしていないのですべてフォーマットしていきます。

#N(Nは任意の整数)の行を選択します。 それぞれ、以下のように設定します。 設定が終わったら Go Back を選択します。

  • #1
    • Use as
      • Ext4 journaling file system
    • Mount point
      • /
    • Bootable flag
      • on
  • #2
    • Use as
      • swap area
  • #3
    • Use as
      • Ext4 journaling file system
  • #5
    • Use as
      • Ext4 journaling file system
  • #6
    • Use as
      • Ext4 journaling file system
  • #7
    • Use as
      • Ext4 journaling file system
  • #8
    • Use as
      • Ext4 journaling file system
  • #9
    • Use as
      • Ext4 journaling file system

完了したら、Finish partitioning and write change to diskを選択します。 #3から#9についてはmount pointの設定をしていないので警告がでますが、Noを選択します。

確認画面が出力されるのでYesを選択し、パーティションテーブルを確定します。 その後、インストールが開始されます。

Configure the package manager

HTTPプロキシの設定をします 。 HTTPプロキシを使用する場合は指示されたフォーマットに従って設定します。 HTTPプロキシを使用しない場合は空欄のままcontinueを選択します。

Configuring tasksel

自動アップデートの設定をします。 それぞれ意味は以下になります。

  • No automatic update
    • 自動アップデートしない
  • Install security updates automatically
    • セキュリティアップデートを自動的にする
  • Manage system with Landscape
    • Landscapeを使用する

サーバー管理者としては意図しないアップデートが行われないようNo automatic updateを 選択すべきかと思いますが、自宅サーバーなのでメンテナンスの手間を省くためにInstall security updates automaticallyを選択することにします。

Software selection

サーバーにインストールするソフトウェアを選択します。 現段階ではOpenSSH serverを追加するに留めます。

OpenSSHの行を選択し、Spaceキーを押すと行頭にがつきます。 この時点でstandard system utilitiesとOpenSSH serverにがついているかと思います。 確認後Continueを選択します。

Install the GRUB boot loader on a hard disk

ブートローダーであるGRUBをMBRにインストールして良いか聞かれます。 今回、MBRにインストールするのでYESを選択します。

Finish the installation

インストールが完了しインストールメディアが排出されます。 インストールメディアを抜き取り、Continueを選択すると再起動します。

初期設定

特に問題がなければ、Ubuntuが起動します。 ログインプロンプトが表示されるので、設定したユーザ名でログインします。

ソフトウェアの更新

以下のコマンドを発行してソフトウェアを更新します。

コマンド1. ソフトウェアの更新
sudo apt-get update
sudo apt-get upgrade

後ろのコマンドを発行すると処理を続けてよいか聞かれるのでYを選択します。 インストール完了後、一旦再起動します。

コマンド2. 再起動
sudo reboot

ホスト名の変更

/etc/hostname を変更します。

コマンド3. hostnameの変更
sudo vi /etc/hostname

また、/etc/hosts の現在のホスト名が書かれている箇所を変更したいホスト名に修正します。

コマンド4. /etc/hostsの変更
sudo vi /etc/hosts

設定完了後再起動します。

コマンド5. 再起動
sudo reboot

固定アドレスの設定

Ubuntu serverをインストールすると、標準状態ではDHCPで動的にIPアドレスを取得する設定になります。サーバー機として使用する場合には静的にIPアドレスを指定し、固定するほうが使い勝手が良いので設定を変更します。

/etc/network/interfaces を変更します。設定変更前に元のファイルを複製しておきます。 今回設定変更するインタフェースはenp2s0になります。

コマンド6. /etc/network/interfacesの変更
sudo cp /etc/network/interfaces /etc/network/interfaces.org
sudo vi /etc/network/interfaces

例えば、以下のように書き換えます。

ソース1. /etc/network/interfacesの変更内容
auto enp2s0
iface enp2s0 inet static
address IPアドレス
network ネットワークアドレス
netmask サブネットマスク
broadcast ブロードキャストアドレス
gateway ゲートウェイのIPアドレス

設定を変更したら以下のコマンドでIPアドレスの変更を適用します。

コマンド7. /etc/network/interfacesの変更の適用
sudo service networking restart

ifconfigで設定変更を確認します。

コマンド8. 変更の確認
user@HOST:~$ ifconfig enp2s0
enp2s0    Link encap:Ethernet  HWaddr QQ:QQ:QQ:QQ:QQ:QQ  
          inet addr:XXX.XXX.XXX.XXX  Bcast:YYY.YYY.YYY.YYY  Mask:ZZZ.ZZZ.ZZZ.ZZZ
          inet6 addr: fe80::TTTT:TTTT:TTTT:TTTT/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1315 errors:0 dropped:0 overruns:0 frame:0
          TX packets:915 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:122176 (122.1 KB)  TX bytes:156504 (156.5 KB)
user@HOST:~$ 

IPアドレスを静的に指定した場合にはDNSサーバーも静的に設定します。 /etc/resolvconf/resolv.conf.d/baseを編集します。

コマンド9. /etc/resolvconf/resolv.conf.d/baseの変更
sudo cp /etc/resolvconf/resolv.conf.d/base /etc/resolvconf/resolv.conf.d/base.org
sudo vi /etc/resolvconf/resolv.conf.d/base

/etc/resolvconf/resolv.conf.d/baseの中身は空のはずなので以下の様に記述します。

ソース2. /etc/resolvconf/resolv.conf.d/baseの変更内容
nameserver DNSサーバーのIPアドレス

設定を変更したら以下のコマンドでDNSサーバーの変更を適用します。

コマンド10. /etc/resolvconf/resolv.conf.d/baseの変更の適用
sudo service networking restart

DNSサーバーの設定ファイルを確認し設定が変更されたか確認します。

コマンド11. 変更の確認
user@HOST:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver XXX.XXX.XXX.XXX
user@HOST:~$ 

Xenのインストール

初期設定が完了したら、以下のコマンドを発行してXenをインストールします。

コマンド12. Xenのインストール
sudo apt-get install xen-hypervisor

続いて、/etc/default/grubを編集してdom0に割り当てるメモリを設定します。

コマンド13. /etc/default/grub.d/xen.cfgの変更
sudo cp /etc/default/grub.d/xen.cfg /etc/default/grub.d/xen.cfg.org
sudo vi /etc/default/grub.d/xen.cfg

例えば、以下のように書き換えます。今回はdom0に512MBのメモリを割り当てることにします。 GRUB_CMDLINE_XEN_DEFAULTは#でコメントアウトされているので、#を削除して値を記述します。

ソース3. /etc/default/grub.d/xen.cfgの変更内容
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=512M"

設定を変更したら以下のコマンドでブートローダであるGRUBの設定変更を適用します。

コマンド14. /etc/default/grub.d/xen.cfgの変更の適用
sudo update-gurb

終了時にdomUの状態を保持しないようにxendomainsの設定を以下のように変更します。

コマンド15. /etc/default/xendomainsの変更
sudo cp /etc/default/xendomains /etc/default/xendomains.org
sudo vi /etc/default/xendomains

例えば、以下のように書き換えます。

ソース4. /etc/default/xendomainsの変更内容
XENDOMAINS_SAVE=""
XENDOMAINS_RESTORE=false

設定完了後再起動します。

コマンド16. 再起動
sudo reboot

標準状態ではdomUのためのネットワーク設定が無効化されているので ブリッジモードで動作するように設定します。

コマンド17. sudo vi /etc/xen/xend-config.sxpの変更
sudo cp /etc/xen/xend-config.sxp /etc/xen/xend-config.sxp.org
sudo vi /etc/xen/xend-config.sxp

(network-script network-bridge)は#でコメントアウトされているので外します。

ソース5. /etc/xen/xend-config.sxpの変更内容
(network-script network-bridge)

設定を変更したらxendを再起動します。

コマンド18. /etc/xen/xend-config.sxpの変更の適用
sudo service xend restart

Bridgeの設定

domUで同じインタフェースを共有できるようにBridgeの設定をします。

固定アドレスの設定の項で以下のようにIPアドレスの設定をしました。

ソース6. /etc/network/interfacesの変更内容(Bridgeの設定)
auto enp2s0 xenbr0                # ここにxenbr0を追加
iface xenbr0 inet static          # enp2s0をxenbr0に変更
address IPアドレス
network ネットワークアドレス
netmask サブネットマスク
broadcast ブロードキャストアドレス
gateway ゲートウェイのIPアドレス
bridge_ports enp2s0               # enp2s0にブリッジする
iface enp2s0 inet manual          # 物理インタフェースにIPアドレスを振らない

設定完了後再起動します。

コマンド19. 再起動
sudo reboot