SVT13117ECS上Gentoo安裝記(含內核配置)

購買

我需要一臺散熱小一點的筆記本,i5 ivy bridge,4G RAM,13.3/14 英寸,madper 推薦了款 HP 的 ultrabook,那東西賣得很暢銷,早已沒了,我就選了這個 SVT13117ECS。回家後第二次用附帶的 Windows,也是最後一次使用,把硬盤驅動等信息截圖用 nc 傳給了我的 Gentoo 臺式機。還是要吐槽一下 OEM Windows 7,500G 的硬盤只設置了三個分區,兩個是還原什麼的作用,隱藏的,留下一個400多GB的C盤。假使我使用 Windows 也免不了要重裝呢。

Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz MemTotal: 3952624 kB

安裝

發行版的選取沒什麼可多說的,不滿 Debian Fedora 的分包機制,害怕 Archlinux 的不穩定,而且我依賴的項目 gentoo-haskell 在 Debian Archlinux 上的替代項目人數不夠。兩年半的 Gentoo 使用經驗迫使我繼續使用下去。

因爲我網速比較慢,一開始選了 Gentoo Minimal CD,用 unetbootin 弄到閃盤上(新時代了,居然還不是 hybrid iso),啓動電腦,看看它會給我多大的失望。果不其然,兩塊硬盤(Hitachi HTS545050A7E380 500GB 和 SAMSUNG MZMPC032HBCD-00000 32G SSD)能識別出來,但是無法識別它自己這個閃盤。它識別自己所在盤的方式也令人吃驚,居然是 /dev/sda1 /dev/sda2 ... /dev/sdb1 ... 這樣枚舉,難怪有人不把它當 live CD 了……

然後嘗試 archlinux-2012.07.15-netinstall-dual.iso,直接 dd 到閃盤。兩塊硬盤和自己所在的閃盤都能識別出來。工具似乎也挺全的,mkfs.btrfs fdisk ssh nc dhcpcd 等,發現那兩塊盤上有 RAID 什麼的,不知道具體是什麼東西,dmraid -r -E 擦掉 RAID 的 metadata。fdisk /dev/sda (這時候就和裏面的 Windows 道別了) 及 partprobe 後無法 mkfs.ext4 任何一個分區。從現有的 Gentoo 機器上 nc 傳來一個 lsof,檢查發現沒有進程在使用 /dev/sda1 等,也沒有被掛載。不健全的 mkfs.btrfs 居然可以用,不過還是無法 mount。

再試 debian-live-6.0.4-amd64-rescue.iso,也是直接 dd。工具明顯比 archlinux-2012.07.15-netinstall-dual.iso 少,沒有 mkfs.btrfs,具體還缺什麼工具已經忘了,總之也不是個令人省心的 live CD。不過還是勉強能用來 chroot 安裝 Gentoo。有有線網絡,臺式機 Gentoo 可以用 nc 和 ultrabook 傳輸 stage3 portage-snapshot 等東西。因爲不支持 mkfs.btrfs,我就 mount 了個 tmpfs 放 /usr/portage,解壓 portage-snapshot,然後 emerge 必備工具。

以後應該直接忽略上述選擇用 systemrescuecd,不過 mirrors.163.com 上沒有,我下載比較慢,這也是爲什麼用了這三個東西的原因……

分區

現在再用 separate /usr partition 的話會有很多麻煩,因爲 udev(systemd) 那夥人已經不顧用戶死活了,用除去某個特性的方式來表明這個特性不需要。如果頑守 separate /usr 的話,最好裝個 sys-kernel/dracut 生成 initrd 在啓動 /sbin/init 前掛載 /usr;或者用 sys-apps/busybox[sep-usr],內核選項加上 init=/ginit。

我還有幾個分區是 noauto 的,比如 /dev/sda1 可能要作爲 /dev/sdb1 (/boot) 的備份,/dev/sda2 可能要作爲 /dev/sdb2 (/) 的備份,還有個 /backup 也沒掛載。基本還是求穩定,btrfs 就用在 /usr/portage 及附屬分區和 /backup 等無關緊要的分區上。我對 btrfs 還是心存芥蒂的,比如爲什麼 mkfs.* 都不能用的時候爲什麼 mkfs.btrfs 就能用(之前分區時),還有 fsck 的問題。

