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 提供的。