LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2110|回复: 13

[残文]lfs6.7编译之旅

[复制链接]
发表于 2010-11-20 10:19:03 | 显示全部楼层 |阅读模式
LFS 6.7 之旅 - 1

本帖就当是我lfs6.7的全过程记录,自己比较懒,错误之处可能会很多,见谅,只当参考~

说实话,在gcc编译完成的时候有点怕了,时间,小弟机子不怎么滴,

安装时间:
  2010-11-18

宿主系统:
  Debian Squeeze (testing)
  要求:Autoconf、Automake、Bash、Binutils、Bison、Bzip2、DejaGNU、Diffutils、Expect、E2fsprogs、File、Findutils、Flex、Gawk、Gcc、GDBM、Gettext、Glibc、MP、Grep、Groff、GRUB、Gzip、Iana-etc、Inetutils、IProute2、Kbd、Less、Libtool、Linux Kernel、M4、Make、Man-DB、Man-pages、Module-Init-Tools 、MPFR 、Ncurses 、Patch 、Perl 、Pkg-config 、Procps 、Psmisc 、Readline 、Sed 、Shadow 、Sysklogd 、Sysvinit 、Tar、Tcl 、Texinfo、Udev 、Util-linux-ng 、Vim 、Zlib
上面的包尽可能装全点,自己很早时候就装了不少,详细没有记录,

硬盘分区:(40G)
  0.5G /boot ext3 bootFs
  36.77G extended
    7.50G / ext4 usrFs
    3.00G /varext4 varFs
    2.25G swap
    2.50G /tmp ext4 tmpFs
    21.6G /home ext4 homeFs

挂载文件系统:
  export LFS=/mnt/lfs
  mkdir -pv $LFS
  sudo mount -v -t ext4 /dev/sda5 $LFS
  sudo mount -v -t ext3 /dev/sda1 $LFS/boot
  sudo mount -v -t ext4 /dev/sda6 $LFS/var
  sudo mount -v -t ext4 /dev/sda8 $LFS/tmp
  sudo mount -v -t ext4 /dev/sda9 $LFS/home
  sudo /sbin/swapon -v /dev/sda7

这里可以直接放到/etc/fstab里面,方便就不用每次开机挂载了,
见me:
# lfs
# sda5 / rootFs
/dev/sda5        /mnt/lfs        ext4        defaults        0        2
# sda1 /boot bootFs
/dev/sda1        /mnt/lfs/boot        ext3        defaults        0        2
# sda6 /var barFs
/dev/sda6        /mnt/lfs/var        ext4        defaults        0        2
# sda8 /tmp tmpFs
/dev/sda8        /mnt/lfs/tmp        ext4        defaults        0        2
# sda9 /home userHome
/dev/sda9        /mnt/lfs/home        ext4        defaults        0        2
# sda7 swap
/dev/sda7        none                swap        sw                0        0

新建用户,lfs,这一步我做了,但发现不好使,还是用的主要用户angei操作,
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
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF

# 即时生效
source ~/.bash_profile

文件夹:
  mkdir -v $LFS/sources
  mkdir -v $LFS/tools
  chmod -v a+wt $LFS/sources
  chown -v angei $LFS/sources
  chown -v angei $LFS/tools
  ln -sv $LFS/tools /

下载lfs6.7软件包:

wget ftp://ftp.lfs-matrix.net/pub/lfs ... fs-packages-6.7.tar

解压到$LFS/sources目录,

前期工作好像就这么多,至少在我几天的记录中是这样的,后面再补充吧,
 楼主| 发表于 2010-11-20 10:22:00 | 显示全部楼层
lfs 6.7之旅 - 2

Binutils-2.20.1 - Pass 1

  tar xvf ./binutils-2.20.1.tar.bz2

  cd binutils-2.20.1

  mkdir -v ../binutils-build

  cd ../binutils-build


  CC=”gcc -B/usr/bin” ../binutils-2.20.1/configure \

  --target=$LFS_TGT --prefix=/tools \

  --disable-nls –disable-werror

  make

  make install

比较简单,也没有什么错误,时间大约在10到20分钟,很快就完事了,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-11-20 10:32:13 | 显示全部楼层
lfs6.7之旅 -3

GCC-4.5.1 - Pass 1

这个是大牛,只能这么说,手册中有出处,而且不是一般的消耗时间,

这一步需要的东西比较多,解压
gmp-5.0.1.tar.bz2
mpfr-3.0.0.tar.bz2
mpc-0.8.2.tar.gz
gcc-4.5.1.tar.bz2

由于自己比较懒,不少步骤都是在解压目录configure 和make的,

