Skip to content

Latest commit

 

History

History
851 lines (556 loc) · 30 KB

install_gentoo_on_macbook.md

File metadata and controls

851 lines (556 loc) · 30 KB

制作Gentoo Linux安装U盘

  • 在OS X 的Terminal终端,使用以下命令将.iso文件转换成.img
hdiutil convert -format UDRW -o livedvd-amd64-multilib-20140826.img livedvd-amd64-multilib-20140826.iso

这里选择使用livedvd而不是常用的minimal是因为:

Mac设备需要使用EFI stub loader,但是需要注意EFI限制了boot loaderc参数,所以需要将参数结合到内核中 (How to install Gentoo ONLY Mid-2012 macbook air)。UEFI Gentoo Quick Install Guide指出需要使用UEFI-enabled启动介质,如LiveDVD或者Gentoo-based SystemRescueCD,详细参考 Gentoo Handbook。此外,也可以参考Arch Linux on a MacBook

OS X会自动添加.dmg文件名后缀,所以实际生成的文件名是livedvd-amd64-multilib-20140826.img.dmg

OS X的hdiutil支持各种镜像文件的转换,例如.iso文件的格式,称为UDTO,则可以使用如下命令转换img文件到iso文件,类似如下:

hdiutil convert -format UDTO -o Fedora-Server-DVD-x86_64-23.img Fedora-Server-DVD-x86_64-23.iso
  • 检查当前可用设备,可以看到插入的U盘的对应设备
diskutil list

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *16.0 GB    disk2
   1:                 DOS_FAT_16 NO NAME                 209.7 MB   disk2s1
   2:                 DOS_FAT_32 DATA                    15.8 GB    disk2s2
  • 卸载掉被挂载的分区
sudo diskutil unmountDisk /dev/disk2s2
  • 执行镜像写入U盘
sudo dd if=livedvd-amd64-multilib-20140826.img.dmg of=/dev/rdisk2 bs=100m

安装

rEFInd

