Raspberry PI OS Lite 64-bitでセットアップした時のメモ

# これは、何

気軽にラズパイの環境破壊して再構築できるように、一か所にまとめた備忘録のようなもの。

# この記事でやること
- ufw
- SSHでパスワード認証無効にして公開鍵だけでできるようにする
- hostapdを利用してホットスポット作り
- Denoをソースからビルド
- nを利用したNode.jsのインストール
- MeCabのインストール

# 作業
## ufw のセット(最低限 SSH 用だけでも)
```
$ sudo apt update
$ sudo apt install ufw
$ sudo ufw allow (SSHで使うポート)
```
## ssh の有効化

```
mkdir .ssh
nano .ssh/authorized_keys
いい感じに書く(cat id_rsa.pub >> authorized_keys でもいい)
chmod 600 .ssh/authorized_keys

いじる(/etc/ssh/sshd_config)
Port (好きな番号)
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
```

## ケースでArgon oneを使う場合はツール入れる
```
curl https://download.argon40.com/argon1.sh | bash
```
   - 再起動
   - ファンコントロールは`argonone-config`から
   - 赤外線受信機のは`argonone-ir`から
   - ツールのアンインストールは`argonone-uninstall`から

## hostapd の有効化(このタイミングで IP 固定する)(クソ長い)
  - ベース
    - https://nw-electric.way-nifty.com/blog/2021/08/post-26465e.html
       - だいたいの説明は書いてあるのでそっち見て作業でもいいけど、一部変えています。
  - Interface wlan0 wasn't started で起動しないとき
    - https://oar.st40.xyz/article/127
  - ノート
    - [hostapd.conf 覚書](https://qiita.com/JhonnyBravo/items/5df2d9b2fcb142b6a67c)
    - IPの設定について元記事からいじってるのでまあいい感じにしてください。

```
$ sudo apt-get update
$ sudo apt-get install hostapd dnsmasq -y
```

`$ sudo nano /etc/dhcpcd.conf`で以下を追記  
参考記事はDHCPコケたときにだけフォールバックさせるような感じ(?)だけど、文字通りDHCP コケない限り行かないので IP を常に固定する場合はこう。  
場合によってはDHCP使いたくなる場合もあると思うのでそこは何とかしてください。  
両方書いておいて、片方をCOとかでよさそう。  
例えばこう。  
プロファイル使ってなくてもCO外してていいらしい

```
profile static_eth0
static ip_address=(固定したいIP)/(プレフィックス長)
static routers=(デフォルトゲートウェイ)
static domain_name_servers=(DNSサーバー)

interface eth0
static ip_address=(固定したいIP)/(プレフィックス長)
static routers=(デフォルトゲートウェイ)
static domain_name_servers=(DNSサーバー)

# fallback to static profile on eth0
# interface eth0
# fallback static_eth0

denyinterfaces wlan0

interface wlan0
static ip_address=192.168.2.1/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1
static broadcast 192.168.2.255
```

`$ sudo nano /etc/hostapd/hostapd.conf`でファイルを開いて適当に設定を流し込む

```
driver=nl80211
interface=wlan0

country_code=JP
hw_mode=a
ieee80211d=1
#ieee80211h=1
ieee80211n=1
ieee80211ac=1
wmm_enabled=1
#ignore_broadcast_ssid=1

vht_oper_chwidth=0
channel=36 # 16か44のみ有効っぽい？

auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_pairwise=TKIP

ssid=(SSID)
wpa_passphrase=(パスワード)
```

`$ sudo nano /etc/default/hostapd`

```
DAEMON_CONF="/etc/hostapd/hostapd.conf"
```

`$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig`  
`$ sudo nano /etc/dnsmasq.conf`して以下を流し込む

```
interface=wlan0
dhcp-range=192.168.2.200,192.168.2.240,255.255.255.0,24h
```
サービスの有効化
```
$ sudo systemctl enable hostapd
$ sudo systemctl enable dnsmasq
$ sudo reboot
```

```
$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
```

`$ sudo nano /etc/sysctl.conf` で開いて下記を CO 解除

```
net.ipv4.ip_forward=1
```

```
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
```

`$ sudo nano /etc/rc.local` で開いて下記を追記

```
iptables-restore < /etc/iptables.ipv4.nat
```
ただし、どうもこれで[コケる場合がある](https://unix.stackexchange.com/questions/621397/iptables-stopped-working-with-couldnt-load-match-stateno-such-file-or-direc)ようだ。その場合は
```
iptables-legacy-restore
```
を使うように。

`systemctl status hostapd`で確認して masked になってたら以下

```
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
```

それでもダメなら以下
`$ sudo nano /etc/rc.local` で開いて先ほど追記した場所をこのように置き換える

```
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd
iptables-restore < /etc/iptables.ipv4.nat
sudo service dhcpcd restart
sudo systemctl restart hostapd
sudo systemctl restart dnsmasq
```

## Deno のセットアップ
   - https://qiita.com/gebriel_kuni/items/b7c090b28b27e00009c3
   - 時間かかるので、暇なときに。
   - 64bitだからといって特に変える必要は無さそう。

## Node.js のセットアップ

```
$ sudo apt update
$ sudo apt install npm -y
$ sudo npm install -g n
$ sudo n latest  # stableでもなんでもお好みで
$ sudo apt purge nodejs npm
$ sudo apt autoremove
```

## MeCab のセットアップ
   - https://qiita.com/ekzemplaro/items/c98c7f6698f130b55d53
   - 先に `sudo apt install file`しないと入らない場合があるかも
   - `/etc/mecabrc`に追記するのはこれ。今回は64bitのOS使ってるのでこうなってるけど32bitならまた変わる気がする。  
      - `dicdir = /usr/lib/aarch64-linux-gnu/mecab/dic/mecab-ipadic-neologd`

もしかしたら追記するかも