Raspberry Pi5 に接続した Raspberry Pi SSD キット に ArchLinux を新規インストールする

※ **内部接続 NVMe** または **USB 接続 SSD 等**  から立ち上げる事を想定しています。
※ インストール作業は前回の『 Raspberry Pi5 で動く ArchLinux（CUI環境）を MicroSD カードにインストールする https://qiita.com/FukudaGyuuen/items/984c3418cc530302643f 』の MicroSD カードを使用します
※『 **Raspberry Pi5** 』**に SSD ／ NVMe を接続して新規インストール**します
※ 前回の方法で Windows PC の仮想環境下、または他の Linux PC に SSD ／ NVMe 等を接続してインストールする場合は、 config.txt ／ cmdline.txt ／ fstab の設定をする箇所だけ追加して見て下さい。  
※ ファイアウォールの設定の**説明はしていません**
※ 公開・秘密鍵の作り方は**説明していません**
※ SSH による遠隔操作をしない時は、それらは**全て読み飛ばして下さい**
※ 下記のサイトを参考にしています
https://archlinuxarm.org/forum/viewtopic.php?t=16659
https://qiita.com/tyokai/items/38886c6c359ab0d98552
※ 作業環境：Raspberry Pi5（ SSH 接続時の説明のみ Windows ）
<br>

◆ Raspberry Pi5 に ArchLinuxARM がインストールされた MicroSD カードを挿入して立ち上げ **root** でログインしてください
```
login:root
password:パスワードの入力
```
◆ アップデート
```
# pacmann -Syu
```
◆ インストールに必要なパッケージをインストール
```
# pacman -S gdisk f2fs-tools base base-devel devtools dosfstools ntfs-3g
```
◆ インストールメディアの名称を確認
```
# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk0       8:0    1 115.4G  0 disk
|-mmcblk0p1   8:1    1   767M  0 part
`-mmcblk0p2   8:2    1 114.7G  0 part
nvme0n1     259:0    0 476.9G  0 disk
├─nvme0n1p1 259:1    0   511M  0 part
└─nvme0n1p2 259:2    0 476.4G  0 part

※ 例は NVMe で、USB接続の場合は sda 等と表示されると思います（以下必要に応じて読み替えて下さい
```
◆ パーティション等の作成
```
# gdisk /dev/nvme0n1

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1): 1
First sector : エンターキー押す
Last sector : 512MiB
Hex code or GUID : EF00
Changed type of partition to 'EFI system partition'

Command (? for help): n
Partition number (2-128, default 2): 2
First sector : エンターキー押す
Last sector : エンターキー押す
Hex code or GUID : 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/nvme0n1.
The operation has completed successfully.
```
◆ フォーマット・マウント
```
# mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -F /dev/nvme0n1p2
# mkfs.vfat -F 32 /dev/nvme0n1p1
# mount /dev/nvme0n1p2 /mnt               
# mkdir /mnt/boot                          
# mount /dev/nvme0n1p1 /mnt/boot    
```
◆ 必要なパッケージのインストール
```
# pacstrap /mnt base base-devel linux-rpi linux-firmware raspberrypi-bootloader firmware-raspberrypi archlinuxarm-keyring f2fs-tools dosfstools openssh nano dhcpcd
```
◆ マウントポイントの生成
```
# genfstab -U /mnt >> /mnt/etc/fstab
```
◆ マウントポイントが生成されたか確認
```
# cat /mnt/etc/fstab
```
◆ マウントポイントの修正（必要に応じて）
```
$ sudo nano /mnt/usb/etc/fstab

※下記のように修正（修正されていれば不要です）
# <file system> <dir> <type> <options> <dump> <pass>
#/dev/mmcblk0p1  /boot   vfat    defaults        0       0
/dev/nvme0n1p1  /boot   vfat    defaults        0       0

※ USB 接続の SSD 等にインストール場合は『 nvme0n1p1 』を『 sda1 』等に読み替えて下さい
```

◆ 見掛けのルートディレクトリの変更
※**この作業を行わないと、MicroSD カードに変更を加える事になります**
```
# arch-chroot /mnt
```
◆ 時刻の設定
```
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc
# hwclock 

※正しい時刻が表示されたら成功です
```
◆ ロケール
```
# nano /etc/locale.gen
en_US.UTF-8 UTF-8 
ja_JP.UTF-8 UTF-8 

※ Ctrl+w で上記をそれぞれ検索して先頭の # を削除して保存 Ctrl+o 終了 Ctrl+x

# locale-gen

# nano /etc/locale.conf
LANG=en_US.UTF-8
#LANG=ja_JP.UTF-8

※現時点では日本語入力環境を使用しないので先頭に # を入れます
```
◆ キーボード
```
# nano /etc/vconsole.conf
KEYMAP=jp106

※上記を記述して保存終了して下さい Ctrl+x で 保存するかに y と答える
```
◆ ホスト名の設定
```
# nano /etc/hostname
HOSTNAME

※ ホスト名を記述して保存終了（ HOSTNAME は例です ）

# nano /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 HOSTNAME.localdomain HOSTNAME

※ 上記を記述して保存終了
```
◆ ネット環境の設定
```
● ネットワークの確認
# ip link

