[Linux] Arch Linuxを入れる方法

# 前置き
Arch Linux公式のインストール手順は日本語でWikiに書いてあるので、そちらも読むことをおすすめします。

<sub>[英語版](https://wiki.archlinux.org/title/Installation_guide)</sub>

https://wiki.archlinux.jp/index.php/インストールガイド

:::note warn
archinstallというもので簡単にインストールできるらしいのですが一回は手動でやった方が後々のトラブルシューティングなどで知識が役立ちます。
<sub>自慢もできます</sub>
:::

<sub>~~BIOSとUEFIどっちもと色々な場合を想定して書いたからめっちゃ時間かかった~~</sub>

## そもそも[Arch Linux](https://archlinux.org)とは
UbuntuやLinux Mintなどの他のLinuxディストロとは違い、自由度が高く、最初はほぼ何もインストールされていません。つまり、好きなデスクトップ環境などを選んでインストールすることができます。色々自分好みにカスタマイズできるので、よく[r/unixporn](https://www.reddit.com/r/unixporn/)で使われている印象があります。

### 最低条件

- CPU: [x64](https://en.wikipedia.org/wiki/X86-64) (x86_64, amd64)
- RAM: 512 MiB<sub>~537MB</sub>(インストールにはそれ以上)
- 容量: 2 GiB <sub>~2.2GB</sub>
- インターネット接続 (インストール時)

### インストールしやすい環境

- マザーボード: UEFI
- ディスク: GPTレイアウト
- インターネット: 有線接続
- キーボード: Bluetooth以外のもの
- 容量: 128GBとか安心できるくらい

:::note warn
インストール時にパーティションの操作をミスるとデータが消える可能性があります。
安全に試してみたい人は[VirtualBox](https://www.virtualbox.org/)などの仮想環境を使うといいです。
:::

# Windowsとデュアルブートする時の下準備
デュアルブートしなかったり新しいディスクに入れる場合は[Arch LinuxのISOファイルをダウンロードする](#arch-linuxのisoファイルをダウンロードする)まで飛んでください

Windowsアイコンを右クリックしてディスクの管理を開いてください。
## MBRからGPTへ変換する
UEFIじゃない場合はどっちでもいいです。

Arch Linuxを入れるドライブを選んでここを右クリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/16b16a83-04b8-1226-bf60-a2751bd41c8e.png)
そして`GPTディスクに変換`を選んでください
<sub>(すべてGPTディスクに変換してたから文字が正確かわからない)</sub>

## パーティションに空きを作る

今度はこっちを右クリックしてボリュームの縮小を選んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/41c8ca16-1a9e-ebaf-009b-77ea73ac3a00.png)
<sub>~~拡張の方は早いのに~~</sub>縮小領域の照会が長いです...

Arch Linuxで使う分MBで指定して縮小してください。
未割り当てが出たら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/0c28dcd4-0fd8-0880-e780-6fd61a048756.png)

## EFIシステムパーティションの位置を覚える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/2467bc55-7ecd-790b-ceaa-be9627972807.png)

普通ならディスク０にあると思います。`/dev/sda3`みたいな形式[^disk_order]で覚えてください。

# Arch LinuxのISOファイルをダウンロードする

https://archlinux.org/download/

ここから何でもいいのでISOをダウンロードしてきます。

よくわからなければ下の方にあるJapanの中のどれかからダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/abfb0667-5fdb-d74c-b323-9f6569d6c191.png)

# 起動可能なUSBドライブを作成する

仮想環境を使う方は[インストールの準備](#インストールの準備)まで飛ばしてください。

[Rufus](https://rufus.ie/)(Windowsのみ)、[Balena Etcher](https://etcher.balena.io/)、[Ventoy](https://www.ventoy.net/en/index.html)などでArch LinuxのISOが起動できるUSBドライブを作成してください。

Ventoyで作る場合はこの記事を参考にしてください。

https://qiita.com/hayattgd/items/8aa6d7a134feec7dc3a1

# USBから起動する

ここは人によってやり方が違うと思いますが、基本的には起動時に`F1` `F2` `ESC` `Delete`などのキーを連打してBIOSに入ってUSBからブートします。
選択する画面が出たら一番上の項目を選択して`Enter`を押してしばらく待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/c3cd3d70-0840-6ac8-ae78-6751a085f9f2.png)

この画面になれば起動成功です。

# インストールの準備

ここからすることは一時的な設定です。再起動したらリセットされます。

## 一時的な設定をする

英語キーボードのレイアウトが分かってて、文字も見えて、有線接続という場合は[ファームウェアを確認する](#ファームウェアを確認する)まで飛べます。

まずはキーボードレイアウトを日本語にします。
```
root@archiso ~ # loadkeys jp106
```

:::note info
WQHDや4Kモニターを使っていて字が小さい場合はフォントを変えます。
```
root@archiso ~ # setfont ter-132n
```
戻す場合は`setfont`だけ打ってください
:::


次にインターネットが接続されているか確かめます。
```
root@archiso ~ # ping archlinux.org
```
途中で`Ctrl + C`で中断してください。

```
ping: archlinux.org: Temporary failure in name resolution
```
これが出た場合は接続できていません。
有線接続の方は[パーティション分割](#パーティション分割)まで飛ばしてください

### Wifiをつなげる

`iwctl`を使ってWifiネットワークに接続します。
```
root@archiso ~ # iwctl
```
こういう風に`root@archiso ~ # `の部分が変われば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/f5a776fd-e41b-c758-4d02-daa48887c6b3.png)

ここでは`Tab`キー(コマンド補完機能)を使ってコマンドを省略します
```
[iwd]# station
```
ここまで入れて二回Tabを押してください。
出てきたものでlist以外のものを入れてください。
基本的には`wlan0`になると思います。

```
[iwd]# station wlan0 connect
```
ここまで入れて二回Tabを押してください。
次はwifiの名前を入れてください。入れたら`Enter`を押して、求められた場合はパスワードを入れてください。すべて終わったら、一度戻ります。
```
[iwd]# exit
```
ちゃんとつながったか確かめるために`ping`を使います。

```
root@archiso ~ # ping archlinux.org
```
止めるには`Ctrl + C`で中断してください。

## ファームウェアを確認する

```
root@archiso ~ # cat /sys/firmware/efi/fw_platform_size
```
| 出力    | ファームウェア |
|:-------:|:-------------:|
| 64      |  x64 UEFI     |
| ~~32~~  |  ~~x32 UEFI~~ |
| それ以外 |   BIOS       |

これは覚えておいてください。あとで使います。

# パーティション分割

:::note warn
パーティション関連はミスったらデータが完全に消えます。気を付けてください。
:::

`fdisk -l`や`lsblk`を使ってどのドライブかを特定します。基本的にはWindowsのディスクの管理の順番と同じです。[^disk_order]

Linuxはドライブを`/dev/sda`のように、パーティションを`/dev/sda1`のように表記しています。
/dev/sd**a**(これの太字の部分)はa,b,c,d...のように変わっていき、/dev/sda**1**は1,2,3...で変わっていきます。[^disk_order]

`cfdisk`を使ってパーティションを分割します。`/dev/sda`は人によって変えてください。

```
root@archiso ~ # cfdisk /dev/sda
```

:::note info
新しいディスクを使った場合はメニューが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/66a774f6-1c65-9e14-000b-74fef510d032.png)
基本的には`gpt`を選択してください。
:::

さっきのファームウェアによってパーティションのレイアウトは変わります。

[UEFIの場合](#uefiの場合)
[BIOSの場合](#biosの場合)

### UEFIの場合
#### EFIシステムパーティションを作る
Windowsとデュアルブートする場合は[Linuxルートを作る](#linuxルートを作る)まで飛んでください。

`[New]`を押して、1Gに変えてください。
`[Type]`を押して、一番上のEFI Systemを選択してください。

#### Linuxルートを作る

下矢印キーを押して`Free space`に移動して、`[New]`を押してください。
ここの容量はArch Linuxで実際に使う容量になるので自由に決めてください。(スワップパーティション[^swap]を作る場合はその分を空けておいてください)
`[Type]`を選択して、Linux root(x86-64)に変えます。

次→[スワップパーティションを作る](#スワップパーティションを作る)

### BIOSの場合

#### Linuxファイルシステムを作る

下矢印キーを押して`Free space`に移動して、`[New]`を押してください。
ここの容量はArch Linuxで実際に使う容量になるので自由に決めてください。(スワップパーティション[^swap]を作る場合はその分を空けておいてください)
`[Type]`を選択して、Linux filesystemに変えます。

### スワップパーティションを作る

今のパソコンに入ってるメモリで足りてるなら作る必要はありません。[ディスクに書き込む](#ディスクに書き込む)まで飛ばしてください。

`[New]`を押して、スワップに使う分の容量を入力します。
`[Type]`にいって、`Linux swap`を選択してください。

### ディスクに書き込む

`[Write]`を押して、`yes`と打って`Enter`を押します。
`[Quit]`を選択して`cfdisk`を終わります。
```
Syncing disks.
root@archiso ~ # 
```
これが出てきたら成功です。

## パーティションを初期化(フォーマット)

自分のパーティションレイアウトに応じて`/dev/sda1`などを変えてください。
また、スワップパーティションやEFIシステムパーティションを作っていない場合はそこだけ実行しないでください。

:::note alert
/dev/sda1などをそのまま入力するとWindowsのCドライブや他のドライブが消えるかもしれません。しっかり考えてから入力してください。心配ならもう一度`cfdisk`を実行して確認しても構いません。上矢印キーを押せば出てくるはずです。
:::

```
root@archiso ~ # mkfs.ext4 /dev/sda2 (容量が多い方)
root@archiso ~ # mkfs.fat -F 32 /dev/sda1 (EFI Systemの方)
root@archiso ~ # mkswap /dev/sda3 (スワップパーティション)
```

## パーティションをマウント

マウントしてディスクの中身にアクセスできるようにします。
ここでも`/dev/sda1`などを変えて、パーティションを作ってない場合はしなくていいです。

:::note info
Windowsとデュアルブートする場合は、EFI Systemの方を最初に覚えたEFIシステムパーティションにしてください。
それで`/mnt/boot`を`/mnt/boot/EFI`に変えてください。
:::


```
root@archiso ~ # mount /dev/sda2 /mnt (容量が多い方)
root@archiso ~ # mount --mkdir /dev/sda1 /mnt/boot (EFI Systemの方)
root@archiso ~ # swapon /dev/sda3 (スワップパーティション)
```

# パッケージをインストール

インストール元のミラーを変えたければ変えてください。これはしてもしなくてもいいです。
```
root@archiso ~ # nano /etc/pacman.d/mirrorlist
```

マウントしたパーティションにLinuxを入れます。
```
root@archiso ~ # pacstrap -K /mnt base linux linux-firmware
```

まあまあ長いです。

# システムを構成する
まず`fstab`ファイルを生成します。
```
root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab
```
インストールしたLinuxに入ります。
```
root@archiso ~ # arch-chroot /mnt
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/24c3433a-99c6-1754-f9b4-02a49558d974.png)
こんな風に変われば成功です。

使うパッケージをインストールします。
```
[root@archiso /]# pacman -S nano man less networkmanager ...
```
`...`の部分に使うものを入れてください(スペースで区切る)

- インテルのCPUを使っているなら`intel-ucode`
- AMDのCPUを使っているなら`amd-ucode`
- Wifiを使うなら`iwd`
必要なら他のものも入れてください。

:::note info
VirtualBoxはCPUの情報をそのまま渡してるっぽいのでホスト側がインテルならゲストもインテルになります。
:::

```
Enter a number (default=1):
```
というのが出たらそのまま`Enter`を押してください。
```
:: Proceed with installation? [Y/n] 
```
これが出たら`y`を入れてください。
そこまで長くはないはずです。

:::note info
`iwd`を入れた場合は有効化します。
```
[root@archiso /]# systemctl enable iwd
```
:::

タイムゾーンを変えます。
```
[root@archiso /]# ln -sf /usr/share/Asia/Tokyo /etc/localtime
[root@archiso /]# hwclock --systohc
```

ローカライズをします。
```
[root@archiso /]# nano /etc/locale.gen
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/db8c6de8-c205-d6a1-c40d-01ceffadad42.png)
こういう画面になったら成功です。
`Ctrl + F`を押して、`en_us`と入れてください。
そして、行の頭にある`#`を消してください。
また`Ctrl + F`を押して、今度は`ja`と入れてください。
`#ja_JP.UTF-8 UTF-8`と書いてあるところの`#`を消してください。
できたら`Ctrl + O`->`Enter`->`Ctrl + X`で終わります。

```
[root@archiso /]# locale-gen
[root@archiso /]# echo LANG=en_US.UTF-8 >> /etc/locale.conf
[root@archiso /]# echo KEYMAP=jp106 >> /etc/vconsole.conf
```
ホスト名を決めます。PCの名前みたいなものです。
```
[root@archiso /]# echo ホスト名 >> /etc/hostname
```
rootアカウントのパスワードを決めます。
```
[root@archiso /]# passwd
```
`New password:`と出たら、パスワードを入れてください。`Retype new password:`と出たらもう一度入れてください。`passwd: password updated successfully`と出たら成功です。

## ブートローダーをインストールする

:::note info
既に他のLinuxディストロなどによってGRUBがある場合は、そのLinuxでブートして`update-grub`を実行してください。
```
[root@archiso /]# exit
root@archiso ~ # reboot
```
これで再起動できます。
:::


ここでは[GRUB](https://wiki.archlinux.org/title/GRUB)を入れます。

まずパッケージの`GRUB`をインストールします。
```
[root@archiso /]# pacman -S grub
```

ここから分岐します。
[UEFIの場合](#uefiの場合-1)
[BIOSの場合](#biosの場合-1)

#### UEFIの場合

追加で`efibootmgr`をインストールします。
```
[root@archiso /]# pacman -S efibootmgr
```

EFIシステムパーティションがどこにマウントされているかを特定します。
```
[root@archiso /]# lsblk
```
**ESP**を`/boot`または`/boot/efi`、どちらか書かれていた方に置き換えてください。
```
[root@archiso /]# grub-install --efi-directory=ESP --bootloader-id=GRUB
```

#### BIOSの場合
`/dev/sda`を各自変えてください。
```
[root@archiso /]# grub-install --target=i386-pc /dev/sda
```
<sub>詳しい人向けに：`target=i386-pc`はどのアーキテクチャだとしても変えるべきではないと[Wikiに書いてありました。](https://wiki.archlinux.org/title/GRUB#:~:text=/dev/sdX-,where,is%20deliberately%20used%20regardless%20of%20your%20actual%20architecture)</sub>

### コンフィグファイルを生成する
:::note info
他のOSとデュアルブートする場合は`os-prober`をインストールします。
```
[root@archiso /]# pacman -S os-prober
```
:::

```
[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg
```

## 再起動！
```
[root@archiso /]# exit
root@archiso ~ # reboot
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/01988e83-43de-7670-0848-205e9ada38a6.png)

こういう選択する画面になれば成功です！
一番上の`Arch Linux`を選択して`Enter`を押してください。

:::note info
WindowsとデュアルブートしようとしたけどそのままWindowsが起動した場合はBIOSなどで起動順を変えてください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/f8bc9dba-07a1-48a8-ebc6-3be297c54a2a.png)
これがログイン画面です。
アカウントは今のところ`root`しかないので`root`でログインします。
<sub>ちなみに`hay-ArchVM`のところは`/etc/hostname`です。人によって違うってことです。</sub>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/3572be55-9a21-80e5-03c4-2a5c65f8ae8d.png)

# アカウントを追加する

アカウントを追加します。
```
# useradd ユーザー名 -G wheel
# passwd ユーザー名
```
そのユーザーのパスワードを決めてください。
そのユーザーからも管理者権限が必要なことができるように`sudo`をインストールします。
```
# pacman -S sudo
# EDITOR=nano visudo
```
`Ctrl + F`を押して、`wheel`と入れて`Enter`を押します。
```
# %wheel ALL=(ALL:ALL) ALL
```
という行の`#`を消してください。
`Ctrl + O`でセーブし、`Ctrl + X`でやめます。
ホームディレクトリを作成します。
```
# mkdir /home/ユーザー名
```
そのユーザーでログインするために一回抜けます。
```
# exit
```
今度は自分で決めたユーザー名とパスワードでログインしてください。
これでArch Linuxのインストールは終わりです。お疲れ様でした。


[^disk_order]: ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886798/6b292f50-8ce5-c44d-e80b-c1e2cae4c9a5.png)
ディスク０なら`/dev/sda`、ディスク１なら`/dev/sdb`のように、最後の文字がabc順に変わる。
その中で左から一番目は`/dev/sda1`、二番目は`/dev/sda2`のように、最後の数字が変わる。
例えばディスク１で左から2番目は`/dev/sdb2`
[^swap]: ディスクをメモリとして使うような場所