macbook ubuntu - hanyong/note GitHub Wiki

MacBook Pro 安装 ubuntu 经历

如何在MacBook Pro Retina上安装Linux https://linux.cn/article-3245-1.html

MacBookPro11-1/Saucy https://help.ubuntu.com/community/MacBookPro11-1/Saucy

hanyongdeMacBook-Pro:~ hanyong$ hostname
hanyongdeMacBook-Pro.local
hanyongdeMacBook-Pro:~ hanyong$ sudo scutil --set HostName ali-59375mac.local
hanyongdeMacBook-Pro:~ hanyong$ ping ali-59375mac.local
ali-59375mac:~ hanyong$ df -h
Filesystem      Size   Used  Avail Capacity iused    ifree %iused  Mounted on
/dev/disk1     233Gi   16Gi  217Gi     7% 4182961 56798285    7%   /
devfs          180Ki  180Ki    0Bi   100%     623        0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%       0        0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0        0  100%   /home

EFI-Booting Ubuntu on a Mac http://www.rodsbooks.com/ubuntu-efi/

大概是说了下 mac 恶心的启动机制, 这个不关心, 直接往后拖看重点, 说先使用 mac 自带工具调整分区大小。 额, 才想起来前面那篇文章也提到这点。

调整到 30G, 目前系统占了 18G, 再留 12G 玩, 其余全部划走。

想做 X 转发方便在 linux 本机操作, 编辑 /etc/ssh/sshd_config, 设置 X11Forwarding yes。 不知道怎么重启服务, 直接 sudo reboot 了。

observer.hany@ali-59375n:~$ ssh -X [email protected]
Password:
X11 forwarding request failed on channel 0
Last login: Mon Jul 18 13:38:21 2016
ali-59375mac:~ hanyong$ 

还是失败, 算了, 放弃。

继续分区。看文档介绍说用 gdisk 分区。先看看现在的分区情况。

ali-59375mac:~ hanyong$ df -h
Filesystem      Size   Used  Avail Capacity iused    ifree %iused  Mounted on
/dev/disk1      28Gi   16Gi   12Gi    57% 4181276  3142940   57%   /
devfs          181Ki  181Ki    0Bi   100%     627        0  100%   /dev
/dev/disk0s4   205Gi  297Mi  204Gi     1%   76085 53548175    0%   /Volumes/未命名
map -hosts       0Bi    0Bi    0Bi   100%       0        0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0        0  100%   /home
ali-59375mac:~ hanyong$ ls -Al /Volumes/未命名
total 0
drwx------  5 root  admin  170  7 18 13:31 .Spotlight-V100
d-wx-wx-wt  3 root  wheel  102  7 18 13:38 .Trashes
drwx------  5 root  admin  170  7 18 13:37 .fseventsd

多跑出来一个磁盘 /dev/disk0, disk1 是磁盘不是分区, 突然以为 mac 原有磁盘不能分区, 但可以分磁盘, 不知道用了什么 "黑科技" 分出来一个 disk0。 不过这块磁盘能交给我们控制, 问题就好说了。 同时明白那个磁盘工具窗口的意义, 这块磁盘 mac 还用着, 应该拆下来给我们。

点击 "卸载", 再看:

ali-59375mac:~ hanyong$ df -h
Filesystem      Size   Used  Avail Capacity iused   ifree %iused  Mounted on
/dev/disk1      28Gi   16Gi   12Gi    57% 4185118 3139098   57%   /
devfs          181Ki  181Ki    0Bi   100%     627       0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%       0       0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0       0  100%   /home
ali-59375mac:~ hanyong$ ls -Al /Volumes/未命名
ls: /Volumes/未命名: No such file or directory

disk0 没有了, OK。 "未命名" 这个默认给的名字太难听了, 改名 disk0。 mac 是 bug 吗?卸载后改名不生效, 挂载, 改名, 再卸载。

接下来我们来操作 disk0 这块盘。 应该可以告别 mac 的那些鬼了, 开始我们熟悉的工具和操作。 本来习惯用 parted 分区, mac 下没有 parted, 安装不知道会不会很麻烦。 文档介绍的是 gdisk, 本想照着文档操作下, 结果 gdisk 也要自己装。