MacBook使用EFI stub loader,需要安装rEFInd来管理启动

  • 首先下载rEFInd二进制.zip文件并解压缩
  • 重启主机,在听到chime声音的时候按Command+R(进入Mac的recovery模式)
  • 当OS启动后,选择 Utilities -> Terminal
  • 进入到下面的目录(和你存放refind下载解压缩的目录有关,这里假设用户名是jerry,所以用户目录就是/Volume/OS X/Users/jerry
cd /Volume/OS X/Users/jerry/Downloads/refind-bin-0.10.2
./refind-install

再次启动系统,参考在Mac上双启动linux方式划分好用于Linux的分区,就可以开始安装。

磁盘设备准备

参考 Preparing the disks

建议使用GPT分区,但是对于使用BIOS-based主机中使用GPT,则会导致双启动Microsoft Windows失败。这是因为当Windows检测到GPT分区标记时会从EFI启动。

使用UEFI

当将Gentoo安装在使用UEFI来启动操作系统(代替BIOS)的诸暨市,注意需要创建一个EFI系统分区。EFI系统分区需要是一个FAT32分区(或者在Linux系统中显示为vfat):

mkfs.vfat /dev/sda2

如果启动分区不是使用FAT32(vfat)文件系统,则系统UEFI firmware将不能找到Linux内核和启动系统

分区的数量

分区的数量高度依赖环境,良好的文件系统分区可以提高性能。对于内存足够的系统,甚至可以不使用swap空间,但是对于使用hibernation功能,则需要使用swap空间来存储整个内存

使用parted来划分分区

parted -a optimal /dev/sda

然后print命令显示当前分区

(parted) print                                                            
Model: ATA APPLE SSD SM064C (scsi)
Disk /dev/sda: 60.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
 1      20.5kB  210MB   210MB   fat32        EFI System Partition  boot
 2      210MB   60.0GB  59.8GB  hfs+         Macintosh HD
 3      60.0GB  60.7GB  650MB   hfs+         Recovery HD

可以看到第一个分区是系统的EFI启动分区,并且是vfat文件系统,可以看到Mac主机的默认分区表就是使用GPT,所以不需要改变分区类型。(更改分区类型会导致磁盘所有数据擦除

删除分区2和3,只保留EFI分区

(parted) rm 2                                                             
(parted) rm 3                                                             
(parted) print                                                            
Model: ATA APPLE SSD SM064C (scsi)
Disk /dev/sda: 60.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name                  Flags
 1      20.5kB  210MB  210MB  fat32        EFI System Partition  boot

创建新的Linux分区( /boot 分区 256M / 分区 56G ,保留6G左右作为OP)

(parted) mkpart primary 211 467
(parted) name 2 boot
(parted) mkpart primary 468 56480
(parted) name 3 rootfs

保留6G空间不分配是因为MacBook Air使用SSD作为存储,需要预留一些空间不使用作为OP,可以提高访问性能和延长SSD使用寿命

使用EXT4文件系统 - SSD存储的EXT4文件系统优化

最后的分区

Number  Start   End     Size    File system  Name                  Flags
 1      20.5kB  210MB   210MB   fat32        EFI System Partition  boot
 2      211MB   467MB   256MB                boot
 3      468MB   56.5GB  56.0GB               rootfs

不过,参考[Intel SSD存储优化](#Intel SSD存储优化),使用secter作为单位,设置4k对齐,采用如下的分区(64G的SSD保留6G)

Number  Start    End         Size        File system  Name                  Flags
 1      40s      409639s     409600s     fat32        EFI System Partition  boot
 2      411648s  911360s     499713s     ext2         boot
 3      913408s  110313472s  109400065s  ext4         rootfs

对于 128G 的SSD分区如下(保留10G)

Number  Start    End         Size        File system  Name                  Flags
 1      40s      409639s     409600s     fat32        EFI System Partition  boot
 2      411648s  911360s     499713s                  primary
 3      913408s  217391327s  216477920s               primary

parted /dev/sda中,输入unit s,然后计算并调整边界

创建文件系统

对于小的分区(小于8GB),当使用ext2,ext3或ext4,需要使用相应的参数以便保留足够的inode。mke2fs使用bytes-per-inode参数来计算需要使用多少inode。对于小分区,将建议增加inode数量

ext2,使用以下命令

mk2fs -T small /dev/<device>

在ext3和ext4,添加-j参数激活日志

mk2fs -j -T small /dev/<device>

以下是实际操作记录

mkfs.ext2 -T small /dev/sda2
mkfs.ext4 /dev/sda3

然后挂载文件系统

mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda2 /mnt/gentoo/boot

安装stage tar文件

下载stage包

cd /mnt/gentoo
wget 最新的stage3包

验证SHA512 checksum

openssl dgst -r -sha512 stage3-amd64-<release>.tar.bz2

或者使用

sha512sum stage3-amd64-<release>.tar.bz2

验证 Whirlpool checksum

openssl dgst -r -whirlpool stage3-amd64-<release>.tar.bz2

对比存储在.DIGESTS(.asc)文件中的值确认文件没有被破坏

解压缩

tar xvjpf stage3-*.tar.bz2 --xattrs

p参数表示Preserve permissions,--xattrs表示包含在归档中的扩展属性

配置编译参数

编辑 /mnt/gentoo/etc/portage/make.conf

CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
USE="bindist mmx sse sse2"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"

以上是基本配置,后续可以再做调整

为了能够从最快的镜像网站同步,可以执行以下命令添加最快镜像的3个站点到make.conf - 参考 GENTOO_MIRRORS

/usr/bin/mirrorselect -s3 -D -o >> /mnt/gentoo/etc/portage/make.conf

复制DNS信息

cp -L /etc/resolv.conf /mnt/gentoo/etc/

挂载文件系统

mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev

--make-rslave参数在后面安装的systemd支持所需

进入新系统

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

如果ssh再次登陆则还要执行一遍

mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

配置portage

安装一个portage snapshot

emerge-webrsync

如果要更新portage,则使用emerge --sync,这个命令使用rsync协议同步最新portage

如果同步后有提示需要你阅读新消息,则使用命令

eselect news list
eselect news read

来查看提示信息

配置正确的profile

profile是任何Gentoo系统的构建块。它不仅设置默认的USECFLAGS以及其它重要的变量,而且它还锁定系统到一系列包版本

eselect profile list

显示输出

Available profile symlink targets:
  [1]   default/linux/amd64/13.0 *
  [2]   default/linux/amd64/13.0/selinux
  [3]   default/linux/amd64/13.0/desktop
  [4]   default/linux/amd64/13.0/desktop/gnome
  [5]   default/linux/amd64/13.0/desktop/gnome/systemd
  [6]   default/linux/amd64/13.0/desktop/kde
  [7]   default/linux/amd64/13.0/desktop/kde/systemd
  [8]   default/linux/amd64/13.0/desktop/plasma
  [9]   default/linux/amd64/13.0/desktop/plasma/systemd
  [10]  default/linux/amd64/13.0/developer
  [11]  default/linux/amd64/13.0/no-multilib
  [12]  default/linux/amd64/13.0/systemd
  [13]  default/linux/amd64/13.0/x32
  [14]  hardened/linux/amd64
  [15]  hardened/linux/amd64/selinux
  [16]  hardened/linux/amd64/no-multilib
  [17]  hardened/linux/amd64/no-multilib/selinux
  [18]  hardened/linux/amd64/x32
  [19]  hardened/linux/musl/amd64
  [20]  default/linux/uclibc/amd64
  [21]  hardened/linux/uclibc/amd64

如果要构建纯64位环境,没有任何32位应用程序和库,可以使用non-multilib profile

 eselect profile set 11

配置USE变量

USE是Gentoo提供给用户最有力的变量,应用程序可以被编译支持或不支持某些特性。

所有USE flags的完整描述见 /usr/portage/profiles/use.desc

如果要完全自己控制参数,可以默认忽略所有USE设置,即开头使用 -*

USE="-* X acl alsa ..."

配置时区

BIOS时间设置local模式

编辑 /etc/timezone 设置

Asia/Shanghai  

编辑 /etc/conf.d/hwclockclock="UTC" 修改为 clock="local" 表示系统时间是本地时间而不是格林威治时间

# Set CLOCK to "UTC" if your Hardware Clock is set to UTC (also known as  
# Greenwich Mean Time).  If that clock is set to the local time, then   
# set CLOCK to "local".  Note that if you dual boot with Windows, then   
# you should set it to "local".  
#clock="UTC"  
clock="local"

/etc/localtime 做软链接指向时区

cd /etc  
rm localtime  
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  

矫正系统时间

/etc/init.d/ntp-client restart  

启动前要具备 openrc 环境

将矫正后的时间写入BIOS

hwclock --systohc

配置locales

编辑 /etc/locale.gen

en_US ISO-8859-1
en_US.UTF-8 UTF-8

至少要设置一个UTF-8 locale

然后运行

locale-gen

重新加载环境

env-update && source /etc/profile

设置locale方法参考 Localization/Guide

选择默认locale

eselect locale list

然后 eselect locale set 4 设置en_US.utf8

其实就是创建了 /etc/env.d/02locale 配置文件

# 安装源代码

Gentoo提供了几种内核源代码,对于amd64-based系统,建议使用sys-kernel/gentoo-sources

emerge --ask sys-kernel/gentoo-sources

编译内核源代码有两个方式

  • 手工配置并编译
  • 使用genkernel工具自动编译和安装Linux内核

为方便编辑文件,安装vim

emerge --ask vim

emerge一个sys-apps/pciutils来使用lspci获取主机的硬件信息

emerge --ask sys-apps/pciutils

检查系统硬件

lspci

可以看到2011年版MacBook Air 11 硬件配置如下

00:00.0 Host bridge: NVIDIA Corporation MCP89 HOST Bridge (rev a1)
00:00.1 RAM memory: NVIDIA Corporation MCP89 Memory Controller (rev a1)
00:01.0 RAM memory: NVIDIA Corporation Device 0d6d (rev a1)
00:01.1 RAM memory: NVIDIA Corporation Device 0d6e (rev a1)
00:01.2 RAM memory: NVIDIA Corporation Device 0d6f (rev a1)
00:01.3 RAM memory: NVIDIA Corporation Device 0d70 (rev a1)
00:02.0 RAM memory: NVIDIA Corporation Device 0d71 (rev a1)
00:02.1 RAM memory: NVIDIA Corporation Device 0d72 (rev a1)
00:03.0 ISA bridge: NVIDIA Corporation MCP89 LPC Bridge (rev a2)
00:03.1 RAM memory: NVIDIA Corporation MCP89 Memory Controller (rev a1)
00:03.2 SMBus: NVIDIA Corporation MCP89 SMBus (rev a1)
00:03.3 RAM memory: NVIDIA Corporation MCP89 Memory Controller (rev a1)
00:03.4 Co-processor: NVIDIA Corporation MCP89 Co-Processor (rev a1)
00:04.0 USB controller: NVIDIA Corporation MCP89 OHCI USB 1.1 Controller (rev a1)
00:04.1 USB controller: NVIDIA Corporation MCP89 EHCI USB 2.0 Controller (rev a2)
00:06.0 USB controller: NVIDIA Corporation MCP89 OHCI USB 1.1 Controller (rev a1)
00:06.1 USB controller: NVIDIA Corporation MCP89 EHCI USB 2.0 Controller (rev a2)
00:08.0 Audio device: NVIDIA Corporation MCP89 High Definition Audio (rev a2)
00:0a.0 SATA controller: NVIDIA Corporation MCP89 SATA Controller (AHCI mode) (rev a2)
00:0b.0 RAM memory: NVIDIA Corporation Device 0d75 (rev a1)
00:15.0 PCI bridge: NVIDIA Corporation Device 0d9b (rev a1)
00:17.0 PCI bridge: NVIDIA Corporation MCP89 PCI Express Bridge (rev a1)
01:00.0 Network controller: Broadcom Corporation BCM43224 802.11a/b/g/n (rev 01)
02:00.0 VGA compatible controller: NVIDIA Corporation MCP89 [GeForce 320M] (rev a2)

2014年版MacBook Air 13

00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09)
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 09)
00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04)
00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4)
00:1c.1 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 2 (rev e4)
00:1c.2 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4)
00:1c.4 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 5 (rev e4)
00:1c.5 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 6 (rev e4)
00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04)
02:00.0 Multimedia controller: Broadcom Corporation 720p FaceTime HD Camera
03:00.0 Network controller: Broadcom Corporation BCM4360 802.11ac Wireless Network Adapter (rev 03)
04:00.0 SATA controller: Marvell Technology Group Ltd. 88SS9183 PCIe SSD Controller (rev 14)

