blog(unstable)

2023年 令和最新版 archlinux インストールオレオレ手順

January 14, 2023

category : 技術

tags :

description : ARCHLINUXINSTALLBATTLE


これはなにか

Windows 11が入っているマシンにarchlinuxを追加してデュアルブート設定までやったときのメモ。
最低限のツールを設定して、デスクトップ環境を立ち上げるところまでやっている。便利な開発系ツールのインストールやおしゃれ設定などはしていない。

将来的に自動化するときに楽できるように、細かくコマンドを書いておくという趣旨。

背景

年末年始に半額だったので、SEIL/x86 Ayameを衝動買いしたが、それを動かすマシンがなかった。
せっかくなのでまたProxmoxサーバを組んでもいいかなと思ったが、試算したところちょっと予算オーバー気味だったので、archlinuxデスクトップマシンを潰してそちらをProxmoxサーバに切り替えることにした。
ただ、linuxデスクトップが自宅から消滅するといろいろと不便なのは目に見えていたので、Windowsマシンにメモリとストレージを盛ってarchlinuxをデュアルブートすることにした。

ハードウェア構成

THE 型落ちみたいな。
Ryzen 7000番台とSocket AM5マザボがもうちょい安くなったら買い換えたい。

種類名称備考
MBASUS PRIME B450-PLUS
CPUAMD Ryzen 7 3800X
GPUZOTAC GAMING GeForce GTX 1660 Ti 6GB GDDR6 / ZT-T16610F-10L
MemoryCK8GX4-D4U3200H 8GB*2BTOで買ったときに刺さってたやつ
MemoryCORSAIR VENGEANCE LPX DDR4-3200 16GB*2追加購入
StorageWD Green WDS240G2G0A240GB, SSD
StorageWD20EZAZ-RT2TB, HDD
StorageKIOXIA EXCERIA PLUS G2 SSD-CK500N3PG2/N500GB, M.2, 追加購入
StorageKIOXIA EXCERIA SSD-CK960S/N960GB, SSD, 追加購入
StorageSeagate BarraCuda ST2000DM0082TB, HDD, 追加購入
PSUCWT GPT500SATC

ストレージ構成

事前にWindows 11をクリーンインストールしている。
Windows 11側では /dev/sdc, /dev/sdd, /dev/nvme0n1 を使っている。
今回は、以前Windows側で使っていた /dev/sda, /dev/sdb にarchlinuxをインストールする。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 223.6G  0 disk
sdb           8:16   0   1.8T  0 disk
sdc           8:32   0   1.8T  0 disk # Windows D ドライブ
├─sdc1        8:33   0    16M  0 part
└─sdc2        8:34   0   1.8T  0 part
sdd           8:48   0 894.3G  0 disk # Windows E ドライブ
├─sdd1        8:49   0    16M  0 part
└─sdd2        8:50   0 894.2G  0 part
nvme0n1     259:0    0 465.8G  0 disk # Windows C ドライブ
├─nvme0n1p1 259:1    0   100M  0 part
├─nvme0n1p2 259:2    0    16M  0 part
├─nvme0n1p3 259:3    0   465G  0 part
└─nvme0n1p4 259:4    0   668M  0 part

インストール手順

refs: インストールガイド - ArchWiki

archisoでの作業

archisoは archlinux-2023.01.01-x86_64.iso を使った。

IPアドレスを割り振る

我が家はコンセントに繋がるものは固定IP、バッテリ駆動できるものはDHCPを使うようにしている。
今回はデスクトップマシンなので、固定IPの設定が必要になる。

refs: ネットワーク設定 - ArchWiki

$ ip link
$ ip link set eth0 up # 有効化
$ ip address add 192.168.11.16/24 broadcast --- dev eth0 # IPアドレスを割り振る

疎通確認

一応繋がるかどうか見ておく。

$ ping -c 5 192.168.11.1 # GW
$ ping -c 5 192.168.11.5 # NAS
$ ping -c 5 archlinux.jp # 外