% df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
rootfs         rootfs     30G  8.3G   20G  30% /
/dev/root      ext4       30G  8.3G   20G  30% /
devtmpfs       devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs          tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs          tmpfs     1.9G   49M  1.9G   3% /run
tmpfs          tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
none           tmpfs     1.9G  8.0K  1.9G   1% /tmp
/dev/sda3      ext4       10G  549M  9.0G   6% /var
none           tmpfs     1.9G   41M  1.9G   3% /var/tmp
/dev/sda7      ext4      246G   23G  211G  10% /home
/dev/sda8      btrfs     1.0G  470M  551M  47% /usr/portage
/dev/sda5      btrfs     5.0G  1.5G  2.6G  37% /usr/portage/packages
/dev/sda9      btrfs      25G  1.6G   21G   7% /usr/portage/distfiles

軟件

sys-boot/grub-2.00 sys-apps/systemd-186 portage-2.2

grub2

grub2 功能似乎挺強,但配置也相當麻煩,目前還不知 Gentoo 中怎麼配置多內核,相比之下 grub1 (grub legacy) 的使用就簡單多了。這個算不算 overengineering?

portage-2.2

只是爲了使用 world sets 功能。

systemd

sys-apps/systemd-186 和 sys-fs/udev 衝突,根據 microcai 的指點,emerge -C udev 並 provide 一個 sys-apps/udev-9999,裝上 systemd。這步操作有較大危險性,務必保證 udev 卸載後裝上 sys-apps/systemd-186。

% cat /etc/portage/profile/package.provided
sys-kernel/git-sources-9999
sys-fs/udev-9999

內核配置

