2018年 ArchLinuxで開発環境を作る完全版 (UEFI + GNOME3 + GRUB) - インストール編

## インストール前に
### BIOSの設定
- SATAデバイスをAHCIモードに設定
- BootモードをUEFIへ
- Legacy Boot? Load Legacy Option RomをDisabledへ
- Secure Bootモードの解除

### インストールメディアの入手
- [https://www.archlinux.jp/download/](https://www.archlinux.jp/download/)
- ISOをCDに焼くか、USBメモリーに書き込む
- PC起動

## ArchLinuxのインストール
### UEFIで起動しているか確認
インストールメディアから起動後、rootで自動ログインしたarchisoのプロンプトが立ち上がる。 
プロンプトが表示されたら、UEFIモードで起動したか確認する。UEFIモードで起動している場合は、/sys/firmware/にefiというディレクトリが存在する。もし、UEFIモードで起動していなかったら、UEFI BIOSの設定などを見直す。

```zsh
ls /sys/firmware/
apci dmi efi memmap
```
###  キーボードレイアウトの設定(日本語キーボードの場合)
```zsh
loadkeys jp106
```
### 別PCからSSHで接続
```zsh
ip addr # IPアドレスを確認
passwd  # rootパスワードの変更
systemctl start sshd
```
なぜかThinkpad X250の有線LAN(dhcp)が繋がらないので手動で固定IPに設定した。
アダプタ名は私の環境ではenp0s25 or eno1でした。ip aコマンドで調べてください。

```zsh
ip a
# (例えば動的 IP に切り替える前に)、まず割り当てた IP アドレスをすべて削除します:
ip addr flush dev enp0s25
# 次に割り当てたゲートウェイをすべて削除します:
ip route flush dev enp0s25
#最後にインターフェイスを無効化します:
ip link set enp0s25 down
ip link set enp0s25 up
ip addr add 192.168.0.2/24 broadcast 192.168.0.255 dev enp0s25
ip route add default via 192.168.0.1
```
### パーティションの設定
私は以下のようにパーティションを分けているけど、分けずに/boot、/、だけでも問題ない。

| パーティション | フォーマット | 用途 | マウントポイント | サイズ |
| ---- | ---- | ---- | ---- | ---- |
| /dev/sda1 | fat32 | UEFI System Partition | /boot | 512MB |
| /dev/sda2 | swap | swap領域(作るなら) | - | 8GB |
| /dev/sda3 | ext4 | root | / |	40GB |
| /dev/sda4 | ext4 | home | /home | 残り全て |

#### swap領域に関して
- メモリ大量に積んでる場合は不要。thinkpad x250へは作ったけど、hp z820へは作っていない。
- archwikiによると2GB 以上の物理 RAM を持っているなら、スワップパーティションがないほうが一般的に良いパフォーマンスを発揮すると思われますとのこと。
- ただノートPCでハイバーネートを使用する場合は要作成。物理RAMの同等か2倍を確保する。

/dev/sda の箇所は各自の環境に要修正

```zsh
lsblk
gdisk /dev/sda

# 1. n でESP(EFI System Partition)の作成
Command (? for help):n
Permission number: 1
First sector     : 何も押さずエンター
Last sector      : +512M
Hex code or GUID : EF00

# 2. n でswapパーティション作成(作らなくても良い)
Command (? for help):n
Permission number: 2
First sector     : 何も押さずエンター
Last sector      : +8G
Hex code or GUID : 8200

# 3. n でrootパーティション作成
Command (? for help):n
Permission number: 3
First sector     : 何も押さずエンター
Last sector      : +40G
Hex code or GUID : 8300

# 4. n でhomeパーティション作成
Command (? for help):n
Permission number: 4
First sector     : 何も押さずエンター
Last sector      : 何も押さずエンター、残りの領域すべてを使用
Hex code or GUID : 何も押さずエンター

# 5. p で出来栄えを確認．

# 6. w で書き込む．
```

### パーティションのフォーマット
※ swapを作っていなければ以下のようになる
- sda2 : /root
- sda3 : /home

```zsh
lsblk /dev/sda
mkfs.vfat -F32 /dev/sda1  # ESPの初期化 デュアルブートではなくEFIBOOTを作成した場合
mkfs.ext4 /dev/sda3       # /root
mkfs.ext4 /dev/sda4       # /home
mkswap /dev/sda2          # swapの初期化 swap領域を作成した場合
swapon /dev/sda2          # swap領域を作成した場合
```

###  パーティションのマウント
※ swapを作っていなければ以下のようになる
- sda2 : /root
- sda3 : /home

```zsh
mount /dev/sda3 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
mkdir /mnt/home
mount /dev/sda4 /mnt/home
```

### ミラーサイトの優先順位を変更して、日本のサーバーを優先的に見に行くようにします。Japanと書かれている行を先頭に移動させます。
```zsh
vim /etc/pacman.d/mirrorlist
```

### ベースシステムのインストール (インストールに必要なもの含む)
```zsh
pacstrap /mnt base base-devel intel-ucode gvim dosfstools openssh ccache zsh zsh-completions zsh-syntax-highlighting
```

###  fstabを自動生成します。
```zsh
genfstab -U -p /mnt >> /mnt/etc/fstab
```

### chroot環境に入る。
```
arch-chroot /mnt /bin/bash
```

### HostNameを設定します。YOUR_HOSTNAMEの部分は自由に変えてください。
```zsh
echo YOUR_HOSTNAME >> /etc/hostname
```

### ホストマシン側に合わせて、日本時間でタイムゾーンをセットしておきます。
```zsh
mv /etc/localtime /etc/localtime.org
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc --localtime
```

### ロケールを設定します。en_US.UTF-8とja_JP.UTF-8の部分のコメントを外しておきます。
```zsh
vim /etc/locale.gen
```

### locale-genを実行して反映させます。
```zsh
locale-gen
```

### システムで使う言語をとりあえず英語に設定します。(最初は文字化けするので)
```zsh
echo LANG=en_US.UTF-8  >> /etc/locale.conf
export LANG=en_US.UTF-8
```

### キーボードレイアウトの設定(日本語キーボードの場合)
```zsh
loadkeys jp106
vim /etc/vconsole.conf

KEYMAP=jp106
```

### rootのパスワードを設定します。
```zsh
passwd
```

### ネットワーク起動を自動化します。
- まずアダプタ名を調べます。ip aコマンドで調べてください。私の環境ではenp0s25でした。
- その情報を元に設定ファイルを書きます。

```zsh
vim /etc/systemd/network/wired.network

[Match]
Name=enp0s25

[Network]
DHCP=ipv4
```

#### 最後にsystems-netowrkdとsystemd-resolvedを有効にします。
```zsh
systemctl enable systemd-networkd
systemctl enable systemd-resolved
```

### ブートローダのインストールと設定
GRUBはBIOSでもUEFIでも使えますが、手順が異なります。 ここではUEFIの場合の方法を記述します。

```zsh
pacman -S grub efibootmgr dosfstools efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
grub-mkconfig -o /boot/grub/grub.cfg
```

### ユーザーの作成
インストール後に使う一般ユーザーを作成します。USER_NAMEの部分をお好きなものに変更してください。

```zsh
useradd -m -G wheel -s /bin/zsh USER_NAME
passwd USER_NAME
```
sudoが使えるように設定しておきます。

```zsh
visudo

# 以下の行のコメントを外すだけでOKです。
%wheel ALL=(ALL) ALL
```

### インストールの完了
chroot環境を抜けて再起動すれば終了です。リブート時に勝手にアンマウントしてくれるのでその辺は心配しなくて大丈夫です。

```zsh
exit
reboot
```

## ArchLinuxのインストール – デスクトップ環境構築
### 再起動後、ssh接続の設定
```zsh
sudo systemctl enable sshd
sudo systemctl start sshd
```
再度、別PCからSSHで接続し設定作業を行います。

### systemd-resolvedの設定
このままだとDNS解決ができないので、設定していきます。
まずは/etc/resolve.confをsystemdで用意した物に差し替えます。

```zsh
sudo mv /etc/resolv.conf /etc/resolv.conf.orig
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
```
続いて/etc/nsswitch.confのdnsをresolvに書き換えます。

```zsh
sudo sed -i -e 's/hosts: files dns/hosts: files resolve/g' /etc/nsswitch.conf
```

### リポジトリの編集
yaourtとmultilibが利用できるようにしましょう。設定ファイルを開きます。

```zsh
sudo vim /etc/pacman.conf

# multilibのコメントを外します。
[multilib]
Include = /etc/pacman.d/mirrorlist

# 末尾にこれを付け足します。
[archlinuxfr]
SigLevel = Optional TrustAll
Server = http://repo.archlinux.fr/$arch
```
あとはリポジトリを再読込して、yaourtを導入しましょう。

```zsh
sudo pacman -Syu
sudo pacman -S yaourt
```

### X Window Systemのインストール
```zsh
sudo pacman -S xorg-server xorg-apps xorg-xinit xorg-xclock xterm
lspci | grep VGA # 何をインストールすればいいのか確認
sudo pacman -S xf86-video-intel # ThinkpadX250はintelのグラフィックドライバをインストール
sudo pacman -S nvidia nvidia-settings # NVIDIA Geforceであれば、nvidiaをインストール
sudo nvidia-xconfig #(nvidiaをインストールした場合)
sudo nvidia-settings #(nvidiaをインストールした場合)
```

### バージョン情報を読み取れるようにしておきます。
```zsh
su -c "cat /proc/version > /etc/arch-release"
```

### Thinkpad X250 タッチパッドの設定 (完全に私専用のメモ)
```zsh
sudo pacman -S xf86-input-synaptics
sudo vim /etc/X11/xorg.conf.d/70-synaptics.conf

Section "InputClass"
    Identifier "touchpad catchall"
    Driver "synaptics"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    #Option "TapButton1" "1"
    #Option "TapButton2" "2"
    #Option "TapButton3" "3"
    Option "VertScrollDelta"  "-111"
    Option "HorizScrollDelta" "-111"
    # 横エッジスクロール
    Option "HorizEdgeScroll" "on"
    # 縦エッジスクロール
    Option "VertEdgeScroll" "on"
    # 左右同時クリックで中ボタン
    Option "Emulate3Buttons" "on"
    # 二本指による縦スクロールを有効にする
    Option "VertTwoFingerScroll" "on"
EndSection
```
### GNOMEの導入
```zsh
sudo pacman -S gnome gnome-tweaks gedit
sudo systemctl enable gdm
```

### 日本語フォントの導入
```zsh
yaourt -S otf-ipaexfont ttf-ricty adobe-source-sans-pro-fonts
```
### fcitxの導入
日本語を入力するため、fcitxとfcitx-mozcをインストールする

```zsh
sudo pacman -S fcitx-im fcitx-mozc fcitx-configtool
```
.xprofileに追記する

```zsh
vim ~/.xprofile

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
```

#### GNOME / Wayland 上での Fcitx の利用
Wayland は ~/.xprofile に保管された環境変数を読み込むことができないため、Wayland 上で Fcitx を使うときは /etc/environment で環境変数を設定してください。

```zsh
sudo vim /etc/environment

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
DefaultIMModule=fcitx
```

### NetworkManagerの導入
NetworkManagerを導入する際にはntctlやwicdなどを無効化しておく

```zsh
sudo pacman -S networkmanager network-manager-applet xfce4-notifyd
sudo systemctl enable NetworkManager.service
```

### システムで使う言語を日本語に設定します。
```zsh
sudo echo LANG=ja_JP.UTF-8 >> /etc/locale.conf
```
### デスクトップ環境までのインストール完了
再起動します。再起動後はデスクトップが起動します。

```zsh
exit
reboot
```