Skip to content

Instantly share code, notes, and snippets.

@YaSuenag
Last active September 16, 2023 07:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YaSuenag/245d9dde686602ad883b2682c3484913 to your computer and use it in GitHub Desktop.
Save YaSuenag/245d9dde686602ad883b2682c3484913 to your computer and use it in GitHub Desktop.
ヘッドレスでのRaspberry Pi 4へのLinuxインストール

Raspberry Pi 4 をコンソール(ディスプレイ、キーボードなど)につながず、USB OTG でシリアル接続できる環境に仕上げる方法

前提条件

  • Windows 11 で、最新の WSL 2(ストア版)がインストールされていること
  • Ubuntu 22.04 が WSL 2 でインストールされていること
  • WSL 2 の systemd が設定済みであること https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/
  • systemd-container と qemu-user-static がインストール済みであること
  • Raspberry Pi 4 と USB OTG でシリアル接続可能であること
    • 給電ポート(Type-C)と Windows 機を直結できる
    • シリアル通信プログラムがある( SimpleCom など)

Windows で対象ディスクを WSL 2 へ晒す

PS > GET-CimInstance -query "SELECT * from Win32_DiskDrive"

DeviceID           Caption                             Partitions Size         Model
--------           -------                             ---------- ----         -----
\\.\PHYSICALDRIVE0 SanDisk SDSSDA240G                  1          240054796800 SanDisk SDSSDA240G
\\.\PHYSICALDRIVE1 Generic MassStorageClass USB Device 0                       Generic MassStorageClass USB Device
\\.\PHYSICALDRIVE2 External M.2 NVME SCSI Disk Device  2          128034708480 External M.2 NVME SCSI Disk Device


PS > wsl --mount \\.\PHYSICALDRIVE2 --bare
この操作を正しく終了しました。

WSL 2 で ISO を書き込む

$ lsblk
<ディスクを確認する>
Raspberry Pi OS / Ubuntu の場合
$ sudo dd if=<ISO> of=/dev/<ディスク> bs=4M status=progress
Fedora の場合
$ xz -dc <ダウンロードイメージ> | sudo dd of=/dev/<ディスク> bs=4M status=progress

WSL 2 での事前設定

Raspberry Pi OS / Ubuntu

/ を WSL 2 でマウントした状態で以下の作業を実施する

cmdline.txt への追記

modules-load=dwc2,g_serial

ttyGS0 の有効化

$ sudo systemd-nspawn -D <Raspberry Pi の /> /bin/bash
# systemctl enable getty@ttyGS0.service

dwc2 の有効化

config.txt で dtoverlay=dwc2 が設定されている必要があるが、これは Ubuntu 22.04 ではデフォルトで有効化されている

Fedora

PV / LV の拡張

LVM パーティションサイズを広げてから PV、LV を最大限まで拡張する

$ sudo cfdisk /dev/sdd
$ sudo pvresize /dev/sdd3
$ sudo lvextend -l 100%FREE /dev/fedora/root

マウント

$ sudo mount /dev/fedora/root <Raspberry Pi の />

上記のほかに /boot もマウントする。 /boot は UUID を確認してマウントする。

$ cat mnt/etc/fstab
< /boot の UUID を確認する >
$ sudo mount UUID=<UUID> <Raspberry Pi の />/boot

パーティション拡張

$ sudo xfs_growfs /dev/fedora/root

SELinux の無効化

<Raspberry Pi の />/etc/selinux/configSELINUXdisabled にする

シリアルコンソールの有効化

$ sudo systemd-nspawn -D <Raspberry Pi の />

# systemctl enable getty@ttyGS0.service
# grubby --update-kernel=ALL --args="console=tty0 console=ttyGS0 modules-load=dwc2,g_serial"

なお、Ubuntu のときに設定した dtoverlay はデフォルトの upstream-pi4 でも問題なく動いた。

WSL 2 でのディスクアンマウント

PS > wsl --unmount \\.\PHYSICALDRIVE2
この操作を正しく終了しました。

Raspberry Pi へのログイン

Windows 機とシリアル接続して以下の作業を実施する

Ubuntu の場合

ユーザー名:ubuntu / パスワード:ubuntu

WiFi 設定

/etc/netplan/99-wifi.yaml を以下の内容で新規作成する

network:
  version: 2
  wifis:
    wlan0:
      dhcp4: true
      access-points:
        <SSID>:
          hidden: true
          password: <パスフレーズ>

設定を反映する

$ sudo netplan apply
Fedora の場合

コンソールをつなぐとシリアルコンソールでも初期設定画面が上がっているため、root パスワードとタイムゾーンを設定する。その後、以下の設定を行う。

WiFi

nmcli 経由で NetworkManager を使う設定をする

# nmcli c add type wifi con-name <接続名> ifname wlan0 ssid <SSID>
# nmcli con modify <接続名> wifi-sec.key-mgmt wpa-psk
# nmcli con modify <接続名> wifi-sec.psk <パスフレーズ>
# nmcli con up <接続名>

上記で再起動時にも wlan0 は up するはず。確認する場合は nmcli con edit <接続名> で入り、 print connection.autoconnect して yes になっていることを確認する。

xterm-resize のインストール

# dnf install xterm-resize
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment