• LFS7.4编译笔记(2)


    上一篇我们已经搭建好了临时系统,这一篇我们就开始正式构建我们的最终LFS系统。

    首先切换到root,准备虚拟内核文件系统并挂载:

     1 su -
     2 export LFS=/mnt/lfs
     3 mkdir -pv $LFS/{dev,proc,sys}
     4 mknod -m 600 $LFS/dev/console c 5 1
     5 mknod -m 666 $LFS/dev/null c 1 3
     6 mount -v --bind /dev $LFS/dev
     7 mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
     8 mount -vt proc proc $LFS/proc
     9 mount -vt sysfs sysfs $LFS/sys
    10 
    11 if [ -h $LFS/dev/shm ]; then
    12     link=$(readlink $LFS/dev/shm)
    13     mkdir -p $LFS/$link
    14     mount -vt tmpfs shm $LFS/$link
    15     unset link
    16 else
    17     mount -vt tmpfs shm $LFS/dev/shm
    18 fi

    接着进入chroot环境编译最终的LFS系统:

    chroot $LFS /tools/bin/env -i HOME=$HOME TERM=$TERM 
        PS1="$? u:w$ " PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin 
        /tools/bin/bash --login +h

    此后LFS变量就不需要了。此时如果重启的话,再次进入chroot环境前必须挂载上面提到的虚拟内核文件系统。

    创建目录:

     1 mkdir -pv /{bin,etc/{opt,sysconfig},home,lib,mnt,opt,run}
     2 mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
     3 install -dv -m 0750 /root
     4 install -dv -m 1777 /tmp /var/tmp
     5 mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
     6 mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
     7 mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
     8 mkdir -pv /usr/{,local/}share/man/man{1..8}
     9 for dir in /usr /usr/local; do
    10     ln -sv share/{man,doc,info} $dir
    11 done
    12 case $(uname -m) in
    13     x86_64) ln -sv lib /lib64 && ln -sv lib /usr/lib64 && ln -sv lib /usr/local/lib64 ;;
    14 esac
    15 mkdir -v /var/{log,mail,spool}
    16 ln -sv /run /var/run
    17 ln -sv /run/lock /var/lock
    18 mkdir -pv /var/{opt,cache,lib/{misc,locate},local}

    创建必要的文件和符号链接:

    1 ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin
    2 ln -sv /tools/bin/perl /usr/bin
    3 ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
    4 ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
    5 sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la
    6 ln -sv bash /bin/sh

    创建mtab文件:

    ln -sv /proc/self/mounts /etc/mtab

    创建passwd和group文件以便我们可以登录:

     1 cat > /etc/passwd <<EOF
     2 root:x:0:0:root:/root:/bin/bash
     3 bin:x:1:1:bin:/dev/null:/bin/false
     4 nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
     5 EOF
     6 cat > /etc/group <<EOF
     7 root:x:0:
     8 bin:x:1:
     9 sys:x:2:
    10 kmem:x:3:
    11 tape:x:4:
    12 tty:x:5:
    13 daemon:x:6:
    14 floppy:x:7:
    15 disk:x:8:
    16 lp:x:9:
    17 dialout:x:10:
    18 audio:x:11:
    19 video:x:12:
    20 utmp:x:13:
    21 usb:x:14:
    22 cdrom:x:15:
    23 mail:x:34:
    24 nogroup:x:99:
    25 EOF

    重新加载bash,就可以识别我们的用户名了(如果是用脚本自动执行的话,就不要执行下面的这句代码了):

    exec /tools/bin/bash --login +h

    创建日志文件并给出权限:

    touch /var/log/{btmp,lastlog,wtmp}
    chgrp -v utmp /var/log/lastlog
    chmod -v 664 /var/log/lastlog
    chmod -v 600 /var/log/btmp

    下面开始编译:

    Linux-3.10.10 API Headers

    1 tar xvf linux-3.10.10.tar.xz
    2 cd linux-3.10.10
    3 make mrproper
    4 make headers_check
    5 make INSTALL_HDR_PATH=dest headers_install
    6 find dest/include ( -name .install -o -name ..install.cmd ) -delete
    7 cp -rv dest/include/* /usr/include
    8 cd ..
    9 rm -rf linux-3.10.10

    Man-pages-3.53

    1 tar xvf man-pages-3.53.tar.xz
    2 cd man-pages-3.53
    3 make install
    4 cd ..
    5 rm -rf man-pages-3.53

    Glibc-2.18

     1 tar xvf glibc-2.18.tar.xz
     2 cd glibc-2.18
     3 sed -i -e 's/static __m128i/inline &/' sysdeps/x86_64/multiarch/strstr.c
     4 mkdir -v ../glibc-build
     5 cd ../glibc-build
     6 ../glibc-2.18/configure 
     7     --prefix=/usr 
     8     --disable-profile 
     9     --enable-kernel=2.6.32 
    10     --libexecdir=/usr/lib/glibc
    11 make
    12 make -k check 2>&1 | tee glibc-check-log
    13 grep Error glibc-check-log
    14 touch /etc/ld.so.conf
    15 make install
    16 cp -v ../glibc-2.18/sunrpc/rpc/*.h /usr/include/rpc
    17 cp -v ../glibc-2.18/sunrpc/rpcsvc/*.h /usr/include/rpcsvc
    18 cp -v ../glibc-2.18/nis/rpcsvc/*.h /usr/include/rpcsvc
    19 
    20 mkdir -pv /usr/lib/locale
    21 localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
    22 localedef -i de_DE -f ISO-8859-1 de_DE
    23 localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
    24 localedef -i de_DE -f UTF-8 de_DE.UTF-8
    25 localedef -i en_GB -f UTF-8 en_GB.UTF-8
    26 localedef -i en_HK -f ISO-8859-1 en_HK
    27 localedef -i en_PH -f ISO-8859-1 en_PH
    28 localedef -i en_US -f ISO-8859-1 en_US
    29 localedef -i en_US -f UTF-8 en_US.UTF-8
    30 localedef -i es_MX -f ISO-8859-1 es_MX
    31 localedef -i fa_IR -f UTF-8 fa_IR
    32 localedef -i fr_FR -f ISO-8859-1 fr_FR
    33 localedef -i fr_FR@euro -f ISO-8859-1 fr_FR@euro
    34 localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
    35 localedef -i it_IT -f ISO-8859-1 it_IT
    36 localedef -i it_IT -f UTF-8 it_IT.UTF-8
    37 localedef -i ja_JP -f EUC-JP ja_JP
    38 localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
    39 localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
    40 localedef -i tr_TR -f UTR-8 tr_TR.UTF-8
    41 localedef -i zh_CN -f GB18030 zh_CN.GB18030

    配置Glibc

     1 cat > /etc/nsswitch.conf <<EOF
     2 # Begin /etc/nsswitch.conf
     3 
     4 passwd: files
     5 group: files
     6 shadow: files
     7 
     8 host: files dns
     9 networks: files
    10 
    11 protocols: files
    12 services: files
    13 ethers: files
    14 rpc: files
    15 
    16 # End /etc/nsswitch.conf
    17 EOF

    安装时区数据:

     1 tar -xf ../tzdata2013d.tar.gz
     2 ZONEINFO=/usr/share/zoneinfo
     3 mkdir -pv $ZONEINFO/{posix,right}
     4 
     5 for tz in etcetera southamerica northamerica europe africa antarctica 
     6             asia australasia backward pacificnew solar87 solar88 solar89 
     7             systemv; do
     8     zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz}
     9     zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
    10     zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
    11 done
    12 cp -v zone.tab iso3166.tab $ZONEINFO
    13 zic -d $ZONEINFO -p America/New_York
    14 unset ZONEINFO

    创建/etc/localtime文件:

    cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    配置动态加载器:

     1 cat > /etc/ld.so.conf <<EOF
     2 # Begin /etc/ld.so.conf
     3 /usr/local/lib
     4 /opt/lib
     5 EOF
     6 cat >> /etc/ld.so.conf <<EOF
     7 # Add an include directory
     8 include /etc/ld.so.conf.d/*.conf
     9 EOF
    10 mkdir -pv /etc/ld.so.conf.d

    调整工具链:

    1 mv -v /tools/bin/{ld,ld-old}
    2 mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
    3 mv -v /tools/bin/{ld-new,ld}
    4 ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld

    修改GCC的specs文件指向新的动态链接器:

    gcc -dumpspecs | sed -e 's@/tools@@g'                    
            -e '/*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' 
            -e '/*cpp:/{n;s@$@ -isystem /usr/include@}' >    
            `dirname $(gcc --print-libgcc-file-name)`/specs

    下面进行工具链的第一次系列的检查:

     1 echo 'main(){}' > dummy.c
     2 cc dummy.c -v -Wl,--verbose &> dummy.log
     3 readelf -l a.out | grep interpreter
     4 正确输出应该是:
     5 [Requesting program interpreter: /lib/ld-linux.so.2]
     6 
     7 确保设置为使用正确的起始文件:
     8 grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
     9 如果一切工作正常,就不应改出错,最后一条命令的输出应为:
    10 /usr/lib/crt1.o succeeded
    11 /usr/lib/crti.o succeeded
    12 /usr/lib/crtn.o succeeded
    13 
    14 编译器是否寻找正确的头文件:
    15 grep -B1 '^ /usr/include' dummy.log
    16 此命令应该成功返回并给出以下输出:
    17 #include <...> search starts here:
    18 /usr/include
    19 
    20 检查新的链接器使用正确的搜索路径:
    21 grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |
    |g'
    22 如果一切工作正常,就不应改出错,最后一条命令的输出
    23 SEARCH_DIR("/usr/lib")
    24 SEARCH_DIR("/lib");
    25 
    26 确认我们使用的是正确的 libc:
    27 grep "/lib.*/libc.so.6 " dummy.log
    28 如果一切工作正常,就不应改出错,最后一条命令的输出
    29 attempt to open /lib/libc.so.6 succeeded
    30 
    31 最后,确保 GCC 使用正确的动态链接器:
    32 grep found dummy.log
    33 如果一切工作正常,就不应改出错,最后一条命令的输出
    34 found ld-linux.so.2 at /lib/ld-linux.so.2
    35 
    36 如果一切都正常,就可以继续往下做了。否则一定要检查到底哪里出错了
    37 rm -v dummy.c a.out dummy.log

    Zlib-1.2.8

     1 tar xvf zlib-1.2.8.tar.xz
     2 cd zlib-1.2.8
     3 ./configure --prefix=/usr
     4 make
     5 make check
     6 make install
     7 mv -v /usr/lib/lib.so.* /lib
     8 ln -sfv ../../lib/libz.so.1.2.8 /usr/lib/libz.so
     9 cd ..
    10 rm -rf zlib-1.2.8

    File-5.14

    1 tar xvf file-5.14.tar.gz
    2 cd file-5.14
    3 ./configure --prefix=/usr
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf file-5.14

    Binutils-2.23.2

     1 tar xvf binutils-2.23.2.tar.bz2
     2 cd binutils-2.23.2
     3 expect -c "spawn ls"            #输出spawn ls表示正常,可以继续
     4 rm -fv etc/standards.info
     5 sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in
     6 
     7 sed -i -e 's/@colophon/@@colophon/' 
     8         -e 's/doc@cygnus.com/doc@@cygnus.com/' bfd/doc/bfd.texinfo
     9 mkdir -v ../binutils-build
    10 cd ../binutils-build
    11 ../binutils-2.23.2/configure --prefix=/usr --enable-shared
    12 make tooldir=/usr
    13 
    14 make check
    15 make tooldir=/usr install
    16 cp -v ../binutils-2.23.2/include/libiberty.h /usr/include
    17 cd ..
    18 rm -rf binutils-2.23.2 binutils-build

    GMP-5.1.2

     1 tar xvf gmp-5.1.2.tar.xz
     2 cd gmp-5.1.2
     3 ./configure --prefix=/usr --enable-cxx 
     4 make
     5 make check 2>&1 | tee gmp-check-log
     6 awk '/tests passed/{total+=$2} ; END{print total}' gmp-check-log
     7 make install
     8 mkdir -v /usr/share/doc/gmp-5.1.2
     9 cp -v doc/{isa_abi_headache,configuration} doc/*.html 
    10         /usr/share/doc/gmp-5.1.2
    11 cd ..
    12 rm -rf gmp-5.1.2

    MPFR-3.1.2

     1 tar xvf mpfr-3.1.2.tar.xz
     2 cd mpfr-3.1.2
     3 ./configure --prefix=/usr 
     4     --enable-thread-safe 
     5     --docdir=/usr/share/doc/mpfr-3.1.2
     6 make
     7 make check
     8 make install
     9 make html
    10 make install-html
    11 cd ..
    12 rm -rf mpfr-3.1.2

    MPC-1.0.1

    1 tar xvf mpc-1.0.1.tar.gz
    2 cd mpc-1.0.1
    3 ./configure --prefix=/usr
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf mpc-1.0.1

    GCC-4.8.1

     1 tar xvf gcc-4.8.1.tar.bz2
     2 cd gcc-4.8.1
     3 case `uname -m` in
     4     i?86) sed -i 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in ;;
     5 esac
     6 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
     7 sed -i -e /autogen/d -e /check.sh/d fixincludes/Makefile.in
     8 mv -v libmudflap/testsuite/libmudflap.c++/pass41-frag.cxx{,.disable}
     9 mkdir -v ../gcc-build
    10 cd ../gcc-build
    11 ../gcc-4.8.1/configure --prefix=/usr 
    12         --libexecdir=/usr/lib 
    13         --enable-shared 
    14         --enable-threads=posix 
    15         --enable-__cxa_atexit 
    16         --enable-clocale=gnu 
    17         --enable-languages=c,c++ 
    18         --disable-multilib 
    19         --disable-bootstrap 
    20         --disable-install-libiberty 
    21         --with-system-zlib
    22 make
    23 ulimit -s 32768
    24 make -k check
    25 make install
    26 ln -sv ../usr/bin/cpp /lib
    27 ln -sv gcc /usr/bin/cc
    28 cd ..
    29 rm -rf gcc-build gcc-4.8.1

    现在对工具链进行第二次检查,确保器正常工作:

     1 echo 'main(){}' > dummy.c
     2 cc dummy.c -v -Wl,--verbose &> dummy.log
     3 readelf -l a.out | grep interpreter
     4 如果一切正常,应该输出:
     5 [Requesting program interpreter: /lib/ld-linux.so.2]
     6 
     7 确保设置为使用正确的起始文件:
     8 grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
     9 如果正常,输出
    10 /usr/lib/gcc/i686-pc-linux-gnu/4.8.1/../../../crt1.o succeeded
    11 /usr/lib/gcc/i686-pc-linux-gnu/4.8.1/../../../crti.o succeeded
    12 /usr/lib/gcc/i686-pc-linux-gnu/4.8.1/../../../crtn.o succeeded
    13 
    14 检查一下编译器是否寻找正确的头文件:
    15 grep -B4 '^ /usr/include' dummy.log
    16 如果成功,输出
    17 #include <...> search starts here:
    18 /usr/lib/gcc/i686-pc-linux-gnu/4.8.1/include
    19 /usr/local/include
    20 /usr/lib/gcc/i686-pc-linux-gnu/4.8.1/include-fixed
    21 /usr/include
    22 
    23 下一步检查新的链接器使用正确的搜索路径:
    24 grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |
    |g'
    25 如果正常,输出
    26 SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
    27 SEARCH_DIR("/usr/local/lib")
    28 SEARCH_DIR("/lib")
    29 SEARCH_DIR("/usr/lib");
    30 
    31 下一步确认我们使用的是正确的 libc:
    32 grep "/lib.*/libc.so.6 " dummy.log
    33 如果正确,输出
    34 attempt to open /lib/libc.so.6 succeeded
    35 
    36 最后,确保 GCC 使用正确的动态链接器:
    37 grep found dummy.log
    38 如果正确,输出
    39 found ld-linux.so.2 at /lib/ld-linux.so.2
    40 
    41 如果所有输出都符合要求,则可以继续,否则应该检查。
    42 rm -v dummy.c a.out dummy.log
    43 
    44 最后,移动一个位置不正确的文件:
    45 mkdir -pv /usr/share/gdb/auto-load/usr/lib
    46 mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib

    接下来就是安装各种软件:

    Sed-4.2.2

     1 tar xvf sed-4.2.2.tar.bz2
     2 cd sed-4.2.2
     3 ./configure --prefix=/usr --bindir=/bin 
     4     --htmldir=/usr/share/doc/sed-4.2.2
     5 make
     6 make html
     7 make check
     8 make install
     9 make -C doc install-html
    10 cd ..
    11 rm -rf sed-4.2.2

    Bzip2-1.0.6

     1 tar xvf bzip2-1.0.6.tar.gz
     2 cd bzip2-1.0.6
     3 patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
     4 sed -i 's@(ln -s -f )$(PREFIX)/bin/@1@' Makefile
     5 sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile
     6 make -f Makefile-libbz2_so
     7 make clean
     8 make
     9 make PREFIX=/usr install
    10 cp -v bzip2-shared /bin/bzip2
    11 cp -av libbz2.so* /lib
    12 ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
    13 rm -v /usr/bin/{bunzip2,bzcat,bzip2}
    14 ln -sv bzip2 /bin/bunzip2
    15 ln -sv bzip2 /bin/bzcat
    16 cd ..
    17 rm -rf bzip2-1.0.6

    Pkg-config-0.28

     1 tar xvf pkg-config-0.28.tar.gz
     2 cd pkg-config-0.28
     3 ./configure --prefix=/usr 
     4         --with-internal-glib 
     5         --disable-host-tool 
     6         --docdir=/usr/share/doc/pkg-config-0.28
     7 make
     8 make check
     9 make install
    10 cd ..
    11 rm -rf pkg-config-0.28

    Ncurses-5.9

     1 tar xvf ncurses-5.9.tar.gz
     2 cd ncurses-5.9
     3 ./configure --prefix=/usr 
     4         --mandir=/usr/share/man 
     5         --with-shared 
     6         --without-debug 
     7         --enable-pc-files 
     8         --enable-widec
     9 make
    10 make install
    11 mv -v /usr/lib/libncursesw.so.5* /lib
    12 ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
    13 
    14 for lib in ncurses form panel menu ; do
    15         rm -vf /usr/lib/lib${lib}.so
    16         echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
    17         ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a
    18         ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc
    19 done
    20 ln -sfv libncurses++w.a /usr/lib/libncurses++.a
    21 
    22 rm -vf  /usr/lib/libcursesw.so
    23 echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
    24 ln -sfv libncurses.so  /usr/lib/libcurses.so
    25 ln -sfv libncursesw.a  /usr/lib/libcursesw.a
    26 ln -sfv libncurses.a /usr/lib/libcurses.a
    27 
    28 mkdir -v /usr/share/doc/ncurses-5.9
    29 cp -v -R doc/* /usr/share/doc/ncurses-5.9
    30 
    31 make distclean
    32 ./configure --prefix=/usr 
    33         --with-shared 
    34         --without-normal 
    35         --without-debug 
    36         --without-cxx-binding
    37 make sources libs
    38 cp -av lib/lib*.so.5* /usr/lib
    39 cd ..
    40 rm -rf ncurses-5.9

    Shadow-4.1.5.1

     1 tar xvf shadow-4.1.5.1.tar.bz2
     2 cd shadow-4.1.5.1
     3 sed -i 's/groups$(EXEEXT) //' src/Makefile.in
     4 find man -name Makefile.in -exec sed -i 's/groups.1 / /' {} ;
     5 sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' 
     6         -e 's@/var/spool/mail@/var/mail@' etc/login.defs
     7 ./configure --sysconfdir=/etc
     8 make
     9 make install
    10 mv -v /usr/bin/passwd /bin
    11 passwd root
    12 cd ..
    13 rm -rf shadow-4.1.5.1

    Util-linux-2.23.2

     1 tar xvf util-linux-2.23.2.tar.xz
     2 cd util-linux-2.23.2
     3 sed -i -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' 
     4         $(grep -rl '/etc/adjtime' .)
     5 mkdir -pv /var/lib/hwclock
     6 ./configure --disable-su --disable-sulogin --disable-login
     7 make
     8 make install
     9 cd ..
    10 rm -rf util-linux-2.23.2

    Psmisc-22.20

    1 tar xvf psmisc-22.20.tar.gz
    2 cd psmisc-22.20
    3 ./configure --prefix=/usr
    4 make
    5 make install
    6 mv -v /usr/bin/fuser /bin
    7 mv -v /usr/bin/killall /bin
    8 cd ..
    9 rm -rf psmisc-22.20

    Procps-ng-3.3.8

     1 tar xvf procps-ng-3.3.8.tar.xz
     2 cd procps-ng-3.3.8
     3 ./configure --prefix=/usr 
     4         --exec-prefix= 
     5         --libdir=/usr/lib 
     6         --docdir=/usr/share/doc/procps-ng-3.3.8 
     7         --disable-static 
     8         --disable-skill 
     9         --disable-kill
    10 make
    11 make install
    12 mv -v /usr/lib/libprocps.so.* /lib
    13 ln -sfv ../../lib/libprocps.so.1.1.2 /usr/lib/libprocps.so
    14 cd ..
    15 rm -rf procps-ng-3.3.8

    E2fsprogs-1.42.8

     1 tar xvf e2fsprogs-1.42.8.tar.gz
     2 cd e2fsprogs-1.42.8
     3 mkdir -v build
     4 cd build
     5 ../configure --prefix=/usr 
     6         --with-root-prefix="" 
     7         --enable-elf-shlibs 
     8         --disable-libblkid 
     9         --disable-libuuid 
    10         --disable-uuidd 
    11         --disable-fsck
    12 make
    13 make check
    14 make install
    15 make install-libs
    16 chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a
    17 gunzip -v /usr/share/info/libext2fs.info.gz
    18 install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info
    19 makeinfo -o doc/com_err.info ../lib/et/com_err.texinfo
    20 install -v -m644 doc/com_err.info /usr/share/info
    21 install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info
    22 cd ../..
    23 rm -rf e2fsprogs-1.42.8 build

    Coreutils-8.21

     1 tar xvf coreutils-8.21.tar.xz
     2 cd coreutils-8.21
     3 patch -Np1 -i ../coreutils-8.21-i18n-1.patch
     4 FORCE_UNSAFE_CONFIGURE=1 ./configure 
     5     --prefix=/usr 
     6     --libexecdir=/usr/lib 
     7     --enable-no-install-program=kill,uptime
     8 make
     9 make install
    10 mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
    11 mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
    12 mv -v /usr/bin/{rmdir,stty,sync,true,uname,test,[} /bin
    13 mv -v /usr/bin/chroot /usr/sbin
    14 mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
    15 sed -i s/"1"/"8"/1 /usr/share/man/man8/chroot.8
    16 mv -v /usr/bin/{head,sleep,nice} /bin
    17 cd ..
    18 rm -rf coreutils-8.21

    Iana-Etc-2.30

    1 tar xvf iana-etc-2.30.tar.bz2
    2 cd iana-etc-2.30
    3 make
    4 make install
    5 cd ..
    6 rm -rf iana-etc-2.30

    M4-1.4.16

    1 tar xvf m4-1.4.16.tar.bz2
    2 cd m4-1.4.16
    3 sed -i -e '/gets is a/d' lib/stdio.in.h
    4 ./configure --prefix=/usr
    5 make
    6 make install
    7 cd ..
    8 rm -rf m4-1.4.16

    Flex-2.5.37

     1 tar xvf flex-2.5.37.tar.bz2
     2 cd flex-2.5.37
     3 sed -i -e '/test-bison/d' tests/Makefile.in
     4 ./configure --prefix=/usr 
     5     --docdir=/usr/share/doc/flex-2.5.37
     6 make
     7 make check
     8 make install
     9 ln -sv libfl.a /usr/lib/libl.a
    10 cat > /usr/bin/lex << "EOF"
    11 #!/bin/sh
    12 # Begin /usr/bin/lex
    13 exec /usr/bin/flex -l "$@"
    14 # End /usr/bin/lex
    15 EOF
    16 chmod -v 755 /usr/bin/lex
    17 cd ..
    18 rm -rf flex-2.5.37

    Bison-3.0

    1 tar xvf bison-3.0.tar.xz
    2 cd bison-3.0
    3 ./configure --prefix=/usr
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf bison-3.0

    Grep-2.14

    1 tar xvf grep-2.14.tar.xz
    2 cd grep-2.14
    3 ./configure --prefix=/usr --bindir=/bin
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf grep-2.14

    Readline-6.2

     1 tar xvf readline-6.2.tar.gz
     2 cd readline-6.2
     3 sed -i '/MV.*old/d' Makefile.in
     4 sed -i '/{OLDSUFF}/c:' support/shlib-install
     5 patch -Np1 -i ../readline-6.2-fixes-1.patch
     6 ./configure --prefix=/usr --libdir=/lib
     7 make SHLIB_LIBS=-lncurses
     8 make install
     9 mv -v /lib/lib{readline,history}.a /usr/lib
    10 rm -v /lib/lib{readline,history}.so
    11 ln -sfv ../../lib/libreadline.so.6 /usr/lib/libreadline.so
    12 ln -sfv ../../lib/libhistory.so.6 /usr/lib/libhistory.so
    13 mkdir -v /usr/share/doc/readline-6.2
    14 install -v -m644 doc/*.{ps,pdf,html,dvi} 
    15                 /usr/share/doc/readline-6.2
    16 cd ..
    17 rm -rf readline-6.2

    Bash-4.2

     1 tar xvf bash-4.2.tar.gz
     2 cd bash-4.2
     3 patch -Np1 -i ../bash-4.2-fixes-12.patch
     4 ./configure --prefix=/usr 
     5     --bindir=/bin 
     6     --htmldir=/usr/share/doc/bash-4.2 
     7     --without-bash-malloc 
     8     --with-installed-readline 
     9 make
    10 make install
    11 exec /bin/bash --login +h
    12 cd ..
    13 rm -rf bash-4.2

    Bc-1.06.95

    1 tar xvf bc-1.06.95.tar.bz2
    2 cd bc-1.06.95
    3 ./configure --prefix=/usr --with-readline
    4 make
    5 make install
    6 cd ..
    7 rm -rf bc-1.06.95

    Libtool-2.4.2

    1 tar xvf libtool-2.4.2.tar.gz
    2 cd libtool-2.4.2
    3 ./configure --prefix=/usr
    4 make
    5 make install
    6 cd ..
    7 rm -rf libtool-2.4.2

    GDBM-1.10

    1 tar xvf gdbm-1.10.tar.gz
    2 cd gdbm-1.10
    3 ./configure --prefix=/usr --enable-libgdbm-compat
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf gdbm-1.10

    Inetutils-1.9.1

     1 tar xvf inetutils-1.9.1.tar.gz
     2 cd inetutils-1.9.1
     3 sed -i -e '/gets is a/d' lib/stdio.in.h
     4 ./configure --prefix=/usr 
     5     --libexecdir=/usr/sbin 
     6     --localstatedir=/var 
     7     --disable-ifconfig 
     8     --disable-logger 
     9     --disable-syslogd 
    10     --disable-whois 
    11     --disable-servers
    12 make
    13 make check
    14 make install
    15 mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin
    16 cd ..
    17 rm -rf inetutils-1.9.1

    Perl-5.18.1

     1 tar xvf perl-5.18.1.tar.bz2
     2 cd perl-5.18.1
     3 echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
     4 sed -i -e "s|BUILD_ZLIBs*= True|BUILD_ZLIB = False|"        
     5           -e "s|INCLUDEs*= ./zlib-src|INCLUDE = /usr/include|" 
     6           -e "s|LIBs*= ./zlib-src|LIB = /usr/lib|"                              
     7     cpan/Compress-Raw-Zlib/config.in
     8 sh Configure -des -Dprefix=/usr  
     9         -Dvendorprefix=/usr 
    10         -Dman1dir=/usr/share/man/man1 
    11         -Dman3dir=/usr/share/man/man3 
    12         -Dpager="/usr/bin/less -isR" 
    13         -Duseshrplib
    14 make
    15 make -k test
    16 make install
    17 cd ..
    18 rm -rf perl-5.18.1

    Autoconf-2.69

    1 tar xvf autoconf-2.69.tar.xz
    2 cd autoconf-2.69
    3 ./configure --prefix=/usr
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf autoconf-2.69

    Automake-1.14

    1 tar xvf automake-1.14.tar.xz
    2 cd automake-1.14
    3 patch -Np1 -i ../automake-1.14-test-1.patch
    4 ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.14
    5 make
    6 make check
    7 make install
    8 cd ..
    9 rm -rf automake-1.14

    Diffutils-3.3

    1 tar xvf diffutils-3.3.tar.xz
    2 cd diffutils-3.3
    3 ./configure --prefix=/usr
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf diffutils-3.3

    Gawk-4.1.0

     1 tar xvf gawk-4.1.0.tar.xz
     2 cd gawk-4.1.0
     3 ./configure --prefix=/usr --libexecdir=/usr/lib
     4 make
     5 make check
     6 make install
     7 mkdir -v /usr/share/doc/gawk-4.1.0
     8 cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-4.1.0
     9 cd ..
    10 rm -rf gawk-4.1.0

    Findutils-4.4.2

     1 tar xvf findutils-4.4.2.tar.gz
     2 cd findutils-4.4.2
     3 ./configure --prefix=/usr 
     4         --libexecdir=/usr/lib/findutils  
     5         --localstatedir=/var/lib/locate
     6 make
     7 make check
     8 make install
     9 mv -v /usr/bin/find /bin
    10 sed -i 's/find:=${BINDIR}/find:=/bin/' /usr/bin/updatedb
    11 cd ..
    12 rm -rf findutils-4.4.2

    Gettext-0.18.3

    1 tar xvf gettext-0.18.3.tar.gz
    2 cd gettext-0.18.3
    3 ./configure --prefix=/usr 
    4         --docdir=/usr/share/doc/gettext-0.18.3
    5 make
    6 make check
    7 make install
    8 cd ..
    9 rm -rf gettext-0.18.3

    Groff-1.22.2

     1 tar xvf groff-1.22.2.tar.gz
     2 cd groff-1.22.2
     3 PAGE=A4 ./configure --prefix=/usr
     4 make
     5 mkdir -p /usr/share/doc/groff-1.22/pdf
     6 make install
     7 ln -sv eqn /usr/bin/geqn
     8 ln -sv tbl /usr/bin/gtbl
     9 cd ..
    10 rm -rf groff-1.22.2

    Xz-5.0.5

    1 tar xvf xz-5.0.5.tar.xz
    2 cd xz-5.0.5
    3 ./configure --prefix=/usr --libdir=/lib --docdir=/usr/share/doc/xz-5.0.5
    4 make
    5 make check
    6 make pkgconfigdir=/usr/lib/pkgconfig install
    7 cd ..
    8 rm -rf xz-5.0.5

    GRUB-2.00

     1 tar xvf grub-2.00.tar.xz
     2 cd grub-2.00
     3 sed -i -e '/gets is a/d' grub-core/gnulib/stdio.in.h
     4 ./configure --prefix=/usr 
     5         --sysconfdir=/etc 
     6         --disable-grub-emu-usb 
     7         --disable-efiemu 
     8         --disable-werror
     9 make
    10 make install
    11 cd ..
    12 rm -rf grub-2.00

    Less-458

    1 tar xvf less-458.tar.gz
    2 cd less-458
    3 ./configure --prefix=/usr --sysconfdir=/etc
    4 make
    5 make install
    6 cd ..
    7 rm -rf less-458

    Gzip-1.6

     1 tar xvf gzip-1.6.tar.xz
     2 cd gzip-1.6
     3 ./configure --prefix=/usr --bindir=/bin
     4 make
     5 make check
     6 make install
     7 mv -v /bin/{gzexe,uncompress,zcmp,zdiff,zegrep} /usr/bin
     8 mv -v /bin/{zfgrep,zforce,zgrep,zless,zmore,znew} /usr/bin
     9 cd ..
    10 rm -rf gzip-1.6

    IPRoute2-3.10.0

     1 tar xvf iproute2-3.10.0.tar.xz
     2 cd iproute2-3.10.0
     3 sed -i '/^TARGETS/s@arpd@@g' misc/Makefile
     4 sed -i /ARPD/d Makefile
     5 sed -i 's/arpd.8//' man/man8/Makefile
     6 make DESTDIR=
     7 make DESTDIR=             
     8         MANDIR=/usr/share/man 
     9         DOCDIR=/usr/share/doc/iproute2-3.10.0 install
    10 cd ..
    11 rm -rf iproute2-3.10.0

    Kbd-1.15.5

     1 tar xvf kbd-1.15.5.tar.gz
     2 cd kbd-1.15.5
     3 sed -i -e '326 s/if/while/' src/loadkeys.analyze.l
     4 sed -i 's/(RESIZECONS_PROGS=)yes/1no/g' configure
     5 sed -i 's/resizecons.8 //' man/man8/Makefile.in
     6 ./configure --prefix=/usr --disable-vlock
     7 make
     8 make install
     9 mkdir -v /usr/share/doc/kbd-1.15.5
    10 cp -R -v doc/* /usr/share/doc/kbd-1.15.5
    11 cd ..
    12 rm -rf kbd-1.15.5

    Kmod-14

     1 tar xvf kmod-14.tar.xz
     2 cd kmod-14
     3 ./configure --prefix=/usr 
     4     --bindir=/bin 
     5     --libdir=/lib 
     6     --sysconfdir=/etc 
     7     --disable-manpages 
     8     --with-xz 
     9     --with-zlib
    10 make
    11 make check
    12 make pkgconfigdir=/usr/lib/pkgconfig install
    13 for target in depmod insmod modinfo modprobe rmmod; do
    14     ln -sv ../bin/kmod /sbin/$target
    15 done
    16 ln -sv kmod /bin/lsmod
    17 cd ..
    18 rm -rf kmod-14

    Libpipeline-1.2.4

    1 tar xvf libpipeline-1.2.4.tar.gz
    2 cd libpipeline-1.2.4
    3 PKG_CONFIG_PATH=/tools/lib/pkgconfig ./configure --prefix=/usr
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf libpipeline-1.2.4

    Make-3.82

    1 tar xvf make-3.82.tar.bz2
    2 cd make-3.82
    3 patch -Np1 -i ../make-3.82-upstream_fixes-3.patch
    4 ./configure --prefix=/usr
    5 make
    6 make check
    7 make install
    8 cd ..
    9 rm -rf make-3.82

    Man-DB-2.6.5

     1 tar xvf man-db-2.6.5.tar.xz
     2 cd man-db-2.6.5
     3 ./configure --prefix=/usr 
     4     --libexecdir=/usr/lib 
     5     --docdir=/usr/share/doc/man-db-2.6.5 
     6     --sysconfdir=/etc 
     7     --disable-setuid 
     8     --with-browser=/usr/bin/lynx 
     9     --with-vgrind=/usr/bin/vgrind 
    10     --with-grap=/usr/bin/grap
    11 make
    12 make check
    13 make install
    14 cd ..
    15 rm -rf man-db-2.6.5

    Patch-2.7.1

    1 tar xvf patch-2.7.1.tar.xz
    2 cd patch-2.7.1
    3 ./configure --prefix=/usr
    4 make
    5 make check
    6 make install
    7 cd ..
    8 rm -rf patch-2.7.1

    Sysklogd-1.5

     1 tar xvf sysklogd-1.5.tar.gz
     2 cd sysklogd-1.5
     3 make
     4 make BINDIR=/sbin install
     5 配置 Sysklogd
     6 cat > /etc/syslog.conf << "EOF"
     7 # Begin /etc/syslog.conf
     8 auth,authpriv.* -/var/log/auth.log
     9 *.*;auth,authpriv.none -/var/log/sys.log
    10 daemon.* -/var/log/daemon.log
    11 kern.* -/var/log/kern.log
    12 mail.* -/var/log/mail.log
    13 user.* -/var/log/user.log
    14 *.emerg *
    15 # End /etc/syslog.conf
    16 EOF
    17 cd ..
    18 rm -rf sysklogd-1.5

    Sysvinit-2.88dsf

    1 tar xvf sysvinit-2.88dsf.tar.bz2
    2 cd sysvinit-2.88dsf
    3 sed -i 's@Sending processes@& configured via /etc/inittab@g' src/init.c
    4 sed -i -e '/utmpdump/d' -e '/mountpoint/d' src/Makefile
    5 make -C src
    6 make -C src install
    7 cd ..
    8 rm -rf sysvinit-2.88dsf

    Tar-1.26

     1 tar xvf tar-1.26.tar.bz2
     2 cd tar-1.26
     3 patch -Np1 -i ../tar-1.26-manpage-1.patch
     4 sed -i -e '/gets is a/d' gnu/stdio.in.h
     5 FORCE_UNSAFE_CONFIGURE=1 
     6 ./configure --prefix=/usr 
     7         --bindir=/bin 
     8         --libexecdir=/usr/sbin
     9 make
    10 make check
    11 make install
    12 make -C doc install-html docdir=/usr/share/doc/tar-1.26
    13 perl tarman > /usr/share/man/man1/tar.1
    14 cd ..
    15 rm -rf tar-1.26

    Texinfo-5.1

     1 tar xvf texinfo-5.1.tar.xz
     2 cd texinfo-5.1
     3 patch -Np1 -i ../texinfo-5.1-test-1.patch
     4 ./configure --prefix=/usr
     5 make
     6 make check
     7 make install
     8 make TEXMF=/usr/share/texmf install-tex
     9 cd /usr/share/info
    10 rm -v dir
    11 for f in *
    12 do install-info $f dir 2>/dev/null
    13 done
    14 cd /sources
    15 rm -rf texinfo-5.1

    Udev-206 (Extracted from systemd-206)

    1 tar xvf systemd-206.tar.xz
    2 cd systemd-206
    3 tar xvf ../udev-lfs-206-1.tar.bz2
    4 make -f udev-lfs-206-1/Makefile.lfs
    5 make -f udev-lfs-206-1/Makefile.lfs install
    6 build/udevadm hwdb --update
    7 bash udev-lfs-206-1/init-net-rules.sh
    8 cd ..
    9 rm -rf systemd-206

    Vim-7.4

     1 tar xvf vim-7.4.tar.bz2
     2 cd vim74
     3 echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
     4 ./configure --prefix=/usr --enable-multibyte
     5 make
     6 make test
     7 make install
     8 ln -sv vim /usr/bin/vi
     9 for L in /usr/share/man/{,*/}man1/vim.1; do
    10     ln -sv vim.1 $(dirname $L)/vi.1
    11 done
    12 ln -sv ../vim/vim74/doc /usr/share/doc/vim-7.4
    13 配置vim:
    14 cat > /etc/vimrc << "EOF"
    15 " Begin /etc/vimrc
    16 set nocompatible
    17 set backspace=2
    18 syntax on
    19 if (&term == "iterm") || (&term == "putty")
    20     set background=dark
    21 endif
    22 " End /etc/vimrc
    23 EOF
    24 cd ..
    25 rm -rf vim74

    到此,软件基本安装完了。下面就是一些清理工作:

    移除软件中的调试符号:

    移除之前要确保没有任何二进制正在运行,可以通过logout然后重新进入chroot环境来确保。

    1 logout
    2 chroot $LFS /tools/bin/env -i 
    3         HOME=/root TERM=$TERM PS1="$? u:w$ " 
    4         PATH=/bin:/usr/bin:/sbin:/usr/sbin 
    5         /tools/bin/bash --login
    6 /tools/bin/find /{,usr/}{bin,lib,sbin} -type f 
    7 -exec /tools/bin/strip --strip-debug '{}' ';'

    大量文件会因为格式不支持而报错。这些警告可以安全忽略,这些文件都是脚本而不是二进制.
    从现在开始,如果要重新进入 chroot 环境,使用以下修改过的命令:

    1 chroot "$LFS" /usr/bin/env -i 
    2         HOME=/root TERM="$TERM" PS1="$? u:w$ " 
    3         PATH=/bin:/usr/bin:/sbin:/usr/sbin 
    4         /bin/bash --login

    原因在于 /tools 中的工具不再需要了。所以 /tools 目录可以移除了。(注意:用于测试的Tcl、Expect 和 DejaGNU
    也会被移除)

  • 相关阅读:
    项目中遇到的IE8浏览器访问页面过慢问题
    linux下安装Oracle时交换空间不足的解决方法
    linux下为目录和文件设置权限
    启动TDS LDAP 服务器遇到的问题总结
    sql1032n sql6048n db2start启动不了 db2修改hostname
    IBM CE 错误集之(FNRCS0005E)
    Oracle同一个用户下启动多个数据库实例
    几种任务调度的 Java 实现方法与比较
    EXP-00056: ORACLE error 12154 encountered
    oracle删除数据库中的所有表
  • 原文地址:https://www.cnblogs.com/champ/p/3484697.html
Copyright © 2020-2023  润新知