VMware Workstation 14 Pro上にXenServerを導入する

VMware Workstation 14 Pro 14.1.1 build-7528167
XenServer 7.6.0

LPIC-3 304 Virtualization and High Availabilityの学習を進めるにあたって、出題範囲の一であるXenは出題の比率も高そうであるし実際に触れてみるのが内容を呑み込むのに近道であるとおもうから導入するものである。

先ずはXenServerのISOファイルを手に入れる。Citrixのアカウントがあって且つログインしていなければ入手は能わないからまずアカウントの作成である。アカウントはCreate a new Citrix account – Citrixのページから作成できる。

アカウントを作成したらサインインする。そうしてXenServerのダウンロードページへアクセスし、プルダウンメニューから「XenServer 7.6.0 Base Installation ISO -Free Edition」を選択し「Download File」を押下すればISOファイルを入手できる。2019年1月8日の時点でXenServerのバージョンは7.6.0が最新である模様である。

ダウンロードの前には輸出管理とか云うやつの規約についての同意を求められる。全面的に英語による文面であるから読み解くのは誠に難儀したけれどもGoogle翻訳が大いに助けとなった。ちかごろの翻訳精度は質的に高度な発展を遂げていると感ずる。

掻い摘んで内容を追いかけたところ、XenServerは米国の輸出管理規制の対象であり、法に抵触する輸出入や再輸出・譲渡は此れをしてはならぬし、他人のそういった企てを手助けしてもならぬという。またキューバ、イラン、北朝鮮、スーダン、シリア及び米国が輸出入を禁止している国の市民や居住者であってはいけない。そして米国政府の許しなくしては、いかなる核兵器、化学兵器、生物兵器またはミサイル技術に関する最終用途のためにXenServerを活用したり譲渡してもいけない。というような風情であった。

内容を飲み込んで受け入れたらAcceptボタンをクリックすることでXenServerのISOファイルのダウンロードが始まる。容量は715MBにも及ぶから保管場所の空き容量には気を配らねばならない。ISOファイルを保存したら次は仮想マシンの作成に取り掛かる。

VMware Workstationを起動して仮想マシンの作成を始めてゆく。

インストールするゲストOSの種類はひとまずLinuxのOther Linux 4.x or later kernel 64-bitを選択したけれどもあとから設定は自在に変更できるから概ね何をチョイスしても良さそうな風情である。

ホストOSに搭載するCPUのスペックはx86系で最低でも1.5GHzのものが良いようである。2GHz以上のマルチコアプロセッサならばなお良いという。

要求されるメモリの容量は最低限2GBで、おすすめは4GB以上であった。ちかごろは16GBで15000円程度というから以前に比べると本当に求めやすくなったものである。

ディスクの容量は最小で46GB、推奨されている容量は70GBであった。

もう一箇所設定を変更する用事があるから、 仮想マシン作成後に自動的に起動してこないよう「Automatically power on this virtual machine after creation.」のチェックを外しておく。

仮想マシンのプロセッサに関わる設定画面を開いて「Virtualize Intel VT-x/EPT or AMD-V/RVI」にチェックを入れておく。こうすることによって完全仮想化がサポートされてゲストOSとしてWindowsもインストールすることができるようになる。

そうしてISOイメージから起動するとXenServerのインストーラが立ち上がる。press the <ENTER> keyとあるけれどもEnterキーを押し付けなくても数秒ののちに自動でインストールウィザードへ移ろうからmemtestを実施したりsafeモードで立ち上げたいなら多少慌てねばならない。

使用許諾契約に同意するか否かの岐路である。大変長い文章であるから大急ぎでXenServerを導入したい向きには大いに困るであろうとおもう。英文を読み解くだけでも大事業であるからつい読みもせずAccept EULAを押してしまうのが常である。然し乍ら一番最後まできっちり読むと金銭を貰えるようなエンドユーザライセンスアグリーメントも世の中にはあるようであるから、moneyであるとか$のように金銭に関わりのありそうな文字列に気を配りつつサッとスクロールしたけれどもどうもそういった内容は見つけられなかった。

このメッセージは仮想化支援機能が無いか有効にしていない場合にお出ましになる。ゲストOSにWindowsのインストールを検討しているなら大変問題であるからうまい具合に解決しておくべき課題である。

時刻合わせはNTPサーバに頼るのが楽ちんでよいとおもう。日本で使用するならntp.nict.jpを指定して日本標準時を取得するのが都合がよい。

Supplemental Packsをインストールするか否か問われる。XenServerの機能を拡張できるような雰囲気の説明が見つかったけれども忽ち必要でないからインストールはしない。

インストールが完了すればあとはXenServerを起動するばかりである。

仮想マシン再起動時にsystemdで以ってiptablesのルールを保存・適用

OS: Ubuntu Server 18.04.1 LTS
VMware Workstation Pro 14.1.1 build-7528167

以前はifupdownでiptablesのルールを保存・適用していたけれどもnetplanの台頭によって近頃は流儀が異なるようである。netplanは2018年10月2日現在でif-up.dやif-down.dのような仕組みを持ち合わせていないからnetworkd-dispatcherで代替する手がある模様である。

ネットワークインターフェースが無効になった際に動き出すのは /usr/lib/networkd-dispatcher/off.d/ 配下に設置したスクリプトで、有効となった場合は /usr/lib/networkd-dispatcher/routable.d/ 配下のスクリプトであるという。

Netplan frequently asked questionsによる

ところがVMware上のUbuntu仮想マシンではoff.d配下のスクリプトが全然起動しなかった。スクリプトの所有権をrootにし、パーミッションも700にセットして必要条件を満たしてもどうしてもダメである。手動でネットワークインターフェースを無効にした場合は確かに実行されるけれどもどうもシャットダウンや再起動時には仮想マシンのネットワークが何故か無効にならない様子である。まるで原因がわからないからもうsystemdで以って対応した。

$ sudo vi /etc/systemd/system/iptables.service
[Unit]
Description=Save and restore iptables rules.
After=network.target
Before=shutdown.target reboot.target
Requires=network.target

[Service]
Type=simple
ExecStart=/bin/sh -c '/sbin/iptables-restore -c < /etc/iptables.conf'
ExecStop=/bin/sh -c '/sbin/iptables-save -c > /etc/iptables.conf'
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

ExecStartやExecStopの項目ではリダイレクト記号を生で記述すると特別なものとして解釈されてしまうのか実行時にはリダイレクトが無いものとして振る舞っていた。これに気が付けずずいぶん悩んだものである。あとはユニットを有効にして終いである。

$ sudo /bin/sh -c '/sbin/iptables-save -c > /etc/iptables.conf'
$ sudo systemctl enable iptables.service
$ systemctl status iptables.service
● ipt-save.service - Save and restore iptables rules.
   Loaded: loaded (/etc/systemd/system/ipt-save.service; enabled; vendor preset: enabled)
   Active: active (exited) since Tue 2018-10-02 21:51:22 JST; 29min ago
(snip)

networkd-dispatcherは思い通りにならないしsystemdはなんだかとっつき難いし偉いものに首を突っ込んでしまったという心持ちである。

参考:
Use pre-up, post-up, etc. hook scripts
clayton craft / networkd-dispatcher・GitLab
Ubuntu Manpage: networkd-dispatcher – Dispatcher service for systemd-networkd connection status changes