注意:2011年MacBook Air的USB是2.0版本,使用的是EHCIOHCI驱动,而2014年MacBook Air是USB 3.0版本,使用的是xHCI驱动。我最初编译内核是在2014年的MacBook Air 13上,同样的配置在2011年MacBook Air 11上需要修改USB驱动选项(或者都编译成模块方式),否则会导致键盘无法使用(键盘是通过USB驱动)。

MacBook Air 11的无线网卡 Broadcom Corporation BCM43224 802.11a/b/g/n (rev 01) 可以使用开源驱动b43(参考Broadcom 43xx),但是MacBook Air 13的无线网卡Broadcom Corporation BCM4360 802.11ac Wireless Network Adapter (rev 03)无法使用开源驱动,需要使用闭源的net-wireless/broadcom-sta来驱动。

配置内核

cd /usr/src/linux
make menuconfig

编译

make && make modules_install
make install

有关无线网络设备,参考 Wifi

MacBook Air 11使用的无线网卡是Broadcom b43,需要安装 sys-firmware/b43-firmware

echo "sys-firmware/b43-firmware" >> /etc/portage/package.accept_keywords
echo "sys-firmware/b43-firmware Broadcom" >> /etc/portage/package.license
emerge --ask b43-firmware

还需要安装需要的 sys-kernel/linux-firmware

emerge --ask sys-kernel/linux-firmware

内核配置参考 Apple Macbook Pro Retina,我遇到过编译后内核启动无法使用键盘和声卡问题

配置rEFInd

参考 Apple_Macbook_Pro_Retina Bootloader

挂载EFI分区

mount /dev/sda1 /mnt

可以看到这个分区有EFI目录,我们需要将编译好的内核存放到这个分区

mkdir /mnt/EFI/gentoo
cd /mnt/EFI/gentoo
cp /boot/vmlinuz-4.3.2-gentoo-vms ./

每次编译内核需要,需要编辑 /Volumes/efi/refind/refind.conf来添加内核,就如同使用GRUB的方式。在最后添加一段(不需要的内容清理掉)

menuentry Gentoo-VMS 4.3.2 {
    icon EFI/refind/icons/os_gentoo.png
    loader EFI/gentoo/vmlinuz-4.3.2-gentoo-vms
    #options "ro root=UUID=f99cd3be-245e-4dcb-8594-ac21d1fe3d83"
    options "ro root=PARTUUID=ce1d1c89-8ca1-48b0-b4ef-5a312ae8c710"
}

这里PARTUUID是分区UUID,需要使用blkid命令获得 (参考Why can't I specify my root fs with a UUID?

使用命令

lsblk -f

可以看到如下输出

NAME   FSTYPE   LABEL        UUID                                 MOUNTPOINT
sda
├─sda1 vfat     EFI          67E3-17ED                            /mnt
├─sda2 ext2                  ac441c57-adaf-4df2-b1ee-03dd00b99060
└─sda3 ext4                  f99cd3be-245e-4dcb-8594-ac21d1fe3d83
sdb    iso9660  Gentoo-amd64 2014-08-25-05-56-52-00
├─sdb1 iso9660  Gentoo-amd64 2014-08-25-05-56-52-00
├─sdb2 vfat                  4B33-A38B
└─sdb3 hfsplus  Gentoo Linux

其中 f99cd3be-245e-4dcb-8594-ac21d1fe3d83 就是UUID,需要输出PARTUUID则使用blkid命令(这个命令更完整输出UUIDPARTUUID

blkid /dev/sda3

输出内容类似如下:

/dev/sda4: LABEL="Gentoo" UUID="f99cd3be-245e-4dcb-8594-ac21d1fe3d83" TYPE="ext4" PARTLABEL="Gentoo" PARTUUID="ce1d1c89-8ca1-48b0-b4ef-5a312ae8c710"

有关通过UUID方式持久化块设备名字,参考 Arch Linux文档:Persistent block device naming (简体中文)

内核模块

需要自动加载到内核模块配置在 /etc/conf.d/modules,并且可以按照需要添加内核参数

要查找所有可用模块,运行find命令

find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less

安装firmware

一些驱动需要在工作前加载firmware,通常是网卡,特别是无线网卡

emerge --ask sys-kernel/linux-firmware

文件系统

创建 /etc/fstab 内容

UUID=ac441c57-adaf-4df2-b1ee-03dd00b99060   /boot        ext2    defaults,noatime     0 2
UUID=f99cd3be-245e-4dcb-8594-ac21d1fe3d83   /            ext4    noatime              0 1

有关fstab使用UUID参考 Arch Linux文档:fstab (简体中文)

使用UUID是为了避免系统启动时因为磁盘设备识别变化而导致无法挂载文件系统

网络信息

编辑 /etc/conf.d/hostname

hostname='vms'

配置网络 /etc/conf.d/net - 所有的网络信息都在这个配置文件,有关不同配置案例解释位于 /usr/share/doc/netifrc-*/net.example.bz2 ,可以通过net-misc/netifrc获得

emerge --ask --noreplace net-misc/netifrc

配置静态IP的案例/etc/conf.d/net

config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.0.1"

配置动态HDCP案例

config_eth0="dhcp"

设置启动时自动启动网络

cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default

hosts文件 - /etc/hosts

# This defines the current system and must be set
127.0.0.1     vms.homenetwork vms localhost

系统信息

设置root密码

passwd

Init和启动配置

Gentoo可使用 OpenRC ,这样就使用 /etc/rc.conf 来配置启动服务

系统日志服务

采用systemd可以不需要

emerge --ask app-admin/rsyslog
rc-update add rsyslog default

Cron服务

emerge --ask sys-process/cronie
rc-update add cronie default

文件索引

emerge --ask sys-apps/mlocate

远程访问

rc-update add sshd default

文件系统工具

emerge --ask sys-fs/dosfstools

默认已经安装了ext文件系统工具 e2fsprogs

网络工具

安装dhcp客户端

emerge --ask net-misc/dhcpcd

安装bind(DNS)客户端工具

emerge --ask bind-tools

无线

参考 Wifi

安装b43(仅适用于MacBook Air 11 2011版)

echo "sys-firmware/b43-firmware" >> /etc/portage/package.accept_keywords
echo "sys-firmware/b43-firmware Broadcom" >> /etc/portage/package.license
emerge --ask b43-firmware

注意:需要加载私有firmware的b43驱动需要编译成模块,不能直接编译进内核。

不过,重启以后依然无法识别无线网卡,最后还是参考 Apple Macbook Pro Retina - Closed source Broadcom driver,但是这个驱动 不支持 802.11n

MacBook Air 13的Broadcom BCM4360不能使用开源的b43驱动 - 参考Linux wireless b43文档可以看到b43不支持BCM4360,建议使用wl。所以还是参考Apple Macbook Pro Retina - Closed source Broadcom driverGentoo无线网卡安装之broadcom-sta(wl)篇使用闭源驱动。

内核配置

Device Drivers
-> Network device support
    -> Wireless LAN
        -> <*>   Intel PRO/Wireless 2100 Network Connection

然后执行

echo "net-wireless/broadcom-sta" >> /etc/portage/package.keywords
emerge --ask broadcom-sta

注意:每次升级内核都需要重新编译broadcom-sta驱动

上述安装 broadcom-sta 提示内核配置需要屏蔽掉 BCMASSBMAC80211PREEMPT_RCU(不要设置Preemption Model成"Preemptible Kernel",应该选择其他选项),不能设置CONFIG_PREEMPT

Device Drivers --> Broadcom specific AMBA (这个就是BCMA)
Device Drivers --> Sonics Silicon Backplane support (这个是SSB)
Process type and features -> Preemption Model (Voluntary Kernel Preemption (Desktop)) (这个就是不能选择"Preemptible Kernel (Low-latency Desktop)")

上述安装完成后会在 /lib/modules/uname–r/net/wireless/ 目录下产生wl.ko驱动文件。重启操作系统后,使用ifconfig可以看到新的无线网络设备名字wlp3s0

安装linux-firmware

emerge --ask linux-firmware

参考 wpa_supplicant

emerge --ask wpa_supplicant
  • 配置802.1q认证

wpa_supplicant配置实现802.1q认证后使用网络:

配置/etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=root
network={
  ssid="SSID"
  key_mgmt=WPA-EAP
  eap=PEAP
  phase1="peaplabel=0"
  phase2="auth=MSCHAPV2"
  identity="域帐号名"
  password="域帐号密码"
}

启动wpa_supplicant服务和dhcpcd服务,就可以获得网络分配ip并连接上网络

/etc/init.d/wpa_supplicant start
/etc/init.d/dhcpcd start

有线网络连接配置类似,配置一个/etc/wpa_supplicant/wpa_supplicant_lan.conf,内容如下

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=root
network={
  ssid="SSID"
  key_mgmt=WPA-EAP
  eap=PEAP
  phase1="peaplabel=0"
  phase2="auth=MSCHAPV2"
  identity="域帐号名"
  password="域帐号密码"
}

然后使用一个start_lan.sh脚本来连接启动wpa_supplicant_lan.conf认证(dhcpcd已经启动),同样也能通过有线访问公司网络

#!/bin/bash

net=enp0s20u1

ifconfig $net up
ifconfig $net promisc
wpa_supplicant -i $net -B -Dwired -c /etc/wpa_supplicant/wpa_supplicant_lan.conf

选择boot loader (仅供参考,实际MacBook Air使用UEFI不需要grub)

默认使用GRUB2

emerge --ask sys-boot/grub

配置GRUB2

grub2-install /dev/sda

创建配置

grub2-mkconfig -o /boot/grub/grub.cfg

内核配置参考

参考 Apple Macbook Pro Retina Kernel Configuration 配置内核

Processor type and features  --->
  [*] EFI runtime service support 
  [*] EFI stub support
Device Drivers  --->
  Input device support  --->
    [*] Mice  --->
    # For trackpad support
    <*> Apple USB BCM5974 Multitouch trackpad support
  Hardware Monitoring support  --->
    # Motion, light sensor, keyboard backlight
    <*> Apple SMC (Motion sensor, light sensor, keyboard backlight)
  Graphics support  --->
    <*> Intel 8xx/9xx/G3x/G4x/HD Graphics
    Backlight & LCD device support  --->
      # Screen backlight
      <*>     Apple Backlight Driver
  X86 Platform Specific Device Drivers  --->
    <*>   Apple Gmux Driver
  Multimedia support  --->
    Media USB Adapters  --->
      # Webcam
      <M>   USB Video Class (UVC)
  Sound card support  --->
    Advanced Linux Sound Architecture  --->
      PCI sound devices  --->
        <M>   Intel HD Audio  --->
          [*]   Build HDMI/DisplayPort HD-audio codec support
          [*]   Build Cirrus Logic codec support
  USB support  --->
    # USB 3.0 (for integrated keyboard/trackpad)
    <*>  xHCI HCD (USB 3.0) support
Power management and ACPI options --->
  ACPI (Advanced Configuration and Power Interface) Support  --->
    <*>   Smart Battery System

驱动

使用Apple USB以太网卡是AXIS网卡,需要编译支持

重启系统

exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount /mnt/gentoo{/boot,/sys,/proc,}
reboot

触摸板

MacBook的触摸板非常灵敏,并且支持tap to click(也就是轻触等同于点击),非常方便使用。不过,默认在X Window下没有启用这个功能,导致非常不习惯。

参考 Tuning the Macbook touchpad in Linux,可以使用如下脚本命令实现

synclient TapButton1=1
synclient TapButton2=2
synclient TapButton3=3
synclient TapAndDragGesture=0

解释:参考 Tap-to-click not working in Ubuntu 12.04

TapButton(number) sets the mouse event to trigger when you tap your trackpad with (number)fingers. "0" means disabled, "1" means left-click, "2" means middle-click, "3" means right-click.

即,单指轻触是左键,双指轻触是中键,三指轻触是右键

另外,发现键盘输入的时候,手掌很容易碰到触摸板导致鼠标漂移输入混乱。

Touchpad Synaptics提供了详细的触摸板配置说明,可以参考

中文设置

  • 安装ibus

      emerge app-i18n/ibus-qt app-i18n/ibus-pinyin
    

我使用KDE桌面,所以安装app-i18n/ibus-qt,对于Gnome环境,安装app-i18n/ibusGentoo IBus

遇到编译报错

keybindingmanager.c:15:22: fatal error: gdk/gdkx.h: No such file or directory
  • 安装后在普通用户环境下设置

      ibus-setup
    

只要基本设置就可以

  • 在用户目录 ~/.xinitrc 中添加

      # iBus Setting ------------------
      export GTK_IM_MODULE=ibus
      export XMODIFIERS=@im=ibus
      export QT_IM_MODULE=ibus
      ibus-daemon -d -x
    

然后重新登录就可以使用。

gentoo升级经验

如果只是常规更新和升级软件包,使用如下命令

emerge -avtuDN world

如果想完全重新编译整个系统

emerge -avte world

在编译过程中如果有某个软件包失败,可以采用暂时跳过 emerge --resume --skipfirst -avte world ,等整个系统基本完成后,再单独解决个别软件包编译安装问题。

删除软件包以及无用的依赖软件包 (参考 Safely uninstall a package in Gentoo

emerge --unmerge ibus
emerge --depclean

参考