Category Archives: fedora

Linux から Windows 2012 にリモートデスクトップ接続

Fedora から Windows Server 2012 R2 にリモートデスクトップ接続しようとしたとき、rdesktop コマンドを使うと、なぜか以下のようなエラーが表示されて接続できませんでした。

$ rdesktop 192.168.100.100
Autoselected keyboard map en-us
Failed to connect, CredSSP required by server.

(参考)
https://bugzilla.redhat.com/show_bug.cgi?id=1075697

かわりに xfreerdp コマンドを使ってみたところ接続できました。

xfreerdp をインストールするにはつぎのコマンドを入力します。

# dnf install xfreerdp -y

xfreerdp コマンドで Windows Server 2012 R2 にリモートデスクトップ接続するにはつぎのようにコマンドを入力します。

$ xfreerdp /u:<User> /p:<Password> /d:<Domain> /f /v:<IP-Address> /kbd:US +toggle-fullscreen

フルスクリーンで表示されるので、画面内で CTRL+ALT+ENTER を入力すると Exit (トグル)できます。すなわちフルスクリーンを ON/OFF できます。

もし、以下のようなエラーが表示されて接続できなくなったときは、

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

つぎのコマンドで、xfreerdp 用の known_hosts ファイルをクリアすることで対応できます。

$ cp /dev/null ~/.config/freerdp/known_hosts

Fedora の不要なプロセスを停止してみた

Fedora 23/24 にて、やたらと不要なプロセスがたくさん実行されている気がする。使っていそうにないプロセスを停止してみた。いまのところ特に問題なし。また、ヒストリー関連のクリアしてみた。

1. avahi-daemon を停止する

# systemctl disable avahi-daemon.service

2. abrt(Automatic Bug Reporting Tool) を停止する

# systemctl disable abrt-ccpp.service
# systemctl disable abrt-oops.service
# systemctl disable abrt-vmcore.service
# systemctl disable abrt-xorg.service
# systemctl disable abrtd.service

3. zeitgeist などを停止する

すまん、ドイツ語は苦手なのだ。俺は “Poltergeist” のほうが好きだな。

# cd /etc/xdg/autostart/
# ls -1
...
# mv zeitgeist-datahub.desktop{,-inactive}
# mv abrt-applet.desktop{,-inactive}
# mv evolution-alarm-notify.desktop{,-inactive}
# mv gnome-welcome-tour.desktop{,-inactive}
# mv tracker-extract.desktop{,-inactive}
# mv tracker-miner-apps.desktop{,-inactive}
# mv tracker-miner-fs.desktop{,-inactive}
# mv tracker-miner-rss.desktop{,-inactive}
# mv tracker-miner-user-guides.desktop{,-inactive}
# mv tracker-store.desktop{,-inactive}

4. evolution などを停止する

俺には国際救助隊 “Thunderbird” がバックにいるので、evolution は不要だな。

# dnf erase evolution
# cd /usr/share/dbus-1/services
# ls -al | grep -i evolution
...
# mv org.gnome.evolution.dataserver.AddressBook.service{,-inactive}
# mv org.gnome.evolution.dataserver.Calendar.service{,-inactive}
# mv org.gnome.evolution.dataserver.Sources.service{,-inactive}
# mv org.gnome.evolution.dataserver.UserPrompter.service{,-inactive}

5. Gnome のヒストリーのクリア

All Settings (gnome-controle-center) > Privacy > Usage & Histry > Clear Recent Histry

6. FireFox のヒストリーのクリア

FireFox のメニューから
Edit > Preferences > Privacy > clear your recent histry

ちょっと、すっきりした。

7. plymouth 関連のパッケージの削除

起動時間を短縮するには、以下のコマンドで、どのユニットの起動に時間がかかっているかを調べるとよい。

起動時間のサマリー表示
# systemd-analyze

ユニットの起動時間の一覧を表示
# systemd-analyze blame | cat

ユニットの起動状況をツリー形式で表示
# systemd-analyze critical-chain

起動時のメッセージの確認
# journalctl -x -b | cat

plymouth 関連を削除すると短縮できそうだ。plymouth はブート時にグラフィカル表示をおこなう機能であるが、これは Linux ユーザーには不要だと思う。思い切って削除してみる。

# dnf erase plymouth -y

8. journal ログの削除

Gnome の起動に時間がかかっているようだが、これは journal ログを削除すると多少は改善されそうだ。

# rm -rf /var/log/journal/*

9. GRUB のタイムアウト時間を 0 に変更

これは既に設定されている人が多いと思うが、念の為。
まずは GRUB 設定ファイルのバックアップを取得する。

# cp -ipv /etc/default/grub{,-ORG}

以下の2箇所を変更する。

  • GRUB_TIMEOUT の行の値を小さくする
  • GRUB_CMDLINE_LINUX の行の「rhgb quiet」を削除する

sed を使って変更するには以下のコマンドを実行すればよい。

# F1=/etc/default/grub
# sed -i 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=0/g' $F1
# sed -i '/GRUB_CMDLINE_LINUX=/s/ rhgb//g' $F1
# sed -i '/GRUB_CMDLINE_LINUX=/s/ quiet//g' $F1

変更内容を確認する。

# diff /etc/default/grub{-ORG,}

変更したら、つぎのコマンドを実行して設定内容を反映させる。

# grub2-mkconfig -o /boot/grub2/grub.cfg

だいぶ、すっきりした。

VMware Workstation 12 Pro Linux 版のインストール

Fedora 25 に VMware Workstation 12.5.2 Linux 版をインストールしてみました。

準備

VMware Workstation のインストールに必要な依存パッケージを事前にインストールします。

# dnf -y group install "Development Tools"
# dnf -y install kernel-devel kernel-headers

VMware Workstation 12 Pro のダウンロード

以下より VMware Workstation 12 Pro Linux 評価版をダウンロードします。
http://www.vmware.com/products/workstation/workstation-evaluation

最新版がダウンロードされます。2017年1月16日時点では、以下がダウンロードできました。
VMware-Workstation-Full-12.5.2-4638234.x86_64.bundle

VMware Workstation 12 Pro のインストール開始

Fedora 25 のデスクトップは、デフォルトでは Wayland の Gnome が採用されています。しかし、VMware Workstation 12.5.2 はまだ Wayland の Gnome をサポートしていません。”Gnome” をいったんログアウトし、”GNOME on Xorg” でログインしなおしてインストールします。ログイン画面の “Sign In” ボタンの横に、歯車アイコンが表示されるので、それをクリックして “GNOME on Xorg” を選択してログインしてください。

