Arch Linux Install Battle 2022 Summer
というわけで、3年ぶりくらい?に、Arch Linux のインストールをしていこうと思います。
!WARNING!
基本的には自分用の作業記録というスタンスなので、もしこの記事を見つけても、あまり参考にしないでください。
今回インストールするマシン
- ThinkPad X1 Carbon Gen 10
- CPU: インテル® Core™ i7-1280P
- SSD: Crucial P5 Plus 1TB
CPU は Intel Alder Lake の P シリーズにしてみました。
Linux で使う場合、Intel Thread Director をサポートしている Kernel 5.18 以降がよろしいかと。
今回インストールする Arch Linux のカーネルバージョンは 5.18.16
なので、一体どんなもんか、見てみようじゃないですか。
また、デスクトップ環境として Xfce を入れる予定です。
本筋とは関係ないこと
ThinkPad の納期、「1ヶ月半から(今はあーだこーだで遅れがちなので)2ヶ月くらいです」と言われていたのですが、何故か2週間で届きました。
ありがとう Lenovo さん。
追記:2022/11/29
ThinkPad が故障したのでその話。
2022/11/13 壊れる
電源ボタンが全く反応しないので、多分ハードが逝ったのかなと。
2022/11/19 修理に出す(集荷日)
一応保証期間内ではあったので、ダメ元で修理に出すことにしました。
2022/11/23 修理完了連絡
先に症状の連絡とかがあるものだと思っていたのですが、いきなり完了連絡が来ました。
まあ無償でやってくれたので全く文句ないです。
2022/11/25 受け取り
帰ってきました。思ったより早い。
ボードごと交換してくれました。
インストールメディアを作る
ISO ファイルをダウンロードする
Arch Linux - Downloads にある適当なミラーサーバーから ISO ファイルをダウンロードします。
日本に住んでいるなら Japan のものを選んでおけばおk。
個人的な縁という理由で筑波のサーバーを使っています。
ここから archlinux-2022.08.05-x86_64.iso
をダウンロードします。
私の家だと10分程度で完了しました。
USB メディアを作る
今は Rufus とかいうのが良いっぽいです。
↑から最新版をダウンロードして、そのファイルをそのまま実行すれば起動します。
多分 MBR でも大丈夫ですが、今どき MBR にする理由もないので GPT でやります。
入力したら「スタート」します。
「ISO イメージモードで書き込む(推奨)」にしておきます。
1分くらいで完了したので、閉じます。
ThinkPad の SSD を入れ替える
爪が折れるんじゃないかと心配になりつつ、公式動画の通りにこじ開けて、SSD を入れ替えました。
セキュアブートを OFF にする
ThinkPad X1 Carbon Gen 10 の場合、起動時に F1 キー押下で BIOS 設定画面が開きます。
「ピッ」音がクソデカくてちょっとビックリしました。
Security
> Secure Boot
と進み、トグルで off
に切り替えます。
最後に Save and Exit して完了です。
USB ブートする
再起動すると、ブートローダーの画面に飛ぶので、Arch Linux のインストール用っぽいやつを選びます。
ネットワークに接続する
新しい ThinkPad には Ethernet 端子が無いので、無線でやります。
iwd を使います。
デバイスを確認します。
# iwctl
[iwd]# device list
...
----------
Name ...
----------
wlan0 ...
wlan0
がそれですね。
ネットワークの一覧を取得します。
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
ここでヒットした SSID の中から接続したいものを選び、下記コマンドを実行します。
パスワードは対話的に入力します。
[iwd]# station wlan0 connect {SSID}
疎通確認します。
# ping archlinux.org
システムクロックを設定する
# timedatectl set-ntp true
ディスクの設定をする
パーティショニングは GPT で、ファイルシステムは XFS にします。
パーティショニング
まず、ディスクが認識されていることを確認します。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 680M 1 loop /run/archiso/airrootfs
sda 8:1 1 14.8G 0 dist
└─sda1 8:1 1 14.8G 0 part /run/archiso/bootmnt
nvme0n1 259:0 0 931.5G 0 disk
# fdisk -l
Dsik /dev/nvme0n1: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk mode: ...
...
nvme0n1
が、今回インストールする先です。
レイアウトはこんな感じにしました。
type | file sysytem | start | end | |
---|---|---|---|---|
boot | ESP | fat32 | 1MiB | 551MiB |
swap | primary | linux-swap | 551MiB | 48.5GiB |
/ | primary | xfs | 48.5GiB | 100% |
RAM 32 GB なので、RedHat によると 1.5 倍のスワップ領域があると良さそうとのことです。
つまり 48 GB くらい。
GPT でラベルを作ります。
# parted /dev/nvme0n1 mklabel gpt
上表の通りにパーティションを切っていきます。
# parted /dev/nvme0n1 mkpart ESP fat32 1MiB 551MiB
# parted /dev/nvme0n1 mkpart primary linux-swap 551MiB 48.5GiB
# parted /dev/nvme0n1 mkpart primary xfs 48.5GiB 100%
ブートボリュームに対しては、起動可能にするために下記コマンドを打ちます。
1
は、パーティションの番号です。
今回は明らかに 1
なのですが、心配であれば print
で確認できます。
# parted /dev/nvme0n1 mkpart set 1 esp on
結果を確認します。
# parted /dev/nvme0n1 print
Model:...
...
Disk Flags:
Number Start End Size File system Name Flags
1 1049KB 578MB 577MB ESP boot,esp
2 578MB 52.1GB 51.5GB primary swap
3 52.1GB 1000GB 948GB primary swap
# fdisk -l
Dsik /dev/nvme0n1: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk mode: ...
...
Divice Start End Sectors Size Type
/dev/nvme0n1p1 2048 1128447 1126400 550M EFI System
/dev/nvme0n1p2 1128448 101711871 100583424 48G Linux swap
/dev/nvme0n1p3 101711872 1953523711 1851811840 883G Linux filesysytem
...
ファイルシステムを作る
ブート、ルートボリュームには mkfs
を、スワップボリュームには mkswap
を使います。
# mkfs.fat -F 32 /dev/nvme0n1p1
# mkswap /dev/nvme0n1p2
# mkfs.xfs /dev/nvme0n1p3
ファイルシステムをマウントする
# mount --mkdir /dev/nvme0n1p1 /mnt/boot
# swapon /dev/nvme0n1p2
# mount /dev/nvme0n1p3 /mnt
確認します。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 680M 1 loop /run/archiso/airrootfs
sda 8:1 1 14.8G 0 dist
└─sda1 8:1 1 14.8G 0 part /run/archiso/bootmnt
nvme0n1 259:0 0 931.5G 0 disk
├─nvme0n1p1 259:2 0 550M 0 part /mnt/boot
├─nvme0n1p2 259:5 0 48G 0 part [SWAP]
└─nvme0n1p3 259:6 0 883G 0 part /mnt
初期パッケージをインストールする
インストールガイドのものプラス、一時的な作業用エディタとして vi を入れておきます。
# pacstrap /mnt base linux linux-firmware vi
システムの初期設定をする
fstab を作る
# genfstab -U /mnt >> /mnt/etc/fstab
念のため中身を確認します。
ルート、ブート、スワップボリュームが正しい場所にマウントされていればおkです。
# cat /mnt/etc/fstab
chroot する
# arch-chroot /mnt
タイムゾーンの設定をする
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc
JST になっていることを確認します。
# date
Tue Aug 23 22:52:58 JST 2022
ロケールの設定をする
/etc/locale.gen
を編集し、
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
をアンコメントします。
# sed -i s/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g /etc/locale.gen
# sed -i s/#ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/g /etc/locale.gen
# cat /etc/locale.gen | grep -v '#'
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
ロケールを作成します。
# locale-gen
Generating locales...
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
Generation complete.
ロケールの設定を書きます。
# echo 'LANG=ja_JP.UTF-8' > /etc/locale.conf
root のパスワードを設定する
# passwd
ブートローダーの設定をする
最近は systemd-boot を使うのが良いっぽいです。
ブートマネージャーをインストールする
# bootctl install
Created "/boot/EFI".
...
Created EFI Boot entry "Linux Boot Manager".
ローダーエントリーを作る
/boot/loader/entries/arch.conf
を作成、編集します。
…が、なんかおかしい。
/boot/
直下にいたはずの vmlinuz-linux
initramfs-linux.img
nitramfs-linux-fallback.img
が消滅している。
# ls /boot/
EFI loader
一応↓これで解決したっぽい。
# pacman -S linux
...
# ls /boot/
EFI initramfs-linux-fallback.img initramfs-linux.img loader vmlinuz-linux
インテル CPU 用のマイクロコードのインストールもしておきます。
# pacman -S intel-ucode
...
# ls -l /boot
EFI initramfs-linux-fallback.img initramfs-linux.img intel-ucode.img loader vmlinuz-linux
これでエントリー設定を書けます。
タイプミスしたくないのでなるべく確実な方法でやります。
# basename `ls /boot/vmlinuz-linux` > /boot/loader/entries/arch.conf
# basename `ls /boot/intel-ucode.img` >> /boot/loader/entries/arch.conf
# basename `ls /boot/initramfs-linux.img` >> /boot/loader/entries/arch.conf
# blkid -o export /dev/nvme0n1p3 | grep ^UUID >>/boot/loader/entries/arch.conf
これを編集して、最終的に↓こんな感じにします。
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=UUID={ルートパーティションの UUID} rw
設定内容を確認します。
# bootctl list
Boot Loader Entries:
...
ローダーの設定を書く
/boot/loader/loader.conf
を編集します。
default arch.conf
timeout 4
console-mode max
editor no
iwd をインストールしておく
再起動前のライブメディアでの作業段階でインストールしておきます。
後からだとそもそも iwd とかがなくてネットワークに接続できず、インストールできないので。
# pacman -S iwd
再起動する
chroot から抜けて、再起動します。
# exit
# reboot
ブートローダーの画面が出て、Arch Linux にログインできたら成功です。
ネットワークに接続する
iwd を有効化する
# systemctl enable iwd
# systemctl start iwd
iwd での具体的な接続方法は先述の通り。
systemd-resolved を有効化する
これをしないと名前解決ができません。
# systemctl enable systemd-resolved
# systemctl start systemd-resolved
これだけでもある程度ちゃんと動いている(名前解決できている)のですが、従来の /etc/resolv.conf
には、ローカルのスタブ DNS リスナーのみを記載するのが推奨されているそうです。
# mv /etc/resolv.conf /etc/resolv.conf.orig
# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
疎通確認します。
# ping archlinux.org
ただ、この時点だと IPv6 非対応のサーバーへは接続できません。
例えば github.com に ping すると、
# ping github.com
ping: connect: Network is unreachable
となります。
名前解決はできているので、単に通信が届いていないようです。
LAN 内への ping も同様なので、IP アドレス割当てを調べてみると、
# ip address
...
3: wlan0: ...
link/ether 8c:...
inet6 2400::...
valid_lft ...
inet6 fe80::...
valid_lft ...
となっており、IPv4 アドレスがないですね。
やはりネットワークマネージャーは入れないとダメっぽい。
systemd-networkd の設定をする
とりあえず起動していることを確認します。
# systemctl status systemd-networkd
# networkctl -a
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 wlan0 wlan routable unmanaged
2 links listed.
これの 2 wlan0
の設定を /etc/systemd/network/wlan0.network
に作成します。
[Match]
Name=wlan0
[Network]
DHCP=yes
これでサービスを再起動して完了です。
# systemctl restart systemd-networkd
# networkctl -a
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 wlan0 wlan routable configured
2 links listed.
# ip address
...
3: wlan0: ...
link/ether 8c:...
inet 192.168.3.14/24...
valid_lft ...
inet6 2400::...
valid_lft ...
inet6 fe80::...
valid_lft ...
ちゃんと configured
になっていて、IPv4 アドレスも割当られました。
ユーザーを作る
# useradd -m -G wheel okkey
パスワードを設定しておきます。
# passwd okkey
権限設定
sudo
を使えるようにします。
# pacman -S sudo
visudo
で /etc/sudoers
を編集し、wheel
グループが sudo
できるようにします。
NOPASSWD
はさすがにちょっとアレなので、弱い方をアンコメントします。
%wheel ALL=(ALL:ALL) ALL
試しにコマンドを打ってみます。
# su - okkey
# sudo ls /
(いつもの警告文が出ればおk)
ホスト名を設定する
注意:ここから先は、作業用に作ったユーザーで行います。
$ sudo hostnamectl set-hostname x1-carbon-gen10-arch
Static hostname
が、↑で設定したものになっていれば成功です。
$ hostnamectl status
Static hostname: x1-carbon-gen10-arch
...
AUR ヘルパーをインストールする
今は yay が主流でしょう。
GitHub リポジトリの手順に従ってインストールします。
$ pacman -S --needed git base-devel
$ git clone https://aur.archlinux.org/yay-bin.git
$ cd yay-bin
$ makepkg -si
動作確認を兼ねて、パッケージを最新化しておきましょうか。
$ yay -Syu
デスクトップ環境を作る
こちらの記事を参考にさせていただきました。ほぼ同じです。
-
pacman
ではなくyay
を使いました。-
sudo
も外します。yay
は内部で(必要なときに?)sudo
を呼ぶらしく、最初からsudo
付きで実行すると警告が出ます。
-
- xfce4-goodies のものは正直全部入れちゃっていい(というか本当に不要なものの方が少ない)ので、全部入れました。
コマンドだけ列挙しておきます。
$ yay -S xorg-server
$ yay -S xfce4
$ yay -S xfce4-goodies
$ yay -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra ttf-dejavu
$ yay -S lightdm lightdm-gtk-greeter
$ sudo systemctl enable lightdm
ここまでやって再起動すると、GUI が起動します!やったね!
次にやること
ここから先は、昔の記憶や昔の記憶を頼りにやっていけば良さそうです。
以下、あーだこーだしている最中にダメだったり、やり直したりしたことです。
グラフィックドライバーをあーだこーだする
とりあえず Xfce が起動していたのですが、あるタイミングでの再起動で、急に起動しなくなりました。
画面上、以下のログのところでスタックしました。
[ OK ] Reached target Graphical Interface.
このキーワードで調べると、NVIDIA 用のドライバーのインストールやら設定やらが上手くいっていないという記事ばかりで、自分には当てはまりませんでした。
とりあえずインストール時に使った USB メモリで起動、SSD の方をマウントし、Xorg のログを確認します。
エラーログのプリフィックスには (EE)
とあるので、エラーログがないか見てみます。
# cat /var/log/Xorg.0.log | grep '(EE)'
[ 8.606] (EE) Failed to load module "intel" (module does not exist, 0)
[ 8.607] (EE) Failed to load module "fbdev" (module does not exist, 0)
[ 8.607] (EE) Failed to load module "vesa" (module does not exist, 0)
通常、intel
→ fbdev
→ vesa
という順序でドライバーを探すらしいのですが、どれもコケています。
というか modesetting
が選ばれるべきなのですが、なぜかロードされていません。
※ここでもう少し真面目に調べれば良かったのですが、明日も朝から仕事なので解決を優先しました。
Intel 用のドライバをインストールしてみます。
ただし、これは本来 非推奨 です。
# yay -S xf86-video-intel
これで再起動したら X が起動したのですが、めちゃくちゃ重い(特に Web ブラウザとか VSCode とか)し、クリックを受け付けなくなるし、最終的にフリーズしました。
もう一度調査しようと思って、一旦 xf86-video-intel をアンインストールし、再起動します。
# yay -Rs xf86-video-intel
すると、今度はなぜかちゃんと起動しました。
なんで?
覚書:仮想コンソールの切り替え
こういうグラフィック系の問題を調査したり対応したりするとき、仮想コンソールが便利です。
-
Ctrl + Alt + F[1-6]
でコンソールを切り替えられる。 - デフォルトは1番で、
Ctrl + Alt + F1
が対応する。 -
Ctrl + Alt + F7
で GUI に復帰できる。
ネットワークマネージャーを変更する
systemd-networkd でここまでやってきましたが、GUI と良く連携できるツールがありません。
(作るという手もあるけどちょっとしんどそう。)
ということで、残念ながら NetworkManager を使うことにしました。
nm-applet と併せてインストールします。
$ yay -S networkmanager network-manager-applet
NetworkManager のサービスを有効化し、systemd-networkd と iwd は無効化します。
$ sudo systemctl enable NetworkManager
$ sudo systemctl disable systemd-networkd
$ sudo systemctl disable iwd
これで再起動すれば、システムトレーに nm-applet が表示され、そこからネットワーク関連の設定が可能になります。
サウンド関連の設定をする
PulseAudio をインストール・起動する
サウンドドライバーには組み込みの ALSA を使います。
サウンドサーバーには PulseAudio を、GUI ツールとして PulseAudio Volume Control を使います。
$ yay -S pulseaudio pavucontrol
とりあえず手動で起動します。
$ pulseaudio --start
--check
オプションでステータスを確認できるのですが、終了コードでしか結果を確認できないので注意。
$ pulseaudio --check || echo $?
0
…が、音が出ません。
音が出ない
PulseAudio の GUI から「ハードウェア出力装置」を見てみると、デバイスが出てきません。
設定タブでも、サウンドカードがないとのこと。
一応 CLI でも確認してみますが、サウンドカード認識されてないっぽいですね。
$ pacmd list-cards
0 card(s) available.
sof-firmware をインストールする
そういえば、起動時に sof-firmware が無いだかなんだかでエラーが出ていたような?
$ sudo dmesg | grep -E 'sof.*firmware'
[ 7.187399] sof-audio-pci-intel-tgl 0000:00:1f.3: Direct firmware load for intel/sof/sof-adl.ri failed with error -2
[ 7.187401] sof-audio-pci-intel-tgl 0000:00:1f.3: error: sof firmware file is missing, you might need to
[ 7.187433] sof-audio-pci-intel-tgl 0000:00:1f.3: error: failed to load DSP firmware -2
やっぱ出てますね。
インストールしましょう。
$ yay -S sof-firmware
で再起動すると、たくさんのデバイスが認識されていました。
ちょうど良いタイミングでぶいすぽっ!の新人さんがデビュー配信をなさっていたので、動作確認がてら拝見しました。
一応 dmesg
確認しましたが、エラーはなくなっていました。
$ sudo dmesg | grep -E 'sof.*firmware'
所感
なんか systemd の守備範囲めっちゃ広くなってない?
書き忘れたこと
参考
- インストールガイド - ArchWiki
- ソリッドステートドライブ/NVMe - ArchWiki
- Lenovo ThinkPad X1 Carbon (Gen 10) - ArchWiki
- パーティショニング - ArchWiki
- マイクロコード - ArchWiki
- Intel Graphics - ArchWiki
- サウンドシステム - ArchWiki
- 『Rufus』 ISOファイルから起動可能なUSBフラッシュドライブ作成 | とある隣人の備忘録
- Arch Linux をおしゃれに最速インストール - おしゃれな気分でプログラミング
- 2021年版Arch Linuxインストール備忘録 - Folioscope
- Arch Linuxの最小限インストール - Qiita
- Thinkpad X1 Carbon に ArchLinux を入れた際にはまったこと
- [SOLVED] Error loading \vmlinuz-linux: not found / Newbie Corner / Arch Linux Forums
- systemd-resolvedを使ってみよう|とりあえず動かす DNS
- Linux 5.18で「Intel Thread Director」に対応 〜 Alder LakeのPコア・Eコアの割当が最適化される - Nishiki-Hub
- Arch Linux + Xfce 快適環境を構築したときのログ - blog.livewing.net
- Arch Linuxにデスクトップ環境を構築する
- https://github.com/Jguer/yay
Discussion