在MacBook上安装Gentoo
制作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 MacBookOS X会自动添加
.dmg文件名后缀,所以实际生成的文件名是livedvd-amd64-multilib-20140826.img.dmgOS 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盘
安装
rEFInd
MacBook使用EFI stub loader,需要安装rEFInd来管理启动
首先下载rEFInd二进制.zip文件并解压缩
重启主机,在听到chime声音的时候按
Command+R(进入Mac的recovery模式)当OS启动后,选择 Utilities -> Terminal
进入到下面的目录(和你存放refind下载解压缩的目录有关,这里假设用户名是
jerry,所以用户目录就是/Volume/OS X/Users/jerry)
再次启动系统,参考在Mac上双启动linux方式划分好用于Linux的分区,就可以开始安装。
磁盘设备准备
建议使用GPT分区,但是对于使用BIOS-based主机中使用GPT,则会导致双启动Microsoft Windows失败。这是因为当Windows检测到GPT分区标记时会从EFI启动。
使用UEFI
当将Gentoo安装在使用UEFI来启动操作系统(代替BIOS)的诸暨市,注意需要创建一个EFI系统分区。EFI系统分区需要是一个FAT32分区(或者在Linux系统中显示为vfat):
如果启动分区不是使用FAT32(vfat)文件系统,则系统UEFI firmware将不能找到Linux内核和启动系统
分区的数量
分区的数量高度依赖环境,良好的文件系统分区可以提高性能。对于内存足够的系统,甚至可以不使用swap空间,但是对于使用hibernation功能,则需要使用swap空间来存储整个内存
使用parted来划分分区
然后print命令显示当前分区
可以看到第一个分区是系统的EFI启动分区,并且是
vfat文件系统,可以看到Mac主机的默认分区表就是使用GPT,所以不需要改变分区类型。(更改分区类型会导致磁盘所有数据擦除)
删除分区2和3,只保留EFI分区
创建新的Linux分区( /boot 分区 256M / 分区 56G ,保留6G左右作为OP)
保留6G空间不分配是因为MacBook Air使用SSD作为存储,需要预留一些空间不使用作为OP,可以提高访问性能和延长SSD使用寿命
使用EXT4文件系统 - SSD存储的EXT4文件系统优化
最后的分区
不过,参考Intel SSD存储优化,使用secter作为单位,设置4k对齐,采用如下的分区(64G的SSD保留6G)
对于 128G 的SSD分区如下(保留10G)
parted /dev/sda中,输入unit s,然后计算并调整边界
创建文件系统
对于小的分区(小于8GB),当使用ext2,ext3或ext4,需要使用相应的参数以便保留足够的inode。mke2fs使用bytes-per-inode参数来计算需要使用多少inode。对于小分区,将建议增加inode数量
在ext2,使用以下命令
在ext3和ext4,添加-j参数激活日志
以下是实际操作记录
然后挂载文件系统
安装stage tar文件
下载stage包
验证SHA512 checksum
或者使用
验证 Whirlpool checksum
对比存储在.DIGESTS(.asc)文件中的值确认文件没有被破坏
解压缩
p参数表示Preserve permissions,--xattrs表示包含在归档中的扩展属性
配置编译参数
编辑 /mnt/gentoo/etc/portage/make.conf
以上是基本配置,后续可以再做调整
为了能够从最快的镜像网站同步,可以执行以下命令添加最快镜像的3个站点到make.conf - 参考 GENTOO_MIRRORS
复制DNS信息
挂载文件系统
--make-rslave参数在后面安装的systemd支持所需
进入新系统
如果ssh再次登陆则还要执行一遍
配置portage
安装一个portage snapshot
如果要更新portage,则使用emerge --sync,这个命令使用rsync协议同步最新portage
如果同步后有提示需要你阅读新消息,则使用命令
来查看提示信息
配置正确的profile
profile是任何Gentoo系统的构建块。它不仅设置默认的USE,CFLAGS以及其它重要的变量,而且它还锁定系统到一系列包版本
显示输出
如果要构建纯64位环境,没有任何32位应用程序和库,可以使用non-multilib profile
配置USE变量
USE是Gentoo提供给用户最有力的变量,应用程序可以被编译支持或不支持某些特性。
所有USE flags的完整描述见 /usr/portage/profiles/use.desc
如果要完全自己控制参数,可以默认忽略所有USE设置,即开头使用 -*
配置时区
BIOS时间设置local模式
编辑 /etc/timezone 设置
编辑 /etc/conf.d/hwclock 将 clock="UTC" 修改为 clock="local" 表示系统时间是本地时间而不是格林威治时间
/etc/localtime 做软链接指向时区
矫正系统时间
启动前要具备 openrc 环境
将矫正后的时间写入BIOS
配置locales
编辑 /etc/locale.gen
至少要设置一个UTF-8 locale
然后运行
重新加载环境
设置locale方法参考 Localization/Guide
选择默认locale
然后 eselect locale set 4 设置en_US.utf8
其实就是创建了
/etc/env.d/02locale配置文件
# 安装源代码
Gentoo提供了几种内核源代码,对于amd64-based系统,建议使用sys-kernel/gentoo-sources
编译内核源代码有两个方式
手工配置并编译
使用
genkernel工具自动编译和安装Linux内核
为方便编辑文件,安装vim
emerge一个sys-apps/pciutils来使用lspci获取主机的硬件信息
检查系统硬件
可以看到2011年版MacBook Air 11 硬件配置如下
2014年版MacBook Air 13
注意:2011年MacBook Air的USB是2.0版本,使用的是
EHCI和OHCI驱动,而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来驱动。
配置内核
编译
有关无线网络设备,参考 Wifi
MacBook Air 11使用的无线网卡是Broadcom b43,需要安装 sys-firmware/b43-firmware
还需要安装需要的 sys-kernel/linux-firmware
内核配置参考 Apple Macbook Pro Retina,我遇到过编译后内核启动无法使用键盘和声卡问题
配置rEFInd
参考 Apple_Macbook_Pro_Retina Bootloader
挂载EFI分区
可以看到这个分区有
EFI目录,我们需要将编译好的内核存放到这个分区
每次编译内核需要,需要编辑 /Volumes/efi/refind/refind.conf来添加内核,就如同使用GRUB的方式。在最后添加一段(不需要的内容清理掉)
这里PARTUUID是分区UUID,需要使用blkid命令获得(参考Why can't I specify my root fs with a UUID?)使用命令
可以看到如下输出
其中 f99cd3be-245e-4dcb-8594-ac21d1fe3d83 就是UUID,需要输出PARTUUID则使用blkid命令(这个命令更完整输出UUID和PARTUUID)
输出内容类似如下:
有关通过UUID方式持久化块设备名字,参考 [Arch Linux文档:Persistent block device naming (简体中文)](https://wiki.archlinux.org/index.php/Persistent_block_device_naming_(简体中文))
内核模块
需要自动加载到内核模块配置在 /etc/conf.d/modules,并且可以按照需要添加内核参数
要查找所有可用模块,运行find命令
安装firmware
一些驱动需要在工作前加载firmware,通常是网卡,特别是无线网卡
文件系统
创建 /etc/fstab 内容
有关fstab使用UUID参考 [Arch Linux文档:fstab (简体中文)](https://wiki.archlinux.org/index.php/Fstab_(简体中文))
使用UUID是为了避免系统启动时因为磁盘设备识别变化而导致无法挂载文件系统
网络信息
编辑 /etc/conf.d/hostname
配置网络 /etc/conf.d/net - 所有的网络信息都在这个配置文件,有关不同配置案例解释位于 /usr/share/doc/netifrc-*/net.example.bz2 ,可以通过net-misc/netifrc获得
配置静态IP的案例/etc/conf.d/net
配置动态HDCP案例
设置启动时自动启动网络
hosts文件 - /etc/hosts
系统信息
设置root密码
Init和启动配置
Gentoo可使用 OpenRC ,这样就使用 /etc/rc.conf 来配置启动服务
系统日志服务
采用systemd可以不需要
Cron服务
文件索引
远程访问
文件系统工具
默认已经安装了ext文件系统工具
e2fsprogs
网络工具
安装dhcp客户端
安装bind(DNS)客户端工具
无线
参考 Wifi
安装b43(仅适用于MacBook Air 11 2011版)
注意:需要加载私有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 driver和Gentoo无线网卡安装之broadcom-sta(wl)篇使用闭源驱动。
内核配置
然后执行
注意:每次升级内核都需要重新编译
broadcom-sta驱动
上述安装 broadcom-sta 提示内核配置需要屏蔽掉 BCMA,SSB,MAC80211,PREEMPT_RCU(不要设置Preemption Model成"Preemptible Kernel",应该选择其他选项),不能设置CONFIG_PREEMPT
上述安装完成后会在 /lib/modules/uname–r/net/wireless/ 目录下产生wl.ko驱动文件。重启操作系统后,使用ifconfig可以看到新的无线网络设备名字wlp3s0。
安装linux-firmware
配置802.1q认证
wpa_supplicant配置实现802.1q认证后使用网络:
配置/etc/wpa_supplicant/wpa_supplicant.conf
启动wpa_supplicant服务和dhcpcd服务,就可以获得网络分配ip并连接上网络
有线网络连接配置类似,配置一个/etc/wpa_supplicant/wpa_supplicant_lan.conf,内容如下
然后使用一个start_lan.sh脚本来连接启动wpa_supplicant_lan.conf认证(dhcpcd已经启动),同样也能通过有线访问公司网络
选择boot loader (仅供参考,实际MacBook Air使用UEFI不需要grub)
默认使用GRUB2
配置GRUB2
创建配置
内核配置参考
参考 Apple Macbook Pro Retina Kernel Configuration 配置内核
驱动
使用Apple USB以太网卡是AXIS网卡,需要编译支持
重启系统
触摸板
MacBook的触摸板非常灵敏,并且支持tap to click(也就是轻触等同于点击),非常方便使用。不过,默认在X Window下没有启用这个功能,导致非常不习惯。
参考 Tuning the Macbook touchpad in Linux,可以使用如下脚本命令实现
解释:参考 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
我使用KDE桌面,所以安装
app-i18n/ibus-qt,对于Gnome环境,安装app-i18n/ibus(Gentoo IBus)
遇到编译报错
安装后在普通用户环境下设置
只要基本设置就可以
在用户目录
~/.xinitrc中添加
然后重新登录就可以使用。
gentoo升级经验
如果只是常规更新和升级软件包,使用如下命令
如果想完全重新编译整个系统
在编译过程中如果有某个软件包失败,可以采用暂时跳过
emerge --resume --skipfirst -avte world,等整个系统基本完成后,再单独解决个别软件包编译安装问题。
删除软件包以及无用的依赖软件包 (参考 Safely uninstall a package in Gentoo)
参考
Apple MacBook - 早期版本MacBook的安装
ArchLinux MacBook - 在MacBook上运行Arch Linux,文档较为全面
Apple Macbook Pro Retina - 在Retina版本的MacBook Pro上安装Gentoo
Install Gentoo Prefix on MacBook Pro - 在OS X系统中运行Gentoo Prefix获得Gentoo Linux体验
Last updated
Was this helpful?