Posted at

Thinkpad X1 Carbon (Gen 4)にArch Linuxをインストールする

More than 1 year has passed since last update.

Thinkpad X1 Carbonを入手しました。2016年に発売された第4世代のものです。

これにArch Linuxをインストールしようと思います。


方針


  • Arch Linuxを導入する


    • Linux単体で使う

    • 入手時にWindows 10が導入されていたが、消す



  • SSD


    • dm-crypt、LUKSで暗号化して、LVMで管理する

    • ファイルシステムはext4を使う

    • スワップは作らない



ちなみにこのPC、NVMe SSDが使われていました。NVMeを扱うのが自分はこれがはじめてだったのですが、特に困ったことはありませんでした。今まで通りの手順でインストールできています。


インストール前の準備


インストールメディアをつくる


インストールメディアからLinuxを起動する


  1. USBメモリをさし、電源ON

  2. LENOVOロゴの画面でEnterを押す

  3. Startup Interrupt Menuの画面でF1を押す

  4. Secure Bootを無効にする


    1. Security>Secure Boot

    2. Secure BootがDisabledであることを確認



  5. USBメモリのLinuxの起動を最優先にする



    1. ESCを押して、Startup>Boot

    2. USBメモリのBoot Priority Orderを1番にする




  6. F10 (Save and Exit)を押して、Yesを選択する

  7. 再起動し、インストールメディアが起動する


リモート接続を受け付ける

まずsshサーバを起動し、リモートからログインして作業できるようにする。

root@archiso ~ # loadkeys jp106

root@archiso ~ # wifi-menu
root@archiso ~ # ping -4 -c 3 ftp.tsukuba.wide.ad.jp
root@archiso ~ # ping -4 -c 3 ftp.jaist.ac.jp
root@archiso ~ # passwd
root@archiso ~ # systemctl start sshd
root@archiso ~ # ip addr

X1 Carbon 2016(Gen 4)にArch Linuxをインストール - pockestrapを読んで、真似してみた。コピペがし易く、ログを残すのが簡単になるので、大変よかった。


手順

SSHログインした直後から。


キーボードは日本語を使う

root@archiso ~ # loadkeys jp106


時刻合わせ

root@archiso ~ # timedatectl set-ntp true


パーティションテーブルを作成する

EFIパーティションと暗号化するパーティションの2件を作成する。

スワップパーティションを作らないのは前提に書いたとおり。

root@archiso ~ # parted /dev/nvme0n1 \

> -s mklabel gpt \
> -s mkpart ESP fat32 1MiB 513MiB \
> -s set 1 boot on \
> -s mkpart primary ext4 513MiB 100%
root@archiso ~ # parted /dev/nvme0n1 print
Model: Unknown (unknown)
Disk /dev/nvme0n1: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32 boot, esp
2 538MB 512GB 512GB


EFIパーティションを作成する

root@archiso ~ # mkfs.vfat -F32 /dev/nvme0n1p1

mkfs.fat 4.1 (2017-01-24)


LUKSコンテナを作成する

root@archiso ~ # cryptsetup luksFormat /dev/nvme0n1p2


WARNING!
========
This will overwrite data on /dev/nvme0n1p2 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: <パスワード>
Verify passphrase: <再度、パスワード>


LUKSコンテナにLVMボリュームを作成する


  • 物理ボリューム: /dev/mapper/lvm


    • ボリュームグループ: volume

    • 論理ボリューム #1: root


      • 20GB


      • /にマウントする



    • 論理ボリューム #2: home


      • 残り全部


      • /homeにマウントする





root@archiso ~ # cryptsetup open /dev/nvme0n1p2 lvm

Enter passphrase for /dev/nvme0n1p2:
root@archiso ~ # pvcreate /dev/mapper/lvm
Physical volume "/dev/mapper/lvm" successfully created.
root@archiso ~ # vgcreate volume /dev/mapper/lvm
Volume group "volume" successfully created
root@archiso ~ # lvcreate --size 20G volume --name root
Logical volume "root" created.
root@archiso ~ # lvcreate --extents +100%FREE volume --name home
Logical volume "home" created.


ファイルシステムを作成する

root@archiso ~ # mkfs.ext4 /dev/mapper/volume-root

mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: 335c2dd4-154c-4a0b-9440-706ed5ce55f2
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

