QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4461|回复: 26

开始认真地从LFS 6.4 一步一步地编译当中

[复制链接]
发表于 2009-1-23 14:17:02 | 显示全部楼层 |阅读模式
有朋友开始提出MGC3.0的构想,而且有人已经投入到系统编译当中,我了解到他们就是基于LFS 6.4 去构建的。LFS 6.4 正式版本出来了,GCC版本是4.3.2,这里有莫大的好处就是编译不会遇到补丁问题,什么都提供给你了,余下的英文档案慢慢去理解,然后就是一串串的编译字符向上跳动。
MGC2.5的基础系统我也安装过了, 最大的困惑就是源码包的确和真实编译有差距,以前的spec档中太多的%exclude,造成了一堆垢病,RPM体系对补丁要求级别过高,而补丁却并没有按这样的标准进行,准确地说2.5的基础系统没有调整好。不管怎样,或许必然的过程,我需要了解一下整个linux完整的拼装工艺。。。。

[ 本帖最后由 haulm 于 2009-1-23 14:18 编辑 ]
发表于 2009-1-23 15:54:54 | 显示全部楼层
自虐……
我建议是给当前的 ML 升级 gcc + glibc + binutils 等,之后再升级其他软件(尽可能减少系统里面的软件,比如删掉 KDE 什么的。这个时候如果曾经整理了包之间的依赖关系分类就特别方便了)。全都升级完成后,重新再 编译安装一遍,之后把编译好的 rpm 作为启动环境分发,大家继续后续工作。
回复

使用道具 举报

发表于 2009-1-23 21:57:54 | 显示全部楼层
支持haulm
希望可以早日用上MGC3.0
回复

使用道具 举报

 楼主| 发表于 2009-1-24 00:41:45 | 显示全部楼层
原帖由 jiangtao9999 于 2009-1-23 15:54 发表
自虐……
我建议是给当前的 ML 升级 gcc + glibc + binutils 等,之后再升级其他软件(尽可能减少系统里面的软件,比如删掉 KDE 什么的。这个时候如果曾经整理了包之间的依赖关系分类就特别方便了)。全都升级完成后,重新再  ...

MGC的源码包存在太多问题,这使我想起以前某位兄台对MGC严厉的批评,以致于为了唯护MGC的一场争吵,MGC的源码包的的确确不怎么样,而且源码的管理非常不科学。
我不过想实现一个基本系统,并无意要独立完成一个桌面系统,当然如果我LFS成功,很可能会考虑去慢慢整理MGC的重要源码。

[ 本帖最后由 haulm 于 2009-1-24 00:43 编辑 ]
回复

使用道具 举报

发表于 2009-1-24 10:13:10 | 显示全部楼层
原帖由 haulm 于 2009-1-24 12:41 AM 发表

MGC的源码包存在太多问题,这使我想起以前某位兄台对MGC严厉的批评,以致于为了唯护MGC的一场争吵,MGC的源码包的的确确不怎么样,而且源码的管理非常不科学。
我不过想实现一个基本系统,并无意要独立完成一个桌面系统,当然如 ...

LFS 过,结果就是发现,ML的依赖关系足够你用 LFS 完全安装一个系统了。
rpm 没有自动依赖识别,也没有关闭依赖环境未满足编译参数的功能。这一点很郁闷。
而且 ML 也没有分类整理依赖树,弄得很难确定 rpm 环境怎样搭建才能完成一个最简化环境。

所以我的建议是 2.1 --> 升级编译环境 -> 2.5 -> 重新编译系统(其实就是更新一下所有程序的代码生成环境,相信 gcc + glibc 兼容的话,可以略过)-> 升级到最新的软件包 -> 重新编译整个系统 (这一步应该最为发布系统的最后一步必要环节,自己用不是必须的)

这样可以解决很多 srpm 的问题。主要还是编译依赖环境。Gentoo 的  USE 变量,我觉得能很好的解决功能依赖问题。但 rpm 系统没有。
我还有一种办法是 Gentoo 一个和 ML 软件包&功能完全相同的系统,之后装上 rpm 。开始编译 srpm。

