NVIDIA GPUマシンのUbuntu-Windowsデュアルブート環境構築

## 目的

Autoware 動作環境構築に NVIDIA Docker の利用が推奨されているため、NVIDIA GPUマシンに Ubuntu をインストールする必要があります（[参照](https://github.com/CPFL/Autoware)）。

今回別途 Windows の利用も必要だったので、 Ubuntu - Windows のデュアルブート環境を構築することを目指しました。

## 環境
Autoware のハードウェア要件は下記です。特徴としてはそこそこスペックの高い NVIDIA  GPU が要件に挙げられていることです。

* Generic x86
    * Intel Core i7 (preferred), Core i5, Atom
    * 16GB to 32GB of main memory
    * More than 30GB of SSD
    * NVIDIA GTX GeForce GPU (980M or higher performance)

今回環境構築に使ったPC/OSスペックは下記です。

* Intel Core i5-7400 CPU @ 3.00GHz
* NVIDIA GTX 1080
* Memory 32 GB
* HDD 1 TB
* Windows 10（元々はデュアルブート環境ではない）

Autoware のソフトウェア要件は下記です。注意点としては、環境構築に NVIDIA Docker を利用するため Linux である必要があり、ROSのバージョンが Kinetic に限定されているため、Ubuntu の場合 16.04 である必要があります。

* Ubuntu 16.04 LTS
    * ROS Kinetic



## 今回遭遇した問題

今回下記2点の問題or不具合の回避策を見つけるのに時間がかかりました（要注意点）。

* NVIDIA GPU マシンに Ubuntu をインストールする際に GPU Driver を正しく認識できず画面が真っ黒になる問題
* Ubuntu 自体の不具合のためインストール時に EFI 用のパーティションを事前に区切らないとインストール時にフリーズする問題

それぞれ下記の記事を参考に試行錯誤することで解決しました。

* [nVIDIA製GPUを積んだノートPCにUbuntu16.04をインストール](https://qiita.com/Reizouko/items/c5826dbcc113321fbbcd)
* [UEFIでパーティションが一つもないHDDにUbuntuをインストールしようとすると、インストーラーがフリーズする不具合](https://kledgeb.blogspot.com/2016/04/ubuntu-1604-43-uefihddubuntu.html)

## 手順

### 1. 通常通りデュアルブート環境のインストール

記事（[windows10 PCでUbuntuをデュアルブート](https://qiita.com/MTwitteJ/items/e6131a351f664df002b9)）を参考に通常通りUbuntu-Windowsデュアルブート環境のインストールを実施します。

今回記事（[windows10 PCでUbuntuをデュアルブート](https://qiita.com/MTwitteJ/items/e6131a351f664df002b9)） 4.2 の **「try ubuntu without install」** を実行した時点でGPU Driver を正しく認識できず画面が真っ黒になる問題に遭遇しました。

### 2. GPU Driver を正しく認識できず画面が真っ黒になる問題の回避

USBからUbuntuをインストールする際に下記手順でGPU Driver を正しく認識できず画面が真っ黒になる問題の回避を行います。

記事（[windows10 PCでUbuntuをデュアルブート](https://qiita.com/MTwitteJ/items/e6131a351f664df002b9)） 4.2 の **「try ubuntu without install」** を選択しキーボード "e" ボタンを押して grub の編集画面に移ります。

 grub の編集画面：
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3231353738322f66316465303730322d323639312d396166632d383338622d6331313637343931663463622e6a706567.jpg (195.1 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/02/08/31597/f43f5f51-01f8-4d31-9ae1-ae9bce08b81d.jpg)

grub 編集画面の  `quiet splash` を `pci=nomsi nomodeset` と置き換えることで kernel mode setting（画面の解像度やビット数を変更するための規格） を無効にする設定をします。

Ctrl - x or F10 を押してブートします。

### 3. UEFIでパーティションが一つもないHDDにUbuntuをインストールしようとすると、インストーラーがフリーズする不具合の回避

記事（[windows10 PCでUbuntuをデュアルブート](https://qiita.com/MTwitteJ/items/e6131a351f664df002b9)） 4.3 を実行する前に、そのままインストールすると記事（[UEFIでパーティションが一つもないHDDにUbuntuをインストールしようとすると、インストーラーがフリーズする不具合](https://kledgeb.blogspot.com/2016/04/ubuntu-1604-43-uefihddubuntu.html)）に遭遇するため、そちらの手順を参考に回避策を実施しておきます。

回避策実施後のESPが作成されたパーティションの様子：
![Ubuntu_16.04_UEFIInstallBug_FlagsDone.jpg (52.3 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/02/08/31597/134f9f61-e42e-42ae-987a-0104b9281ff3.jpg)

### 4. Ubuntu のインストール

記事（[windows10 PCでUbuntuをデュアルブート](https://qiita.com/MTwitteJ/items/e6131a351f664df002b9)） 4.3を参考に Ubuntu をインストールします。

ここで注意点としては、今回デュアルブート環境を構築するためインストールの種類を **「それ以外」** に選択する必要がある点です。ここで **「それ以外」にしないと Windows 環境に上書きされてしまう** ため気をつける必要があります。

その他詳細はこちらの記事（[Ubuntu 18.04 インストール（UEFI） その1 ](https://kledgeb.blogspot.com/2016/04/ubuntu-1604-uefi-1-uefipcubuntu-1604.html)）が参考になります。

### 5. Ubuntu の起動

**そのまま再起動するとまた 2.と同様にGPU Driver を正しく認識できず画面が真っ黒になる問題が発生する** ため、ブートローダ（grub） の設定ファイルで `nomodeset` 等を指定してやる必要があります。

4.のインストール終了後再起動します。起動時 F2 を押して、BIOS 画面に入り Boot の順番で **Ubuntu** が一番上に来るようにします（※Windows を利用したいときは Windows が一番上に来るように変更します）。

Ubuntu のブート時にコマンドラインモードで実行するため Esc キー（Shift キーの場合もあります）を押します。

コマンドラインモードで grub の設定ファイル（`/boot/grub/grub.cfg`）を編集します

```
sudo vi /boot/grub/grub.cfg
```

grub.cfg の中の 'Ubuntu' という menuentry（Bootの順番メニューで指定した文字列）のブロックの中の  `quiet splash` を `pci=nomsi nomodeset` に置き換えて保存＋終了し再起動します。

正しく再起動されると Ubuntu が起動し、画面が表示されます。

Ubuntuログイン画面（※イメージ）：
<img width="600" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3135363739352f65313532363935652d663066632d636463362d306338302d3632316362623335623030362e706e67.png (195.3 kB)" src="https://img.esa.io/uploads/production/attachments/8793/2019/02/08/31597/86ab25cf-1885-41c6-b605-36d241a032b2.png">


また、Boot の順番で Windows を一番上に設定し起動するとWindows が立ち上がります。

Windows 10 ログイン画面（※イメージ）：
![windows10_roguin_gamen_on.gif (230.2 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/02/08/31597/d3883ad1-4ffc-46ac-9c57-f8ebdd60cec5.gif)