新しく購入したThinkpad X1 Carbonをメインマシンとして使うため,Linuxをインストールする。

自宅のデスクトップではGentooを使っているが,毎回のアップデートが時間かかるし,毎回FirefoxとかLLVMとかで並列化関連でエラーが出てシングルコアでコンパイルすることになって大変なので,そんなことはノートパソコンではちょっと遠慮したくなったので,今回はArch Linuxを使用することにした。
Wiki(Arch Wikiの紹介ページ)にも標榜されている,「シンプリシティ、ミニマリズム、およびコードの簡潔性」というコンセプトに大いに共感できるし,流行ってるディストリということもあって,初めて使うディストリだけどArch Linuxには結構期待している。

Live CDのブート

Live CDのISOファイルをArch Linuxダウンロードページからダウンロードして,RufusでUSBメモリに焼いた。

MultiBootUSBはArch Wikiのマルチブート USB ドライブに書いてあったソフトウェアで,一つのUSBメモリにいくつもLive CDを入れられる優れものだった,けど,なんかArchは起動できなかったので断念。

無事にLive CDが起動したら,Arch Wikiのインストールガイドにしたがって作業を進める。

パーティショニング

今回はgptディスクを使用する。

今回は,1TBという大容量のSSDを積んでいるノートPCなので,今後他のディストリとかOSを簡単に追加できるように,Linux環境の部分にはLVMを利用してパーティションの管理を柔軟にできるようにする。
Windows用に300GB切り分けたあと,残りのディスク容量は全部LVMで管理する。

| EFI System(260M) | Microsoft Reserved (16M) | NTFS(Microsoft basic data 300GB) | Linux filesystem (630.3G) | Windows recovery environment (1000M) |

パーティショニングには,擬似グラフィックを用いたcfdiskを用いた。

# cfdisk /dev/nvme0n1

空き領域を全部まとめて一つのパーティションとする。

そのあと,ArchWiki(LVM)に従ってLVMを作る。

fdisk -l でデバイス名をしっかり確認してから物理ボリュームの作成

# pvcreate /dev/nvme0n1p5

ボリュームグループの作成

# vgcreate VolGroup00 /dev/nvme0n1p5

ルートファイルシステムは暗号化したいので,dm-crypt/システム全体の暗号化を参考にLVMの上に/のファイルシステム用のパーティションを作る。
/が暗号化されているので,/bootに入れるファイルは全て暗号化されないESPに詰めて,/bootにはESPをバインドマウントすることにする。
/は足りなくなったら後から拡張するとして300G確保する。(参考:リサイズの仕方)
また,ハイバネートしたいので,swapパーティションとして,メインメモリの1.5倍の24GBを確保する。

# lvcreate -L 300G -n archroot VolGroup00
# lvcreate -L 24G -n swap VolGroup00

うまくいったかどうかは,lvdisplayコマンドで確認すると良い。
その後,dm-cryptを用いてarchrootを暗号化する。

# cryptsetup -y -v luksFormat /dev/mapper/VolGroup00-archroot
# cryptsetup open /dev/mapper/VolGroup00-archroot cryptroot

ルートファイルシステムはext4でフォーマットし,スワップパーティションを作成。

# mkfs.ext4 /dev/mapper/cryptroot
# mount /dev/mapper/cryptroot /mnt
# mkswap /dev/mapper/VolGroup00-swap
# swapon /dev/mapper/VolGroup00-swap

ESPを/espにマウントし,/esp/EFI/archを作成して/bootにバインドマウントする。

# mkdir /mnt/esp
# mount /dev/nvme0n1p1 /mnt/esp
# mkdir /mnt/boot
# mkdir /mnt/esp/EFI/arch
# mount --bind /mnt/esp/EFI/arch /mnt/boot

インターネットへの接続

有線アダプターをケチって買わなかったため,無線接続となる。

# wifi-menu -o
# chmod 600 /etc/netctl/

で擬似GUIで/etc/netctlに設定ファイルを生成するとすごく楽。
どこかのサーバーにpingが通ることを確認したら次に進む。

そのあと,念の為システムクロックの更新を行う

# timedatectl set-ntp true

インストール

まずは,/etc/pacman.d/mirrorlist を編集してミラーを選択する。

そのあと,pacstrapスクリプトでbaseとbase-develグループをインストールする。

# pacstrap /mnt base base-devel

システムの設定

fstab の生成

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

bindマウントだけパスがおかしくなるので修正する。

# vi /mnt/etc/fstab
/mnt/esp/EFI/arch を /esp/EFI/archに修正

chroot

# arch-chroot /mnt

タイムゾーン

/etc/localtime から /usr/share/zoneinfo/Zone/SubZone にシンボリックリンクを張り,hwclockで/etc/adjtimeを生成。

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

ロケール

/etc/locale.gen を編集して使用するロケール (例: en_US.UTF-8 UTF-8 と ja_JP.UTF-8 UTF-8) をアンコメントし、次のコマンドを実行する。
その後,ロケールを設定。

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

なお,USキーボードのため,コンソールキーマップの設定は必要ない。

ホストネームの設定

# echo myhostname > /etc/hostname

/etc/hostsの編集

# vi /etc/hosts
127.0.0.1   localhost
::1     localhost
127.0.1.1   myhostname.localdomain  myhostname

ネットワーク設定

ワイヤレス関連のパッケージのインストール

# pacman -S iw wpa_supplicant dialog

そして再び wifi-menu -o で設定する

# wifi-menu -o
# chmod 600 /etc/netctl/

Initramfs

LVMとdm-cryptを使用しているので,keyboard, keymap, encrypt フックを mkinitcpio.conf 内に追加

# vi /etc/mkinitcpio.conf

HOOKS=(... keyboard keymap block sd-lvm2 encrypt ... filesystems ...)

initramfsの生成

# mkinitcpio -p linux

Rootパスワード

# passwd

ブートローダー

もっとも一般的に使われているgrubを使用する。

まずは,intel-ucodeパッケージをインストールして,マイクロコードのアップデートを有効にする。

# pacman -S intel-ucode

grub と efibootmgr とos-proberパッケージをインストール。

# pacman -S grub efibootmgr os-prober

GRUBをESPの中にインストールする。

# grub-install --target=x86_64-efi --efi-directory=/esp --bootloader-id=grub --boot-directory=/esp/EFI

必要なカーネルパラメータを渡せるように,/etc/default/grubを修正。

# vi /etc/default/grub

GRUB_CMDLINE_LINUX="cryptdevice=/dev/VolGroup00/archroot:cryptroot root=/dev/mapper/cryptroot resume=/dev/sdaX init=/usr/lib/systemd/systemd"

Grubのメニューエントリに便利なシャットダウンと再起動とファームウェアセットアップを追加。

# vi /etc/grub.d/40_custom

menuentry "Firmware setup" {
    fwsetup
}

menuentry "System shutdown" {
    echo "System shutting down..."
    halt
}

menuentry "System restart" {
    echo "System rebooting..."
    reboot
}

os-proberでWindowsを認識してエントリ設定ファイルを生成し,grubの設定ファイルを生成。

# grub-mkconfig -o /esp/EFI/grub/grub.cfg

再起動

chrootから抜けて,色々アンマウントして再起動する。

# exit
# unmount -R /mnt
# reboot

起動時に一時停止するので,そこで暗号化したルートのパスワードを打つとめでたく起動する。

One thought on “Thinkpad X1 Carbon へのArch Linux のインストール

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください