2005年那会儿编译过一次LFS6.1+BLFS,用了几年做桌面,2008年之后几乎就没怎么用过Linux了,最近忽然兴起,想使用Linux做股票的数据分析,重新编译一遍LFS7,因为官方没有LiveCD,LinuxSir.org也关闭了,以前的一点点经验早就忘光了,竟几次失败,于是网上好好做了一遍功课,后来用Debian8做主系统编译成功,与大家分享一下,很想念泡LinuxSir.org论坛的那段时光,现在重做LFS才体会到,当时真是身在福中不知福。
根据网友一些经验,用Ubuntu、CentOS、Debian做宿主都可以,我先用CentOS7,在我的电脑上死活安装不上,又不想在Windows里虚拟机装一个CentOS,再在CentOS里面编译LFS,那样肯定会慢很多。后改用Debian8,总是安装过程出错,之后非得设IP连网,才安装成功。
进入Debian8.2之后,先对照LFS-7.8-Systemd官方文档的宿主系统要求,逐一检查各个软件的版本,除了Binutils的版本过大外其它都符合,遂开工。
一 宿主系统的准备工作
1 安装开发工具
直接使用apt-get install 会找不源,先配置以debian-8.2.0-amd64-DVD-1.iso文件做为安装源进行安装:
a 先将这个iso文件挂载到/mnt/cdrom目录
-
mount -o loop debian-8.2.0-amd64-DVD-1.iso /mnt/cdrom
b 编辑/etc/apt/sources.list,增加一行:
-
deb file:///mnt/cdrom/ jessie main
然后执行apt-get update更新一下
c 安装开发工具,使用命令
-
apt-get install build-essential
2 检查宿主系统的软件版本./version-check.sh,认真逐一核对是否符合要求。
-
ls -l /bin/sh
-
rm -v /bin/sh
-
ln -sv bash /bin/sh
-
-
ls -l /usr/bin/yacc
-
apt-get install bison
-
-
rm /usr/bin/awk
-
apt-get install gawk
-
ln -sv gawk /usr/bin/awk
在Debian-8.2宿主系统中检查结果如下:
-
bash, version 4.3.30(1)-release
-
/bin/sh -> /bin/bash
-
Binutils: (GNU Binutils for Debian) 2.25
-
bison (GNU Bison) 3.0.2
-
/usr/bin/yacc -> /usr/bin/bison.yacc
-
bzip2, Version 1.0.6, 6-Sept-2010.
-
Coreutils: 8.23
-
diff (GNU diffutils) 3.3
-
find (GNU findutils) 4.4.2
-
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
-
/usr/bin/awk -> /usr/bin/gawk
-
gcc (Debian 4.9.2-10) 4.9.2
-
g++ (Debian 4.9.2-10) 4.9.2
-
(Debian GLIBC 2.19-18+deb8u1) 2.19
-
grep (GNU grep) 2.20
-
gzip 1.6
-
Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09)
-
m4 (GNU M4) 1.4.17
-
GNU Make 4.0
-
GNU patch 2.7.5
-
Perl version='5.20.2';
-
sed (GNU sed) 4.2.2
-
tar (GNU tar) 1.27.1
-
makeinfo (GNU texinfo) 5.2
-
xz (XZ Utils) 5.1.0alpha
-
g++ compilation OK
3 检查库library-check.sh
二 编译LFS-7.8-Systemd
按手册一步一步认真做,英文看不明白请参考7.7的中文文档:
1 先了解一下编译LFS的基本过程:
a 准备工作,包括第二章、第三章、第四章,没有编译过LFS的人这几章一定详详细细认真看
b 构建工具链:第五章,build之前先编译了以下几个程序:
-
Binutils-2.25.1 - Pass 1 工具包,包括链接器ld、汇编器as
-
GCC-5.2.0 - Pass 1 C,C++编译器
-
Linux-4.2 API Headers 内核头文件
-
Glibc-2.22 GNU C库
-
Libstdc++-5.2.0 C++标准库
整个工具链以这几个程序为基础,所以宿主系统先将其编译一遍,为尽可能减少对宿主系统的依赖,再将Binutils和GCC以此为基础重新编译一遍,以重新编译之后的cc,ld,as开始建立必要的工具链。
c 以第五章建立起来的工具链,一步一步构建Linux系统,第六章的编译已经跟宿主系统没有什么关系了。
d 基本系统的一些必要配置
e 配置编译内核,安装GRUB启动LFS
2 分享一些经验
a 准备工作
如果是Linux新手,最好的建议是,认真按手册一步一步做好准备工作,在完成第五章的工具链编译之前,电脑不要关机,如果真的不幸断电或者因为其它原因中断了操作,请重新做以下准备工作:
以ROOT用户执行:
-
export LFS=/mnt/lfs
-
mount -v -t ext4 /dev/ $LFS
-
su - lfs
登录LFS用户,执行:
-
echo $LFS
-
echo $LC_ALL
-
echo $LFS_TGT
-
echo $PATH
如果跟4.4. Setting Up the Environment设置的环境变量值相同,则继续中断之前的工作
b 构建工具链
构建工具链特别要小心的就是几个基础程序的编译安装,以及编译之后的检查,手册中重要的检查用黄色惊叹号及醒目的提醒语Caution提示,一定要确保检查结果与手册列出的结果一致。
如果手工一个一个敲命令,请特别注意区别命令中的i和1、o和0,建议比较长的命令直接复制、粘贴更不容易出错。
c 第六章构建LFS系统
除了6.17 GCC-5.2.0之前的程序之外一般不做编译测试,太费时间了。Glibc测试失败,但错误与官方的测试结果几乎一样,GCC的测试与官方也大同小异,测试结果请看附件。
6.10与6.17的检查非常重要,如果输出与预期不一样,检查各个环节哪里出了问题,查不出问题建议重头再来。
d 基本系统的一些必要配置
复制-->粘贴
e 配置编译内核,安装GRUB启动LFS
最累人是内核配置,可以参考金步国先生的文章:
配置一遍需要4、5个小时,刚开始为了省事,直接按默认配置编译,启动时kernel panic,只好花了5个多小时认认真真配置一遍,不过现在比以前编译6.1的时候好些,可以拿着手机看详解、一边在电脑上对照着配置,第一遍配置之后有个kworker总是会输出信息到终端,网上搜了一通没解决,接着又配置了一遍才OK(网上百度好像有很多发行版安装之后都有kworker的问题,时不时的鼠标卡顿一下,Debian8.2就有这样的问题)。
如果编译的内核无法引导,进入宿主系统再次配置,再次Chroot时需要执行一遍6.2章节的准备虚拟内核文件系统
-
mount -v --bind /dev $LFS/dev
-
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
否则make mrproper时会发生段错误
GRUB建议安装在/分区的MBR即可,我的grub.cfg配置如下:
-
#Begin /boot/grub/grub.cfg
-
set default=0
-
set timout=3
-
-
set menu_color_normal=green/black
-
set menu_color_highlight=light-green/black
-
-
insmod ext4
-
set root=(hd0,1)
-
-
menuentry "GNU/Linux, Linux 4.2-lfs-7.8-systemd" {
-
linux /boot/vmlinuz-4.2-lfs-7.8-systemd root=/dev/sda1 ro
-
}
三 附一个编译好的工具链
链接: 密码:vdpy
阅读(2624) | 评论(0) | 转发(0) |