自分用Arch Linux インストールガイド

## はじめに
Arch Linuxを何度かインストールしてきて，自分なりのインストールの仕方が固まってきたので書き残しておきます。なにか気になることがあれば[ArchWiki](https://wiki.archlinux.jp)に多分書いてあると思うので見てみて下さい。
環境として
* UEFI対応
* NetworkManager
* WMはgnome
* imはFcitx5＋mozc
* NVIDIAのGPU
* 有線LANに接続
* 言語は英語，英語配列キーボード，日本語環境も入れる
を想定しています。多少違っても一部分を読み替えるだけで行けるはずです。
また，Arch Linuxをインストールしてみようと思う人はすでにUbuntuとか入れて触ったことがある人だと思うので，ブートUSBの作り方とかは適当に説明します。

そもそもArch Linuxって何？って方[ここ](https://wiki.archlinux.jp/index.php/Arch_Linux)や[ここ](https://wiki.archlinux.jp/index.php/Arch_%E3%81%A8%E4%BB%96%E3%81%AE%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%AF%94%E8%BC%83)を読んでみてください。

## インストールメディアの作成と起動
isoイメージをダウンロードします。物理マシンにインストールする場合はrufusなりddなりでUSBメモリに書き込みます。毎月1日に新しいイメージが公開されています。

USBをインストールしたいPCに挿して起動，BIOS(UEFI)からメディアを選択します。**セキュアブート等はOFFにしておきましょう。**

こんな感じのメニューが出てきますので一番上のInstallを選択します。ちなみにこのときにスピーカーから爆音でマリオのコインの音が鳴るので注意。
![Screenshot_archlinux_2024-01-17_12:56:21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662012/9277b97d-9fbc-cdb9-fdd1-700b28c0751f.png)


ちょっと待ってコマンドが打てるようになるまで待ちます。

## ディスクの設定
最初にインストールするディスクのパーティションを切ります。

UEFIの場合には最低でも2つに分ける必要があります。EFI用とルートディレクトリ用です。Swapはなくても動きますが作っておきましょう。

|番号|サイズ|説明|
|:--|:--|:--|
|0|~1GBくらい|EFI用ディレクトリ|
|1|自由|ルートディレクトリ|
|2|任意(必要ではない)|Swap用|

この3つ(2つ)に最低でも分ける必要があります。ほかにパーティションを分けたい場合にはご自由に。以下では/dev/sdaを上の3つに分けるものとします。環境に合わせて適宜読み替えて下さい。
それぞれの容量は，EFI用に1GB，Swap用に8GB，残りを/用にしています。

`fdisk -l`でディスク一覧からインストールするディスクを確認します。今回は例として`/dev/sda`にインストールしていきます。nvmeだったり仮想環境だとちょっと変わるので読み替えて下さい。当然ですがデータ消えるので消えて大丈夫なところを選びましょう。

```
# fdisk -l
Disk /dev/sda: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: SAMSUNG MZNTE256
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CD2965CA-75BB-4D61-B6C2-BC0E97884C7D


Disk /dev/sdb: 14.32 GiB, 15376318464 bytes, 30031872 sectors
Disk model:  SanDisk 3.2Gen1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x99a0587f

Device     Boot   Start     End Sectors  Size Id Type
/dev/sdb1  *         64 1755135 1755072  857M  0 Empty
/dev/sdb2       1755136 1785855   30720   15M ef EFI (FAT-12/16/32)


Disk /dev/loop0: 748.33 MiB, 784683008 bytes, 1532584 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
```

`gdisk`を使ってパーティションを切ります。[]の中が入力するところです。[]だけのときはそのまま`Enter`を押して下さい。
```
# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.9.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): [o]
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): [y]

Command (? for help): [n] //EFI
Partition number (1-128, default 1): []
First sector (34-500118158, default = 2048) or {+-}size{KMGTP}:[] 
Last sector (2048-500118158, default = 500117503) or {+-}size{KMGTP}: [+1G]
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): [ef00]
Changed type of partition to 'EFI system partition'

Command (? for help): [n] //root
Partition number (2-128, default 2): []
First sector (34-500118158, default = 2099200) or {+-}size{KMGTP}: []
Last sector (2099200-500118158, default = 500117503) or {+-}size{KMGTP}: [-8G]
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): []
Changed type of partition to 'Linux filesystem'

Command (? for help): [n] //swap
Partition number (3-128, default 3): []
First sector (34-500118158, default = 483342336) or {+-}size{KMGTP}: []
Last sector (483342336-500118158, default = 500117503) or {+-}size{KMGTP}: []
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): [8200]
Changed type of partition to 'Linux swap'

Command (? for help): [p] //確認
Disk /dev/sda: 500118192 sectors, 238.5 GiB
Model: SAMSUNG MZNTE256
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 6FF68645-A01E-4725-B42C-780AA657C45D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 500118158
Partitions will be aligned on 2048-sector boundaries
Total free space is 4062 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         2099199   1024.0 MiB  EF00  EFI system partition
   2         2099200       483340942   229.5 GiB   8300  Linux filesystem
   3       483342336       500117503   8.0 GiB     8200  Linux swap

Command (? for help): [w] //大丈夫そうなら書き込む

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): [y]
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
```

次に作ったパーティションをフォーマットします。EFI用のパーティションはFAT32である必要があります。私はルート用のものはext4にしていますが，他のファイルシステムにすることも出来ます。詳しくは[Archwiki](https://wiki.archlinux.jp)参照。
```
//EFI用，FAT32
# mkfs.fat /dev/sda1
mkfs.fat 4.2 (2021-01-31)

//ルート用，ext4
# mkfs.ext4 /dev/sda2
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done                            
Creating filesystem with 60155217 4k blocks and 15040512 inodes
Filesystem UUID: fd5f378d-01ca-4221-96a2-9f64f1471691
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 (262144 blocks): done
Writing superblocks and filesystem accounting information: done    

//スワップ用
# mkswap /dev/sda3
Setting up swapspace version 1, size = 8 GiB (8588881920 bytes)
no label, UUID=efc6df54-d35b-4076-bef6-60d294b1261f


```

それぞれを`/mnt`以下にマウントしていきます。efi用パーティションは`/mnt/boot`にマウントします。ここにブートローダーがインストールされます。


```
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot 
# swapon /dev/sda3
```
## パッケージのインストール
いよいよ`pacstrap`を使って`/mnt`にカーネルとかのパッケージをインストールしていきます。が，その前にいくつかコマンドを実行します。

```
# pacman -S archlinux-keyring
```
この後まれに鍵がどうだでエラーを吐かれることがあるのでその対策で`archlinux-keyring`を更新しておきます。

次に，`reflector`を使ってミラーリストを更新します。日本またはオーストラリアのサーバーで，httpsで24時間以内に更新されているサーバーをレイテンシが短い順に並び替えてくれます。これでこの後のインストールが結構早くなります。
```
# reflector --country Japan,Australia --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist 
```
`nano /etc/pacman.conf`で，以下の部分のコメントアウトを消します。これで出力がカラーになり，ダウンロードが並列化されて早くなります。
```/etc/pacman.conf
# Misc options
#UseSyslog
Color //ここ
#NoProgressBar
CheckSpace
#VerbosePkgLists
ParallelDownloads = 5//ここ
```

ようやく`pacstrap`で最低限のパッケージのインストールをします。ここで欲張っていろいろ入れると面倒になるので最低限のものだけにしておきます。
```
# pacstrap /mnt \
base \
linux \
linux-firmware \
linux-headers
```
さっき変更した設定ファイルをコピーして`chroot`します。`genfstab`で`fstab`を生成。

```
# cp /etc/pacman.conf /mnt/etc/pacman.conf 
# cp /etc/pacman.d/mirrorlist /mnt/etc/pacman.d/mirrorlist 
# genfstab -U /mnt >> /mnt/etc/fstab 

# arch-chroot /mnt
```
`chroot`したら必要なパッケージを入れていきます。

```
# pacman -Sy
# pacman -S \
networkmanager \
sudo \
gdm \
fcitx5 \
fcitx5-im \
fcitx5-configtool \
fcitx5-mozc \
git \
gcc \
make \
automake \
pkgconf \
fakeroot \
git \
curl \
wget \
grub \
efibootmgr \
os-prober \
emacs \
go \
adobe-source-han-sans-jp-fonts \
gnome-terminal \
which
```

userの追加とパスワードの設定

```
# useradd -m -G wheel username
# passwd username //userのパスワード
New password: 
Retype new password: 
passwd: password updated successfully
# passwd // rootのパスワード
New password: 
Retype new password: 
passwd: password updated successfully
```
visudoでsudo権限の設定をします。 エディタはお好みで。
```
# EDITOR=emacs visudo
```
以下の部分のコメントアウトを解除します
```visudo
%wheel ALL=(ALL:ALL) ALL
```

タイムゾーンの設定。
```
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```
言語の設定。

```
# emacs /etc/locale.gen
```
`/etc/locale.gen`の2行をコメントアウト解除します。
```/etc/locale.gen
en_US.UTF-8
ja_JP.UTF-8
```
```
# locale-gen
# echo "LANG=en_US.UTF-8" > /etc/locale.conf
```
マシンの名前を`/etc/hostname`に書く。
```
# echo hostname > /etc/hostname
```

ブートローダーのインストール。Grubを使います。UEFIではない場合はコマンドがちょっと変わります。
```
# grub-install --target=x86_64-efi --efi-directory=/boot --recheck --bootloader-id=archlinux
# grub-mkconfig -o /boot/grub/grub.cfg
```

`NetworkManager`と`gdm`と`systemd-timesyncd`，`sshd`の起動設定
```
# systemctl enable NetworkManager gdm systemd-timesyncd sshd 
```

一般ユーザーに切り替えて`yay`のインストール。
```
# su username
$ cd
$ mkdir Downloads
$ cd Downloads
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
```
`/etc/makepkg.conf`の`MAKEFLAGS`の行を変えておくとコンパイルが早くなります。コア数と同じくらいにしましょう。
```/etc/makepkg.conf
MAKEFLAGS="-j24"
```
ビルドします
```
$ makepkg -si
```
aurから必要なパッケージをインストールします。Gnomeの拡張機能を入れます。ChromeとかVScodeとかもyayで入れられます。
```
$ yay -S gnome-shell-extension-appindicator \
gnome-shell-extension-clipboard-indicator \
gnome-shell-extension-dash-to-dock \
gnome-shell-extension-kimpanel-git \
gnome-shell-extensions
```

最後にnvidiaのドライバをインストールします。他のところのGPUを使っている人はスキップしてOKです。
dkmsにすることでカーネルが更新されたときに自動で再ビルドしてくれるようになります。
NVIDIAのサイトからrunファイルをダウンロードしてインストールしてもいいですが面倒なので手抜きします。ドライバとかCUDAのバージョンを固定しないといけない人はそっちでもいいかもしれません。一応aurに`nvidia-xxx-dkms`とかいうパッケージもあります。環境によってはちょっと時間かかるかもしれません。
```
$ yay -S nvidia-dkms
```

最後に再起動します。Ctrl+Dを適当に何回か押してsuとchrootを抜けます。
```
# reboot
```
再起動したらgnomeのログイン画面が立ち上がるはずです。お疲れ様でした。