前回の記事の続きです。
CentOS7の仮想マシンをHyper-Vで構築すると、ファイル共有ができない、解像度が小さいといった問題が発生します。非常に使い勝手が悪いのでどうにかしようと思ったところ、xrdpを利用すれば解決するというのが前回までのご紹介内容でした。
今回の記事では実際に仮想マシンの構築からxrdpの導入、そして仮想マシンへの接続をxrdp経由で行えるように仮想マシン接続の設定をリモートデスクトップ接続に変更するところまでご紹介致します。
Hyper-Vを使う準備
Hyper-Vを利用するにはWindows10 ProまたはWindows10 Enterpriseである必要があります。
Windows10 Homeをお使いの場合はHyper-Vを利用することができませんので、まずはご自身の環境をご確認ください。
なお、Windows10 Proをお使いの方でも、初期設定ではHyper-Vの要件である仮想化オプションがBIOS上でオフになっている可能性があります。
そのため、まずはご自身の環境を確認し、仮想化オプションがオフになっている方は、BIOS設定から仮想化オプションを有効にしましょう。
【BIOS設定の確認】
BIOS設定はPCの電源ボタンを押した後、OSが立ち上がる前にF10やF2などのボタンから開くことが可能です。
(メーカーによって異なるのでお使いのPCのBIOS設定画面の開き方をご確認ください。)
BIOS画面を開いた後は、ConfigurationやSystem Configurationといったメニュー内に「Virtualization Technology」という項目がありますので、こちらを「Enabled」にします。
その後はExitメニューから設定変更内容を保存してBIOS画面を閉じます。
【Hyper-Vの有効化】
Hyper-VはWindowsのオプション機能のため、通常デフォルト設定ではオフになっていると思います。
Windowsの「コントロールパネル」にある「プログラムと機能」から有効化します。
「プログラムと機能」の左側にある「Windowsの機能の有効化または無効化」をクリックします。
「Hyper-V」にチェックして「OK」ボタンをクリックします。
(※ Hyper-V配下すべてにチェックされます。)
PowerShellから有効化する方法もあります。その場合は管理者権限でPowerShellを起動して、以下のコマンドを入力します。
【PowerShell】
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Hyper-Vが有効化されると、スタートメニューの「Windows 管理ツール」にHyper-Vに関するメニューが追加されていることが確認できると思います。
CentOS7の仮想マシン作成
まずはCentOS7のiosイメージを公式サイトからダウンロードします。
https://www.centos.org/download/
続いて先ほど有効化したHyper-Vを起動して仮想マシンを作成します。
Windowsのメニュー「Hyper-V クイック作成」をクリックします。
「ローカル インストール元」をクリックします。また、「その他のオプション」も展開しておきます。
公式サイトからダウンロードしたisoファイルを選択します。
なおCentOS7をインストールするため、「このマシンではWindowsを実行します。」のチェックは外します。
仮想マシンの名称はご自身で分かりやすい名称に変更します。(デフォルトは「新しい仮想マシン」)
「仮想マシンの作成」ボタンをクリックすると仮想マシンの作成が完了します。
完了画面が表示されますので、続けて「接続」ボタンをクリックして仮想マシンを起動し、CentOS7のインストール作業を行っていきましょう。
CentOS7のインストール
CentOS7をインストールします。
仮想マシンを起動すると、黒い画面にメニューが表示されます。
一番上の「Install CentOS 7」を選択してEnterキーを押下します。
言語の選択画面が表示されますので、使用言語を選択して「続行」ボタンをクリックします。
※ 選択した言語によってボタン名も変わります。初期表示の英語では「Continue」ボタンになります。
インストールの概要画面が表示されますので、「ソフトウェアの選択」から初期インストールするソフトウェアを選択します。
Linuxでは最小限のインストールを行った場合、Windowsのようなグラフィカルな操作画面ではなく、コマンドプロンプトやPowerShellのようなコマンド入力のみの操作画面になります。
WindowsのようなGUIをインストールするにはGnomeやKDEといったソフトウェアをインストールする必要があります。
開発環境として利用する場合は一番下の「開発およびクリエイティブワークステーション」を選択します。
なお、最小構成で始めても自分自身でGnomeやKDEといったソフトウェアを後からインストールすることも可能です。
※ 右側にさらにインストールするソフトウェアの詳細が表示されますので、必要なソフトウェアにチェックを入れます。
ソフトウェアを選択したら左上の「完了」ボタンをクリックします。
インストールの概要画面が表示されますので、「インストール先」から初期インストールするディスク領域の設定を行います。
ローカルの標準ディスクに表示されているVirtual Diskを選択します。
新規インストールの場合は「完了」ボタンをクリックします。
もしも既に使用済みのVirtual Diskに上書きインストールする場合は、「追加の空き領域を利用できるようにする」にチェックを入れて「完了」ボタンをクリックします。
「追加の空き領域を利用できるようにする」にチェックを入れている場合は、使用済みの領域などが表示されますので、削除してすべて使用可能な空き領域にすることができます。
削除した後に「領域の再利用」ボタンをクリックします。
インストールの概要画面が表示されますので、続いて「ネットワークとホスト名」からネットワークの設定を行います。
(※ 以下の画像にはインストール先の設定に△のアイコンが表示されていますが、上述の通り設定が完了すると表示が消えます。)
右上のネットワーク接続をオンにして「完了」ボタンをクリックします。
インストールの概要画面が表示されますので、続いて画面右下の「インストールの開始」ボタンをクリックします。
(※ 以下の画像では「インストールの開始」ボタンが非アクティブになっておりますが、インストール先の設定が完了するとアクティブになります。)
インストールが開始すると、「ROOTパスワード」の設定と、「ユーザの作成」ができるようになります。
ROOTパスワードとは、Linux系OSにおける管理者ユーザ「root」ユーザのパスワードになります。
ソフトウェアのインストールや設定など、管理者ユーザの権限が必要な場合にrootユーザを使います。
※ WindowsにおけるAdministratorと同じようなユーザです。
「ユーザの作成」ではroot以外のユーザを作成します。管理者権限を持つユーザや一般ユーザを作成することができます。
まずは「ROOTパスワード」をクリックします。
パスワードの設定画面が表示されますので、パスワードを入力して画面左上の「完了」ボタンをクリックします。
続けて「ユーザの作成」からroot以外のユーザを作成します。画面に従ってユーザ名等入力します。
入力が終わったら画面左上の「完了」ボタンをクリックします。
インストール作業が完了すると、画面右下に「再起動」のボタンが表示されるので、ボタンをクリックして再起動します。
再起動すると初期セットアップ画面が表示されます。「LICENSE INFORMATION」でライセンスに同意します。
もしもネットワーク接続がオフになっていた場合は「ネットワークとホスト名」からネットワーク接続をオンにします。
画面左下の「ライセンス契約に同意します」にチェックを入れて画面左上の「完了」ボタンをクリックします。
初期セットアップ画面が表示されるので、画面右下の「設定の完了」ボタンをクリックします。
CentOS7のログイン画面が表示されます。先ほど「ユーザの作成」で作成したroot以外のユーザが表示されると思います。
アカウント名をクリックして、登録したパスワードを入力してログインします。
ログインに成功するとCentOSのデスクトップ画面が表示されます。
同時に初期設定の確認画面も表示されます。
使用する言語、キーボードレイアウト、タイムゾーン、プライバシーの設定等、画面の指示に従いながら
基本的には「次へ」ボタンをクリックしていくことで完了します。
ここまででCentOS7のインストール作業は完了です。
後はインストールしたソフトウェアのセキュリティアップデートや個別に追加でインストールしたいソフトウェアをインストールすることになります。
今回はxrdpのインストールを行ってまいります。
小ネタ(「デスクトップ」、「ダウンロード」などのフォルダ名を英語名にする)
本題のxrdp,xorgxrdpのインストール前に小ネタです。CentOS7を日本語でインストールすると、各種標準のフォルダ名が日本語名になります。GUI環境であるとはいえ、Linuxでは端末(ターミナル)を開いてコマンドでファイル操作を行うのが一般的です。(そのほうが便利で楽なのです。)
コマンドで操作する際、コマンドはすべてアルファベットなので、フォルダ名が日本語だと言語切り替え操作によりコマンド入力が煩雑になります。そのため、フォルダ名を英語名に置き換えましょう。
まず、端末を起動します。CentOS7のデスクトップで右クリックを行い、コンテキストメニューを開きます。
メニューにある「端末を開く」をクリックします。
端末が表示されます。WindowsにおけるコマンドプロンプトやPowerShellのようなものです。
「ls」と入力してEnterキーを押下するとログインユーザのホームディレクトリにある各種フォルダが表示されます。
日本語を標準言語にすると以下のように日本語名のフォルダが作成されます。
(※ メニュー等は日本語でもこれらのフォルダ名は標準で英語のままにして欲しいといつも思う。)
以下のコマンドを入力します。
LANG=C xdg-user-dirs-gtk-update
上記コマンド入力後、Enterキーを押下すると、標準のフォルダ名を英語名に変更する旨確認の画面が表示されます。
「Update Names」ボタンをクリックします。
これで標準のフォルダ名が英語名になり、ファイル・フォルダの移動やコピーといったコマンドを入力するときが非常に楽になります。
xrdp, xorgsrdpのインストール
ようやく本題です。Hyper-Vの使い勝手を良くするためにファイル共有と解像度共有をリモートデスクトップ接続を使って仮想マシン接続することで実現するため、CentOS7にxrdpとxorgxrdpをインストールします。
なお、xrdp 0.9.11が割と最近リリースされたのですが、0.9.11をインストールすると以下の設定ではvsock経由で接続ができません。(※ 設定ファイルの仕様が変わってしまったため。)
xrdpのサービス起動時に失敗します。xrdp.iniのport項目の書き方をvsock用に変更しても仮想マシン接続の拡張セッション経由で接続ができません。
もう少し設定内容確認してみますがこれから導入する方はひとまずxrdp 0.9.10にダウングレードして利用するのが手っ取り早いです。
・yumの更新と必要な開発ツールのインストール
# yum -y install finger cmake patch gcc make autoconf libtool automake pkgconfig openssl-devel gettext file pam-devel libX11-devel libXfixes-devel libjpeg-devel flex bison gcc-c++ libxslt perl-libxml-perl xorg-x11-font-utils xmlto-tex git libXrandr-devel nasm xorg-x11-server-devel xorg-x11-server-Xorg libXfont2-devel
・gitからxrdp, xorgxrdp のダウンロード
# cd
# mkdir git
# cd git
# mkdir neutrinolabs
# cd neutrinolabs
# git clone --recursive https://github.com/neutrinolabs/xrdp.git
# git clone https://github.com/neutrinolabs/xorgxrdp.git
・xrdpのインストール
※ vsock, fuse, ipv6以外はオプションで。
# cd xrdp
# ./bootstrap
# ./configure --enable-vsock --enable-fuse --enable-ipv6 --enable-jpeg --enable-pixman
# make
# make install
・xorgxrdpのインストール
# cd xorgxrdp
# ./bootstrap
# ./configure XRDP_CFLAGS=-I~/git/neutrino/xrdp/common XRDP_LIBS=" "
# make
# make install
xrdp, xorgsrdpの設定、およびその他の関連する設定作業
・xrdp.ini, sesman.iniの設定
# cd /etc/xrdp
# vi xrdp.ini
【before】
use_vsock=false
security_layer=negotiate
crypt_level=high
bitmap_compression=true
max_bpp=32
【after】
use_vsock=true
security_layer=rdp
crypt_level=none
bitmap_compression=false
max_bpp=24
# vi sesman.ini
【before】
X11DisplayOffset=10
FuseMountName=thinclient_drives
【after】
X11DisplayOffset=0
FuseMountName=shared_drives
・Xwrapper.configファイルの作成
# echo "allowed_users=anybody" > /etc/X11/Xwrapper.config
・hv_sock.confファイルの作成
# echo "hv_sock" > /etc/modules-load.d/hv_sock.conf
・xrdp session ポリシーの作成
# vi /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
・日本語キーボードの設定
# cd /etc/xrdp
# curl https://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini > km-e0010411.ini
# cp km-e0010411.ini /etc/xrdp/km-0411.ini
# cp km-e0010411.ini /etc/xrdp/km-e0200411.ini
# cp km-e0010411.ini /etc/xrdp/km-e0210411.ini
・ファイヤーウォールの設定
# firewall-cmd --permanent --add-port=3389/tcp
# firewall-cmd --permanent --add-port=3389/udp
# firewall-cmd --reload
・SELinuxの設定
※ SELinuxはひとまずpermissiveにして、エラー情報だけ捕捉するようにします。
SELinux Trouble shooterで表示されるxrdpに関するエラーを解消し、そのあとenforcingに戻すと良いと思います。
# vi /etc/selinux/config
【before】
SELINUX=enforcing
【after】
SELINUX=permissive
・サービスの自動起動設定
# systemctl enable xrdp
# systemctl enable xrdp-sesman
# systemctl start xrdp-sesman
# systemctl start xrdp
以上
あとはCentOSを一度シャットダウンして、PowerShellから以下のコマンドを実行し、仮想マシンの再起動と接続をするのみです。仮想マシンの名称はHyper-Vマネージャーの仮想マシン欄に表示されています。
【Power Shell】
Set-VM -VMName "仮想マシンの名称" -EnhancedSessionTransportType HvSocket
#ex.
Set-VM -VMName "CentOS7" -EnhancedSessionTransportType HvSocket
【ご参考】xrdp 0.9.11をインストールした場合は以下のようなエラーが発生します。portにvsock://<cid>:<port>の形式で記述してみてもダメだったので、バグ修正待ちですね。0.9.10のソースをgitからダウンロードしましょう。
# systemctl status -l xrdp
● xrdp.service - xrdp daemon
Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 木 2019-09-05 21:29:47 JST; 7s ago
Docs: man:xrdp(8)
man:xrdp.ini(5)
Process: 6739 ExecStop=/usr/local/sbin/xrdp $XRDP_OPTIONS --kill (code=exited, status=0/SUCCESS)
Process: 8524 ExecStart=/usr/local/sbin/xrdp $XRDP_OPTIONS (code=exited, status=1/FAILURE)
Main PID: 1562 (code=exited, status=0/SUCCESS)
9月 05 21:29:47 localhost.localdomain systemd[1]: Starting xrdp daemon...
9月 05 21:29:47 localhost.localdomain xrdp[8524]: (8524)(140050729548224)[INFO ] address [0.0.0.0] port [3389] mode 3
9月 05 21:29:47 localhost.localdomain xrdp[8524]: (8524)(140050729548224)[INFO ] listening to port 3389 on 0.0.0.0
9月 05 21:29:47 localhost.localdomain xrdp[8524]: (8524)(140050729548224)[ERROR] trans_listen_address failed
9月 05 21:29:47 localhost.localdomain xrdp[8524]: (8524)(140050729548224)[DEBUG] Closed socket 7 (AF_VSOCK cid -1 port -1)
9月 05 21:29:47 localhost.localdomain xrdp[8524]: (8524)(140050729548224)[ERROR] Failed to start xrdp daemon, possibly address already in use.
9月 05 21:29:47 localhost.localdomain systemd[1]: xrdp.service: control process exited, code=exited status=1
9月 05 21:29:47 localhost.localdomain systemd[1]: Failed to start xrdp daemon.
9月 05 21:29:47 localhost.localdomain systemd[1]: Unit xrdp.service entered failed state.
9月 05 21:29:47 localhost.localdomain systemd[1]: xrdp.service failed.
→ xrdp 0.9.12で改善された模様です。しかしながら、上記の設定とは異なるのでまた時間のあるときに試して新しい設定方法をご紹介します。
→ 新しい設定についてはこちら
【参考】CentOS7における設定ガイド
CentOS7環境を構築できた後はvimなどのテキストエディタ、コマンドラインでのファイル操作、ApacheやNginxといったWebサーバーの導入であったり、MariaDBなどのインストールや設定などを行うと思います。
それらCentOS7上で行うであろう設定について広くカバーされているのが「標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド」になります。
Linuxを深く知るには本書では不十分な点もありますが、CentOS7でできることを理解するには十分すぎるボリュームです。
非常に簡単にですがWordPressのインストール方法についても触れられており、1冊持っているとおおよそのことでは困らないと思います。