これはなにか
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インストール手順refs: インストールガイド - ArchWiki
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
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パーティショニングrefs: パーティショニング - ArchWiki
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
今回はこんな感じにする。
パーティションパス備考/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 # 書き込んでおわり
$ lbslkbtrfsにするrefs: Btrfs - ArchWiki
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
これまで漫然と ext4 を使っていたけど、せっかくなので btrfs を使うことにする。
$ mkfs.fat -F 32 /dev/sda1マウントする
$ mkfs.btrfs -L root /dev/sda2
$ mkfs.btrfs -L home /dev/sdb1$ mount /dev/sda2 /mntJp Mirrorにしておく一応日本のミラーを向かせる。
$ 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
refs: ミラー - ArchWiki
$ vim /etc/pacman.d/mirrorlist必要なものを入れるとりあえず最低限必要なものを
# 一番上に追加するpacstrap で入れる。
今回はデスクトップ用途なので、 zen-kernel を選択している。
$ pacstrap -K /mnt base linux-zen linux-firmwarefstab作る$ genfstab -U /mnt >> /mnt/etc/fstabarch-chrootする
$ cat /mnt/etc/fstab # 内容確認$ arch-chroot /mntarch-chrootでの作業タイムゾーン&時刻設定% ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime作業用にvimを入れる
% hwclock --systohc% pacman -S vimlocale 生成% vim /etc/locale.genhostnameを変更
# en_US.UTF-8 ja_JP.UTF-8 をコメント解除する
% locale-gen
% vim /etc/locale.conf # 中身を LANG=ja_JP.UTF-8 にする% 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 -Prootのパスワードを設定する% 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再起動したら、archisoの入ったUSBフラッシュメモリを取り外しておく。
% reboot
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-networkdWindowsをGRUBのメニューに追加する
% systemctl start systemd-resolved
% systemctl enable systemd-networkd
% systemctl enable systemd-resolved% pacman -S os-proberWindows Updateが楽になるように、デフォルトの選択肢をWindowsにWindows Updateで再起動を複数回要求されたときに、GRUBデフォルトの選択肢がarchlinuxだと放置できない。
% grub-mkconfig -o /boot/grub/grub.cfg # WindowsがGRUBに登録される
月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追加したユーザがsudoできるようにするここから先はrootで作業したくないので、権限を振る。
% passwd kei # パスワードを設定する
% pacman -S sudoarchlinux(user)先ほど作成した
% EDITOR=vim visudo # %sudo ALL=(ALL:ALL) ALL にする
% groupadd sudo
% usermod -aG sudo keisudo ができるユーザでログインしなおす。
最低限のデスクトップ環境を構築する
dotfiles をGitHubから拾ってくるためにデスクトップ環境があると便利なので、そのためにまず最低限のパッケージを入れる。
ディスプレイマネージャには sddm を、ウィンドウマネージャには i3 を使う。
日本語入力やオーディオまわりなどはあとから設定する。
$ sudo pacman -S xorg sddm i3 xf86-video-nouveau mesa alacrittyi3configを編集し、alacrittyを呼び出せるようにするのを忘れない。
$ sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji # LANG=ja_JP.UTF-8しているので日本語フォントを入れておく
$ sudo systemctl enable sddm
忘れて起動してしまい、ターミナルが起動できなくなった場合は Ctrl --- Alt + F[2-6] で黒い画面に戻れるので、そこで設定を変える。
$ sudo rebootarchlinux(user-xorg)GitHub連携してdotfiles引っ張ってこれるようにするfirefoxとopensshを入れて、git cloneできるようにする。
鍵追加などの手順は 公式ドキュメント に従う。
$ sudo pacman -S git openssh firefoxparuを入れるこれまでAURヘルパーには yay を使っていたが、今回は気分で paru を使ってみることにした。
$ sudo pacman -S rustupデスクトップ環境で使うものをまるっと入れる i3の設定ファイル に書いてあるものを中心にインストールする。
$ rustup install nightly # 好み
$ rustup default nightly
$ git clone https://aur.archlinux.org/paru.git
$ cd paru
$ makepkg -si
また、i3は最新版の機能を使いたいので、AURにある i3-git に差し替える。
$ sudo pacman -S nemo nemo-share gvfs-smb rofi flameshot pulseaudio pavucontrol xsel fehパッケージ説明備考nemoファイラーnemo-share, gvfs-smb を入れることでsambaサーバに接続できるようになるrofiアプリケーションランチャー(---α)rofi-greenclip を入れて、クリップボード機能を追加しているflameshotスクリーンショットツールfeh画像ビューア壁紙表示ツールとして使っているpavucontrolオーディオまわりの管理ツールpulseaudioが必要xselクリップボードツールneovim でクリップボード連携するために入れているconkyリソースモニタおしゃれツールだけどデフォルトで使っているのでおしゃれじゃない日本語入力(skk)日本語入力ができるようにする。
$ paru -S conky rofi-greenclip
$ paru -S ttf-rounded-mplus
$ paru -S i3-git # gaps使いたいので
$ sudo pacman -Ss fcitx5-skk fcitx5-configtool fcitx5-gtk fcitx5-qt skk-jisyoi3のconfigに書いてある分でいい感じに起動してくれるはずだったが、今回なぜか起動してくれなかったので .xprofile を追加で書いた。
$ touch ~/.xprofileneovimエディタには
export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS="@im=fcitx5"neovim を使っている。
HEADを使うので、GitHubからソースを落としてきてビルドする。
$ sudo pacman -S cmake unzip ninja tree-sitter curlまた、使っているプラグインは
$ clone git@github.com:neovim/neovim.git
$ make
$ sudo make installdeno を要求するので、asdf を使ってインストールしておく。~/.zshenv に下記のように書いてから、もろもろをインストールする。
# for asdfdotfilesの展開dotfilesを展開する。
. /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
$ 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終わり再起動してWindowsとarchlinux、どちらも問題なく起動することが確認できたら終わり。
$ sudoedit /etc/ntp.conf # jstにする
$ sudo ntpd # いったん合わせておく
$ sudo systemctl enable ntpd # systemdに登録する
今回のやらかし
/dev/nvme0n1p1を/bootにマウントした
当然容量不足でvmlinuz-linuxやinitramfs-linux-zen.imgが配置できないので困る- 修正は正しくマウントしなおしてゴミを消すだけだったので、致命傷ではなかった