オレオレArchLinuxインストール方法

# はじめに

みなさん，OSは何を使っていますか？Windows，macOS，Ubuntuなどいろいろあると思います。「俺はWindowsが使いたいからWindowsなんだ!!!」という方や「Appleの洗練されたOS，非常に美しい...」と思っている方もおられる事でしょう。そのような方は是非使いたいOSを存分に使ってください。しかし，「みんなWindows使ってるしちょっと使いづらいけどWindowsでいいか...」という方や「macOSはいいんだけどもうちょっとカスタマイズしたいな...」という方には是非今から紹介するOS，**Arch Linux**を試してみて欲しいと思います。

### Arch Linuxについて

[公式ページ](https://www.archlinux.jp/about/) の説明が非常に簡潔でわかりやすかったので引用しておきます。
> Arch Linux は、x86-64 向けに独自に開発された、あらゆる用途に対応できる万能 GNU/Linux ディストリビューションです。その開発は、シンプリシティ、ミニマリズム、およびコードの簡潔性に焦点を当てています。Arch は最小限の基本システムの状態でインストールされ、ユーザー自身が、ユーザーの理想とする環境のために必要なものだけをインストールして構築することができます。
Arch はローリングリリースモデルをベースとしており、常に最先端であるように努め、ほとんどのソフトウェアは最新の安定バージョンが提供されます。

重要なところを簡単にまとめると
- 余計なものが入っていない
    - 自分に必要なものだけをインストールし，カスタマイズできる
- ローリングリリースモデルを採用
    - バージョン○○のように定期的にアップデートされるわけではなく，ユーザーがアップデートをしようとしたタイミングでの最新版がユーザーに提供される

### AURについて

ArchLinuxにはAUR(Arch User Repository)という巨大なパッケージリポジトリがあります。これを用いることで，あらゆるソフトウェアを簡単にインストールすることができます。Microsoft storeやAppStoreのでかい版だと思ってもらって大丈夫だと思います。

# インストール

さて，では実際にインストールしていく。

## 必要なもの

- PC(MacBookは今回は対象外とします。すみません...)
- USBドライブ(8GB以上が安心)
- キーボード
- インターネット環境
- 根気
- やる気
- 元気

:::note warn
インストール中に電源が切れると危険なのでノートPCの場合は充電等をしながら作業することを推奨。
:::


## インストールメディアの作成

### isoのダウンロード

https://www.archlinux.jp/download/ から日本のサーバーのjaist.ac.jpに飛ぶ。
そこからarchlinux-_リリースされた最新の日付_-x86_64.iso(例: archlinux-2023.09.01-x86_64.iso)をダウンロードする。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/347d0c3f-76a9-f157-3331-b7113709ad6e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/45c1766d-56a9-d73b-fd00-c5b24139da16.png)

### USBメディアの作成

ダウンロードできたらUSBドライブに書き込む。Linuxユーザーの方は多分やり方を知っていると思うので，今回はWindowsでの方法を紹介する。

https://rufus.ie/ja/ ここからRufusというインストールメディア作成ソフトをダウンロードして起動する。
以下の手順で作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/19fc081a-28d3-7e95-8a3a-c35d47aaf418.png)

:::note warn
USBでインストールメディアを作成すると，もともとUSBにあったデータは**すべて削除**されるので注意。
:::

1. デバイスのところをデータを入れるUSBドライブに指定する
2. ブートの種類をさっきダウンロードしたisoファイルに指定する
3. そのままの設定でスタートを押して作成する

これでインストールメディアが作成される。

## ライブ環境の起動

USBをPCに刺し，BIOSを起動する(BIOSの起動方法がわからない人は自分のPCのメーカーのサイトなどから調べてください)。
おそらくBootなどと書かれたタブがあると思うのでそこに移動し，Secure Bootに関する項目を「Disabled」等、使わない設定に変更し,Bootの優先順位を刺したUSBが上に来るように設定して，ExitでBIOSを抜ける。
再起動するとGRUB(起動するOSを選ぶやつ)が起動するので一番上の項目をEnterで選択するとArchLinuxが立ち上がる。

<details><summary>JIS配列キーボードが使いたい人</summary>
```sh
$ loadkeys jp106
```
これで日本語配列が適応される。
</details>


## ネットワークの接続

```shell
$ ping archlinux.jp
```
を実行し，繋がるかどうかを確認する。繋がる場合はCtrl+Cを押して次のセクションに移動してください。
ここからは，無線LANを使用している人向けに説明します。