● DHCPクライアントの有効化
# systemctl enable dhcpcd@end0.service

※例は『 end0 』で、前述の『 ip link 』で表示されたご自身の有線 LAN に読み替えて下さい

● Systemd サービスの有効化（遠隔操作しない場合は次の root パスワードの設定に進んで下さい）
# systemctl enable systemd-networkd.service
# systemctl enable systemd-resolved.service

● SSH サービスの有効化（遠隔操作しない場合は次の root パスワードの設定に進んで下さい）
$ systemctl enable sshd.service

● SSH の設定（遠隔操作しない場合は次の root パスワードの設定に進んで下さい）
$ sudo nano /etc/ssh/sshd_config

※設定を有効化するために、下記の項目の先頭の # を外します

ポートの設定
Port 22

使用する鍵
HostKey /etc/ssh/ssh_host_ed25519_key

ログインに鍵を使用
PubkeyAuthentication yes

※一旦これで保存終了します
```
◆ root パスワードの設定
```
# passwd
New password:
Retype new password:
```
◆ config.txt の設定
```
# nano /boot/config.txt

※一番下に追記（ usb 接続の場合は nvme を usb に読み替えて下さい）
[all]
dtparam=nvme

※ RTC用バッテリーを接続している場合は以下も記述して下さい
#### Enabling battery charging ####  
dtparam=rtc_bbat_vchg=3000000
```

◆ cmdline.txt の設定
```
# nano /boot/cmdline.txt

※下記のように変更します（usb 接続の場合は nvme0n1p2 を sda2 等に読み替えて下さい）
#root=/dev/mmcblk0p2 rw rootwait console=serial0,115200 console=tty1 fsck.repair=yes
root=/dev/nvme0n1p2 rw rootwait console=serial0,115200 console=tty1 fsck.repair=yes
```

◆ chroot を抜けて再起動
```
# exit
# shutdown -h now
```

◆ MicroSD カードを抜いて再度起動

◆ root でログイン
```
login:root
password:パスワードを入力
```

◆ アップデートの実行
```
# pacman -Syu

※上記のアップデートに失敗した時は下記を試してください
```

◆ pacman-key の初期化（アップデートに**失敗した場合**）
```
# pacman-key --init
# pacman-key --populate archlinuxarm
# pacman -Syu
```

◆ ユーザーを追加・パスワード設定
```
# useradd -m -s /bin/bash USERNAME
# passwd USERNAME
New password:
Retype new password:

※ USERNAME は例です（以下同文）
```

◆ ユーザーに sudo 権限を与える
```
# EDITOR=nano visudo

※一番下に追記します
※なお、先頭に # を付けると、その行はすべてがコメント扱いになります

#### My Setings ####
USERNAME ALL=(ALL) ALL
```

◆ 再起動してユーザーとしてログイン
```
# exit

login: NSERNAME
password:パスワードの入力
```

◆ sudo 権限の確認
```
$ sudo pacman -Syu

※一番最初に色々文言が出ますが、エラーでなければパスワード入力を求めて来ます
※パスワード入力後もエラーが出なければ成功です
```

◆ SSH 設定の続き（遠隔操作をしない場合は、上記で**作業終了です**）
```
● SSH サービスの設定ファイルに変更を加える（接続先） ArchLinux
$ sudo nano /etc/ssh/sshd_config

※以下の内容を変更・追記

root によるログインを拒否
#PermitRootLogin prohibit-password の直下に追記
PermitRootLogin no

ログインの試行回数
#MaxAuthTries 6    ->    MaxAuthTries 4

空のパスワードによるログインを拒否
PermitEmptyPasswords no
```

◆ SSH 接続
※既に接続元（ 例は Windows ）で公開・秘密鍵を作っているものとします
※インストールしたてで接続先（ Raspberry Pi5 ）に .ssh フォルダが無いので、下記のコマンドを Windows のターミナルから入力
```
PS C:\Users\username> cd .ssh
PS C:\Users\username> type id_ed25519.pub | ssh USERNAME@HOSTNAME "mkdir /home/USERNAME/.ssh; cat >> /home/USERNAME/.ssh/authorized_keys"

Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes と入力してリターンキーを押します
なお、 y では通りません

※パスワードの入力を求められますが、この時点では入力するパスワードは『接続先ユーザーのパスワード』です

● Raspberry Pi5 に鍵が登録されたか確認します
$ cd .ssh
$ ls
authorized_keys

※上記が表示されたら鍵の登録は成功しています
※以後、SSH で遠隔操作する時に入力するパスワードは『鍵認証用のパスワード』になります

● 鍵以外ではログインできないようにします
※ これを設定しないと、最終的に普通のパスワードでのログインが出来てしまいます

$ sudo nano /etc/ssh/sshd_config

以下の場所の下に、追記をして通常のパスワードによる接続を拒否します
#PasswordAuthentication yes
PasswordAuthentication no

保存終了します

● sshd のサービスを再起動させます
$ systemctl restart sshd.service
```

これで終了です
公開・秘密鍵の作成方法（ Windows ）やファイアウォールの設定は、機会があれば別の項目を作る予定です（必ずやるとは言ってない）
(/・ω・)/ ｺﾛｺﾛｺﾛ ＝〇