+ -
当前位置:首页 → 问答吧 → 关于安装LFS的几点疑问

关于安装LFS的几点疑问

时间:2009-01-21

来源:互联网

我是按照http://cross-lfs.org/view/svn/x86_64-64/ 安装的

按照手册进行到建立交叉编译环境 5.12 的时候glibc编译出错

聚焦深空 推荐的两个帖子

http://www.linuxsir.org/bbs/thread331921.html
http://www.linuxsir.org/bbs/thread326858.html

我发现他们在编译静态GCC的时候和官方手册上不一样
代码:
 make all-gcc
 make all-target-libgcc
 make install-gcc
 make install-target-libgcc
而且他们都先编译了glibc-header

而官方手册上只是
代码:
make && make install
也没有找到编译 glibc-header 的步骤

请问哪一种是标准的?

按照官方的手册做也会出错,我只能认为是我自己宿主的原因。。

毕竟每台机器的情况都不一样

请各位前辈推荐一个宿主系统

我的目标系统是 x86_64 Pure64 .宿主系统用什么版本的比较好?

我手头有Debian x86_64 arch x86_64 gentoo x86_64
三种光盘。。

作者: kimux   发布时间: 2009-01-21

引用:
作者: kimux
我是按照http://cross-lfs.org/view/svn/x86_64-64/ 安装的

按照手册进行到建立交叉编译环境 5.12 的时候glibc编译出错

聚焦深空 推荐的两个帖子

http://www.linuxsir.org/bbs/thread331921.html
http://www.linuxsir.org/bbs/thread326858.html

我发现他们在编译静态GCC的时候和官方手册上不一样
gcc4.2与gcc4.3是有区别的,4.3的libgcc在编译时独立了出来,不再放在gcc一起,所以命令有所改变。

引用:
作者: kimux
也没有找到编译 glibc-header 的步骤
CLFS手册中在编译gcc-static时加了两个参数--without-headers --with-newlib 使gcc不依赖于glibc-headers而使用'newlib'。

引用:
作者: kimux
而官方手册上只是
代码:
make && make install
请你看清楚,这是装kernel-headers的步骤,手册中已经去掉了glibc-headers的步骤。

引用:
作者: kimux
宿主系统用什么版本的比较好
请看这里:http://cross-lfs.org/view/svn/x86_64.../hostreqs.html
理论上来说host中只要装有这里列出的软件就能满足要求,但是这个页面写得似乎有些矛盾:

You should be able to build a CLFS system from just about any Unix-type operating system.
从这句话来看任何Unix-type的系统都能做host,可是
下面又要求需要Linux 2.6.22,不过这是最近加上的,是为了满足coreutils的要求,具体请看changelog。
我还是推荐用lfslivecd http://www.linuxfromscratch.org/livecd/download.html

作者: newper   发布时间: 2009-01-21

引用:
作者: newper
gcc4.2与gcc4.3是有区别的,4.3的libgcc在编译时独立了出来,不再放在gcc一起,所以命令有所改变。


CLFS手册中在编译gcc-static时加了两个参数--without-headers --with-newlib 使gcc不依赖于glibc-headers而使用'newlib'。
那就是说手册上的命令是错误的?

我的glibc编译过不去就是这个原因吧?EN。。这个不能乱猜,我下午试验一下


如果我编译glibc-headers ,就按照上面两个帖子的方法就可以了吧?
然后去掉这两个参数

作者: kimux   发布时间: 2009-01-21

引用:
作者: newper
请你看清楚,这是装kernel-headers的步骤,手册中已经去掉了glibc-headers的步骤。

http://cross-lfs.org/view/svn/x86_64...cc-static.html

这里用的就是make && make install 啊

作者: kimux   发布时间: 2009-01-21

引用:
作者: kimux
那就是说手册上的命令是错误的?

我的glibc编译过不去就是这个原因吧?EN。。这个不能乱猜,我下午试验一下


如果我编译glibc-headers ,就按照上面两个帖子的方法就可以了吧?
然后去掉这两个参数
CLFS手册上的命令是正确的,你两次编译glibc过不去都不是这个原因,第二次是我的问题(再次道歉),而第一次是因为lfs-6.4不支持64bit,不过最新的lfs-svn似乎可以(我没试过,也没仔细看,你也可以去看看)
http://www.linuxfromscratch.org/lfs/view/development/

http://www.linuxfromscratch.org/~jhu.../lfs-multilib/

作者: newper   发布时间: 2009-01-21

