チラシ裏日記上等!!新館

Webアプリケーションエンジニアの雑記帳。映画とかアニメとかの記事も書きます。

Raspberry Pi 4 に ArchLinuxをインストールしてXfceのデスクトップ環境を構築する

先日Raspberry Pi 4 を手に入れました。Raspberry Pi 4はメモリやプロセッサがだいぶ強化されてちょっとしたPC並には使えるという話だったのでIoT用途ではなくデスクトップPC用途で整えてみようと思います。

普通にRaspbianを入れても良かったのですが、過去のRaspberry Pi 3にインストールしたとき妙にもっさりしていたり不要なオフィススイートが入っていたりして厄介だったので、今回はかねてより気になっていたArchLinuxを入れることにします。デスクトップ環境もXfceにして軽いLinuxデスクトップを目指します。

ArchLinux

ArchLinuxのインストールは公式のページに書いてあるのであまり書くことはないのですが、手順が書いてあっても割と自分は苦戦したのでやった過程を書いていきたいと思います。

SDカードのフォーマット

SDカードのフォーマットを行います。

まずは公式のページに書かれているとおりfdiskでパーティションを分割していきます。この作業はUbuntuの上で行いました。

この作業は公式のページで次のように書かれています。

At the fdisk prompt, delete old partitions and create a new one:

Type o. This will clear out any partitions on the drive.

Type p to list partitions. There should be no partitions left.

Type n, then p for primary, 1 for the first partition on the drive, press ENTER to accept the default first sector, then type +100M for the last sector.

Type t, then c to set the first partition to type W95 FAT32 (LBA).

Type n, then p for primary, 2 for the second partition on the drive, and then press ENTER twice to accept the default first and last sector.

Write the partition table and exit by typing w.

コマンドのログは次のようになります。

$ sudo fdisk /dev/sdd
 
 fdisk (util-linux 2.31.1) へようこそ。
 ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
 書き込みコマンドを使用する際は、注意して実行してください。 
 
 [コマンド (m でヘルプ): o
 新しい DOS ディスクラベルを作成しました。識別子は 0xe62439f1 です。
 
 コマンド (m でヘルプ): p
 ディスク /dev/sdd1: 119.2 GiB, 128026935296 バイト, 250052608 セクタ
 単位: セクタ (1 * 512 = 512 バイト)
 セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
 I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
 ディスクラベルのタイプ: dos
 ディスク識別子: 0xe62439f1
 
 コマンド (m でヘルプ): n
 パーティションタイプ
    p   基本パーティション (0 プライマリ, 0 拡張, 4 空き)
    e   拡張領域 (論理パーティションが入ります)
 選択 (既定値 p): p
 パーティション番号 (1-4, 既定値 1): 1
 最初のセクタ (2048-250052607, 既定値 2048): +100M
 範囲外の値です。
 最初のセクタ (2048-250052607, 既定値 2048):
 最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-250052607, 既定値 250052607): +100M
 
 新しいパーティション 1 をタイプ Linux、サイズ 100 MiB で作成しました。
 
 コマンド (m でヘルプ): t
 パーティション 1 を選択
 16 進数コード (L で利用可能なコードを一覧表示します): c
 パーティションのタイプを 'Linux' から 'W95 FAT32 (LBA)' に変更しました。
 
 コマンド (m でヘルプ): n
 パーティションタイプ
    p   基本パーティション (1 プライマリ, 0 拡張, 3 空き)
    e   拡張領域 (論理パーティションが入ります)
 選択 (既定値 p): p
 パーティション番号 (2-4, 既定値 2): 2
 最初のセクタ (206848-250052607, 既定値 206848):
 最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (206848-250052607, 既定値 250052607):
 
 新しいパーティション 2 をタイプ Linux、サイズ 119.1 GiB で作成しました。
 
 コマンド (m でヘルプ): w
 パーティション情報が変更されました。
 
 The kernel still uses the old partitions. The new table will be used at the next reboot.
 ディスクを同期しています。

ここで気をつけるのは、SDカードのデバイスファイル名を間違わないことです。自分の場合は /dev/sdd でした。これは環境によって異なるので要注意です。さらにパーティションを分割することで /dev/sdd1/dev/sdd2 が生まれます。デバイスファイル名に数字がつくようです。

その後mkfsコマンドでフォーマットしていきます。

その時のログが次のようになります。

$ sudo mkfs.vfat /dev/sdd1
 mkfs.fat 4.1 (2017-01-24)