ストレージ確認

lsblk を使って、ストレージが正しく認識されているかどうかを一応見ておく。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 223.6G  0 disk
sdb           8:16   0   1.8T  0 disk
sdc           8:32   0   1.8T  0 disk # Windows D ドライブ
├─sdc1        8:33   0    16M  0 part
└─sdc2        8:34   0   1.8T  0 part
sdd           8:48   0 894.3G  0 disk # Windows E ドライブ
├─sdd1        8:49   0    16M  0 part
└─sdd2        8:50   0 894.2G  0 part
nvme0n1     259:0    0 465.8G  0 disk # Windows C ドライブ
├─nvme0n1p1 259:1    0   100M  0 part
├─nvme0n1p2 259:2    0    16M  0 part
├─nvme0n1p3 259:3    0   465G  0 part
└─nvme0n1p4 259:4    0   668M  0 part

パーティショニング

refs: パーティショニング - ArchWiki

今回はこんな感じにする。

パーティションパス備考
/dev/nvme0n1p1/boot/efiWindowsのものを使う
/dev/sda1/boot300MiBくらいあれば十分だけど、気分で512MiB振る
/dev/sda2/
/dev/sdb1/home/home以下は分けたほうがいいと聞くので、分ける

fdisk を使ってパーティショニングを行なう。

$ fdisk /dev/sda
# ここからfdiskのプロンプト
n # あたらしいパーティションを切る
Partition Number: <CR>
First Sector: <CR>
Last Sector: ---512M
n
Partition Number: <CR>
First Sector: <CR>
Last Sector: <CR>
w # 書き込んでおわり
$ fdisk /dev/sdb
# ここからfdiskのプロンプト
n # あたらしいパーティションを切る
Partition Number: <CR>
First Sector: <CR>
Last Sector: <CR>
w # 書き込んでおわり

パーティショニングできてるか確認

こんな感じになるはず。

$ lbslk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 223.6G  0 disk
├─sda1        8:1    0   512M  0 part
└─sda2        8:2    0 223.1G  0 part
sdb           8:16   0   1.8T  0 disk
└─sdb1        8:17   0   1.8T  0 part
sdc           8:32   0   1.8T  0 disk
├─sdc1        8:33   0    16M  0 part
└─sdc2        8:34   0   1.8T  0 part
sdd           8:48   0 894.3G  0 disk
├─sdd1        8:49   0    16M  0 part
└─sdd2        8:50   0 894.2G  0 part
nvme0n1     259:0    0 465.8G  0 disk
├─nvme0n1p1 259:1    0   100M  0 part
├─nvme0n1p2 259:2    0    16M  0 part
├─nvme0n1p3 259:3    0   465G  0 part
└─nvme0n1p4 259:4    0   668M  0 part

btrfsにする

refs: Btrfs - ArchWiki

これまで漫然と ext4 を使っていたけど、せっかくなので btrfs を使うことにする。

$ mkfs.fat -F 32 /dev/sda1
$ mkfs.btrfs -L root /dev/sda2
$ mkfs.btrfs -L home /dev/sdb1

マウントする

$ mount /dev/sda2 /mnt
$ mkdir /mnt/boot
$ mount /dev/sda1 /mnt/boot
$ mkdir /mnt/boot/efi
$ mount /dev/nvme0n1p1 /mnt/boot/efi # Windowsのespをマウント
$ mkdir /mnt/home
$ mount /dev/sdb1 /mnt/home

Jp Mirrorにしておく

一応日本のミラーを向かせる。
refs: ミラー - ArchWiki

$ vim /etc/pacman.d/mirrorlist
# 一番上に追加する

必要なものを入れる

とりあえず最低限必要なものを pacstrap で入れる。
今回はデスクトップ用途なので、zen-kernelを選択している。

$ pacstrap -K /mnt base linux-zen linux-firmware

fstab作る

$ genfstab -U /mnt >> /mnt/etc/fstab
$ cat /mnt/etc/fstab # 内容確認

arch-chrootする