引用:
作者: newper
CLFS手册上的命令是正确的,你两次编译glibc过不去都不是这个原因,第二次是我的问题(再次道歉),而第一次是因为lfs-6.4不支持64bit,不过最新的lfs-svn似乎可以(我没试过,也没仔细看,你也可以去看看)
http://www.linuxfromscratch.org/lfs/view/development/

http://www.linuxfromscratch.org/~jhu.../lfs-multilib/
额。。。 不需要道歉的。。HEHE

学习阶段总要走点弯路

这两个地址我先研究一下。。

作者: kimux   发布时间: 2009-01-21

引用:
作者: newper
我还是推荐用lfslivecd http://www.linuxfromscratch.org/livecd/download.html
好吧

我听从你的建议,用LIVECD。。

没有空白CD了。。只好浪费一张DVD。

代码:
Official LFS LiveCD Documentation

Version: x86-6.3-r2160
PACKAGES

Available packages on this CD for your use:

 *

 Xorg (X Window System Environment)
 *

 Xfce desktop environment
 *

 Web Tools
 o wget (command line file retriever)
 o curl (command line file retriever)
 o lynx (text web browser)
 o w3m (text web browser)
 o irssi (console irc client)
 o seamonkey (graphical web browser, mail and news reader and irc client)
 o xchat (x-based irc client)
 o pidgin (multiprotocol x-based chat client)
 o finch (multiprotocol console chat client — works in UTF-8 locales only)
 o msmtp (SMTP client for use with mutt and tin)
 o mutt (console email client)
 o tin (console news reader)
 *

 Text Editors
 o vim
 o nano
 o joe
 *

 Network Tools
 o SSH server & client
 o NFS server & client
 o Samba server & client
 o Subversion
 o cvs
 o pppd
 o rp-pppoe
 o pptp client
 o dhcpcd
 o ncftp
 o traceroute
 o rsync
 *

 Filesystem Programs
 o e2fsprogs
 o reiserfsprogs
 o reiser4progs
 o xfsprogs
 o dosfstools
 o ntfsprogs
 o jfsutils
 *

 Debugging Programs
 o strace
 *

 Boot Loaders
 o grub
 o lilo
 *

 Other Programs
 o distcc
 o gpm (console mouse)
 o pciutils
 o mdadm
 o LVM2
 o dmraid
 o kpartx
 o hdparm
 o parted
 o xlockmore
看样子是支持LVM2的。。

作者: kimux   发布时间: 2009-01-21

你现在决定做哪个手册?

作者: newper   发布时间: 2009-01-21

引用:
作者: newper
你现在决定做哪个手册?
我决定老老实实的编译一遍LFS6.3

先掌握基本的东西。。

LFS6.3的手册和LFS6.2 有什么重大的改变吗?

我是不是可以按照LFS6.2的中文手册安装

作者: kimux   发布时间: 2009-01-21

6.2太老了,其实你用lfs-livecd去做CLFS-1.10 Pure64肯定没问题的

另外问一下你下的livecd是x86的还是x86_64的?

作者: newper   发布时间: 2009-01-21

引用:
作者: newper
6.2太老了,其实你用lfs-livecd去做CLFS-1.10 Pure64肯定没问题的

另外问一下你下的livecd是x86的还是x86_64的?
lfslivecd-x86_64-6.3-r2160.iso

查了一下论坛,准备在硬盘上挂载ISO,就不用刻盘了

。。。
如果照着CLFS-1.10 Pure64的话。。那就DOWN lfslivecd-x86_64-6.3-r2160-nosrc.iso

作者: kimux   发布时间: 2009-01-21

我编译glibc失败我认为是我下载的版本的问题。。

但是手册上给的下载地址根本就是错误的,那个目录里根本没有手册上说的版本。

我只好在红帽的PUB里DOWN了一个,是不是这个原因呢

作者: kimux   发布时间: 2009-01-21

记得x86_64的livecd里有一本手册的

作者: newper   发布时间: 2009-01-21

如果您用的手册是 http://cross-lfs.org/view/svn/x86_64-64/
请有选择参考偶给出的帖子,方法不同(主要是工具链部分):上面手册方法是 CLFS-1.x(类似 LFS),偶用的是CLFS-Sysroot。

另,CLFS-Sysroot 方式中 glibc-header 不是必须的,可简化,参看偶帖子里最后一帖(38楼),过一段时间整理一下。

您已经开始 CLFS,LFS 没必要的,看看即可。
相对来说,CLFS 方法更具一般性,LFS 可看成 CLFS 方法特例。

