终于在freebsd上装上grub2了

今天把之前的 freebsd 9 current铲了。换了刚发布的8.0 release。先折腾了一会儿ipv6,然后就去折腾 grub2。其间重装N次。

因为明天还要重装一次,所以先把命令留下来:

fetch ftp://alpha.gnu.org/gnu/grub/grub-1.97.1.tar.gz

setenv PACKAGEROOT ftp://ftp.cn.freebsd.org

pkg_add -r bison gmake freetype2

接下来就是./configure,make,make install之类的。

之前我编译都困难。

这次顺利多了。问题主要集中在/usr/local/lib/grub/grub-mkconfig_lib的make_system_path_relative_to_its_root 上。freebsd的readlink 没有-f参数,stat不接受-c参数。我的做法是把那些都注释掉。然后直接让dir="/"。

/usr/local/sbin/grub-install --modules="ufs2 bsd biosdisk ufs2 part_msdos fs_uuid msdospart configfile reboot"

只有ufs2和bsd是必须的。其实这里也可以什么都不加,反正都可以动态加载嘛。

然后我把windows下的宋体传过去,拿grub-mkfont转了,最终如下:

### BEGIN /usr/local/etc/grub.d/00_header ###

set default=0

set timeout=5

### END /usr/local/etc/grub.d/00_header ###

insmod video

insmod vbe

insmod font

loadfont /boot/grub/simsun.pf2

insmod gfxterm

set gfxmode="1024x768x32;800x600x32;640x480x32;1024x768;800x600;640x480"

terminal_output gfxterm

### BEGIN /usr/local/etc/grub.d/10_freebsd ###

menuentry "FreeBSD" {

insmod ufs2

set root=(hd0,1)

search --no-floppy --fs-uuid --set 4b12f111913d5823

kfreebsd /boot/kernel/kernel

kfreebsd_loadenv /boot/device.hints

set kFreeBSD.vfs.root.mountfrom=ufs:/dev/da0s1

set kFreeBSD.vfs.root.mountfrom.options=rw

}

###

理论上来说它是可以显示汉字的,但是我现在还没有任何编辑器可以输入汉字。可能是因为我的securecrt字符设置的不对,也可能是别的原因。我觉得这一点是很牛的,目前我只见windows的启动菜单能显示汉字。

用这种方式启动和之前用chainloader还很不一样。它完全抛弃了boot0/boot1/boot2/loader。实在需要脚本就用lua吧,不必再折腾古老的4th了。

网上会有种种版本将/boot/loader.conf用grub的格式重写吗?我觉得它短期内很难流行起来,因为喜欢折腾的人都去折腾zfs去了,谁还用grub啊。不喜欢折腾的人呢,也懒得去替换系统的loader。再说了,本来freebsd的启动速度就是其它系统难以企及的,谁爱给它安这么笨重个头啊。我觉得在生产环境中,连loader都是可被省掉的。

回头来看sysinstall,它简直就是废柴,远远跟不上技术的变化。如果,引导器自己手动装(grub或zfsboot),分区需要手动分(gpart),源代码需要重新用svn下(如果你不打算用cvsup),ports需要用portsnap重新下,那么安装盘唯一的作用就是提供个live环境让人去base下执行export DISTDIR=xxxxx;sh install.sh

我觉得还不如自己最小化装一个freebsd然后把它刻成U盘镜像去分发更实用。这样做下来,一个发行版64M以内就可以搞定,下载速度快,省带宽,让更多没耐心的人接触到freebsd,多好啊!反正有网,装完自己pkg_add -r去。

而freebsd官方绝对不愿意把grub放进安装光盘中。但是我可以这么做,哈哈!

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