$ arch-chroot /mnt

arch-chrootでの作業

タイムゾーン&時刻設定

% ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
% hwclock --systohc

作業用にvimを入れる

% pacman -S vim

locale 生成

% vim /etc/locale.gen
# en_US.UTF-8 ja_JP.UTF-8 をコメント解除する
% locale-gen
% vim /etc/locale.conf # 中身を LANG=ja_JP.UTF-8 にする

hostnameを変更

% vim /etc/hostname

/etc/hostsを書く

vim /etc/hosts
127.0.0.1	localhost
::1		localhost
127.0.0.1	${ここにhostnameで設定したのを同じものを書く}

パッケージ追加

これから作るユーザのデフォルトシェルを zsh にしたいのでその関連パッケージを入れる。
また、入れたほうがよさそうなものもまとめて入れておく。

% pacman -S linux-zen-docs linux-zen-headers
% pacman -S zsh zsh-completions
% pacman -S base-devel
% pacman -S btrfs-progs

再ビルドしておく

% mkinitcpio -P

rootのパスワードを設定する

% passwd

ブートローダのインストール

grubをとりあえず入れる。
この段階だとなぜか os-prober/dev/nvme0n1p1 を認識してくれず、Windows BootloaderをGRUBメニューに追加できないので、設定は後ほど行う。
この段階で一度Windowsがブートできなくなるので、なにかWindowsでやっておくべきことがあるなら済ませておく。

% pacman -S grub efibootmgr
% grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

再起動

% umount -R /mnt
% reboot

再起動したら、archisoの入ったUSBフラッシュメモリを取り外しておく。

archlinux(root)

ここから先はrootユーザで作業する。

systemdでネットワーク設定をする

refs: systemd-networkd - ArchWiki

再起動した段階ではネットワーク設定が消えているので、外に通信できない。
接続のため、 systemd-networkd, systemd-resolved を使うので、その設定をする。

% vim /etc/systemd/network/20-wired.network
[Match]
Name=enp4s0

[Network]
Address=192.168.11.16/24
Gateway=192.168.11.1
DNS=192.168.11.1

起動・有効化までする。

% systemctl start systemd-networkd
% systemctl start systemd-resolved
% systemctl enable systemd-networkd
% systemctl enable systemd-resolved

WindowsをGRUBのメニューに追加する

% pacman -S os-prober
% grub-mkconfig -o /boot/grub/grub.cfg # WindowsがGRUBに登録される

Windows Updateが楽になるように、デフォルトの選択肢をWindowsに

Windows Updateで再起動を複数回要求されたときに、GRUBデフォルトの選択肢がarchlinuxだと放置できない。
月1で面倒な思いをしたくないので、デフォルトをWindowsに変えておく。

% vim /etc/default/grub # 今回は3番目がWindowsなので、GRUB_DEFAULT=2
% grub-mkconfig -o /boot/grub/grub.cfg # Windowsがデフォルトになる

一般ユーザを追加

% useradd -m -G wheel -s /usr/bin/zsh kei
% passwd kei # パスワードを設定する

追加したユーザがsudoできるようにする

ここから先はrootで作業したくないので、権限を振る。

% pacman -S sudo
% EDITOR=vim visudo # %sudo ALL=(ALL:ALL) ALL にする
% groupadd sudo
% usermod -aG sudo kei

archlinux(user)

先ほど作成した sudo ができるユーザでログインしなおす。

最低限のデスクトップ環境を構築する

dotfilesをGitHubから拾ってくるためにデスクトップ環境があると便利なので、そのためにまず最低限のパッケージを入れる。
ディスプレイマネージャにはsddmを、ウィンドウマネージャにはi3を使う。
日本語入力やオーディオまわりなどはあとから設定する。

$ sudo pacman -S xorg sddm i3 xf86-video-nouveau mesa alacritty
$ sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji # LANG=ja_JP.UTF-8しているので日本語フォントを入れておく
$ sudo systemctl enable sddm

