Intel NUC + SSD 2TB + DRAM 32GBでハイスペックLinuxデスクトップを作ってみた

一昨年のボーナスシーズンにPayPayでMacBook Air 2018を購入した時に購入金額の20%分として付与されていたPayPayポイントを有効活用するべく、昨年9月末の増税前にIntel NUCを購入しました。そして、昨年末のボーナスシーズンにSSDとDRAMも購入し、Linuxデスクトップマシーンを構築したので記念に色々まとめてみることにしました。

## 今回の自作のあれこれ
* Deep Learningなどの自由研究に使えるGPU搭載マシンが欲しかったので手始めにLinuxマシンを自作してみることにしました。
* 自作初心者なのでマザーボード選びで悩まなくても済む様に、Intelのベアボーンキットを購入することにしました。
* 最近登場したeGPUというのを試してみたかったので、敢えてThundebolt 3に対応したベアボーンを購入しました。
* GPUマシン化はグラフィックカードを購入したら挑戦しようと思います。

## 部品の購入
参考までに今回購入したパーツの詳細情報を記載します。ベアボーンは消費増税前に買ったのであくまで当時の価格です。

|パーツの種類|型番|メーカー|価格|備考|
|:---:|:---:|:---:|:---:|---|
|本体|NUC8I7BEH|Intel|¥66,000.|CPU付属のベアボーン, 支払いには¥44,461.分のPayPayポイントを利用|
|CPU|Core i7 8559U|Intel|-|ベアボーンに付属, 4C8T, 2.7GHz(TB時:4.5GHz)|
|SSD1|NM610(1TB)|Lexar|￥11,528.(うち交換保証:￥500.)|NVMe SSD OS, ブートローダーインストール用に使用|
|SSD2|NS100(1TB)|Lexar|￥10,428.(うち交換保証:￥500.)|/home用ドライブとして使用|
|DRAM|CT2K16G48FD8266 DDR4 2666(32GB)|crucial|￥16,918.|マザーボードの最大搭載可能メモリ容量上限値が32GBのため|
|ディスプレイ<br>21.5inch Wide|PH15997426|PHILIPS|￥8,980.|HDMIx2+D-SUB搭載<br>NTT-X Storeのお正月セールで購入|
|キーボード|K380|Logicool|￥3,500.|PCを3台まで登録出来るので購入。マウスは既に有るものを流用|
|ヒートシンク|SS-M2S-HS02|長尾製作所|￥1,359.|NVMe SSD冷却用に購入|
|電源ケーブル|-|-|￥0.|ベアボーン付属のACアダプタには電源コードが付属していないため、不要なタブレットPCのACアダプタより拝借|

合計費用: ￥107,185.(PayPay考慮時: ￥62,724.)

## (追記) Intel NUC8I7BEHの拡張性
今回使用したベアボーンは手のひらサイズですが、拡張性はそこそこ有ると思います。(以下の写真は粗実物大)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/7ba3c564-0afa-7322-b405-7f79d5e63174.png)

|仕様|
|:---|
|USB3.0 x 4(前面x2, 背面x2)|
|Thunderbolt 3ポート(背面)|
|HDMIポート(背面)|
|Intel® Ethernet Connection I219-V(背面)|
|オーディオポート（ヘッドフォン・マイク対応、前面)|
|Intel® Wireless-AC 9560 + Bluetooth 5.0(内蔵)|
|マイクロSDカードスロット(左側面)|

参考: [インテル® NUC キット NUC8i7BEH](https://www.intel.co.jp/content/www/jp/ja/products/boards-kits/nuc/kits/nuc8i7beh.html)

## PCの組み立て
ベアボーンに購入した部品を取り付ける作業は0から自作するのと比較してとても簡単です。ベアボーンを開けてマザーボード上に部品を取り付けるだけです。

## OSセットアップ
OSのセットアップを行い、組み立てたPCが動作できる様にします。今回はUbuntu 18.04.4 LTS Desktop版をインストールしました。最初はServer版をインストールしようと試みましたが、SSDがどうしても認識されなかったのと、GUIも使いたかったのでDesktop版をインストールすることにしました。パーティション構成は以下の様にしました。

|パーティション|容量|備考|
|:---:|:---:|:---|
|efi|1GB|UEFI用パーティション。従来の/bootに代わるパーティション|
|/|300GB|/rootなどが入るパーティション|
|/usr|344GB|インストールするアプリケーションが格納されるパーティション|
|/var|344GB|当初は20GBぐらいにするつもりが、KVMで重要な役割を果たすパーティションと判明したため増量|
|swap|10GB|/~swapはNVMe SSDに割当|
|/home|1TB|SATA SSDをまるまる1台/home用に割当|

## Ubuntuのパッケージマネージャー
Ubuntuのパッケージマネージャーはapt-getが一般的ですが、最新版のUbuntuではaptが推奨の様です。aptitudeというパッケージマネージャーも有りますが、Ubuntu 18.04では非推奨となっている様です。今までaptitudeを使っていましたが、これを機会にaptに乗り換えることにします。
参考: http://ultra-genma.hateblo.jp/entry/2019/04/08/233718

## ufwの設定
ファイアウォールを設定しました。ufwが既にインストールされていた為、設定しました。16.04までは自分でインストールする必要が有りましたが、自動的にインストールされる様です。
参考: [ufwの基本操作](https://qiita.com/RyoMa_0923/items/681f86196997bea236f0)

## sshの設定
パスワード無しログインが出来る様にキーファイルを作成し、受け渡しを実施します。

```bash
ssh-keygen -t rsa -f ~/.ssh/id_rsa_ubuntu18
```

```bash
ssh-copy-id -i ~/.ssh/id_rsa_ubuntu18 <USER_NAME>@<HOST_IP>
```

参考: [ssh-copy-idで公開鍵を渡す](https://qiita.com/kentarosasaki/items/aa319e735a0b9660f1f0)

## mDNSの設定
同一ネットワーク内からのSSHアクセスなら`HOST_NAME.local`でアクセス可能となり、IPアドレスの入力が不要になります。

参考: [mDNSを設定して、いちいちIPアドレスを打ち込むのをやめよう。](https://qiita.com/msrx9/items/b6ca47dd2178c3c9b536)

## まとめ
Intel NUCを用いたLinuxマシーンを自作しました。このスペックで10万円ちょっとならかなりコストパフォーマンスの良い自作になったのではないかと思います。折角リソースが潤沢なマシンを作ったので、KVMベースでマルチノードKubernetesの構築やThudebolt 3に対応していることを生かしてeGPUを取り付けてGPUマシン化に挑戦したいと思います。

## 今後の改良予定(要予算との相談)
* DockerをインストールしてJupyterLabサーバー化
* R Studio ServerをDockerで立ち上げ
* KVMベースのマルチノードKubernetesの構築に挑戦
* eGPUをドッキングしてGPUマシーン化
* TensorFlowやPyTorchをGPU動作させられるマシーンに

## Reference
https://eng-entrance.com/linux-partition
[Core i7-8559U](https://ark.intel.com/content/www/jp/ja/ark/products/137979/intel-core-i7-8559u-processor-8m-cache-up-to-4-50-ghz.html)