LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: tram

[==LFS精华系列==]Pure lfs 安装手记

[复制链接]
 楼主| 发表于 2003-4-7 19:03:30 | 显示全部楼层
经过了一番烦琐的工作,顺利进入第六章。
在这里,我基本上按照脚本来做,为了方便以后再进入chroot环境,我在另外的shell里建立了一个$LFS/etc/chrootsettings文件(主要是因为在chroot下还没有vi可以用),以后进了chroot,就source一下这个文件,设置就都有了。文件内容如下:
set +h
umask 022
export LC_ALL=POSIX
unset LD_LIBRARY_PATH
unset LD_PRELOAD
export LDFLAGS="-s"
mount proc /proc -t proc
cp -f /proc/mounts /etc/mtab && chmod 644 /etc/mtab
DEVPTS=`cat /proc/mounts | cut -d\  -f3 | grep "^devpts$"`
test -z "${DEVPTS}" && DEVPTS=N || DEVPTS=Y
export DEVPTS    # for later usage
test Y = "${DEVPTS}" && mount devpts /dev/pts -t devpts

下面是用MAKEDEV创建设备:
cd /dev &&
cp /stage1/src/MAKEDEV* ./ &&
bunzip2 MAKEDEV* &&
chmod 754 MAKEDEV* &&
./MAKEDEV* -v generic-nopty

第六章 - 安装 glibc
删除上次用过的源码,再解压。别忘了linuxthreads
touch /etc/ld.so.conf &&
mkdir ../glibc-final-build &&
cd ../glibc-final-build &&
CFLAGS="-O2 -pipe" ../glibc-2*/configure --prefix=/usr \
     --enable-add-ons --disable-profile --libexecdir=/usr/bin \
     --with-headers=/usr/include \
     --mandir=/usr/share/man --infodir=/usr/share/info &&
make &&
make check &&
make install &&
mkdir -p /usr/lib/locale &&
    localedef -i de_DE -f ISO-8859-1 de_DE &&
    localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro &&
    localedef -i en_HK -f ISO-8859-1 en_HK &&
    localedef -i en_PH -f ISO-8859-1 en_PH &&
    localedef -i en_US -f ISO-8859-1 en_US &&
    localedef -i es_MX -f ISO-8859-1 es_MX &&
    localedef -i fr_FR -f ISO-8859-1 fr_FR &&
    localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro &&
    localedef -i it_IT -f ISO-8859-1 it_IT &&
    localedef -i ja_JP -f EUC-JP  ja_JP &&
    localedef -i zh_CN -f GB2312  zh_CN.GB2312 &&
    localedef -i zh_CN -f GB2312  zh_CN &&
    localedef -i zh_CN -f GBK     zh_CN.GBK &&
    localedef -i zh_TW -f BIG5    zh_TW.Big5 &&
    localedef -i zh_CN -f GB18030 zh_CN.GB18030 &&
    localedef -i zh_CN -f UTF-8   zh_CN.UTF-8
