编译LFS

成功编译并运行linux from scratch 7.7 system,有必要作下总结。
本次用的编译LFS的环境是:

  • 虚拟机是virtalbox
  • 宿主系统为CentOS 7.0 x86_64 (core版本)
  • LFS版本为 7.7 system

我用两块硬盘,一块安装宿主系统,另一个作为LFS的编译安装盘,编译成功后,脱离宿主系统那块硬盘,单独引导启动LFS linux的那块硬盘,登录进入LFS linux。

虚拟机上安装好centos后,在虚拟机上加一块硬盘,大小20G左右,分区如下

                           磁盘驱动器:/dev/sdb
                     大小:21474836480 字节,21.4 GB
        磁头数:255  每磁道扇区数:63        柱面数:2610

    名称        标志       分区类型   文件系统         [标签]         大小 (MB)
 ------------------------------------------------------------------------------
    sdb1        启动        主分区    ext2                               131.61
    sdb2                    主分区    swap                              1019.94
    sdb5                    逻辑分区  ext4                             20323.30*

sdb1分100多M以后打算给/boot的单独分区,sdb2给swap分区,sdb5 作为系统根目录。
然后根据LFS手册说明创建好文件系统,把sdb5挂载到/mnt/lfs作为工作目录。按手册下载源文件,创建目录,配置环境等,就开始编译工具链,编译工具链有几个地方需要注意
1,手册中所有的软件编译命令都默认在解压出来的软件目录中进行,也就是说必须先用tar解压,再cd进行软件目录。
2,编译完成后用”cd .. “退出软件目录,回到source目录
3,除非特别说明,删除解压出来的目录和所有编译过程中生成的 <package>-build 目录。也就是说编译成功后把解压出来的源文件目录删除,如果有build目录,也要删除,以免影响下下编译。

编译工具链的系统基础软件都很顺利。

由于打算给/boot单独的分区,在编译内核之前,在chroot环境中,先挂载sdb1分区到/boot目录

mount -t ext2 /dev/sdb1 /boot

这样编译出来的kernel就会安装到sdb1分区上。

接下配置grub启动

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd1,5)

menuentry "GNU/Linux, Linux 3.19-lfs-7.7-systemd" {
linux /vmlinuz-3.19-lfs-7.7-systemd root=/dev/sdb5 ro
}
EOF

完成后,一切看上去已经很OK,于是把宿主系统的那块硬盘卸掉,单独启动LFS linux,也成功出现了系统菜单选择,选择后回车后傻眼了,提示找不到分区。

通过grub命令发现,硬盘是hd0,而不是hd1,原因很简单,原来宿主系统还是,宿主系统那块盘是hd0,LFS 系统的那块盘是hd1,而现在已经把宿主系统的硬盘卸掉了,只剩下一块LFS linux,理所当然是hd0。

于是在grub命令下,于是手动设置root和加载linux内核

set root=(hd0,5)
linux /vmlinuz-3.19-lfs-7.7-systemd root=/dev/sda5 ro
boot

成功加载内核并启动后,报这个错误,也是没发现sdb硬盘,这让我想到了/etc/fstab 的配置,里面还是sdb,没办在,登录不进系统。

于是关闭虚拟机,重新把宿主系统的那块硬盘加入,引导进入宿主系统,用chroot进入lfs环境,修改/etc/fstab文件如下:

# Begin /etc/fstab
/dev/sda5 / ext4 defaults 1 1
/dev/sda1 /boot ext2 defaults 0 0
/dev/sda2 swap swap pri=1 0 0
# End /etc/fstab

在chroot环境中,把lfa linux的/boot分区挂进来,修改/boot/grub/grub.cfg文件,修改后内容如下

set default=0
set timeout=5

insmod ext2
set root=(hd0,5)

menuentry "GNU/Linux, Linux 3.19-lfs-7.7-systemd" {
linux (hd0,1)/vmlinuz-3.19-lfs-7.7-systemd root=/dev/sda5 ro
}

保存退出。

关闭系统,把宿主系统卸掉,只引导LFS linux盘,成功进入系统,用root登录,各功能都正常。

发表评论