X260にGentooを入れた
ここしばらくはMacBookAir 13inchをフツーに使ってましたが、SSDが128GBだったので足りなくてきて厳しくなったり、Windowsで動くようなゲームをやってみたいなと思ったり、新しいMacBookProは端子がUSB type-Cしかなくて不便そうだと思ったりしたのと、この記事( MacBook Proを捨ててThinkpad T460sを買ってgentooを入れた - joker1007’s diary )を見て #gentooinstallbattle の懐かしさを感じてしまったのでX260にWindowsとGentooを入れることにしました。
MacBookAirを使う前はX201sにGentooを入れて使ってたのでそんなに苦労することは無いだろうと思ってましたが、BIOSがUEFIになって設定が分からなかったりと何度かつまづきました。
やっとこインストールできて環境が整ったので、いくつかメモを書き残します。
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秒は待たないといけないが)繋がるようになったので良しとしています。
こんな感じで仕上がりました。