root@archiso ~ # mkfs.ext4 /dev/mapper/volume-home
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 119651328 4k blocks and 29917184 inodes
Filesystem UUID: 2187ac2c-c677-44b0-808e-256bf03857ce
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done


ファイルシステムをマウントする

root@archiso ~ # mount /dev/mapper/volume-root /mnt

root@archiso ~ # mkdir /mnt/home
root@archiso ~ # mount /dev/mapper/volume-home /mnt/home
root@archiso ~ # mkdir /mnt/boot
root@archiso ~ # mount /dev/nvme0n1p1 /mnt/boot


パッケージインストールのミラーを設定する

root@archiso ~ # cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup

root@archiso ~ # grep -A 1 --no-group-separator '^## Japan' /etc/pacman.d/mirrorlist.backup | grep -v '^## Japan' > /etc/pacman.d/mirrorlist


ベースシステムをインストールする

root@archiso ~ # pacstrap /mnt base base-devel

(略)


fstabファイルを作成する

root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab


新しいシステムにchrootする

root@archiso ~ # arch-chroot /mnt


ホスト名を設定する

[root@archiso /]# NEW_HOSTNAME=susi

[root@archiso /]# echo "$NEW_HOSTNAME" > /etc/hostname
[root@archiso /]# echo "127.0.1.1 ${NEW_HOSTNAME}.localdomain $NEW_HOSTNAME" >> /etc/hosts


タイムゾーンを設定する

[root@archiso /]# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

[root@archiso /]# hwclock --systohc


ロケールを設定する

[root@archiso /]# sed -i 's/^#en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen

[root@archiso /]# sed -i 's/^#ja_JP.UTF-8/ja_JP.UTF-8/' /etc/locale.gen
[root@archiso /]# locale-gen
Generating locales...
en_US.UTF-8... done
ja_JP.UTF-8... done
Generation complete.
[root@archiso /]# cat << __LOCALE_CONF__ > /etc/locale.conf
> LANG=en_US.UTF-8
> LC_ALL=
> __LOCALE_CONF__
[root@archiso /]# echo 'KEYMAP=jp106' > /etc/vconsole.conf


rootのパスワードを設定する

[root@archiso /]# passwd

New password:
Retype new password:
passwd: password updated successfully


initramfsを作成する

[root@archiso /]# sed -i.backup '/^HOOKS=/ s/ filesystems / encrypt lvm2 resume filesystems /' /etc/mkinitcpio.conf

[root@archiso /]# mkinitcpio --preset linux
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 4.11.9-1-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
-> Running build hook: [encrypt]
-> Running build hook: [lvm2]
-> Running build hook: [resume]
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetect
==> Starting build: 4.11.9-1-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: wd719x
-> Running build hook: [encrypt]
-> Running build hook: [lvm2]
-> Running build hook: [resume]
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful

aic94xx、wd719xのファームウェアがない、とWARNINGがでているけど……

そのファームウェアは必要なんだろうか?


ブートローダーをインストールする

systemd-bootを使う。

[root@archiso /]# bootctl --path=/boot install

Created "/boot/EFI".
Created "/boot/EFI/systemd".
Created "/boot/EFI/BOOT".
Created "/boot/loader".
Created "/boot/loader/entries".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/systemd/systemd-bootx64.efi".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/BOOT/BOOTX64.EFI".
Created EFI boot entry "Linux Boot Manager".
[root@archiso /]# echo 'default arch' >> /boot/loader/loader.conf
[root@archiso /]# echo 'timeout 5' >> /boot/loader/loader.conf
[root@archiso /]# UUID_CRYPTDEVICE=$(find /dev/disk/by-uuid -lname ../../nvme0n1p2 -printf "%f\n" | head -n 1)
[root@archiso /]# cat << __ARCH_CONF__ > /boot/loader/entries/arch.conf
> title Arch Linux
> linux /vmlinuz-linux
> initrd /initramfs-linux.img
> options cryptdevice=UUID=${UUID_CRYPTDEVICE}:volume root=/dev/mapper/volume-root rw intel_pstate=no_hwp
> __ARCH_CONF__


再起動する

[root@archiso /]# exit

exit
arch-chroot /mnt 11.15s user 1.54s system 4% cpu 4:17.33 total
root@archiso ~ # umount -R /mnt
root@archiso ~ # reboot