Arch Linux Installation Battle

この記事は，今回，デスクトップ用途で Arch Linux をインストールし，その後基礎的な環境セットアップまで行った戦いの記録を，およそ未来の自分のために簡単に書き残したものです．
基本的には，ArchWiki の [Installation guide](https://wiki.archlinux.org/index.php/Installation_guide) や [General recommendations](https://wiki.archlinux.org/index.php/General_recommendations) を参照しつつ進めます．日本語訳もあります．

今回インストールに使用したマシンは NEC LAVIE Direct PM です．

## Arch Linux のインストール
### 前準備
Arch Linux の USB インストールメディアを準備し，PC に挿します．
PC 起動後すぐのメーカーロゴで `F2` を連打し，青い設定画面を立ち上げます．ここで Secure Boot を無効化し，デバイス起動順序も変更（USB device を最上位へ）します．
保存して再起動し，USB から Arch Linux を立ち上げると，自動で root にログインします．
今回キーボードは日本語配列なので，以下のコマンドで読み込んでおきます．

```
$ loadkeys jp106
```

### パーティショニング
NEC 公式から購入した新品なので Windows10 が入っていますが，デュアルブートはしないので，Windows くんには消えてもらいます．

```
$ sgdisk -z /dev/nvme0n1
$ sgdisk -n 1:0:+512M -t 1:ef00 -c 1:"EFI System" /dev/nvme0n1
$ sgdisk -n 2:0: -t 2:8300 -c 2:"Linux filesystem" /dev/nvme0n1
```
`/dev/nvme0n1` は環境に合わせて読み替えます．
また，構成は `lsblk` で適宜確認できます．

### フォーマット
```
$ mkfs.vfat -F32 /dev/nvme0n1p1
$ mkfs.ext4 /dev/nvme0n1p2
```

### マウント
```
$ mount /dev/nvme0n1p2 /mnt
$ mkdir /mnt/boot
$ mount /dev/nvme0n1p1 /mnt/boot
```

### システムインストール
ディスクにインストールしていきます．
`pacstrap` はそこそこ時間がかかります．

```
$ wifi-menu		# 無線接続
$ vim /etc/pacman.d/mirrorlist
$ pacstrap -i /mnt base base-devel linux linux-firmware
$ genfstab -U -p /mnt >> /mnt/etc/fstab
```

インストールしたシステムに潜って作業します．

```
$ arch-chroot /mnt
$ echo "Arch Linux" > /etc/hostname
$ ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ pacman -S vi	# なんか入ってなかった……
$ vi /etc/locale.gen
   # 以下の行を uncomment
   # en_US.UTF-8 UTF-8 
   # ja_JP.UTF-8 UTF-8
$ locale-gen
$ echo "LANG=en_US.UTF-8" > /etc/locale.conf
$ mkinitcpio -p linux
$ passwd 		# root のパスワードを設定
```

### ブートローダインストール
難敵ブートローダくんです．Systemd-boot を使います．

```
$ bootctl --path=/boot install
$ cp /usr/share/systemd/bootctl/arch.conf /boot/loader/entries/
$ pacman -S intel-ucode
$ blkid -s /dev/nvme0n1p2 -o value /dev/nvme0n1p2 >> /boot/loader/entries/arch.conf
$ vi /boot/loader/entries/arch.conf
```

`/boot/loader/entries/arch.conf` ファイルの内容は以下のように編集します．

```/boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=/dev/nvme0n1p2 rw noefi
```

ブートローダ は GRUB がメジャーっぽいですが，4年くらい前（2016年頃）は GRUB が NVMe 未対応でブートできませんでした．最近は対応してできるようになっているかもしれませんが，調べてないのでわかりません．
【参考】
[ArchLinuxをインストールした - ふれめも](http://flareolatry.hatenablog.com/entry/2016/07/09/084058)
[VAIO Z で Arch LinuxとWindows 10をデュアルブートする - Qiita](https://qiita.com/mopp/items/f1912433abbed69f5f99)


### 再起動
リブートして本体ディスクから起動しますが，その前にワイヤレス接続のための諸々を入れておきます．

```
$ pacman -S linux-headers netctl wireless_tools wpa_supplicant dialog net-tools
$ exit
$ umount -R /mnt
$ reboot
```

うまく起動すれば，インストールは成功です．

## インストール後の基本設定
root でログインし，無線接続します．

```
$ wifi-menu
```

マシンのキーボードは日本語配列を使うので，設定を書いておきます．

```
$ echo "KEYMAP=jp106" > /etc/vconsole.conf
```

### ユーザの追加
ログインシェルに Z shell を使いたいので，最初に入れておきます．
ついでに sudo 設定も行います．

```
$ pacman -S zsh
$ which zsh		# /usr/bin/zsh
$ useradd -m -G wheel -s /usr/bin/zsh flare
$ passwd flare
$ visudo
   # 以下の行を uncomment
   # %wheel ALL=(ALL) ALL
   # %wheel ALL=(ALL) NOPASSWD: ALL
$ exit			# ログアウト
```

`flare` は私のユーザ名なので，自分のものに読み替えます．
また，`sudo` するたびにパスワード入力を求めたい場合は，`%wheel ALL=(ALL) NOPASSWD: ALL` をコメントアウトしたままにしておきます．

### 電源管理
省電力化のための便利アイテムを入れて起動します．
ここからは先程追加したユーザ（root でない）でログインして作業しています．

```
sudo pacman -S powertop tlp
sudo systemctl enable tlp
sudo systemctl start tlp
```
### AUR helper
R.I.P. yaourt... 代わりに yay を使います．
DL のために Git が必要です．

```
sudo pacman -S git
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
cd ../ && rm -rf yay
```



### X 環境の準備
X Window System 関連を準備します．

```
$ sudo pacman -S xorg xorg-xinit xorg-drivers xorg-apps
$ lspci | grep -e VGA -e 3D		# Intel Corporation UHD Graphics 620
$ sudo pacman -S xf86-video-intel
```

ドライバの対応表は [Xorg - ArchWiki](https://wiki.archlinux.org/index.php/Xorg#Driver_installation) にあります．

X 環境で使うターミナルをインストールします．Termite を入れました．

```
sudo pacman -S termite
```

### ウィンドウマネージャ
XMonad を使います．XMonad はいいぞ！

```
$ sudo pacman -S xmonad xmonad-contrib
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
```
X で XMonad が起動するよう，`~/.xinitrc` の末尾を以下のように編集します．

```&tilde;/.xinitrc
...（略）...

# twm &
# xclock -geometry 50x50-1+1 &
# xterm -geometry 80x50+494+51 &
# xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name login

exec xmonad
```

また， `~/.xmonad/xmonad.hs` に XMonad の（自分的に）最低限の設定を書いておきます．

```haskell:&tilde;/.xmonad/xmonad.hs
import XMonad

main = do
  xmonad $ defaultConfig
    { terminal = "termite"
	, modMask = mod4Mask
    }
```

`xmonad --recompile` でコンパイルして反映します．
`startx` で GUI（XMonad）に移行します．`mod + Shift + Enter` でターミナル起動，`mod + Shift + c` でウィンドウクローズ，`mod + Shift + q` で XMonad が終了します．上のような `~/.xmonad/xmonad.hs` を書いていれば `mod` は `Super`（Windows キー），そうでない素の状態なら `Alt` です．

### タッチパッド設定
libinput で管理します．素の状態だとタッチパッドを押し込まないとクリックとして認識してくれないので，タップでクリックできるように設定します．
以下のような `/etc/X11/xorg.conf.d/30-touchpad.conf` を作成します．

```/etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass"
	Identifier "touchpad"
	Driver "libinput"
	MatchIsTouchpad "on"
	Option "Tapping" "on"
EndSection
```

### 日本語入力
fcitx で Mozc を使います．

```
$ sudo pacman -S fcitx-im fcitx-mozc fcitx-configtool
```

`~/.xinitrc` の `exec xmonad` の前に設定を書き足します．

```&tilde;/.xinitrc
...（略）...

# twm &
# xclock -geometry 50x50-1+1 &
# xterm -geometry 80x50+494+51 &
# xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name login

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
fcitx-autostart &

exec xmonad
```
`fcitx-configtool` で設定画面を開き，Input method を Mozc のみに設定します．
Mozc の IME 設定は `/usr/lib/mozc/mozc_tool --mode=config_dialog` で開くことができます．

### サウンド管理

```
sudo pacman -S pulseaudio
```

`pactl` コマンドで音量管理します．

### フォント
ターミナル用のフォントとして Ricty を入れます．
本当は `yay -S ttf-ricty` をすれば良いだけなのですが，スクリプトの場所の変更が git に反映されていないようで，うまくいきません（2020年2月現在）．なので，リポジトリを clone してきて `PKGBUILD` 中の URL を編集し，手動でビルドします．

```
$ yay -S ttf-ricty		# ricty_generator.sh の DL でコケる
$ sudo pacman -S ttf-inconsolata
$ yay -S ttf-migu
$ git clone https://aur.archlinux.org/ttf-ricty.git
$ cd ttf-ricty
$ vi PKGBUILD
   # http://www.rs.tus.ac.jp/yyusa/ricty/ricty_generator-4.1.1.sh を
   # http://www.yusa.lab.uec.ac.jp/~yusa/ricty/ricty_generator-4.1.1.sh に変更
$ makepkg -si
$ cd ../ && rm -rf ttf-ricty
```

【参考】
[AUR (en) - ttf-ricty](https://aur.archlinux.org/packages/ttf-ricty/)
[brewでRictyがインストールできない！ - Qiita](https://qiita.com/tororu/items/60be4385853860c05fad)


以上です．