centos5
lfs6.2
[url]http://www.linuxfromscratch.org/[/url]
下个180M的包就可以开工了。
参考材料:Linux From Scratch(CN).CHM
[url]http://lamp.linux.gov.cn/Linux/LFS-6.2/[/url]
[url]http://www.linuxfromscratch.org/lfs/view/6.2/index.html[/url]
################################################################################
mke2fs -jv /dev/sda3
debugfs -R feature /dev/sda3
//has_joural, dir_index, filetype, large_file, resize_inode, sparse_super
export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext3 /dev/sda3 $LFS
mount
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
mkdir -v $LFS/tools
ln -sv $LFS/tools /
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
tar xvf lfs.tar -C $LFS/sources/
su - lfs
一下内容都用lfs用户
################################################################################
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF
source ~/.bash_profile
################################################################################
cd $LFS/sources
tar -xvjf $LFS/sources/binutils-2.16.1.tar.bz2
cd $LFS/sources/binutils-2.16.1/
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.16.1/configure --prefix=/tools --disable-nls
make
make install
make -C ld clean
make -C ld LIB_PATH=/tools/lib
********************************************************************************
编译报错
/tools/bin/ld: unrecognized option '--hash-style=gnu'
/tools/bin/ld: use the --help option for usage information
collect2: ld returned 1 exit status
make[2]: *** [ld-new] Error 1
make[2]: Leaving directory `/mnt/lfs/sources/binutils-build/ld'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/mnt/lfs/sources/binutils-build/ld'
make: *** [all-recursive-am] Error 2
make: Leaving directory `/mnt/lfs/sources/binutils-build/ld'
解决方法:
1、  make -C ld LIB_PATH=/tools/lib CC="gcc -B/usr/bin/"
2、发现CENT5的binutils的版本太新,使用了新的特性--hash-style。由于当前的binutils不支持这个特性导致
binutils版本太老换2.6.17.50-06就可以了(没时间去试,我用第一个方法)
********************************************************************************
cp -v ld/ld-new /tools/bin
rm -fr $LFS/sources/binutils-2.16.1/
rm -fr $LFS/sources/binutils-build/
################################################################################

GCC第一遍编译
source
mkdir –v ./gcc-build
cd gcc-buildlr
../gcc-4.0.3/configure --prefix=/tools \
--with-local-prefix=/tools --disable-nls --enable-shared \
--enable-languages=c
********************************************************************************
问题:
c complier cannot create executables
解决方法:
CC="gcc -B/usr/bin/" ../gcc-4.1.2/configure --prefix=/tools \
    --with-local-prefix=/tools --disable-nls --enable-shared \
    --enable-languages=c
最后还得看看英文手册吧,最后看看前面两处错误都是因为中文手册中少写了一些东西。-.-!!!
跟我一样懒
********************************************************************************
make bootstrap
make install
ln –vs gcc /tools/bin/cc
rm -fr gcc-4.0.3
rm -fr gcc-build
********************************************************************************
ln –vs gcc /tools/bin/cc   是将/tools/bin/cc 连接到gcc
但是删除gcc-build后查看
ls -al /tools/bin|grep cc
lrwxrwxrwx 1 lfs lfs  3 Oct 6 16:38 cc->gcc
是个问题哈!!!
################################################################################
安装 Linux-Libc-Headers
包含了"纯净的"内核头文件。
使用 /usr/include
cp -Rv asm /tools/include/asm
cp -Rv linux /tools/include
********************************************************************************
如果您的机器不是 i386 兼容架构的,请相应的调整第一条命令。
看到上面那句话没啥感想,只是把cp -Rv include/asm-i386 /tools/include/asm中的i386去掉
编译下一个文件怎么也过不去,老是缺文件,加不加要看自己的操作系统了,本人centos5.0
cp -Rv asm-generic /tools/include/asm-generic
################################################################################
安装 Glibc
包含了主要的C库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件
、读写文件、字串处理、模式匹配、数学计算等等。
../glibc-2.3.6/configure --prefix=/tools \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.0 --with-binutils=/tools/bin \
    --without-gd --with-headers=/tools/include \
    --without-selinux