上面最好一步一步来执行,因为每一步都挺长的,错了就比较麻烦。我这里make check是全部通过的。
创建glibc的配置文件(/etc/nsswitch.conf, /etc/localtime 符号链接和 /etc/ld.so.conf,按照LFS里面的方法。我选的时区是Asia/Shanghai
 楼主| 发表于 2003-4-7 19:03:57 | 显示全部楼层
第六章 - 调整我们的工具链
cd ld &&
make INSTALL=/stage1/bin/install install-data-local

TGT_TRIPLE=`/stage1/bin/gcc -dumpmachine`
SPECFILE=/stage1/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/specs
grep /stage1/lib ${SPECFILE} > /dev/null 2>&1 &&
{
   cp ${SPECFILE} ./XX
   sed -e 's@/stage1/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \
       -e 's@/stage1/lib/ld.so.1@/lib/ld.so.1@g' \
       -e 's@/stage1/lib64/ld-linux.so.2@/lib64/ld-linux.so.2@g' \
       -e 's@/stage1/lib64/ld.so.1@/lib64/ld.so.1@g' ./XX > ${SPECFILE}
   rm -f ./XX
}
上面改过以后,最好确认一下的确改好了。

第六章 - 安装 binutils
我删除了上次的源码目录。
mkdir ../binutils-final-build &&
cd ../binutils-final-build &&
CFLAGS="-O2 -pipe" ../binutils-2*/configure --prefix=/usr --enable-shared --mandir=/usr/share/man --infodir=/usr/share/info &&
make LDFLAGS="-s" &&
make check &&
make install &&
rm /usr/lib/libiberty.a
上面make check也全部通过了。只要没有unexpected的就好了。

第六章 - 安装 gcc
删除源码目录,再解压,运用gcc-3.2.2.mmap_test补丁,然后用下面的两组命令来模拟nofixincludes补丁和去掉-g参数:
cd gcc
test -f Makefile.in-ORIG ||
cp Makefile.in Makefile.in-ORIG

# Following mimics the nofixincludes patch
# Also avoid debug symbols in gcc
grep -Ev '(README| ./fixinc.sh )' Makefile.in-ORIG | \
sed 's@LIBGCC2_DEBUG_CFLAGS = -g@LIBGCC2_DEBUG_CFLAGS =@g' \
   > Makefile.in
cd ..
# Avoid debug symbols in libstc++
cd libstdc++-v3
test -f configure-ORIG ||
   cp configure configure-ORIG
sed s@DEBUG_FLAGS=\'-g\'@DEBUG_FLAGS=\'\'@g configure-ORIG > configure
cd ..
创建编译目录:
mkdir ../gcc-final-build &&
cd ../gcc-final-build
配置:
CFLAGS="-O2 -pipe" \
   ../gcc-3.2.2/configure --prefix=/usr \
   --enable-languages=c,c++ --enable-shared --enable-threads=posix \
   --enable-__cxa_atexit --enable-version-specific-runtime-libs \
   --mandir=/usr/share/man --infodir=/usr/share/info
我用了VER_SPEC_RT_LIBS.
编译,我没有从bootstrap开始:
make LDFLAGS="-s"
测试:
make -k check | tee gcc-final-test.log
测试结果与第五章里第二次编译gcc时一模一样,应该说是通过了。
安装:
make install &&
ln -s ../usr/bin/cpp /lib &&
ln -sf gcc /usr/bin/cc &&
rm /usr/lib/libiberty.a
还有version-specific-runtime-libs需要的设置:
echo "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.2" >> /etc/ld.so.conf
/sbin/ldconfig
最后:
unset LD_LIBRARY_PATH
unset LD_PRELOAD
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/stage1/sbin:/stage1/bin
 楼主| 发表于 2003-4-7 19:04:15 | 显示全部楼层
第六章 - 安装 gcc-2.95.3
这里我结合了最新的blfs(20030404)里安装的方法。
http://beyond.linuxfromscratch.org/view/cvs/general/gcc2.html
gcc-2.95.3-1.patch和gcc-2.95.3-2.patch内容完全一样,所以随便用哪个都行,又用了nonfixincules补丁。
echo timestamp > gcc/cstamp-h.in &&
mkdir ../gcc-2-build &&
cd ../gcc-2-build &&
../gcc-2.95.3/configure --prefix=/opt/gcc2 --enable-shared \
  --enable-languages=c,c++ --enable-threads=posix \
  --program-suffix="-2.95.3" \
  --mandir=/usr/share/man --infodir=/usr/share/info &&
make BOOT_LDFLAGS="-s" BOOT_CFLAGS="-O2 -pipe" \
     STAGE1_CFLAGS="-pipe" bootstrap &&
make -k check &&
make install
ln -sf gcc /opt/gcc2/bin/cc &&
rm -rf /opt/gcc2/{i686-pc-linux-gnu,info,man}

L=`find /opt/gcc2/lib -name "*libstdc++*.so" -type f` &&
IL=`basename $L`

for i in /opt/gcc2/lib/*.so*; do mv -f $i /usr/lib;
ln -sf /usr/lib/`basename $i` /opt/gcc2/lib; done

ln -sf $IL /usr/lib/libstdc++-libc6.1-1.so.2 &&
ln -sf $IL /usr/lib/libstdc++-libc6.2-2.so.3 &&
ln -sf $IL /usr/lib/libstdc++-libc6.3-2.so.3
记住以后编译内核时用的参数:
make mrproper &&
make menuconfig &&
make CC=/opt/gcc2/bin/gcc dep &&
make CC=/opt/gcc2/bin/gcc bzImage &&
make CC=/opt/gcc2/bin/gcc modules &&
make CC=/opt/gcc2/bin/gcc modules_install &&
cp arch/i386/boot/bzImage /boot/lfskernel &&
cp System.map /boot

第六章 - 安装剩下的软件包
下面是修改过的chroot命令,加了优化参数:
chroot $LFS /stage1/bin/env -i \
   HOME=/root TERM=$TERM PS1='[\u@\h \W]\$ ' \
   PATH=/bin:/usr/bin:/sbin:/usr/sbin:/stage1/bin:/stage1/sbin \
   LDFLAGS="-s" \
   CHOST="i686-pc-linux-gnu" \
   CC="gcc -s" \
   CFLAGS="-march=pentium3 -Os -pipe -fomit-frame-pointer" \
   CXXFLAGS="-march=pentium3 -Os -pipe -fomit-frame-pointer" \
   /bin/bash --login
优化参数用-Os,试试看效果,呵呵。
新的chrootsettings文件:
set +x
set +h
umask 022
export LC_ALL=POSIX
unset LD_LIBRARY_PATH
unset LD_PRELOAD
export LDFLAGS="-s"
mount proc /proc -t proc
mount devpts /dev/pts -t devpts
 楼主| 发表于 2003-4-7 19:04:39 | 显示全部楼层
下面是按照LFS上来安装的,打//的是没有安装的包,有些版本可能不一样,不过问题不大。
        //Installing Linux-2.4.20 headers因为已经装过了头文件
Man-pages-1.56
        //Installing Glibc-2.3.1
        //Installing GCC-3.2.1
@Zlib-1.1.4:要多打一个补丁。配置命令也不一样了:
CFLAGS="$CFLAGS -fPIC" CPPFLAGS="-DHAS_vsnprintf" ./configure --prefix=/usr --shared

Findutils-4.1.7:因为版本不同,没有用补丁。
Gawk-3.1.1:与LFS 20030219里面的装法完全一样。
Ncurses-5.3:一定要使用在第五章里用过的"etip"补丁,我还用了在第五章里的修改命令,参看上面。
Vim-6.1:same
M4-1.4:same
Bison-1.875:same。
Less-381:
Groff-1.18.1:一定要这样进行configure:-
    PAGE=XX ./configure --prefix=/usr
这里的"XX" 是"A4" 或 "letter",根据你的需要来定。
coreutils:用了新出的5.0版。
安装后:
mv /usr/bin/{cat,head} /bin &&
#ln -s ../../bin/install /usr/bin &&
mv /usr/bin/{basename,date,echo,false,pwd} /bin &&
mv /usr/bin/{sleep,stty,su,test,true,uname} /bin &&
mv /usr/bin/chroot /usr/sbin &&
ln -s test /bin/[

        //Installing Textutils-2.1
Sed-4.0.5:same
Flex-2.5.27:
        //Installing Binutils-2.13.2
        //Installing Fileutils-4.1
        //Installing Sh-utils-2.0
Gettext-0.11.5:same
Net-tools-1.60:same
Perl-5.8.0:在安装perl前一定要执行"创建/etc/hosts文件"的命令(第七章)
Texinfo-4.5:same
Autoconf-2.57:same
Automake-1.7.2:same
Bash-2.05b:./configure --prefix=/usr --with-curses
File-3.41:same
Libtool-1.4.3:same
//Bin86-0.16.3:same
Bzip2-1.0.2:same
Ed-0.2:same
Kbd-1.08:same
Diffutils-2.8.1:same
E2fsprogs-1.32:same
Grep-2.5:same
Gzip-1.3.3:没打补丁
Man-1.5k:same
//Lilo-22.2
Make-3.80:same
Modutils-2.4.22:same
Netkit-base-0.17:same
Patch-2.5.4:same
Procinfo-18:same
Procps-3.1.5:same打补丁的时候出现偏移了一行,不过成功了。chroot $LFS /stage1/bin/env -i \
   HOME=/root TERM=$TERM PS1='[\u@\h \W]\$ ' \
   PATH=/bin:/usr/bin:/sbin:/usr/sbin:/stage1/bin:/stage1/sbin \
   LDFLAGS="-s" \
   CHOST="i686-pc-linux-gnu" \
   CC="gcc -s" \
   CFLAGS="-march=pentium3 -Os -pipe -fomit-frame-pointer" \
   CXXFLAGS="-march=pentium3 -Os -pipe -fomit-frame-pointer" \
   /bin/bash --login
Psmisc-21.2:same
Shadow-4.0.3:在configure前一定要"touch /usr/bin/passwd" - 在安装前一定要执行"创建/var/run/utmp, /var/log/wtmp 和/var/log/btmp文件"的命令(在第六章的最后)
Sysklogd-1.4.1:same
Sysvinit-2.84:same
Tar-1.13:same
Util-linux-2.11z:same
Linux-2.4.20 man pages:same
        //Installing Glibc-2.3.1
Revised chroot command:
chroot $LFS /usr/bin/env -i \
   HOME=/root TERM=$TERM PS1='[\u@\h \W]\$ ' \
   PATH=/bin:/usr/bin:/sbin:/usr/sbin:/stage1/bin:/stage1/sbin \
   LDFLAGS="-s" \
   CHOST="i686-pc-linux-gnu" \
   CC="gcc -s" \
   CFLAGS="-march=pentium3 -Os -pipe -fomit-frame-pointer" \
   CXXFLAGS="-march=pentium3 -Os -pipe -fomit-frame-pointer" \
   /bin/bash --login
LFS-Bootscripts-1.11:same
Configuring system components
后面都和书上一样了。
在上面的过程中,基本上是一帆风顺的,在开始阶段有点错误,不过由于make test及时找出了问题,所以后面一直比较顺利。
发表于 2003-4-7 19:09:58 | 显示全部楼层
辛苦了!tram兄!
我也在努力ING
 楼主| 发表于 2003-4-7 19:41:30 | 显示全部楼层
其实我第一次装的时候,是把脚本分成很多步,然后来装的,不费什么功夫,当然学到的也就少多了,这一次,是一步一步来的,脚本也看完了,所以还是有不少收获,建议大家也从文档开始,加上脚本里的一些内容,应该很好装上的,比直接用脚本要慢些,不过能学到更多,出了错也好办:)
发表于 2003-4-7 23:34:42 | 显示全部楼层
今天可真是见识到了什么是孜孜不倦
发表于 2003-4-7 23:37:53 | 显示全部楼层
呵呵,辛苦辛苦。

精华自己都不加。亨即。。。。
发表于 2003-4-7 23:42:02 | 显示全部楼层
别人加有成就感
发表于 2003-4-7 23:52:07 | 显示全部楼层
这个小子一天到晚玩这个东西。丸子姑娘要管一管了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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