X260にGentooを入れた

ここしばらくはMacBookAir 13inchをフツーに使ってましたが、SSDが128GBだったので足りなくてきて厳しくなったり、Windowsで動くようなゲームをやってみたいなと思ったり、新しいMacBookProは端子がUSB type-Cしかなくて不便そうだと思ったりしたのと、この記事( MacBook Proを捨ててThinkpad T460sを買ってgentooを入れた - joker1007’s diary )を見て #gentooinstallbattle の懐かしさを感じてしまったのでX260にWindowsGentooを入れることにしました。

MacBookAirを使う前はX201sにGentooを入れて使ってたのでそんなに苦労することは無いだろうと思ってましたが、BIOSUEFIになって設定が分からなかったりと何度かつまづきました。

やっとこインストールできて環境が整ったので、いくつかメモを書き残します。

0. バックアップ作成

今回はWindowsも残してデュアルブートしたかったので、ミスってWindowsが消え飛んでしまった時用にバックアップを用意しました。

といっても、普通のUSBメモリに「回復ドライブの作成」を行っただけです。

1. Gentoo Live USBの作成

https://www.gentoo.org/downloads/ から、amd64版の「Hybrid ISO (LiveDVD)」をダウンロードしました。

本来は「Minimal Installation CD」で十分なのですが、久しぶりということもあり最悪インストール中にLiveDVDに入っているWebブラウザで検索もできると思ったのでLiveDVDにしました。

別のUSBメモリにこのLiveDVDのイメージ書き込んで、再起動します。

2. インストールする

