11
18

More than 5 years have passed since last update.

Windows Server 2019でHyper-V上にUbuntu18.04をインストール

Posted at

タイトル通り,Windows Server 2019のHyper-Vで動かすUbuntu18.04にJupyterHub環境を構築した際の備忘録です.
Windows Server 2019でWSLやHyper-V上のUbuntu18.04にCUDA環境を構築しようとして断念
の,Hyper-V部分(Ubuntuのインストール)です.

BIOSの設定

WSLに書いた通りですが,WSLがVT-x使ってると思っており,てっきりWSLが動いた時点で有効になってると思っていたので,まず最初にVT-xが無効だと怒られました.
というわけで,「Intel (VMX) Virtualization Technology」とか「VT-d」とかを有効に.

あと,(出来なかったけど)この後DDAでpassthroughするのですが,そのときにSR-IOV (Single Root I/O Virtualization)が有効になっている必要があります.
これ,途中で変えてしまうとデバイスが再構成されるのかちょっと破茶滅茶になります(なりました笑).
なので,OSインストール前に有効にしておいた方が良いと思います.
2019-06-14 17.37.04.jpg

Hyper-Vの有効化

「役割と機能の追加ウィザード」の「サーバの役割」にあります.
hyper_v.png
VT-xが無効な状態だとここで怒られます.

途中で仮想スイッチをどうするか聞かれます.
色々面倒なので,Windows Serverを入れるようなマシンなら物理的にLANポートも複数あるでしょうから,1つをHyper-V専用にしてしまい,そちらを使って用意しましょう.

仮想マシンへのUbuntu 18.04のインストール

ほぼ,
Windows 10 Pro Hyper-V に Ubuntu 18.04 LTS をインストール
の通りの手順で入れました.

仮想マシンの作成

  • イメージを落とす.
    まずは https://ubuntu.com/download/desktop からubuntu-ja-18.04.2-desktop-amd64.isoをダウンロードしておく.

  • Hyper-V マネージャーを起動.
    add_moz.png
    仮想マシンの新規作成ウィザードを呼び出し,指示に従っていく.

  • 名前をつける.
    Wizard_1.png
    後でも変えられるが,度々打つことになるのでわかりやすく短めなものが良いかと.

  • 世代を選ぶ.
    Wizard_2.png
    Should I create a generation 1 or 2 virtual machine in Hyper-V? 曰く,14.04移行は第2世代対応.

  • メモリの割当.
    Wizard_3.png
    64GBあるんだけど,どうせ後から変えられるので,とりあえず16GBにした.
    あと,動的メモリにしておく.

  • ネットワークアダプタの指定.
    Wizard_4.png
    先程用意した仮想スイッチか,専用アダプタを指定.
    ちなみにこの環境では,専用ではないがサブのアダプタで仮想スイッチを作ってそれを指定した.

  • 仮想HDDの指定.
    Wizard_5.png
    保存先を指定し,サイズを指定する.
    保存先はdefault,サイズはどうせ可変なので512GBにしておいた.

  • インストール方法の指定.
    Wizard_6.png
    先程落としておいたいisoファイルを指定する.後で挿入しても良いけれど,ここで指定しないメリットは特にないので.

  • 確認.
    Wizard_7.png
    完了!!だけど,まだ設定を変える必要あり.

  • セキュアブートの設定.
    secure_boot.png
    出来上がった仮想マシンの設定画面を呼び出し,セキュアブートを無効にする.
    (じゃないとインストール後に起動しないらしい.)

  • メモリ関連の設定.
    memory_1.png
    最初は↑こうなってるが,
    memory_2.png
    後々のDDA関連でRAM=最小RAMになっている必要があるので合わせておく.
    ついでに膨れ上がらないように最大も32GBに抑えておいた.

  • プロセッサ数の設定.
    processor.png
    流石にdefaultの1は心許ないので増やしておく.

  • 統合サービスの設定.
    service.png
    ゲストサービスだけ外れているので入れておく.これでCopy-VMFileが使える,らしい.

  • 自動停止アクションの設定.
    stop.png
    後々のDDAとの兼ね合いで,停止もしくはシャットダウンするようにしておく.