つぎのコマンドでインストーラを開始します。

# chmod a+x ./VMware-Workstation-Full-12.5.2-4638234.x86_64.bundle
# ./VMware-Workstation-Full-12.5.2-4638234.x86_64.bundle

下記のようなエラーメッセージが表示されますが無視して進めます。

Extracting VMware Installer...done.

(vmware-installer.py:6379): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita",
/usr/share/themes/Adwaita/gtk-2.0/main.rc:733: error: unexpected identifier `direction', expected character `}'

(vmware-installer.py:6379): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita",
/usr/share/themes/Adwaita/gtk-2.0/hacks.rc:28: error: invalid string constant "normal_entry", expected valid string constant
Gtk-Message: Failed to load module "pk-gtk-module": libpk-gtk-module.so: cannot open shared object file: No such file or directory
Gtk-Message: Failed to load module "canberra-gtk-module": libcanberra-gtk-module.so: cannot open shared object file: No such file or directory

インストーラの画面にしたがって操作します。画面については、「VMware Workstation 11」のときと大きな変化はないので省略します。

  1. 「VMware Workstation – End User License Agreement」の画面が表示されるので、「I accept …」を選択して [Next] ボタンをクリックします。
  2. 「VMware OVF Tool component for Linux – End User License Agreement」の画面が表示されるので、「I accept …」を選択して [Next] ボタンをクリックします。
  3. 「Would you like to check for product updates on startup?」の画面が表示されるので、「No」を選択して [Next] ボタンをクリックします。
  4. 「Would you like to help make VMware software …」の画面が表示されるので、「No」を選択して [Next] ボタンをクリックします。
  5. 「Please enter the user that will initially connect to Workstation Server …」の画面が表示されるので、「root」を変更して通常ログインしvmware で使用するユーザー名を入力します。[Next] ボタンをクリックしてつぎに進みます。
  6. 「Please choose a directory for your shared virtual machines.」の画面が表示されるので、特に変更しないで、[/var/lib/vmware/Shared VMs]のまま[Next] ボタンをクリックしてつぎに進みます。
  7. 「Please enter the port to use for https access to Workstation Server.」の画面が表示されるので、HTTPS port: [443] を適切に変更して [Next] ボタンをクリックしてつぎに進みます。
  8. 「Enter license key.」の画面が表示されるので、空白のまま [Next] ボタンをクリックしてつぎに進みます。
  9. 「The product is ready to installed.」の画面が表示されるので、[Install] ボタンをクリックしてつぎに進みます。
  10. 「Installing …」の画面が表示されるので、完了するまで待ちます。
  11. 「Installation was successful.」の画面が表示されるので、[Close] ボタンをクリックします。

VMware Workstation に対するパッチ作業

2017年1月16日時点では、Fedora 25 の最新カーネルは、kernel-4.9.3-200 となっています。VMware Workstation 12.5.2 は kernel-4.9.x にまだ対応していないため、このバージョンのカーネルでは正常に起動できません。VMware Workstation に対して以下のパッチ作業が必要です。つぎのコマンドを実行してパッチ作業とモジュールのコンパイルを行います。

# cd /usr/lib/vmware/modules/source/
# cp -npv vmmon.tar{,-ORG}
# tar xvf vmmon.tar
# wget https://communities.vmware.com/servlet/JiveServlet/download/2644848-168136/ws-12.5.2-linux-4.9-vmmon-only.patch.zip
# unzip ws-12.5.2-linux-4.9-vmmon-only.patch.zip
# patch -p0 < ws-12.5.2-linux-4.9-vmmon-only.patch
# tar cvf /usr/lib/vmware/modules/source/vmmon.tar vmmon-only
# rm -rf vmmon-only

# cd /usr/lib/vmware/modules/source/
# cp -npv vmnet.tar{,-ORG}
# tar xvf vmnet.tar
# wget https://communities.vmware.com/servlet/JiveServlet/download/2644848-168137/ws-12.5.2-linux-4.9-vmnet-only.patch.zip
# unzip ws-12.5.2-linux-4.9-vmnet-only.patch.zip
# patch -p0 < ws-12.5.2-linux-4.9-vmnet-only.patch
# tar cvf /usr/lib/vmware/modules/source/vmnet.tar vmnet-only
# rm -rf vmmon-only

# vmware-modconfig --console --install-all

以上で完了です。”GNOME on Xorg” の環境で VMware Workstation が正常に起動できることを確認してください。

参考:
https://ask.fedoraproject.org/en/question/98084/error-on-vmware-in-fedora-25/
https://communities.vmware.com/message/2644848
http://rglinuxtech.com/?p=1847

TCX ファイルを GPX ファイルに変換する

ランニング・サイクリング・ウォーキングなどの GPS アプリのデータを Google Map で表示したいと思っている人は多いでしょう。GPS アプリの多くはその移動ルートを TCX ファイルでエクスポートできます。しかし、Google Map は TCX ファイルを直接にインポートすることができません。そこで、TCX ファイルを GPX ファイルに変換する必要があります。

Fedora 23 では標準で GPSBabel のパッケージが用意されているので、これを使って TCX から GPX への変換ができます。

GPSBabel のインストール手順は以下のとおりです。

# dnf search all gpsbabel
...
gpsbabel.x86_64 : A tool to convert between various formats used by GPS devices
gpsbabel-gui.x86_64 : Qt GUI interface for GPSBabel

# dnf install gpsbabel gpsbabel-gui -y

gpsbabel コマンドを使ってファイルの形式を変換できます。使い方は以下のとおりです。

$ gpsbabel -i <入力形式> -f <入力ファイル> -o <出力形式> -F <出力ファイル>

例えば、TCX ファイルを GPX ファイルに変換する場合、つぎのコマンドを実行します。

$ gpsbabel -i gtrnctr -f input.tcx -o gpx -F output.gpx

上記の「-i gtrnctr」は入力ファイルの形式として「Garmin Training Center (.tcx)」を指定することを意味し、「-o gpx」は出力ファイルの形式として「GPX XML」を指定することを意味します。詳細は「gpsbabel --help」コマンドで確認するか、Web サイト http://www.gpsbabel.org/ を参照してください。

または GUI フロントエンド (gpsbabelfe-bin) も用意されているのでこれを利用すると簡単です。入力ファイル名とその形式、出力ファイル名とその形式を指定して OK ボタンをクリックするだけです。実際に実行されるコマンドが下方のテキストボックスに表示されるので便利です。

gpsbabelfe-bin-01

GPX ファイルに変換できたら、これを用いて Google Map のマイマップにインポートして自分の地図を作成することができます。