想起 mac 安装软件用的 brew。上 brew 官网: http://brew.sh/index_zh-cn.html . 按官网提示敲入一条命令安装 brew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

经过稍微漫长的一段时间等待, brew 安装完成。 尝试用 brew 安装 parted, 没有, 安装 gdisk, 也没有, mac 下的人不用运维工具的吗。 google "macbook parted", 没什么收获。"macbook gdisk" 也没有。

赶紧想办法:

  • 上 parted 官网寻求手动编译安装的办法? 太复杂。
  • docker 搞? mac 的 docker 好像时虚拟机, 搞不了宿主机?
  • chroot? mac 能执行 linux 的二进制吗?

把本机 static 版 busybox 拷贝到 mac 看看, 执行不了。

  • 把 disk0 挂载到本机远程分区?
  • 把本机分区 copy 到 disk0? mac 有 dd 工具吗? 试一下, 有, 但貌似不能写 disk0。

看来还是得继续借助下 mac 自己的工具。 命令行试了下 "g" 打头的命令补全, 看到有个 "gpt" 命令, 简单看了下可以操作管理 gpt 分区表。 同时看到有个 "newfs" 命令, 同样通过命令补全找到 "newfs_msdos" 命令。 有这个两个应该就够了。

先看下现在的分区表结构:

ali-59375mac:~ hanyong$ sudo gpt show /dev/disk0
      start       size  index  contents
          0          1         PMBR
          1          1         Pri GPT header
          2         32         Pri GPT table
         34          6         
         40     409600      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
     409640   59299296      2  GPT part - 53746F72-6167-11AA-AA11-00306543ECAC
   59708936    1269536      3  GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
   60978472  428994096      4  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
  489972568     262151         
  490234719         32         Sec GPT table
  490234751          1         Sec GPT header

ali-59375mac:~ hanyong$ sudo gpt create /dev/disk0
gpt create: unable to open device '/dev/disk0': Operation not permitted
ali-59375mac:~ hanyong$ sudo gpt destroy /dev/disk0
gpt destroy: unable to open device '/dev/disk0': Operation not permitted

结果创建分区又说没权限, disk0 是只读的? 重启试试, 还是不行。 看来 mac 这里有鬼, 继续 google 解决方案。

找到说要用一个叫做 "rEFInd" 的东西来弄, 官网: http://www.rodsbooks.com/refind/ 。 简单看了下是个启动管理器 (boot manager)。 EFI 是启动管理器, GRUB 也是启动管理器, 为什么要用这啥? 因为看到 mac 磁盘工具只有一个分区, 我估计是 mac 修改限制了 EFI 的用法, 我连 ESP (EFI 系统分区) 都找不着。 那 "rEFInd" 怎么玩的呢, 直接跳到 Mac 手动安装 "rEFInd" 的文档。 结果文档说 mac 是有 ESP 的, 用 diskutil list 看。

ali-59375mac:~ hanyong$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Macintosh HD            30.4 GB    disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
   4:                  Apple_HFS disk0                   219.6 GB   disk0s4
/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +30.0 GB    disk1
                                 Logical Volume on disk0s2
                                 1E996413-8FC4-447E-9149-0502DC791CB7
                                 Unencrypted

一看果然如此。 磁盘工具却不显示, 看来 mac 跟 windows 很像, 故意把一些东西隐藏起来, 让用户摸不着头脑。 估计 mac 就是照着 windows 抄的, 还好 unix 的一些命令行工具还在, 限制没那么多。 同时看这输出显示, disk0 才是物理盘, disk1 才是虚拟盘。 之前还错误的以为 disk0 是从 disk1 上腾出来的空间, 图形工具害死人,不把这些东西讲清楚, 我刚才还一直想着把 disk0 摧毁重建。 同时明白刚才被我在磁盘工具命名为 disk0 的, 其实是分区 disk0s4。 一个虚拟磁盘, 一个分区, 两个都被我误解成磁盘, 特别是 disk0s4 的那个文案内置物理宗卷迷惑人, 先把它改名成 lvm

