分享一下我的LFS 9.1成功经验

周末花2天时间,基于LFS 9.1构筑了自己的Linux系统,成功引导,兴奋。网上看了下没看到有几个写到点子上的,分享一下。

请结合着LFS的网站,看我写的这个总结。适合Linux中级以上水平的同学。

LFS(Linux From Scratch),就是从Linux的源代码,构筑自己的Linux系统。对于深入学习Linux的原理、工具包的详细内容,是个很好的资源。想想,自己编译一个自己的操作系统,是不是很兴奋呢!

LFS 9.1具体分4部分,第1、4基本没啥用,重点是第2、3部分。
第2部分,准备编译工具,第3部分,使用编译工具构筑真正的系统。其实,我这里基本也是屁话,但是得放,跟你掌握整体的内容有关。这里只分享关键的注意点(在我看来的)——也就是书里没有说太细或没有总结太好的,体力活和打字打错的问题,请自行解决。

一、构筑环境

VMware 12.1.1;
基于CentOS 8.1——默认安装(英文语言)、没有update;
我用putty,ssh连接——你懂的,你可以选你喜欢的ssh工具;
添加了一块虚拟硬盘——18G。

二、LFS的第2章,准备CentOS 8.1软硬件环境

安装texinfo时有一个小问题,参见: 激活PowerTools
执行下面的脚本可以解决texinfo安装的问题:

yum config-manager --set-enabled PowerTools
yum install -y bash binutils bison bzip2 coreutils diffutils findutils gawk gcc-c++ glibc grep gzip m4 make patch perl sed python3 texinfo tar xz wget vim

fdisk分区,根据习惯分成了3个区:

