LoginSignup
6
4

More than 3 years have passed since last update.

Raspi4でArchLinuxをインストールして使う

Last updated at Posted at 2019-10-11

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インストールはやめといたほうが良いと思います。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4