脳の中の絵本

疲れて動けなくなったときの症状記録。脳内妄想日記。

Hyper-V + docker + xrdp でリモートデスクトップ環境を作って遊んだ part1

タイトルの通りリハビリがてら遊んだので備忘録。初めは Windows Subsystem for LinuxBash on Ubuntu や Docker for Windows で遊ぼうと思ったのだけどいろいろうまくいかないところが出てきたので、まずはシンプルに Hyper-V 上でやってみることにした。

環境は Windows 10 Professional にて Hyper-V の機能を有効にしたところから。

f:id:ytez1012:20170913152011p:plain

OS のバージョン (win + r → winver) は下記。Anniversary Update と Creators Update を適用していたと思う(たぶん)。

f:id:ytez1012:20170913152236p:plain

まず Hyper-V マネージャー → 仮想スイッチマネージャー から適当な名前の外部仮想スイッチを作成する。管理OS(ホストOS)もそのままネットワークに接続させたいので、「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」のチェックは外さないようにする。

f:id:ytez1012:20170913152514p:plain

物理NIC - 仮想スイッチ - 仮想NIC のイメージは下記サイトを参考にさせて頂いた。とてもわかりやすい。

qiita.com

管理OS(ホストOS) → 物理NIC だったところを 管理OS → 仮想NIC → 仮想スイッチ → 物理NIC とするせいだろうか、接続が一時的に切れる様子。

f:id:ytez1012:20170913153041p:plain

コントロール パネル → ネットワークとインターネット → ネットワーク接続 を確認すると、ブリッジ接続が追加されている。これが今作成した仮想スイッチ(vsw-External)と物理NIC(Wi-Fi)を橋渡ししてくれているんだろう。

f:id:ytez1012:20170913153222p:plain

物理NIC(Wi-Fi)の方のプロパティを見てもこれだけしか表示されない。

f:id:ytez1012:20170913153355p:plain

固定IPアドレス等の設定情報は仮想スイッチのプロパティに移行されていた。

f:id:ytez1012:20170913153448p:plain f:id:ytez1012:20170913153457p:plain

仮想スイッチとは別に仮想NICのアイコンが追加されて、そちらにIPアドレス等の設定情報が移るのかなと思っていたがそうではないようだ。

続いてゲストOSをインストールする。基本 docker ホストとして使用する予定なので CoreOS とか入れてみようかとも思ったが、とりあえず CentOS7 の minimal を入れることにする。後で docker でも CentOS7 を使う予定なので、まあ同じ分には問題無いだろうと。

Hyper-V マネージャー → 新規 から仮想マシンの作成ウィザードに従って進める。"世代の指定" は第2世代 (UEFI+64bit) にし、インストールメディアに.isoを指定する

f:id:ytez1012:20170913154023p:plain f:id:ytez1012:20170913154035p:plain

これだけでゲストOSを起動したところ、うまくbootされなかった。簡単にググったところ Secure Boot が有効になっているせいのようなのでとりあえず無効にする。

f:id:ytez1012:20170913155007p:plain

ゲスト起動

f:id:ytez1012:20170913154324p:plain

イーサネットを有効にし、あとは適当に設定してインストール開始。インストール中にrootパスワードを設定しておく。

f:id:ytez1012:20170913154350p:plain

インストール完了後、再起動してログイン画面。rootでログイン。

f:id:ytez1012:20170913160238p:plain

とりあえずバージョン確認。

# バージョン確認
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

次にネットワーク設定。自分は CentOS6 で NetworkManager を無効にし ifcfg ファイルを vi で直接直して service network restart するしか能が無いので、CentOS7 のネットワーク設定は調べる必要がある。無理やり昔のスタイルに合わせることもできなくはないんだろうけど、新しいものを覚えなくては(なおそれほど新しいわけではない様子)。

# ネットワーク確認・設定

# ネットワークデバイス確認
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:15:5d:03:05:08 brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.7/24 brd 192.168.3.255 scope global dynamic eth0
       valid_lft 85282sec preferred_lft 85282sec
    inet6 2400:2410:b2a0:1800:3268:2a41:ba60:205c/64 scope global noprefixroute dynamic
       valid_lft 86238sec preferred_lft 14238sec
    inet6 fe80::5b41:776f:1c42:dbde/64 scope link
       valid_lft forever preferred_lft forever

# eth0 の現在の設定を確認
[root@localhost ~]# nmcli connection show eth0 | grep ipv4
ipv4.method:                            auto
ipv4.dns:
ipv4.dns-search:
ipv4.dns-options:                       (デフォルト)
ipv4.dns-priority:                      0
ipv4.addresses:
ipv4.gateway:                           --
ipv4.routes:
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)

# 固定IPアドレスを設定
[root@localhost ~]# nmcli c mod eth0 ipv4.method manual ipv4.addresses 192.168.3.7/24
[root@localhost ~]# nmcli c mod eth0 ipv4.gateway 192.168.3.1
[root@localhost ~]# nmcli c mod eth0 ipv4.dns 192.168.3.1

# 設定後の確認
[root@localhost ~]# nmcli connection show eth0 | grep ipv4
ipv4.method:                            manual
ipv4.dns:                               192.168.3.1
ipv4.dns-search:
ipv4.dns-options:                       (デフォルト)
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.3.7/24
ipv4.gateway:                           192.168.3.1
ipv4.routes:
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)

これでよし。ところで sshd は起動しているのだろうか。

[root@localhost ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 水 2017-09-13 15:54:29 JST; 38min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 954 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 961 (sshd)
   CGroup: /system.slice/sshd.service
           mq961 /usr/sbin/sshd

 913 15:54:28 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
 913 15:54:29 localhost.localdomain systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start.
 913 15:54:29 localhost.localdomain sshd[961]: Server listening on 0.0.0.0 port 22.
 913 15:54:29 localhost.localdomain sshd[961]: Server listening on :: port 22.
 913 15:54:29 localhost.localdomain systemd[1]: Started OpenSSH server daemon.

起動しているようだ。まだ sshd と firewall は何もいじっていないが、現段階で ssh 接続はできるのだろうか。

f:id:ytez1012:20170913163621p:plain

ふむ。あっさりパスワード認証のみで root ログインできた。後々設定を確認しよう…。

これで最低限のVM環境ができた。次回は docker をインストールするところから書く予定。