作者: 聚焦深空   发布时间: 2009-01-22

进行 CLFS ,个人建议宿主使用与目标系统不同的系统,可减少出问题概率。
等您熟悉后,进行伪交叉编译也是可以的。

比如,目标系统是 x86_64-unknown-linux-gnu,宿主可采用 i686-pc-linux-gnu,确保是进行真正的交叉编译,"native" 的两个手册是反例。

偶这里宿主用的是 debian etch i386。
CLFS 对宿主要求比 LFS 宽泛的多,您可以用 GNU/Linux、FreeBSD、*BSD、甚至是 M$ Windows,重要的是检测一下宿主系统基本需求是否满足。(相对您使用的手册 http://cross-lfs.org/view/svn/x86_64.../hostreqs.html)

作者: 聚焦深空   发布时间: 2009-01-22

引用:
作者: 聚焦深空
(相对您使用的手册 http://cross-lfs.org/view/svn/x86_64.../hostreqs.html)
可是这一页上写着Linux 2.6.22,changelog中说是为了满足coreutils的要求。
或许是说用Linux的话要用2.6.22以上,而用其他类Unix系统就无关,不然的话,CLFS就有局限性了


另外想请教一个问题,编译静态的gcc时不会生成libgcc_eh.a这个库,而编译glibc却需要它,所以CLFS用了一个补丁让glibc不去找这个库,可是clfs-sysroot只编译了一遍glibc,也就没有链接到这个库,这样glibc会不会因为缺了这个库丧失了某些功能而在日后使用中出现问题?

作者: newper   发布时间: 2009-01-22

引用:
作者: newper
可是这一页上写着Linux 2.6.22,changelog中说是为了满足coreutils的要求。
看到您提的 changlog,这个不说明什么的,coreutils 并不是唯一选择,Linux-kernel 也不是唯一的选择。
http://www.freebsdsoftware.org/sysutils/coreutils.html

这个只是 svn 的开发版,没必要这么教条。

吼吼,看来您发现了一个 bug,您可以报告给 CLFS 官方。
请您参考一下稳定版 CLFS-1.1.0 相应页面没有 linux-kernel 的要求。

引用:
作者: newper
另外想请教一个问题,编译静态的gcc时不会生成libgcc_eh.a这个库,而编译glibc却需要它,所以CLFS用了一个补丁让glibc不去找这个库,可是clfs-sysroot只编译了一遍glibc,也就没有链接到这个库,这样glibc会不会因为缺了这个库丧失了某些功能而在日后使用中出现问题?
这个不是问题,非常时期非常做法罢了。
您要是不放心,可以在建立工具链阶段多编译一遍 glibc。
偶的做法是:用临时系统启动机器后,建立基本系统时,本地编译一遍工具链,包括 glibc,本地编译一遍交叉编译的各个软件包。
嵌入式环境下就不一定有这样的便利了。

请参考一下
http://www.diy-linux.org/pipermail/d...ne/000556.html

作者: 聚焦深空   发布时间: 2009-01-22

已经开始了

硬盘启动的LIVECD 6,3 用的是这个手册

http://cross-lfs.org/view/1.1.0/x86_64-64/

进行到第6.5节的时候 http://cross-lfs.org/view/1.1.0/x86_...m/ncurses.html

make install Ncurses 的时候,停在这个画面。。用TOP查看,一个tic程序占用100%的CPU
我没有找到Ncurses5.6的下载,用的是Ncurses5.7

srcdir=. \
datadir=/tools/share \
ticdir=/tools/share/terminfo \
source=terminfo.tmp \
THIS_CC="x86_64-unknown-linux-gnu-gcc -m64" \
THAT_CC="gcc" \
/bin/sh ./run_tic.sh
** Building terminfo database, please wait...
Running tic to install /tools/share/terminfo ...

You may see messages regarding extended capabilities, e.g., AX.
These are extended terminal capabilities which are compiled
using
tic -x
If you have ncurses 4.2 applications, you should read the INSTALL
document, and install the terminfo without the -x option.


我看了半天INSTALL。。 英文太差,看不明白

作者: kimux   发布时间: 2009-01-22

您遇到的问题满奇怪的,建议先检查一下前面的步骤。
特别是看看有没有安装路径、环境变量、补丁与手册不一致的地方。

另,貌似有的 livecd 上有 sourcecode。

作者: 聚焦深空   发布时间: 2009-01-22

引用:
作者: 聚焦深空
您遇到的问题满奇怪的,建议先检查一下前面的步骤。
特别是看看有没有安装路径、环境变量、补丁与手册不一致的地方。

另,貌似有的 livecd 上有 sourcecode。

我下载的是nosrc的LIVECD..

我找个5.6版本的再试一下

作者: kimux   发布时间: 2009-01-22

偶暂时也无法确定您的问题所在。
livecd下载后,您有没有校验?

Ncurses-5.7 的补丁可以用一下 svn 的。
http://cross-lfs.org/view/svn/x86_64...m/ncurses.html
http://svn.cross-lfs.org/svn/repos/c...update-5.patch

作者: 聚焦深空   发布时间: 2009-01-22

引用:
作者: 聚焦深空
偶暂时也无法确定您的问题所在。
livecd下载后,您有没有校验?

Ncurses-5.7 的补丁可以用一下 svn 的。
http://cross-lfs.org/view/svn/x86_64...m/ncurses.html
http://svn.cross-lfs.org/svn/repos/c...update-5.patch
我用的就是SVN的5.7 ..

全部文件下载后 都校验过

作者: kimux   发布时间: 2009-01-22

http://www.mail-archive.com/clfs-sup.../msg01051.html
这个与您的情况类似 CLFS-1.0.0 的,解决方法偶认为是错误的。
这个是 伪交叉编译 的情况,x86_64-cross-linux-gnu -> x86_64-unknown-linux-gnu。
希望您不是这种情况,您使用的是 for i386 的 livecd 吗?

下面也是类似的情况 非CLFS
http://www.mailinglistarchive.com/lf.../msg26751.html
http://www.linuxsir.org/bbs/lastpostinthread310154.html

作者: 聚焦深空   发布时间: 2009-01-22

我注意到svn的手册在cross-tools部分编译了一次tic不知与此有无关系,另外请问您有没有打5.7的bash-fix补丁?

作者: newper   发布时间: 2009-01-22

引用:
作者: 聚焦深空
http://www.mail-archive.com/clfs-sup.../msg01051.html
这个与您的情况类似 CLFS-1.0.0 的,解决方法偶认为是错误的。
这个是 伪交叉编译 的情况,x86_64-cross-linux-gnu -> x86_64-unknown-linux-gnu。
希望您不是这种情况,您使用的是 for i386 的 livecd 吗?

下面也是类似的情况 非CLFS
http://www.mailinglistarchive.com/lf.../msg26751.html
http://www.linuxsir.org/bbs/lastpostinthread310154.html
我的情况有些不一样

没有任何错误提示,光标停留在最后一行 ,CPU 100%

OK,5.6通过

作者: kimux   发布时间: 2009-01-22

引用:
作者: newper
我注意到svn的手册在cross-tools部分编译了一次tic不知与此有无关系,另外请问您有没有打5.7的bash-fix补丁?
有打5.7的bash-fix补丁..

换成ncurses5.6通过

作者: kimux   发布时间: 2009-01-22

提醒一下:您做Pure64的话grub-0.97就不能用了,CLFS手册上用的是lilo,如果您对lilo不熟,再加上您的livecd是硬盘启动,如果lilo配置错误,那么可能需要找张livecd去修改。

作者: newper   发布时间: 2009-01-22

引用:
作者: newper
提醒一下:您做Pure64的话grub-0.97就不能用了,CLFS手册上用的是lilo,如果您对lilo不熟,再加上您的livecd是硬盘启动,如果lilo配置错误,那么可能需要找张livecd去修改。
THX

我手里有SYSTEM的LIVECD

作者: kimux   发布时间: 2009-01-22

引用:
作者: 聚焦深空
http://www.mail-archive.com/clfs-sup.../msg01051.html
这个与您的情况类似 CLFS-1.0.0 的,解决方法偶认为是错误的。
这个是 伪交叉编译 的情况,x86_64-cross-linux-gnu -> x86_64-unknown-linux-gnu。
希望您不是这种情况,您使用的是 for i386 的 livecd 吗?
他用的就是x86_64的livecd(他前面说的)
看来伪交叉编译确实会出很多问题,可是diy-linux早就开始用这种方法,lfs-svn也引入了diy-linux的方法,CLFS也弄出个CLFS-native。而这些手册现在都是cvs/svn版,到以后正式版了或许会有一大堆patch/sed命令,还要设定LDFLAGS,累啊……

当初clfs-sysroot刚开始时也是这样,几乎编译一个软件就要打一个补丁,现在好些了

作者: newper   发布时间: 2009-01-22