自作PCにArch Linuxをインストールして環境構築する

core i7 4790K と Z97 extreme4 による自作PCにArch Linuxを入れた時の手順メモ。

# インストールメディアのブート
ここではUSBメモリでインストールメディアを作成しブートする。

## USBメモリにisoを焼く
https://www.archlinux.org/download/ からisoを落としておく。

```bash
hdiutil convert -format UDRW -o arch archlinux-2023.07.01-x86_64.iso
diskutil list # 焼きたいUSBメモリのパスを確認 (/dev/disk2 だったとする)
sudo dd if=arch.dmg of=/dev/disk2 bs=1m
```

### ddがresource busyになる場合
先にアンマウントしておく必要がある。

```bash
df # /dev/disk2 の Mounted on を確認 (/Volumes/Arch だったとする)
diskutil umount /Volumes/Arch
sudo dd if=arch.dmg of=/dev/disk2 bs=1m
```

## USBメモリをUEFIブートする
UEFIブートでセットアップするため、インストールメディアからUEFIブートしておく。
マシン起動時にF2を押してUEFIの設定画面に入り、USBメモリがUEFIブートされるように設定して再起動し、Boot Arch Linux (x86\_64) を選択。/sys/firmware/efi が存在すればOK。

# OSのインストール
https://wiki.archlinux.org/index.php/Installation_guide を見て進める。

## 初期設定
### キーボード
```
loadkeys jp106
```

### パーティショニング
https://wiki.archlinux.org/index.php/Partitioning によるとMaster Boot RecordとGUID Partition Tableの2つのやり方があり、後者のほうがモダンらしいので後者でやる。
ブートローダーにはGRUBを使うことにする。

