yacc+编译+linux,好久没有用Linux了,重新用Debian8编译了一遍LFS-7.8-systemd

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值