TL;DR
Raspi4の入手
日本ではまだ技適が取れていないので買えませんが、世界的にはもう販売されているので輸入すれば入手可能です。
技適がないと対象の機器から電波を飛ばすのが違法なのであって、電波を飛ばさない限りは合法です。
輸入して使う際は、Wi-FiとBluetoothをオフにし、市販のWi-Fiアダプタ等を使いましょう。
国際便になるので送料がちょっといきますが、関連する諸々を買えばそこまでの金額ではありません。
参考までに、私は以下のサイトから購入し輸入しました。日本語が使えるので楽です。
* Banggood(https://jp.banggood.com/)
購入が必要な物
- Raspberry Pi 4 Model B
- 当たり前だよなぁ?
- USB TypeCケーブル(5V 3A対応)
- 地味にハマりどころです。通常のUSB TypeCでの給電では電力がたりず正常に動作しません(データ破損とかします)。
- ケーブルが対応しててもポートが対応していない可能性が高いのでAC接続の物を買ったほうがいいと思います。
- 国内だとあまり流行っていないので入手が面倒なので、同時に輸入推奨です。(Nintendo SwitchのAC接続とかならちゃんと動きます)
- MicroHDMI-HDMIケーブル
- 地味に入手が面倒なので同時に輸入したほうが良いと思います。
- 何らかのケース
- 無くてもなんとかなりますが、RasberryPi3+よりも温まるので冷却手段は必要です。
- MicroSDカード
- 何でもいいですが早ければ早いほどシステム性能も上がります。
- 現状のボトルネックなので一番いいのを買ったほうがいいです。
はじめに
EEPROMの修復
現状のRasberryPI4は結構な確率でEEPROMが破損しており、そもそも起動できません。
SDカードにブートレコードを作成し、Raspiから提供されているちゃんと動くEEPROMを入手する必要があります。
fdiskとかで書けばちゃんと動きますが、初期不良の可能性もあり面倒なので、RaspbianをSDカードに焼いたほうが楽だと思います。
どれでもいいのでダウンロードして、以下のソフトで書き込みます。Desktopありバージョンのほうがやってる感は出ますが、イメージのダウンロードが死ぬほど遅いので注意ください。
わかる人は勝手にdd if ofしてください。
EEPROMの配置
Raspbianを書き込んだら、SDカードのBootパーティションにちゃんと動く方のEEPROMを配置します。
https://static.raspberrypi.org/files/rpi-boot-eeprom-recovery-2019-09-10.zip
* pieeprom.bin
* recovery.bin
EEPROMの更新
SDカードの準備が終わったら、SDカードを差し込みRaspi4を起動します。給電が始まると勝手に動き始めてしまうので、最後にUSB typeCケーブルを接続します。
正常に動作すると、画面になにも表示されず、赤いランプ(給電ランプ)の隣にある、緑のランプが点滅しはじめます。
最低でも10秒くらい待ってUSB TypeCケーブルを取り外します。
動作確認
SDカードを再度編集し、先程配置した「pieeprom.bin」「recovery.bin」のみを削除し、再度SDカードを入れて電源を投入します。
正常に処理が行われていれば、Raspbianが起動されます。
ArchLinuxの用意
OSの入手
以下のURLからダウンロード可能です。
今回はRaspi4なので、以下のファイルをダウンロードします。
- ArchLinuxARM-rpi-4-latest.tar.gz
SDカードへの書き込み
今回はfdiskで書き込みます。理論上はRaspbianの中身置き換えで行けると思いますがやったことはありません。
まずはOSで認識しているSDカードのデバイスにfdiskで操作をします。
名前はudevくんの気分次第なので、頑張って探してください。
fdiskの操作はroot権限が必要です。
fdisk /dev/sdX
以下のようなパーティションを作成します。
/(root) | ||
---|---|---|
- boot | 128M | FAT32 |
- system | 残り全て | ext4 |
具体的な操作は以下のとおりです。
# fdisk /dev/sda
コマンド (m でヘルプ): o (既存のパーティションの削除)
新しい DOS ディスクラベルを作成しました。識別子は 0x51331ac8 です。
コマンド (m でヘルプ): n (新規パーティションの作成)
パーティションタイプ
p 基本パーティション (0 プライマリ, 0 拡張, 4 空き)
e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p (基本パーティションの作成)
パーティション番号 (1-4, 既定値 1): (1つめのパーティションの作成)
最初のセクタ (2048-493895679, 既定値 2048): (パーティションの開始セクタ(先頭))
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P}
(2048-493895679, 既定値 493895679): +128M (パーティションの終了セクタ 128MB後)
新しいパーティション 1 をタイプ Linux、サイズ 128 MiB で作成しました。
コマンド (m でヘルプ): t (パーティションタイプの変更)
パーティション 1 を選択
16 進数コード (L で利用可能なコードを一覧表示します): c (FAT32に変更)
パーティションのタイプを 'Linux' から 'W95 FAT32 (LBA)' に変更しました。
コマンド (m でヘルプ): n (新規パーティションの作成)
パーティションタイプ
p 基本パーティション (1 プライマリ, 0 拡張, 3 空き)
e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p (基本パーティションの作成)
パーティション番号 (2-4, 既定値 2): (2つめのパーティションの作成)
最初のセクタ (264192-493895679, 既定値 264192): (パーティションの開始セクタ(先頭))
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P}
(264192-493895679, 既定値 493895679): (パーティションの終了セクタ(終端))
新しいパーティション 2 をタイプ Linux、サイズ 235.4 GiB で作成しました。
コマンド (m でヘルプ): w (ディスクに書き込み)
パーティション情報が変更されました。
ディスクを同期しています。
パーティションの書き込み後は、実際にパーティションをフォーマットします。
実行後はそのまま使えるはずですが、私の環境ではうまく動かなかったので、SDカードを一旦取り外し、再度差し込みパーティションが意図したとおり作られたか確認しました。
mkfs.vfat /dev/sda1
mkfs.ext4 /dev/sda2
フォーマットが終わったら、パーティションをOS上にマウントします。
mkdir {boot,root}
mount /dev/sda1 boot
mount /dev/sda2 root
実際にファイル群を配置します。
# ls
ArchLinuxARM-rpi-4-latest.tar.gz boot root
bsdtar -xpf ArchLinuxARM-rpi-4-latest.tar.gz -C root
sync
bootパーティション用のファイルもrootパーティションに展開されるため、移動させます。
FAT32で所有者を変更しようとしたエラーが出ますが、FAT32には所有権などという概念はないので無視します。
mv root/boot/* boot
マウントを解除し、SDカードをRasberryPIに刺し起動します。
私はめちゃくちゃハマったので、書き込みの完了後PCにSDカードを再挿入して、ちゃんとデータが書き込まれているか確認したほうが良いと思います。
環境のせいかパーティションテーブルが壊れる事が多かったです。
umount root boot
動作確認
うまく動作していれば差し込むとコンソールの画面が起動されます。
(systemd-udevが反応しまくって結構うざいです)
alarm/alarmまたは、root/rootでログインできるため、ログインします。
インストール直後の状態
インストール直後では以下のようにほどんど何も動いておらず、スッキリした環境を楽しめます。
# systemctl status
● alarmpi
State: running
Jobs: 0 queued
Failed: 0 units
Since: Thu 1970-01-01 00:00:05 UTC; 49 years 9 months ago
CGroup: /
├─user.slice
│ └─user-0.slice
│ ├─user@0.service
│ │ └─init.scope
│ │ ├─6700 /usr/lib/systemd/systemd --user
│ │ └─6701 (sd-pam)
│ └─session-1.scope
│ ├─ 297 login -- root
│ ├─ 6706 -bash
│ └─16256 gpg-agent --homedir /etc/pacman.d/gnupg --use-standard-socket --daemon
├─init.scope
│ └─1 /sbin/init
└─system.slice
├─lvm2-lvmetad.service
│ └─224 /usr/bin/lvmetad -f
├─systemd-timesyncd.service
│ └─289 /usr/lib/systemd/systemd-timesyncd
├─dbus.service
│ └─293 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
├─systemd-logind.service
│ └─298 /usr/lib/systemd/systemd-logind
├─systemd-resolved.service
│ └─288 /usr/lib/systemd/systemd-resolved
├─systemd-udevd.service
│ └─234 /usr/lib/systemd/systemd-udevd
├─systemd-journald.service
│ └─233 /usr/lib/systemd/systemd-journald
├─haveged.service
│ └─232 /usr/sbin/haveged -w 1024 -v 1 --Foreground
└─systemd-networkd.service
└─238 /usr/lib/systemd/systemd-networkd
pacman keyringの更新
pacmanを使えるようにするため、pacman-keyringを初期化します。
pacman-key --init
pacman-key --populate archlinuxarm
初期状態ではvimが入っておらずつらいので、vimをインストールします。
pacman -S vim-minimal
ついでに諸々のパッケージを更新します。
pacman -Syyu
初期状態ではNTPも動作していないので、NTPサービスを動作させます。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
timedatectl set-ntp true
また、初期状態ではロケールの設定がなく、一部のコマンドでロケール情報が入手できずバグります。
明らかにロケール情報がないほうが異常事態なので、おとなしく作ります。
# vim /etc/locale.gen
en_US.UTF-8 (←コメントアウト)
ja_JP.UTF-8 (←コメントアウト)
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
sshでつなげるようにする
デフォルトではopensshもインストールされていないため、opensshを入れSSH接続できるようにします。
pacman -S openssh
systemctl start sshd.service
systemctl enable sshd.service
人間向けにする
※2019/11/12追記※
現状まともにGUIはうごかないので、GUIインストールはやめといたほうが良いと思います。