$ sudo mount /dev/sdd1 boot                                                                                                                                  
$  mkfs.ext4 /dev/sdd2
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 31234816 4k blocks and 7815168 inodes
Filesystem UUID: 77f7d64f-d82d-4fab-b6ec-213f71df84da
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

$ mkdir root      
$ sudo mount /dev/sdd2 root  

/dev/sdd1 をVFATに /dev/sdd2ext4にフォーマットしています。フォーマットしたパーティションをそれぞれ dev/sdd1bootdev/sdd2root にマウントしています。これはその後ArchLinuxのインストールに使用します。

ArchLinuxのインストール

ArchLinuxのインストールを行います。この作業はrootユーザで行います。あと公式の手順道理 bsdtar を使ってインストールするのが良いのでそれも忘れずにインストールする必要があります。

rootユーザになってbsdtarもインストールしたら次のようにコマンドを実行しインストールを行っていきます。

$ wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-4-latest.tar.gz
$ bsdtar -xpf ArchLinuxARM-rpi-4-latest.tar.gz -C root
$ sync

これで root ディレクトリにマウントしている /dev/sdd2 にインストールされます。その後インストールされたファイル群の中からbootのために必要なファイルを次のコマンドでコピーします。

$ mv root/boot/* boot

これでSDカードへのファイルのインストールは完了しました。あとは本体にSDカードを刺して電源を入れて無事ログインを求められれば完了です。

ログインはデフォルトでは rootroot でログインでき、 alarmalarm でログインできます。

ログインできたらrootユーザでArchLinuxのパッケージマネージャの設定を次のコマンドで設定します。

$ pacman-key --init
$ pacman-key --populate archlinuxarm

これでArchLinuxのインストールは完了です。

Xfce

次にデスクトップ環境を構築していきます。上のようにArchLinuxをインストールすると必要最低限の動作はしますが、デスクトップ環境は特に何もない状態になります。今回はXfceをインストールしていきます。Xfceは動作の軽いデスクトップ環境として知られているので、リソースがそれほど多くないRaspberryPiにはうってつけです。

X関連パッケージのインストール

Xfceを動かすにはXサーバーがインストールされている必要があるのでpacmanで関連パッケージをインストールします。

$ pacman -S xorg-server xorg-server-utils xorg-xinit
$ pacman -S mesa

ドライバのインストール

次にディスプレイドライバをインストールします。Raspberry Piでは xf86-video-fbdev を使用します。

$ pacman -S xf86-video-fbdev

ここまでで問題なければ startx コマンドでX Window Systemが動くはずです。

Xfceのインストール

ここまでできたら後はXfceをインストールするだけです。次のコマンドでXfceをインストールします。

$ pacman -S xfce4

インストールが完了したら次のコマンドを実行するとXfceのデスクトップ環境が起動します。

$ startxfce4

LightDM

デスクトップ環境が構築され汎用的なパーソナル・コンピューター感が出てきましたが、このままだと startxfce4 コマンドを .bashrc などに書かないとデスクトップ環境が実行されません。ディスプレイマネージャをインストールしデーモンとして起動時に実行させ、シェルでのログインではなくグラフィカルな画面でログインできるようにしましょう。今回はLigthDMをインストールします。

LightDMのインストール

LightDMもpacmanでインストールできます。次のコマンドでインストールします。

$ pacman -S lightdm

Greeterのインストール

Greeterは起動時にログインを求めるGUIです。これもpacmandでインストールします。

$ pacman -S lightdm-gtk2-greeter

LightDMを有効にする

LightDMのデーモンをsystemctlで有効にし、起動時にLightDMが実行されるようにします。

$ systemctl enable lightdm.service

これで起動時にGUIでログインできるようになります。

ここまでできると必要最低限のLinuxデスクトップが整います。

結果

最終的にこんな感じでLinuxデスクトップが仕上がりました。

f:id:Tomato-360:20191215004847j:plain

かなりいろいろなものがむき出しです。普段自分が使っているモニタを使用したかったのですが、モニタの相性が悪かったためかうまく映らず以前使用していたRaspberryPiようのモニタを使用しています。この画面でpacmanでいろいろインストールしていたのですが、正直な話かなり辛いです。そのうちもう少しまともなモニタを導入したいところです。

まだデスクトップ環境を整えただけでほとんど何もできないので、少しずつ整えていって遊べるように仕上げていきたいところです。

参考資料

archlinuxarm.org

wiki.archlinux.jp

note.kurodigi.com

wiki.archlinux.jp

wiki.archlinux.jp

今回ArchLinuxのWikiには結構助けられたのですが、ArchLinuxは他のWikiの追随を許さないぐらい日本語での情報が整っているのでとても助かりました。