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

ARCHLINUXINSTALLBATTLE

これはなにか

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

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

背景

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

ハードウェア構成

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

種類名称備考MBASUS PRIME B450-PLUSCPUAMD Ryzen 7 3800XGPUZOTAC GAMING GeForce GTX 1660 Ti 6GB GDDR6 / ZT-T16610F-10LMemoryCK8GX4-D4U3200H 8GB*2BTOで買ったときに刺さってたやつMemoryCORSAIR VENGEANCE LPX DDR4-3200 16GB*2追加購入StorageWD Green WDS240G2G0A240GB, SSDStorageWD20EZAZ-RT2TB, HDDStorageKIOXIA 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、どちらも問題なく起動することが確認できたら終わり。

今回のやらかし

  • /dev/nvme0n1p1/boot にマウントした
    当然容量不足で vmlinuz-linuxinitramfs-linux-zen.img が配置できないので困る
  • 修正は正しくマウントしなおしてゴミを消すだけだったので、致命傷ではなかった