fdisk分区
# lsblk -f
sdb
|-sdb1 ext4  *   800M     /boot     # 引导分区
|-sdb2 swap        2G     [SWAP]
`-sdb3 ext4      15.2G    /

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb3
mkswap /dev/sdb3

三、第2~5章 构筑一个临时系统

临时系统也好,编译工具也好,就是为书里面PART III构筑真正的系统做准备的。
体力活自己干,强调一点,编译时所有的测试都不做——快。

2至4章完事后,进入第5章时或在第5章的某个阶段暂停/重启机器之类操作后,再继续LFS的脚本,我也不可能不吃饭:

#!/bin/sh
export LFS=/mnt/lfs
mount /dev/sdb3 $LFS
su - lfs

注意:这个阶段,请严格安装书里做,先积累个经验,不要上来就换自己想要的版本,不然弄错了,你会很难受的——当然,你够细心也行;
整个一遍下来,除了吃饭,大半天也完事了。

四、LFS书里的PART III①

PART II完事后,进入第6章时或在第6章的某个阶段暂停/重启机器之类操作后,再继续LFS的脚本。
这里,再继续分为:第一次再继续和后面的再续(开机后,进入LFS构筑我称为第一次,后续为再续):
第一次进入的脚本

#!/bin/sh
export LFS=/mnt/lfs
mount /dev/sdb2 $LFS
mount -v --bind /dev $LFS/dev

# Preparing Virtual Kernel File Systems
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

chroot "$LFS" /tools/bin/env -i \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

第一次之后,再进入的脚本

#!/bin/sh
export LFS=/mnt/lfs

chroot "$LFS" /tools/bin/env -i \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

第6章,我也觉得没啥注意的内容,完全是体力活——照着书里的做就可以,一定要对照自己的环境,该改的地方要改。

第6章结束后,再继续LFS的脚本
第一次进入的脚本

#!/bin/sh
export LFS=/mnt/lfs
mount /dev/sdb2 $LFS
mount -v --bind /dev $LFS/dev

# Preparing Virtual Kernel File Systems
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

chroot "$LFS" /usr/bin/env -i          \
    HOME=/root TERM="$TERM"            \
    PS1='(lfs chroot) \u:\w\$ '        \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin \
    /bin/bash --login

第一次之后,再进入的脚本

#!/bin/sh
export LFS=/mnt/lfs

chroot "$LFS" /usr/bin/env -i          \
    HOME=/root TERM="$TERM"            \
    PS1='(lfs chroot) \u:\w\$ '        \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin \
    /bin/bash --login

第7章不说,结合自己的环境照着做就可以。

五、LFS书里的PART III②

PART III的第8章,或者说太重要了,或者说我在这里遇到了坑,单独拿出来说。
第8章比较重要的主要有两部分:内核编译、Grub引导系统,好多人载在这里。
内核编译,很重要——除了内核本身重要外,还有这里做不好,系统就启不来。会出现:
在这里插入图片描述
这个错误的原因,跟两方面因素有关:1是内核不支持硬件或者不支持filesystem,后来看是不支持VMware的SCSI设备;2是没有使用支持硬件的initramfs镜像。具体不解释了,要很长的话说。

内核的编译有几项配置,对于VMware必须要选中,主要是:

Device Drivers  --->
   # Optional, required for VMware virtual machines
   # Begin here
   Misc devices  --->
      <*> VMware VMCI Driver
   # End here
   SCSI device support  --->
   # Optional, required for VMware virtual machines
      [*] SCSI low-level drivers  --->
         <*>   BusLogic SCSI support (used by older VMware virtual solutions, can be optionally selected)
         <*>   VMware PVSCSI driver support (used by vSphere I think, but not by default, can be used by Player and Workstation too)

文件系统,如果采用ext4,可以不用配置。

内核编译的步骤,剩下的安装啥的照书里做就行:

make mrproper
make defconfig
make menuconfig   # 在这里选择上面的内容
make -j2          # 我这里写j2因为我给虚拟机配置了1个CPU、2个核心
make modules_install
cp -iv arch/x86_64/boot/bzImage /boot/vmlinuz-5.6.12-lfs-9.1 # 我的是64位系统

具体参照:
1、Basic Kernel
2、Make LFS bootable

Grub引导的创建
Grub引导的创建,首先确定你的boot分区是个引导分区;然后,把内核编译后的内容,弄到boot分区里去

grub的急救盘用不着,而且书里说的那个软件还得装。
然后安装书里说的:

grub-install /dev/sdb

注意:这一步的作用是什么?我实际验证的结果是在/dev/sdb上加入了Grub的引导,如果要启动就要编辑当前的Grub菜单加入这块盘的条目。

我的目标是:只使用一块lfs的虚拟硬盘,启动我自己的LFS系统。到现在,直接修改虚拟机——把CentOS8.1的硬盘删除,使用制作的LFS硬盘启动。这个时候,要注意修改:[/etc/fstab]及[/<boot分区>/grub/grub.cfg]文件,硬盘的序号和挂载的分区要对应上

下面是我的/boot/grub/grub.cfg,因为我的是独立的boot分区:

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod ext2
set root=(hd0,1)
menuentry "GNU/Linux, Linux 5.6.12-lfs-9.1" {
linux /vmlinuz-5.6.12-lfs-9.1 root=/dev/sda3 ro
}
EOF

一切都修改正确后,启动出现(这图是网上找的,不过界面是一样的):
在这里插入图片描述
这就成功了99%了,剩下的1%,一会儿再说。在上面的小窗口中,敲入grub引导的内容: 参考 Grub2: 拯救你的bootloader

set root=(hd0,1)
linux /vmlinuz-5.6.12-lfs-9.1 root=/dev/sda3 ro
boot

注意:一行一回车。
然后,就出现:
在这里插入图片描述
登录,成功,有木有很激动。

现在解决,剩下的那1%。输入:lsblk,出现:
在这里插入图片描述
以前的sdb变成了sda,执行:

grub-install /dev/sda

再重启,OK。

后来又验证了下,Grub Minimal Bash-like的小黑框的出现,跟我grub-install时没有设定好boot的目录有关——当时boot盘的目录挂到了/mnt/lfsb,grub-install时应该是如下的命令:

grub-install --boot-directory=/mnt/lfsb /dev/sdb

六、其它

根据Errata for LFS v9.1,我在第6章的真枪实蛋部分,采用了以下版本的软件:

gcc-9.3.0.tar.xz
linux-5.6.12.tar.xz
perl-5.30.2.tar.xz
python-3.8.3-docs-html.tar.bz2
Python-3.8.3.tar.xz
vim-8.2.0716.tar.gz

又根据BLFS,安装了:

openssh-8.2p1.tar.gz
wget-1.20.3.tar.gz

根据书里的内容sshd的配置修改为:

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

这样整个Linux系统就很爽了。

这么折腾一通,有个蛋用呢?其实,一是学习;二是弄一个自己专属的系统,你不觉得很扯么,对人吹牛逼:我用自己的Linux;三,我觉得是最重要的,这个系统的足迹很小、完全自己可控——一切的一切,看看下面的吧,在我启动sshd之后:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值