Arch Linuxのすゝめ

この記事は [NIT-Numazu Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nit-numazu) 20日目の記事です

**[お知らせ : 0から全部書き直しました。](https://zenn.dev/ytjvdcm/articles/0efb9112468de3)**　←Click!!

以下の内容は色々古い情報になります。
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>



# みんな大丈夫かなぁ～?ちゃんとLinuxやってる?Windowsなんかにハマってないよね?

みなさん、こんにちは。
今年のAdvent Calendar穴ぼこ多いので2度目の執筆です。
おそらくこの記事を見ているような人は大方Linuxユーザー(かmacOSユーザー)だと思います。
(Linuxなんて使ってない?Windowsオンリー?デュアルブート環境を構築して圧倒的成長しましょう。)
しかし、Linuxと行っても、UbuntuにDebian、CentOSにFedoraなど、いくつものディストリビューションがあり、正直言って毎回どのディストリビューション入れるか迷ってる。なんて人もいるんじゃないでしょうか。
特に今Windows 10を使ってる人、Windows 11は非対応or色々機能に不満が多い、でもLinuxディスト多くてどれが良いかわからないって人もいるんじゃないでしょうか?

そんなあなたにおすすめしたいのがこの**Arch Linux**。
本記事ではただ淡々とArch Linuxの良さを語った後に最低限使えるようにするまでの我流インスコ方法を書いていこうと思います。

# Arch Linuxのここが良い!

## とりあえず比較してみる
Arch Linux?いやUbuntuで十分でしょwww
って人のためにArch LinuxとUbuntuのかんたんな比較グラフを用意しました。

||Arch Linux|Ubuntu|
|:-----------------------:|:---------------------:|:-------------------------:|
|パッケージマネージャー|pacman|apt|
|パッケージ数|約1万(AUR含めると約5.5万)|約5万|
|バージョンという概念|なし|あり|
|デフォルトのGUI環境|なし|GNOME(16.4までUnity)|
|メインターゲット|DIYアプローチ好き|初心者|
|インストールメディアの容量|約600MB|約2GB|
|インストール時のネット接続|必須|必須ではない|
|運営|独立、コミュニティ|Canonical Ltd.|

とまあ、軽くこんな感じですかね...
そもそも同じLinuxとはいえ、UbuntuとArchだとターゲット層が違うので、言うなれば名前にモンスターが入ってるからポケ○ンとモ○ハンを比べるぐらい比較が難しいので、このぐらいにしておきます。

しかし、高専生が使うならば、より開発者向けのパッケージが揃い、尚且(UbuntuでもWindowsと比べれば十分マシだが)余計なソフトが入っていない~~某パンみたいな~~OSであるArch Linuxの方が、使いやすいと思います。
(勿論、Linuxなんてせいぜい携帯のAndroidと演習室のCentOSぐらいしか触ったことないよーみたいな人にはUbuntu系をおすすめします。)

## とにかく開発者向けパッケージ群
例えば、開発用のエディタとしてVSCodeを入れたいとき、Ubuntuだとブラウザからダウンロードページに飛んで.debパッケージをダウンロードしてdpkgコマンドでインストールして必要なら依存関係を解決して...
とちょっと手間がかかりますが、Arch Linuxならターミナルから

```terminal:Terminal
$ sudo pacman -S code
```
これだけでインストールできちゃいます。

更に、Arch Linuxには、公式リポジトリの他に、AURと呼ばれるユーザーリポジトリが存在し、公式リポジトリに存在しないパッケージも大体ここからインストールできます
更にこれらにも存在しないソフトが有っても、snapdなどを使えば...
と考えると、大体のソフトはターミナルからインストールできてしまいます。(むしろ、ターミナル以外からインストールできるソフトの方が少ないと思われ)

## PC長く使う人には嬉しいローリングリリースモデル
他にも、Arch Linuxはローリングリリースというリリースモデルを採っており、いわゆるバージョン番号と呼ばれるものが存在しません。
つまり、Windowsで言うところのXPとか7とか(Win10だとTH1とか19H2とか)、Ubuntuで言うところの16.04とか18.04とか、そういうものがないんです。
「どういうこっちゃ」と思う人もいるかと思いますが、つまりは小規模なソフトウェアアップデートが頻繁に行われるので、大規模なアップデートがないってことです。
そのため、一度インストールして自分の使いやすい環境さえ構築してしまえば半永久的に使い続けることができるわけです。
これ、パソコンを長く使い続けたい人にとってはとても嬉しい仕様ですよね。(ちなみに、Gentoo Linuxや、ChromiumOSなんかもローリングリリースです)

あとはArch Linux最大の特徴として、シンプリティとミニマリズムを焦点を当てて開発されているため、初期状態ではほとんどアプリが入っておらず、故に自分好みの環境を構築しやすいOSになってます。(余計なものが入ってないので軽量でもあります。)

# Arch Linuxのここがダメ！

さて、軽いArch Linuxの良いところを羅列しましたが、こんなArchLinuxにも当然ながら弱点?短所?みたいなものもあります。

## 全部CUI、インストールが少々難しい
おそらく最も最初に挙げられるのが**インストールの難しさ**でしょう。
Arch Linuxはそのシンプリティとミニマリズム重視な設計故、インストールはほぼ(というか全部)CUIで行います。
「CUI?余裕www」とか言ってる人なら良いのですが、「Linuxのコマンドなんてcdとlsとmkdirぐらいしかしらん」って人にはかなり難易度が高いです。
(ちなみに、ArchLinuxにGUIでアレコレできる機能を追加したManjaroだとか~~Alter Linuxだとか~~もありますが、パッケージ更新に多少ラグがあったりします)
2020/10/14追記：Alter LinuxはArch Linuxとリポジトリを共有しているのでパッケージ更新のラグはないようです
勿論、ドライバも必要最小限のものしか入っていないので、例えば、Wi-Fi一つ使うにしてもドライバを別途インストールする必要があります(とはいえ、よほど変なボードでも使ってなければだいたい公式リポジトリにあります)

## どうしても出てくる情報が少ない(特に日本語)
ターゲット層がターゲット層なだけにユーザーが少なく、その分検索して出てくる情報は少ないです。
勿論、Arch Linuxにはユーザーによるコミュニティが存在し、それらを見れば大体の問題は解決できるのですが、大方英語なので、英語できない人間にとってはかなり難しいところ。(他には、比較的新し目のパッケージとかの情報を探しても日本語の検索結果0だったりなんてことも...)

## 公式サポートが<del>x86、</del>x86_64だけ
普通にPC使ってる人なら特に気にする必要はないんですが、例えば、PowerMac(PowerPC)とか、Raspberry Pi(ARM)、あとM1搭載のMac(ARM)を使ってる場合は残念ながらインストールできません(ARMに関しては、コミュニティリリースのArchLinux ARMがあります)

追記:どうやらx86(32bit版)も公式サポートではなくなったようです(こっちもコミュニティリリース版はありますし、32bitのソフトを64bit版Archに入れることは今でも可能)

と、こんなところでしょうか。メリットもデメリットも探せばいくらでもあるのでこのぐらいにしておきます。

# Arch Linux、入れてみないかい?

デメリットの項を読んで、「なんだこんなもんか」って思った人はArch Linuxに乗り換えるべきです。
ゲームもProton(ValveがWineをゲーム用に魔改造したやべーやつ、BeatSaberも動く)を入れれば大体動きます。

# 思い立ったが吉日、Let's Install!
ということで早速Arch Linuxをインストールしていきましょう。
と、行きたいところなんですが、そもそもArch Linuxは初期構成が必要最小限なだけあって、自分の使いたいものを後からインストールしていく、というOSなので、あくまでもここで説明するインストール方法は私の私による私のためのインストール方法、ということだけご承知おきください。(また、今回はEFI環境で進めていきますが、BIOSでの手順も適宜説明します。)

って行っても大体の手順はArch Wikiに書いてあるんですけどね。

## じゃあまず、インストーラーを落としてくれるかな?
まず、[Arch Linuxの公式サイト](https://www.archlinux.jp/)から、インストール用のisoファイルを落としてきます。
ミラーサイトでもTorrentでも、お好きなところから落としてきてください。
落として来たらddコマンドでもなんでも良いのでCDやUSBにisoを焼いてブート可能な状態にします。
ここまではUbuntuとかの他のLinuxディストリビューションと大体同じです。

## 早速インストール!
ということでインストールしていきます。
BIOSのブートオプションから、ブート優先度を変更して先程作ったUSBやCDを突っ込んで起動します。

さて、以下のような三角形のロゴが目立つ画面が表示されたでしょうか。(もしくは、なんか寂しい文字だけの選択肢が現れたでしょうか?)
![VirtualBox_Arch_08_12_2019_16_47_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/3c447193-c935-c664-f420-11199ec8e571.png)
![VirtualBox_Arch_18_12_2019_23_25_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/969e7f5f-cf78-9eb1-719e-90d99bdfac32.png)
表示されずにPCにもともと入ってたOSが立ち上がったらブート順が変更できてないと重いのでBIOS(UEFI)見返してみてください。

ちなみに、ここでArchのロゴが出てきた場合はBIOS、文字だけが現れた場合はUEFIで、それぞれインストール方法が若干違うので覚えておいてください。

選択肢の中に **Boot Arch Linux (x86_64)** (もしくは**Arch Linux archiso x86_64 UEFI xxx**みたいなやつ、xxxはUSBとかCDとか)という選択肢があると思うので、それを選択してEnter(Return)キーを押します。
さて、ここから先しばらくグラフィカルな画像や文字を拝むことはなくなります。

早速ですがJISキーボードを使っている場合はキーマップを変更します。

```terminal:root
# loadkeys jp106
```

## パーティションを割ります。

さて、しばらく待っていると、勝手にrootでログインしているはずです。
ログインできていることを確認できたら、まずパーティションを割ります。
まず、そもそもPCに刺さってるストレージの名前を確認しておきます。

```terminal:root
# lsblk
```
![Screenshot 2019-12-18 at 23.27.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/f4ccf888-26e3-6dec-1a8e-302912d10e5e.png)
このときに表示されているのが刺さってるデバイス一覧です。
大抵の場合は/dev/sdX (Xはアルファベット)とかですが、NVMe SSDとかだと違ったりするので要確認。
また、各デバイスから枝分かれして/dev/sda1とか数字がついてるのはパーティションです。
どれがどのデバイス・パーティションなのかはlsコマンドで中身を見るなり容量で判別するなりしてください。
すでにGparted等でパーティションを割っているならそれらを使っても良いのですが、特に何もしていないならgdiskやfdick、partedなどを使ってパーティションを割ります。
(ここらへんはまっさらなHDDやSSD相手なら別に問題有りませんが、既に他のOSとかが入っているなら別途GpartedなどのGUIで実装されたパーティションマネージャー使ったほうが無難かも)
![Screenshot 2019-12-18 at 23.34.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/a1819b6a-95f6-151d-f22d-0779a6b05be4.png)
パーティション構成の例

このパーティション構成が、BIOSかUEFIか(MBRかGPTか)で異なります。ほぼ公式丸パクリですけど一応パーティションの例です。

**BIOS MBR**

| マウントポイント | パーティション例 | パーティションタイプ | 容量 |
|:-----------|:------------|:------------|:-------------|
| /mnt       | /dev/sdX1 | Linux | 残った全領域 |
| [スワップ領域] | /dev/sdX2 | Linux swap | 512MiB以上 |

**UEFI GPT**

| マウントポイント | パーティション例 | パーティションタイプ | 容量 |
|:-----------|:------------|:------------|:-------------|
| /mnt /boot (/mnt/efi) | /dev/sdX1 | EFI System Partition | 260～512MiB |
| /mnt | /dev/sdX2 | Linux x86_64 root (/) | 残った全領域 |
| スワップ領域 | /dev/sdX3 | Linux swap | 512MiB以上 |

スワップ領域の容量例でよく言われるのはメインメモリの2倍とかですが、真に受けると某MacProとかはスワップ領域に3TB使う必要が出てくるのでそのあたりは適宜調整してください。
また、__既にWindowsが入っている場合、EFIシステムパーティションは既に作られているはずなので、別途作らなくてもWindowsが勝手に作ったやつを流用できます。__(というかWindowsのブート情報が入ってるのでWindowsが勝手に作ったやつをマウントしてください)

さて、ここから先、色々面倒なので、各パーティションを以下のようにしているという前提で話していくので、**その部分は適宜環境に合わせて変更してください。**

| デバイス・パーティション番号 | マウントポイント |
|:-----------|:------------|
| /dev/sda1 | /mnt/boot |
| /dev/sda2 | /mnt |
| /dev/sda3 | [スワップ領域] |

## 割ったパーティションをフォーマットしたりマウントしたりします。

さて、パーティションを割ったら、早速割ったパーティションをフォーマットします。
以下のコマンドを入力します。(デバイス・パーティション名は適宜変更)
また、EFIシステムパーティションが既に作成済みだった場合はフォーマットしないでください。

```terminal:root
# mkfs.fat -F 32 /dev/sda1
# mkfs.ext4 /dev/sda2
# mkswap /dev/sda3
```

さて、パーティションをそれぞれフォーマットしたら、続いて各パーティションをマウントしていきます。

```terminal:root
# swapon /dev/sda3
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
```

で、ここから先はインターネット接続必須なので、インターネットにつながっていることを確認しておきます。
※Wi-Fiは少々面倒なので、有線前提で進めていきます

```terminal:root
# ip link
```

上のコマンドで接続されてるネットワークインターフェース一覧が出てくるので、メモっておきます(大体enp0s3とかeth0とか)
__今回はenp0s3であるという前提で進めていくのでその部分は適宜変更してください。__
で、続いてネットに繋がってるか確認するためにpingを打ちます

```terminal:root
# ping archlinux.jp
```

普通はインストールメディア起動時に自動的にネット接続されるはずなのでこれでpingが帰ってくるはずですが、もし帰ってこない場合は

```
# systemctl start dhcpd@enp0s3
```

でネットワークを有効化してください。(動的IPを使う場合)

ネット接続を確認したら、そのままシステムクロックを更新します

```terminal:root
# timedatectl set-ntp true
```

## 基本パッケージをインスコ

さて、下準備も整ったので早速インストールしていきます。
とりあえず最低限必要なもの、コンパイラ群、あとLinuxのカーネルとそのファームウェアをそれぞれインストールします。
(DL容量約300MB、展開後容量約1.5GB)

```terminal:root
# pacstrap /mnt base base-devel linux linux-firmware
```

尚、ArchLinuxにインストールできるカーネルは様々で、例えば、LTS版のLinuxカーネルをインストールしたい場合は、linuxをlinux-ltsに変更すればインストールできます。
詳しく知りたい場合は[ArchWikiのカーネル](https://wiki.archlinux.jp/index.php/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB)を見てください。

さて、これで必要最低限のパッケージインストールはできたので、次は各種設定をしていきましょう

##システム設定とか

さて、続いてインストールしたArchLinuxを使えるように設定していきます。
まず最初にfstab(システムパーティションとかのあれこれが書いてあるファイル)を生成します。

```terminal:root
# genfstab -U /mnt >> /mnt/etc/fstab
```
この地点で必要なパーティションがすべてマウントされてないと起動できなくなります

続けて、chrootでインストールしたシステムのルートディレクトリに入ります。

```terminal:root
# arch-chroot /mnt
```
続けてタイムゾーンを設定します。ここは住んでる地域に合わせて変更してください。
例:東京(GMT +9)に設定する場合

```terminal:root
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```
で、設定したタイムゾーンをハードウェアクロックに設定します。

```terminal:root
# hwclock --systohc --utc
```

タイムゾーンの設定もできたので続いてロケールのの設定をします。
ただ、デフォルトではエディタが入ってないので、何かしらのエディタを入れて、それでロケール設定します(下記はvimの例)

```terminal:root
# pacman -S vim
# vim /etc/locale.gen
```
英語は必須なので、`en_US.UTF-8 UTF-8`と、他に使用する他の言語(`ja_JP.UTF-8 UTF-8`など)のコメントを外します。
必要なロケールのコメントを外したら、ロケールを生成、生成したロケールを設定します。(キーマップの設定はJISキーボードを使っている場合のみ行ってください。)

```terminal:root
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# echo KEYMAP=JP106 > /etc/vconsole.conf
```
続いて、コンピュータのホストネームを設定します。
ホストネームの名前はお好みで設定してください(とりあえず以下ではarchkunにしときます)

```terminal:root
# echo archkun > /etc/hostname
```
同様の名前を`/etc/hosts`にも書きます

```:/etc/hosts
127.0.0.1    localhost
::1    localhost
127.0.1.1    archkun.localdomain    archkun
```
※静的IPを用いる場合は127.0.1.1の部分を該当するIPアドレスに変更してください。

さて、続けてルートのパスワードを設定します

```terminal:root
# passwd
```
で、実際にいざ使い始めてそのときに全部ルートでやるのは流石に怖いので一般ユーザーを作ります。
ユーザー名はお好みで。(今回はuser)

```terminal:root
# useradd -m -g users -G wheel -s /bin/bash user
# passwd user
```
で、sudoが使えるようにします。
sudoをインストールしたら、sudoersのwheelのコメントアウトを外しましょう。

```terminal:root
# pacman -S sudo
# vim /etc/sudoers
```

```:/etc/sudoers
(省略)

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

(省略)
```

で、これで再起動して起動するとそのままではインターネットに繋がらないのでdhcpクライアントを入れます。

```terminal:root
# sudo pacman -S dhcpcd
```
**2020/02/14追記:Wi-Fiなどを使う場合はNetworkManagerを入れたほうが良いかもしれません。**

これで基本的な設定は完了。ですが、まだブートローダーのインストールをしていないので、ササッとインストールして起動できるようにしていきます。

## ブートローダー(GRUB)をインスコ

せっかくインストールしたのにOSが起動できないんじゃ意味がないのでブートローダーをインストールします。
尚、今回はOSなぞ入ってないまっさらなPCにインストールしていくことを前提としているので既に他のOSが入っていたりする場合はそれに合わせて設定してください。
あと、ここから先はBIOSかUEFIかで設定が異なるのでご注意を。

まず、GRUBをインストールします。

```terminal:root
# pacman -S grub
```
なんか言われますが多分yを押していけばおｋです。
インストールしたらGRUBの設定ファイルを作ります

**BIOS MBRの場合**

```terminal:root
# grub-install --target=i386-pc /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg
```

**UEFI GPTの場合**

```terminal:root
# sudo pacman -S efibootmgr
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
# grub-mkconfig -o /boot/grub/grub.cfg
```

これでOSがブートできるようになったので、chrootから抜けて、rebootしましょう。

で、インストールメディアを抜いて再起動すると、grubが起動するので、Arch Linuxを選択して起動しましょう。
起動すると、初期状態ではインターネットに接続されないので、以下のコマンドを入力して有効化、次回以降自動起動するようにしておきます。(有効化したら、pingを打って接続できてるか確認しておきましょう。)

```
$ sudo systemctl start dhcpcd@enp0s3
$ sudo systemctl enable dhcpcd@enp0s3
```

## GUI化

さて、CUIで使い続けるのも良いですが流石に使いづらいと思うのでGUI環境を整えていきましょう。
今回は私が個人的に好きという理由だけでKDE Plasmaを使いますが、既にお好きなデスクトップ環境があるならそれを使っても問題ないです。

```terminal:user
$ sudo pacman -S acpid xorg sddm plasma
$ sudo systemctl enable sddm
```
これであとはrebootすればGUI環境が現れる!
...のですが、ターミナルエミュレータが無いので、とりあえずターミナルをインストールします。

```terminal:user
$ sudo pacman -S xterm
```
さて、これで最低限GUIであれこれできるようになりました！
皆さん、いかがでしたか?あとは各自使いやすい環境を構築していきましょう
...って、ターミナルと最低限のGUI環境じゃ何もできませんよね。
ということでとりあえずインストール方法はここで終わりですが、いくつか私的入れておくべきソフトを入れていきます

## インストール後のあれこれ

### ファイルマネージャー

これがなければほぼ何もできませんね。
インストールしましょう。

```terminal:Terminal
$ sudo pacman -S dolphin
```

### ブラウザ

インターネット見れるようにしましょう。

```teminal:Terminal
$ sudo pacman -S firefox
```

### ウイルス対策ソフト

clamtkはclamAVをGUI化するだけなのでコマンドラインで十分なら不要。

```terminal:Terminal
$ sudo pacman -S clamav clamtk
```

### ファイアウォール

いろいろ種類があるけど今回はufwを選択、gufwはufwをGUI化するだけなので(以下略)
今回は外部へのアクセスはすべて許可、外部からのアクセスは全部拒否。

```terminal:Terminal
$ sudo pacman -S ufw gufw
$ sudo ufw default deny
$ sudo ufw enable
```

### 日本語入力

日本語を入力できるようにします。
今回はFcitx Mozcを導入します。

```terminal:Terminal
$ pacman -S noto-fonts-cjk
$ pacman -S fcitx-im fcitx-configtool fcitx-mozc
```
インスコしたら入力メゾットに日本語を追加しましょう。
![Screenshot 2019-12-19 at 23.57.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/d439b1d2-d8f7-affa-0042-d628c5fe9f11.png)


### AURヘルパー(yay)のインスコ

ArchLinuxには公式リポジトリの他に、AURと呼ばれるユーザーリポジトリがあり、それをかんたんにコマンドで扱えるようにするのがAURヘルパー。
一昔前はyaoutが有名でしたが、開発停止により最近はyayが一般的なようなのでそれをインスコします。
(ついでにyayのインストールに必須なのでgitもインストールしちゃいます。)

```terminal:Terminal
$ sudo pacman -S git go
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si
```
これでyayコマンドが使えるようになったはず。

さて、だいたいこれで最低限必要(と私が勝手に思ってる)なものは整ったはず。
他に必要なソフトがあったら、以下の参考ページにも貼ってあるArch Wikiで検索してみると、AURにあるか、公式リポジトリにあるかとか、そういった情報を検索できるので、そこから調べてみてください。

# さいごに
こんどこそ、いかがでしたでしょうか。
日頃Linuxをよく使ってる人にこそ使ってほしいArch Linux。気になったらまずは仮想環境に入れるなどしてはどうでしょう。
Arch Linux、なんやかんや軽量でリポジトリも豊富で、軽くてと、使ってると意外と使いやすいと感じてくる人も多いと思います。
ということで、是非ともこの機会にArch Linux、インストールしてみましょう。


# 参考ページ

- [Arch Linux JP Project](https://www.archlinux.jp/)
- [Linuxディストリビューションの比較 - Wikipedia](https://ja.wikipedia.org/wiki/Linux%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)
- [ArchWiki](https://wiki.archlinux.jp/)
- [[翻訳] MacBook Air に Arch Linux をインストールする（デュアルブート） - Qiita](https://qiita.com/takamura_s/items/fd7a743b91e0079a82ff)
- [Arch Linuxに日本語環境を構築する](http://note.kurodigi.com/post-0-19/)
- [Arch Linux : AURヘルパー「yay」を試す | SlackNote](https://slacknotebook.com/testing-out-arch-linux-aur-helper-yay/)