[https://wiki.archlinux.org/index.php/Beginners'\_guide](https://wiki.archlinux.org/index.php/Beginners'_guide) を参考にした。

#### パーティションの作成
EFI system partitionを作っておく必要がある。

```bash
lsblk | grep -v "rom\|loop\|airoot" # SSDがsda、USBメモリがsdbだった
parted /dev/sda # partedのインタラクティブシェルでSSDをいじり始める
(parted) mklabel gpt
(parted) mkpart ESP fat32 1MiB 513MiB
(parted) set 1 boot on
(parted) mkpart primary ext4 513MiB 100%
(parted) quit
```

#### ファイルシステムの初期化

```bash
lsblk /dev/sda # /dev/sda1がESP、/dev/sda2がrootパーティションであることを確認
mkfs.vfat -F32 /dev/sda1
mkfs.ext4 /dev/sda2
```

#### パーティションのマウント

```bash
mount /dev/sda2 /mnt # /mntにrootパーティションをマウント
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot # /mnt/bootにESPをマウント
```

### インターネット接続
設定済みの無線LANルータに有線でつないで`reboot`したら`ping google.com`が通るようになった。

### ハードウェアクロックの更新

```bash
timedatectl # 確認
timedatectl set-time "2015-08-15 16:00:30" # UTCの時計をインターネットで眺めて合わせる
```

## インストール
### パッケージのインストール
```bash
vim /etc/pacman.d/mirrorlist # 日本かUS以外のミラーをコメントアウトする
pacstrap -K /mnt base linux linux-firmware
```

いろいろ入る

### 初期設定

```bash
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
ln -sf /usr/share/zoneinfo/Japan /etc/localtime # あるいは PST8PDT
hwclock --systohc
vi /etc/locale.gen # en_US.UTF-8とja_JP.UTF-8の行のコメントを外す。最初からja_JPだけでやると豆腐になる。
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
echo KEYMAP=jp106 > /etc/vconsole.conf
echo arch > /etc/hostname # 好きに選ぶ
passwd # rootパスワードを設定
```

### GRUBのインストール
ブートローダーにGRUBを選んだので https://wiki.archlinux.org/index.php/GRUB を読む。

```bash
pacman -S grub efibootmgr
lsblk /dev/sda # これがArchをインストールしたドライブか確認
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ArchGRUB
grub-mkconfig -o /boot/grub/grub.cfg
```

### dhcpcdをいれておく

```
pacman -S dhcpcd
```

### 再起動

```
exit
umount -R /mnt
reboot
```

これで素のArch Linuxがブートされるようになる。

# GUI環境のセットアップ
CUIだけしか使えない状態から普通にブラウザが見れる状態まで持っていきます。

## 足場固め

```bash
# 再度ネットにつながるようにする
systemctl enable dhcpcd.service
systemctl start dhcpcd.service

# 非rootユーザー作成
useradd -m -g wheel k0kubun
passwd k0kubun
pacman -S sudo
visudo # 「Defaults env_keep += "HOME"」と「%wheel ALL=(ALL) ALL」を有効に
su k0kubun
```

## デスクトップ環境
### X.orgのインストール

```bash
pacman -S xorg-server xorg-server-utils xorg-xinit xterm
```

### ドライバのインストール
```bash
lspci | grep VGA # 何をインストールすればいいのか確認
pacman -S xf86-video-intel # intelの場合
```

### GNOMEのインストール

```bash
pacman -S gnome gnome-tweak-tool 
echo "exec gnome-session" > ~/.xinitrc
startx
xset r rate 200 80 # 操作しにくいのでキーリピートを上げておく
```

### 解像度の設定
HiDPIにする時は以下のようにする。

```bash
echo "Xft.dpi: 180" > ~/.Xdefaults
```

## yaourt 導入
非公式パッケージをいれるためにyaourtをいれる。
**yaourtは開発が終了しています。**([Requesting official statement from developers · Issue #382 · archlinuxfr/yaourt](https://github.com/archlinuxfr/yaourt/issues/382))
下記から開発が継続しているパッケージマージャーを使用してください。
[AUR ヘルパー - ArchWiki](https://wiki.archlinux.jp/index.php/AUR_%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC)

```bash
sudo vim /etc/pacman.conf # 以下を足す
# [archlinuxfr]
# Server = http://repo.archlinux.fr/$arch
# SigLevel = Never
sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman -Syy
sudo pacman -S package-query
sudo pacman -S yaourt
```

## 日本語
### Input Method
ibus-skkを使うことにした。

```bash
yaourt -S ibus ibus-qt ibus-skk
ibus-setup # skkを選択
```

### 日本語フォント
```bash
sudo pacman -S base-devel # ないとビルドできない
yaourt -S ttf-ricty
```

あとは adobe-source-sans-pro-fonts とかもいれておく。

## dotfilesの適用
この辺で普段使っている設定ファイルを適用しておく。

```bash
sudo pacman -S git vim zsh tmux
cd
mkdir -p src/github.com/k0kubun
git clone https://github.com/k0kubun/dotfiles src/github.com/k0kubun/dotfiles

ln -sf src/github.com/k0kubun/dotfiles/config/.Xdefaults .Xdefaults
ln -sf src/github.com/k0kubun/dotfiles/config/.xinitrc .xinitrc
ln -s src/github.com/k0kubun/dotfiles/config/.gtkrc-2.0 .gtkrc-2.0
ln -s src/github.com/k0kubun/dotfiles/config/.vim .vim
ln -s src/github.com/k0kubun/dotfiles/config/.vimrc .vimrc
ln -s src/github.com/k0kubun/dotfiles/config/.zsh .zsh
ln -s src/github.com/k0kubun/dotfiles/config/.zshrc .zshrc
ln -s src/github.com/k0kubun/dotfiles/config/.zshrc.Linux .zshrc.Linux
ln -s src/github.com/k0kubun/dotfiles/config/.tmux.conf .tmux.conf
ln -s src/github.com/k0kubun/dotfiles/config/.tmux.conf.arch .tmux.conf.arch

chsh
```

~/.vim/dict/skk/SKK-JISYO.L を辞書に指定

# アプリケーションのインストール
ブラウザとターミナルとTwitterクライアントがあれば生活できるのでその2つを入れる。

## Google Chrome

```bash
yaourt -S google-chrome
```

なんかfakerootが入ってなくて落ちるので入れたりとか、なんかのコマンドがSEGVしてるけど無視したりとか。
`google-chrome-stable`を叩くと起動する。

## urxvtをいれる
```
sudo pacman -S rxvt-unicode
```

`urxvt`とか叩くと立ち上がる。

## Nocturnを入れる

```
yaourt -S nocturn
```

`nocturn`で立ち上がる。

# その他メモ
忘れやすい設定など

## GNOMEでのibus-skkの有効化
ibus-setupではなく、設定 > 地域と言語 > 入力ソース から選ぶ

## GNOMEのHiDPI
```bash
gsettings set org.gnome.desktop.interface scaling-factor 2
```

## GNOMEの画面端でウィンドウが拡大するのを無効にする
```bash
gsettings set org.gnome.shell.overrides edge-tiling false
```

## GNOMEのキーボードショートカット
設定 > キーボード

- alfredっぽい奴
  - システム > コマンド実行プロンプトを表示

`yaourt -S wmctrl`した後 http://qiita.com/k0kubun/items/0d47bf982c6d39b1147a を追加

## gnome-shell-frippery
`yaourt -S gnome-tweak-tool`で 拡張機能 > Frippery move clock

## gnomeのDock出しっぱなし
`yaourt -S gnome-tweak-tool`で 拡張機能 > Dash to Dock。インテリジェント表示を無効にし、ドック上でスクロールしたらスペースを切り変えるを無効にする。不透明度の調整で不透明度を下げる。

## tmuxのコピー/ペーストが動かない
`yaourt -S xclip`と.tmux.conf.localの確認。
`yaourt -S urxvt-perls`。