Arch Linux を試してみた
はじめに
Ubuntu を入れていた 2台の ThinkCentre のうち1台に mainline のカーネルを入れてみたら、再起動後 zfs のモジュールが読み込めくてハマったので、この機会に前から気になってた Arch Linux を試してみました。
Arch Linux - Wikipedia を見たら GUI インストーラーでお手軽そうと思っていた Antergos はプロジェクト終了とのことでした。
検索すると Arch Linux をおしゃれに最速インストール - おしゃれな気分でプログラミング という良い記事が見つかったのでこちらを参考にインストールしました。
インストールメディアは rufs で USB メモリに作成
Linux で dd も試したのですが、うまく起動しませんでした。
rufs では Syslinux をダウンロードしてインストールするか聞かれたのでそうしました(RufusでLinuxのインストールメディアを作る。 | PC-FREEDOM の「Syslinuxとは」の項参照)。
USB メモリからブートして SSD にインストール
今回のインストールの構成は以下の通りです。
- US キーボード
- 有線 LAN
- DHCP
- デュアルブート無し
USB メモリからブートしたライブシステムで DHCP が動いてインターネットに接続できる状態でした。
NTP を有効にします
timedatectl set-ntp true
パーティション作成
インストール先のディスク名を以下のコマンドで確認します。
lsblk
インストール先のディスクのパーティションを作成します。cgdisk か fdisk コマンドを使うとありましたが、 cgdisk は使ったことが無かったのでこちらを使ってみました。 TUI で操作できて簡単で良かったです。
スワップパーティションのサイズは How Much Swap Should You Use in Linux? - It’s FOSS と SwapFaq - Community Help Wiki の RAM が 1GB より大きい場合は最低で RAM のサイズの平方根というお勧めに従いました。
具体的には RAM が 64 GB なのでスワップは 8GB にしました。
パーティション | サイズ | パーティションタイプ |
---|---|---|
/dev/nvme0n1p1 | 512M | EFI |
/dev/nvme0n1p2 | EFIとスワップを引いた残り | Linux filesystem |
/dev/nvme0n1p3 | 8GB | Linux swap |
フォーマットする。
mkfs.fat -F32 /dev/nvme0n1p1
mkfs.ext4 /dev/nvme0n1p2
mkswap /dev/nvme0n1p3
パッケージをインストール
ルートパーティションをマウント。
mount /dev/nvme0n1p2 /mnt
/mnt/boot
を作成して EFI パーティションをマウント。
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
swapを有効にします。
mkswap /dev/nvme0n1p3
パッケージをインストール。
pacstrap /mnt base linux linux-firmware man-db vim
chroot してさらにセットアップを実行
fstab 設定。
genfstab -U /mnt >> /mnt/etc/fstab
chroot を実行。
arch-chroot /mnt
タイムゾーン設定。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
システムの時刻をBIOSの時刻にコピー。タイムゾーンはUTCになる。
hwclock --systohc
vim /etc/locale.gen
で en_US.UTF-8 UTF-8
と ja_JP.UTF-8 UTF-8
の行をアンコメントして以下のコマンドでロケールを生成。
locale-gen
/etc/locale.conf
を以下のように編集。
LANG=en_US.UTF-8
コンソールのキーボード設定でCapsLockとCtrl入れ替え。
mkdir -p /usr/local/share/kbd/keymaps
gzip -cd /usr/share/kbd/keymaps/i386/qwerty/us.map.gz > /usr/local/share/kbd/keymaps/my_custom_us.map
vim /usr/local/share/kbd/keymaps/my_custom_us.map
で編集して、以下のように入れ替え。
…(略)…
keycode 29 = Caps_Lock
…(略)…
keycode 58 = Control
…(略)…
以下のコマンドで読み込んで有効にします。
loadkeys /usr/local/share/kbd/keymaps/my_custom_us.map
キーを押してみて期待通りになっていたら、 /etc/vconsole.conf
を以下のように編集。
KEYMAP=/usr/local/share/kbd/keymaps/my_custom_us.map
/etc/hostname
を編集してお好みのホスト名を設定。ここでは thinkcentre とします。
/etc/hosts
を以下のように編集。
127.0.0.1 localhost
::1 localhost
127.0.1.1 thinkcentre.localdomain thinkcentre
passwd
を実行して root ユーザのパスワードを設定。
ブートローダに GRUB を使う設定。
pacman -S grub efibootmgr dosfstools os-prober mtools
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB_UEFI
初回と今後のgrubの設定変更時に以下のコマンドを実行。
grub-mkconfig -o /boot/grub/grub.cfg
マイクロプロセッサ用コードをインストール。CPUに応じて intel-ucode
か amd-ucode
を入れます。
pacman -S amd-ucode
grub-mkconfig -o /boot/grub/grub.cfg
ネットワーク設定
参考にした記事はノートPCで無線LANなので NetworkManager を使っていますが、私は有線LANなので systemd-networkd
にしました。
ネットワーク設定 - ArchWiki の表を見ると Archiso の base に含まれていて DHCP クライアントも内蔵しているとのこと。
DNS はとりあえず systemd-resolved - ArchWiki を使うことにしました。「systemd-resolved はデフォルトでインストールされる systemd パッケージの一部です。」とあるのでそのままで使えます。
systemctl enable --now systemd-networkd
systemctl enable --now systemd-resolved
chroot を抜けて再起動
exit
reboot
インストールしたディスクから起動後、さらにセットアップを進める
ネットワークの動作確認と設定
インストールしたディスクから起動後、root でログインします。
ping 8.8.8.8
インターネットに接続できることを確認。
ping google.com
で名前解決が出来ることを確認。
後に gpg でリモートのキーサーバからキーをインストールするときに gpg: keyserver receive failed: Server indicated a failure
というエラーになったのですが /etc/resolv.conf
が空だったのが原因でした (https://unix.stackexchange.com/a/630182/135274 に書かれていました)。
systemd-resolved - ArchWiki にも書かれているように以下のコマンドで解消しました。
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
一般ユーザの作成と sudo の設定
ユーザ名はここでは hnakamur とします。
useradd -m -G wheel hnakamur
パスワードを設定。
passwd hnakamur
sudo パッケージをインストール。
pacman -S sudo
visudo を起動。
EDITOR=vim visudo
コメントアウトされている以下の行をアンコメントして有効にして保存して終了。
%wheel ALL=(ALL) ALL
root ユーザをログアウトして、作成したユーザでログインします。
tmux をインストール
sudo pacman -S tmux
https://github.com/hnakamur/dotfiles
の .tmux.conf
をホームディレクトリにコピーしてキーバインドを変更。
sshd のインストールと起動
sudo pacman -S openssh
sudo vim /etc/ssh/sshd_config
で以下のように編集。
#PasswordAuthentication yes
PasswordAuthentication no # この行を追加
#UsePAM yes
UsePAM no # この行を追加
X11Forwarding はデフォルト値で no となっていたので変更無し。
#X11Forwarding no
sshd を起動し、自動起動を有効にします。
sudo systemctl enable --now sshd
keepassxc-cli も試してみた
sudo pacman -S keepassxc
で keepassxc-cli
という CLI もインストールされるので、初めて使ってみました。
keepassxc のデータベースファイルの入った USB 接続のハードディスクを接続してファイルをコピーしました。
sudo dmesg
でデバイスファイル名を確認し、 /dev/sda
だったので以下のようにしました。
sudo mount /dev/sda /mnt
cp /mnt/path/to/my_database.db ~/
sudo umount /mnt
keepassxc-cli(1) — Arch manual pages を参考に attachment-export サブコマンドを使って添付ファイルとして含めていた ssh の公開鍵を ~/.ssh/authorized_keys
ファイルに保存します。
mkdir -m 700 ~/.ssh
keepassxc-cli attachment-export my_database.db "DB内のエントリ名" 添付ファイル名 保存先ファイル名
DB内のエントリ名は search サブコマンドで調べられます。
open サブコマンドを使ってDBファイルを開いてインタラクティブにコマンドを実行することもできます。 DBファイルのベース名>
のようなプリンプトでサブコマンドをDBファイル名無しで実行します。使い終わったら close サブコマンドでDBを閉じます。
インタラクティブにコマンドを実行する際、空白を含んだエントリ名を指定する際はシングルクォートで囲むと応答なしでプロンプトに戻って何も起きませんでした。ダブルクォートで囲むと正常に動作しました。
clip サブコマンドは xclip コマンドを試したが失敗したという主旨の出力が出ました。 sudo pacman -S xclip
でインストールしましたが、 X11 をインストールしていないコンソールでは使えないらしくうまく動きませんでした。
代わりに show コマンドを -s -a password
オプションを指定して実行することで指定したエントリのパスワードがクリアテキストで表示されたのでこれを tmux でコピー&ペーストして利用しました。この方法は人に見られてしまう環境だとまずいですが、私の自宅では問題ありません。
yay のインストール
Jguer/yay: Yet another Yogurt - An AUR Helper written in Go をインストールします。
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Linux カーネル 5.19 を入れてみた
標準のカーネルのバージョンを uname -r
で確認すると 5.18.16-arch1-1
でした。
カーネル - ArchWiki を見て AUR (en) - linux-mainline パッケージを入れてみました。
yay -S linux-mainline
いくつかプロンプトが出て質問されるので適宜答えます。
途中で gpg のキーをリモートから取得してインストールするところで、前述の gpg: keyserver receive failed: Server indicated a failure
のエラーが出ましたが、上記の手順で解消しました。
ビルド済みのカーネルをダウンロードしてインストールされるのではなく、ローカルでビルドされていました。
ビルドがいつまでも終わらないので Ctrl-C で一旦中止しました。
makepkg - ArchWiki を見て MAKEFLAGS=-j8
をつけて以下のコマンドを実行してみました。
MAKEFLAGS=-j8 yay -S linux-mainline
すると ABAF11C65A2970B130ABE3C479BE3E4300411886 の gpg 鍵のインポートで今度は gpg: keyserver receive failed: No data
というエラーになりました。
gpg --recv 0xABAF11C65A2970B130ABE3C479BE3E4300411886
でも同じエラーになりました。
[SOLVED] Cannot import Torvalds’s GPG key / Newbie Corner / Arch Linux Forums を見て以下のコマンドを実行すると No data
ではなく no user ID
になりました。
gpg --keyserver keys.openpgp.org --recv 0xABAF11C65A2970B130ABE3C479BE3E4300411886
以下のような出力が出ていました。
$ gpg --keyserver keys.openpgp.org --recv 0xABAF11C65A2970B130ABE3C479BE3E4300411886
gpg: data source: http://keys.openpgp.org:11371
gpg: armor header: ABAF 11C6 5A29 70B1 30AB E3C4 79BE 3E43 0041 1886
gpg: pub rsa2048/79BE3E4300411886 2011-09-20
gpg: key 79BE3E4300411886: no user ID
gpg: Total number processed: 1
auto-key-retrieve を参考に ~/.gnupg/dirmngr.conf
を以下の内容で作成してみました。
keyserver hkps://keys.openpgp.org
ps auxwwf | grep dirmngr
で /usr/bin/dirmngr --supervisord
の PID を調べて kill -HUP そのPID
で設定ファイルを再読み込みさせて、再度試しました。が、以下のように problem importing keys
というエラーになりました。
:: PGP keys need importing:
-> ABAF11C65A2970B130ABE3C479BE3E4300411886, required by: linux-mainline
==> Import? [Y/n] y # y と入力
:: Importing keys with gpg...
gpg: key 79BE3E4300411886: no user ID
gpg: Total number processed: 1
-> problem importing keys
kernel - gpg2 locate keys wont work (immediately returns) - Ask Ubuntu を参考に以下のコマンドを実行するとインポートできました。
gpg2 --auto-key-locate cert,pka,dane,wkd,keyserver --locate-keys torvalds@kernel.org
$ gpg2 --auto-key-locate cert,pka,dane,wkd,keyserver --locate-keys torvalds@kernel.org
gpg: error retrieving 'torvalds@kernel.org' via DNS CERT: No name
gpg: error retrieving 'torvalds@kernel.org' via PKA: No name
gpg: error retrieving 'torvalds@kernel.org' via DANE: No name
gpg: key 79BE3E4300411886: public key "Linus Torvalds <torvalds@kernel.org>" imported
gpg: Total number processed: 1
gpg: imported: 1
pub rsa2048 2011-09-20 [SC]
ABAF11C65A2970B130ABE3C479BE3E4300411886
uid: [ unknown ] Linus Torvalds <torvalds@kernel.org>
sub rsa2048 2011-09-20 [E]
これで gpg --list-keys
で鍵が一覧に出てきました。
再度 MAKEFLAGS=-j8 yay -S linux-mainline
を実行すると今度は gpg 鍵のインポートのプロンプトは出ずに先に進みました。
その後時間がかかるので目を離していたら最後に sudo のプロンプトが出てタイムアウトになっていました。
==> Finished making: linux-mainline 5.19-1 (Sun 14 Aug 2022 06:24:16 AM JST)
==> Cleaning up...
[sudo] password for hnakamur:
sudo: timed out reading password
sudo: a password is required
-> exit status 1
再度 MAKEFLAGS=-j8 yay -S linux-mainline
を実行して Packages to cleanBuild?
に [N]one の N で答えたら、途中で以下のようなメッセージが出力されてビルドはスキップされて進みました。
==> Sources are ready.
-> linux-mainline-5.19-1 already made -- skipping build
[sudo] password for hnakmaur: ここでパスワードを入力
loading packages...
resolving dependencies...
looking for conflicing packages...
Packages (1) linux-mainline-5.19-1
Total Installed Size: 177.07 MiB
:: Proceed with installation? [Y/n] ここでEnterキーを押す
(1/1) checking keys in keyring [########################################################################################] 100%
(1/1) checking package integrity [########################################################################################] 100%
(1/1) loading package files [########################################################################################] 100%
(1/1) checking for file conflicts [########################################################################################] 100%
(1/1) checking available disk space [########################################################################################] 100%
:: Processing package changes...
(1/1) installing linux-mainline [########################################################################################] 100%
Optional dependencies for linux-mainline
wireless-regdb: to set the correct wireless channels of your country
linux-firmware: firmware images needed for some devices [installed]
:: Running post-transaction hooks...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating module dependencies...
(3/3) Updating linux initcpios...
==> Building image from preset: /etc/mkinitcpio.d/linux-mainline.preset: 'default'
-> -k /boot/vmlinuz-linux-mainline -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-mainline.img
==> Starting build: 5.19.0-1-mainline
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: xhci_pci
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: /boot/initramfs-linux-mainline.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux-mainline.preset: 'fallback'
-> -k /boot/vmlinuz-linux-mainline -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-mainline-fallback.img -S autodetect
==> Starting build: 5.19.0-1-mainline
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: bfa
==> WARNING: Possibly missing firmware for module: qla1280
==> WARNING: Possibly missing firmware for module: qed
==> WARNING: Possibly missing firmware for module: qla2xxx
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: xhci_pci
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: /boot/initramfs-linux-mainline-fallback.img
==> Image generation successful
WARNING がいくつか出ているのが気になりますが、イメージの生成は試行したと最後に出ていました。
ここで grub の設定のバックアップを取ってから更新を実行します。
sudo cp /boot/grub/grub.cfg{,.bak}
sudo grub-mkconfig -o /boot/grub/grub.cfg
diff -u /boot/grub/grub.cfg{.bak,}
で差分を見て linux-mainline のメニューが追加されていることを確認しました。
sudo reboot
で再起動してみると起動できて Arch Linux 5.19.0-1-mainline (tty1)
と表示されていました。
GNOME をインストール
GNOME - ArchWiki を読んで以下のコマンドでインストール。
sudo pacman -S gnome
いくつか質問されますが全てデフォルトで回答。
sudo pacman -S gdm
sudo systemctl enable --now gdm
最初に画面下部に出ていたドック?は Windows キーで表示/非表示がトグルになりました。
Wayland で左CtrlとCapsLock入れ替え
最初 Xorg が動いているのかなと思い Xorg でのキーボード設定 - ArchWiki と X KeyBoard extension - ArchWiki を読んで以下のコマンドを実行しました。
setxkbmap -model pc101 -layout us -variant qwerty -option ctrl:swapcaps
が、 WARNING: Running setxkbmap against an Wayland server
という警告が出て Xorg ではなく Wayland が動いていることを知りました。
Wayland - ArchWiki と 入力リマップユーティリティ - ArchWiki を見て wez/evremap: A keyboard input remapper for Linux/Wayland systems, written by @wez をインストール。
yay -S evremap
パッケージ内のファイル一覧を確認。
$ pacman -Ql evremap
evremap /usr/
evremap /usr/bin/
evremap /usr/bin/evremap
evremap /usr/lib/
evremap /usr/lib/systemd/
evremap /usr/lib/systemd/system/
evremap /usr/lib/systemd/system/evremap.service
サービス定義ファイルの内容を確認。
$ cat /usr/lib/systemd/system/evremap.service
[Service]
WorkingDirectory=/
# For reasons I don't care to troubleshoot, Fedora 31 won't let me start this
# unless I use `bash -c` around it. Putting the command line in directly
# yields a 203 permission denied error with no logs about what it didn't like.
ExecStart=bash -c "/home/wez/github/evremap/target/release/evremap remap /home/wez/github/evremap/pixelbookgo.toml"
Restart=always
[Install]
WantedBy=gdm.service
evremap 用の設定ファイルを作成。
cat <<'EOF' | sudo tee /etc/evremap.toml > /dev/null
# The name of the device to remap.
# Run `sudo evremap list-devices` to see the devices available
# on your system.
device_name = "Lenovo ThinkPad Compact USB Keyboard with TrackPoint"
# If you have multiple devices with the same name, you can optionally
# specify the `phys` value that is printed by the `list-devices` subcommand
# phys = "usb-0000:07:00.3-2.1.1/input0"
# Swap CapsLock and left Control.
[[remap]]
input = ["KEY_LEFTCTRL"]
output = ["KEY_CAPSLOCK"]
[[remap]]
input = ["KEY_CAPSLOCK"]
output = ["KEY_LEFTCTRL"]
EOF
サービス定義ファイルを作成。
cat <<'EOF' | sudo tee /etc/systemd/system/evremap.service > /dev/null
[Service]
WorkingDirectory=/
ExecStart=/usr/bin/evremap remap /etc/evremap.toml
Restart=always
[Install]
WantedBy=gdm.service
EOF
サービスを起動し自動起動を有効にしました。これで期待通り左CtrlとCapsLockが入れ替わりました。
sudo systemctl enable --now evremap
インプットメソッドの設定
- インプットメソッド - ArchWiki
- Mozc - ArchWiki
- AURにあるMozc-UT系パッケージについて - Chienomi
- AURに(fcitx-)mozc-ut-unifiedを上げました - Chienomi
yay -S fcitx5-mozc-ut
[hnakamur@thinkcentre ~]$ yay -S fcitx5-mozc-ut
:: There are 3 providers available for mozc>=2.28.4800.102:
:: Repository AUR
1) mozc 2) mozc-ut 3) mozc-ut-united
Enter a number (default=1):
:: Checking for conflicts...
:: Checking for inner conflicts...
[Repo:5] wayland-protocols-1.26-1 xcb-imdkit-1.0.3-1 fmt-8.1.1-2 unicode-cldr-annotations-38.0-2 fcitx5-5.0.18-2
[Repo Make:7] java-runtime-common-3-3 libnet-1:1.1.6-1 jre11-openjdk-headless-11.0.16.1.u1-2 jre11-openjdk-11.0.16.1.u1-2 java-environment-common-3-3 jdk11-openjdk-11.0.16.1.u1-2 bazel-5.2.0-1
[Aur:2] mozc-2.28.4800.102-1 fcitx5-mozc-ut-2.28.4800.102-1
==> Remove make dependencies after install? [y/N] y
:: (1/2) Downloaded PKGBUILD: mozc
:: (2/2) Downloaded PKGBUILD: fcitx5-mozc-ut
2 mozc (Build Files Exist)
1 fcitx5-mozc-ut (Build Files Exist)
==> Diffs to show?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==> A
…(略)…
==> Proceed with install? [Y/n] y
Fcitx5 - ArchWiki を参考に以下のコマンドで /etc/environments
に設定を追加。
cat <<'EOF' | sudo tee -a /etc/environment > /dev/null
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
EOF
GUI の設定ツールをインストール。
sudo pacman -S fcitx5-configtool
設定ツールを起動。
fcitx5-configtool
- 右の [Available Input Method] の下の入力欄に Mozc と入力する
- その下のリストに表示された Mozc を選んで左矢印のボタンを押す
- ダイアログ右下の [Apply] ボタンを押す
- [Close] ボタンを押して設定ツールを終了する
日本語フォントをインストール
sudo pacman -S adobe-source-han-sans-jp-fonts adobe-source-han-serif-jp-fonts
ターミナルで Ctrl+Space で mozc が使えるようになったが日本語が表示されないので fc-cache -vf
を実行してみた(が、本当に必要だったかは要確認)。
これで入力した日本語が正しく表示されるようになりました。が、入力中のポップアップウィンドウの中は文字化けしています。
GDM から一旦ログアウトしてログインし直したら解消しました。
Visual Studio Code をインストール
yay -S visual-studio-code-bin