Fedora 23 に Google Earth をインストール

Google Earth を Fedora 23 にインストールしました。自分の環境では、どうも最新の Google Earth (GE7) はうまく動作しませんでした。替わりに古い Google Earth (GE6) をインストールしてみたところ問題なく動作しました。以下にその代替のインストール手順を紹介します。

既存の Google Earth がインストールされている場合は削除します。

# rpm -ev --nodeps google-earth-stable

古いバージョンの Google Earth (GE6) をダウンロードします。

# wget http://dl.google.com/earth/client/GE6/release_6_2_2/google-earth-stable-6.2.2.6613-0.x86_64.rpm

ダウンロードした Google Earth (GE6) をインストールします。このとき、rpm コマンドを使って「--force」オプションを付けて実行する必要があります。dnf コマンドを使ってインストールしようとすると、「Error: Transaction check error: file /usr/bin from install of google-earth-stable-#.#.#.####-#.x86_64 conflicts with file from package filesystem-3.2-35.fc23.x86_64」と表示されてインストールに失敗します。

# rpm -ivh --force google-earth-stable-6.2.2.6613-0.x86_64.rpm

その他の必要なライブラリをインストールします。

# dnf install redhat-lsb*
# dnf install redhat-lsb*.i686
# dnf install mesa-dri-drivers*
# dnf install mesa-dri-drivers*.i686

以上で、インストールは完了です。なお、Linux 版 Google Earth はプロキシ下のネットワーク環境では使用できないようです。Google Earth の起動シェル「/usr/bin/google-earth」の43〜44行目に環境変数を設定すると動作するという情報がありましたが未確認です。

script_path=$(FindPath $0);

cd $script_path;

export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./googleearth-bin "$@"

実は、最新の Google Earth (GE7) ですが、新しく作成した Fedora 23 の仮想マシンで試すと問題なくインストールできて正常に動作します。しかし、自分の物理 PC の Fedora 23 で試すと、いろいろアップデートをかけているせいか、Google Earth をインストール後に起動しようとすると、スプラッシュスクリーンを表示した直後にクラッシュしてしまいます。

以下の画像は KVM 仮想マシン上の Fedora 23 で、Google Earth 7 を実行しているときのイメージです。

fedora23-google-earth7-on-vm

以下の画像は物理 PC 上の Fedora 23 で、Google Earth 6 を実行しているときのイメージです。

fedora23-google-earth6-on-pm

(2016.09.10 追記)
Fedora 24 では最新の Google Earth (google-earth-stable.x86_64 7.1.7.2600-0 , Build Date 8/25/2016) を普通にインストールできることを確認しました。手順はつぎのとおりです。

# wget https://dl.google.com/dl/earth/client/current/google-earth-stable_current_x86_64.rpm
# dnf install ./google-earth-stable_current_x86_64.rpm 

Fedora 22 を Kernel 4.2.3-200 にアップデートすると VMware Workstation 11 が起動できない

Fedora 22 のカーネルを 4.2.3-200 にアップデートすると、VMware Workstation 11 が起動しなくなります。これに対処するには、VMware にパッチをあてるか、Kernel をダウングレードするかの2つの方法があります。

VMware にパッチをあてる方法

https://communities.vmware.com/thread/516196
に書かれている内容を参考にパッチ作業をしたところ、うまく起動するようになりました。以下にその手順を紹介します。

(1) VMware モジュールのソースディレクトリに移動

# cd /usr/lib/vmware/modules/source

(2) vmnet.tar のバックアップの取得

# cp -npv vmnet.tar{,-ORG}
# ls -1 vmnet.tar*
vmnet.tar
vmnet.tar-ORG

(3) vmnet.tar の展開。
これにより「vmnet-only」ディレクトリが作成されます。

# tar -xf vmnet.tar

(4) vmnet-only/vmnetInt.h のバックアップの取得

# cp -npv vmnet-only/vmnetInt.h{,-ORG}
# ls -1 vmnet-only/vmnetInt.h*
vmnet-only/vmnetInt.h
vmnet-only/vmnetInt.h-ORG

(5) vmnet-only/vmnetInt.h の修正
vi エディタなどを使用して vmnet-only/vmnetInt.h を修正します。

# vi vmnet-only/vmnetInt.h

変更内容は 82 行目に示すように関数 sk_alloc の引数の最後に「,1」を追加しただけです。

変更前:

#ifdef VMW_NETDEV_HAS_NET
#   define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
                                                PF_NETLINK, _pri, &vmnet_proto)
#else
#   define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)
#endif

変更後:

#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
#   define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
                                                PF_NETLINK, _pri, &vmnet_proto, 1)
#else
#   define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)
#endif

変更できたことを確認します。

# diff vmnet-only/vmnetInt.h{-ORG,}
82c82
<                                                 PF_NETLINK, _pri, &vmnet_proto)
---
>                                                 PF_NETLINK, _pri, &vmnet_proto, 1)

(6) vmnet-only ディレクトリを tar で固め直す

# tar -cf vmnet.tar vmnet-only
# rm -rf vmnet-only

(7) VMware のモジュールのコンパイルとインストール

# vmware-modconfig --console --install-all

(8) VMware の動作確認
もし、動作しなかった場合は、以下の手順で元の状態にもどせます。

# mv vmnet.tar-ORG vmnet.tar

その場合、カーネルをダウングレードする方法を試してください。

Kernel をダウングレードする方法

(1) インストールされているカーネルを確認
この例では、Installed Packages の部分より3つの版のカーネルがインストールされていることがわかります。

# dnf list --showduplicates kernel
Installed Packages
kernel.x86_64              4.1.8-200.fc22             @updates
kernel.x86_64              4.1.10-200.fc22            @updates
kernel.x86_64              4.2.3-200.fc22             @updates
Available Packages
kernel.x86_64              4.0.4-301.fc22             fedora
kernel.x86_64              4.1.8-200.fc22             @updates
kernel.x86_64              4.1.10-200.fc22            @updates
kernel.x86_64              4.2.3-200.fc22             @updates
kernel.x86_64              4.2.3-200.fc22             updates

(2) GRUB メニューにエントリーされているカーネルを確認

# grep "submenu\|^\menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
Fedora (4.2.3-200.fc22.x86_64) 22 (Twenty Two) ◀ 現在のカーネル
Fedora (4.2.3-200.fc22.x86_64+debug) 22 (Twenty Two)
Fedora (4.1.10-200.fc22.x86_64+debug) 22 (Twenty Two)
Fedora (4.1.10-200.fc22.x86_64) 22 (Twenty Two) ◀ このカーネルで起動したい
Fedora (4.1.8-200.fc22.x86_64+debug) 22 (Twenty Two)
Fedora (4.1.8-200.fc22.x86_64) 22 (Twenty Two)
Fedora (0-rescue-b23d8567a69543dd97597198bda98d95) 22 (Twenty Two)

