初心者　Arch Linux  をインストールする　2024

![arch_drift.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957376/a4b64734-289a-60b1-3b5f-9778d5152b3c.png)
# Arch Linuxとは
数あるLinuxディストリビューションの中でも最小限の構成となっているOSで、初期インストール時はCUI環境しか無いので敬遠されがちなのですが、カスタムするとDIY好きには堪らなく唆られるデスクトップ環境を手に入れる事が可能なOSです。筆者はまだ納得のいくデスクトップ環境となっていない為、画面は晒せませんが、興味のある方は一度"Arch linux i3 デスクトップ環境"とググって見て下さい。Arch Linuxの良さが伝わるかと思います。

## インストールについて
筆者もArch初心者です。インストール時に試行錯誤した経験が役に立てばと思い、自身が行った手順を投稿しますので、生暖かい目でお願いします。公式インストールガイドなどで行き詰まった場合のヒントになれば幸いです。

## 準備及び確認

:::note info
ここでは、ブート方式がUEFIのコンピューターに対してインストールを行います。
:::

UEFIかどうかの確認を行うには　biosモードで起動（ ファームウェアを起動 ）し、”bootsetting”などの項目からUEFIの記載を確認します。
biosモードへは、コンピューター起動時にDelete連打等を行うと移行します。（ 実際のキーはマザーボードのマニュアルを確認して下さい ）

空のSSD、HDDをコンピューターに取り付けた状態で行います。

:::note warn
windowsと同居させる場合は、別のディスクを用意した方が良いとの意見が多く、windowsのアップデートを行った際にLinuxが破壊される可能性があるという話ですのでお気をつけ下さい。
:::

## Arch Linux インストール用USBメモリの作成
まずは　Arch Linux公式　より　isoイメージをダウンロードします。
（ 国名が並んだ中から近くのミラーサイトを選択し、ダウンロード ）
<dl>
<dd><code>arch-linux_2024.12.10.iso</code> のようなファイル名のリンクをクリック</dd>
</dl>
   
ダウンロードが完了したら、Rufus等のブータブルUSBメモリ作成ツールを使用してインストール用のUSBメモリを作成します。

## いざUSBから起動
1.Arch Linux をインストールさせるコンピューターへ先ほど作成したUSBメモリを差し込みます。

2.イメージディスクからブートさせる場合はセキュアブートの設定をOFFにしておく必要があるため、bios設定モードでコンピューターを起動させ、OFFにします。

3.bios設定モードを抜け、F11連打でブートローダー選択画面を表示させます。

4.USBメモリを選択して起動。

5.なにやら選択画面が表示されるのでここでは一番上を選択します。

6.文字列が次々表示されて停止します。

7.ここからはインストールまでCUIでコマンド入力操作となります。

## JISキーボードを使用している場合は入力を対応させます
以下を入力します。（ ＄以外です ）
```ruby:
$ loadkeys jp106
```
## ブート方式の確認
以下を入力しエラーが出なければUEFIモードで起動されています。
```ruby:
$ ls /sys/firmware/efi/efivars
```
## インターネットへの接続
1.Arch linux ではインターネットの接続が必須となっていますので、接続します。

　・有線の場合はLANケーブルを接続させるだけで良さそうです。
　 （　筆者は無線のため確認していません　）

　・無線の場合は以下で接続させます。
　
1.まず、以下を入力して”インターフェイス名”を確認します。
```ruby:
$ ip link
```
 恐らくここでの無線接続インターフェイス名は　<code>wlan0</code>　でしょう。

2.試しに次を入力します。
```ruby:
$ iwlist インターフェイス名 scanning  grep ”EESID”
```
|コマンドライン中の名称|入力の際に置き換える名称|
|:------------------|:------------------|
|インターフェイス名|<code>ip link</code>で確認した名称、恐らく<code>wlan0</code> |
|"ESSID"|wi-fi接続を行う際に選択画面へ表示されている名称　例："Elec○m1234"、"Buffal○1234"など|

3.正しく表示されていれば以下を入力し、接続します。
```ruby:
$ wpa_supplicant -B -i インターフェイス名 -c <(wpa_passphrase EESID パスワード)
```
|コマンドライン中の名称|入力の際に置き換える名称|
|:------------------|:------------------|
|パスワード|wi-fi のパスワード　例：abc1def2ghiなど|

入力後、<code>success</code>　などの表示があったかと思います。

4.接続テストを行う為以下を入力します。
```ruby:
$ ping archlinux.org
```

:::note warn
インターネット接続状態でこれを入力するとデータを送信し続けるので停止させます。
:::

キーボードの　<code>Ctrl</code> + <code>c</code>　を押す

これでwi-fi接続は完了です。