i3configを編集し、alacrittyを呼び出せるようにするのを忘れない。
忘れて起動してしまい、ターミナルが起動できなくなった場合は Ctrl --- Alt + F[2-6] で黒い画面に戻れるので、そこで設定を変える。

$ sudo reboot

archlinux(user-xorg)

GitHub連携してdotfiles引っ張ってこれるようにする

firefoxとopensshを入れて、git cloneできるようにする。
鍵追加などの手順は公式ドキュメントに従う。

$ sudo pacman -S git openssh firefox

paruを入れる

これまでAURヘルパーには yay を使っていたが、今回は気分で paru を使ってみることにした。

$ sudo pacman -S rustup
$ rustup install nightly # 好み
$ rustup default nightly
$ git clone https://aur.archlinux.org/paru.git
$ cd paru
$ makepkg -si

デスクトップ環境で使うものをまるっと入れる

i3の設定ファイルに書いてあるものを中心にインストールする。
また、i3は最新版の機能を使いたいので、AURにある i3-git に差し替える。

$ sudo pacman -S nemo nemo-share gvfs-smb rofi flameshot pulseaudio pavucontrol xsel feh
$ paru -S conky rofi-greenclip
$ paru -S ttf-rounded-mplus
$ paru -S i3-git # gaps使いたいので
パッケージ説明備考
nemoファイラーnemo-share, gvfs-smb を入れることでsambaサーバに接続できるようになる
rofiアプリケーションランチャー(---α)rofi-greenclip を入れて、クリップボード機能を追加している
flameshotスクリーンショットツール
feh画像ビューア壁紙表示ツールとして使っている
pavucontrolオーディオまわりの管理ツールpulseaudioが必要
xselクリップボードツールneovim でクリップボード連携するために入れている
conkyリソースモニタおしゃれツールだけどデフォルトで使っているのでおしゃれじゃない

日本語入力(skk)

日本語入力ができるようにする。

$ sudo pacman -Ss fcitx5-skk fcitx5-configtool fcitx5-gtk fcitx5-qt skk-jisyo

i3のconfigに書いてある分でいい感じに起動してくれるはずだったが、今回なぜか起動してくれなかったので .xprofile を追加で書いた。

$ touch ~/.xprofile
export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS="@im=fcitx5"

neovim

エディタには neovim を使っている。
HEADを使うので、GitHubからソースを落としてきてビルドする。

$ sudo pacman -S cmake unzip ninja tree-sitter curl
$ clone git@github.com:neovim/neovim.git
$ make
$ sudo make install

また、使っているプラグインは deno を要求するので、asdf を使ってインストールしておく。 ~/.zshenv に下記のように書いてから、もろもろをインストールする。

# for asdf
. /opt/asdf-vm/asdf.sh
$ paru -S asdf-vm
$ source ~/.zshenv
$ asdf plugin-add deno https://github.com/asdf-community/asdf-deno.git
$ asdf install deno 1.29.2
$ asdf global deno 1.29.2

dotfilesの展開

dotfilesを展開する。

$ git clone git@github.com:kei-s16/dotfiles.git
$ rm -rfv ~/.config # ~/.config/i3/config とかがあって、dotfilesが撒けないので
$ cd dotfiles
$ make
$ make skk # skk辞書のダウンロード

上記のコマンドを実行したあと、ログインしなおすと設定が反映される。
必要ならこの時neovimを起動して、プラグインのインストールを済ませておく。

時間系

デュアルブートだとどちらかのOSの時間が9時間ずれてしまう。
ArchWikiに従い、UTCを使うように設定する。
refs: Windows と Arch のデュアルブート - ArchWiki

時刻合わせには ntpd を使う。

$ sudo pacman -S ntp
$ sudoedit /etc/ntp.conf # jstにする
$ sudo ntpd # いったん合わせておく
$ sudo systemctl enable ntpd # systemdに登録する

終わり

再起動してWindowsとarchlinux、どちらも問題なく起動することが確認できたら終わり。

今回のやらかし