上面 /etc/portage/profile/package.provided 裏的 sys-kernel/git-sources-9999 表明我沒有用 portage 裏的那些 sys-kernel/*-sources。我是自己 git clone 了一份,放在 /home/ray/linux,ln -s /home/ray/linux /usr/src/。

之前刪掉 .config 自己從頭開始配置的,ehci_hcd 會發生錯誤,導致閃盤、HID USB鼠標都不能用。根據 microcai,我還使用 genkernel 先生成了個 .config,再裁剪驅動,並把裏面一些 =m 改成 =y。

Hardware Monitoring

--- Hardware Monitoring support
<*>   Intel Core/Core2/Atom temperature sensor

這樣就可以使用 lm_sensors 中的 sensors 命令來查看溫度了。

--- Watchdog Timer Support
<*>   Intel TCO Timer/Watchdog

這個對桌面用戶似乎沒什麼用,不過也選了。

SATA

--- Serial ATA and Parallel ATA drivers
[*]   Verbose ATA error reporting
[ ]   ATA ACPI Support
[ ]   SATA Port Multiplier support
      *** Controllers with non-SFF native interface ***
<*>   AHCI SATA support
< >   Platform AHCI SATA support
< >   Initio 162x SATA support
< >   ACard AHCI variant (ATP 8620)
< >   Silicon Image 3124/3132 SATA support
[ ]   ATA SFF support

Wired

--- Device Drivers -> Network device support -> Ethernet driver support
[*]   Realtek devices
< >     RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)
< >     RealTek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support
<*>     Realtek 8169 gigabit ethernet support

如果沒有 /lib/firmware/rtl_nic/rtl8168e-3.fw (可以在 linux-firmware.git 上下載這個文件), dmesg 會報告缺乏這個文件,不過似乎也不影響使用有線網絡。

Wireless

不支持 operatation mode 換成 AP,不過支持 Ad-Hoc,挺不錯了。之前 Dell 筆記本信號差、連不上、斷線也就算了,brcmsmac 有時還會引發 kernel panic。

--- Networking support -> Wireless
<*>   cfg80211 - wireless configuration API
[ ]     nl80211 testmode command
[ ]     enable developer warnings
[ ]     cfg80211 regulatory debugging
[*]     enable powersave by default
[*]     cfg80211 DebugFS entries
[*]     cfg80211 wireless extensions compatibility
[*]   Wireless extensions sysfs files
<*>   Common routines for IEEE802.11 drivers
[ ]   lib80211 debugging messages
<*>   Generic IEEE 802.11 Networking Stack (mac80211)

其中 CONFIG_CFG80211_WEXT 要選上,net-wireless/wpa_supplicant 會用到它(不過似乎 net-wireless/iw 不需要)。

--- Device Drivers -> Network device support -> Wireless LAN -> Atheros Wireless Cards
[*]   Atheros bluetooth coexistence support
<*>   Atheros 802.11n wireless cards support
[*]     Atheros ath9k PCI/PCIe bus support
[*]     Atheros ath9k debugging
[*]   Atheros MAC statistics
[*]   Atheros ath9k rate control

USB

還沒添加關於藍牙鼠標、藍牙鍵盤、藍牙耳機的驅動,理由是還沒有這些設備……

--- Device Drivers -> USB support
<*>   Support for Host-side USB
[*]     USB announce new devices
<*>   xHCI HCD (USB 3.0) support (EXPERIMENTAL)
<*>   EHCI HCD (USB 2.0) support
[*]   Generic EHCI driver for a platform device
<*>   UHCI HCD (most Intel and VIA) support
<*>   USB Mass Storage support

LED Backlight

這樣配置 sysfs 就會有 /sys/class/backlight/intel_backlight/brightness 這個文件,可以用來調節亮度。比如 echo 1000 > /sys/class/backlight/intel_backlight/brightness,我把這條命令配置成 systemd 中 multi-user.target 的一個服務了。但是無法用 Fn 鍵調節亮度(我的這些 Fn 鍵全部無效)。

--- Device Drivers -> Graphics support -> Backlight & LCD device support

<*>   Lowlevel LCD controls
< >     Platform LCD controls
-*-   Lowlevel Backlight controls

--- LED Support
-*-   LED Class Support
-*-   LED Trigger support
<*>   LED backlight Trigger

Sony Laptop Extra

這個似乎沒有作用,不過畢竟是 Sony 機器,還是選了。

% dmesg|grep -i sony
sony_laptop: Sony Notebook Control Driver v0.6
input: Sony Vaio Keys as /devices/LNXSYSTM:00/device:00/PNP0A08:00/device:02/SNY5001:00/input/input5
input: Sony Vaio Jogdial as /devices/LNXSYSTM:00/device:00/PNP0A08:00/device:02/SNY5001:00/input/input6
sony_laptop: brightness ignored, must be controlled by ACPI video driver

--- Device Drivers -> X86 Platform Specific Device Drivers
<*>   Sony Laptop Extras

Real Time Clock

hwclock 需要用到 /dev/rtc0

--- Device Drivers -> Real Time Clock
[*]   Set system time from RTC on startup and resume (NEW)
(rtc0)  RTC used to set the system time (NEW)
      *** RTC interfaces ***
[*]   /sys/class/rtc/rtcN (sysfs) (NEW)
[*]   /proc/driver/rtc (procfs for rtc0) (NEW)
[*]   /dev/rtcN (character devices) (NEW)

systemd/udev

最近版本的 udev 要求內核支持 devtmpfs,否則就不會自動創建 /dev/sda 等節點,系統啓動後自己用 mknod 當然也是行得通的,只是……太麻煩了。

--- Device Drivers -> Generic Driver Options -> Generic Driver Options
(/sbin/udevadm) path to uevent helper
[*] Maintain a devtmpfs filesystem to mount at /dev

還有些 systemd 要求的配置,在 gentoo wiki 上都能找得到。

Video

顯卡相關的,kernel modesetting 當然不能少。

--- Device Drivers -> Graphics support -> /dev/agpgart (AGP Support)

<*>   Intel 440LX/BX/GX, I8xx and E7x05 chipset support

--- Device Drivers -> Graphics support -> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)

<*>   Intel 8xx/9xx/G3x/G4x/HD Graphics
[*]     Enable modesetting on intel by default

Sound

--- Device Drivers -> Sound card support -> Advanced Linux Sound Architecture
<*>   Sequencer support
< >     Sequencer dummy client
<*>   OSS Mixer API
<*>   OSS PCM (digital audio) API
[*]     OSS PCM (digital audio) API - Include plugin system
[*]   OSS Sequencer API
< >   HR-timer backend support
-*-   Dynamic device file minor numbers

--- Device Drivers -> Sound card support -> Advanced Linux Sound Architecture -> PCI sound devices -> Intel HD Audio
[*]   Build Realtek HD-audio codec support
[*]   Build HDMI/DisplayPort HD-audio codec support

File systems

我的分區主要是 ext4,備份分區、/usr/portage 是 btrfs。以前 /usr/portage 都用 reiserfs3, 現在打算換用 mkfs.btrfs -M,另外 squashfs 可能也是個不錯的選擇。

--- File systems
<*> The Extended 4 (ext4) filesystem
[*]   Use ext4 for ext2/ext3 file systems
<*> Btrfs filesystem (EXPERIMENTAL) Unstable disk format

像上面這樣選就不需要 ext2 ext3 了。還有幾項是 systemd 需要的,這裏就不再提了。

Card Reader

--- Device Drivers -> Staging drivers
<*>   RealTek PCI-E Card Reader support

Virtualization

爲了使用 qemu-kvm,注意 BIOS 裏要啓用 virtualization。

--- Virtualization
<*>   Kernel-based Virtual Machine (KVM) support
<*>     KVM for Intel processors support

其他

還有些 PCI 設備未能找到驅動,哪位大俠可指點一二?而且也不能控制風扇,無法使用 Fn 那些鍵。

% sudo lspci -k

00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: agpgart-intel
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: i915
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: xhci_hcd
00:16.0 Communication controller: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 (rev 04)
    Subsystem: Sony Corporation Device 90a8
00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: ehci_hcd
00:1b.0 Audio device: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller (rev 04)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: snd_hda_intel
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)
    Kernel driver in use: pcieport
00:1c.1 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 (rev c4)
    Kernel driver in use: pcieport
00:1c.2 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 3 (rev c4)
    Kernel driver in use: pcieport
00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: ehci_hcd
00:1f.0 ISA bridge: Intel Corporation HM77 Express Chipset LPC Controller (rev 04)
    Subsystem: Sony Corporation Device 90a8
00:1f.2 RAID bus controller: Intel Corporation 82801 Mobile SATA Controller [RAID mode] (rev 04)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: ahci
00:1f.3 SMBus: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller (rev 04)
    Subsystem: Sony Corporation Device 90a8
02:00.0 Network controller: Atheros Communications Inc. AR9485 Wireless Network Adapter (rev 01)
    Subsystem: Foxconn International, Inc. Device e044
    Kernel driver in use: ath9k
08:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5209 PCI Express Card Reader (rev 01)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: rts_pstor
0e:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 07)
    Subsystem: Sony Corporation Device 90a8
    Kernel driver in use: r8169

Xorg

這個也不是令人省心的東西。注意內核要開啓 evdev,即:

--- Input device support
<*> Event interface

/etc/make.conf 的配置:

VIDEO_CARDS="intel fbdev"
INPUT_DEVICES="evdev synaptics"

sys-apps/systemd-186 最好帶上 gudev USE flag。

emerge xorg-server xorg-drivers。觸摸板、鍵盤、HID USB 鼠標有一個不能用,就 Alt+SysRq+E 強制殺死所有進程回到 tty1 /bin/login 界面,這樣可以不用強按電源關機再開機(這樣是不是很傷機器)。如果發現這些輸入設備不能用就 emerge xf86-input-{evdev,synaptics} systemd xorg-server。之所以 emerge systemd 是因爲這些 xorg drivers 和 udev 的關係變得緊密起來了,而 udev 是 systemd 提供的。