该文档参考LFS官网 和 https://www.cnblogs.com/alphainf/p/16661308.html
下文中未提及的部分参考官方文档
环境准备
在Oracle VM VirtualBox中先创建一个20G的磁盘,安装bebian操作系统,此时该硬盘为sda,分了三个区,分别是Linux,Extended和Swap。(ps:系统安装在固态硬盘中,不然后续编译会很慢)
分区
在Oracle VM VirtualBox再安装一个40G的磁盘sdb用于后续使用
根据书中的要求,我们要对即将构造lfs的磁盘sdb进行分区。
我们将其分成三个分区,分别为boot,swap,root。其中:
boot分区用于进行系统引导,且是sdb的第一个分区,分区大小为256MB。
swap分区用于进行内存交换,分区大小为2G。该分区将用于进行内存交换(当运行内存不足时将会发生交换)
root分区为主分区,整个LFS系统将会构造在其中
在分区上创建文件系统
我们需要将boot分区(/dev/sdb1)和root分区(/dev/sdb3/)设置为ext4文件系统
对于swap分区(/dev/sdb2),我们需要将其设置为交换目录,命令如下
mkfs -v -t ext4 /dev/sdb1
mkfs -v -T small -t ext4 /dev/sdb3
mkswap /dev/sdb2
设置$LFS环境变量
export LFS=/mnt/lfs
注意:随时查看$LFS环境变量,切换用户和退出程序的时候可能丢失
挂载分区
我们创建文件夹/mnt/lfs,并将root分区(/dev/sdb3)挂载到/mnt/lfs中,代码如下:
mkdir -pv $LFS
mount -v -t ext4 /dev/sdb3 $LFS
我们创建文件夹LFS/boot,并将boot分区(/dev/sdb1)挂载到
LFS/boot下,代码如下:
mkdir -v $LFS/boot
mount -v -t ext4 /dev/sdb1 $LFS/boot
我们用下面这条指令挂载swap分区
/sbin/swapon -v /dev/sdb2
文件安装
依照官方文档
注意:
1.当一个软件多次安装的时候(例如gcc第二次)需要删除原来的文件并重新解压,不能被以前的数据影响
2.编译和测试的时候可以使用多线程提升速度:make -j4 或者 make -j4 check
进入Chroot并构建临时工具
注意:
1.进入chroot的时候必须用su - root不能用su root,不然不会有chroot命令
2.如果出现机器重启的情况,需要重新“挂载和激活/dev” 和“挂载虚拟文件系统”以及“创建shm目录”
3.chroot步骤的安装参考以前的安装方式,只不过目录为chroot下的sources
文件备份
Oracle VM VirtualBox提供了快照功能,可以忽略这一部分。
软件安装及清理
注意:
1.安装软件的时候make check可能会错误,有一些错误可以忽略
2.官方文档第八章glibc设置时区:Americas-》United States-》Eastern
系统配置
文档9.6.5的配置
cat > /etc/sysconfig/console << "EOF"
# Begin /etc/sysconfig/console
UNICODE="1"
KEYMAP="us"
FONT="lat1-16 -m 8859-1"
# End /etc/sysconfig/console
EOF
文档9.7 shell配置(用到8.5节安装过的语言)
LC_ALL=en_US.iso88591 locale charmap
LC_ALL=en_US.iso88591 locale language
LC_ALL=en_US.iso88591 locale int_curr_symbol
LC_ALL=en_US.iso88591 locale int_prefix
cat > /etc/profile << "EOF"
# Begin /etc/profile
export LANG=en_US.ISO-8859-1
# End /etc/profile
EOF
使 LFS 系统可引导
文档10.2创建/etc/fstab
对照官方文档:本人机器 <xxx>对应sdb3,<fff>对应ext4,<yyy>对应sdb2
但是,我们还有boot分区,该分区也要一并设置进fstab中,我们还要增加boot的设置
然后,考虑到在接下来的设置中,由于磁盘将会互换,sdb会变为sda,编号不稳定,我们可以用稳定的UUID进行磁盘确认。
使用如下命令:
blkid
用sdb1/2/3对应的UUID对上面的fstab进行替换,替换后的fstab如下:
cat > /etc/fstab << "EOF"
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
#/dev/sda3 is the root
UUID=4ee938e6-61f5-42cc-aa5d-b86f7df71b81 / ext4 defaults 1 1
#/dev/sda1 is the boot
UUID=ee79b98c-8393-43a4-8e90-23a228329b83 /boot ext4 defaults,noauto 0 2
#/dev/sda2 is the swap
UUID=b8010fbf-3557-4277-9bca-153a276ca2d8 swap swap pri=1 0 0
proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /run tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
# End /etc/fstab
EOF
Linux内核安装
make mrproper
make defconfig #这一行主要是进行一些默认配置
make menuconfig
在虚拟机下应该勾选上如下的选项
Device Drivers --->
Generic Driver Options --->
[*]Network device support --->
[*]Ethernet Driver support --->
[*] AMD PCnet32 PCI support
[*]Fusion MPT device support --->
<*> Fusion MPT ScsiHost drivers for SAS
<*> Fusion MPT misc device (ioctl) driver
[*] Fusion MPT logging facility
SCSI device support --->
[*] SCSI low-level drivers
GRUB安装
无需解压和cd,我们直接运行以下命令
本人机器使用如下命令:
grub-install /dev/sdb
创建/boot/grub/grub.cfg
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.10.17-lfs-10.1" {
linux /boot/vmlinuz-5.10.17-lfs-10.1 root=/dev/sda3 ro
}
EOF
收尾并启动LFS
echo 10.1 > /etc/lfs-release
cat > /etc/lsb-release << "EOF"
DISTRIB_ID="Linux From Scratch"
DISTRIB_RELEASE="10.1"
DISTRIB_CODENAME="xwj"
DISTRIB_DESCRIPTION="Linux From Scratch"
EOF
cat > /etc/os-release << "EOF"
NAME="Linux From Scratch"
VERSION="10.1"
ID=lfs
PRETTY_NAME="Linux From Scratch 10.1"
VERSION_CODENAME="xwj"
EOF
离开chroot环境
完成这些工作后,我们输入以下命令离开chroot环境
logout
解除挂载
umount -v $LFS/dev/pts
umount -v $LFS/dev
umount -v $LFS/run
umount -v $LFS/proc
umount -v $LFS/sys
umount -v $LFS/boot
umount -l $LFS
更改磁盘顺序
先关机,关机后,我们调整两块磁盘的挂载顺序。
我们更改LFS安装的磁盘的挂载位置,使其从SCSI 0:1变更为SCSI 0:0,变更后的情况如图所示
将虚拟硬盘端口互换
启动LFS
启动虚拟机成功以后,登录用户使用root
项目遇到的非技术问题:
1.使用快捷键的时候小心ctrl+shift和其他键的组合可能造成FireFox浏览器故障
2.虚拟机自带的火狐浏览器偶尔会解析不了网址,需要换一个更稳定的浏览器