```shell
$ iwctl
[iwd]# device list
```
ここで無線LANデバイス名が表示されます。ここからはそれをdeviceNameとする。
```shell
[iwd]# station deviceName scan
[iwd]# station deviceName get-networks
```
ここでアクセス可能なアクセスポイントの名前が表示される。ここからはそれをWifiNameとする。
```shell
[iwd]# station deviceName connect WifiName
```
パスワードが必要な場合はここでパスワードを入力する。
エラー無く完了したら，`exit`でiwdを抜ける。
```shell
$ ping archlinux.jp
```
これで繋がれば接続完了。

## システムクロックの更新

```shell
$ timedatectl set-ntp true
```
これでシステム上の時計が実際の時間と合う。

## インストール先の指定

この章がこの作業で一番注意がいるポイントです。特にデュアルブートの場合は下手するとWindowsを消し飛ばすので注意してください。

```shell
$ lsblk
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/2ffa8663-14cf-a79d-ccba-6473b543d1bb.png)
こんな感じで表示されるので，インストールしたい場所の名前を確認しておく。
ここではnvme0n1というディスクにインストールすることとする。

```shell
$ cgdisk /dev/nvme0n1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/04d55a8b-efb1-bbeb-b57c-97daaf452910.png)
こんな感じの画面が出てくるので，いらないパーティションをdeleteで消す。

### EFIパーティション

1. freespaceを選択し，Newを押す
1. そのままEnter
1. +512Mを入力 (始めから512MiB)
1. ef00を入力
1. 名前を入力(ここでは"ARCH EFI")

### /(root)パーティション

1. freespaceを選択し，Newを押す
1. そのままEnter
1. -3Gを入力 (終わりから3GiB)
1. そのままEnter
1. 名前を入力(ここでは"ARCH ROOT")

### swapパーティション

1. freespaceを選択し，Newを押す
1. そのままEnter
1. そのままEnter
1. 8200を入力
1. 名前を入力(ここでは"swap")

### パーティション作成

Writeを選択しEnterを押し，ファイルが消えるから注意してね的なことを言われるのでyesを入力する。
success的なことを言われれば成功。Quitを選択して脱出する。

## フォーマット

### EFIパーティション

fat32でフォーマットする。EFIパーティションの名前は`lsblk`でパーティション容量などから確認しておいてください。ここでは`nvme0n1p2`とする。
```sh
$ mkfs.fat -F32 /dev/nvme0n1p2
```
これでフォーマットする。

### /(root)パーティション

btrfsでフォーマットする。パーティションの名前は`nvme0n1p3`とする。
```sh
$ mkfs.btrfs /dev/nvme0n1p3
```

### swapパーティション

パーティションの名前は`nvme0n1p5`とする。
```sh
$ mkswap /dev/nvme0n1p5
```

おつかれさまでした。これでパーティションの設定は完了です。

## マウント

/(root)パーティションをマウントする。
```sh
$ mount /dev/nvme0n1p3 /mnt
```
/mnt/bootを作成し，EFIパーティションをマウントする。
```sh
$ mkdir /mnt/boot
$ mount /dev/nvme0n1p2 /mnt/boot
```
swapを起動する。
```sh
swapon /dev/nvme0n1p5
```

<details><summary>EFIパーティションが2つあるとき</summary>
windowsと同居するときなどは/mnt/win_bootなどのディレクトリを作り，そこにwindowsのEFIパーティションをマウントします。

```sh
$ mkdir /mnt/win_boot
$ mount /dev/nvme0n1p1 /mnt/win_boot
```
</details>

## 必要なものをいろいろインストール

### pacmanの設定

`/etc/pacman.d/mirrorlist`にミラーが定義されているのでこれをできるだけ近い位置にあるものに変更する。
まさかこの設定をしないでインストールする人はいないよね!!!!!!!!(1敗)

```sh
$ vim /etc/pacman.d/mirrorlist
```
JapanがあればそこのURLをアンコメントしてする。無ければ
```
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
```
これを一番上に追記してする。

### インストール

ここまでは誰でもだいたい同じ手順ですがこのあたりから違ってきます。これはオレオレインストールなので私が好きなやつを入れていきます。

pgp鍵をインストール

```sh
$ pacman -Sy archlinux-keyring
```

```sh
$ pacstrap /mnt base linux linux-firmware vim zsh zsh-completions 
```
これでもろもろのインストールができる。

## fstabの作成

fstabを自分で書く人もいますが，私はまだそのレベルに達していないのでコマンドに頼る。
```sh
$ genfstab -U /mnt >> /mnt/etc/fstab
```

