lfs_6.7安装
(2013-10-16)
一、安装环境及前期准备
1、安装环境
软件环境:VMWARE 6.5+ lfslivecd-x86-6.3-r2145 +lfs6.7安装包
2、磁盘分区
fdisk /dev/sda
创建一个主分区和一个扩展分区,大小分别为100M和磁盘的剩余空间。扩展分区里创建两个逻辑分区,分别做为lfs系统的root分区和swap分区。在创建分区时,swap分区要使用fdisk 中的t命令将其修改成swap分区。
mkswap /dev/sda5 创建swap分区的文件系统。
swapon /dev/sda5 启用交换分区swap
3、创建文件系统
mke2fs -jv /dev/sda1
mke2fs -jv /dev/sda6
注意:
有些发行版的E2fsprogs工具会在创建文件时增加自己的特性,而这会导致在安装好LFS系统后,重启时提示类似:“unsupported filesystem features, upgrade your e2fsprogs”的错误提示。使用下列命令检查是否有类似这类增强型的特性:
debugfs -R feature /dev/sda1
上述命令输出中不应包括除了以下特性以外的其它特性:
has_ journal, ext_ attr, resize_ inode, dir_ index, filetype, sparse_ super, large_ file和 needs_ recovery。
4、挂载新的分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext3 /dev/sda6 $LFS
mkdir -v $LFS/boot
mount -v -t ext3 /dev/sda1 $LFS/boot
5、准备安装包和安装补丁
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
上传lfs6.7的安装包
tar -xvf lfs-packages-6.7.tar
6、其它准备或需要注意的事项
a.关于LFS
环境变量$LFS是极其重要的,在整个LFS的安装过程中都会使用它,它是指向LFS安装分区的挂载点的。所以,在离开当前的工作环境或重新回来时都应该确认这个环境的设置是正确的。
b.创建$LFS/tools目录
在下面构建临时系统时,所有的程序都是编译安装在$LFS/tools目录下,以别与最终的LFS系统能够分开。
mkdir -v $LFS/tools
ln -sv $LFS/tools /
c.创建用户和用户组
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
d.设置环境配置文件
su - lfs
cat > ~/.bash_profile <
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
上述内容是创建一个.bash_profile文件。在登陆到系统中时,正常情况下,shell会读取主机中的/etc/profile文件,并根据这个文件里的内容设置一些环境变量等。而上述的exec env -i .../bin/bash是让shell不要读取/etc/profile文件内容,从而清空所有的可能带来影响的环境变量。
cat > ~/.bashrc <
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
上述的set +h是关闭bash的啥希功能。Hash功能是一个比较有用的功能,它维护着一张hash表,用来记录之前运行过的可执行文件的完整路径,这样,当需要重启运行相同的可执行文件时,就不需要从PATH环境变量所指定的路径去搜索了。这样可以节省时间。但是,因为在安装LFS时,刚刚安装好的工具可能立即就会被使用,这样避免系统使用相同的过时的可执行文件,就关闭hash功能。
LC_ ALL 是本地化的一个环境变量。
source ~/.bash_profile
二、构建临时系统(手册中的第5章)
1、注意点
a. 临时动态库是交叉编译的。因为一个交叉编译器可以不依赖于其主机提供的头文件和动态库,从而减小了对目标系统所带来的影响。同时,交叉编译也可以在64位硬件上同时编译32位的应用和64位的应用。
b. 下述的编译安装默认是提前解压好对应的安装包,并切换到新产生的目录下;
c. 编译安装好一个安装包后,应删除之前解压的源码包目录,和编译的临时目录,以勉重复安装或带来的其它影响;
三、第一阶段编译安装
1、编译安装Binutils工具包
Binutils工具包包含连接器、装载器和其它处理文件对象的工具。
tar -jxvf binutils-2.20.1.tar.bz2
mkdir -v ../binutils-build
../binutils-2.20.1/configure \
--target=$LFS_TGT --prefix=/tools \
--disable-nls --disable-werror
make
make install
cd ..
rm -rf binutils-2.20.1
rm -rf binutils-build
注意:
Binutils是需要第一个被编译和安装的工具包,因为Glibc 和GCC需要使用这个工具包提供的连接器和装载器进行检查哪些特性是可用的。
Binutils文档推荐编译binutils需要在源码包目录之外的目录下进行编译。
2、编译安装GCC-4.5.1
Gcc包含C/C++编译器, 是GNU编译器套件。
Gcc现在需要GMP,MPFR和MPC包。因为这些包不包含在主机系统中,所以这里将其与GCC一同编译。
tar -jxvf gcc-4.5.1.tar.bz2
cd gcc-4.5.1
tar -jxf ../mpfr-3.0.0.tar.bz2
mv -v mpfr-3.0.0 mpfr
tar -jxf ../gmp-5.0.1.tar.bz2
mv -v gmp-5.0.1 gmp
tar -zxf ../mpc-0.8.2.tar.gz
mv -v mpc-0.8.2 mpc
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-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \
--without-ppl --without-cloog
--disable-shared选项迫使GCC连接其内部的连接库,这样可以尽量避免主机带来的影响。
--disable-decimal-float, --disable-threads, --disable-libmudflap,
--disable-libssp, --disable-libgomp选项禁止浮点,线程,libmudflap,libssp和libgomp等特性。这些特性将会导致构建交叉编译器的时候出错,而这些特性在交叉编译临时libc时不需要。
make
make install
ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
sed 's/libgcc/&_eh/'`
cd ..
rm -rf gcc-build
rm -rf gcc-4.5.1
注意:
gcc文档推荐编译gcc需要在源码包目录之外的目录下进行编译
3、安装Linux-2.6.35.4 API头文件
Linux API头暴露linux内核的API接口给Glibc使用,即提供内核调用接口。
tar -jxvf linux-2.6.35.4.tar.bz2
cd linux-2.6.35.4
make mrproper 清除之前编译的影响
make headers_check
make INSTALL_HDR_PATH=dest headers_install
cd ..
rm -rf linux-2.6.35.4
4、Glibc-2.12.1编译安装
Glibc包包含主要的C库。这些库提供最基本的内存分配、目录搜索、文件的打开和关闭、文件的打开和读写、字符串处理、模板匹配、算术等功能。
为了修复gcc-4.5.1的bug,应打如下补丁。
tar -jxvf 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
mkdir -v ../glibc-build
cd ../glibc-build
因为Glibc现在不支持i386的架构,它的开发者说在编译的时候使用 - march=i486标志可以解决支持i386架构的问题。有多种方法可以解决这个问题,但是实验下来,将标志放置在“CFLAGS”变量里是最好的方法。在Glibc内部中最彻底的替换CGLAGS变量是将新的标志添加到configparms文件里的现有的CFLAGS变量的后面。
case `uname -m` in
i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;
esac
../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
cd ..
rm -rf glibc-build
rm -rf glibc-2.12.1
5、调整工具链
到这里C语言库被安装了,在接下来的工具包的安装将会针对这些C语言库进行连接。为了达到这个目的,交叉编译器的 specs文件需要被调整,以便指到新的在/tools目录下的连接器。
将编译器的specs文件导到它默认搜索位置就可以做到这一点,通过简单的sed替换来完成这个操作。
SPECS=`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/specs
$LFS_TGT-gcc -dumpspecs | sed \
-e 's@/lib\(64\)\?/ld@/tools&@g' \
-e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS
echo "New specs file is: $SPECS"
unset SPECS
echo 'main(){}' > dummy.c
$LFS_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'
rm -v dummy.c a.out
6、Binutils-2.20.1第二阶段
本次安装Binutils也可以当作是前面工具链是否编译安装正常的检查,如果本次binutils编译安装出错,则说明前面工具链编译安装部分不正确,需要重新安装工具链部分。
tar -jxvf binutils-2.20.1.tar.bz2
cd binutils-2.20.1
mkdir -v ../binutils-build
cd ../binutils-build
CC="$LFS_TGT-gcc -B/tools/lib/" \
AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
../binutils-2.20.1/configure --prefix=/tools \
--disable-nls --with-lib-path=/tools/lib
make
make install
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
cd ..
rm -rf binutils-build
rm -rf binutils-2.20.1
7、编译安装GCC-4.5.1第二阶段
tar -jxvf gcc-4.5.1.tar.bz2
cd gcc-4.5.1
patch -Np1 -i ../gcc-4.5.1-startfiles_fix-1.patch
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/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
> gcc/Makefile.in
for file in \
$(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
cp -uv $file{,.orig}
sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
-e 's@/usr@/tools@g' $file.orig > $file
echo '
#undef STANDARD_INCLUDE_DIR
#define STANDARD_INCLUDE_DIR 0
#define STANDARD_STARTFILE_PREFIX_1 ""
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
touch $file.orig
Done
tar -jxf ../mpfr-3.0.0.tar.bz2
mv -v mpfr-3.0.0 mpfr
tar -jxf ../gmp-5.0.1.tar.bz2
mv -v gmp-5.0.1 gmp
tar -zxf ../mpc-0.8.2.tar.gz
mv -v mpc-0.8.2 mpc
mkdir -v ../gcc-build
cd ../gcc-build
CC="$LFS_TGT-gcc -B/tools/lib/" \
AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
../gcc-4.5.1/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 --disable-multilib \
--disable-bootstrap --disable-libgomp \
--with-gmp-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \
--without-ppl --without-cloog
make
make install
ln -vs gcc /tools/bin/cc
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
rm -v dummy.c a.out
cd ..
rm -rf gcc-build
rm -rf gcc-4.5.1
8、编译安装Tcl-8.5.8工具包
Tcl包包含工具体命令语言。这个包和接下来要安装的两包Expect 和 DejaGNU是用于GCC和Binutils在程序运行进行测试的工具。
tar -zxvf tcl8.5.8-src.tar.gz
cd tcl8.5.8
cd unix
./configure --prefix=/tools
make
TZ=UTC make test
make install
chmod -v u+w /tools/lib/libtcl8.5.so
make install-private-headers
ln -sv tclsh8.5 /tools/bin/tclsh
cd ../../
rm -rf tcl8.5.8
9、编译安装Expect-5.44.1.15
Expect包含了与其它脚本程序会话的程序
tar -jxvf expect-5.44.1.15.tar.bz2
cd expect-5.44.1.15
patch -Np1 -i ../expect-5.44.1.15-no_tk-1.patch
cp -v configure{,.orig}
sed 's:/usr/local/bin:/bin:' configure.orig > configure
./configure --prefix=/tools --with-tcl=/tools/lib \
--with-tclinclude=/tools/include --with-tk=no
make
make test
make SCRIPTS="" install
cd ..
rm -rf expect-5.44.1.15
10、编译安装DejaGNU-1.4.4
dejaGNU软件包含测试其它软件的一个框架。
tar -zxvf dejagnu-1.4.4.tar.gz
cd dejagnu-1.4.4
patch -Np1 -i ../dejagnu-1.4.4-consolidated-1.patch
./configure --prefix=/tools
make install
make check
cd ..
rm -rf dejagnu-1.4.4
11、编译安装Ncurses-5.7
Ncurses包提供不依赖于终端的库文件,以用于处理字符。
tar -zxvf ncurses-5.7.tar.gz
cd ncurses-5.7
./configure --prefix=/tools --with-shared \
--without-debug --without-ada --enable-overwrite
make
make install
cd ..
rm -rf ncurses-5.7
12、编译安装Bash-4.1
Bash包含Bourne-Again Shell
tar -zxvf bash-4.1.tar.gz
cd bash-4.1
patch -Np1 -i ../bash-4.1-fixes-2.patch
./configure --prefix=/tools --without-bash-malloc
注:
--without-bash-malloc选项关闭bash内存分配函数。这个函数可能引起段错误,关闭它,bash将使用Glibc提供的malloc函数,而Glibc提供的函更稳定一些。
make
make tests
make install
ln -vs bash /tools/bin/sh
cd ..
rm -rf bash-4.1
13、编译安装Bzip2-1.0.5
tar -zxvf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
make
make PREFIX=/tools install
cd ..
rm -rf bzip2-1.0.5
14、编译安装Coreutils-8.5
Coreutils包含显示和设置系统基本特性的工具。
tar -zxvf coreutils-8.5.tar.gz
cd coreutils-8.5
./configure --prefix=/tools --enable-install-program=hostname
make
make install
cp -v src/su /tools/bin/su-tools
cd ..
rm -rf coreutils-8.5
15、编译安装Diffutils-3.0
Diffutils工具包包含比较两个文件或目录不同的工具。也就是diff
tar -zxvf diffutils-3.0.tar.gz
cd diffutils-3.0
./configure --prefix=/tools
make
make install
cd ..
rm -rf diffutils-3.0
16、编译安装File-5.04工具包
File工具包里包含检测文件类型的工具。
tar -zxvf file-5.04.tar.gz
cd file-5.04
./configure --prefix=/tools
make
make install
cd ..
rm -rf file-5.04
17、编译安装Findutils-4.4.2工具包
Findutil工具包包含查找文件的程序。
tar -zxvf findutils-4.4.2.tar.gz
cd findutils-4.4.2
./configure --prefix=/tools
make
make install
cd ..
rm -rf findutils-4.4.2
18、编译安装Gawk-3.1.8工具包
Gawk工具包里包含编辑文本文件的工具。也就是包含awk工具。
tar -jxvf gawk-3.1.8.tar.bz2
cd gawk-3.1.8
./configure --prefix=/tools
make
make install
cd ..
rm -rf gawk-3.1.8
19、编译安装Gettext-0.18.1.1工具包
Gettext包里包含支持国际化和本地化的工具。有了这引起工具,在编译程序时可以支持NLS(Native Language Support,本地化语言支持),可以支持程序输出用户本地化的语言信息。
tar -zxvf gettext-0.18.1.1.tar.gz
cd gettext-0.18.1.1
cd gettext-tools
./configure --prefix=/tools --disable-shared
make -C gnulib-lib
make -C src msgfmt
cp -v src/msgfmt /tools/bin
cd ../../
rm -rf gettext-0.18.1.1
20、编译安装Grep-2.6.3工具包
Grep工具包提供在文件中进行搜索的工具,也就是grep
tar -zxvf grep-2.6.3.tar.gz
cd grep-2.6.3
./configure --prefix=/tools \
--disable-perl-regexp
make
make install
cd ..
rm -rf grep-2.6.3
21、编译安装 Gzip-1.4工具包
tar -zxvf gzip-1.4.tar.gz
cd gzip-1.4
./configure --prefix=/tools
make
make install
cd ..
rm -rf gzip-1.4
22、编译安装M4-1.4.14工具包
M4包含处理器的宏
tar -jxvf m4-1.4.14.tar.bz2
cd m4-1.4.14
sed -i -e '/"m4.h"/a\
#include ' src/path.c
./configure --prefix=/tools
make
make install
cd ..
rm -rf m4-1.4.14
23、编译安装Make-3.82工具包
tar -jxvf make-3.82.tar.bz2
cd make-3.82
./configure --prefix=/tools
make
make install
cd ..
rm -rf make-3.82
24、编译Patch-2.6.1工具包
tar -jxvf patch-2.6.1.tar.bz2
cd patch-2.6.1
./configure --prefix=/tools
make
make install
cd ..
rm -rf patch-2.6.1
25、编译安装Perl-5.12.1工具包
tar -jxvf perl-5.12.1.tar.bz2
cd perl-5.12.1
patch -Np1 -i ../perl-5.12.1-libc-1.patch
sh Configure -des -Dprefix=/tools \
-Dstatic_ext='Data/Dumper Fcntl IO'
make perl utilities ext/Errno/pm_to_blib
cp -v perl pod/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.12.1
cp -Rv lib/* /tools/lib/perl5/5.12.1
cd ..
rm -rf perl-5.12.1
26、编译安装Sed-4.2.1
tar -jxvf sed-4.2.1.tar.bz2
cd sed-4.2.1
./configure --prefix=/tools
make
make install
cd ..
rm -rf sed-4.2.1
27、编译安装Tar-1.23
tar -jxvf tar-1.23.tar.bz2
cd tar-1.23
sed -i /SIGPIPE/d src/tar.c
./configure --prefix=/tools
make
make install
cd ..
rm -rf tar-1.23
28、编译安装Texinfo-4.13a
Texinfo工具包包含读、写和转换info页的工具
tar -zxvf texinfo-4.13a.tar.gz
cd texinfo-4.13
./configure --prefix=/tools
make
make install
cd ..
rm -rf texinfo-4.13
chown -R root:root $LFS/tools
四、构建LFS系统
1、准备虚拟内核文件系统
注意:
以下操作均在root用户下进行,帮在操作之前需要确认$LFS环境变量已经正常设置。
mkdir -v $LFS/{dev,proc,sys}
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
2、进入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
注意:
本节之后的所有操作操作都需要在chroot环境下操作。如果因为某种原因离开了当前环境重新回来,那么需要确保虚拟内核文件系统已经被挂载,并且进入到chroot环境之后才能进行余下的操作。
3、创建目录
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}
4、创建基本文件和连接
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 <
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 <
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
exec /tools/bin/bash --login +h
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
5、Linux-2.6.35.4 API 头编译安装第三阶段
cd sources/
tar -jxvf linux-2.6.35.4.tar.bz2
cd linux-2.6.35.4
make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
find dest/include \( -name .install -o -name ..install.cmd \) -delete
cp -rv dest/include/* /usr/include
cd ..
rm -rf linux-2.6.35.4
6、编译安装Man-pages-3.25第三阶段
tar -jxvf man-pages-3.25.tar.bz2
cd man-pages-3.25
make install
cd ..
rm -rf man-pages-3.25
7、编译安装Glibc-2.12.1
tar -jxvf glibc-2.12.1.tar.bz2
cd glibc-2.12.1
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
sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
patch -Np1 -i ../glibc-2.12.1-gcc_fix-1.patch
patch -Np1 -i ../glibc-2.12.1-makefile_fix-1.patch
mkdir -v ../glibc-build
case `uname -m` in
i?86) echo "CFLAGS += -march=i486 -mtune=native -O3 -pipe" > configparms ;;
esac
../glibc-2.12.1/configure --prefix=/usr \
--disable-profile --enable-add-ons \
--enable-kernel=2.6.22.5 --libexecdir=/usr/lib/glibc
make
cp -v ../glibc-2.12.1/iconvdata/gconv-modules iconvdata
make -k check 2>&1 | tee glibc-check-log
grep Error glibc-check-log
touch /etc/ld.so.conf
make install
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
make localedata/install-locales
cat > /etc/nsswitch.conf <
# 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
cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai \
/etc/localtime
cat > /etc/ld.so.conf <
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
# End /etc/ld.so.conf
EOF
cd ..
rm -rf glibc-build
rm -rf glibc-2.12.1
8、重新调整工具链
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 -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
检查工具链调整的是否正确
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]
注意:
a) 如果平台不行,上述输出的连接器的名称可能稍有不同;
b) 注意上述的连接是放在/lib目录下的,如果不是,那么说明连接器的调整不正确;
检查所使用的启动文件是否正确:
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
检查新的连接器的路径正确:
输出内容如下:
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使用的是正确的动态连接器:
输出如下:
found ld-linux.so.2 at /lib/ld-linux.so.2
rm -v dummy.c a.out dummy.log
9、 编译安装Zlib-1.2.5
tar -jxvf zlib-1.2.5.tar.bz2
cd zlib-1.2.5
sed -i 's/ifdef _LARGEFILE64_SOURCE/ifndef _LARGEFILE64_SOURCE/' zlib.h
CFLAGS='-mstackrealign -fPIC -O3' ./configure --prefix=/usr
make
make check
make install
mv -v /usr/lib/libz.so.* /lib
ln -sfv ../../lib/libz.so.1.2.5 /usr/lib/libz.so
cd ..
rm -rf zlib-1.2.5
10、编译安装Binutils-2.20.1包
tar -jxvf binutils-2.20.1.tar.bz2
cd binutils-2.20.1
验证PTY在chroot环境下工作正常:
expect -c "spawn ls"
上述命令应该输出如下内容:
spawn ls
如果输出内容中包含以下内容则说明PTY工作正常,需要解决后方可继续:
The system has no more ptys.
Ask your system administrator to create more.
rm -fv etc/standards.info
sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.20.1/configure --prefix=/usr \
--enable-shared
make tooldir=/usr
make check
如果检查失败,则需要查找原因,并修正后才能继续
make tooldir=/usr install
cp -v ../binutils-2.20.1/include/libiberty.h /usr/include
cd ..
rm -rf binutils-build/
rm -rf binutils-2.20.1
11、编译安装GMP-5.0.1
tar -jxvf gmp-5.0.1.tar.bz2
cd gmp-5.0.1
ABI=32 ./configure --prefix=/usr --enable-cxx --enable-mpbsd
make
需要保证测试通过
make check 2>&1 | tee gmp-check-log
需要确认162个测试都测试通过
awk '/tests passed/{total+=$2} ; END{print total}' gmp-check-log
make install
mkdir -v /usr/share/doc/gmp-5.0.1
cp -v doc/{isa_abi_headache,configuration} doc/*.html \
/usr/share/doc/gmp-5.0.1
cd ..
rm -rf gmp-5.0.1
12、编译安装MPFR-3.0.0
tar -jxvf mpfr-3.0.0.tar.bz2
cd mpfr-3.0.0
./configure --prefix=/usr --enable-thread-safe \
--docdir=/usr/share/doc/mpfr-3.0.0
make check
make install
make html
make install-html
cd ..
rm -rf mpfr-3.0.0
13、编译安装MPC-0.8.2
tar -zxvf mpc-0.8.2.tar.gz
cd mpc-0.8.2
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf mpc-0.8.2
14、编译安装GCC-4.5.1
tar -jxvf gcc-4.5.1.tar.bz2
cd gcc-4.5.1
用sed替换禁止掉gcc里编译libiberty.a。Libierty.a文件将使用binutils工具包里的。
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
使用sed来使gcc 在编译时强制-fomit-frame-pointer编译选项,以保证编译正确。
case `uname -m` in
i?86) sed -i 's/^T_CFLAGS =$/& -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.5.1/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 --with-system-zlib
make
ulimit -s 16384
make -k check
../gcc-4.5.1/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.5.1/../../../crt1.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../crti.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../crtn.o succeeded
检查编译器能搜索出正确的头文件
grep -B4 '^ /usr/include' dummy.log
输出内容类似如下:
#include search starts here:
/usr/local/include
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/include
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/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");
验证使用的是正确的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
cd ..
rm -rf gcc-build
rm -rf gcc-4.5.1
15、编译安装Sed-4.2.1
tar -jxvf sed-4.2.1.tar.bz2
cd sed-4.2.1
./configure --prefix=/usr --bindir=/bin --htmldir=/usr/share/doc/sed-4.2.1
make
make html
make check
make install
make -C doc install-html
cd ..
rm -rf sed-4.2.1
16、编译安装 Pkg-config-0.25
tar -zxvf pkg-config-0.25.tar.gz
cd pkg-config-0.25
sed -i -e 's/XT])dnl/XT])[]dnl/' \
-e 's/\.])dnl/\.])[]dnl/' pkg.m4
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf pkg-config-0.25
17、编译安装Ncurses-5.7
tar -zxvf ncurses-5.7.tar.gz
cd 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
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
cd ..
rm -rf ncurses-5.7
18、编译 Util-linux-ng-2.18工具包
tar -jxvf util-linux-ng-2.18.tar.bz2
cd util-linux-ng-2.18
sed -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
-i $(grep -rl '/etc/adjtime' .)
mkdir -pv /var/lib/hwclock
./configure --enable-arch --enable-partx --enable-write
make
make install
cd ..
rm -rf util-linux-ng-2.18
19、编译安装E2fsprogs-1.41.12
tar -xvf e2fsprogs-1.41.12.tar.gz
cd e2fsprogs-1.41.12
mkdir -v build
cd build
../configure --prefix=/usr --with-root-prefix="" \
--enable-elf-shlibs --disable-libblkid --disable-libuuid \
--disable-uuidd --disable-fsck
make
make check
make install
make install-libs
chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.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
cd ../../
rm -rf e2fsprogs-1.41.12
20、编译安装 Coreutils-8.5
tar -xvf coreutils-8.5.tar.gz
cd coreutils-8.5
case `uname -m` in
i?86 | x86_64) patch -Np1 -i ../coreutils-8.5-uname-2.patch ;;
esac
patch -Np1 -i ../coreutils-8.5-i18n-1.patch
./configure --prefix=/usr \
--enable-no-install-program=kill,uptime
make
make NON_ROOT_USERNAME=nobody check-root
echo "dummy:x:1000:nobody" >> /etc/group
chown -Rv nobody .
su-tools nobody -s /bin/bash -c "make RUN_EXPENSIVE_TESTS=yes check"
sed -i '/dummy/d' /etc/group
make install
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
mv -v /usr/bin/{head,sleep,nice} /bin
cd ..
rm -rf coreutils-8.5
21、编译安装Iana-Etc-2.30
tar -jxvf iana-etc-2.30.tar.bz2
cd iana-etc-2.30
make
make install
cd ..
rm -rf iana-etc-2.30
22、编译安装M4-1.4.14
tar -jxvf m4-1.4.14.tar.bz2
cd m4-1.4.14
sed -i -e '/"m4.h"/a\
#include ' src/path.c
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf m4-1.4.14
23、编译安装Bison-2.4.3
tar -jxvf bison-2.4.3.tar.bz2
cd bison-2.4.3
./configure --prefix=/usr
echo '#define YYENABLE_NLS 1' >> lib/config.h
make check
make install
cd ..
rm -rf bison-2.4.3
24、编译安装Procps-3.2.8
tar -zxvf procps-3.2.8.tar.gz
cd procps-3.2.8
patch -Np1 -i ../procps-3.2.8-watch_unicode-1.patch
sed -i -e 's@\*/module.mk@proc/module.mk ps/module.mk@' Makefile
make
make install
cd ..
rm -rf /procps-3.2.8
25、编译安装Grep-2.6.3
tar -zxvf grep-2.6.3.tar.gz
cd grep-2.6.3
./configure --prefix=/usr \
--bindir=/bin
make
make check
make install
cd ..
rm -rf grep-2.6.3
26、编译安装Readline-6.1
tar -zxvf readline-6.1.tar.gz
cd readline-6.1
sed -i '/MV.*old/d' Makefile.in
sed -i '/{OLDSUFF}/c:' support/shlib-install
sed -i -e 's/0x0600/0x0601/' \
-e 's/6\.0/6.1/' \
-e 's/RL_VERSION_MINOR\t0/RL_VERSION_MINOR\t1/' readline.h
./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.1
install -v -m644 doc/*.{ps,pdf,html,dvi} \
/usr/share/doc/readline-6.1
cd ..
rm -rf readline-6.1
27、编译安装Bash-4.1
tar -zxvf bash-4.1.tar.gz
cd bash-4.1
patch -Np1 -i ../bash-4.1-fixes-2.patch
./configure --prefix=/usr --bindir=/bin \
--htmldir=/usr/share/doc/bash-4.1 --without-bash-malloc \
--with-installed-readline
make
chown -Rv nobody .
su-tools nobody -s /bin/bash -c "make tests"
make install
exec /bin/bash --login +h
cd ..
rm -rf bash-4.1
28、编译安装Libtool-2.2.10
tar -zxvf libtool-2.2.10.tar.gz
cd libtool-2.2.10
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf libtool-2.2.10
29、编译安装 GDBM-1.8.3
tar -zxvf gdbm-1.8.3.tar.gz
cd gdbm-1.8.3
./configure --prefix=/usr
make
make install
make install-compat
install-info --dir-file=/usr/info/dir /usr/info/gdbm.info
cd ..
rm -rf gdbm-1.8.3
30、编译安装Inetutils-1.8
tar -zxvf inetutils-1.8.tar.gz
cd inetutils-1.8
./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/{hostname,ping,ping6} /bin
mv -v /usr/bin/traceroute /sbin
cd ..
rm -rf inetutils-1.8
31、编译安装Perl-5.12.1
tar -jxvf perl-5.12.1.tar.bz2
cd perl-5.12.1
创建基本的/etc/hosts文件,以便perl的配置文件要求使用它。
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
这个版本的Perl需要编译Compress::Raw::Zlib模块。默认情况下Perl使用其内部的Zlib源代码来编译。下列的命令是让Perl使用已经安装在系统上的Zlib库代替其内容的源代码参与编译。
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|" \
cpan/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" \
-Duseshrplib
make
make test
make install
cd ..
rm -rf perl-5.12.1
32、编译安装Autoconf-2.67
tar -jxvf autoconf-2.67.tar.bz2
cd autoconf-2.67
make
make install
cd ..
rm -rf autoconf-2.67
33、编译安装Automake-1.11.1
tar -jxvf automake-1.11.1.tar.bz2
cd automake-1.11.1
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.11.1
make
make install
cd ..
rm -rf automake-1.11.1
34、编译安装Bzip2-1.0.5
tar -zxvf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
patch -Np1 -i ../bzip2-1.0.5-install_docs-1.patch
patch -Np1 -i ../bzip2-1.0.5-version_fixes-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
cd ..
rm -rf bzip2-1.0.5
35、编译安装Diffutils-3.0
tar -zxvf diffutils-3.0.tar.gz
cd diffutils-3.0
./configure --prefix=/usr
make
make install
cd ..
rm -rf diffutils-3.0
36、编译安装Gawk-3.1.8
tar -jxvf gawk-3.1.8.tar.bz2
cd gawk-3.1.8
./configure --prefix=/usr --libexecdir=/usr/lib
make
make check
make install
mkdir -v /usr/share/doc/gawk-3.1.8
cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} \
/usr/share/doc/gawk-3.1.8
cd ..
rm -rf gawk-3.1.8
37、编译安装File-5.04
tar -zxvf file-5.04.tar.gz
cd file-5.04
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf file-5.04
38、编译安装Findutils-4.4.2
tar -zxvf findutils-4.4.2.tar.gz
cd findutils-4.4.2
./configure --prefix=/usr --libexecdir=/usr/lib/findutils \
--localstatedir=/var/lib/locate
make
make check
make install
mv -v /usr/bin/find /bin
sed -i 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb
cd ..
rm -rf findutils-4.4.2
39、编译安装Flex-2.5.35
tar -jxvf flex-2.5.35.tar.bz2
cd flex-2.5.35
patch -Np1 -i ../flex-2.5.35-gcc44-1.patch
./configure --prefix=/usr
make
make check
make install
ln -sv libfl.a /usr/lib/libl.a
cat > /usr/bin/lex <
#!/bin/sh
# Begin /usr/bin/lex
exec /usr/bin/flex -l "$@"
# End /usr/bin/lex
EOF
chmod -v 755 /usr/bin/lex
mkdir -v /usr/share/doc/flex-2.5.35
cp -v doc/flex.pdf \
/usr/share/doc/flex-2.5.35
cd ..
rm -rf flex-2.5.35
40、编译安装Gettext-0.18.1.1
tar -zxvf gettext-0.18.1.1.tar.gz
cd gettext-0.18.1.1
./configure --prefix=/usr \
--docdir=/usr/share/doc/gettext-0.18.1.1
make
make install
cd ..
rm -rf gettext-0.18.1.1
41、编译安装Groff-1.20.1
tar -zxvf groff-1.20.1.tar.gz
cd groff-1.20.1
PAGE=A4 ./configure --prefix=/usr
make
make docdir=/usr/share/doc/groff-1.20.1 install
ln -sv eqn /usr/bin/geqn
ln -sv tbl /usr/bin/gtbl
cd ..
rm -rf groff-1.20.1
42、编译安装GRUB-1.98
tar -zxvf grub-1.98.tar.gz
cd grub-1.98
./configure --prefix=/usr \
--sysconfdir=/etc \
--disable-grub-emu-usb \
--disable-grub-fstest \
--disable-efiemu
make
make install
cd ..
rm -rf grub-1.98
43、编译安装Gzip-1.4
tar -zxvf gzip-1.4.tar.gz
cd gzip-1.4
./configure --prefix=/usr --bindir=/bin
make
make check
make install
mv -v /bin/{gzexe,uncompress,zcmp,zdiff,zegrep} /usr/bin
mv -v /bin/{zfgrep,zforce,zgrep,zless,zmore,znew} /usr/bin
cd ..
rm -rf gzip-1.4
44、编译安装IPRoute2-2.6.35
tar -jxvf iproute2-2.6.35.tar.bz2
cd iproute2-2.6.35
sed -i '/^TARGETS/s@arpd@@g' misc/Makefile
sed -i '1289i\\tfilter.cloned = 2;' ip/iproute.c
make DESTDIR=
make DESTDIR= SBINDIR=/sbin MANDIR=/usr/share/man \
DOCDIR=/usr/share/doc/iproute2-2.6.35 install
cd ..
rm -rf iproute2-2.6.35
45、编译安装Kbd-1.15.2
tar -zxvf kbd-1.15.2.tar.gz
cd kbd-1.15.2
patch -Np1 -i ../kbd-1.15.2-backspace-1.patch
./configure --prefix=/usr --datadir=/lib/kbd
make
make install
mv -v /usr/bin/{kbd_mode,loadkeys,openvt,setfont} /bin
mkdir -v /usr/share/doc/kbd-1.15.2
cd ..
rm -rf kbd-1.15.2
46、编译安装 Less-436
tar -zxvf less-436.tar.gz
cd less-436
./configure --prefix=/usr --sysconfdir=/etc
make
make install
cd ..
rm -rf less-436
47、编译安装Make-3.82
tar -jxvf make-3.82.tar.bz2
cd make-3.82
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf make-3.82
48、编译安装Man-DB-2.5.7
tar -zxvf man-db-2.5.7.tar.gz
cd man-db-2.5.7
patch -Np1 -i ../man-db-2.5.7-fix_man_assertion-1.patch
./configure --prefix=/usr --libexecdir=/usr/lib \
--docdir=/usr/share/doc/man-db-2.5.7 --sysconfdir=/etc --disable-setuid \
--with-browser=/usr/bin/lynx --with-vgrind=/usr/bin/vgrind \
--with-grap=/usr/bin/grap
make
make check
make install
cd ..
rm -rf man-db-2.5.7
49、编译安装Module-Init-Tools-3.12
tar -jxvf module-init-tools-3.12.tar.bz2
cd module-init-tools-3.12
echo '.so man5/modprobe.conf.5' > modprobe.d.5
./configure
make check
./tests/runtests
make clean
./configure --prefix=/ --enable-zlib-dynamic --mandir=/usr/share/man
make
make INSTALL=install install
cd ..
rm -rf module-init-tools-3.12
50、编译Patch-2.6.1
tar -jxvf patch-2.6.1.tar.bz2
cd patch-2.6.1
patch -Np1 -i ../patch-2.6.1-test_fix-1.patch
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf patch-2.6.1
51、编译安装Psmisc-22.12
tar -zxvf psmisc-22.12.tar.gz
cd psmisc-22.12
sed -i 's@#include @#include \n&@' configure
./configure --prefix=/usr
make
make install
mv -v /usr/bin/fuser /bin
mv -v /usr/bin/killall /bin
cd ..
rm -rf psmisc-22.12
52、编译安装
tar -jxvf shadow-4.1.4.2.tar.bz2
cd shadow-4.1.4.2
sed -i 's/groups$(EXEEXT) //' src/Makefile.in
find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;
sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile.in
sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD MD5@' \
-e 's@/var/spool/mail@/var/mail@' etc/login.defs
./configure --sysconfdir=/etc
make
make install
mv -v /usr/bin/passwd /bin
pwconv
grpconv
sed -i 's/yes/no/' /etc/default/useradd
passwd root
cd ..
rm -rf shadow-4.1.4.2
53、编译安装Sysklogd-1.5
tar -zxvf sysklogd-1.5.tar.gz
cd sysklogd-1.5
make
make BINDIR=/sbin install
cat > /etc/syslog.conf <
# Begin /etc/syslog.conf
auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *
# End /etc/syslog.conf
EOF
cd ..
rm -rf sysklogd-1.5
54、编译安装Sysvinit-2.88dsf
tar -jxvf sysvinit-2.88dsf.tar.bz2
cd sysvinit-2.88dsf
sed -i 's@Sending processes@& configured via /etc/inittab@g' \
src/init.c
sed -i -e 's/utmpdump wall/utmpdump/' \
-e 's/mountpoint.1 wall.1/mountpoint.1/' src/Makefile
make -C src
make -C src install
cat > /etc/inittab <
# Begin /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
# End /etc/inittab
EOF
cd ..
rm -rf sysvinit-2.88dsf
55、编译安装Tar-1.23
tar -jxvf tar-1.23.tar.bz2
cd tar-1.23
sed -i /SIGPIPE/d src/tar.c
patch -Np1 -i ../tar-1.23-overflow_fix-1.patch
./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin
make
sed -i '35 i\
AT_UNPRIVILEGED_PREREQ' tests/remfiles01.at
make check
make install
cd ..
rm -rf tar-1.23
56、编译安装Texinfo-4.13a
tar -zxvf texinfo-4.13a.tar.gz
cd texinfo-4.13
./configure --prefix=/usr
make
make check
make install
make TEXMF=/usr/share/texmf install-tex
cd /usr/share/info
rm -v dir
for f in *
do install-info $f dir 2>/dev/null
done
cd /sources/
rm -rf texinfo-4.13
57、编译安装Udev-161
tar -jxvf udev-161.tar.bz2
cd udev-161
tar -xvf ../udev-config-20100128.tar.bz2
tar -xvf ../udev-161-testfiles.tar.bz2 --strip-components=1
install -dv /lib/{firmware,udev/devices/{pts,shm}}
mknod -m0666 /lib/udev/devices/null c 1 3
./configure --prefix=/usr \
--sysconfdir=/etc --sbindir=/sbin \
--with-rootlibdir=/lib --libexecdir=/lib/udev \
--disable-extras --disable-introspection
make
make check
make install
rmdir -v /usr/share/doc/udev
cd udev-config-20100128
make install
make install-doc
cd ..
rm -rf udev-config-20100128/
rm -rf udev-161
58、编译安装Vim-7.3
tar -jxvf vim-7.3.tar.bz2
cd vim73
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
./configure --prefix=/usr --enable-multibyte
make
make test
make install
ln -sv vim /usr/bin/vi
for L in /usr/share/man/{,*/}man1/vim.1; do
ln -sv vim.1 $(dirname $L)/vi.1
done
ln -sv ../vim/vim73/doc /usr/share/doc/vim-7.3
cat > /etc/vimrc <
" Begin /etc/vimrc
set nocompatible
set backspace=2
syntax on
if (&term == "iterm") || (&term == "putty")
set background=dark
endif
" End /etc/vimrc
EOF
cd ..
rm -rf vim73
五、设置系统启动脚本
1、编译安装LFS-Bootscripts-20100627
tar -jxvf lfs-bootscripts-20100627.tar.bz2
cd lfs-bootscripts-20100627
make install
cd ..
rm -rf lfs-bootscripts-20100627
cat > /etc/sysconfig/clock <
# Begin /etc/sysconfig/clock
UTC=1
# Set this to any options you might need to give to hwclock,
# such as machine hardware clock type for Alphas.
CLOCKPARAMS=
# End /etc/sysconfig/clock
EOF
cat > /etc/sysconfig/console <
# Begin /etc/sysconfig/console
KEYMAP="pl2"
FONT="lat2a-16 -m 8859-2"
# End /etc/sysconfig/console
EOF
2、创建/etc/inputrc 文件
cat > /etc/inputrc <
# Begin /etc/inputrc
# Modified by Chris Lynn
# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off
# Enable 8bit input
set meta-flag On
set input-meta On
# Turns off 8th bit stripping
set convert-meta Off
# Keep the 8th bit for display
set output-meta On
# none, visible or audible
set bell-style none
# All of the following map the escape sequence of the value
# contained in the 1st argument to the readline specific functions
"\eOd": backward-word
"\eOc": forward-word
# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line
# End /etc/inputrc
EOF
cat > /etc/profile <
# Begin /etc/profile
export LANG="zh_CN.GBK"
# End /etc/profile
EOF
echo "HOSTNAME=lfs.shumenol.com" > /etc/sysconfig/network
3、配置网络脚本
for NIC in /sys/class/net/* ; do
INTERFACE=${NIC##*/} udevadm test --action=add $NIC
Done
cat /etc/udev/rules.d/70-persistent-net.rules
cd /etc/sysconfig/network-devices
mkdir -v ifconfig.eth0
cat > ifconfig.eth0/ipv4 <
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.5.125
GATEWAY=192.168.5.2
PREFIX=24
BROADCAST=192.168.5.255
EOF
cat > /etc/resolv.conf <
# Begin /etc/resolv.conf
nameserver 202.96.209.5
nameserver 202.96.209.133
# End /etc/resolv.conf
EOF
六、创建可启动的LFS系统
1、创建/etc/fstab文件
cat > /etc/fstab <
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
/dev/sda6 / ext3 defaults 1 1
/dev/sda1 /boot ext3 defaults 1 1
/dev/sda5 swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
# End /etc/fstab
EOF
2、编译安装Linux内核
cd /sources/
tar -jxvf linux-2.6.35.4.tar.bz2
cd linux-2.6.35.4
make mrproper
make LANG=zh_CN.GBK LC_ALL= menuconfig
make
make modules_install
cp -v arch/x86/boot/bzImage /boot/vmlinux-2.6.35.4-lfs-6.7
cp -v System.map /boot/System.map-2.6.35.4
cp -v .config /boot/config-2.6.35.4
install -d /usr/share/doc/linux-2.6.35.4
cp -r Documentation/* /usr/share/doc/linux-2.6.35.4
install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf <
# Begin /etc/modprobe.d/usb.conf
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
# End /etc/modprobe.d/usb.conf
EOF
七、配置Grup
grub-install --grub-setup=/bin/true /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
grub-setup /dev/sda