make
make check
********************************************************************************
我的就是nptl报错,没有给出解决方案,可能VM配置太低了。
posix/annexc 中,你可能会看到一个预料的错误(可以忽略)。另外,Glibc测试单元,多少依赖于宿主系统。
下面是一些常见的错误:
nptl/tst-clock2 和tst-attr3 测试有时会出错。 原因现在还不是很明白,可能是系统负载过重导致的。
math 测试在一些使用较老的 Intel 或 AMD 的系统上会失败,某些优化设置也会导致该测试失败。
atime 会在使用noatime 选项挂载 LFS 分区时失败(参见节 2.4, "挂载新分区"),在编译LFS过程中不要使用noatime 选项。
在一些很老很慢的机器上,一些测试会由于超时而失败。
********************************************************************************
mkdir -v /tools/etc
touch /tools/etc/ld.so.conf
make install
################################################################################
调整工具链
mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &&
gcc -dumpspecs > $SPECFILE &&
sed 's@^/lib/ld-linux.so.2@/tools&@g' $SPECFILE > tempspecfile &&
mv -vf tempspecfile $SPECFILE &&
unset SPECFILE
specs 文件,只要把所有的"/lib/ld-linux.so.2"都替换成"/tools/lib/ld-linux.so.2"就行了。
GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &&
find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &&
rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &&
unset GCC_INCLUDEDIR
********************************************************************************
测试
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
结果:
[Requesting program interpreter: /tools/lib/ld-linux.so.2]
删除测试
rm -v dummy.c a.out
********************************************************************************
################################################################################
Tcl    
软件包包含工具命令语言(Tool Command Language)。
configure文件在unix下面
./configure --prefix=/tools
make
make install
make install-private-headers
ln -sv tclsh8.4 /tools/bin/tclsh
好的开始竟然没有报错!!!
################################################################################
Expect
软件包包含一个通过执行脚本对话框与其它交互式程序通信的工具。
patch -Np1 -i ../expect-5.43.0-spawn-1.patch
./configure --prefix=/tools --with-tcl=/tools/lib \
  --with-tclinclude=/tools/include --with-x=no
make
make SCRIPTS="" install
################################################################################
DejaGNU-1.4.4  
软件包包含了一个测试其它程序的框架
./configure --prefix=/tools
make install
make check
################################################################################
GCC pass-2
expect -c "spawn ls"
结果:spawn ls
cp -v gcc/Makefile.in{,.orig} &&
sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in
cp -v gcc/Makefile.in{,.tmp} &&
sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
  > gcc/Makefile.in
********************************************************************************
Perl、C、sed、awk、shell scripting
看来需要用到的东西不少呢!!可是我对上面的属于文盲,后悔上学时候没学好C
********************************************************************************
patch -Np1 -i ../gcc-4.0.3-specs-1.patch
mkdir -v ../gcc-build
cd ../gcc-build
../gcc-4.0.3/configure --prefix=/tools \
    --with-local-prefix=/tools --enable-clocale=gnu \
    --enable-shared --enable-threads=posix \
    --enable-__cxa_atexit --enable-languages=c,c++ \
    --disable-libstdcxx-pch
make
make -k check     #等吧我的VM半个多小时没啥效果,不必要的命令可以不运行
make install
********************************************************************************
谨慎起见,在测试一下吧!!
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
结果:
Requesting program interpreter:/tools/lib/ld-linux.so.2]
rm -v dummy.c a.out
********************************************************************************
################################################################################
Binutils-2.16.1 - Pass 2
是一组开发工具,包括连接器、汇编器和其他用于目标文件和档案的工具
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.16.1/configure --prefix=/tools \
    --disable-nls --with-lib-path=/tools/lib
make     #不检测了  想检测就make check
make install
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
################################################################################
Ncurses-5.5  
提供独立于终端的字符终端处理库,含有功能键定义(快捷键)、屏幕绘制以及基于文本终端的图形互动功能
./configure --prefix=/tools --with-shared \
    --without-debug --without-ada --enable-overwrite
