[おぼえがき] Windows10 Ubuntu16.04 ディアルブート環境構築手順

Windows10 の環境に Ubuntu16.04 を 追加で入れる手順の覚え書き。
またポカして吹っ飛ばした時に参照しやすいように...。
ハマった所、反省点を中心に記載します。


###概要
* Windows10 のみの構成 → Windows10 + Ubuntu16.04 (ディアルブート) にする。
* 記録デバイスは一つ、Windows用のパーティーションサイズを減らし、Ubuntu用にパーティーションを追加する。
* Ubuntu16.04 での環境構築 (2016/4 時点で最新安定版のVerで例示。都度最新安定版Verを確認のこと）



## Windows10 側の準備
####BackUpを必ず作成
　[コントロールパネル]→　[システムとセキュリティ]→ [バックアップと復元(Windows 7)] 
　　　・システムイメージのバックアップ
　　　・ファイルのバックアップ

####高速スタートアップを無効化
　[コントロールパネル]→　[ハードウェアとサウンド]→　[電源オプション]→　[電源ボタンの動作を選択する(システム設定)]→
　　　　電源ボタンの定義とパスワード保護の有効化の[現在利用可能でない設定を変更します]をクリック→
　　　　シャットダウン設定の「高速スタートアップを有効にする(推奨)」のチェックを外す→ 
　　　　[変更の保存]を押下。

####Window用領域の縮め方
　[ディスクの管理]→
　　　　デフラグ
　　　　Windows用領域のサイズ縮小

####Ubuntu16.04 のインストールDisk
　WebからダウンロードしDVD-Rに書き出しておく。
　（レスキューディスクとしても重宝する）


## Ubuntu16.04 インストール
キャプチャ画面で示します。(※画像はVirtualBoxでのインストール時のもの。ディアルブート用に模してある)
#### 画面1
![ub_01_.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/7f71fef9-c059-5a93-5e98-fdc0d371ef9b.png)
[Ubuntをインストール]ボタンを押下

#### 画面2
![ub_02.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/3e6d37a7-05dc-1eb6-2072-c62755670d02.png)
デフォルトのまま。[続ける]ボタンを押下

#### 画面3
![ub_03_.png](https://qiita-image-store.s3.amazonaws.com/0/169589/2d141c53-9be3-52f1-f728-7411e36840be.png)
「それ以外」を選択。[続ける]ボタンを押下

#### 画面4-1
![ub_04_.png](https://qiita-image-store.s3.amazonaws.com/0/169589/e0253f4a-094f-d94c-634c-f9ee12021572.png)
　1.「空き領域」を選択
　2.「+」(追加)ボタンを押下

#### 画面4-2 swap 領域の作成
![ub_05_.png](https://qiita-image-store.s3.amazonaws.com/0/169589/d4713286-29aa-c9d4-72d6-975d186c89d6.png)
　1.「基本パーティーション」
　2.「この領域の終点」
　3.「スワップ領域」
  4.「OK」ボタン押下。

画面4-1 にて、再度
　1.「空き領域」を選択
　2.「+」(追加)ボタンを押下

#### 画面4-3
![ub_06_.png](https://qiita-image-store.s3.amazonaws.com/0/169589/0f59a783-c86f-9a6d-901e-cf23ca573eca.png)
　1.　残りの全容量
　2.「基本パーティーション」
　3.「ext4ジャーナリングファイルシステム」
　4.「/」を選択
　5.「OK」ボタン押下

#### 画面4-4
![ub_07_.png](https://qiita-image-store.s3.amazonaws.com/0/169589/4d535d35-5ec8-d314-06aa-46aaa919ef70.png)
 ブートローダをインストールするデバイスを「/dev/sda4」(画面4-3 で作成したパーティーション) を選択し、
 「インストール」ボタンを押下

#### 画面5
![ub_08.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/5de195f1-ae47-4767-9172-41898caedf11.png)
デフォルトのまま

#### 画面6
![ub_09.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/9a0ff2fb-a444-2886-2960-fd44ef2adc19.png)
デフォルトのまま

#### 画面7
![ub_10.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/b0296e58-c109-b7af-115d-473fdcefd4fc.png)
　指示に従い入力し「続ける」ボタンを押下

インストールが完了したら再起動。

## Windows10 側で、ディアルブート設定
EasyBCD を用いて設定します。
#### 画面1 起動時画面
![BCD_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/f8804ac1-3403-4f08-2b6a-1cdc6d8a64f6.png)
Windows10 用 の Entry のみ存在している。

#### 画面2 Ubuntu 用の Entry 作成する
![BCD_02_.png](https://qiita-image-store.s3.amazonaws.com/0/169589/9c9a4983-d230-541c-810c-8f83c893c3b0.png)
　1. 「Add New Entry」ボタン押下
　2. 「Linux/BSD」タグを選択
　3. type: に**「GRUB 2」**を選択。（**GRUBではない**）
　4. Name: に「ubuntu1604」を入力
　5. Drive:に「Partetin4 」 (Ubuntu をインストールしたパーティーション)を選択 
　6.　「Add Enty」ボタンを押下

#### 画面3 Entry 確認
![BCD_03_.png](https://qiita-image-store.s3.amazonaws.com/0/169589/c38fe569-2769-c31c-e9bb-b1d35c0f8933.png)
 1. 「View Setting」ボタンを押下
 2. Entry #2 が追加されている

### 時刻設定
Windows側の時刻設定をUTC にする。（しないと、WindowsとUbuntuで時刻が9時間ずれる）
管理者権限でコマンドプロンプトを開き、下記のコマンドを実行する。

```
> reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
```

再起動。
水色背景で ブートOS の選択画面が表示され、Ubuntu16.04 を選択。

## Ubuntu 16.04 環境構築
#### ソフトウェアアップデート
```
$ sudo apt-get update 
$ sudo apt-get upgrade
```

#### nvidia driver.
```
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-375
$ sudo apt-get install mesa-common-dev
$ sudo apt-get install freeglut3-dev
```
再起動


#### cuda
https://developer.nvidia.com/cuda-downloads から  cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb をダウンロードする。

```
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda
```

>下コマンドでは cuda 7.5 がインストールされる。 8.0を使いたいため、下は**行わない**。
>> $ sudo apt install nvidia-cuda-toolkit


##### cuda インストール先にpath を通す。
~/.profile の末尾に 下行を追加

```
PATH="$PATH:/usr/local/cuda/bin"
```

反映させる。
```
$source ~/.profile
```

#### cudnn
https://developer.nvidia.com/rdp/cudnn-download から下記をダウンロード

* cuDNN User Guide 
* cuDNN Install Guide (インストール時に目を通す)
* cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
* cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
* cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)

```
$ sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb
$ sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb
$ sudo dpkg -i libcudnn6-doc_6.0.21-1+cuda8.0_amd64.deb
```


#### OpenBLAS
```
$ sudo apt-get install libopenblas-base libopenblas-dev
```

#### Google Chrome
```
$ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
$ sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
$ sudo apt-get update 
$ sudo apt-get install libindicator7 libappindicator1
$ sudo apt-get install google-chrome-stable
```

#### Google Drive
```
$ sudo add-apt-repository ppa:alessandro-strada/ppa
$ sudo apt-get update
$ sudo apt-get install google-drive-ocamlfuse
$ google-drive-ocamlfuse
```
 GNOME（Unity）の場合は「自動起動するアプリケーション」 (gnome-session-properties) を起動し、
 以下のように追加する（ディレクトリ名は上記設定に合わせる）。

 >名前 : google-drive-ocamlfuse
 コマンド : google-drive-ocamlfuse /home/ユーザ名/GoogleDrive


#### C/C++
```
$ sudo apt-get install clang
$ sudo apt-get install gcc-multilib g++-multilib
```

#### GStreamer
```
$ sudo apt-get install libgstreamer-plugins-good1.0-dev
$ sudo apt-get install libgstreamer-plugins-bad1.0-dev
```

#### jansson
```
$ sudo apt-get install libjansson4
$ sudo apt-get install libjansson-dev
$ sudo apt-get install libjansson-doc
```

#### curl 
```
$ sudo apt-get install libjansson-dev
```

#### ffmpeg
```
$ sudo apt-get install ffmpeg
```

#### openGL
```
$ sudo apt-get install freeglut3-dev
$ sudo apt-get install libglfw3-dev
$ sudo apt-get install libglfw3-doc
$ sudo apt-get install libglewmx-dev
```

#### ランチャ
Ubuntu の ディスクトップの 仮想画面(ワークスペース)数の調整用ツール
>ランチャの Ubuntu SoftWare から Unity Tweak Tool をインストール 


#### core 出力
	~/.bashrc の最下行に 下記行を追加
		ulimit -c unlimited		

	/etc/sysctl.conf に 下記行を追加
		kernel.core_pattern = /dev/shm/core.%p
	
	/etc/default/apport の enabled=1 を enabled=0　に変更

#### java (eclipse 用)
```
$ sudo apt-get install default-jre
```

#### python 環境
```
$ sudo apt install python-setuptools
$ sudo easy_install virtualenv
$ sudo easy_install virtualenvwrapper
$ sudo apt-get install build-essential cmake pkg-config
$ sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev

$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python3.5-dev

$ cd ~
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py
$ sudo pip3 install virtualenv virtualenvwrapper
$ sudo rm -rf ~/get-pip.py ~/.cache/pip

$ sudo pip3 install matplotlib
$ sudo pip3 install pandas
$ sudo pip3 install jupyter
```

#### virtualenv & virtualenvwrapper
```
$ export WORKON_HOME=$HOME/.virtualenvs
$ source /usr/local/bin/virtualenvwrapper.sh

$ echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.bashrc
$ echo -e "export PYTHONPATH=/usr/lib/python3/dist-packages/" >> ~/.bashrc
$ echo -e "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc
$ echo -e "export WORKON_HOME=/home/ub/.virtualenvs" >> ~/.bashrc
$ echo -e "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
$ source ~/.bashrc

$ mkvirtualenv ml -p python3
```

#### OpenCV 3.2
cuda 使用させたいため build する。
##### 依存パッケージ インストール
```
$ sudo apt-get -y install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg cmake qt5-default liblapacke-dev checkinstall
```


##### ソース取得 
```
$ cd /tmp
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip
```

##### 展開 (/tmp)
```
$ unzip opencv-3.2.0.zip
$ unzip opencv_contrib.zip 　
```

##### ビルド用ディレクトリ作成
```
$ cd /tmp/opencv-3.2.0/
$ mkdir build
```

##### (ml)環境 活性化
```
$ workon ml 
```


##### cmake オプション指定 
```
(ml)$ cmake -D CMAKE_BUILD_TYPE=RELEAS -D CMAKE_INSTALL_PREFIX=/opt/opencv-3.2.0 -D INSTALL_PYTHON_EXAMPLES=ON -D ENABLE_NEON=OFF -D WITH_TBB=OFF -D BUILD_TBB=OFF -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules -D BUILD_opencv_freetype=ON -D PYTHON_EXECUTABLE=~/.virtualenvs/ml/bin/python -D BUILD_EXAMPLES=ON ..
```

##### build & install (3時間以上要した)
```
(ml)$ make -j8
(ml)$ sudo make install
```

##### Python用 .so への シンボリックリンク作成
```
$ cd ~/.virtualenvs/ml/lib/python3.5/site-packages/
$ ln -s /opt/opencv-3.2.0/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
```

#### プロファイラー gperftools(Google)
```
$ sudo apt-get install google-perftools
$ sudo apt-get install libgoogle-perftools-dev
$ sudo apt-get install kcachegrind
```