- 论坛徽章:
- 0
|
继续,LFS第六章
- 构建LFS系统
- 6.1. 尽量简单的编译一个LFS系统雏形,尽量不要使用编译器优化参数,因为这带来的速度提升几乎可以忽略不计,但带来的坏处,可能导致程序运行不稳定。不要同时编译几个包,因为这样可能产生硬链接到/tools,如果tools目录被删除,可能会出现问题。
- 6.2. 准备虚拟内核文件系统
- export LFS=/mnt/lfs
- mkdir -pv $LFS/{dev,proc,sys}
- 建立初始设备节点(console和null设备)
- mknod -m 600 $LFS/dev/console c 5 1
- mknod -m 666 $LFS/dev/null c 1 3
- 挂载并绑定设备目录
- mount -v --bind /dev $LFS/dev
- 挂载虚拟内核文件系统
- mount -vt devpts devpts $LFS/dev/pts
- mount -vt tmpfs shm $LFS/dev/shm
- mount -vt proc proc $LFS/proc
- mount -vt sysfs sysfs $LFS/sys
- 6.3. 包管理
- 集中流行的包管理思想,LFS不提供包管理系统
- 6.4. 进入Chroot环境
- chroot "$LFS" /tools/bin/env -i \
- HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
- PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
- /tools/bin/bash --login +h
- 用env -i 表示清空所有环境变量,只重设后面的几个。在这里也可以设置CFLAGS或者CXXFLAGS
- 进入chroot环境后,由于还没建立/etc/passwd 文件,所以shell提示符前面为:
- I have no name!:/#
- 到了这点上面,$LFS变量就可以不管了,因为接下来所有的工作都被限制在LFS文件系统里面了。
- Bash已经把$LFS当作root (/) 目录来处理了。
- 6.5. 增加目录
- 增加文件结构
- mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}
- mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
- install -dv -m 0750 /root
- install -dv -m 1777 /tmp /var/tmp
- mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
- mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
- mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
- mkdir -pv /usr/{,local/}share/man/man{1..8}
- for dir in /usr /usr/local; do
- ln -sv share/{man,doc,info} $dir
- done
- case $(uname -m) in
- x86_64) ln -sv lib /lib64 && ln -sv lib /usr/lib64 ;;
- esac
- mkdir -v /var/{lock,log,mail,run,spool}
- mkdir -pv /var/{opt,cache,lib/{misc,locate},local}
- 以上文件夹结构,遵循Filesystem Hierarchy Standard (FHS)
- [url]http://www.pathname.com/fhs/[/url]
- 6.6. 增加必要的文件和软链接
- ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin
- ln -sv /tools/bin/perl /usr/bin
- ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
- ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
- ln -sv bash /bin/sh
- touch /etc/mtab
- cat > /etc/passwd << "EOF"
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/dev/null:/bin/false
- nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
- EOF
- cat > /etc/group << "EOF"
- root:x:0:
- bin:x:1:
- sys:x:2:
- kmem:x:3:
- tty:x:4:
- tape:x:5:
- daemon:x:6:
- floppy:x:7:
- disk:x:8:
- lp:x:9:
- dialout:x:10:
- audio:x:11:
- video:x:12:
- utmp:x:13:
- usb:x:14:
- cdrom:x:15:
- mail:x:34:
- nogroup:x:99:
- EOF
- 完整的glibc安装好之后,passwd和group文件已经建立,现在用户名和组可以生效了。
- exec /tools/bin/bash --login +h
- 使用+h参数,屏蔽bash的内部路径哈希。避免bash使用旧的文件路径,能够保证新编译的代码马上可以被利用。
- 建立一些空文件并赋予它们写权限,以便login, agetty, init以及其他一些程序能够记录系统日志及登陆信息
- touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
- chgrp -v utmp /var/run/utmp /var/log/lastlog
- chmod -v 664 /var/run/utmp /var/log/lastlog
- 注:
- /var/run/utmp 记录已经登陆的用户信息, /var/log/wtmp 记录所有登陆及注销信息,
- /var/log/lastlog 记录每个用户的最后登陆时间, /var/log/btmp 记录登陆失败信息。
- 6.7. Linux-2.6.29.4 API Headers
- cd /sources
- cd linux-2.6.29.4/
- make mrproper
- make headers_check
- make INSTALL_HDR_PATH=dest headers_install
- cp -rv dest/include/* /usr/include
- 6.8. Man-pages-3.21
- cd /sources
- tar -jxvf tar/man-pages-3.21.tar.bz2
- cd man-pages-3.21/
- make install
- 6.9. Glibc-2.10.1
- cd /sources/glibc-2.10.1/
- tar -jxvf ../tar/glibc-libidn-2.10.1.tar.bz2
- mv glibc-libidn-2.10.1 libidn
- 当执行glibc的make install的时候,会调用一个perl脚本进行测试,
- 现在的工具链还是指向/tools,测试会针对以前编译的glibc,
- 以下脚本可以让测试指向刚刚编译的glibc
- DL=$(readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p')
- sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" \
- scripts/test-installation.pl
- unset DL
- ldd命令自带了bash的特殊语法,为了避免其他的/bin/sh对ldd的影响,
- 最好把默认解释器改成/bin/bash,关于这个鸟问题,在BLFS 这本破书的shell章节中也提到了
- sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
- 修复一个make check可能出现的错误
- sed -i s/utf8/UTF-8/ libio/tst-fgetwc.c
- sed -i '/tst-fgetws-ENV/ a\
- tst-fgetwc-ENV = LOCPATH=$(common-objpfx)localedata' libio/Makefile
- mkdir -v ../glibc-build
- cd ../glibc-build
- 为x86机器增加必要的CFLAGS编译参数,-pipe加速编译,-O3提高程序的性能。
- case `uname -m` in
- i?86) echo "CFLAGS += -march=i686 -mtune=native -O3 -pipe" > configparms ;;
- esac
- 准备编译
- ../glibc-2.10.1/configure --prefix=/usr \
- --disable-profile --enable-add-ons \
- --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc
- 开始编译,等N久!
- make
- 为防止编译测试的几个失败可能,从源码目录拷贝一个东东。
- cp -v ../glibc-2.10.1/iconvdata/gconv-modules iconvdata
- make -k check 2>&1 | tee glibc-check-log
- grep Error glibc-check-log
- 在测试posix/annexc的时候,有一个可忽略的错误。
- 这和宿主系统有关,这里不用理它。
- 虽然无关紧要,为了防止glibc安装阶段报错缺少说ld.so.conf,还是touch一个吧
- touch /etc/ld.so.conf
- make install
- 定义locale集合
- mkdir -pv /usr/lib/locale
- localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
- localedef -i de_DE -f ISO-8859-1 de_DE
- localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
- localedef -i de_DE -f UTF-8 de_DE.UTF-8
- 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 en_US -f UTF-8 en_US.UTF-8
- localedef -i es_MX -f ISO-8859-1 es_MX
- localedef -i fa_IR -f UTF-8 fa_IR
- localedef -i fr_FR -f ISO-8859-1 fr_FR
- localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
- localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
- localedef -i it_IT -f ISO-8859-1 it_IT
- localedef -i ja_JP -f EUC-JP ja_JP
- localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
- localedef -i zh_CN -f GB18030 zh_CN.GB18030
- 其实这里我只要三个就可以了
- localedef -i en_US -f ISO-8859-1 en_US
- localedef -i en_US -f UTF-8 en_US.UTF-8
- localedef -i zh_CN -f GB18030 zh_CN.GB18030
- 安装其他没有执行localedef定义的语言包(可选)
- make localedata/install-locales
- 配置glibc
- 尽管当nsswitch.conf不存在或非法时,Glibc会默认产生,但在网络环境下,可能不是很理想。
- 所以还是创建一个吧,另外,时区也应该配置了。
- cat > /etc/nsswitch.conf << "EOF"
- # Begin /etc/nsswitch.conf
- passwd: files
- group: files
- shadow: files
- hosts: files dns
- networks: files
- protocols: files
- services: files
- ethers: files
- rpc: files
- # End /etc/nsswitch.conf
- EOF
- 选择时区
- tzselect
- 这里最后应该是 TZ='Asia/Shanghai';
- 增加/etc/localtime
- cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai \
- /etc/localtime
- 配置动态加载
- cat > /etc/ld.so.conf << "EOF"
- # Begin /etc/ld.so.conf
- /usr/local/lib
- /opt/lib
- # End /etc/ld.so.conf
- EOF
- 6.10. 重新调整工具链
- 先备份,然后用第五章里面调整过的工具链替换。
- 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
- 接下来,调整gcc的spec文件,以便指向新的动态链接库。
- 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
- 最好仔细检查一下specs文件是不是真的修改了。
- 测试一下新的工具链
- echo 'main(){}' > dummy.c
- cc dummy.c -v -Wl,--verbose &> dummy.log
- readelf -l a.out | grep ': /lib'
- 应该出现以下提示
- [Requesting program interpreter: /lib/ld-linux.so.2]
- grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
- 应该出现
- /usr/lib/crt1.o succeeded
- /usr/lib/crti.o succeeded
- /usr/lib/crtn.o succeeded
- 确保编译器使用了正确的头文件
- grep -B1 '^ /usr/include' dummy.log
- 应该输出
- #include <...> search starts here:
- /usr/include
- 再看看新的编译器是否使用了正确的查找路径
- grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
- 应该输出
- SEARCH_DIR("/tools/i686-pc-linux-gnu/lib")
- SEARCH_DIR("/usr/lib")
- SEARCH_DIR("/lib");
- 再检查是不是使用了正确的libc
- grep "/lib.*/libc.so.6 " dummy.log
- 应该输出
- attempt to open /lib/libc.so.6 succeeded
- 最后一点,确认gcc使用了正确的动态链接器
- grep found dummy.log
- 应该输出
- found ld-linux.so.2 at /lib/ld-linux.so.2
- 如果一切都没问题,那么清楚测试文件
- rm -v dummy.c a.out dummy.log
- 6.11. Zlib-1.2.3
- cd /sources
- tar -xvf tar/zlib-1.2.3.tar.bz2
- cd zlib-1.2.3/
- ./configure --prefix=/usr --shared --libdir=/lib
- make
- make check
- make install
- 刚才的命令安装了一个.so文件在/lib目录,我们将它移动并重新链接到/usr/lib
- rm -v /lib/libz.so
- ln -sfv ../../lib/libz.so.1.2.3 /usr/lib/libz.so
- 编译静态链接库
- make clean
- ./configure --prefix=/usr
- make
- make check
- make install
- 修正静态链接库的权限
- chmod -v 644 /usr/lib/libz.a
- 6.12. Binutils-2.19.1
- cd /sources/binutils-2.19.1/
- 验证新的chroot环境内,PTYs工作是否正常
- expect -c "spawn ls"
- 正常应该输出
- spawn ls
- rm -fv etc/standards.info
- sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in
- sed -i -e 's/getline/get_line/' libiberty/testsuite/test-demangle.c
- mkdir -v ../binutils-build
- cd ../binutils-build
- ../binutils-2.19.1/configure --prefix=/usr \
- --enable-shared
- make tooldir=/usr
- make check
- make tooldir=/usr install
- cp -v ../binutils-2.19.1/include/libiberty.h /usr/include
- 6.13. GMP-4.3.1
- cd /sources
- tar -xvf tar/gmp-4.3.1.tar.bz2
- cd gmp-4.3.1/
- ./configure --prefix=/usr --enable-cxx --enable-mpbsd
- make
- make check 2>&1 | tee gmp-check-log
- awk '/tests passed/{total+=$2} ; END{print total}' gmp-check-log
- make install
- mkdir -v /usr/share/doc/gmp-4.3.1
- cp -v doc/{isa_abi_headache,configuration} doc/*.html \
- /usr/share/doc/gmp-4.3.1
- 6.14. MPFR-2.4.1
- cd /sources
- tar -xvf tar/mpfr-2.4.1.tar.bz2
- cd mpfr-2.4.1/
- ./configure --prefix=/usr --enable-thread-safe
- make
- make check
- make install
- 安装帮助文档
- make html
- mkdir -p /usr/share/doc/mpfr-2.4.1
- find . -name \*.html -type f -exec cp -v \{} /usr/share/doc/mpfr-2.4.1 \;
- 6.15. GCC-4.4.0 (第三次编译gcc-4.4.0)
- 为了防止重复修改源码导致编译出错,删除以前的源码目录,重新弄一个!
- rm -rf /sources/gcc-4.4.0/
- cd /sources
- tar -jxvf tar/gcc-4.4.0.tar.bz2
- cd gcc-4.4.0
- sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
- 在5.1.0 gcc4 第二遍的时候
- case `uname -m` in
- i?86) sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' \
- gcc/Makefile.in ;;
- esac
- 这里也要做一次,呵呵。
- sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
- mkdir -v ../gcc-build
- cd ../gcc-build
- ../gcc-4.4.0/configure --prefix=/usr \
- --libexecdir=/usr/lib --enable-shared \
- --enable-threads=posix --enable-__cxa_atexit \
- --enable-clocale=gnu --enable-languages=c,c++ \
- --disable-multilib --disable-bootstrap
- make
- make -k check
- ../gcc-4.4.0/contrib/test_summary
- make install
- 兼容链接
- ln -sv ../usr/bin/cpp /lib
- ln -sv gcc /usr/bin/cc
- 测试工具链
- echo 'main(){}' > dummy.c
- cc dummy.c -v -Wl,--verbose &> dummy.log
- readelf -l a.out | grep ': /lib'
- 正确输出
- [Requesting program interpreter: /lib/ld-linux.so.2]
- grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
- 正确输出
- /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/../../../crt1.o succeeded
- /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/../../../crti.o succeeded
- /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/../../../crtn.o succeeded
- 检查是否调用正确的头文件
- grep -B4 '^ /usr/include' dummy.log
- 正确应该有以下输出
- #include <...> search starts here:
- /usr/local/include
- /usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.0/include
- /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/include-fixed
- /usr/include
- 检查搜索路径是否正确
- grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
- 正常会输出
- SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
- SEARCH_DIR("/usr/local/lib")
- SEARCH_DIR("/lib")
- SEARCH_DIR("/usr/lib");
- 64位系统会输出
- SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib64")
- SEARCH_DIR("/usr/local/lib64")
- SEARCH_DIR("/lib64")
- SEARCH_DIR("/usr/lib64")
- SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib")
- SEARCH_DIR("/usr/local/lib")
- SEARCH_DIR("/lib")
- SEARCH_DIR("/usr/lib");
- 检查libc调用
- grep "/lib.*/libc.so.6 " dummy.log
- 正确输出
- attempt to open /lib/libc.so.6 succeeded
- 检查动态链接库
- grep found dummy.log
- 正确输出
- found ld-linux.so.2 at /lib/ld-linux.so.2
- 删除测试文件
- rm -v dummy.c a.out dummy.log
- 6.16. Berkeley DB-4.7.25
- cd /sources/
- tar -xvf tar/db-4.7.25.tar.gz
- cd db-4.7.25/
- patch -Np1 -i ../patch/db-4.7.25-upstream_fixes-1.patch
- cd build_unix
- ../dist/configure --prefix=/usr --enable-compat185 --enable-cxx
- make
- make docdir=/usr/share/doc/db-4.7.25 install
- 修复文档的所有权
- chown -Rv root:root /usr/share/doc/db-4.7.25
- 6.17. Sed-4.2
- cd /sources/
- rm -rf sed-4.2/
- tar -xvf tar/sed-4.2.tar.bz2
- cd sed-4.2/
- ./configure --prefix=/usr --bindir=/bin --enable-html
- make
- make check
- make install
- 6.18. E2fsprogs-1.41.5
- sed -i 's@/bin/rm@/tools&@' lib/blkid/test_probe.in
- mkdir -v build
- cd build
- ../configure --prefix=/usr --with-root-prefix="" \
- --enable-elf-shlibs
- make
- make check
- make install
- make install-libs
- chmod -v u+w /usr/lib/{libblkid,libcom_err,libe2p,libext2fs,libss,libuuid}.a
- gunzip -v /usr/share/info/libext2fs.info.gz
- install-info --dir-file=/usr/share/info/dir \
- /usr/share/info/libext2fs.info
- makeinfo -o doc/com_err.info ../lib/et/com_err.texinfo
- install -v -m644 doc/com_err.info /usr/share/info
- install-info --dir-file=/usr/share/info/dir \
- /usr/share/info/com_err.info
- install -v -m644 -D ../doc/libblkid.txt \
- /usr/share/doc/e2fsprogs-1.41.5/libblkid.txt
- 6.19. Coreutils-7.4
- Intel硬件系统里面,当使用uname -p参数时,经常返回unknown,下面打个补丁。
- case `uname -m` in
- i?86 | x86_64) patch -Np1 -i ../patch/coreutils-7.4-uname-1.patch ;;
- esac
- POSIX标准需要coreutils程序识别多字节语言的字符边界效验。
- patch -Np1 -i ../patch/coreutils-7.4-i18n-1.patch
- 准备编译
- ./configure --prefix=/usr \
- --enable-no-install-program=kill,uptime
- make
- make NON_ROOT_USERNAME=nobody check-root
- 准备用nobody用户完成下面的测试,这里建立一个临时组,将nobody加入这个组,进行测试
- echo "dummy:x:1000:nobody" >> /etc/group
- 修正权限
- chown -Rv nobody config.log {gnulib-tests,lib,src}/.deps
- 用nobody用户运行测试程序
- su-tools nobody -s /bin/bash -c "make RUN_EXPENSIVE_TESTS=yes check" || true
- 删除临时组
- sed -i '/dummy/d' /etc/group
- 安装coreutils包
- make install
- 将下面的命令移动到基于FHS的路径
- mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
- mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
- mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
- mv -v /usr/bin/chroot /usr/sbin
- LFS-Bootscripts包里的某些脚本,依赖于head,sleep和nice
- /usr目录在系统启动初期可能不可用,这些二进制文件需要放在root分区
- mv -v /usr/bin/{head,sleep,nice} /bin
- 6.20. Iana-Etc-2.30
- cd /sources/
- tar -xvf tar/iana-etc-2.30.tar.bz2
- cd iana-etc-2.30/
- make && make install
- 6.21. M4-1.4.13
- ./configure --prefix=/usr
- make
- make check
- make install
- 6.22. Bison-2.4.1
- tar -xvf tar/bison-2.4.1.tar.bz2
- cd bison-2.4.1/
- ./configure --prefix=/usr
- echo '#define YYENABLE_NLS 1' >> config.h
- make
- make check
- make install
- 6.23. Ncurses-5.7
- ./configure --prefix=/usr --with-shared --without-debug --enable-widec
- make
- make install
- mv -v /usr/lib/libncursesw.so.5* /lib
- ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
- for lib in ncurses form panel menu ; do \
- rm -vf /usr/lib/lib${lib}.so ; \
- echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \
- ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \
- done
- ln -sfv libncurses++w.a /usr/lib/libncurses++.a
- rm -vf /usr/lib/libcursesw.so
- echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so
- ln -sfv libncurses.so /usr/lib/libcurses.so
- ln -sfv libncursesw.a /usr/lib/libcursesw.a
- ln -sfv libncurses.a /usr/lib/libcurses.a
- mkdir -v /usr/share/doc/ncurses-5.7
- cp -v -R doc/* /usr/share/doc/ncurses-5.7
- Note
- The instructions above don't create non-wide-character Ncurses libraries since no package installed by compiling from sources would link against them at runtime. If you must have such libraries because of some binary-only application, build them with the following commands:
- make distclean
- ./configure --prefix=/usr --with-shared --without-normal \
- --without-debug --without-cxx-binding
- make sources libs
- cp -av lib/lib*.so.5* /usr/lib
- 6.24. Procps-3.2.8
- patch -Np1 -i ../patch/procps-3.2.8-watch_unicode-1.patch
- make
- make install
- 6.25. Grep-2.5.4
- patch -Np1 -i ../patch/grep-2.5.4-debian_fixes-1.patch
- ./configure --prefix=/usr \
- --bindir=/bin \
- --without-included-regex
- make
- make check || true
- make install
- 6.26. Readline-6.0
- sed -i '/MV.*old/d' Makefile.in
- sed -i '/{OLDSUFF}/c:' support/shlib-install
- ./configure --prefix=/usr --libdir=/lib
- make SHLIB_LIBS=-lncurses
- make install
- mv -v /lib/lib{readline,history}.a /usr/lib
- rm -v /lib/lib{readline,history}.so
- ln -sfv ../../lib/libreadline.so.6 /usr/lib/libreadline.so
- ln -sfv ../../lib/libhistory.so.6 /usr/lib/libhistory.so
- mkdir -v /usr/share/doc/readline-6.0
- install -v -m644 doc/*.{ps,pdf,html,dvi} \
- /usr/share/doc/readline-6.0
- 6.27. Bash-4.0
- patch -Np1 -i ../patch/bash-4.0-fixes-2.patch
- ./configure --prefix=/usr --bindir=/bin \
- --htmldir=/usr/share/doc/bash-4.0 --without-bash-malloc \
- --with-installed-readline
- make
- sed -i 's/LANG/LC_ALL/' tests/intl.tests
- sed -i 's@tests@& </dev/tty@' tests/run-test
- chown -Rv nobody ./
- su-tools nobody -s /bin/bash -c "make tests"
- make install
- exec /bin/bash --login +h
- 6.28. Libtool-2.2.6a
- ./configure --prefix=/usr
- make
- make check
- make install
- 6.29. Inetutils-1.6
- patch -Np1 -i ../patch/inetutils-1.6-no_server_man_pages-1.patch
- ./configure --prefix=/usr --libexecdir=/usr/sbin \
- --localstatedir=/var --disable-ifconfig \
- --disable-logger --disable-syslogd --disable-whois \
- --disable-servers
- make
- make install
- mv -v /usr/bin/ping /bin
- 6.30. Perl-5.10.0
- echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
- patch -Np1 -i ../patch/perl-5.10.0-consolidated-1.patch
- sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" \
- -e "s|INCLUDE\s*= ./zlib-src|INCLUDE = /usr/include|" \
- -e "s|LIB\s*= ./zlib-src|LIB = /usr/lib|" \
- ext/Compress/Raw/Zlib/config.in
- sh Configure -des -Dprefix=/usr \
- -Dvendorprefix=/usr \
- -Dman1dir=/usr/share/man/man1 \
- -Dman3dir=/usr/share/man/man3 \
- -Dpager="/usr/bin/less -isR"
- make
- make test
- make install
- 6.31. Autoconf-2.63
- ./configure --prefix=/usr
- make
- make check
- make install
- 6.32. Automake-1.11
- ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.11
- make
- make check
- 要check好久好久:(
- make install
- 6.33. Bzip2-1.0.5
- patch -Np1 -i ../patch/bzip2-1.0.5-install_docs-1.patch
- sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
- make -f Makefile-libbz2_so
- make clean
- make
- make PREFIX=/usr install
- cp -v bzip2-shared /bin/bzip2
- cp -av libbz2.so* /lib
- ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
- rm -v /usr/bin/{bunzip2,bzcat,bzip2}
- ln -sv bzip2 /bin/bunzip2
- ln -sv bzip2 /bin/bzcat
复制代码
第六章需要做的工作太多了,下面继续! |
|