Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107009
  • 博文数量: 6
  • 博客积分: 1527
  • 博客等级: 上尉
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-12 21:41
文章分类

全部博文(6)

文章存档

2016年(1)

2015年(1)

2012年(1)

2011年(1)

2010年(1)

2006年(1)

我的朋友

分类: LINUX

2015-12-25 20:32:21

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目录


点击(此处)折叠或打开

  1. mount -o loop debian-8.2.0-amd64-DVD-1.iso /mnt/cdrom


b 编辑/etc/apt/sources.list,增加一行:


点击(此处)折叠或打开

  1. deb file:///mnt/cdrom/ jessie main
然后执行apt-get update更新一下


c 安装开发工具,使用命令

点击(此处)折叠或打开

  1. apt-get install build-essential


2 检查宿主系统的软件版本./version-check.sh,认真逐一核对是否符合要求。

点击(此处)折叠或打开

  1. ls -l /bin/sh
  2. rm -v /bin/sh
  3. ln -sv bash /bin/sh
  4. ls -l /usr/bin/yacc
  5. apt-get install bison
  6. rm /usr/bin/awk
  7. apt-get install gawk
  8. ln -sv gawk /usr/bin/awk

在Debian-8.2宿主系统中检查结果如下:

点击(此处)折叠或打开

  1. bash, version 4.3.30(1)-release
  2. /bin/sh -> /bin/bash
  3. Binutils: (GNU Binutils for Debian) 2.25
  4. bison (GNU Bison) 3.0.2
  5. /usr/bin/yacc -> /usr/bin/bison.yacc
  6. bzip2, Version 1.0.6, 6-Sept-2010.
  7. Coreutils: 8.23
  8. diff (GNU diffutils) 3.3
  9. find (GNU findutils) 4.4.2
  10. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
  11. /usr/bin/awk -> /usr/bin/gawk
  12. gcc (Debian 4.9.2-10) 4.9.2
  13. g++ (Debian 4.9.2-10) 4.9.2
  14. (Debian GLIBC 2.19-18+deb8u1) 2.19
  15. grep (GNU grep) 2.20
  16. gzip 1.6
  17. 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)
  18. m4 (GNU M4) 1.4.17
  19. GNU Make 4.0
  20. GNU patch 2.7.5
  21. Perl version='5.20.2';
  22. sed (GNU sed) 4.2.2
  23. tar (GNU tar) 1.27.1
  24. makeinfo (GNU texinfo) 5.2
  25. xz (XZ Utils) 5.1.0alpha
  26. g++ compilation OK

3 检查库library-check.sh



二 编译LFS-7.8-Systemd


按手册一步一步认真做,英文看不明白请参考7.7的中文文档:

1 先了解一下编译LFS的基本过程:


a 准备工作,包括第二章、第三章、第四章,没有编译过LFS的人这几章一定详详细细认真看

b 构建工具链:第五章,build之前先编译了以下几个程序:

点击(此处)折叠或打开

  1. Binutils-2.25.1 - Pass 1 工具包,包括链接器ld、汇编器as
  2. GCC-5.2.0 - Pass 1 C,C++编译器
  3. Linux-4.2 API Headers 内核头文件
  4. Glibc-2.22 GNU C库
  5. Libstdc++-5.2.0 C++标准库
整个工具链以这几个程序为基础,所以宿主系统先将其编译一遍,为尽可能减少对宿主系统的依赖,再将Binutils和GCC以此为基础重新编译一遍,以重新编译之后的cc,ld,as开始建立必要的工具链。


c 以第五章建立起来的工具链,一步一步构建Linux系统,第六章的编译已经跟宿主系统没有什么关系了。

d 基本系统的一些必要配置

e 配置编译内核,安装GRUB启动LFS


2 分享一些经验


a 准备工作

如果是Linux新手,最好的建议是,认真按手册一步一步做好准备工作,在完成第五章的工具链编译之前,电脑不要关机,如果真的不幸断电或者因为其它原因中断了操作,请重新做以下准备工作:

以ROOT用户执行:

点击(此处)折叠或打开

  1. export LFS=/mnt/lfs
  2. mount -v -t ext4 /dev/ $LFS
  3. su - lfs

登录LFS用户,执行:

点击(此处)折叠或打开

  1. echo $LFS
  2. echo $LC_ALL
  3. echo $LFS_TGT
  4. 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章节的准备虚拟内核文件系统

点击(此处)折叠或打开

  1. mount -v --bind /dev $LFS/dev
  2. mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
  3. mount -vt proc proc $LFS/proc
  4. mount -vt sysfs sysfs $LFS/sys
  5. mount -vt tmpfs tmpfs $LFS/run


否则make mrproper时会发生段错误

GRUB建议安装在/分区的MBR即可,我的grub.cfg配置如下:

点击(此处)折叠或打开

  1. #Begin /boot/grub/grub.cfg
  2. set default=0
  3. set timout=3
  4. set menu_color_normal=green/black
  5. set menu_color_highlight=light-green/black
  6. insmod ext4
  7. set root=(hd0,1)
  8. menuentry "GNU/Linux, Linux 4.2-lfs-7.8-systemd" {
  9. linux /boot/vmlinuz-4.2-lfs-7.8-systemd root=/dev/sda1 ro
  10. }

三 附一个编译好的工具链

链接: 密码:vdpy


阅读(2624) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~