(3) 現在の GRUB 設定ファイルの内容を確認

# cat /etc/default/grub
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora_f22ud1/swap rd.lvm.lv=fedora_f22ud1/root"
GRUB_DISABLE_RECOVERY="true"

(4) GRUB 設定ファイルを変更
GRUB 設定ファイルのバックアップを取得します。

# cp -npv /etc/default/grub{,-ORG}

/etc/default/grub ファイルを開き、GRUB_DEFAULT の行を変更します。デフォルトでは「saved」に設定されていますが、これに起動させたいカーネルのタイトルを指定します。4.2.3-200 よりも前のカーネル、たとえば、4.1.10-200 や 4.1.8-200 のメニュータイトルを指定してください。

変更前:
GRUB_DEFAULT=saved
→
変更後:
GRUB_DEFAULT='Fedora (4.1.10-200.fc22.x86_64) 22 (Twenty Two)'

sed で変更するにはつぎのようにコマンドを入力します。

# sed -i -e "s/GRUB_DEFAULT=.*/GRUB_DEFAULT='Fedora (4.1.10-200.fc22.x86_64) 22 (Twenty Two)'/g" /etc/default/grub

変更内容を確認する。

# diff /etc/default/grub{-ORG,}

GRUB に反映させます。

# grub2-mkconfig -o /boot/grub2/grub.cfg

(5) 再起動した後、カーネルのバージョンを確認
再起動します。

# reboot

再起動後のカーネルのバージョンを確認します。

# uname -r
4.1.10-200.fc22.x86_64

ジャーナルログからもカーネルのバージョンを確認します。

# journalctl -b | grep -i 'Linux version'
Oct 24 11:02:17 localhost.localdomain kernel: Linux version 4.1.10-200.fc22.x86_64 (mockbuild@bkernel01.phx2.fedoraproject.org) (gcc version 5.1.1 20150618 (Red Hat 5.1.1-4) (GCC) ) #1 SMP Mon Oct 5 14:22:49 UTC 2015

(6) VMware の動作確認
VMware を起動して、仮想マシンが正常起動できることを確認します。

(7) kernel の自動更新の禁止
kernel が自動更新されないよう設定しておきます。

# cat <<"EOF">> /etc/dnf/dnf.conf
exclude=kernel*
EOF

# cat /etc/dnf/dnf.conf

(2015.11.23 追記)
Fedora 23 に VMware Workstation 12 Pro をインストールした場合にも、VMware Workstation を正常に起動できない問題が発生するようです。これについては、以下のサイトに回避策が紹介されています。
http://vcojot.blogspot.jp/2015/11/vmware-worksation-12-on-fedora-core-23.html

いろいろと書いてありますが、VMware Workstation 12 Pro をインストール後に以下の操作を実行することで正常に起動できるようになります。

# wget https://raw.githubusercontent.com/ElCoyote27/krynn-tools/master/Update_VMW.sh
# sh ./Update_VMW.sh

virt-install による仮想マシンの自動インストール

KVM を利用するとスクリプトを使って仮想マシンを全自動でインストールすることができます。KVM のインストール手順は前回に説明しました。今回は virt-install、guestfish というコマンドを利用して CentOS 7.1 の仮想マシンを全自動でインストールしてみます。Fedora 22 で動作確認をしました。

guestfish のインストール

guestfish は KVM ホストに事前にインストールしておく必要があります。Fedora 22 ではつぎのコマンドで guestfish をインストールできます。

# dnf install '*guestf*' -y

virt-install コマンド

virt-install コマンドを使用して、仮想マシンのインストールをコマンドラインから実行することができます。kickstart ファイルを組み合わせることで、手作業による操作が不要になり、全自動で仮想マシンのインストールが可能になります。

virt-install コマンドの使い方に関しては、つぎに示すオプションが重要なポイントです。

(1)「--initrd-inject=<file>」
インストーラが仮想マシンを起動する前に、指定したローカルのファイルをインストーラの initrd.img の中に埋め込みます。今回の例では kickstart ファイルを指定しています。ここで「ローカル」とは KVM ホスト上のファイルのことを意味します。

(2)「--extra-args=”ks=file:/<kickstart file>”」
仮想マシンの起動時に、initrd 内の kickstart ファイルを使用して Anaconda による自動インストールを開始させます。

(3)「--noautoconsole」
仮想マシンのインストール時にコンソールを表示しないオプションです。OSのインストールが完了した後に、仮想マシンをシャットダウンするには、このオプションが必要です。

guestfish コマンド

guestfish を使用すると、仮想マシンを起動することなく仮想マシン内のファイル編集やコマンド実行が可能になります。guestfish を使用して仮想マシン上の任意のコマンドを実行するには、「command」コマンドを使用します。ただし、筆者が確認したところ、「firewall-cmd」など一部のコマンドがうまく実行できませんでした。このため、Firewall の設定は firewalld の設定ファイルを直接書き換えています。

今回の例は、guestfish を使用しなくても、kickstart の「%post」セクションを使用して実現できます。しかし、guestfish には copy-in、copy-out、upload、download といったコマンドが用意されており、これを使ってローカルとゲスト間のファイル転送が簡単に実現できます。これと同じことを kickstart で実現するのは面倒です。

仮想マシンの自動インストールスクリプト

以下に示すスクリプトは CentOS 7.1 の仮想マシンを指定した IP アドレスでインストールし、Web サーバーを起動して、Firewall の設定をする例です。シェルの実行が完了した後は、ブラウザで http://192.168.122.111 にアクセスして Apache のテスト画面を見ることができます。また仮想マシンのコンソールにアクセスするには、root ユーザーから「virsh console centos7-web」コマンドを実行します。CTRL + ] をタイプすると仮想マシンのコンソールから抜け出ることができます。

スクリプトを実行する前に、事前に CentOS 7.1 のインストールメディア「CentOS-7-x86_64-DVD-1503-01.iso」を「/var/lib/libvirt/images」ディレクトリ以下にコピーしておいてください。

以下のサンプルはここからダウンロードできます。

#!/bin/sh

echo "*** installation job starting ***"

# ----------------------------------------------------------
# Parameters
# ----------------------------------------------------------