下面的三个是有相互依赖关系的,mpfr依赖gmp,mpc依赖mpfr和gmp,最后gcc依赖他们三个,所以,注意编译顺序,
cd gmp-5.0.1
./configure --prefix=/tools/init
make
make install

cd mpfr-3.0.0
./configure --prefix=/tools/init –with-gmp=/tools/init
make
make install

tar -zxf ../mpc-0.8.2.tar.gz
cd mpc-0.8.2
./mpc-0.8.2/configure –prefix=/tools/init \
--with-gmp=/tools/init \
--with-mpfr=/tools/init

在某兄的博客上还看到:
mkdir /usr/include/libelf
cd /usr/include/libelf/
ln -s ../libelf.h
ln -s ../gelf.h
不过我没做,接着:
export LD_LIBRARY_PATH=/tools/init/lib
这里注意下,切记不要把工作目录也个加进去,最先的时候我设置的是:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tools/init/lib 在后来的glibc编译中报错,汗颜,

最后是gcc:
mkdir -v gcc-build
cd gcc-build
../gcc-4.5.1/configure \
    --target=$LFS_TGT --prefix=/tools \
    --disable-nls --disable-shared --disable-multilib \
    --disable-decimal-float --disable-threads \
    --disable-libmudflap --disable-libssp \
    --disable-libgomp --enable-languages=c \
    --with-gmp=/tools/init --with-mpfr=/tools/init \
    --with-mpc=/tools/ini \
    --without-ppl --without-cloog
一般不会出错,忽视警告,只要没有error就是好的,
make
接着你可以出去买菜准备做饭了,或者找本书,倒咖啡,时间很长,大约在1.5~2小时,
make install
ok !每帖一个编译,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-11-20 10:36:07 | 显示全部楼层
备注一下,上面忘记了一个小东东,呵呵~
lfs6.7手册./LFS-BOOK-6.7-HTML/chapter05/gcc-pass1.html中,你会看到:

ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`

很诡异的一句,后来发现可以简单了理解:

cd /tools/lib/gcc/i686-lfs-linux-gnu/4.5.1
ln -s libgcc.a  libgcc_eh.a

手册上很多东西都比较诡异,不知道上百度问谷歌单看手册会吐血的,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-11-20 10:41:13 | 显示全部楼层
lfs6.7之旅 -4

Linux-2.6.35.4 API Headers

手册会把你带入深渊,真的,

包:linux-2.6.35.4.tar.bz2

cd linux-2.6.35.4
make mrproper
make headers_check

这里可能报错,找不到libmpc.so,执行下export LD_LIBRARY_PATH=/tools/init/lib 就OK了。
由于我中间重启计算机了,故……

make INSTALL_HDR_PATH=dest headers_install

cp -rv dest/include/* /tools/include

API Headers ok!这一步也很简单,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-11-20 10:52:59 | 显示全部楼层
lfs6.7 之旅 -5

Glibc-2.12.1

包:glibc-2.12.1.tar.bz2

cd  glibc-2.12.1
patch -Np1 -i ../glibc-2.12.1-gcc_fix-1.patch
patch -Np1 -i ../glibc-2.12.1-makefile_fix-1.patch

这里注意 glibc不能在解压目录configure
mkdir -v ../glibc-build
cd ../glibc-build

在这之前可能还要设置LD_LIBRARY_PATH变量,切记不要包含当前目录,
export LD_LIBRARY_PATH=/tools/init/lib

../glibc-2.12.1/configure --prefix=/tools \
    --host=$LFS_TGT --build=$(../glibc-2.12.1/scripts/config.guess) \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.22.5 --with-headers=/tools/include \
    libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

make

make install

一般不会报错,我这里出现了个权限错误libc.a无法写入,sudo一下就好了,
glibc的文件很多,
回复 支持 反对

使用道具 举报

发表于 2010-11-21 17:18:28 | 显示全部楼层
好帖。谢谢楼主
回复 支持 反对

使用道具 举报

发表于 2010-11-22 23:21:48 | 显示全部楼层
希望楼主有后续,这篇文章对我这样的新人太有用了
回复 支持 反对

使用道具 举报

发表于 2010-11-23 13:20:29 | 显示全部楼层
楼主你的机器太慢了, 我这里装完lfs再装gdb apache valgrind mysql php openssh等一堆软件才用不到两个半小时
多数软件用make -j2 能节省不少时间的
回复 支持 反对

使用道具 举报

发表于 2010-11-23 18:04:08 | 显示全部楼层
Post by xinglp;2120827
楼主你的机器太慢了, 我这里装完lfs再装gdb apache valgrind mysql php openssh等一堆软件才用不到两个半小时
多数软件用make -j2 能节省不少时间的


编译个gcc就要三个小时的掩面路过...
回复 支持 反对

使用道具 举报

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

本版积分规则

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