既然 ESP 找着了, 直接上 GRUB 啊。"reEFInd" 干啥? 不急, 接着看文档。 接下来的几步都是稀松平常的安装 EFI loader 的操作 (即拷贝文件), 关键是最后一步, 调用 bless 设置启动 "reEFInd"。 原来 bless 才是 mac 下的启动管理器。 man bless 看了下文档, 还支持 --nextonly 这个参数 (类似 EFI, grub), mac 下的 bless 类似 linux 下的 efibootmgr (?)。 既然这样, 就不用 "reEFInd" 了, 安装 grub 试试, 添加 --nextonly 参数, 这样即使弄错了重启就能恢复。

使用 grub-mkimage 制作一个 efi 镜像, grub 文件及配置拷贝到 mac 机器, 然后执行如下操作: 注意: ls -Al 看了下 mac 下普通用户有权限读写 /Volumes/, 只有 mount 和 bless 需要 sudo 。

mkdir /Volumes/ESP
sudo mount -t msdos /dev/disk0s1 /Volumes/ESP
#rsync -rtv grub/ grub-x86_64-efi.img *.cfg -R /Volumes/ESP/EFI/
#sudo bless --setBoot --nextonly --mount /Volumes/ESP/ --file /Volumes/ESP/EFI/grub-x86_64-efi.img
# 后来测试 grub 不放在 "EFI/" 下, 直接放 ESP 根目录也 OK 的.
rsync -rtv grub/ grub-x86_64-efi.img *.cfg -R /Volumes/ESP/
sudo bless --setBoot --mount /Volumes/ESP/ --file /Volumes/ESP/grub-x86_64-efi.img

bless 操作失败:

ali-59375mac:~ hanyong$ sudo bless --setBoot --nextonly --mount /Volumes/ESP --file /Volumes/ESP/EFI/grub/grub-x86_64-efi.img 
Could not set boot device property: 0xe00002bc

随后注意到文档上说:

This is the step that's likely to fail if your system is booted with SIP active.

什么是 SIP, mac 的坑来了。当前页面搜索了一下, 发现文档之前已经提到这个问题, 并写了一篇专题: http://www.rodsbooks.com/refind/sip.html 。 简单看了下, Apple 的安全策略禁用了某些特殊功能(类似 windows ?):

With SIP active, as is the default, OS X 10.11 limits your ability to perform some of these administrative tasks. You can still install and remove most third-party programs, configure your network, and so on; but some critical directories can no longer be written, even as root, and some utilities cannot be used in certain ways, even as root.

而作为一个 devops 的程序员, 我希望我的电脑我做主, 不应该限制程序员的能力。 解决办法有两个, 一是启动到 "Recovery mode", 二是 "Disabling SIP"。 启动到 "Recovery mode" 其实也是临时禁用 "SIP"。 mac 启动时按住 "Command+R" 就可以进入恢复模式, 这个相对简单, 决定试试。

恢复模式下很多功能都不能用, 甚至是简单的 idman, 但是 bless 可以用 -- 就是来做这个的。 恢复模式下的体验那真叫一个难用。 尝试挂载 disk0s1 时说设备忙, mount 看是挂载根 "/" 下, 可是根 "/" 下又没有我要操作的 "EFI/"。 文档里使用自动安装, 没提到这茬, 干脆禁用 SIP 再重启到正常模式下玩。

-bash-3.2# csrutil disable
Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
-bash-3.2# reboot

重启后执行 bless 成功, 再重启看看效果。重启后立即进入了 grub 界面, 至此安装 grub 成功。 grub 下物理磁盘变成了 hd1, 同时出现一个不可读的磁盘 hd0, 顺序刚好跟 mac 下颠倒。 回到 mac 下, 可以将启动相关配置都弄好了。 ESP 空间只有 200M, 想放个 winpe.wim 都不够, 不折腾了, 放 windows D 盘下吧 (稍后创建)。

mac 屏幕分辨率太高, 安装 ubuntu 16.04 后窗口和字体在屏幕上显示的格外的小。

制作 ubuntu 启动 U 盘: http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-mac-osx 这个工具在 ubuntu 下 sudo aptitude install unetbootin 也能安装使用。