【初心者向け】Raspberry Pi のアップグレード（Raspberry Pi OS (10 から 11) とnodejs(16から18)）とUSBメモリのマウント

# はじめに
久しぶりにRaspberry Piを使うためにRaspberry Pi OS（いわゆるRaspbian）とnodejsをアップグレードしたのでここにメモしておきます。

自分のためのメモですが、私のような初心者の方にも参考になるかもしれません。

# 私の環境
* Raspberry Pi 400
    * メモリ　4GB
    * SDカード 16GB
    * もともとRaspberry Pi OS10と nodejs16が入っていた。
* LANケーブルでWindows 10パソコンにつないだ（PowerShellからsshで操作）


# 手順
## 0. ラズパイの起動、sshで接続
LANケーブルでパソコンとRaspberry Piをつないだ後、電源を入れました。そのあとWindowsのPowershellを使って、sshでRaspberry Piにログインしました。
```
ssh pi@hostname
```
## 1. Wifiにつなぐ
アップデートを行うので、Wifiネットワークの設定をしておきます。
いつもと違ったWifi環境でやったので、wpa_supplicant.confのSSIDとパスワードを更新しました。/etc/dhcpcd.confはそのままで大丈夫でした。

```bash
cat /etc/wpa_supplicant/wpa_supplicant.conf
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/b66cac57-efbd-64af-c4b4-4d2fbc3cbecf.png)

## 2. Raspberry Pi OSのアップデート
久しぶりに使うので、以下のコマンドでアップデートしようとしました。
```bash
sudo apt update
sudo apt upgrade
suto apt autoremove
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/ef0cf5e5-d58c-44d7-e75e-f49256d78d5c.png)
これで作業が終わるといいかなぁと思っていたのですが、OSのバージョンが、10.10が10.13になっただけだったので、もう少し作業を進めます。

lsb_releaseで見てみると、現在のOSはRaspbian 10でコードネームbusterになっています。11では、コードネームがbusterではなくbullseyeになるそうです。なお、Raspbianと呼ばれていたOSは最近は Raspbery Pi OS と呼ばれるようになったそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/2d0e81e0-8e17-1f33-95c3-ed41fc5c5f70.png)
/etc/apt/sources.list と /etc/apt/sources.list.d/raspi.list にbusterというコードネームが見えます。この二つのファイル中にあるbusterをbullseyeに置き換えるそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/98c451b2-d48f-11b5-1ec1-4d06f1f36eb7.png)
viエディタで編集してもいいですし、以下のようにコマンドラインでやっても大丈夫です。
```bash
sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list
sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list.d/raspi.list
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/76a93c15-714f-681e-b371-9830fe142658.png)
これができたら以下のようにしてアップデートします。フルアップグレードのためには、gcc-8というものが必要なのだそうです。アップグレードの後にはautoremoveもしておきます。

```bash
sudo apt update
sudo apt install libgcc-8-dev gcc-8-base
sudo apt full-upgrade
sudo apt autoremove
```
しかし、上のコマンドを実行してもアップグレードが出来ていなかったので、今度は以下を試します。終わったあとにautoremoveもやっておきます。
```bash
sudo apt dist-upgrade -y
sudo apt autoremove
```
今度はアップデートされていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/52b0312d-35d1-00d9-ba83-f7c55f4015c6.png)

再起動した後、次の作業をしようとしたらWifiネットワークが切れていたようなので調整しました。

```bash
sudo raspi-config
```
コンフィグの設定から、Advanced optionのnetwork configでdhcpcdを有効にして、Systetm optionsでwifiのパスワードもいれなおしたら大丈夫になりました。

## 3. nodejsのアップグレード
npm と nodejsもアップグレードしてみようと思います。nodejsは16から18にしてみようと思うので、以下のような感じでアンインストールしてから、再インストールしました。
```bash
sudo apt remove -y nodejs npm
sudo curl -sL https://deb.nodesource.com/setup_18.x | sudo bash -
sudo apt list availale nodejs
sudo apt-get install -y nodejs
```
nodejsとnpmの両方ともインストールされたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/08c8cc21-b959-229b-03a7-0a5bb9225871.png)

# おまけ：USBメモリのマウント
今後のためにUSBメモリのマウントも練習しておきます。USBメモリは電源を入れる前に接続しています。

## 接続デバイスの確認
まずはデバイスの確認をします。

```bash
sudo fdisk -l
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/5bdf8b53-f5a7-eef7-0968-54a90460d1f5.png)

/dev/sdaと認識されています。これはsdaのあとに番号が付いていないので、パーティションではなくてディスクです。パーティションを作っておくことが必要です。

## パーティションの作成
以下のようにfdiskコマンドを使ってパーティションを作ります。私はUSBメモリにデータを入れていたのですが、この過程でどこかに消えてしまいました。空のUSBメモリを使った方が良いかもしれません。

```bash
sudo fdisk /dev/sda
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/f4fc636e-1ebb-999b-c8ce-f4a833e6d73b.png)

dでパーティションを削除してから、nで新しくパーティションを作ります。パーティションの数やセクタの長さはデフォルトの設定で進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/920347ec-f0ae-20b7-448f-dcbbaa78ea72.png)
最後にqでなくてwで終わりにしないと保存されませんから気をつけましょう。パーティションができるとsda1ができています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/0d043eb1-a98b-6b7b-485f-ccea34384666.png)

## フォーマット
vfatにフォーマットします。名前はTILEにしてみます。パーティションをつくらずsdaをフォーマットしようとするとうまくいかなかったのですが、sda1のパーティションを対象にするとうまくいきました。
```
sudo mkfs.vfat /dev/sda1 -n TILE
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/8aadfec9-c642-5158-e6b4-1164f7333e02.png)
エラーが出なかったので、フォーマットができたと思います。

## マウント
/mntの中にtileというディレクトリを作って、それをdev/sda1につなげます。以下のようにマウントしていきます。
```
sudo mkdir /mnt/tile
sudo mount -t vfat /dev/sda1 /mnt/tile
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/744e5767-f3e1-de5e-88c5-611d1a3403a6.png)


これをアンマウントするには
```
sudo umount /mnt/tile
```
か
```
sudo umount /dev/sda1
```
でよいようです。

下の画面のように実験してみました。Windows PCでもファイルが見られますし、だいたい大丈夫そうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/90a293ee-cd18-afbf-fcdc-32636956ced1.png)

（毎回シャットダウンするときにアンマウントしたほうが良いのかはまだよくわかりません。→再起動すると勝手にアンマウントされているので、どちらかというと起動時に自動的にマウントするようにした方がよいかもしれません。ただし、sdaになるか、sdbになるか、接続順が影響するかもしれないので、ちょっと方策を考えます。（or調べます。））


# まとめ
ここでは、Raspberry Pi OSを10から11にした記録と、nodejsを16から18にした記録をメモしています。
また、USBメモリのマウントについても少しメモしておきました。

# 参考にしたページ

https://raspida.com/wifi4raspbian

https://pimylifeup.com/raspberry-pi-nodejs/

https://www.infraeye.com/study/linuxz21.html

https://forums.raspberrypi.com/viewtopic.php?t=53987

http://www.openspc2.org/reibun/RaspberryPI/OS/Raspbian/file_manager/0503/index.html

https://www.mizutan.com/wordpress/?p=6006

https://github.com/nodejs/Release

https://www.raspberrypi.com/software/operating-systems/