PONOS Advent Calendar 2020 の12日目の記事です。
昨日は@kenta-sanさんのVContainerという新しい選択肢 〜UnityのDIライブラリ〜でした。
はじめに
Arch Linuxとは
Arch LinuxはLinuxディストリビューションの1つです。
インストール直後の状態ではほぼ何も入っていない、硬派な作りになっています。
Arch Linuxのインストールは、メジャーなディストリビューションとは若干毛色が違い、インストールウィザード的なものがありません。
自分でコマンドを叩いて、ひとつずつ進めていく必要があります。
ざっくりこんな感じの手順です。
- USBメモリや光学ディスクでライブ環境を起動する
- ライブ環境上で、以下の操作を行う
- インストール先のディスクにパーティションを作る
- 必須パッケージをインストールする
-
chroot
でインストール先環境に入る - 詳細な設定を行う
- マシンを再起動し、インストール先ディスクから立ち上げる
素振りの意義
前述の通り、Arch Linuxのインストールはほぼ手作業です。
また、ファイルシステムやブートローダーなどの構成要素は、それぞれ複数の選択肢があり、ユーザーが選択する必要があります。
「何を基準に選ぶの?」と思うところですが、ArchWikiにめちゃくちゃ充実した情報が載っていますので、これを見て自分なりに各構成要素を理解し、選択していくことになります。
というわけで、何かと手間はかかりますが、Linuxシステムに対する理解が深まることは確かです!
私は、何年かおきにArch Linuxのインストールをしていて、これを「素振り」と呼んでいます。(インストールするだけで使わないので。)
進め方
基本的に、ArchWikiのインストールガイドの手順を順番に進めていきます。
特につまづくことが無さそうな項目については、記事中では触れずに進んでいきますが、実際には全手順をこなしていると思ってください。
以下、雑に引用されている場合はインストールガイド本編からの引用です。
0. 仮想マシンの支度
VirtualBoxで仮想マシンをこしらえます。
ちゃんと(OS)タイプに「Arch Linux(64-bit)」が用意されているので、これを使いましょう。
Arch Linux は 530 MiB 以上のメモリが搭載された x86_64 互換のマシンで動作します。基本的なインストールで使用するディスク容量は 2 GiB 以下です。
こう書かれているので、メモリは4096MB・仮想ハードディスクは可変サイズで10GiBに設定しました。
作成後に、設定を一部修正します。
「システム」-「マザーボード」から、「EFIを有効化」をオンにします。
これはマザーボードのファームウェアとして、EFIを使うように指定しています。
オフの場合は、代わりにBIOSが使われます。
BIOSはかなりレガシーなファームウェアであり、あえて2020年に選ぶものではないので、EFIを指定しました。
1. インストールの準備
ライブ環境の起動
今回はVirtualBoxを使っているので、ライブ環境のISOファイルをそのまま使って起動します。
自動的にrootでログインされて、プロンプトが表示されます。
インターネットへの接続
VirtualBoxのデフォルト設定(NAT)のままなら、すでにネット接続できているはずです。
適当なホストにPingできることを確認しておきます。
後でインターネット上のホストからパッケージを取得するので、ネット接続は必須です。
パーティション
インストール先ディスクのパーティションを作ります。
実機でデュアルブートする場合は、失敗すると既存OSが立ち上がらなくなったりするので、一番神経を使うところです。
fdisk -l
で、インストール先のデバイス名を確認します。
「/dev/sda」ですね。
インストールガイドには詳細が載っていないので、ここからはパーティショニングを参照しながら進めます。
GPTかMBRの選択
パーティションテーブルの形式が複数あるので、どれを使うか決めておく必要があります。
比較的新しいGPTと、レガシーなMBRの2つがメジャーな形式です。
あえて古い方を使う理由もないし、EFIとの親和性も考えて、GPTを使うことにします。
パーティショニング
gdisk
コマンドを使って、パーティションを作成していきます。(gdiskはfdiskのGPT版です。)
今回はディスクが1つだけなので、細かく分けずに必要なパーティションだけ作ります。
用途 | サイズ | ファイルシステム |
---|---|---|
EFIシステムパーティション | 512MiB | FAT32 |
/(ルート) | 残り全部 | ext4 |
スワップ | 512MiB | swap |
インストールガイドの例をそのまま採用して、こういう設計にします。 |
gdisk
は対話型のコマンドで、ここに操作内容を載せると長くなってしまうので、省略します。
パーティションのフォーマット
各パーティションを、適切なファイルシステムでフォーマットしていきます。
EFIシステムパーティション
EFI System Partition (ESP や EFISYS とも呼ばれます) は FAT32 でフォーマットされた物理パーティション (ディスクのメインのパーティションディスクで、LVM やソフトウェア RAID などとは異なります) でここから UEFI ファームウェアは UEFI ブートローダやアプリケーションを起動します。
EFIシステムパーティション
上記引用の通り、FAT32を使う仕様です。
# mkfs.fat -F32 /dev/sda1
←こんな感じでフォーマットします。
/(ルート)パーティション
ファイルシステムの指定は特にないので、何を使ってもOKです。
ファイルシステムのタイプ を見ると色々載っているので、気になるものを試してみてもいいかも。
今回はext4にしておきます。
# mkfs.ext4 /dev/sda2
スワップ領域
スワップはmkswap
コマンドで作成します。
# mkswap /dev/sda3
さらにスワップを有効にします。
# swapon /dev/sda3
ファイルシステムのマウント
作成したパーティションを /mnt 配下にマウントしていきます。
後ほどarch-chroot
を使って、ここをルートとして操作することになります。
なので、/(ルート)パーティションは /mnt に、EFIシステムパーティションは /mnt/efi にマウントします。
# mkdir /mnt/efi
# mount /dev/sda2 /mnt
# mount /dev/sda1 /mnt/efi
※ 初期状態では /mnt 以外のマウントポイントが存在しないので、適宜ディレクトリを作成します。
2. インストール
ミラーの選択
インストールされるパッケージは、 /etc/pacman.d/mirrorlist に定義されているミラーからダウンロードされます。
Arch Linuxのパッケージは、ミラーリストに書かれたサーバーから取得されます。
優先度はリストの順番通りなので、速いサーバーがリストの上位にくるように並べ替えておく必要があります。
手動で並べ替えてもいいんですが、せっかくなのでツールを使いましょう。
ライブ環境には Reflector というツールが同梱されているので、これを使います。
# reflector -country 'Japan' --sort rate -save /etc/pacman.d/mirrorlist
これで、日本のサーバーのみに絞り、レートが高い順にソートされた mirrorlist が生成され、上書きされます。
必須パッケージのインストール
pacstrap スクリプトを使用して base パッケージと Linux カーネル、一般的なハードウェアのためのファームウェアをインストールしてください:
今回は仮想マシンを使っているので、ファームウェアは除外します。
あと、何かと必要になるので Vim を入れておきます。
# pacstrap /mnt base linux vim
3. システムの設定
fstabの生成
# genfstab -U /mnt >> /mnt/etc/fstab
現在のマウント状況から、fstab
ファイルを生成します。
マウントし忘れがあったりすると、当然fstab
には書き込まれないので、ご注意ください。
(swapとか忘れがち。)
chroot
# arch-chroot /mnt
これで、/mnt直下が仮の /(ルート) として取り扱われます。
シェルから実行するコマンドも、/mnt配下のディレクトリから探索されるようになるので、ライブ環境にしか入っていないコマンドは使えなくなります。要注意。
ブートローダー
最後に、ブートローダーのインストールを行います。
ブートローダーのページに色々載っていますが、特にこだわりがないので GRUB を使います。
GRUB はBIOS・UEFI両方に対応したブートローダーで、インストール手順もそれぞれに分かれています。
今回はUEFIを使っているので、UEFIシステム向け手順を見ながら進めます。
GRUBのインストール
GRUBのインストールに必要なパッケージを入れます。
# pacman -S grub efibootmgr
いきなり登場しましたが、Arch Linuxでは pacman というパッケージマネージャを使います。
※ 先ほど chroot しているので、パッケージは /mnt 配下の然るべきディレクトリに入ります。
GRUBのインストールを行います。
# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=grub
GRUBの設定
※ 実はここの工程を飛ばして再起動してしまい、ちょっと苦労しました。後述します。
GRUB の設定ファイルを生成します。
# grub-mkconfig -o /boot/grub/grub.cfg
ファイルの中には、どのLinuxカーネルを使ってブートするか みたいな設定が書かれています。
デュアルブートする場合、この設定をいじってOSを選択できるようにします。
再起動
ここまでで、最低限必要な設定は終わりました。再起動してみます。
(おまけ) GRUBコンソールからLinuxを起動
GRUBのインストール後、設定ファイルの生成を忘れて再起動してしまいました。
そうすると、GRUBは起動するものの、OSが起動できなくなります。
実はGRUB自身にもコンソールがあり、コマンドを叩いてOSを起動することができます。
参考: 起動失敗してgrubプロンプト(grub >)が出た場合の対処
> set root=(hd0,gpt2)
> linux /boot/vmlinuz-linux root=/dev/sda2
> initrd /boot/initramfs-linux.img
> boot
1行目のset root=(hd0,gpt2)
で、1台目のHDDの2つ目のGPTパーティション をルートに指定しています。(/dev/sda2に相当)
この状態でls /boot
とかすると、ファイル名の確認くらいはできます。
そうやって調べたファイル名を、2・3行目で指定しています。
ミスのおかげで勉強になりました。✨
明日は@nissy_gpさんの記事です!