😎

Arch Linux を Windowsマシンに同居させた時のメモ

2021/04/29に公開

メモです

環境によってこの通りうまくいくこともいかないこともありますのでご注意ください。メモです。

前提:

  • 有線
  • 別にLinux機がある
  • グラボはNvidia

環境と方針

今回の環境を作るにあたっての佳境と方針。

Windowsとの同居を慎重に

変なことしないように一応復習しておくとよい。

https://wiki.archlinux.jp/index.php/Windows_と_Arch_のデュアルブート#UEFI_.E7.92.B0.E5.A2.83

パーティションの方針

とりあえず、デカイドライブ積んでるわけでもないので、rootのみのシングルパーティションで良かろ。
空き地に入れる。

トラブった時のコピペ

さすがに検索するのが辛いので、オンラインにテキストを簡単に貼れるサービスで共有する

command |& curl -F 'f:1=<-' ix.io

環境(後出し)

# uname --all
Linux kyoh86-desktop 5.11.11-zen1-1-zen #1 ZEN SMP PREEMPT Tue, 30 Mar 2021 14:10:21 +0000 x86_64 GNU/Linux
# lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Starship/Matisse IOMMU
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:01.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse GPP Bridge
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:03.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:03.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse GPP Bridge
00:04.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:05.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:07.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:07.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
00:08.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:08.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 61)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 5
00:18.6 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 6
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse Device 24: Function 7
01:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse Switch Upstream
02:05.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
02:08.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
02:09.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
02:0a.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Matisse PCIe GPP Bridge
03:00.0 Ethernet controller: Intel Corporation I211 Gigabit Network Connection (rev 03)
04:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Reserved SPP
04:00.1 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
04:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
05:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 51)
06:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 51)
07:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 710] (rev a1)
07:00.1 Audio device: NVIDIA Corporation GK208 HDMI/DP Audio Controller (rev a1)
08:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Function
09:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Reserved SPP
09:00.1 Encryption controller: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Cryptographic Coprocessor PSPCPP
09:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
09:00.4 Audio device: Advanced Micro Devices, Inc. [AMD] Starship/Matisse HD Audio Controller

USBインストールメディアを作る

作るときはLinuxで作るのが楽

差して lsblk を叩くと、パスがわかる。

$ lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                 8:0    1  28.9G  0 disk
├─sda1              8:1    1   623M  0 part  /run/media/kyoh86/ARCH_201909
└─sda2              8:2    1    64M  0 part
nvme0n1           259:0    0 476.9G  0 disk
├─nvme0n1p1       259:1    0   512M  0 part  /boot
└─nvme0n1p2       259:2    0 476.4G  0 part
  └─volume        254:0    0 476.4G  0 crypt
    └─volume-root 254:1    0 476.4G  0 lvm   /

まずアンマウントする

$ umount /run/media/kyoh86/ARCH_201909
$ lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                 8:0    1  28.9G  0 disk
├─sda1              8:1    1   623M  0 part
└─sda2              8:2    1    64M  0 part
nvme0n1           259:0    0 476.9G  0 disk
├─nvme0n1p1       259:1    0   512M  0 part  /boot
└─nvme0n1p2       259:2    0 476.4G  0 part
  └─volume        254:0    0 476.4G  0 crypt
    └─volume-root 254:1    0 476.4G  0 lvm   /

imageをダウンロードしておく

https://www.archlinux.jp/download/

dd で焼き込む

$ sudo su -
[sudo] password for kyoh86:
[root@kyoh86-thinkpad ~]# dd bs=4M if=/home/kyoh86/Downloads/archlinux-2021.04.01-x86_64.iso of=/dev/sda status=progress && sync
187+1 レコード入力
187+1 レコード出力
786771968 bytes (787 MB, 750 MiB) copied, 0.303474 s, 2.6 GB/s

BIOS設定をする

BIOSでセキュアブートをOFFにする

https://tanweb.net/2017/12/22/17401/

OSが正常に起動しているならこちらの手順でBIOSを起動させることがオススメです。

Windowsメニュー歯車アイコンをクリックして、設定を開き「更新とセキュリティ」を選択します。
左サイドメニューから「回復」を選択し、右画面にある「PCの起動をカスタマイズする」項目の「今すぐ再起動」を選択します。
再起動後、オプションの選択が起動します。「トラブルシューティング」を選択してください。ここはマウスもキーボードも動きます。
「詳細オプション」を選択します。
「UEFI ファームウェアの設定」を選択します。
「再起動」を選択します。
これで再起動後にBIOSが起動します。

ASUSのUEFIだと、詳細設定→起動タブに設定項目があった``

Windows 10 の高速スタートアップもOFFにする

