开始认真地从LFS 6.4 一步一步地编译当中
有朋友开始提出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 编辑 ] 自虐……
我建议是给当前的 ML 升级 gcc + glibc + binutils 等,之后再升级其他软件(尽可能减少系统里面的软件,比如删掉 KDE 什么的。这个时候如果曾经整理了包之间的依赖关系分类就特别方便了)。全都升级完成后,重新再 编译安装一遍,之后把编译好的 rpm 作为启动环境分发,大家继续后续工作。 支持haulm
希望可以早日用上MGC3.0:mrgreen: 原帖由 jiangtao9999 于 2009-1-23 15:54 发表 http://www.linuxfans.org/bbs/images/common/back.gif
自虐……
我建议是给当前的 ML 升级 gcc + glibc + binutils 等,之后再升级其他软件(尽可能减少系统里面的软件,比如删掉 KDE 什么的。这个时候如果曾经整理了包之间的依赖关系分类就特别方便了)。全都升级完成后,重新再...
MGC的源码包存在太多问题,这使我想起以前某位兄台对MGC严厉的批评,以致于为了唯护MGC的一场争吵,MGC的源码包的的确确不怎么样,而且源码的管理非常不科学。
我不过想实现一个基本系统,并无意要独立完成一个桌面系统,当然如果我LFS成功,很可能会考虑去慢慢整理MGC的重要源码。
[ 本帖最后由 haulm 于 2009-1-24 00:43 编辑 ] 原帖由 haulm 于 2009-1-24 12:41 AM 发表 http://www.linuxfans.org/bbs/images/common/back.gif
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 轻松不少的。 PS:可以参考我以前发的一个帖子,一个精简的 chroot 编译环境需要 rpm 的列表。但这个是 rpm 的,不是 srpm 的。srpm 编译环境可以追到 GTK2 环境。
:shock:
只能修改 srpm 的 spec 解决,但许多 spec 很长,比如 gcc 的 spec 几乎成了 unreadable 。:roll:
这很难实现维护一个基础环境的。 呵呵,如果实现类似gentoo的依赖,那需要仔细的整理spec,也可以只从源码开始的。不过基于rpm的系统,一般的升级都是上面jiangtao说的那种吧。完全从零开始,只有第一个版本才需要,比如我给2e移植的magic,就是从零开始的,非常痛苦,好多bug。 原帖由 sejishikong 于 2009-1-24 17:27 发表 http://www.linuxfans.org/bbs/images/common/back.gif
呵呵,如果实现类似gentoo的依赖,那需要仔细的整理spec,也可以只从源码开始的。不过基于rpm的系统,一般的升级都是上面jiangtao说的那种吧。完全从零开始,只有第一个版本才需要,比如我给2e移植的magic,就是从零开始的,非常痛苦 ...
比较懒,这么久了只编译完工具链和基本工具,现在可以按照LFS的编译参数和补丁打rpm包制做新的系统了,可以用rpm5进行打包了,但如果想做成一个能用MI进行安装的基本系统还差得远了,很多时候我被困难吓倒了。 现在对系统编译的理解会清晰一点,利用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 编辑 ] 楼上,你要是这么弄,你至少要装到 GTK2 环境才能重新直接编译 gcc 的 srpm 。:shock:
不然 ML 就要永远的和 gjc 说再见了。
:shock:
所以别再考虑 LFS 一个新的 ML 了。
这条道我走过……走的想吐……
PS:你可以选择 srpm 编译时忽略 rpm 依赖,这样部分 srpm 其实还是可以编译过去的。
主要还是依赖关系写的太死了。 原帖由 jiangtao9999 于 2009-1-28 23:22 发表 http://www.linuxfans.org/bbs/images/common/back.gif
楼上,你要是这么弄,你至少要装到 GTK2 环境才能重新直接编译 gcc 的 srpm 。:shock:
不然 ML 就要永远的和 gjc 说再见了。
:shock:
所以别再考虑 LFS 一个新的 ML 了。
这条道我走过……走的想吐……
PS:你可以选择...
不会啊,我已经编译好rpm这个组件了,余下的就是按LFS重新打包组件,至于GTK2的编译到时再看了,先建立一个能独立启动没有X的基础系统。MI和系统没有太多关系。 尝试将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... ###########################################
1:kernel-header ###########################################
root:/tools/src/rpm/RPMS/i686# rpm -qa
kernel-header-2.6.27.4-lfs.i686
依赖不满足,所以先用nodeps参数安装了,究其原因可能是因为的确不在真实的根目录/下进行,所以会有这种现象,rpm5也许没有了rpmdb这个指令,还不确定,在母系统中可以安装也证实了这点,因为安装造成了两个不同版本的man-pages同时存在。
# rpm -ivh man-pages-3.11-lfs.i686.rpm
Preparing... ###########################################
1:man-pages ###########################################
# rpm -e man-pages
error: "man-pages" specifies multiple packages
[ 本帖最后由 haulm 于 2009-1-29 09:11 编辑 ] 可以加一个参数忽略依赖进行编译。
好像也是 --nodeps 原帖由 jiangtao9999 于 2009-1-29 10:57 发表 http://www.linuxfans.org/bbs/images/common/back.gif
可以加一个参数忽略依赖进行编译。
好像也是 --nodeps
没必要吧,依赖只是/,最后完成编译后就不需要chroot了,再说之所以打rpm包就是要有依赖关系,所以无所谓了。 呃,看错了。
以为是编译时候出的问题。
这个 rpm 没什么,后面才郁闷呢。依赖是绕圈的,不加这个参数你连最基本的编译环境 rpm 都完成不了。
页:
[1]
2