脳の中の絵本

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

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

前回からの続き。

まずは docker のインストールと、CentOS image の pull。

# 更新
[root@localhost ~]# yum upgrade

# docker インストール
[root@localhost ~]# yum install docker
<省略>
---> パッケージ docker.x86_64 2:1.12.6-48.git0fdc778.el7.centos を インストール
<省略>

# docker サービス起動, 自動起動設定
[root@localhost ~]# systemctl start docker

[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 2017-09-14 16:22:51 JST; 1min 5s ago
     Docs: http://docs.docker.com
 Main PID: 33188 (dockerd-current)
   CGroup: /system.slice/docker.service

# docker pull で CentOS の latest image を入手
[root@localhost ~]# docker pull centos:latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos

2d490773b5db: Pull complete
Digest: sha256:6f2b0d9ba722f2d4e9d9bf694456f08033f1737fbdbd67f6424cd1d683326b57

# バージョン確認
[root@localhost ~]# docker run -it centos:latest cat /etc/redhat-release

# 掃除
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
9bd5b7087341        centos:latest       "cat /etc/redhat-rele"   7 seconds ago       Exited (0) 5 seconds ago                       reverent_pare

[root@localhost ~]# docker rm 9bd5b7087341

さて、ここからが問題。おぼろげな記憶では、CentOS7 コンテナを作る場合には docker run 時に --privileged オプションをつけないといけないとか、COMMAND を /sbin/init にしないとサービスが起動しないとか、ホスト kernel version によって挙動が違うとか、いろいろだった気がする。面倒なので適当に試してうまくいくやつを見つける (やる気が行方不明)。これはいずれちゃんと本を読まないといけないな…。

まずは 普通に /bin/bash で起動してから sshd の status を見てみる

[root@localhost ~]# docker run --name centos7_bash -itd centos /bin/bash
15530b30768849475e82548f7f3aad1f111c247129422a795bd52f9f9b43b10b

[root@localhost ~]# docker attach centos7_bash

[root@15530b307688 /]# systemctl status sshd
Failed to get D-Bus connection: Operation not permitted

# ダメのようだ (適当)。

[root@15530b307688 /]# exit
exit

[root@localhost ~]# docker stop centos7_bash
centos7_bash

[root@localhost ~]# docker rm centos7_bash
centos7_bash

続いて --privileged オプションをつけて /bin/bash で起動してみる。

[root@localhost ~]# docker run --privileged --name centos7_privileged_bash -itd centos /bin/bash
62192b2e81d02f7addcedfa8d0d49e48f2e8a7e574a2841bbc6c1beb3840e50e

[root@localhost ~]# docker attach centos7_privileged_bash

[root@62192b2e81d0 /]# systemctl status sshd
Failed to get D-Bus connection: Operation not permitted

# これもダメのようだ。やっぱり /sbin/init かね (適当)。

[root@62192b2e81d0 /]# exit
exit

[root@localhost ~]# docker stop centos7_privileged_bash
centos7_privileged_bash

[root@localhost ~]# docker rm centos7_privileged_bash
centos7_privileged_bash

それでは、オプションはデフォルトのまま COMMAND を /sbin/init にする

[root@localhost ~]# docker run --name centos7_init -itd centos /sbin/init
02e44823534e5f29b6febe136d727b6ed2e517e8bc68541e43f71922aea6fe10

[root@localhost ~]# docker exec -it centos7_init /bin/bash

[root@02e44823534e /]# systemctl status sshd
Unit sshd.service could not be found.

# お、動くね (適当)。

[root@02e44823534e /]# exit
exit

[root@localhost ~]# docker stop centos7_init
centos7_init

[root@localhost ~]# docker rm centos7_init
centos7_init

さて、COMMANDを /sbin/init にさえしておけばさしあたり大丈夫だろうか?そう仮定して、 ssh(22番ポート) と rdp(3389番ポート) 用に ポートフォワードしたコンテナを立て直す。

[root@localhost ~]# docker run --name centos7_init_p -p 10022:22 -p 10389:3389 -itd centos /sbin/init
dd40a18cfcf7205ac98b9f7651e24e499907e48d625a6774a84f8801fedead0e

[root@localhost ~]# docker exec -it centos7_init_p /bin/bash

# コンテナ内に openssh-server をインストールして起動してみる
[root@dd40a18cfcf7 /]# yum install openssh-server
<省略>
---> Package openssh-server.x86_64 0:7.4p1-12.el7_4 will be installed
<省略>

[root@dd40a18cfcf7 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:sshd(8)
           man:sshd_config(5)

[root@dd40a18cfcf7 /]# systemctl start sshd

# 上記 status をよく見ると デフォルトで enabled になっているのでこれはいらなかった
[root@dd40a18cfcf7 /]# systemctl enable sshd

[root@dd40a18cfcf7 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2017-09-14 08:06:39 UTC; 14s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 145 (sshd)

# 無事起動したので、コンテナの root パスワードを設定しておく
[root@dd40a18cfcf7 /]# passwd

ちゃんと起動した。ホストOS側から localhost:10022 経由でコンテナの22番ポートに対して ssh 接続できるかどうか試す。

[root@dd40a18cfcf7 /]# exit
exit

[root@localhost ~]# ssh -p 10022 root@localhost
The authenticity of host '[localhost]:10022 ([::1]:10022)' can't be established.
ECDSA key fingerprint is SHA256:1gwxgnZrcjG145A+aMgJH2grphiNXPOh2D85FBMEgxA.
ECDSA key fingerprint is MD5:7d:d5:09:d8:c3:bc:7a:ed:b0:c8:c0:f6:80:be:97:dc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:10022' (ECDSA) to the list of known hosts.
root@localhost's password:
[root@dd40a18cfcf7 ~]#

入った。このホストOSは Hyper-V のゲストなので、さらに外側の Windows 10 側から TeraTermssh 接続できるかどうかも試す。

10022 ポートにして… f:id:ytez1012:20170915234542p:plain

入った。OK。 f:id:ytez1012:20170915234736p:plain

さて本番。xrdp でリモートデスクトップ環境を作る。デスクトップを何にするか… LXDEXfce かいっそのこと Gnome を入れてしまうか…と数分考えた後、さすがに Gnome は重いだろうし、LXDE は見た目がちょっとショボイし、ということで Xfce にした (適当)。

epel リポジトリを追加して、Xfce と xrdp をインストール する。

# 更新 (コンテナ内)
[root@dd40a18cfcf7 ~]# yum upgrade

[root@dd40a18cfcf7 ~]# uname -a
Linux dd40a18cfcf7 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@dd40a18cfcf7 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

# epel リポジトリ追加
[root@dd40a18cfcf7 ~]# yum install epel-release
<省略>
---> Package epel-release.noarch 0:7-9 will be installed
<省略>

[root@dd40a18cfcf7 ~]# cat /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

# デフォルトで enabled になっているようだ。

[root@dd40a18cfcf7 ~]# yum groupinstall Xfce

[root@dd40a18cfcf7 ~]# yum install xrdp
<省略>
---> Package xrdp.x86_64 1:0.9.3-1.el7 will be installed

0.9 が yum で入るのが素晴らしい。以前は 0.6 くらい?までしか入らず、設定に苦労した。

xrdp 起動, 自動起動設定

[root@dd40a18cfcf7 ~]# systemctl start xrdp

[root@dd40a18cfcf7 ~]# systemctl enable xrdp
Created symlink from /etc/systemd/system/multi-user.target.wants/xrdp.service to /usr/lib/systemd/system/xrdp.service.

[root@dd40a18cfcf7 ~]# systemctl status xrdp
● xrdp.service - xrdp daemon
   Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2017-09-14 09:47:16 UTC; 9s ago
     Docs: man:xrdp(8)
           man:xrdp.ini(5)
 Main PID: 1160 (xrdp)

Windows 10 のリモートデスクトップから接続してみる。ポートは docker run 時に指定した 10389。

f:id:ytez1012:20170916000411p:plain

先ほど設定した root パスワードでログイン

f:id:ytez1012:20170916000511p:plain

おーととと。

f:id:ytez1012:20170916000534p:plain

最後の仕上げを忘れてた。

[root@dd40a18cfcf7 ~]# echo "xfce4-session" > ~/.xsession
[root@dd40a18cfcf7 ~]# chmod 700 ~/.xsession

やったぜ。

f:id:ytez1012:20170916000735p:plain

「とりあえず動いた」ので、次回はキーボード設定とか日本語入力とか。