# Guest Name (Domain Name)
DOM=centos7-web
# Guest Image File
IMG=/var/lib/libvirt/images/${DOM}.qcow2
# Guest Memory Size (MB)
RAM=1024
# Guest Image File Size (GB)
SIZE=10
# Install Media (ISO)
DVD=/var/lib/libvirt/images/CentOS-7-x86_64-DVD-1503-01.iso
# Kickstart file
KSF=${DOM}-ks.cfg

# root password
PASSWORD=password
# Hostname
HOSTNAME=centos7-web.example.com
# IP Address
IP=192.168.122.111
# Netmask
NETMASK=255.255.255.0
# Gateway
GATEWAY=192.168.122.1
# DNS server
NAMESERVER=8.8.8.8,8.8.4.4
# NTP server
NTPSERVERS=0.centos.pool.ntp.org,1.centos.pool.ntp.org,2.centos.pool.ntp.org,3.centos.pool.ntp.org

# ----------------------------------------------------------
# Initial Check
# ----------------------------------------------------------

# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

# ----------------------------------------------------------
# remove & clear old vm if existing
# ----------------------------------------------------------

# stop domain forcefully
virsh destroy ${DOM} >/dev/null 2>&1
# undefine domain
virsh undefine ${DOM} --remove-all-storage >/dev/null 2>&1
# remove domain image file
rm -f ${IMG} >/dev/null 2>&1

# ----------------------------------------------------------
# create kickstart file
# ----------------------------------------------------------

echo "*** kickstart file creating ***"

cat << _EOF_ > ${KSF}
# Install OS instead of upgrade
install
# shutdown after installation
shutdown
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# graphical or text install
text
# Run the Setup Agent on first boot
firstboot --disable
# use /dev/vda for install destination
ignoredisk --only-use=vda
# SELinux configuration
selinux --enforcing
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network \
--device=eth0 \
--bootproto=static \
--ip=${IP} \
--netmask=${NETMASK} \
--gateway=${GATEWAY} \
--nameserver=${NAMESERVER} \
--noipv6 \
--activate
network --hostname=${HOSTNAME}
# Firewall configuration
firewall --enabled --ssh --http
# Root password
rootpw --plaintext ${PASSWORD}
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Tokyo --isUtc --ntpservers=${NTPSERVERS}
# System bootloader configuration
bootloader --location=mbr --boot-drive=vda --append=" crashkernel=auto" 
# Partition clearing information
clearpart --none --initlabel 
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=vda --size=500
part pv.20 --fstype="lvmpv" --ondisk=vda --size=8192 --grow
volgroup centos --pesize=4096 pv.20
logvol swap --fstype="swap" --size=921 --name=swap --vgname=centos
logvol / --fstype="xfs" --grow --maxsize=51200 --size=1024 --name=root --vgname=centos

%packages
@core
@base
@web-server
kexec-tools

bind-utils
binutils
chrony
lsof
ltrace
man-pages
net-tools
pciutils
psmisc
sos
strace
sysstat
tcpdump
telnet
usbutils
wget

%end
_EOF_

echo "*** kickstart file created ***"

# ----------------------------------------------------------
# guest install using virt-install command
# ----------------------------------------------------------

echo "*** virt-install starting ***"

virt-install \
--name=${DOM} \
--ram=${RAM} \
--vcpus=1 \
--os-type=linux \
--os-variant=rhel7.0 \
--file=${IMG} \
--file-size=${SIZE} \
--location=${DVD} \
--network=bridge:virbr0 \
--nographics \
--initrd-inject=${KSF} \
--extra-args="ks=file:/${KSF} console=tty0 console=ttyS0,115200n8" \
--noautoconsole

# wait until guest installation is completed
finished="0";
while [ "${finished}" = "0" ]; do
  sleep 5
  domstate=`virsh domstate ${DOM}`
  if [ "${domstate}" = "shut off" ]; then
    finished=1;
  fi
done
sleep 5

echo "*** virt-install finished ***"

# ----------------------------------------------------------
# customize guest using guestfish
# ----------------------------------------------------------

echo "*** guestfish starting ***"

# swapiness settings
F1=/etc/sysctl.d/swappiness.conf
# ipv6 settings
F2=/etc/sysctl.d/disable_ipv6.conf
# firewall settings file (original)
F3=/etc/firewalld/zones/public.xml
# firewall settings (new) ... ssh, http, https enabled
F3_NEW=$(mktemp)
cat << _EOF_ > ${F3_NEW}
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="http"/>
  <service name="https"/>
</zone>
_EOF_

# run guestfish
guestfish -d ${DOM} -i << _EOF_
  # change grub timeout setting
  command "sed -i -e 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=0/g' /etc/default/grub"
  command "grub2-mkconfig -o /boot/grub2/grub.cfg"

  # suppress swapping
  write        ${F1} "vm.swappiness = 0\n"

  # disable ipv6
  write        ${F2} "net.ipv6.conf.all.disable_ipv6 = 1\n"
  write-append ${F2} "net.ipv6.conf.default.disable_ipv6 = 1\n"

  # enable httpd
  command "systemctl enable httpd"

  # backup oroginal firewall setting
  cp-a ${F3} ${F3}.old
  # upload new firewall settings
  upload ${F3_NEW} ${F3}
  # enable firewalld
  command "systemctl enable firewalld"
_EOF_

echo "*** guestfish finished ***"

# ----------------------------------------------------------
# Start guest
# ----------------------------------------------------------

virsh start ${DOM}

echo "*** all job finished ***"

# ----------------------------------------------------------
# EOJ
# ----------------------------------------------------------

2016.10.2 追記

最新のスクリプトは github に公開しています

最新のスクリプトは以下の github に公開しています

https://github.com/uvirt/kvm-sample

XRDP Remote Desktop のインストール

XRDP をインストールすると、Windows のリモートデスクトップ機能を使用して Fedora に接続できるのでとても便利です。以下は Fedora 22 で動作確認しました。ログインユーザは wheel グループに属するユーザ(admin user)を用いて確認しました。

xrdp パッケージをインストール

# dnf install xrdp -y

SELinux をいったん Permissive に変更

xrdp を起動する前にいったん SELinux を Permissive に変更します。これをしないと xrdp サービスの起動に失敗する場合があります。最終的には SELinux 関連の設定をおこない、その後に Enforcing に戻すことにします。

# setenforce 0

xrdp サービス起動・有効化

xrdp サービス起動・有効化します。

# systemctl enable xrdp.service
# systemctl start xrdp.service

# systemctl enable xrdp-sesman.service
# systemctl start xrdp-sesman.service

正常起動されていることを確認します。以下のように「active (running)」と表示されていれば OK です。