Ubuntu 18.04のインストール

作成および設定を終えた仮想マシンの「接続」を押すと電源入ってないよと言われるので「起動」を押す.

  • grubでの選択.
    run_iso_1_moz.png
    うまくいくなら直接インストールでも良いけど,後でゴニョゴニョするかもしれないので「Try Ubuntu without installing」にしておく.
    (何故かインストールの最後でgrubのインストールに失敗して色々やらないといけないので,裏でOSが立ち上がってくれていた方が都合がいい.)

  • インストーラの起動.
    run_iso_3_moz.png
    左上にあるので起動.

  • インストール方法の選択.
    run_iso_4_moz.png
    最小でも良いと思うけど,最小の最小はWSLで構築済みなので敢えて通常を選択.

  • インストール時のディスクの取扱の選択.
    run_iso_6_moz.png
    便利なのでLVMにしておく.

  • Continue.
    run_iso_7_moz.png
    初期化されますって言われるけどそもそも作ったばかりのVirtualなディスクに過ぎないので心置きなく進める.

  • grubのインストールに失敗…
    run_iso_8_moz.png
    run_iso_9_moz.png
    こんな感じで何故かgrubがうまく入らない.
    (うまくいく人はそのまま再起動すれば良いと思う.)
    そしてこのウィンドウ達はボタンを押しても消えてくれない(笑)

Boot Repairでgrubの修復.

きれいにインストールが終わる人は要らない作業.
これがあるので「Try Ubuntu without installing」を選んでおきました.

簡単に言うと,CTRL+ALT+TとかでTerminalを開いて,以下のようにBoot Repairを呼び出し,後は言われるがままにコピペしていくだけ.

$ sudo add-apt-repository ppa:yannubuntu/boot-repair
$ sudo apt update
$ sudo apt install -y boot-repair
$ boot-repair

ちなみに作業している所はMACアドレスを登録申請しておかないとネットに繋がらないのですが,ifconfigも入っておらず,他の調べ方を知らなかったので詰んだかと思いました(T_T)
(なお,普通にGUI上の設定画面から調べられました,良かった)

細かな過程は長いので畳んでおきます↓

Boot Repairでgrubの修復過程
$ sudo add-apt-repository ppa:yannubuntu/boot-repair
でリポジトリを追加し,
run_iso_10_moz.png
$ sudo apt update
$ sudo apt install -y boot-repair
$ boot-repair
でインストールして起動.
run_iso_11_moz.png
run_iso_12_moz.png
すると,RAIDかい?って聞かれるので,
run_iso_13_moz.png
ただのVHDですよ!と「No」を選択.
いかにも直してくれそうな画面が出てくるので,
run_iso_14_moz.png
「おすすめの修復」を選択.コピペ指示が出てくるので,
run_iso_15_moz.png
別途Terminalを開いて
run_iso_16_moz.png
全部貼り付けてあげる.すると途中で言語は違うけど
run_iso_17_moz.png
「Yes選んでね」って言われてた画面が出てくるので「はい」を選択.
最後の1行には改行が含まれていないので手動でEnterを押し,終わったら
run_iso_18_moz.png
Boot Repairに戻って進む.すると,
run_iso_19_moz.png
またコピペ指示が出るので言われるがままに再度Terminalへコピペ.
run_iso_20_moz.png
すると終わりが見えてきたらしく,
run_iso_21_moz.png
こんな事を聞かれるのでお好きな方を選択.
run_iso_22_moz.png
最終的にSumallyが用意され,
run_iso_23_moz.png
こんな画面が出て終了,再起動すればOK.

最後に出てくるログ,一応バックアップしておいたので,気が向いたら何が起きてたのか見てみようかなぁ.

起動してアップデート.

以上の手順でインストールは完了,再起動する際にメディアを抜けと言われますが,Hyper-Vが勝手に抜いてくれます.