## パーティションの作成
Arch linux で必要なパーティションは、EFIシステムパーティション、 Linux swap 、 Linux root の3つです。

1.次のコマンドでインストールしたいディスクを検索します。
```ruby:
$ fdisk -l
```
コンピューターに接続されているディスクのパーティション詳細が表示されます。

:::note info
パーティション作成には色々な方法がありますが、今回は筆者が１番分かり易いと判断したfdiskを使用しました。
:::

2.目当てのディスクを指定し、対話モードで作成します。
```ruby:
$ fdisk /dev/nvme0n1
```
今回のディスクは <code>nvme0n1</code> ですが、環境で異なります。

:::note alert
間違ってもwindowsやmacのパーティションは触らないようにして下さい。操作を誤るとデータが消去され、復旧不可です。
:::

対話モードに入るとヘルプが表示されるので、その通り進めれば良いです。

1.まず、 <code>g</code> でパーティションをGPTに指定。

2.<code>n</code> でパーティション作成を開始します。

3.パーティション番号を指定 <code>1</code> 〜 <code>3</code>。

4.パーティションの先頭位置を指定、指定が無ければ <code>Enter</code> を押す。

5.次に、パーティションの大きさです。
|パーティション|必要な容量|
|:-----------|:-------|
|EFI|公式では最低300Mb、複数カーネルをインストールする場合で最低1Gbとなっています。今回は1Gbにしました。|
|swap|難しい問題らしく諸説ありますが、現代のコンピューターではメモリ容量が大きい為、多く見積もっても8Gbあれば問題無さそうです。また、このarchをインストールする試みは、人によってはすぐ飽きてしまうかも知れないので、少なくしたければ最低容量の512Mbでも構わないと思います。|
|root|残り全部でしょうか、お好きなだけ。|

<code>+512M</code> など、 <code>+</code> + <code>数字</code> + <code>記号 M or G</code> の組み合わせで指定します。残り全部の場合は<code>Enter</code>　を押すだけです。

2〜4までを繰り返し、EFI、swap、root のパーティションを作成します。

パーティションが作成されたので、それぞれパーティションタイプを指定します。

|パーティション|用途|タイプ|
|:-----------|:--|:----|
|/dev/nvme0n1p1|EFIシステムパーティション|EFI System|
|/dev/nvme0n1p2|スワップ領域|Linux swap|
|/dev/nvme0n1p3|root|Linux x86-64 root|

1.<code>t</code> でパーティションのタイプを変更。

2.パーティション番号を指定 <code>1</code> 〜 <code>3</code>。

3.パーティションタイプの番号を入力（ <code>L</code> を押すことでリストが表示されます ）
例：筆者が作成した時はEFIシステムパーティションは 1 、linux swap　は 19 、linux root x86 64 は 23 だったと思います。実際の番号はリストで確認してください。

1〜3までを繰り返し、EFI、swap、root のパーティションタイプを変更します。

最後に変更を保存し、対話モードを終了します。

そして、もう一度 <code>fdisk -l</code> を実行し、パーティションが正常に作成されているか確認します。
```ruby:
$ fdisk -l
```
さて、先程作成したパーティションが反映されて、 <code>/dev/nvme0n1p1</code> 、<code>/dev/nvme0n1p2</code> 、 <code>/dev/nvme0n1p3</code> となっていると思います。

このままでは使用出来ない為、それぞれをフォーマットしていきます。

・EFIシステムパーティションを FAT32 でフォーマット。
```ruby:
$ mkfs.fat -F 32 /dev/nvme0n1p1
```
・swap の初期化
```ruby:
$ mkswap /dev/nvme0n1p2
```
・root へ ext4ファイルシステムを作成
```ruby:
$ mkfs.ext4 /dev/nvme0n1p3
```

ここまででパーティションの作成が出来たので、インストールに備えてパーティションをマウントします。

・EFIシステム、bootディレクトリをマウント
ディレクトリがまだ無いので、 <code>--mkdir</code> のオプション付きでマウントします。
```ruby:
$ mount --mkdir /dev/nvme0n1p1 /mnt/boot
```
・root のマウント
```ruby:
$ mount /dev/nvme0n1p3 /mnt
```
そして次を入力し、 swap の有効化を行います。
```ruby:
$ swapon /dev/swap_partition
```
## インストール
準備が整ったので、Arch Linux をインストールします。
次のコマンドを入力することでいよいよ Arch Linux がインストールされます。（ 設定ファイルを編集したいので、vim もインストールします ）
```ruby:
$ pacstrap -K /mnt base base-devel linux linux-firmware linux-headers vim
```
## まだやる事はあります（ 初期設定 ）
・fstab ファイルの作成
```ruby:
$ genfstab -U /mnt >> /mnt/etc/fstab
```
・chroot
　ここで今までのインストールメディアからインストールされた Arch Linux に乗り換えます。
```ruby:
$ arch-chroot /mnt
```
　ログインネームが変わったはずです。ここからは　"Arch Linux と言えば"　の pacman が使用出来る様になります。