「電源オプション」の「電源の追加設定」から、設定を変更します。
高速スタートアップとは、Windows の起動を高速化するための機能です。
Windows の標準設定では有効になっています。

  • 「スタート」ボタンを右クリックし、表示されるメニューから「電源オプション」をクリックします。
  • 「電源オプション」をクリック
  • 「電源とスリープ」が表示されます。
  • 画面右、または画面下の「電源の追加設定」をクリックします。
  • 「電源の追加設定」
  • アドバイス
  • 「電源プランの選択またはカスタマイズ」が表示された場合は、次の手順に進みます。
  • 「電源オプション」が表示されます。
  • 「電源ボタンの動作を選択する」をクリックします。
  • 「電源ボタンの動作を選択する」をクリック
  • 「システム設定」が表示されます。
  • 「現在利用可能ではない設定を変更します」をクリックします。
  • 「現在利用可能ではない設定を変更します」をクリック
  • 「シャットダウン設定」にある、「高速スタートアップを有効にする(推奨)」をクリックし、チェックを外します。
  • 「高速スタートアップを有効にする(推奨)」をクリックし、チェックを外す
  • 「変更の保存」ボタンをクリックします。
  • 「変更の保存」ボタンをクリック
  • 「電源オプション」に戻ります。
  • 「×」ボタンをクリックし、画面を閉じます。

ディスクパーティションを空ける

https://jp.easeus.com/partition-manager/resize-partition-windows-10.html

方法1:Windows 10の内蔵ディスク管理ツールでパーティションサイズを変更
もちろん、Windows 10の内蔵ディスク管理ツールでパーティションを拡張/縮小することができます。「コンピュータ」>「管理」を順次にクリックして、ポップアップウィンドウの左側のメニューで「ディスクの管理」を選択して、次のようなハードディスク状態が見えます。

EaseUS Partition Master

そして、縮小したいパーティションを右クリックし、「ボリュームの縮小」解放したいディスクの容量を入力してください。

Boot可能ディスクにUSBドライブを追加する

UEFIに入って設定しておく。

やらないとUSBのLinuxインストールイメージから起動できない

install環境のネット接続を確認

# ping archlinux.jp

通ってた。やっぱり有線できると本当に楽。

NTP

# timedatectl status
...
System clock synchronized: no
              NTP service: inactive
...

NTP有効にする。面倒くさいので。

# timedatectl set-ntp true
# timedatectl status
...
System clock synchronized: yes
              NTP service: active
...

## パーティションを切る

