Raspberry Pi Zero を apt full-upgrade するまでのメモ

## 用意したもの

- [Raspberry Pi Zero WH ケース付き](https://akizukidenshi.com/catalog/g/gM-12958/)
- [KIOXIA マイクロSDカード EXCERIA 16GB 100MB/s](https://akizukidenshi.com/catalog/g/gS-15845/)
- [USBケーブル USB2.0 Aオス-マイクロBオス 1.5m](https://akizukidenshi.com/catalog/g/gC-07607/)
- [USB OTGケーブル microB 10cm](https://akizukidenshi.com/catalog/g/gC-13430/)
- [HDMIメス⇔miniHDMIオス変換コネクタ](https://akizukidenshi.com/catalog/g/gC-13431/)
    - HDMI ケーブルとディスプレイは既にある前提。
- [電源タップ: OWL-OTA2U2S10-BK](https://www.amazon.co.jp/dp/B079DMLYYH)
- [USB 3.0 ハブ: U3H-T410SBK](https://www.amazon.co.jp/dp/B00RT8SSFK)
    - AC アダプター付きの余りもの。
- [USB 2.0 ハブ: USB-HUB226GBK](https://www.amazon.co.jp/dp/B000FHUOJU)
    - キーボード接続用。ただ, AC アダプターが無かったので, USB 3.0 ハブに接続。
- [LAN アダプター: ETG5-US3](https://www.amazon.co.jp/dp/B00VSGJ7BI)
    - USB 3.0 ハブに接続。
    - Raspberry Pi 側の速度的に USB 2.0 ハブに接続しても良いけどとりあえず。
- [英語配列 有線キーボード: BSKBU17ENBK](https://www.amazon.co.jp/dp/B013B76R78)
    - USB 3.0 ハブに接続しても認識しなかったので, USB 2.0 ハブに接続。
    - 詳細: [Interoperability with USB 3.0 hubs - Raspberry Pi Documentation - Raspberry Pi Hardware](https://www.raspberrypi.org/documentation/computers/raspberry-pi.html#interoperability-with-usb-3-0-hubs)
- USB カードリーダー
    - Micro SD カードを読み書きできれば何でも OK.
- ローカルミラー
    - rsync://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian を同期しておく。
    - 同期する方法は [Rsyncmirror - Community Help Wiki](https://help.ubuntu.com/community/Rsyncmirror) や [HowTos/CreateLocalMirror - CentOS Wiki](https://wiki.centos.org/HowTos/CreateLocalMirror) を参考にする。
- OS イメージ
    - [Operating system images – Raspberry Pi](https://www.raspberrypi.org/software/operating-systems/) から Lite 版をダウンロードしておく。


## OS イメージ書き込み, 組み立て, 電源投入, SSH サービス起動

1. 書き込みは Windows なら [Rufus](https://rufus.ie/) で OK.
1. Mini HDMI -> HDMI ケーブル -> ディスプレイを接続する。
1. USB OTG -> USB 3.0 ハブ (+ AC アダプター) -> 有線 LAN (+ LAN ケーブル) + USB 2.0 ハブ -> キーボードをそれぞれ接続する。
1. 一応, ディスプレイの電源を投入し, 入力を HDMI に合わせておく。
    - 以前, Raspberry Pi の映像が出力されなかったときがあった。
1. USB ケーブルを電源タップに接続, Raspberry Pi が起動することを確認する。
1. pi ユーザーでログインし, 以下のコマンドを入力, SSH サービスを起動する。
    - アカウント情報は [Linux Users - Raspberry Pi Documentation - Using Linux](https://www.raspberrypi.org/documentation/computers/using_linux.html#linux-users) を参考にする。

```shell
$ sudo systemctl status ssh -l
$ sudo systemctl enable ssh
$ sudo systemctl start ssh
$ sudo systemctl status ssh -l
```


## SSH 公開鍵設置

1. パスワード認証で SSH 接続する。
1. 以下のコマンドを入力, SSH サービスを起動する。
1. 公開鍵認証で SSH 接続できることを確認する。

```shell
$ mkdir -m 0700 ~/.ssh
$ cd ~/.ssh; pwd
$ echo '<公開鍵>' > authorized_keys
$ chmod 0600 authorized_keys
```


## (参考) ログイン直後の情報

```shell
$ id
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),997(gpio),998(i2c),999(spi)
```

```shell
$ uname -a
Linux raspberrypi 5.10.17+ #1414 Fri Apr 30 13:16:27 BST 2021 armv6l GNU/Linux
```

```shell
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        14G  1.3G   13G  10% /
devtmpfs        183M     0  183M   0% /dev
tmpfs           216M     0  216M   0% /dev/shm
tmpfs           216M  5.8M  210M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           216M     0  216M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   48M  205M  19% /boot
tmpfs            44M     0   44M   0% /run/user/1000
```


## APT 参照先ミラー変更

1. 作業ディレクトリーを変更する。

    ```shell
    $ cd /etc/apt; pwd
    /etc/apt
    ```

    ```shell
    $ ls -lA
    total 32
    drwxr-xr-x 2 root root 4096 May  7 16:00 apt.conf.d
    drwxr-xr-x 2 root root 4096 Apr 19 17:41 auth.conf.d
    -rw-r--r-- 1 root root  150 May  7 15:44 listchanges.conf
    drwxr-xr-x 2 root root 4096 Apr 19 17:41 preferences.d
    -rw-r--r-- 1 root root  235 May  7 15:43 sources.list
    drwxr-xr-x 2 root root 4096 May  7 15:43 sources.list.d
    -rw-r--r-- 1 root root 2452 May  7 15:41 trusted.gpg
    drwxr-xr-x 2 root root 4096 May  7 15:43 trusted.gpg.d
    ```

1. 設定ファイルをバックアップする。

    ```shell
    $ sudo cp -aiv sources.list sources.list.`date +%Y%m%d`
    'sources.list' -> 'sources.list.20210815'
    ```

    ```shell
    $ ls -l sources.list sources.list.`date +%Y%m%d`
    -rw-r--r-- 1 root root 235 May  7 15:43 sources.list
    -rw-r--r-- 1 root root 235 May  7 15:43 sources.list.20210815
    ```

1. 設定ファイルを編集する。

    ```shell
    $ sudo vi sources.list
    ```


### 設定差分

```diff
$ diff -u sources.list.`date +%Y%m%d` sources.list
--- sources.list.20210815       2021-05-07 15:43:30.475921799 +0100
+++ sources.list        2021-08-15 04:58:35.163878572 +0100
@@ -1,3 +1,3 @@
-deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
+deb http://<ミラーサーバーの IP アドレス>/raspbian/ buster main contrib non-free rpi firmware
 # Uncomment line below then 'apt-get update' to enable 'apt-get source'
 #deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
```


## アップデート

```shell
$ time sudo apt update
(中略)
Reading package lists... Done
Building dependency tree
Reading state information... Done
44 packages can be upgraded. Run 'apt list --upgradable' to see them.

real    0m30.900s
user    0m26.104s
sys     0m3.698s
```

```shell
$ time sudo apt -y full-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  python-colorzero
Use 'sudo apt autoremove' to remove it.
The following packages will be upgraded:
  base-files bluez firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek
  isc-dhcp-client isc-dhcp-common klibc-utils libgcrypt20 libgnutls30 libgssapi-krb5-2 libhogweed4 libk5crypto3 libklibc
  libkrb5-3 libkrb5support0 liblz4-1 libnettle6 libpam-systemd libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc
  libraspberrypi0 libsystemd0 libudev1 libx11-6 libx11-data libxml2 linux-libc-dev pi-bluetooth python-gpiozero
  python-spidev python3-gpiozero python3-spidev raspberrypi-bootloader raspberrypi-kernel raspberrypi-sys-mods rpi-eeprom
  rpi-update systemd systemd-sysv udev
44 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 146 MB of archives.
After this operation, 7,724 kB of additional disk space will be used.
(中略)
Processing triggers for install-info (6.5.0.dfsg.1-4+b1) ...
Processing triggers for libc-bin (2.28-10+rpi1) ...
Processing triggers for initramfs-tools (0.133+deb10u1) ...

real    50m30.921s
user    7m18.218s
sys     3m22.763s
```

**ミラーを使っていても 50 分掛かるのがポイント。。。**

```shell
$ sudo apt -y autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  python-colorzero
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 130 kB disk space will be freed.
(Reading database ... 40470 files and directories currently installed.)
Removing python-colorzero (1.1) ...
```

どっとはらい。