・タイムゾーンの設定、 /etc/adjtime を作成
```ruby:
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo/etc/localtime
$ hwclock --systohc
```

・ロケール設定
echo等使う方法がありますが、初心者の為ここではテキストファイルを直接開いて編集したいので、以下を実行します。

```ruby:
$ vim /etc/locale.gen
```

vimで次の2つの行をアンコメント（ アンコメントは # を削除するだけです ）
```ruby:/etc/locale.gen
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
```

:::note info
vim の操作は、<code>i</code> で挿入モード、編集後 <code>ESC</code> を押してから <code>:wq</code> を入力、<code>Enter</code>で保存されます。
:::

続いて以下を実行します。
```ruby:
$ locale-gen
```
同じように環境変数を設定するため、以下のファイルを作成します。
```ruby:
$ vim /etc/locale.conf
```
次を入力。
```ruby:/etc/locale.conf
LANG=en_US.UTF-8
```
JISキーボードを使用している場合は次のファイルにも記述します。
```ruby:
$ vim /etc/vconsole.conf
```
インストールメディア実行時に一時的に使用しましたが、これを永続的に使用出来る様にします。
```ruby:/etc/vconsole.conf
KEYMAP=jp106
```
・ホストネームの設定
```ruby: ホストネーム の箇所へ設定したいホスト名を入力します
$ hostnamectl set-hostname ホストネーム
```
・ root のパスワード設定
 ```ruby:
 $ passwd
 ```
 上記を入力後、パスワードを入力します。（ 確認と合わせて2回 ）
## インターネット接続
次を入力して再度インターネットへ接続します。
```ruby:
$ nmtui
```
## NetworkManager のインストール
wi-fi接続を容易にする為にネットワークマネージャーをインストールします。
以下を実行。
```ruby:パックマンの更新
$ pacman -Syu
```
```ruby:NetworkManager のインストール
$ pacman -S wpa_supplicant wireless_tools networkmanager nm-connection-editor network-manager-applet
```
```ruby:NetworkManager の有効化
$ systemctl enable NetworkManager.service
$ systemctl enable wpa_supplicant.service
$ systemctl start NetworkManager.service
```
## ファイアウォールの設定
ufw をインストールして有効化する。
以下を入力。
```ruby:
$ pacman -S ufw
$ systemctl start ufw
$ systemctl enable ufw
```
ufw で、外へは許可、内へは拒否にするので次を実行します。
```ruby:
$ ufw default allow outgoing
$ ufw default deny incoming
$ ufw enable
```

:::note info
gufw というGUIを使用することも出来ます。
:::

以下を実行しgufw をインストール
```ruby:
$ pacman -S gufw
```
GUIを開きます。
```ruby:
$ gufw
==== AUTHENTICATING FOR com.ubuntu.pkexec.gufw ====
Authentication is required to run the Firewall Configuration
Authenticating as: root
Password:
```
ここでroot のパスワードを入力するとGUIが開きます。
![2024-12-14-12:44:10-screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957376/3620f778-f703-2767-19a1-36a267b7a593.png)

## ブートローダー（ grub ） のインストール
grub というブートローダーをインストールします。
```ruby:
$ pacman -S grub efibootmgr
$ grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=grub
```

## マイクロコードの取得
使用しているCPUのマイクロコードを取得します。
環境によってamd-ucode か intel-ucode のどちらかをインストールします。

:::note warn
最近の環境であれば上記のどちらかだと思いますが、念のため適合するものをArch linux公式で確認して下さい。
:::

```ruby:
$ pacman -S amd-ucode
$ grub-mkconfig -o /boot/grub/grub.cfg
```

## 再起動
最後に再起動します。
```ruby:
$ reboot
```
再起動後は、以下でログイン出来ます。
```ruby:
$ root
$ password:任意のパスワード
```

以上で基本的なインストールは完了し、Arch Linux が使用可能となりました。
必要最低限のOS環境なので、この後も各々で選択し環境を整えて行く必要があります。
筆者は現在i3でデスクトップ環境を構築中なので、気に入ったデスクトップ環境になれば、また投稿するかも知れません。
## 最後に
Arch Linux 勢が増えれば、WEB上の情報も必然的に増えると考え、この記事を投稿しました。これを見て興味を持っていただけたなら、私に情報をくれた先人たちからのバトンを渡せたことになります。
最後までお付き合いいただき有難うございました。