```console
# parted
...
(parted) print free
...
Number  Start   End     Size    File system  Name                          Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  106MB   105MB   fat32        EFI system partition          boot, esp
 2      106MB   123MB   16.8MB               Microsoft reserved partition  msftres
 3      123MB   240GB   240GB   ntfs         Basic data partition          msftdata
        240GB   480GB   240GB   Free Space
 5      480GB   480GB   566MB   ntfs                                       hidden, diag
        480GB   480GB   1908kB  Free Space

あってそう。コマイのみれないとパーティションを切れないので、fdisk

# fdisk /dev/sda
...
Command (m for help): F
Unpartitioned space /dev/sda: 223.24GiB, 239707430400 bytes, 468178575 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

    Start       End   Sectors   Size
468418560 936593407 468174848 223.2G
937699328 937703054      3727   1.8M

パーティションの方針

とりあえず、デカイドライブ積んでるわけでもないので、rootのみのシングルパーティションで良かろ。
空き地に入れる。

実際作る

数字ミスるのいやなので cfdisk でパーティションを作る
Linux root (arm-64)で。

ファイルシステムは未だext4でいいや。作ったパーティションを初期化。

# mkfs.ext4 /dev/sda4

インストール対象デバイスのマウント

EFIと合わせてマウントしていく。
当然さっき作ったパーティション (/dev/sda4) を指定するし、efiはどのパーティションか (/dev/sda1) 間違えないように注意。

# mount /dev/sda4 /mnt
# mkdir /mnt/efi
# mount /dev/sda1 /mnt/efi

インストール

~どうせならlinux -zenカーネルをインストールしちゃおう…~ : Nvidia周りがおかしくなるのでおとなしくカスタムカーネルじゃなくて通常のカーネルを使う

# pacstrap /mnt base linux linux-firmware vim

fstabしてroot切り替え。

# genfstab -U /mnt >> /mnt/etc/fstab
# arch-chroot /mnt

諸々システム設定

Timezone設定

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ハードウェアクロックがUTCであることを確認

timedatectl status
...
Time zone: UTC (UTC, +0000)

時刻合わせを設定

# hwclock --systohc

日本語化の準備

/etc/locale.gen の ja-JP.UTF-8en_US.UTF-8 のコメントアウトを外して、Localeの生成

# grep /etc/locale.gen -ve '^#'
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
# locale-gen

/etc/locale.conf ~を日本語に~ するとConsole Fontsに日本語がなくて豆腐ばかりになるので、ここではen_US.UTF-8にしておく

echo "LANG=en_US.UTF-8" > /etc/locale.conf

ホスト名

適当

echo "kyoh86-desktop" > /etc/hostname

/etc/hosts にも localhostと合わせて設定しておく

127.0.0.1	localhost
::1		localhost
127.0.1.1	kyoh86-desktop.localdomain	kyoh86-desktop

ルートパスワードの設定

# pacman -S sudo
# passwd

ブートローダーに設定

Windows側のEFIに放り込んでいく。ともあれブートローダー周りのあれこれをインストールする

# pacman -S amd-ucode dosfstools efibootmgr grub

grubをbootに放り込む

# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=arch_grub --recheck --debug

windowsをgrubに認識させる

# pacman -S os-prober
# grub-mkconfig -o /boot/grub/grub.cfg

再起動して、Arch LinuxとWindowsともにBootの選択肢に出てきて、実際どっちでも起動できることを確認。

# exit
# reboot

systemd-networkdでDHCPの設定

Network I/Fの名前を確認する

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP>...
...
2: enp3s0: <BROADCAST,MULTICAST> mtu ...
...

/etc/systemd/network/ に適当な設定ファイルを作って、確認したI/FにMatchするときのDHCP設定を書く

/etc/systemd/network/20-wired.network

[Match]
Name=enp3s0

[Network]
DHCP=ipv4

サービスを有効化

# systemctl enable systemd-networkd

DNSの設定

/etc/resolv.conf に書き込んでおく。ルーターに解決させる場合はルーターのIPと、まあGoogleDNSで良いだろう。

nameserver 192.168.11.1
nameserver 8.8.8.8

グラフィック関連

WMにしろDEにしろ、Fontだのなんだのに依存するのでいいのを入れておく。

# sudo pacman -S noto-fonts noto-fonts-emoji nvidia nvidia-utils

カーネルパラメータをいじる

ref: https://wiki.archlinux.jp/index.php/カーネルパラメータ#GRUB

目的:

  • nvidiaを有効に
  • nouveau(nvidia互換のfree driver)を無効に
  1. /etc/default/grub を開きカーネルオプションを GRUB_CMDLINE_LINUX_DEFAULT に以下の2つを追加:
    nvidia-drm.modeset=1 nouveau.modeset=0
  2. grub.cfg ファイルを自動生成する
    grub-mkconfig -o /boot/grub/grub.cfg

nouveauをblocklistに入れる

/etc/modprobe.d/ に適当な設定ファイルを作って、blacklist入りさせる。

/etc/modprobe.d/ignore-nouveau.conf

blacklist nouveau
options nouveau modeset=0

nvidiaを起動時のDRMカーネルモードに設定しておく

起動時点で読んでおいてもらわんと、Display Managerなんかで使う場合に読み込まれてなくて苦労したりするので

/etc/mkinitcpio.conf

...
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
...

を書いて、

# mkinitcpio -p linux

pacman hook

nvidia をアップグレードした後に initramfs をアップデートすることを忘れないように、以下のような pacman フックを書く

/etc/pacman.d/hooks/nvidia.hook

[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia

[Action]
Depends=mkinitcpio
When=PostTransaction
Exec=/usr/bin/mkinitcpio -P

今回はnvidiaドライバを使ってるので、Targetもnvidia

rebootしてモジュール確認

rebootして、

# lsmod | grep -e 'nvidia\|nouveau'

nvidiaは読み込まれていて、nouveauは読み込まれてないはず

DE

GNOMEでいいや

# pacman -S jack2 gnome

HiDPI対応

HiDPIの場合、ユーザー自身とログイン時のユーザー(gdm)のscale-factorを2倍にしておく。

# sudo su - gdm -s /bin/bash
$ dbus-launch gsettings set org.gnome.desktop.interface scaling-factor 2
$ exit

ユーザ作成

# useradd -m kyoh86
# passwd kyoh86

sudoerに入れておく

# EDITOR=/usr/bin/vim visudo

して、以下を追記

kyoh86 ALL=(ALL) ALL

exitしてkyoh86でログインし直す

GDM自動起動

# systemctl enable gdm
# reboot

これでGDMが上手く動かないときは、tty2に切り替え (Shift+Alt+F2) したりしてjournalみて調べる羽目になる。辛い。

setup dotfiles

github.com/kyoh86/dotfiles で自分用環境をセットアップする

参考文献

Discussion