【備忘録】ArchLinuxをインストールして構築してみた

# ArchLinuxを構築してみた
メインPCをWindowsからArchLinuxにするべく、我々はサバンナの奥地へ向かった…。
ということでArchLinuxのインストールから構築（GUIデスクトップ、日本語環境の最低限の構築）までの備忘録というかメモのようなものです。
本来の目的は自分のメモ用なので、ArchLinuxとは関係ない知識も書いてますのでご了承ください。

# インストーラー作成、USBからarchlinuxを起動
今回はUSBにarchlinuxのisoを書き込んでインストーラーを作成しました。
下記リンクからisoファイルをダウンロードしてください。(たしかBitTorrentでダウンロードのリンクのものをダウンロードした気がする…)
[ArchLinuxをダウンロード](https://www.archlinux.jp/download/)

PCにUSBを指し、Rufusを使ってUSBにisoファイルを書き込みます。
[Rufus](https://rufus.ie/ja/)

**※archlinuxはセキュアブートがオンになっている状態では起動できないため、セキュアブート(UEFI)をWindows上でオフにしてから起動する。**
[パソコンのセキュアブートを有効/無効にする方法 - Windows 11 / Windows 10](https://pc-karuma.net/how-to-enable-disable-secure-boot/)

USBを指したまま、一度電源を切りbootmenuを起動する。
Windowsの電源を切るときにshiftを押しながらシャットダウンボタンを押すことでPCを完全にシャットダウンすることができる。(これをしないとbootmenuが起動しませんでした)
(自分用:その後、lenovoの表示時にエンターキーを連打してbiosを立ち上げる。)

bootmenu起動後、自分のUSBのメーカー名とUSBの名前が表示されると思うのでそれを選択してUSBからarchlinuxを起動する。

# PCへarchlinuxをインストール
基本的に以下のインストールガイドを見ながら行います。
archwikiは内容がとても充実しているのでwikiだけでインストール、構築可能ですが、内容が充実しすぎて何を使えばいいかわからなくなります…。(個人的な感想)
その時はその都度ググってみてください。
[インストールガイド](https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89)

### インストールガイドを元にインストールを行う(一部省略してます)

#### キーボードを日本語配列にする。
(GNOMEのGUI上で設定をしない限り、電源を切ったらリセットされるので注意)
```
# loadkeys jp106
```

#### ネットワークに接続する。
今回はiwctl(パッケージ名はiwd)を使って無線lan(wifi)に繋げました。
[iwd](https://wiki.archlinux.jp/index.php/Iwd#iwctl)

iwctlを起動する
```
$ iwctl
```
wifiデバイスを表示する(デバイス名取得)
```
[iwd]# device list
```
ネットワークをスキャンする
```
[iwd]# station <device> scan
```
デバイス名とSSIDでwifiに接続する
```
[iwd]# station <device> connect <SSID>
```
最後にpingで接続確認をする
```
# ping archlinux.jp
```

#### タイムゾーンの設定
タイムゾーンを日本に設定
[timedatectl](https://man.archlinux.org/man/timedatectl.1)
```
# timedatectl set-timezone Japan
```

#### パーティションの設定
BIOS+MBR(マスターブートレコード)の場合はfdisk、UEFI+GPTの場合はgdiskを使用してパーティションを設定する。
古いPCでない限りUEFI+GPTにした方が良いため、今回はUEFI+GPTでパーティションを設定する。
参考サイト:
[ArchLinuxインストール(2)](https://aznote.jakou.com/archlinux/install2.html)
参考サイト:
UEFI+GPTの場合、以下のリンクの図のBIOSとMBRの部分を読み替えれば良い。
UEFIはGPTを呼び出し、GPTはブートローダ(今回はGRUBをインストールする)を呼ぶ。
[Bootup Sequence](https://www.codeinsideout.com/blog/linux/bootup-sequence/#overview)

UEFI+GPTでパーティショニングを行う場合、archlinuxを起動するための必要なパーティションは最低で2つ(EFIシステムパーティションとarchlinux用パーティション)。
PCのメモリが少ない場合は任意でスワップ用パーティションを設定する。(メモリが足りなくなった場合にメモリ配列を変える。その際に一時的に退避する用のパーティション)
[EFI システムパーティション](https://wiki.archlinux.jp/index.php/EFI_%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3)

今回は以下のようにパーティショニングを行った。
| パーティションタイプ | マウントポイント | パーティションナンバー | 容量 |
|:-----------|:------------|:------------|:-----------|
| EFIシステムパーティション       | /mnt/boot        | 1 | 512MiB         |
| Linux x86-64 root (/)     | /mnt      | 2 | デバイスの残り容量全て       |

編集したいデバイス名を指定してgdiskを起動する。
```
# gdisk /dev/sda
```

まずoコマンドで、空のパーティションテーブルを作成する。
**※デバイスの内容がクリアされるので要注意**

次にnコマンドでパーティションを順番に追加する。
* EFIシステムパーティション
```
Partition number : <Enter> (省略)
First sector : <Enter> (省略)
Last sector : +512M<Enter>
Hex code or GUID : ef00<Enter>
```

- archlinux
```
Partition number : <Enter> (省略)
First sector : <Enter> (省略)
Last sector : <Enter> (省略)
Hex code or GUID : <Enter> (省略)
```

パーティション追加したらwコマンドで書き込む。

パーティションが正常に設定されているか確認する。
```
# lsblk
```

#### フォーマット
パーティショニングしたデバイスを実際に使えるようにするためにはフォーマットする必要があります。

- EFIシステムパーティションのフォーマット
/dev/sda1 の部分はパーティションのデバイス名に置き換えてください。-F32オプションでFAT32 でフォーマットします。
```
# mkfs.vfat -F32 /dev/sda1
```

- その他(archlinux)のパーティションのフォーマット
/dev/sda2 の部分はパーティションのデバイス名に置き換えてください。ext4でフォーマットします。
```
# mkfs.ext4 /dev/sda2
```

フォーマットしたら、以下のコマンドでフォーマットできているか確認しましょう。
```
# lsblk --fs
```

#### 必須パッケージのインストール
pacstrapでbaseパッケージとLinuxカーネル、一般的なハードウェアのためのファームウェアをインストールします。
```
# pacstrap -K /mnt base linux linux-firmware
```

#### fstab の生成
```
# genfstab -U /mnt >> /mnt/etc/fstab
```

#### chroot
```
# arch-chroot /mnt
```

#### タイムゾーン
```
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc
```

#### ローカリゼーション
```
# locale-gen
# vi /etc/locale.conf
```
以下の記述をアンコメントする。
```
ja_JP.UTF-8 UTF-8
```

#### パスワード
rootパスワードを設定する。
```
# passwd
```



#### ブートローダのインストール
先程書いたように、今回はGRUBをインストールします。
[ブートローダー](https://wiki.archlinux.jp/index.php/Arch_%E3%83%96%E3%83%BC%E3%83%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9#.E3.83.96.E3.83.BC.E3.83.88.E3.83.AD.E3.83.BC.E3.83.80.E3.83.BC)
[GRUB](https://wiki.archlinux.jp/index.php/GRUB)

#### 再起動
GRUBがインストールできたら再起動します。
再起動後、archlinuxが立ち上がればPCにインストールができています！

# archlinuxの構築
archlinuxがPCにインストールできたらいよいよ構築です。
この時点ではcuiのみなので引き続き頑張りましょう。
ここでは以下のページを参考に進めます。
[一般的な推奨事項](https://wiki.archlinux.jp/index.php/%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E6%8E%A8%E5%A5%A8%E4%BA%8B%E9%A0%85)

### ユーザー追加
常にrootの状態で作業するのは愚かです(archwikiのお言葉)
ユーザーを追加しましょう。
[ユーザー管理](https://wiki.archlinux.jp/index.php/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97#.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E7.AE.A1.E7.90.86)

現在システムにログインしているユーザーを一覧表示する。
```
# who
```

ユーザーを追加する。
```
# useradd -m <username>
```

ユーザーにパスワードを登録する。
```
# passwd <username>
```

### ネットワーク接続
「インストールの時みたいにiwctlでwifiに繋げば良いんでしょ〜？」って思った方。
残念ながらiwctlはこの時点ではインストールされていません涙

私はめんどくさいので無線で接続したかったのですが、無線接続に必要なパッケージはこの時点ではインストールされていないので仕方なく有線LANでやりました。
[ネットワークインターフェイス](https://wiki.archlinux.jp/index.php/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A#.E3.83.8D.E3.83.83.E3.83.88.E3.83.AF.E3.83.BC.E3.82.AF.E3.82.A4.E3.83.B3.E3.82.BF.E3.83.BC.E3.83.95.E3.82.A7.E3.82.A4.E3.82.B9)


ネットワークインターフェイス(無線、有線)を確認する。
```
# ip link
```

ネットワークインターフェイスを有効化にする(無効化はdown)
```
# ip link set <interface> up
```

ネットワークインターフェイスごとに割り振られたIPアドレスを確認する。
(有線はeから始まり、無線はwから始まる名前だったような…)
```
# ip address show
```



#### DHCP(IPアドレスを割り振る)
DHCPとは、自動でipアドレスを割り振るやつ。（パッケージはdhcpcdとか）
今回はこれは使わないで手動でipアドレスを振った。

IPアドレスをインターフェイスに追加。(かぶらないIPアドレスを設定)
```
# ip address add <address>/<prefix_len> broadcast + dev <interface>
```


#### ルーティングテーブル
振ったIPアドレスのデフォルトゲートウェイ(ルート)を振る。
ルートを追加(PREFIXは、デフォルトゲートウェイに対してはdefault)
(addressはデフォルトゲートウェイだから1)
```
# ip route add <PREFIX> via <address> dev <interface>
```



#### DNSサーバー
IPアドレスとドメイン名(Google.comなど)を紐づける。名前解決する。
名前解決を有効にするサービスを有効にする
systemd-resolved 

```
# systemclt enable systemd-resolved
# systemclt start systemd-resolved
```

### GNOME
GUIのインストール環境をインストールする。
GDMはGNOMEを管理するマネージャーのようなものです。
startを実行するとすぐにGNOMEが起動します。
[GNOME](https://wiki.archlinux.jp/index.php/GNOME)
```
# pacman -S gdm
# pacman -S gnome
# systemclt enable gdm.service
# systemclt start gdm.service
```

### ネットワークマネージャ
GUIの画面からネットワーク設定ができるようにネットワークマネージャを入れましょう。
[NetworkManager](https://wiki.archlinux.jp/index.php/NetworkManager)
```
# pacman -S networkmanager
# systemclt enable NetworkManager.service
# systemclt start NetworkManager.service
```


### sudoのインストール、追加
以下のコマンドで/etc/sudoersの内容を編集する。
どうして普通の開き方をしないかというと、この設定ファイルに誤った記述をしてしまうともしかしたらsudoが使えなくなる可能性があるからです。
（sudoが使えなくなるということは、ユーザからこのファイルを開けなくなります）
```
# EDITOR=vim visudo
```
ファイルに以下の内容を追加。こうすることでこのユーザはsudoが使えるようになる。
```
<username> ALL=(ALL:ALL) ALL
```

またvisudoとは、/etc/sudoersを開くためのコマンドです。
manコマンドをインストールして確認してみましょう。
```
# pacman -S man-db
# man visudo
```

### 日本語入力
今回はanthyで日本語入力、表示を行いました。
いろいろインストールしたので何が効いたかはっきり分からなくなってしまったので、とりあえず参考にしたサイトとコマンドを載せておきます。
参考サイト：
[Arch Linuxに日本語環境を構築する](http://note.kurodigi.com/post-0-19/)
[ローカリゼーション](https://wiki.archlinux.jp/index.php/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AA%E3%82%BC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)

補足：二行目以降はどれか一つでいいみたいです。。。
```
# pacman -S anthy
# pacman -S fcitx-anthy
# pacman -S ibus-anthy
# pacman -S scim-anthy
# reboot
```

再起動（またはログアウトからログイン）をしたら「設定」の「地域と言語」の「あなたのアカウント」から日本語表示にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554207/48c5696c-6ae8-7cfb-61cf-d94e458906a9.png)


また「設定」の「キーボード」の「入力ソース」でキーボードを追加します。
＋ボタンを押すと日本語キーボードが追加できます。
その中に「日本語(Anthy)」というものがあるのでそれを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554207/2b59c30f-e9cd-b165-9268-0d8f0a3501f4.png)

追記：いろいろやっているうちにわけわからんことになってしまったので、最終的に以下のサイトを参考にfcitxをインストールしました。
http://note.kurodigi.com/archlinux-fcitx5/

# おわりに
これで最低限のGUIの日本語環境ができました。
ここからお好みに合わせていろいろインストールしていきます。
またなにかインストールしたら備忘録として残す予定です。
そしてここから始まる恐怖（カーネルパニック）に遭遇したときも備忘録に残します。。。