Gentoo 的编译很自动,比 LFS 轻松不少的。
回复

使用道具 举报

发表于 2009-1-24 10:17:17 | 显示全部楼层
PS:可以参考我以前发的一个帖子,一个精简的 chroot 编译环境需要 rpm 的列表。但这个是 rpm 的,不是 srpm 的。srpm 编译环境可以追到 GTK2 环境。

只能修改 srpm 的 spec 解决,但许多 spec 很长,比如 gcc 的 spec 几乎成了 unreadable 。
这很难实现维护一个基础环境的。
回复

使用道具 举报

发表于 2009-1-24 17:27:23 | 显示全部楼层
呵呵,如果实现类似gentoo的依赖,那需要仔细的整理spec,也可以只从源码开始的。不过基于rpm的系统,一般的升级都是上面jiangtao说的那种吧。完全从零开始,只有第一个版本才需要,比如我给2e移植的magic,就是从零开始的,非常痛苦,好多bug。
回复

使用道具 举报

 楼主| 发表于 2009-1-28 22:28:40 | 显示全部楼层
原帖由 sejishikong 于 2009-1-24 17:27 发表
呵呵,如果实现类似gentoo的依赖,那需要仔细的整理spec,也可以只从源码开始的。不过基于rpm的系统,一般的升级都是上面jiangtao说的那种吧。完全从零开始,只有第一个版本才需要,比如我给2e移植的magic,就是从零开始的,非常痛苦 ...

比较懒,这么久了只编译完工具链和基本工具,现在可以按照LFS的编译参数和补丁打rpm包制做新的系统了,可以用rpm5进行打包了,但如果想做成一个能用MI进行安装的基本系统还差得远了,很多时候我被困难吓倒了。
回复

使用道具 举报

 楼主| 发表于 2009-1-28 22:41:52 | 显示全部楼层
现在对系统编译的理解会清晰一点,利用MGC或别的Linux系统为母系统编译出GCC+GLIBC+BINUTILS的新版本,然后用新版本的编译器重新编译其本身,使得工具链及它编译的组件能完全脱离旧版本的工具链的习惯,然后基于母系统编译所有可能在编译新系统所要利用到的工具集,新系统的编译需要三次编译GCC+GLIBC+BINUTILS。如果编译RPM工具还要往/tools/tools目录中编译进以下几个东西
beecrypt-4.1.2.tar.gz
popt-1.14.tar.gz
rpm-5.1.6.tar.gz
zlib-1.2.3.tar.bz2
然后chroot虚拟/tools目录为根目录/,进行一些设置使得所有的编译通过/tools/tools下面进行,创建所有的设备目录、帐号目录、账号、用户组、系统目录,进行新一轮的系统编译,所有的编译将只利用到/tools下的工具集和编译器,编译安装位置换成/usr,生成rpm包集和启动脚本包,最后用现成的MI进行安装,至于MI对rpm包的安装可能还需要一些组件,不仅仅是scons和python<2.6,这个就要se兄指点一下了。

[ 本帖最后由 haulm 于 2009-1-28 22:46 编辑 ]
回复

使用道具 举报

发表于 2009-1-28 23:22:03 | 显示全部楼层
楼上,你要是这么弄,你至少要装到 GTK2 环境才能重新直接编译 gcc 的 srpm 。
不然 ML 就要永远的和 gjc 说再见了。

所以别再考虑 LFS 一个新的 ML 了。
这条道我走过……走的想吐……

PS:你可以选择 srpm 编译时忽略 rpm 依赖,这样部分 srpm 其实还是可以编译过去的。
主要还是依赖关系写的太死了。
回复

使用道具 举报

 楼主| 发表于 2009-1-29 05:34:29 | 显示全部楼层
原帖由 jiangtao9999 于 2009-1-28 23:22 发表
楼上,你要是这么弄,你至少要装到 GTK2 环境才能重新直接编译 gcc 的 srpm 。
不然 ML 就要永远的和 gjc 说再见了。

所以别再考虑 LFS 一个新的 ML 了。
这条道我走过……走的想吐……

PS:你可以选择  ...