GentooのHandbook( https://wiki.gentoo.org/wiki/Handbook:Main_Page )を読みながら進めていけば良い、、、はずですが何度かハマりました。

https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation/ja このページに、インストールの全手順が1ページにまとめられているので便利です。

2.1. ネットワーク

いきなり無線を使うことはかなり難しいだろうと思ってたので、おとなしく有線LANにつなぎました。

普通にDHCPでIPが降ってきて繋がる感じでした。

2.2. パーティション

元々は、

  • /dev/sda1 に EFI system partition
  • /dev/sda2 に Microsoft reserved parition
  • /dev/sda3 に Basic data partition (WindowsのCドライブ)

が入っていたので、/dev/sda3を縮小させつつ、そこに

を追加して、最終的に次のようになりました。

x260 ~ # parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: ATA SAMSUNG MZ7LN512 (scsi)
Disk /dev/sda: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size    File system     Name                          Flags
 1      1049kB  274MB  273MB   fat32           EFI system partition          boot, hidden, esp
 2      274MB   290MB  16.8MB                  Microsoft reserved partition  msftres
 3      290MB   336GB  336GB   ntfs            Basic data partition          msftdata
 4      336GB   399GB  62.9GB  ntfs            Share data partition          msftdata
 5      399GB   504GB  105GB   btrfs           Linux data partition
 6      504GB   512GB  8503MB  linux-swap(v1)  Linux swap partition

2.3. make.conf

stage3 tarballのダウンロード、展開だのが終わったら、/etc/portage/make.confの編集です。 (前に入れた時は/etc/make.confだった気がしましたが、結構前に変更されていたらしい。)

$ cat /etc/portage/make.conf
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
CPU_FLAGS_X86="mmx mmxext sse sse2 sse3"
USE="X aac acpi alsa ao bindist bluetooth bzip2 \
cairo cdda cdr cjk cli cracklib crypt curl cxx \
dbus directfb dri dvd dvdr exif fbcon ffmpeg flac \
gdbm gif gimp git gnultls gpm graphviz gtk gzip \
iconv imagemagick inotify ipv6 javascript jit jpeg jpeg2k \
lame lcms libffi libnotify lua luajit lzma lzo \
mmx mmxext modules multilib mp3 mp4 mpeg multilib mysql \
ncurses networkmanager nls nptl ocaml opengl openmp oss \
pcre pdf png posix pulseaudio python raw readline ruby \
sasl seccomp session sound sse sse2 sse3 ssl svg syslog \
tiff udev unicode usb videos vim-syntax vnc vorbis \
webp wifi x264 xattr xcb xml zlib zsh-completion"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
MAKEOPTS="-j5"
LINGUAS="en ja"
GENTOO_MIRRORS="rsync://ftp.iij.ad.jp/pub/linux/gentoo/"
GRUB_PLATFORMS="efi-64"

2.4. カーネルの設定

インストールした当時は4.4.39がmaskされていない最新のカーネルだったのですが、どうせ近いうちにアップデートするだろうと思ったのでunmaskして4.9.0にしました。

.configはこんな感じです。

https://gist.github.com/rkmathi/0d5778723474e35ed33eed316d2345f7

ミニマムの限界を狙う元気はなかったので、わりとおおらかな感じになっています。

make && make modules_install && make installしたあとに、genkernel --install initramfsしておきました。

2.5. fstab & grub

fstabはこうなりました。

/dev/sda1       /boot/efi       vfat    defaults,discard,noatime        0 2
/dev/sda5       /               btrfs   defaults,discard,noatime        0 1
/dev/sda6       none            swap    sw                              0 0

「2.2. パーティション」で書いた通りの内容です。

grubのインストール(あとカーネルをアップデートした時に打つやつ)は

$ grub-install --target=x86_64-efi --efi-directory=/boot/efi
$ grub-mkconfig -o /boot/grub/grub.cfg

途中、何度か起動したのにディスプレイが映らないだの、「Loading initial ramdisk...」で止まってしまうだのしましたが、カーネルコンフィグでi915の設定が抜けていたりframe bufferの設定が抜けたりが原因でした。

3. インストール後の環境構築

  • ターミナルはx11-terms/sakura
  • ウィンドウマネージャはx11-wm/awesome ( https://awesomewm.org/ )
  • 日本語入力はapp-i18n/mozc
  • Webブラウザwww-client/google-chrome-beta
  • (一応)GUIのエディタはapp-editors/atom
  • GUIのファイラはx11-misc/xfe
  • 無線はnet-wireless/wpa_supplicant

という感じで諸々インストールしました。

3.1. xorgの設定

とりあえず「A」キーの隣のCapsLockはCtrlになってもらいました。

x260 ~ # cat /etc/X11/xorg.conf.d/10capslock.conf 
Section "InputClass"
        Identifier      "Keyboard Setting"
        MatchIsKeyboard "on"
        # CapsLock -> Ctrl
        Option  "XkbOptions"    "ctrl:nocaps"
EndSection

ThinkpadなのでTrackPointタッチパッドの設定が必要だったので、ArchWikiだのを見ながら設定しました。

x260 ~ # cat /etc/X11/xorg.conf.d/40synaptics.conf 
Section "InputClass"
        Identifier      "Touchpad"
        Driver  "synaptics"
        MatchProduct    "SynPS/2 Synaptics TouchPad"
        MatchDevicePath "/dev/input/event*"
        Option  "MaxTapTime"    "150"
        Option  "TapButton1"    "1"
        Option  "TapButton2"    "3"
        Option  "VertTwoFingerScroll"   "on"
        Option  "VertScrollDelta"       "-100"
        Option  "HorizTwoFingerScroll"  "on"
        Option  "HorizScrollDelta"      "-100"
        Option  "MinSpeed"      "4"
        Option  "MaxSpeed"      "5"
        Option  "AccelFactor"   "0.005"
        Option  "CoastingSpeed" "0"
        Option  "CoastingFriction"      "0"
        Option  "PalmDetect"    "on"
EndSection
x260 ~ # cat /etc/X11/xorg.conf.d/30trackpoint.conf 
Section "InputClass"
        Identifier      "Trackpoint Wheel Emulation"
        MatchProduct    "TPPS/2 IBM TrackPoint"
        MatchDevicePath "/dev/input/event*"
        Option  "EmulateWheel"          "1"
        Option  "EmulateWheelButton"    "2"
        Option  "Emulate3Buttons"       "0"
        Option  "EmulateWheelTimeout"   "100"
        Option  "XAxisMapping"          "6 7"
        Option  "YAxisMapping"          "4 5"
EndSection

ちなみにTrackPointの速設定がxorg.confにうまく書けなかったので、それだけは.xinitrcに書いてしまっています。

xinput set-prop "TPPS/2 IBM TrackPoint" "Device Accel Constant Deceleration" 0.2

3.2. 過充電を防ぐやつを導入

X260には内蔵バッテリーと外付けバッテリーの2つが付いているので、 https://github.com/teleshoes/tpacpi-bat これを入れて充電し過ぎないようにする設定を入れました。

# 内蔵バッテリーは75%を切ったら充電開始し、85%を超えたら充電停止する。
$ sudo ./tpacpi-bat -g ST 1
75 (relative percent)
$ sudo ./tpacpi-bat -g SP 1
85 (relative percent)

# 外付けバッテリーは85%を切ったら充電開始し、95%を切ったら充電停止する。
$ sudo ./tpacpi-bat -g ST 2
85 (relative percent)
$ sudo ./tpacpi-bat -g SP 2u
95 (relative percent)

3.3. powertopの導入

powertopをインストールして、思考停止でTunablesのすべての設定をGoodにしました。

SlackだのChromeだのを起動した状態の様子を比べると、消費電力が半分くらいになっているので効果がありそうです。

BEFORE

The battery reports a discharge rate of 9.27 W

AFTER

The battery reports a discharge rate of 4.93 W

3.4. 画面を暗くする

標準の設定だと、画面がめちゃくちゃ明るいので

echo 21 > /sys/class/backlight/intel_backlight/brightness

とすることで画面を暗くしました。

4. 既知の問題

4.1. 無線ドライバの読み込みが必ず失敗する

こんな感じで

x260 ~ # dmesg | grep 'iwl'
[    8.623480] iwl4965: Intel(R) Wireless WiFi 4965 driver for Linux, in-tree:
[    8.623481] iwl4965: Copyright(c) 2003-2011 Intel Corporation
[    8.623527] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s
[    8.623528] iwl3945: Copyright(c) 2003-2011 Intel Corporation
[    8.623957] iwlwifi 0000:04:00.0: enabling device (0000 -> 0002)
[    8.628062] iwlwifi 0000:04:00.0: Direct firmware load for iwlwifi-8000C-26.ucode failed with error -2
[    8.628065] iwlwifi 0000:04:00.0: Falling back to user helper
[   70.675492] iwlwifi 0000:04:00.0: loaded firmware version 22.361476.0 op_mode iwlmvm
[   70.675505] iwlwifi 0000:04:00.0: Detected Intel(R) Dual Band Wireless AC 8260, REV=0x208
[   70.677519] iwlwifi 0000:04:00.0: L1 Enabled - LTR Enabled
[   70.678394] iwlwifi 0000:04:00.0: L1 Enabled - LTR Enabled
[   70.814110] iwlwifi 0000:04:00.0 wlp4s0: renamed from wlan0

起動直後に存在しないはずのiwlwifi-8000C-26.ucodeを探しにいって失敗してしまいます。

/lib/firmware以下にあるドライバは

x260 ~ # ls -l /lib/firmware/iwlwifi-8000C-*
-rw-r--r-- 1 root root 1745176 Jan  1 19:57 /lib/firmware/iwlwifi-8000C-13.ucode
-rw-r--r-- 1 root root 2351636 Jan  1 19:57 /lib/firmware/iwlwifi-8000C-16.ucode
-rw-r--r-- 1 root root 2394060 Jan  1 19:57 /lib/firmware/iwlwifi-8000C-21.ucode
-rw-r--r-- 1 root root 2120860 Jan  1 19:57 /lib/firmware/iwlwifi-8000C-22.ucode

*-22.ucodeが最新なので、これを見つけるまで62秒毎に26→25→24→23→22とリトライがかかってしまっていました。

これだと起動してから無線が使えるまで5分位待たないといけないので、雑にln -s iwlwifi-8000C-22.ucode iwlwifi-8000C-25.ucodeとリンクを貼ってみたところ、一応(70秒は待たないといけないが)繋がるようになったので良しとしています。


こんな感じで仕上がりました。

一応Windowsは起動するこできたことが確認できたので、デュアルブートもうまくできているようです。