# systemctl status xrdp
  ...
  Active: active (running) ...
  ...

Firewall の xrdp ポートを開く

現在の Firewall ゾーンを取得します。Fedora Live CD を使ってインストールした環境では、デフォルトでは「FedoraWorkstation」になっています。

# ZONE=`firewall-cmd --get-active-zone|head -1`
# echo $ZONE
FedoraWorkstation

サービスの一覧を取得し、「ms-wbt」が存在することを確認します。「ms-wbt」とは Microsoft Windows Based Terminal の略で Windows Remote Desktop を意味します。「ms-wbt」は 3389/tcp ポートを使用します。

# firewall-cmd --get-services
... ms-wbt ...

現在のゾーンに「ms-wbt」サービスを追加します。

# firewall-cmd --zone=$ZONE --add-service=ms-wbt

ただし、これは Runtime に設定されただけなので、次回起動時には設定が無くなります。再起動後も有効になるよう Permanent にも設定します。

# firewall-cmd --permanent --zone=$ZONE --add-service=ms-wbt

現在のゾーンに「ms-wbt」サービスが追加されたことを確認します。

# firewall-cmd --list-services --zone=$ZONE
# firewall-cmd --permanent --list-services --zone=$ZONE

SELinux 設定のバグ対応

SELinux 設定のバグがあるようですのでこれに対応します。「/usr/sbin/xrdp」および「/usr/sbin/xrdp-sesman」の 2 つのファイルに関して SELinux コンテキストを変更します。

# chcon -t bin_t /usr/sbin/xrdp /usr/sbin/xrdp-sesman

参考)
https://bugzilla.redhat.com/show_bug.cgi?id=1177202

SELinux Polkit Rule の設定

wheel グループのユーザーでリモートデスクトップに接続した際、いくつか root パスワードを求められるので、これにスキップできるようにします。

# ls /etc/polkit-1/rules.d/
# cat << "EOF" > /etc/polkit-1/rules.d/99-xrdp-remote-desktop.rules
//
// wheel users can network proxy configure
//
polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.packagekit.system-network-proxy-configure" && subject.isInGroup("wheel")) {
      return polkit.Result.YES;
  }
});

//
// wheel users can execute xrandr (create a color managed device)
//
polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.color-manager.create-device" && subject.isInGroup("wheel")) {
      return polkit.Result.YES;
  }
});

//
// wheel users can execute system-sources-refresh
//
polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.packagekit.system-sources-refresh" && subject.active && subject.isInGroup("wheel")) {
      return polkit.Result.YES;
  }
});

//
// wheel users can execute 'systemctl restart xrdp'
//
polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.systemd1.manage-units" && subject.active && subject.isInGroup("wheel")) {
      return polkit.Result.YES;
  }
});

//
// wheel users can execute NetworkManager.settings.modify.system
//
polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" && subject.isInGroup("wheel")) {
      return polkit.Result.YES;
  }
});
EOF

SELinux Policy の設定

ログイン時に毎回、ABRT によるエラーが報告されるのですが、つぎの SELinux の対応をすることで回避できます。semodule コマンドの実行には時間がかかる場合があります。

# dnf -y install selinux-policy-devel
# mkdir temp
# cd temp
# cat << "EOF" > mypol.te

module mypol 1.0;

require {
        type unconfined_service_t;
        type colord_t;
        class dir search;
        class file { read getattr open };
}

#============= colord_t ==============
allow colord_t unconfined_service_t:dir search;
allow colord_t unconfined_service_t:file { read getattr open };
EOF

# make -f /usr/share/selinux/devel/Makefile mypol.pp
# semodule -i mypol.pp
# cd ..
# rm -rf temp

この問題は以下に報告されているのですが、まだ解決されていないようです。
https://bugzilla.redhat.com/show_bug.cgi?id=1205022

リブートして接続確認

リブートした後、Windows PC から Remote Desktop を使って接続できることを確認してください。Linux から接続する場合は rdesktop、xfreerdp コマンドなどがあります。SELinux はリブートした後は有効になっているはずです。SELinux 関連の処理によりリブートには時間がかかる場合があります。

画面解像度の変更

XRDP によるリモートデスクトップ接続をおこなったとき、デフォルトでは画面の解像度がローカルPCの画面と同じになります。画面の解像度を変更したい場合は、つぎの手順でおこないます。

まずは、ログインしたユーザーアカウントでターミナルを開き、xrandr コマンドを使って接続されているモニターの名前(VNC-0)とサポートされている解像度を確認します。つぎに xrandr コマンドでそのモニター名と解像度を指定して変更します。

$ xrandr
Screen 0: minimum 32 x 32, current 1280 x 1024, maximum 32768 x 32768
VNC-0 connected primary 1280x1024+0+0 0mm x 0mm
   1920x1200     60.00  
   1920x1080     60.00  
   1600x1200     60.00  
   1680x1050     60.00  
   1400x1050     60.00  
   1360x768      60.00  
   1280x1024     60.00* 
   1280x960      60.00  
   1280x800      60.00  
   1280x720      60.00  
   1024x768      60.00  
   800x600       60.00  
   640x480       60.00  

$ xrandr --output VNC-0 --mode 1024x768

デフォルトの解像度の設定

Gnome の設定画面から画面の解像度を変更しても、その内容が保存されないようです。次回のログイン時に元の解像度に戻ってしまいます。ログインのたびに毎回、xrandr コマンドを入力して設定しなおすのは面倒です。これを回避するには、ログイン時に自動的に xrandr コマンドを実行することで可能です。

ユーザーの HOME ディレクトリ下の「.config/autostart/」ディレクトリに「*.desktop」ファイルを作成します。ここでは、「$HOME/.config/autostart/xrandr-setup.desktop」という名前で作成します。この例は解像度を 1024×768 に指定しています。利用状況に合わせて適切に変更してください。

$ mkdir -p $HOME/.config/autostart/

$ cat << "EOF" > $HOME/.config/autostart/xrandr-setup.desktop
[Desktop Entry]
Name=xrandr-setup
GenericName=xrandr-setup
Comment=Screen Resolution for Remote Desktop
Exec=/usr/bin/xrandr --output VNC-0 --mode 1024x768
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
EOF

ログインできない時の対応

リモートデスクトップにログインできなくなったという場合は、ssh でログインして GDM の再起動を試してみてください。

# systemctl restart gdm

以上です。Fedora のリモートデスクトップをお楽しみください。

VMware Workstation 11 Linux 版のインストール

Linux 上に仮想化環境を構築するためには、無料で利用可能な Linux KVM の他に、有償で VMware Workstation を利用することもできます。スナップショットの使い勝手やパフォーマンスの良さ、各種ハイパーバイザーをゲストとしてインストールしたときの安定性などを考えると十分に元が取れる製品です。複数ホストが連携する Cloud 製品のインストール手順確認なども VMware Workstation 上で十分にできます。自分の環境では Linux KVM と VMware Workstation の両方をインストールしています。以下は Fedora 22 にて動作確認しました。

VMware Workstation 11 のインストール準備

VMware Workstation のインストールに必要な依存パッケージを事前にインストールします。

# dnf -y group install "Development Tools"
# dnf -y install kernel-devel kernel-headers

VMware Workstation のダウンロード

以下より VMware Workstation 11 Linux 評価版をダウンロードします。
http://www.vmware.com/products/workstation/workstation-evaluation

VMware Workstation 11 のインストール開始

# chmod a+x ./VMware-Workstation-Full-11.1.2-2780323.x86_64.bundle
# ./VMware-Workstation-Full-11.1.2-2780323.x86_64.bundle

下記のようなエラーメッセージが表示されますが無視して進めます。

Extracting VMware Installer...done.

(vmware-installer.py:28144): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita",

(vmware-installer.py:28144): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita",
/usr/share/themes/Adwaita/gtk-2.0/gtkrc:1163: error: unexpected identifier `direction', expected character `}'
Gtk-Message: Failed to load module "pk-gtk-module": libpk-gtk-module.so: cannot open shared object file: No such file or directory
Gtk-Message: Failed to load module "canberra-gtk-module": libcanberra-gtk-module.so: cannot open shared object file: No such file or directory

(1)「VMware Workstation – End User License Agreement」の画面が表示されるので、「I accept …」を選択して [Next] ボタンをクリックします。

vmware-01

(2)「VMware OVF Tool component for Linux – End User License Agreement」の画面が表示されるので、「I accept …」を選択して [Next] ボタンをクリックします。

vmware-02

(3)「Would you like to check for product updates on startup?」の画面が表示されるので、「No」を選択して [Next] ボタンをクリックします。

vmware-03

(4)「Would you like to help make VMware software …」の画面が表示されるので、「No」を選択して [Next] ボタンをクリックします。

vmware-04

(5)「Please enter the user that will initially connect to Workstation Server …」の画面が表示されるので、「root」を変更して通常ログインして使用するユーザー名を入力します。[Next] ボタンをクリックしてつぎに進みます。

vmware-05

(6)「Please choose a directory for your shared virtual machines.」の画面が表示されるので、特に変更しないで、[/var/lib/vmware/Shared VMs]のまま[Next] ボタンをクリックしてつぎに進みます。

vmware-06

(7)「Please enter the port to use for https access to Workstation Server.」の画面が表示されるので、HTTPS port: [443] を適切に変更して [Next] ボタンをクリックしてつぎに進みます。

vmware-07

(8)「Enter license key.」の画面が表示されるので、空白のまま [Next] ボタンをクリックしてつぎに進みます。

vmware-08

(9)「The product is ready to installed.」の画面が表示されるので、[Install] ボタンをクリックしてつぎに進みます。

vmware-09

(10)「Installing …」の画面が表示されるので、完了するまで待ちます。

vmware-10

(11)「Installation was successful.」の画面が表示されるので、[Close] ボタンをクリックします。

vmware-11

インストールが完了した後、VMware Workstation を起動すると、初回に license key を入力するか、入力しないまま30日の評価期間として利用を続けるかを聞かれますので、いずれかを選択します。license key の入力は後からいつでも入力可能です。また license key を入力しなくても評価期間内であればフル機能が利用できます。

VMware Workstation には仮想マシンを接続するネットワークとしてデフォルトで3種類が用意されています。vmnet0 (Bridged)、vmnet1 (host-only)、vmnet8 (NAT)です。

仮想マシンを vmnet0 (Bridged) に接続すると、その仮想マシンを VMware ホストの外部のネットワークに接続することができます。vmnet1 (host-only) は VMware ホストとのみ接続されているプライベートなネットワークです。主に外部との接続を遮断したセキュアな環境で作業したいときに利用します。vmnet8 (NAT) は VMware が自動で用意してくれる仮想的な NAT ルータを通して外部と接続できるプライベートなネットワークです。NAT ルータの Gateway のアドレスは末尾が「.2」で固定されています。その他、vmnet2〜7、vmnet9〜 を自分でカスタムに定義することで自由なネットワークの構築が可能です。

VMware Workstation を最初に起動したら、メニューから「Edit > Virtual Network Editor」を選択して、「vmnet1 (host-only)」および「vmnet8 (NAT)」のネットワークアドレスを自分が使いやすい値に変更したほうが良いでしょう。

例えば、vmnet1 (host-only) ネットワークのネットワークアドレスを 192.168.10.0/24 に設定した場合、末尾が「.1」の IP アドレスすなわち 192.168.10.1 が VMware ホスト側に割り当てられ、それ以外の IP アドレスはゲストに割り当てることができます。

また、vmnet8 (NAT) ネットワークのネットワークアドレスを 192.168.20.0/24 に設定した場合、末尾が「.1」の IP アドレスすなわち 192.168.20.1 がホスト側に割り当てられ、末尾が「.2」の IP アドレスすなわち 192.168.20.2 が NAT ルータの Gateway に割り当てられ、それ以外の IP アドレスはゲストに割り当てることができます。ゲストは NAT ルータの Gateway と通して外部との通信が可能です。

VMware Workstation 11 のドキュメントは以下の URL に公開されています。
http://pubs.vmware.com/workstation-11/index.jsp

Linux KVM のインストール

Linux 標準の仮想化機能 KVM のインストール手順を説明します。Fedora 22 で動作確認しました。

KVM とは

KVM とは Kernel-based Virtual Machine の略で Linux に標準で用意されている仮想化機能です。KVM をインストールするとことにより、Linux ホスト内に仮想マシンを簡単に作成することができます。KVM をインストールするとデフォルトで NAT 構成の仮想ネットワーク(192.168.122.0/24) が Linux 内に作成されます。仮想マシンを作成すると、この仮想ネットワークに接続され、DHCP 機能によって、ゲスト OS に対して IPアドレスが自動的に付与されます。例えば 192.168.122.111 といった IP アドレスになります。仮想マシンが外部とネットワーク通信をする際には、仮想ゲートウェイ 192.168.122.1 を介して通信します。このゲートウェイの IP アドレスは Linux ホスト自身に割り当てられた IP アドレスでもあるため、ゲスト OS から Linux ホストに ssh 接続したいときは、宛先 IP アドレスに 192.168.122.1 を指定することにより接続できます。