## chroot

準備が整ったのでchrootする。
```sh
$ arch-chroot /mnt
```
Bashは使いたくないのでzshにする。
```sh
$ zsh
```

## タイムゾーンの設定

日本時間にする。
```sh
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```
システムの時刻をBIOSにコピー
```sh
$ hwclock --systohc
```

## ローカライゼーション

`/etc/locale.gen`を編集する。
```sh
$ vim /etc/locale.gen
```
「en_US.UTF-8 UTF-8」と「ja_JP.UTF-8 UTF-8」の行をアンコメントする。 

編集できたら，`$ locale-gen`でlocaleを作成する。

それが完了したら，`/etc/locale.conf`を編集する。
```sh
$ vim /etc/locale.conf
LANG=en_US.UTF-8
```

## コンソールの文字を大きくしておく

pacmanの設定をしておく。

```sh
$ vim /etc/pacman.conf
```
`pacman.conf`を開いて`# Misc options`のところに
```
Color
CheckSpace
ParallelDownloads = 5
ILoveCandy
```
を追記する。

terminus-fontをインストールする。
```sh
$ pacman -S terminus-font
```
`/etc/vconsole.conf`のFONTにフォント名を指定すれば、次回起動時から自動的にこのフォントが使われるようになる。
```sh
$ vim /etc/vconsole.conf
FONT=ter-128n
```

## ホスト名の設定

`/etc/hostname`に自分で考えたホスト名を追記する。
`/etc/hosts`をそのホスト名を使って以下のように編集する。
```sh
127.0.0.1	localhost
::1		    localhost
127.0.1.1	myhostname.localdomain	myhostname
```


## rootのパスワード

rootはなんでもできてしまうので危険です。パスワードを設定しておきましょう。
```sh
$ passwd
```

## GRUBのインストール

必要なパッケージを入れていきます。

```sh
$ pacman -S grub efibootmgr dosfstools os-prober mtools
```

GRUBをUEFIが読める場所にインストールする。--efi-directoryは、EFIパーティションをマウントしているパス（/boot）を指定する。
```sh
$ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB_UEFI
```

GRUBのconfigを作る。grub弄ったあとは**絶対に**このコマンドで更新してください。
```sh
$ grub-mkconfig -o /boot/grub/grub.cfg
```

## プロセッサ用マイクロコード

使っているCPUに合わせてマイクロコードを適応させる。
まずパッケージをインストールする。
```sh
$ pacman -S intel-ucode
```
or
```sh
$ pacman -S amd-ucode
```
GRUBの場合は
```sh
$ grub-mkconfig -o /boot/grub/grub.cfg
```

## rEFInd
便利なブートローダのrEFIndを入れる。
```sh
$ pacman -S refind
```
インストールする。
```sh
$ refind-install
```

## ネットワーク設定

networkmanagerを使う。
パッケージをインストールする。
```sh
$ pacman -S networkmanager wpa_supplicant dialog iw iwd dhcpcd netctl
```

systemctlを使用し，networkmanagerが起動時に立ち上がるようにする。
```sh
$ systemctl enable NetworkManager
```
## リブートしよう

chrootから`exit`で抜け，ライブ環境まで戻って`reboot`を実行する。

## 起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/55abcf69-41ba-b170-4ea2-730b26de56a0.png)

起動したらこんな画面になると思うので`EFI/GRUB_UEFI/grubx64.efi`みたいな感じで書いてるやつを選択してArchLinuxを選んで起動する。

正常に起動できたらArchLinux本体のインストールは成功です!!
おつかれさまでした。

# カスタマイズ

ここからもっとオレオレが加速します。

## ネットワーク設定

`nmtui`から設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/7b3856f6-1bf2-3287-1eae-cec818c3d6ec.png)
(多分日本語化されてないけど)こんな画面が出るのでアクティベートなんちゃらを選択して接続したいWiFiを選んで接続する。終わったら`Quit`で抜ける。

## アップデート

パッケージのアップデートをしておく。
```sh
$ pacman -Syu
```
これで全てのアップデートができます。

## ユーザー追加とsudo

ずっとrootで作業するのは危険なので一般ユーザーを使っていきます。`wheel`グループに所属するように作成します。
```sh
$ useradd -m -G wheel username
```
`username`には好きな名前を入れてください。
パスワードを設定します。
```sh
$ passwd username
```
### sudo