起動すると,
update_1_moz.png
アプデのお誘いを受けるので従う.
update_3_moz.png
その後再起動.今度は言語サポートがどうこう言われるので
update_4_moz.png
従っておく.

grubの待機時間短縮.

このままだと起動する度に,
grub_1_moz.png
30sも待たされる(いちいちEnter押すのも面倒)ので,

$ sudo vi /etc/default/grub


grub_5_moz.png
のように

/etc/default/grub
GRUB_RECORDFAIL_TIMEOUT=3

とか追加してあげる.
ネイティブでデュアルブートな構成とかではないので,よく触るGRUB_DEFAULTとかはそのまま.

$ sudo update-grub

/boot/grub/grub.cfgを更新して再起動すると
grub_6_moz.png
このようにスクショを撮るのが大変な感じに10倍速.

homeディレクトリの言語変更.

日本語でインストールしてしまったので当然ですが,homeのディレクトリ群が
language_1_moz.png
こんな感じで日本語になっているので,

$ LANG=C xdg-user-dirs-gtk-update


language_3_moz.png
英語にしておいてもらう.ちなみに二度と聞くなって言っておかないと起動の度に日本語にしようとしてくるので注意.

net-toolsのインストール.

ifconfigって打ったら
net-tools_moz.png
となったので,

$ sudo apt install net-tools

で入れておく.要らなければ不要な作業.

[Alt]+[PrintScreen]が使えない.

ウィンドウのスクショ機能が動かない.
「設定→デバイス→キーボード」を確認すると,特に問題はない.
key.png
他のAltを使うショートカットは動いていて,AltとPrintが絡む「Alt+Print」と「Ctrl+Alt+Print」だけが動かない.
key_new.png
仕方がないので,とりあえず「Ctrl+Alt+P」にしておいた.

拡張セッションで繋ぐ

以上でとりあえず起動して使えるようになりますが,このままではクリップボードの共有等々ができません.
というわけで,拡張セッションモードで繋げるように環境を整えます.
Hyper-V Linux で拡張セッションを使う方法
辺りを参考にしました.

linux-vm-toolsのclone

$ git clone https://github.com/Microsoft/linux-vm-tools.git ~/linux-vm-tools

する.ちなみに
git_moz.png
のようにgitがないと言われたので

$ sudo apt install git

してからやる.そのままzipで落としてきて展開でも良いですが,どうせgitは使うし.

linux-vm-toolsのインストール

$ sudo bash ~/linux-vm-tools/ubuntu/18.04/install.sh

としてあげればインストールされる.
vm-tools_moz.png
メッセージを眺めてると気付くけど,色々入ってめちゃ容量食うらしい.
終わったら一度再起動

$ sudo reboot

し,再度

$ sudo bash ~/linux-vm-tools/ubuntu/18.04/install.sh

二度目はそれほど時間かからず終わる.
終わったら一度落としておく.

$ sudo shutdown now

Hyper-V側の設定

PowerShellでEnhancedSessionTransportTypeを確認すると

> (Get-VM -VMName 'Ubuntu_1804').EnhancedSessionTransportType
VMBus

になってるはず.

> Set-VM -VMName 'Ubuntu_1804' -EnhancedSessionTransportType HvSocket

してあげて

> (Get-VM -VMName 'Ubuntu_1804').EnhancedSessionTransportType
HvSocket

HvSocketになったことを確認.
(Ubuntu_1804の所は適宜正しいVM名を入れる)

拡張セッションモードの確認

VMを起動してあげると,途中まで見慣れたUbuntuの画面で進み,ログイン画面辺りで
enhanced_session_mode_1.png
enhanced_session_mode_2.png
Enhanced Session Modeが使えるようになり,
enhanced_session_mode_3_moz.png
お馴染みのxrdp画面になる.

拡張セッションモードを使えるようにxrdpを修復

これですんなり繋がるならそれで良いのだが,何故か

どうしても進めなくなる.
Xorgだとログイン操作以降
enhanced_session_mode_4_moz.png
このように何も表示されないので,
enhanced_session_mode_5_moz.png
Xvncを試してみても
enhanced_session_mode_6_moz.png
やはり駄目.
https://github.com/Microsoft/linux-vm-tools/issues/76