NAT 構成の仮想ネットワークでは Linux ホストはルータとして機能するので、仮想マシンから受け取ったパケットを仮想ゲートウェイ 192.168.122.1 から受け取り、Linux ホストの物理 NIC を通して外部に転送します。また外部から戻ってきたレスポンスは物理 NIC で受け取った後は、仮想ゲートウェイを通して仮想マシンにルーティングします。このようにゲスト PC は外部から隠蔽されています。そのため、ゲスト PC に Web サーバーをインストールしても、そのままでは外部のネットワークに公開することはできません。これをするには、別途 Bridge ネットワークを作成する必要がありますが、今回の説明では省略します。

仮想ネットワーク(192.168.122.0/24) は、環境によっては異るネットワークアドレスに設定されます。例えば、筆者の環境では VMware Workstation もインストールしているためか、ネットワークアドレスは 192.168.124.0/24 に設定されています。

なお、KVM を利用するには、Linux の 64-bit OS が必要です。また、CPU は仮想化支援機能が必要となります。

Linux KVM のインストール

KVM をインストールするにはパッケージグループ virtualization をインストールします。パッケージグループ virtualization が存在するかどうかは、つぎのコマンドで確認できます。

# dnf grouplist hidden -v

パッケージグループ virtualization の内容を確認するには、つぎのコマンドで確認できます。

# dnf groupinfo virtualization

Group: Virtualization
 Description: These packages provide a virtualization environment.
 Mandatory Packages:
   virt-install
 Default Packages:
   libvirt-daemon-config-network
   libvirt-daemon-kvm
   qemu-kvm
   virt-manager
   virt-viewer
 Optional Packages:
   guestfs-browser
   libguestfs-tools
   python-libguestfs
   virt-top

必須(Mandatory)、デフォルト(Default)、オプション(Optional)でインストールされるパッケージの一覧が表示されます。特に問題なさそうなのでオプションも含めてすべてをインストールします。

# dnf -y group install virtualization --setopt=group_package_types=mandatory,default,optional

インストールしたら、いったんリブートします。

# reboot

以上で Linux KVM のインストールは完了です。

仮想マシンの作成

仮想マシンの作成や仮想ネットワークの作成などは、Virtual Machine Manager (virt-manager) という GUI アプリケーションを操作して作成できます。仮想マシンを作成すると、仮想マシンの定義ファイルと仮想マシンのイメージファイルが作成されます。仮想マシンの定義ファイルは「/etc/libvirt/qemu/」ディレクトリ以下に配置されます。仮想マシンのイメージファイルは「/var/lib/libvirt/images/」ディレクトリ以下に配置されます。

仮想マシンの OS インストール時に使用するインストールメディアは、ISO イメージファイルの形で「/var/lib/libvirt/images/」ディレクトリ以下にコピーしておくと便利です。

仮想マシンの作成には virt-manager を利用する他に、virt-install コマンドを使うこともできます。たとえば、CentOS 7.1 の仮想マシンを作成するには、以下のように入力します。メモリーは MB 単位で指定し、ディスクは GB 単位で指定します。

# cp CentOS-7-x86_64-DVD-1503-01.iso /var/lib/libvirt/images/

# virt-install \
--name c71 \
--memory 1024 \
--disk path=/var/lib/libvirt/images/c71.img,size=10 \
--network network:default \
--vnc \
--cdrom /var/lib/libvirt/images/CentOS-7-x86_64-DVD-1503-01.iso

virt-install コマンドが開始されると、すぐにインストーラの GUI 画面が表示されるので、通常の OS インストール手順と同様に操作を進めてインストールを完了させます。

virt-manager 起動時の root パスワード入力の省略

virt-manager を一般ユーザーから起動しようとすると、そのままでは SELinux の機能により root ユーザーのパスワード入力が求められます。wheel グループに所属しているユーザーの場合、root ユーザーのパスワード入力を省略するには、「/etc/polkit-1/rules.d/」ディレクトリ以下にルールを作成します。

# cat << "EOF" > /etc/polkit-1/rules.d/80-libvirt-manage.rules
//
// wheel user can execute virt-manager
//

polkit.addRule(function(action, subject) {
  if (action.id == "org.libvirt.unix.manage" && subject.local && subject.active && subject.isInGroup("wheel")) {
      return polkit.Result.YES;
  }
});
EOF

上記のルール設定は、action.id が “org.libvirt.unix.manage” のときは、それを許可するといった意味になります。この action.id を調べるには、つぎのコマンドで確認できます。

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0 --no-page | grep action

仮想マシンの画面解像度の設定

Fedora 22 の KVM 仮想マシンを作成した場合、仮想マシンの画面の解像度がホスト PC の画面と同じになるようです。これを変更するには、つぎの手順でおこないます。仮想マシンにて xrandr コマンドで仮想マシンに接続されているモニターの名前(Virtual-0)とサポートされている解像度を確認します。

$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 8192 x 8192
Virtual-0 connected primary 1920x1200+0+0 0mm x 0mm
   1920x1200     59.88* 
   1920x1080     59.96  
   1600x1200     59.87  
   1680x1050     59.95  
   1400x1050     59.98  
   1280x1024     59.89  
   1440x900      59.89  
   1280x960      59.94  
   1280x854      59.89  
   1280x800      59.81  
   1280x720      59.86  
   1152x768      59.78  
   1024x768      59.92  
   800x600       59.86  
   848x480       59.66  
   720x480       59.71  
   640x480       59.38  
Virtual-1 disconnected
Virtual-2 disconnected
Virtual-3 disconnected

xrandr コマンドで仮想マシンの解像度を変更します。

$ xrandr --output Virtual-0 --mode 1024x768

仮想マシンの解像度をリブート後も設定を有効にするには、以下の設定を追加します。

# cat << "EOF" > /etc/X11/xorg.conf.d/40-monitor.conf
Section "Monitor"
  Identifier  "Virtual-0"
  Option      "PreferredMode" "1024x768"
EndSection
EOF

Boxes の利用

一度仮想マシンを作成したら、仮想マシンの操作は virt-manager の他に Boxes というアプリを利用して操作することもできます。Boxes を利用するには、最初に起動したときに、

1) [New] ボタンをクリックします。
2) Source Selection 画面が表示されます。
3) Enter URL を選択し、「qemu:///system」を入力します。
4) [Continue] ボタンをクリックします。
5) [Create] ボタンをクリックします。

以上で既存のゲスト VM の一覧が表示されるので、アイコンをクリックすると起動されます。