ラズパイ4にraspbian busterをセットアップ

# 記事を書く動機
ラズパイ用のSDカード作成手順について、Windows前提の情報は多いが、Linuxでの手順があまり無いため（Linux使いにとっては簡単だから・・？）。ついでに、OS起動後のセットアップについてもまとめる。
※参考：[Raspberry Pi セットアップ(書き込み～SSH設定まで)](https://qiita.com/Halhira/items/1da2ae543217be26988a)

Linuxでセットアップ作業するメリットは
* Windowsより簡単
* ext4フォーマットできる

# 使用モデル
Raspberry Pi 4 Model B (RAM 4GB)

# 必要なS/W、H/Wの入手
1. 必要なハードウェア
    機器類はアマゾンでポチって入手する。合計13000円くらい。
    * [ラズパイ4本体](https://www.amazon.co.jp/gp/product/B07WR5W2D6/ref=ppx_yo_dt_b_asin_title_o00_s00)  
        これがないと始まらない。  
        本体＋SDカード(プリインストール)をセット購入すると、準備の手間が省けておすすめ。  
    * [本体ケース](https://www.amazon.co.jp/Miuzei-%E6%9C%80%E6%96%B0Raspberry-Raspberry-B%E5%AF%BE%E5%BF%9C%EF%BC%88Raspberry-%E6%9C%AC%E4%BD%93%E5%90%AB%E3%81%BE%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%EF%BC%89/dp/B07VC3RWYZ/ref=pd_bxgy_147_img_2/355-7176923-1810203)  
        これは任意。ただ、個人的にはケースなしはあり得ない…と思う。  
        基盤むき出しは怖いわ…  
    * [microHDMIとHDML変換アダプタ](https://www.amazon.co.jp/Cable-Matters-%E5%A4%89%E6%8F%9B%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC-%E5%A4%89%E6%8F%9B%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF%E3%83%BC-%E9%87%91%E3%83%A1%E3%83%83%E3%82%AD%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF%E6%90%AD%E8%BC%89%EF%BC%882%E6%9C%AC%E3%82%BB%E3%83%83%E3%83%88%EF%BC%896/dp/B00JDRHQ58/ref=pd_bxgy_147_img_3/355-7176923-1810203)  
        ラズパイ3は一般的(?)なHDMIポートがあったが、ラズパイ4はmicroHDMIポートしかない。  
        そのため変換アダプタがないとディスプレイに表示ができない。  
        microHDMIって主流になってくるんかな・・？あまり見かけないけど…  
    * HDMIケーブル  
        ssh設定するまでディスプレイが必要なので用意しておく。  
    * [microSDカード](https://www.amazon.co.jp/Toshiba-SD%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%BC%E3%82%AB%E3%83%BC%E3%83%89-M203-Class10-SD%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC%E4%BB%98%E3%81%8D/dp/B07M83Y54L/ref=sr_1_8)  
        ラズパイ４のmicroSDは2TBまで認識可能。今回は64GBにした。  
        SDカードの書き込み可能回数は500～1000回程度らしいので、寿命とお財布事情を考慮して決めればよい。  
    * microsd usb カードリーダー  
        USB接続でmicroSDの読み書きをするときに使用。  
        プリインストールされたSDカードを購入している場合は不要。しかし、トラブル等でOS再インストールする場合に欲しくなるので持っておいたほうがよい。  

1. 必要なソフトウェア
    `fat32formater`と`dd for Windows`は、Linuxでセットアップする場合は不要。Windowsでセットアップする場合は用意する。
    * [raspbian](https://www.raspberrypi.org/downloads/)  
        ラズパイ用のOS。NOOBS(raspbianのインストーラ)とraspbianがあるが、raspbianを直で入れる方が早いためraspbianをダウンロードする。見出しのリンクは海外サイトのため、[国内ミラーサイト](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/)から同じバージョンを探してダウンロードするとよい（さくさくダウンロードできる）。  
        * 19/12/26時点の最新版  
            2019-09-26-raspbian-buster.zip　2019-09-26　10:36　1.1G  
    * [fat32formater](http://www.ridgecrop.demon.co.uk/index.htm?guiformat.htm)  
        SDカードのフォーマット用ソフト。  
        容量が32GB以下の場合は、Windows10標準機能でフォーマットできるかもしれない（未確認）。  
        ライセンスはGPL。商用利用可。ソース公開なしにしたい場合もBSD＋ライセンス料で対応している。著作権者はRidgecrop Consultants Ltd.　  
        一応「気に入ったらdonateよろ！」って書いてあるが、ユーザとして使う分には気にしなくてよさげ。  
    * [dd for Windows](https://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows#s74c46f6)  
        ブロック単位でファイルをコピーするソフト。SDカードへのファイル書き込みに使用する。  
        ライセンスは無料、無保証、業務利用可。著作権者はシリコンリナックス（株）  

        
# OS起動までの手順
usbカードリーダーにmicroSDを入れてPCにさす。
以下、Linuxでセットアップするときの手順。参考までにWindowsでのセットアップ方法もメモしておく。

## Linxuでセットアップする場合
SDカードが/dev/sdgで認識されている場合を例にする。
下記コマンドでフォーマットする。

```shell
$ mkfs.ext4 /dev/sdg1
```

SDカードデバイスをアンマウント状態にして、下記コマンドでOS(raspbian)をSDカードに焼く。

```shell
$ sudo dd if=2019-09-26-raspbian-buster.img of=/dev/sdg bs=4M
```
書き込み終了後、アンマウントする

```shell
$ sudo umount /dev/sdg
```

ラズパイ本体にSDカードを刺して電源ON。デフォルトは自動ログインの設定になっているため、デスクトップが表示されれば成功。デフォルトのユーザ・パスワードは下記。
* 初期ユーザー名：pi
* 初期パスワード：raspberry

起動後、wifi設定、ホスト名、パスワード変更、ロケールなどの変更ウィンドウが出てくるため、最低限の設定はここで対話的に実行できる。

## Windwosでセットアップする場合
fat32formaterを実行し、SDカードをFATでフォーマットする。fat32formaterは32GB以上でもFATフォーマット可能(らしい)。
※注意点：exFATではなくFATとすること

WindowsだとFAT(FAT32)でしかフォーマットできない様子。
ext4と違い、SDカードをWindowsから読めるというメリットはあるかも？

OSをSDカードに焼くときは、DD for Windowsを用いる。
ラズパイ本体にSDカードを刺して以降は、上述のLinuxの場合と同じ。


# リモート作業の準備
* 設定変更
    色々変更したい場合は下記コマンドを実行。

    ```shell
    $ sudo raspi-config
    ```
    ホスト名変更などの他、overclock設定とかもあるっぽいので、そのうち試してみたい。また、[raspi-configのソース](https://github.com/RPi-Distro/raspi-config/blob/master/raspi-config#L2086)をみると、コマンドライン実行できるようなので、自動構成スクリプトみたいなものが作れそう。

* sshの有効化
    左上のラズパイアイコンをクリックし、設定からsshを有効化する。
    ラズパイ3ではルート直下にsshファイルを作るとsshが有効化されたが、そちらは未確認。
    同じ方法で有効化される場合、下記コマンドを実行で有効化できる。

    ```shell
    $ touch /ssh
    ```

* ホスト鍵の更新

    ```shell
    $ sudo rm -v /etc/ssh/ssh_host*
    $ sudo dpkg-reconfigure openssh-server
    ```

* ファイアーウォールの導入
    インストール

    ```shell
    $ sudo apt install ufw
    ```
    有効化

    ```shell
    $ sudo ufw enable
    ```
    ssh用にポート22番を解放。特定のサブネットに属する接続だけ開放する。

    ```shell
    $ sudo ufw allow from 192.168.0.0/24 to any port 22
    ```
    確認

    ```shell
    $ sudo ufw status
    Status: active
    To                         Action      From
    --                         ------      ----
    22                         ALLOW       192.168.0.0/24
    ```

* sshで接続可能か確認

    ```shell
    $ ssh pi@＜ホスト名 or IPアドレス＞
    ```

# aptリポジトリを変更
デフォルトはraspbian.raspberrypi.orgとなっており、適当な場所にリダイレクトされる。海外サーバだと通信が遅いため、[ラズパイのミラーリポジトリ](http://raspbian.org/RaspbianMirrors)を参考にして国内サーバへ設定を変更する。
以下、JAIST(北陸先端科学技術大学院大学)サーバへの変更例

```shell
$ sudo sed -ie "s/raspbian.raspberrypi.org/ftp.jaist.ac.jp/g" /etc/apt/sources.list
```

# ベースOSのアップデート
1. 現在のバージョンを確認

    ```shell
    $ uname -a
    Linux pisrv 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux 
    ```

1. いろいろアップグレード
    1時間くらいかかる。

    ```shell
    $ sudo apt update
    $ sudo apt upgrade
    $ sudo apt dist-upgrade
    $ sudo rpi-update  # ファームウェア
    ```

1. 再起動してバージョンを確認

    ```shell
    $ reboot
    $ uname -a
    ```

# 自動アップデート設定
セキュリティアップデートの自動更新を行うための設定。
まず下記パッケージをインストール。

```shell
$ sudo apt install unattended-upgrades
```
`/etc/apt/apt.conf.d/50unattended-upgrades`を開き、Origin-Pattern以下のSecurityがコメントになっていないことを確認する。

```
Unattended-Upgrade::Origins-Pattern {
    // Codename based matching:
    // This will follow the migration of a release through different
    // archives (e.g. from testing to stable and later oldstable).
    // Software will be the latest available for the named release,
    // but the Debian release itself will not be automatically upgraded.
//      "origin=Debian,codename=${distro_codename}-updates";
//      "origin=Debian,codename=${distro_codename}-proposed-updates";
    "origin=Debian,codename=${distro_codename},label=Debian";
    "origin=Debian,codename=${distro_codename},label=Debian-Security";  # これ
```
以下コマンドで有効化する

```shell
$ sudo dpkg-reconfigure -plow unattended-upgrades
```
アップデートログは`/var/log/unattended-upgrades/unattended-upgrades.log`。

# sudoパスワード
デフォルトではsudo実行時にパスワードなしで実行できるようになっている。
/etc/sudoers.d/010_pi-nopasswdにNOPASSWDの設定がされている。ファイルごと消せばOK。

```shell
$ sudo rm /etc/sudoers.d/010_pi-nopasswd
```


# 参考サイト
* [Raspberry Pi 4へOSをインストールする(Raspbian編)](https://pcmanabu.com/raspberry-pi4-install/)
* [Raspberry Piのアップデート](https://yukaobu.wordpress.com/2017/05/01/raspi-update/)
* [CUI（コンソール）を日本語化する方法](http://densikousaku.com/archives/210)