make
make install
################################################################################
Bash
是 Bourne-Again Shell 的缩写,它在 UNIX 系统中作为 shell 被广泛使用。
patch -Np1 -i ../bash-3.1-fixes-8.patch
./configure --prefix=/tools --without-bash-malloc
make
make install
ln -vs bash /tools/bin/sh
################################################################################
Bzip2
包含了对文件进行压缩和解压缩的工具,对于文本文件,bzip2 比传统的 gzip 拥有更高压缩比。
没有configure文件 直接make
make
make PREFIX=/tools install
################################################################################
Coreutils
 软件包包括一整套用于显示和设置基本系统特征的工具。
./configure --prefix=/tools
make
make install
###############################################################################
Diffutils-2.8.1
软件包里的程序可以向你显示两个文件或目录的差异,常用来生成软件的补丁。
./configure --prefix=/tools
make
make install
###############################################################################
Findutils-4.2.27
软件包包含查找文件的工具,既能即时查找(递归的搜索目录,并可以显示、创建和维护文件),
也能在数据库里查找(通常比递归查找快但是在数据库没有及时更新的情况下,结果并不可靠)。
./configure --prefix=/tools
make
make install
###############################################################################
Gawk-3.1.5
是一个处理文本文件的工具包
./configure --prefix=/tools
cat >>config.h <<"EOF"
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF
make
make install
###############################################################################
Gettext-0.14.5
包含用于系统的国际化和本地化的工具,可以在编译程序的时候使用本国语言支持(NLS),
可以使程序的输出使用用户设置的语言而不是英文
cd gettext-tools
./configure --prefix=/tools --disable-shared
make -C lib
make -C src msgfmt
cp -v src/msgfmt /tools/bin
###############################################################################
Grep-2.5.1a
可以按指定的匹配模式搜索文件中的内容。
./configure --prefix=/tools \
    --disable-perl-regexp
make
make install
###############################################################################
Gzip-1.3.5
软件包包含了压缩和解压文件的程序。
./configure --prefix=/tools
make
make install
###############################################################################
M4-1.4.4
包含一个宏处理器
./configure --prefix=/tools
make
make install
###############################################################################
Make-3.80
软件包包含一个编译软件包的程序。
./configure --prefix=/tools
make
make install
###############################################################################
Patch-2.5.4
软件包包含一个根据补丁文件来修改原文件的程序。补丁文件通常是用 diff 程序创建的。
./configure --prefix=/tools
make
make install
###############################################################################
Perl-5.8.8
Perl 将 C, sed, awk 和 sh 的最佳特性集于一身,是一种强大的编程语言。
patch -Np1 -i ../perl-5.8.8-libc-2.patch
./configure.gnu --prefix=/tools -Dstatic_ext='Data/Dumper Fcntl IO POSIX'
make perl utilities
cp -v perl pod/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.8.8
cp -Rv lib/* /tools/lib/perl5/5.8.8
###############################################################################
Sed-4.1.5
是一个流编辑程序,在一个输入流(从一个文件或者一个管道的输入)上进行基本的文本编辑操作。
./configure --prefix=/tools
make
make install
###############################################################################
Tar-1.15.1
软件包含有一个归档程序,用来保存文件到归档文件或者从给定的 tar 归档文件中释放文件
patch -Np1 -i ../tar-1.15.1-gcc4_fix_tests-1.patch
./configure --prefix=/tools
make
make install
###############################################################################
Texinfo-4.8
软件包包含读取、写入和转换 Info 文档的程序,以提供系统文档。
./configure --prefix=/tools
make
make install
###############################################################################
Util-linux-2.12r
软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理驱动器,以及打开 tty 端口和处理消息。
sed -i 's@/usr/include@/tools/include@g' configure
./configure
make -C lib
make -C mount mount umount
make -C text-utils more
cp mount/{,u}mount text-utils/more /tools/bin
###############################################################################
清理系统
strip --strip-debug /tools/lib/*
strip --strip-unneeded /tools/{,s}bin/*
rm -rf /tools/{info,man}
###############################################################################
改变所有者
chown -R root:root $LFS/tools
最后一次用lfs用户
###############################################################################
终于做完第五章了可以休息啦!!!
                          2008-10-7 15:29
###############################################################################