仕方がないのでとりあえず通常接続にてログインする.
結論から言うと,
Ubuntu18.04.2 xorgxrdp Install error
にあるように18.04.2のバグらしい?
xrdp connectivity no longer works after `apt upgrade` in Ubuntu 18.04.1 LTS

Ubuntu 18.04 RDP sesseion ends as soon as I login.
曰くxorgxrdpが入れば良い模様.
Ubuntu18.04.2にxrdpをインストールしてもRDP経由のログインでエラーになる事象のメモ
にあるように

$ sudo apt install xserver-xorg-core
$ sudo apt install xorgxrdp

でちゃんとログイン出来るようになりました.

ログ確認作業履歴.
Xorgだとログイン操作以降
enhanced_session_mode_4_moz.png
このように何も表示されないし,
enhanced_session_mode_5_moz.png
Xvncを試してみても
enhanced_session_mode_6_moz.png
やはり駄目.
enhanced_session_mode_7_moz.png
どうしようもないので通常接続にてログインし,
/var/log/xrdp-sesman.logを確認すると,
enhanced_session_mode_7_moz.png
errno: 2, description: No such file or directory
とか言ってる.さらに/var/log/xrdp.logを確認すると,
enhanced_session_mode_8_moz.png
[ERROR] Cannot read private key file /etc/xrdp/key.pem: Permission denied
と出ている.一応確認しに行ったけれど,
https://forum.openmediavault.org/index.php/Thread/24607-Remote-Desktop-xfce4-is-not-running-because-of-wrong-permissions/
曰く関係ないらしい.
続いて色々調べた結果が「結論から言うと,」の部分で,xorgxrdpが問題だろうとなり,入れようとすると
enhanced_session_mode_12_moz.png
こうなるので先にxserver-xorg-coreを入れ,
enhanced_session_mode_13_moz.png
続いてxorgxrdpを入れることで解決した.

IP固定

/etc/network/interfacesじゃなくなったんですね…

[Ubuntu]ローカルIPアドレスを固定にする(18.04/16.04)
辺りを参考に,

ifconfigroute -nsudo systemd-resolve --status | grep -A 2 "DNS Servers"

$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet xxx.xxx.xxx.xxx  netmask 255.255.255.0  broadcast xxx.xxx.xxx.255
        inet6 xxxx::xxxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (イーサネット)
        RX packets 687302  bytes 795093959 (795.0 MB)
        RX errors 0  dropped 52  overruns 0  frame 0
        TX packets 118390  bytes 7294906 (7.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (ローカルループバック)
        RX packets 3999  bytes 4745311 (4.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3999  bytes 4745311 (4.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
$ route -n
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
0.0.0.0         xxx.xx.xxx.254  0.0.0.0         UG    100    0        0 eth0
xxx.xxx.xxx.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
$ sudo systemd-resolve --status | grep -A 2 "DNS Servers"
         DNS Servers: xxx.xxx.xxx.xxx
                      xxx.xxx.xxx.xxx
          DNS Domain: xxx.ac.jp

(ここまで確認しなくてもサーバ構築してる段階で知ってるよねって話はさておき,)現状の値を確認.
DNSサーバ調べる際に-A 2とか付けて少し後ろまで見ておいたのは,ココがセカンダリまで設定されるからです.
IPv6は使わないので放置.
参考記事の50-cloud-init.yamlはServerの場合なので,Desktopな今回は

$ sudo vi /etc/netplan/01-network-manager-all.yaml

で編集し,

/etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

  ethernets:
    enp3s0:
      dhcp4: no
      addresses: [xxx.xxx.xxx.xxx/24]
      gateway4: xxx.xxx.xxx.xxx
      nameservers:
        addresses: [xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx]
      dhcp6: no

調べるとfalseだったりnだったりnoだったりするけど,まぁ肯定/否定出来てれば解釈してくれるんでしょう,きっと.

$ sudo netplan apply

で適用し,再度設定を見に行って変更されてればOK.

11
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
18