Intel NUC + Ubuntu 16.04をインターネットに繋ぐまで

Intel NUC + Ubuntu 16.04をインターネットにつなぐのに困っていた時の忘備録
おそらくUbuntuをインストールしたときに共通の手順になりそう

# TL;DR
## やったこと

1. [Intelのページ](https://downloadcenter.intel.com/ja/download/15817/-PCI-E-Linux-) からドライバをダウンロード
2. 展開して `make && make install && modprobe e1000e && update-initramfs -u`
3. 有線LANをつなぐ
4. カーネルのバージョンを上げる `sudo apt update && sudo apt install linux-generic-hwe-16.04`
5. 無線LAN用のドライバをインストール

## 実際の環境

- Ubuntu 16.04
- インテル® NUC キット NUC7i7BNH [製品ページ](https://www.intel.co.jp/content/www/jp/ja/products/boards-kits/nuc/kits/nuc7i7bnh.html)

# 1. 内蔵LANのドライバをインストール
製品ページによると、 `NUC7i7BNH` には `Intel® Ethernet Connection I219-V` というものが載っているので、
`Intel® Ethernet Connection I219-V` のドライバを入れて上げれば良い

Ubuntu上ではターミナルに次のコマンドを打ち込む

```bash:Ubuntu上で認識されているNICを確認する
sudo lspci | grep Ethernet
```

型番のLinux(Ubuntu)用のドライバをインターネットから探してくる
(Googleで `型番 + driver + ubuntu` とか検索すれば大体でてくるだろう。この場合は `I219-V driver ubuntu` で検索)

今回必要なドライバは次のページにある
[Linuxでの PCIe Intel®ギガビット・イーサネット・ネットワーク接続向けインテル®ネットワーク・アダプター・ドライバー]
(https://downloadcenter.intel.com/ja/download/15817/-PCI-E-Linux-)

ページにアクセスしたら `e1000e-3.6.0.tar.gz` をダウンロード
![ダウンロードの図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224134/d499c768-c7f5-6a0a-132d-41f87ffc14b7.png)

**UbuntuのインストールされているPCは、この時点でネットワークにつながって無いため、ネットワークにつながっている別のPCでダウンロードします。そうして、記録メディアを利用してUbuntuのインストールされているPCにコピーします**

※Ubuntu 16.04はデフォルトでexFATに対応してないので、FAT32等でフォーマットされたUSBメモリを使うことをおすすめします

## 参考にしたページ
Kabylake+Z270なマザーでUbuntu 16.04が使えた -ネットワーク（イーサーネット）のみ設定が必要
https://webnetforce.net/ubuntu-on-kabylake-use-ethernet/

# 2. 展開してドライバをビルド&インストール
ダウンロードした `e1000e-3.6.0.tar.gz` は `tar.gz` なので、解凍しましょう
GUIならファイルをダブルクリックでアーカイブマネージャーが起動するので適当な場所に解凍しましょう
CUIなら次のコマンドを使って解凍します(いつも`tar.gz`の解凍コマンドを忘れるので...

```bash:tar.gzの解凍
tar -zcvf  /path/to/e1000e-3.6.0.tar.gz /path/to/target_directory
```
※ `/path/to/` `/path/to/target_directory` は各自の環境に合わせてください

解凍したら、解凍先のディレクトリに移動してビルドしてインストールします
使うコマンドは次のとおりです

```bash:ドライバのビルドとインストール
sudo make
sudo make install
sudo modprobe e1000e
sudo update-initramfs -u
```

※それぞれのコマンドで何が行われているのかはこの記事では書きません

# 3. 有線LANをつなぐ

2の手順で内蔵LANをUbuntuが認識してくれるので、有線LANではインターネットに接続されます(再起動は一応しておきましょう

# 4. カーネルのバージョンを上げる(上げなくてもいい場合もあるかも)

製品ページによると、 `NUC7i7BNH` には `Intel® Wireless-AC 8265 + Bluetooth 4.2` というものが載っているので、`Intel® Wireless-AC 8265` のドライバを入れて上げれば良い

下に示すのがドライバのダウンロードページである
[インテル®ワイヤレス・アダプターに対応した Linuxのサポート](https://www.intel.co.jp/content/www/jp/ja/support/articles/000005511/network-and-io/wireless-networking.html)

`Intel® Wireless-AC 8265` の項目を見てみると
![AC8265の項目](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224134/dbe1bb3f-009b-d67b-4a69-e878f5df9a68.png)

`4.6以上` とある。この数字はLinuxのカーネルのバージョンであり、 `Ubuntu 16.04` のカーネルバージョンは `4.4` なのでUbuntuをインストールした時点では、ドライバが対応していません

調べると次のような記事があったので、カーネルのバージョンを上げましょう
*How to get Intel Dual Band Wireless-AC 3168 work on Ubuntu 16.04?*
https://askubuntu.com/questions/868075/how-to-get-intel-dual-band-wireless-ac-3168-work-on-ubuntu-16-04

カーネルのバージョンを上げるには次のコマンドを使います

```bash:カーネルのバージョンを4.4から上げる
sudo apt update
sudo apt install linux-generic-hwe-16.04
sudo apt update && sudo apt upgrade
```

これで、`Intel® Wireless-AC 8265`のドライバをインストール準備が整いました

# 5. 無線LAN用のドライバをインストール

[インテル®ワイヤレス・アダプターに対応した Linuxのサポート](https://www.intel.co.jp/content/www/jp/ja/support/articles/000005511/network-and-io/wireless-networking.html) にアクセスし、該当のドライバをダウンロードしてきます
今回は、 `Intel® Wireless-AC 8265` なので `iwlwifi-8265 22.361476.0.tgz` (2019/11/23時点 ) をクリックしてダウンロードします
![AC8265の項目](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224134/dbe1bb3f-009b-d67b-4a69-e878f5df9a68.png)

ダウンロードしたら、解凍します
おそらく解凍先のディレクトリには `README.iwlwifi-8265-ucode` があると思います 
中を見ると

````bash:
Installation of the firmware is simply:

        % cp iwlwifi-8265-22.ucode /lib/firmware
```
とあります
なので、ドライバのインストールは、解凍先のディレクトリに移動して次のコマンドを実行します

````bash:ドライバのインストール
cp iwlwifi-8265-22.ucode /lib/firmware
```
※権限がなければ `sudo` をつけましょう

再起動をして、これでWi-Fiでネットワークに接続できるようになりました！