Raspberry Pi 初期設定まとめ

# はじめに
2020/5/28 に 最新モデルRaspberry Pi 4 Model B (8GB)が発売されたよーということで、4年ぶりに [KSY](https://raspberry-pi.ksyic.com/)さんでスターターキットを購入しちゃいました。前買ったのは 3Bですが届いたまま箱すら空けずメルカリさんで売却したので今回は久しぶりに組み立てて色々と弄ってみました。
※まあ、いつものいまさら感たっぷりですけどね

## スターターキットが便利
こだわりなければ「[Pi4 B 8GB スターターキット V1 32GB 透明](https://raspberry-pi.ksyic.com/main/index/pdp.id/551/pdp.open/551)」を購入するのが便利だと思います。個別に注文するのも楽しいが、まず始めてみる環境があったほうがいいと思う。

![IMG_5553.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/e229c23e-001a-4de1-59ca-fad832949b29.png)


## 起動メディアは、まだ SDカード  だが
Pi 4 で USB-SSD から起動できるというのは、もうすぐらしい。(FWで正式対応っていう意味で)

・[Raspberry Pi 4でUSBブートに対応間近](https://raspida.com/usb-boot-beta)

動作保証はしないがやり方はある
[1](https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=277007&start=25) [2](https://jamesachambers.com/raspberry-pi-4-usb-boot-config-guide-for-ssd-flash-drives/) [3](https://community.home-assistant.io/t/hass-io-transfer-from-sd-card-to-ssd-or-usb/97452/141)  [4](https://github.com/raspberrypi/rpi-eeprom/pull/127) [5](https://densi.biz/raspi-ssd) [6](https://dev.intra-mart.jp/digibiz-raspberry-pi-4-ssd/)

# OSインストール、初期設定など
microSDカードが壊れたのもあり結局３回？最初からやり直した訳で、その都度googlesで検索するのが面倒なので手順を列挙しときます。（自分メモ）

## SDカードに書き込み
[Raspberry Pi Imager](https://www.raspberrypi.org/downloads/) ツールを使うと簡単。win/mac/ubuntu が対応している。

・[Raspberry Pi Imagerを試してみる](https://qiita.com/kinneko/items/9aacd3d852a3073c0b6c)

# RasbianOS(Raspberry PI Desktop) 初期設定
折角なので Rasbian Full(Desktop)を入れる。単に毎回パッケージが足りなくて指定するのが面倒なだけです。OS起動するとDesktopが表示されるけど、個人的な趣味でVNC⇒SSH⇒Desktopは最終的にOFFす手順で進めます。

## 黒い画面を使うよ
ターミナル(黒い画面)での操作です、苦手な方も覚えておいたほうがいい。
しかしroot,pi にパスワードかかっていないのか…用途を考えればそうなるね。

## root,piパスワードを設定する
```cmd
$ sudo passwd root
$ sudo passwd pi
```

## ipアドレス固定化
rasberrypi.local で Raspberry のアドレスを参照できるが、ip固定の方がなにかと便利なので設定しときます。`/etc/dhcpcd.conf` を編集して再起動します。

```/etc/dhcpcd.conf
# Example static IP configuration:
interface eth0
static ip_address=192.168.0.xxx/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
```

## VNC,sshを有効化
VNC＆ssh経由でアクセスするので VNC ssh を有効化する。
sshは、デフォルト設定のままなので、パスワード認証となっているが後で変更するので今回このまま。Rlogin/TeraTermなどのターミナルから ssh 経由で "pi" ユーザでアクセスできることを確認しときます。

```cmd
$ sudo raspi-config nonint do_vnc 0
$ sudo raspi-config nonint do_ssh 0
$ sudo raspi-config nonint get_ssh    # sshの状態を確認(0:Enable 1:Disable)
```

## ssh の最低設定
デフォルトで「パスワードでのログイン」となっているのはOKとしても、rootでのsshアクセスは禁止しておく。本来は接続先port番号、公開鍵認証などしておいたほうがいいが、非武装地帯にいるのであればOKとしとく。`/etc/ssh/sshd_config` に下記を有効化する。

```/etc/ssh/sshd_config
PermitRootLogin no
```

## VNCで接続してみる
PCに 「[VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/)」をインストールして、Raspberry にアクセスしてみる。"pi" ユーザでログインできることを確認する。

・[VNCでPCからデスクトップ画面操作](https://jellyware.jp/kurage/raspi/vnc.html)

もし接続して「cannot currently show the desktop」と表示されたら。というか多分なるので下記のようにする。

```/boot/config.txt
hdmi_force_hotplug=1
```

## Locale, Timezone の設定
こちらもコマンドから実行します。

```cmd
$ sudo raspi-config nonint do_change_locale ja_JP.UTF-8
$ sudo raspi-config nonint do_change_timezone Asia/Tokyo
```

## キーボードレイアウトの設定
コマンドからは指定できなかったんで、"Raspberry Piの設定" ⇒ ローカライゼーション ⇒ キーボード で設定する。

Model : Generic 105-Key PC (intl.)
layout : Japanese
Variant : Japanese

## swap領域を無効化
8GBもメモリがあるのでswapを削除します。2GB以上メモリあればやっとくのがいいでしょうね。

```cmd
$ free -h
$ sudo swapoff --all
$ sudo apt-get purge -y --auto-remove dphys-swapfile
$ sudo rm -fr /var/swap
$ free -h
```

## ホスト名の変更
GUIを使えば簡単だけど、あえてコマンドから。下記２ファイルを変更して再起動する。
ホスト名の確認は `uname -a` で確認できる。

```
$ sudo vi /etc/hosts
$ sudo vi /etc/hostname
```

## 電源 LED 点滅の設定
これ結構いいかもと思った。電源が ON ⇒ 赤LED 点滅、OFF ⇒ 赤LED 消灯。赤LED で ON/OFF を判別できる。
モニターつないでないので電源抜くタイミングがわからんかったのよね。

```/boot/config.txt
// 以下を追記 して再起動
# turn power LED into heartbeat
dtparam=pwr_led_trigger=heartbeat
```


## vimのインストール
ある程度の年代だと nano より vim が好きなはず。
デフォルトだと OSC52 が有効になるのでうざければ `~/.vimrc` を作っとく。

```cmd
sudo apt-get install vim
```

## 新規ユーザを追加
セキュリティ強化のため "pi" ユーザーとは別のユーザーを作成する。
ついでに sudo 使えるようにもしておく。※hoge は例ですよ

```cmd
$ sudo adduser hoge
$ sudo gpasswd -a hoge sudo
$ sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio hoge
```

## Desktop 自動ログインの無効化
"pi"ユーザで自動ログインするのをこれで無効化できます。
`#autologin-user=pi` コメントアウトするだけ。再起動するとログイン画面がでます。

```/etc/lightdm/lightdm.conf
#autologin-user=pi
```

## Desktop 自動ログインの無効化 もういっこ
こちらも "pi" ユーザから hoge に変更しとく。

```/etc/systemd/system/autologin@.service
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --autologin hoge --noclear %I $TERM
```

## piユーザ削除すると面倒なことになるので無効化
ユーザを削除するのを推奨しているが pi ユーザでの定義が結構あるため無効化しておいたほうがいいと判断した。

```cmd
$ sudo usermod --expiredate 1 pi
```

## sudoers(piユーザ用)の削除
pi ユーザで sudo するときにパスワード聞いてこないし `/etc/sudoers` 定義にも書いてないし…と思ったらそういうことなのね、こういう定義は止めて欲しいな。

```cmd
$ sudo rm /etc/sudoers.d/010_pi-nopasswd
```
## VNCで接続してみる
「[VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/)」から、Raspberry にアクセスしてみる。"pi" ユーザでログインできないことを確認できれば、まずOK。

![pi4_01_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/0d537fed-9516-eb7f-63f8-15435df36e91.png)


## NTPの設定(確認)
たぶん初期値のままで問題ないですが、問い合わせ ntpサーバが海外なので国内にしたい。
※`timedatectl status` コマンド結果で `NTP service` の状態が `active` 以外だったら設定する必要あります

```cmd
$ vi /etc/systemd/timesyncd.conf
[Time]
NTP=ntp.jst.mfeed.ad.jp ntp.nict.jp
FallbackNTP=time.google.com
```

サービスの再起動

```cmd
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-timesyncd.service
```
`systemctl status systemd-timesyncd.service` コマンドで確認すると、"debian.pool.ntp.org(192.33.96.102)" から "ntp.jst.mfeed.ad.jp(210.173.160.27)" に変更されていることがわかる。※例なのでこのipと同一になるとは限らない

## /etc/fstab に mountポイント指定してもエラーとなる

どうやらブートオプションを変更する必要があるようだ。 `raspi-config` を起動して設定を変更してあげる。

```cmd
$ sudo raspi-config
```

① 3 Boot Options Configure options for start-up
② B2 Wait for Network at Boot Choose whether to wait for network
③ Would you like boot to wait until a network connection is established?、\<yes\>
④ Waiting for network on boot is enabled、\<enter\>
⑤ \<Finish\> 

# パッケージの最新化とファームウエアの更新
割と頻繁にパッケージが更新されている模様です。セキュリティ的にあれなので適度に更新するのがよいと思う。

## パッケージ,OSの更新
apt-get と apt なにが違うのだろ。。まあいいか。

```cmd
$ sudo apt-get update       # パッケージリストの更新
$ sudo apt-get upgrade      # パッケージの更新
$ sudo apt-get dist-upgrade # OSのアップグレード
```

## パッケージ自動化
`unattended-upgrades` パッケージを導入すればパッケージの自動化ができる。
インストール後に `/etc/apt/apt.conf.d/50unattended-upgrades` を開き、`Unattended-Upgrade::Origins-Pattern` セクション最後の行がコメントになっていないことを確認するらしい。※コメントされることあるんだろうか

```cmd
$ sudo apt install -y unattended-upgrades
```

確認点

```cmd
$ sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Origins-Pattern {
    ・
    ・
        "origin=Debian,codename=${distro_codename},label=Debian-Security"; 
```

そのあとに `unattended-upgrades` を有効化する必要がある。

```cmd
$ sudo dpkg-reconfigure -plow unattended-upgrades
```

・[自動アップデート設定](https://qiita.com/rootpia/items/4ec94793a7d77686fbef#%E8%87%AA%E5%8B%95%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E8%A8%AD%E5%AE%9A)


## ファームウェアの更新
気軽にしない方がいいらしいですよ。調べてみると「標準のRaspbianの update/upgrade プロセスを使用すると、自動的にカーネルが最新の安定版に更新されます。これが推奨される手順です。」らしいので、そもそも？サービス運用しているならしない方がいいですね。

そう言われてもわたしはするけどね～

```cmd
$ sudo apt-get install rpi-update # インストール
$ sudo rpi-update                 # 更新実行
$ sudo reboot                     # 反映のための再起動
```

・[Raspberry Pi ファームウェアのアップデート方法](http://my-web-site.iobb.net/~yuki/2017-07/raspberry-pi/rpi-update/)


# 参考にして頂いたサイト様
・[Raspbian初期設定(RaspberryPi4)](https://qiita.com/legitwhiz/items/bc897259b27f3c0e7aa0)
・[raspi-configをコマンドラインで実行する。](https://raspberrypi.mongonta.com/raspiconfig-commandline/)
・[ラズパイダ](https://raspida.com/)

# 次回予告
とりあえず数台設定するのだったら面白いかもしれん。つか手作業が多すぎなのがあるので一括登録できないもんかね。と感じです。

次回、ラズパイがあっついのと色々グッツを買ってみたのでそれを記事にしてみる。