パッケージを入れます。
```sh
$ pacman -S sudo
```
`wheel`グループのユーザーにsudo権限を与えるように設定していきます。
```sh
$ EDITOR=vim visudo
```
以下の行をアンコメントしてください。
```sh
%wheel ALL=(ALL:ALL) NOPASSWD: ALL
```
↑の設定は個人用PCでのみ使用してください。
設定が完了したら，新しいユーザーでログインしましょう。

## AURヘルパーの導入
pacmanでAURのパッケージを入れるには結構面倒なことをしなければいけませんが，AURヘルパーを導入をするとそれを楽にすることができます。いつもは`yay`なのですが今回は折角なので`paru`を使ってみようと思います。

### 必要なパッケージのインストール

```sh
$ sudo pacman -S --needed git base-devel rustup
```
paruはrust製なのでrustの環境を設定します。
```sh
$ rustup default stable
```

### インストール

gitから持ってきて自前でビルドします。
```sh
$ git clone https://aur.archlinux.org/paru.git
$ cd paru
$ makepkg -si
```
これで`paru`が使えます。基本は`pacman`と同じように使います。

## デフォルトシェルの設定

`chsh`を使ってデフォルトシェルを`zsh`にします。
```sh
$ chsh -s $(which zsh)
```

## 時計の設定(n回目)

一応時計の設定をしときます。
```sh
$ sudo timedatectl set-ntp true
```

# GUIを入れよう

今回はHyprlandを導入する。
イケイケのタイル型環境です。

## Hyprland

いろいろインストール
```sh
$ paru -S hyprland-nvidia kitty gtk3 waybar-hyprland-git mpd ttf-font-awesome noto-fonts noto-fonts-cjk noto-fonts-emoji ttf-firge ttf-fira-code ttf-firacode-nerd pipewire neovim gdm
```
### gdm

systemdで起動時に自動で起動するようにする。
```sh
$ sudo systemctl enable gdm.service
```
waylandに対応させる。
```sh
$ sudo ln -s /dev/null /etc/udev/rules.d/61-gdm.rules
```
### 起動

```sh
$ Hyprland
```
これで起動できる。

ttyからの起動は初回だけでok。次からはgdmから起動できる。

起動すると上に警告っぽいものが出てくるのでこれを消す。
`~/.config/hypr/hyprland.conf`に設定があるのでそこの`autogenarated = 1`の行をコメントアウトする。
これで警告が消える。

## 各種ソフトのインストール

ブラウザなどのもろもろのソフトをインストールする。

```sh
$ paru -S firefox-developer-edition rofi hyprpaper discord visual-studio-code-bin spotify-launcher nemo flameshot vlc pipewire-pulse
```
pipewire-pulseを有効化するため，再起動する。

## トラックパッドの設定

ノートpcにインストールしたのでtouchpadの設定をしていく。
`~/.config/hypr/hyprland.conf`の`input`に以下を追記する。
```sh
touchpad {
    natural_scroll = true
    clickfinger_behavior = true
    tap-to-click = true
}
```

## xwaylandの設定

xorgをwaylandで動かすために必要。
設定無しだと画質がガビガビになる。

`~/.config/hypr/hyprland.conf`に以下を追記する。

```sh
xwayland {
    force_zero_scaling = true
}
```
これで画質が改善される。

## zshの設定

なにか見覚えのある記事があるので以下の記事を参考に設定する。

https://qiita.com/Hayatann/items/daf433eec9bba01cfafd

## GitHubの秘密鍵設定

GitHubの認証のため，秘密鍵を生成し，登録する。

```sh
$ mkdir ~/.ssh
$ cd .ssh
$ ssh-keygen -t ed25519
```
何か聞かれるが全部エンター。生成できたらGitHubの自分のアカウントに登録しておく。

接続確認しておく。
```sh
ssh -T git@github.com
```
successfullyなんちゃらみたいなのが出たら成功。

## dotfileの共有

メインPCもArchLinuxなのでchezmoiを使って移行していく。
既にgithubのリポジトリを作っていたのでそれを使う。
```sh
$ paru -S chezmoi
$ chezmoi init git@github.com:Hayatann/dotfiles.git
```

## firefoxの設定

userChromeを設定する。
firefoxのアドレスバーに`about:config`を入力し，`legacyUserProfile`なんちゃらって書いてるところをtrueに変更する。

メニュー→ヘルプ→他のトラブルシューティング情報でプロファイルフォルダーの場所を確認する。

ターミナルでその場所に移動する。
その場所でgithub上にある自分のuserchromeをcloneし，そのディレクトリ名をchromeに変更する。
```sh
$ git clone ~~~~
$ mv ~~~~ chrome
```
firefoxを再起動するといつものfirefoxになってくれる。



