ArchLinuxのインストール方法(最小構成)

#ArchLinuxとは
1. 軽量でシンプル
2. [公式wiki](https://wiki.archlinux.jp/)がつよい
3. カスタマイズしやすい
4. CLIに弱い初心者には[Manjaro](https://manjaro.org/)

- 誰でも一度は使ってみるべし
- 迷ったら[ArchWiki](https://wiki.archlinux.org/index.php/Installation_guide)に従うべし
- ~~ちなみにここの内容はほとんどwikiのコピペ~~

#インストール用メディアの準備

##1.ISOファイルを[ミラー](https://www.archlinux.org/download/)からダウンロード

- 速いので[mirrors.cat.net](https://mirrors.cat.net/archlinux/iso/latest/)がオヌヌメ

- ファイル名は "archlinux-2019.10.01-x86_64.iso" みたいな形式

##2.落としたISOファイルをUSBメモリやCD等に焼く

- USBの場合
 - Windowsの人は[Rufus](https://rufus.ie/)を使おう(書き込みはddモードを使う)
 - Linuxの人はddコマンドで焼こう↓↓

```shell:dd
~$ sudo dd bs=4M if=path/to/archlinux-20xx.xx.xx-x86_64.iso of=/dev/sdx status=progress && sudo sync
 #sdxの部分は適宜変更する。"sudo fdisk -l"の結果などを参考に
```
- CDに焼く場合
 - Windowsはシステム標準のやつで大丈夫
 - Linuxの人は[Brasero](https://ja.wikipedia.org/wiki/Brasero)を使うと無難

#起動

- UEFIやBIOS設定画面から、Archの入ったメディアを選択して起動する

- Windowsとのデュアルブートを考えているなら、Archの起動方法はWindowsの起動方法(UEFI or BIOS)に合わせる

#インストールする

...前に、キーボードのレイアウトを設定する
ここの設定はインストール先のArchには何ら影響がないので、好きなものを使って大丈夫

`ls /usr/share/kbd/keymaps/*/*/*.map.gz`でレイアウトの一覧が取得できる

```shell:キーマップの一時的な変更
~# loadkeys jp106
 #jp106の部分は任意で変更する
```

##1.ネットワークへの接続

###有線LAN
- 基本はすでにインターネットに繋がっているはず
- もし振られていなかったら、[ArchWiki](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#.E3.82.A4.E3.83.B3.E3.82.BF.E3.83.BC.E3.83.8D.E3.83.83.E3.83.88.E3.81.B8.E3.81.AE.E6.8E.A5.E7.B6.9A)を見て頑張って(丸投げ)

###無線LAN
- まず`ip link`して、インターフェース名を確認(例: 有線は`enp2s0`、無線は`wlp0s3`など)
- 下↓↓のコマンドを実行

```shell:WPA2なAPへの接続
~# wpa_supplicant -B -i いんたーふぇーす名 -c <(wpa_passphrase MYSSID PASSWORD)
 # "いんたーふぇーす名"と"MYSSID"と"PASSWORD"は適宜変更すること。
~# dhclient いんたーふぇーす名
```

- `ping -c 3 archlinux.org`が通ったらOK
- うまくいかない場合は、[ArchWiki](https://wiki.archlinux.jp/index.php/%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9%E8%A8%AD%E5%AE%9A)を見てがんばって(丸投げ)

##2.システム時計の更新
```shell
~# timedatectl set-ntp true
```

##3.ディスクのパーティショニング

```shell:インストール先を確認
~# fdisk -l
```

- インストールするディスクを見つけて、パーティションを切る
- もうすでにパーティションの割当が済んでいる場合は"ファイルシステムの作成"までスキップ

###パーティションの作成
- まずは編集画面(?)に移る

```shell
~# fdisk /dev/sdx
 # "sdx"は環境に合わせて適宜変えること。
```

####***ここから先は、UEFI起動とBIOS起動で手順が異なるので適宜判断してください***

####UEFIで起動させたい場合
- **ディスクをまるごと全部削除して**GPTテーブルを作成する
- パーティションを生かしたい(デュアルブート等で)場合はスキップ

```shell:ディスクを綺麗サッパリ飛ばす
# ディスクの内容が消えるので注意
Command (m for help): g
```

- UEFI用の特別なパーティション(**E**FI **S**ystem **P**artition : **ESP**)を作成する
- デュアルブートする人はここもスキップ。

```shell:ESP
Command (m for help): n
 Partition number (x-x, default x): 1   #デフォルトでOK
 First sector (x-x, default x):    #ここもデフォルトでOK
 Last sector, +/-sectors or +/-size{K,M,G,T,P} (x-x, default x): +500M  #100M以上必須
 #もしDo you want to remove the signatureなんちゃらって聞かれたら、Yを選ぶ

 Created a new partition x of type 'Linux filesystem' and of size 500 MiB.

Command (m for help): t
 Partition number (x,x, default x): 1    #もし聞かれたら、さっき作ったESPの番号を選択
 Partition type (type L to list all types): 1    #1を指定

 Changed type of partition 'Linux filesystem' to 'EFI System'.

Command (m for help): w    #変更を保存して終了する時はw、変更を破棄して終了する時はq
```

- **システムのインストール先として使用するパーティションを作成。(必須)**
- /homeとかを分割する場合はこのタイミングで作成する
- スワップについて、僕はスワップパーティションよりも[スワップファイル](https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB)を使うことを推奨している。(いつでも簡単に設定できるため。)スワップファイルの設定はここより後でする。


```shell:パーティション作成の例
~# fdisk /dev/sdx
 # "sdx"は各自の環境によって置き換えてね

 # ↓システムをインストールするパーティション
Command (m for help): n
 Partition number (x-x, default x):    #デフォルトでOK
 First sector (x-x, default x):    #デフォルトでもOK
 Last sector, +/-sectors or +/-size{K,M,G,T,P} (x-x, default x): +100G    #デフォルトでもOK
 #もしDo you want to remove the signatureなんたらって聞かれたら、Yを選ぶ

 Created a new partition x of type 'Linux filesystem' and of size 100 GiB.

Command (m for help): w
```

パーティションの作成が終わったら、"ファイルシステムの作成"へGO！

####BIOSで起動させたい場合
- **ディスクをまるごと全部削除して**MBRテーブルを作成します。
- パーティションを生かしたい(デュアルブート等の理由で)場合はここをスキップ

```shell
# ディスクの内容が消えるので注意
Command (m for help): o
```

- **システムで使用するパーティションを作成。(必須)**
- /homeとかを分割してパーティション切る場合はこのタイミングで作成する
- 僕はスワップパーティションよりも[スワップファイル](https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB)を使うことを推奨している。(いつでも簡単に設定できるため)スワップファイルの設定は後で説明する

```shell:パーティション作成の例
Command (m for help): n
 Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
 Select (default p):    #どっちでも大丈夫だが、primaryパーティションは一つのディスクに4つまでしか作れないので注意
 Partition number (1-4, default 1):    #お好きなものをどうぞ
 First sector (xxxx-xxxx, default xxxx):    #任意の値
 Last sector, +/-sectors or +/-size{K,M,G,T,P} (xxxx-xxxx, default xxxx): +100G    #任意の値(パーティションのサイズ)

 Created a new partition x of type 'Linux' and of size 100 GiB.
 # Do you want to remove the signature? [Y]es/[N]o: と聞かれたらYと答える

Command (m for help): w    #変更を書き込んで終了
```

##4.ファイルシステムの作成
- **古いデータを保持したい場合は、間違ってもデータの入ったパーティションをフォーマットしないように。**

###UEFIのみの特別な手順
- ESPをフォーマットする。**(デュアルブートするなら絶対に実行しないこと。)**

```shell:ESPの初期化
~# mkfs.fat -F 32 /dev/sdxy
 # "sdxy"はさっき作成したESPに合わせて適宜変更する(例:sda1)
```

###パーティションのフォーマットとマウント

- さっき作ったパーティションを実際に使える状態にフォーマットする
- データを保持したいもの以外は、全てフォーマットすること。

**データの入ったパーティションを誤ってフォーマットしないように、気をつけて(n回目)**

####1. EXT4
- [ext4](https://ja.wikipedia.org/wiki/Ext4) -よく聞くやつ。

```shell:Format
~# mkfs.ext4 /dev/sdxy
```

####2.BTRFS
- [btrfs](https://ja.wikipedia.org/wiki/Btrfs) -ネイティブでソフトウェアRAIDができるヤツ。ストレージ構成を頻繁に変えたりするならこいつ

```shell:Format
~# mkfs.btrfs /dev/sdxy
```
####3.F2FS
- [f2fs](https://ja.wikipedia.org/wiki/F2FS) -フラッシュメモリに特化したファイルシステム(eMMCとかNVMeなSSDに向いているらしい)

```shell:Format
~# mkfs.xfs /dev/sdxy
```

####4.XFS
- [xfs](https://ja.wikipedia.org/wiki/XFS) -速くて、良い(SSDに向いている)

```shell:Format
~# mkfs.xfs /dev/sdxy
```

####フォーマットの作業が終わったら、それらをマウントする

```shell
~# mount /dev/sdxy /mnt    #"sdxy"はルートパーティションにあわせて変更

 # UEFIの人はESPのマウントも必須
~# mkdir /mnt/boot
~# mount /dev/sdxy /mnt/boot    #"sdxy"はESPに合わせて変更すること。

 # 以下は/homeなどを分割してパーティショニングした人とかのみ必須
~# mkdir /mnt/home
~# mount /dev/sdxy /mnt/home    #"sdxy"は目的のパーティションに合わせて適宜変更すると。
```

必要なパーティションのマウントが完了したら、次のステップへ進む。

##5.ベースシステムのインストール
- さっきまで頑張って構築した環境に、ArchLinuxのベースをインストールする

###ミラーの選択
- 速いサーバーを指定しておけばパッケージのインストールにかかる総合の時間が短くなる(真理)
- cat.netのがjaistより速い気がする

```shell:mirrorlist
~# vim /etc/pacman.d/mirrorlist
```

ミラー鯖のリストがｽﾞﾗｰっと並んでいるが**全て**コメントアウトして、以下の行をアンコメントする。ミラーリストは上から読まれるのでこの順番が良いと思う。

```conf:/etc/pacman.d/mirrorlist
Server = http://mirrors.cat.net/archlinux/$repo/os/$arch
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
Server = http://mirrors.evowise.com/archlinux/$repo/os/$arch
Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch
```

(ちなみに↑↑の上2つは日本の鯖で、下2つはWorldWideな鯖)

###インストール
- ベースシステムをインストールする。(ちょっと前からカーネルとエディタを指定しないといけなくなった。)

```shell
~# pacstrap /mnt base base-devel linux vim git
 #もちろんlinux-zenやneovimなども使用可能
```

###fstabの自動生成
- fstabに関する詳しい説明は[ArchWiki](https://wiki.archlinux.jp/index.php/Fstab)を参照すること。

```shell:Fstabの生成
~# genfstab -U /mnt >> /mnt/etc/fstab
```

##6.新規環境の設定
- 新しくインストールしたシステムにchrootして、作業を続ける

```shell:まずはchroot
~# arch-chroot /mnt
```

- 日本向けにローカライズする

```shell:時計の設定
root# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
 #タイムゾーンを設定
root# hwclock --systohc
 #/etc/adjtimeを生成
```

```shell:言語の設定
root# vim /etc/locale.gen
 # en_US.UTF-8 と ja_JP.UTF-8 をアンコメント
root# locale-gen

root# echo LANG=en_US.UTF-8 > /etc/locale.conf
 # デフォルトの言語(英語)
root# echo KEYMAP=jp106 > /etc/vconsole.conf
 # キー配列を指定(任意)
```

- ネットワーク関連の設定

```shell:ホストネーム云々
root# echo HOGE > /etc/hostname
 #ホストネーム("HOGE"は適宜変更すること。)

root# vim /etc/hosts
 #以下2行を追記する
127.0.0.1	localhost
::1		localhost
```

###自動でインターネットに接続

####有線LANを使う場合
- IPを固定するには[netctl](https://wiki.archlinux.jp/index.php/Netctl)が便利そう。

```shell:有線LAN
root# pacman -S dhcpcd
root# systemctl enable dhcpcd
```

####[無線LAN](https://youtu.be/4uYNUJgVUzw)を使う場合
- [NetworkManager](https://wiki.archlinux.jp/index.php/NetworkManager)がオヌヌメ
- **NetworkManagerの場合、インストールが完了した後に[nmtui](https://wiki.archlinux.jp/index.php/NetworkManager#nmtui)等のコマンドで無線LANの設定する必要がある**

```shell:無線LANを使う場合
root# pacman -S wpa_supplicant networkmanager dhcpcd
root# systemctl enable NetworkManager
```

###rootのパスワードを設定

```shell:ROOTのパスワード
root# passwd
```

##7.一般ユーザーの追加
- 普段からrootを使うのもセキュリティがアレなので、一般ユーザーを追加する。

```shell:ユーザーの追加
root# useradd -mG wheel ゆーざー名
root# passwd ゆーざー名
 # パスワードの設定をお忘れなく。

root# visudo
 # ↓のように設定する
 %wheel ALL=(ALL) ALL
  #↑これをアンコメントすると、sudoを使うときにパスワードを要求される
 %wheel ALL=(ALL) NOPASSWD: ALL
  #↑これをアンコメントすると、sudoがパスワードなしでガンガン使える
```

##8.ブートローダーの設定
- 今の状態ではまだArchを起動できないので、起動できるようにする。

###UEFI起動の場合
- [systemd-boot](https://wiki.archlinux.jp/index.php/Systemd-boot)と[GRUB](https://wiki.archlinux.jp/index.php/GRUB)を選べる(ここではGRUBのインストール方法を説明)

```shell:GRUB
root# pacman -S grub efibootmgr
root# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
 #この段階で/etc/default/grubでgrubの設定ができる(よくわからないなら、いじらないで大丈夫)
root# grub-mkconfig -o /boot/grub/grub.cfg
```

###BIOS起動の場合

```shell:GRUB
root# pacman -S grub
root# grub-install --target=i386-pc /dev/sdx
 #たとえamd64なCPUのマシンでも--targetにはi386-pcを指定する。
 #"sdx"はArchをインストールしたディスクに適宜変更。間違ってパーティション番号つけるとエラーになる(sda1とかはNG)
 #/etc/default/grubをいじりたい人はいじる
root# grub-mkconfig -o /boot/grub/grub.cfg
```
- [ArchWiki](https://wiki.archlinux.jp/index.php/GRUB#.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.B3.E3.82.84.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.B3.E3.83.AC.E3.82.B9.E3.83.87.E3.82.A3.E3.82.B9.E3.82.AF.E3.81.AB.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB.E3.81.99.E3.82.8B)には特定のパーティションにブートローダーをインスコする方法も載ってる(つよい)

###他のOS(Windowsとか)とデュアルブートしたい場合

```shell
root# pacman -S os-prober ntfs-3g
 # ntfs-3gをインストールするとArchでNTFSを読み書きできるようになる
root# grub-mkconfig -o /boot/grub/grub.cfg
```

とすればOK

##chrootから抜ける
- 再起動できないなぁ、と思ったらchroot中だった、ということのないように。

```shell
root# exit
```

#仕上げ

##NetworkManager
- chroot環境では作業できないので、**インストールが完了して再起動した後**にこれを実行する。

```shell
~$ sudo nmtui
```
- **nmtuiの使い方**
 - 十字キーとEnterで操作する
 - Activate a connectionを選択する
 - あとはわかるはず(頑張って)

- nmtuiがよくわからん人は↓↓をどうぞ

```shell:nmcliでの設定例
~$ sudo nmcli dev wifi con MYSSID password FUGAFUGA
 # MYSSIDとFUGAFUGAは、それぞれルーターのSSIDとパスワードに置き換える
```

##再起動

- Running in chroot, ignoring requestとか怒られた人、**ちゃんとインストールを完了してから設定しましょう(戒め)**


##(古いPCでたまにある)無線LANを認識できない人
- [wiki](https://wiki.archlinux.jp/index.php/ワイヤレス設定)見てください(´・ω・｀)
- 初心者の方は別のディストロを試したほうがいいかもしれません

##超オヌヌメな奴
- [yay](https://aur.archlinux.org/packages/yay/) -AURヘルパーってやつ(らしい)。導入するとパッケージの管理が114514倍楽になる
- オプションとかはPacmanとそこまで変わらないが、AURのパッケージの導入がマジで楽になる
 - 留意点: sudoをつけたり、rootからだと実行**できない**(makepkgの段階でしくじる)

```shell:導入方法
~$ sudo pacman -S git
~$ git clone https://aur.archlinux.org/yay
~$ cd yay && makepkg -si --noconfirm && cd .. && rm -rf yay
```



以上！