不会啊,我已经编译好rpm这个组件了,余下的就是按LFS重新打包组件,至于GTK2的编译到时再看了,先建立一个能独立启动没有X的基础系统。MI和系统没有太多关系。
回复

使用道具 举报

 楼主| 发表于 2009-1-29 06:32:30 | 显示全部楼层
尝试将LFS工具链完成后编译全新系统的过程打包,步骤一打包kernel-header尝试
root:/opt# rpmbuild -ba kernel-head.spec
sh: line 0: fg: no job control
Executing(%prep): /bin/sh -e /tools/var/tmp/rpm-tmp.92430
+ umask 022
+ cd /tools/src/rpm/BUILD
+ rm -rf linux-2.6.27.4
+ /tools/bin/bzip2 -dc /tools/src/rpm/SOURCES/linux-2.6.27.4.tar.bz2
+ /tools/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd linux-2.6.27.4
+ exit 0
Executing(%build): /bin/sh -e /tools/var/tmp/rpm-tmp.36707
+ umask 022
+ cd /tools/src/rpm/BUILD
+ cd linux-2.6.27.4
+ make mrproper
+ make headers_check
........
Processing files: kernel-header-2.6.27.4-lfs.i686
Checking for unpackaged file(s): /tools/lib/rpm/check-files /tools/var/tmp/kernel-header-root
warning: Could not canonicalize hostname: haulmtf
Wrote: /tools/src/rpm/SRPMS/kernel-header-2.6.27.4-lfs.src.rpm
Wrote: /tools/src/rpm/RPMS/i686/kernel-header-2.6.27.4-lfs.i686.rpm
Executing(%clean): /bin/sh -e /tools/var/tmp/rpm-tmp.63614
+ umask 022
+ cd /tools/src/rpm/BUILD
+ cd linux-2.6.27.4
+ /tools/bin/rm -rf /tools/var/tmp/kernel-header-root

这时候的rpm包还不能被安装,出现以下类似的提示
error: Failed dependencies:
        / is needed by kernel-header-2.6.27.4-lfs.i686
        / is needed by man-pages-3.11-lfs.i686
难道要定义成无依赖的?大概要等整个工具链第三次打包完成后才能有正确的依赖。不知何故,没有编译出rpmdb这个东西,哪里短少了组件呢。

rpm -ivh kernel-header-2.6.27.4-lfs.i686.rpm --nodeps
Preparing...                                                 ########################################### [100%]
   1:kernel-header                                           ########################################### [100%]
root:/tools/src/rpm/RPMS/i686# rpm -qa
kernel-header-2.6.27.4-lfs.i686

依赖不满足,所以先用nodeps参数安装了,究其原因可能是因为的确不在真实的根目录/下进行,所以会有这种现象,rpm5也许没有了rpmdb这个指令,还不确定,在母系统中可以安装也证实了这点,因为安装造成了两个不同版本的man-pages同时存在。
[root@haulmtf i686]# rpm -ivh man-pages-3.11-lfs.i686.rpm
Preparing...                                                 ########################################### [100%]
   1:man-pages                                               ########################################### [100%]
[root@haulmtf i686]# rpm -e man-pages
error: "man-pages" specifies multiple packages

[ 本帖最后由 haulm 于 2009-1-29 09:11 编辑 ]
回复

使用道具 举报

发表于 2009-1-29 10:57:53 | 显示全部楼层
可以加一个参数忽略依赖进行编译。
好像也是 --nodeps
回复

使用道具 举报

 楼主| 发表于 2009-1-29 11:01:54 | 显示全部楼层
原帖由 jiangtao9999 于 2009-1-29 10:57 发表
可以加一个参数忽略依赖进行编译。
好像也是 --nodeps

没必要吧,依赖只是/,最后完成编译后就不需要chroot了,再说之所以打rpm包就是要有依赖关系,所以无所谓了。
回复

使用道具 举报

发表于 2009-1-29 11:25:36 | 显示全部楼层
呃,看错了。
以为是编译时候出的问题。
这个 rpm 没什么,后面才郁闷呢。依赖是绕圈的,不加这个参数你连最基本的编译环境 rpm 都完成不了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-27 03:05 , Processed in 0.049261 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表