## 各種言語の設定

どうやらasdfというバージョン管理システムが良いらしい。

https://asdf-vm.com/guide/getting-started.html

これを見ながら設定していく。

### ダウンロード

```sh
$ paru -S asdf-vm
```

`.zshrc`にasdf.shを読み込ませるため，`.zshrc`に以下を追記
```sh
. /opt/asdf-vm/asdf.sh
```

### プラグインの導入

asdfに使いたい言語のプラグインをインストールする。
今回はnodejsを入れたいので検索する。
```sh
$ asdf plugin list all | grep nodejs
```
nodejsのプラグインが見つかったのでインストールする。
```sh
$ asdf plugin add nodejs
```

### インストール

利用可能なバージョンを調べる。
```sh
$ asdf list all nodejs
```
いい感じのがあればインストールする。
```sh
$ asdf install nodejs 20.8.0
```
また，最新版を入れたいときは
```sh
$ asdf install nodejs latest
```
のようにすればインストールできる。

### グローバルに設定

まずインストールできたやつのバージョンを確認する。
```sh
$ asdf list nodejs
```
確認できたらグローバルに設定する。
```sh
$ asdf global nodejs ~~~
```
これでグローバルに設定できる。

## waybar

mpdを自動起動させる。
```sh
$ sudo systemctl enable mpd
$ sudo systemctl start mpd
```

`~/.config/waybar/config`に設定を書く。
今回は以下のwaybarを参考にさせていただいた。

https://github.com/7KIR7/dots

必要なものをインストールする。
```sh
$ paru -S htop brightnessctl pavucontrol
```
変更したconfigはあとでdotfileのリポジトリと一緒に挙げておく。

### 自動起動

`hyprland.conf`に以下を記述する。

```sh
exec-once=waybar
```
これで起動時にwaybarが起動する。

## 日本語入力

IMEにはもちろんSKKを使う。SKKは最も打ちやすくスピーディングである。
宗教上の理由等でどうしてもSKKが使えない方はfcitx5-mozc等をインストールしてもいい。

### fcitx5

まず必要なパッケージを入れていく。
```sh
$ paru -S fcitx5 fcitx5-im fcitx5-skk fcitx5-configtool
```
入れたら，`/etc/environment`に環境変数を設定します。設定しないとHyprlandが落ちます(1敗)。
```sh
$ sudo nvim /etc/environment
# 以下を記述
export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5
```
自動起動できるようにしておく。
`hyprland.conf`に以下を記述する。

```sh
exec-once=fcitx5
```
これで起動時にfcitxが起動する。

## 通知

makoという通知デーモンを使う。
```sh
$ paru -S mako
```
通知が来たときに自動的に起動するので特に設定は必要ない。
見た目をcatppuccinのテーマにしておく。

https://github.com/catppuccin/mako

これに沿って設定すればOK。

## Kittyの設定

カラースキームにcatppuccinを使う。

https://github.com/catppuccin/kitty

これを見ながら設定する。


## 壁紙

hyprpaperを使おうと思ったが上手く動かなかったのでwaypaperを使う。
```sh
paru -S waypaper swww swaybg
```
壁紙にしたい画像を`~/Pictures`に入れるとwaypaperが勝手に認識してくれる。
あとはwaypaperを起動して画像をクリックすれば壁紙が適用される。

## スクショ

hyprshotを使う。
```sh
paru -S hyprshot
```
インストールした後，hyprland.confに以下を追記する。
```sh
bind = $mainMod SHIFT, S, exec, hyprshot -m output --clipboard-only
```
これでModキー+Sでスクショができるようになる。

## フルスクリーン

Modキー+Fでフルスクリーンを切り替えられるようにする。
hyprland.confに以下を追記する。
```sh
bind = $mainMod, F, fullscreen, 0
```
## Capsを排除

忌々しいキーであるCapsをhyprlandではCtrlに替えることができる。
hyprland.confのinput内に以下を追記
```sh
kb_options = ctrl:nocaps
```
これだけでCapsがCtrlになる。

# 終わりに

おつかれさまでした。
これにてオレオレArchlinuxインストール完了です。
もしこの記事を見てインストールに挑戦した人はこのやり方に囚われることなく，素晴らしいLinuxライフをお楽しみください。
最後に，完成した環境のスクショを貼って終わります。
ありがとうございました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952863/dd49ee13-3cbb-ee4c-e1dc-7cab88fa4567.png)