円安でクラウドが怖いので約1万円で自宅鯖を組んでみた-1-Wifiに接続したい…！

みなさんは、インフラ周りの勉強をコストを低くできたらな、お試しアプリのデプロイを安全にやりたいな、Kubeのアプリや設定が正しいかローカル以外の環境で確認したいなと思ったことはありますでしょうか？

VMやDockerはローカルだとローカル特有の設定もあり、それと区別するのは難しい部分があります。

そんな時**自宅鯖**であれば物理的に別なマシンのため様々なことを実験することができます！！

## 必要なもの：中古のPC
近くの中古PC販売店や楽天などで購入できます。
https://search.rakuten.co.jp/search/mall/optiplex+3020/
今時、メインPCに使うには８GBのメモリーでは心許ないですが、[EC2のスペック表](https://aws.amazon.com/jp/ec2/instance-types/)から換算すると

**約9000円**

これが電気代（と管理者の時間）にランニングコストが下がります。管理者の時間を抜きに考えれば1ヶ月ちょっとで元を取ることができます！お得！！


今回使ったPCのスペックは以下のような形になっております。
```
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       199Mi       7.2Gi       1.0Mi       340Mi       7.3Gi
Swap:          4.0Gi          0B       4.0Gi

$ lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         39 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  4
  On-line CPU(s) list:   0-3
Vendor ID:               GenuineIntel
  Model name:            Intel(R) Core(TM) i3-4130 CPU @ 3.40GHz
    CPU family:          6
    Model:               60
    Thread(s) per core:  2
    Core(s) per socket:  2
    Socket(s):           1
    Stepping:            3
    CPU max MHz:         3400.0000
    CPU min MHz:         800.0000
    BogoMIPS:            6784.54
    
Virtualization features: 
  Virtualization:        VT-x
Caches (sum of all):     
  L1d:                   64 KiB (2 instances)
  L1i:                   64 KiB (2 instances)
  L2:                    512 KiB (2 instances)
  L3:                    3 MiB (1 instance)
NUMA:                    
  NUMA node(s):          1
  NUMA node0 CPU(s):     0-3
Vulnerabilities:         
  Itlb multihit:         KVM: Mitigation: VMX disabled
  L1tf:                  Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
  Mds:                   Mitigation; Clear CPU buffers; SMT vulnerable
  Meltdown:              Mitigation; PTI
  Mmio stale data:       Not affected
  Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl and seccomp
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Retpolines, IBPB conditional, IBRS_FW, STIBP conditional, RSB 
                         filling
  Srbds:                 Mitigation; Microcode
  Tsx async abort:       Not affected
```

## Wifiを繋げる手段について

Wifiを繋げる手段としては以下の方法が挙げられます（有線LANに繋げられない場合）
- 有線LANを繋げることができる中継機を購入し、そこから有線で繋ぐ
- USB無線LANアダプター等を書いドライバーを設定する。


後者は２０００円強でできますが、安定性などを考慮すると前者の方法を使うことをお勧めします。
ネットワーク関連の設定等の一部にはインターネットが必要な場合もあり、場合によってはUSBアダプターではできない可能性があることを頭に入れておいてください。

## メモ：USB　Wifi子機の接続設定について

大まかな流れとしては、
1. ドライブのIDを探す
2. ネットワークカードのデバイスIDに1.で見つけたIDを書き加える
2. `/etc/netplan/`に接続情報を記載する

### ドライブIDの探し方

ネットワーク機器を挿入した状態で`lsusb`コマンドを入力するとこのように接続されているデバイスの一覧が表示される。
私の場合はElecom製のWifiモジュールを使っていたため`056E 4009`を書き加えることになる。
```bash

$ lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 056e:4009 Elecom Co., Ltd WDC-300SU2S
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```

### ネットワークカードのデバイスIDに書き加える。
[参考記事](https://izumisy.work/entry/2020/08/02/194006)によると、


```bash
$ sudo modprobe rtl8192cu
$ echo "056E 4009" | sudo tee /sys/bus/usb/drivers/rtl8192cu/new_id 
```

認識されると以下の様になる（wlx0...が追記部分。この時点ではRX xxxは全て０になってるはず）
```bash
$ ifconfig -a
enp2s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether f8:bc:12:56:af:c6  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        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  (Local Loopback)
        RX packets 980  bytes 78012 (78.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 980  bytes 78012 (78.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlx04ab189bad94: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.60  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 2400:2411:4860:6f00:6ab:18ff:fe9b:ad94  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::6ab:18ff:fe9b:ad94  prefixlen 64  scopeid 0x20<link>
        ether 04:ab:18:9b:ad:94  txqueuelen 1000  (Ethernet)
        RX packets 46966  bytes 49356651 (49.3 MB)
        RX errors 0  dropped 1219  overruns 0  frame 0
        TX packets 21341  bytes 2582894 (2.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

`wlx04ab189bad94`についてのネットワーク設定をYamlファイルに追記していく。
追記内容は以下。

``` /etc/netplan/50-cloud-init.yaml
network:
  ethernets:
    eth0:
      dhcp4: true
      optional: true
  version: 2
  wifis:
    wlx04ab189bad94:
      optional: true
      access-points:
        "<ネットワークのアクセスポイント名>":
          password: "<パスワード>"
      dhcp4: true
```

```bash
sudo netplan generate
sudo netplan apply
```