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" 就可以进入恢复模式, 这个相对简单, 决定试试。
恢复模式下很多功能都不能用, 甚至是简单的 id
和 man
,
但是 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 后窗口和字体在屏幕上显示的格外的小。
- 将字体 DPI 从默认的 96 修改成 160, 这样字体变大了, 其他窗口控件依然很小, 显示比例失调. http://askubuntu.com/questions/671238/ubuntu-mate-desktop-scaling-for-4k-displays
- 只有 linux mint 支持高清分辨率. http://askubuntu.com/questions/675015/high-resolution-screen-creates-tiny-icons-and-text-with-mate-desktop
- 将屏幕分辨率从默认的
2880x1800
修改成同比例的1920x1200
(与旧电脑外接显示器相同)。 长宽缩比为2/3
, 理论上图形显示会变成的粗糙一些, 基本来看差别不大。
制作 ubuntu 启动 U 盘:
http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-mac-osx
这个工具在 ubuntu 下 sudo aptitude install unetbootin
也能安装使用。