LFS官网早已经不开发livecd了,我想玩LFS只能自己制作livecd~
我用过ubuntu,federal,centos,但还是ubuntu用的时间最长。大家都说小白适合用ubuntu,我用linux的时间不长,还算是小白一枚,小白就开始折腾LFS,也不知道是不是我的期望值太高,听说LFS是linux系统里最难折腾的系统?汗颜~~ubuntu用着感觉也还好,就决定用ubuntu制作livecd。网上还真有相关教程,这里要膜拜各路大神~小弟站您们肩膀上了,谢谢!~
我把ubuntu装在虚拟机上,然后裁掉软件,就这个我都折腾了两天主要原因是:卸载得太狠了,把不该卸载的卸载了,系统重启就没法登录了,可以卸载的,好多是它认识我,我不认识它,不敢删~那几天只是在机械的装系统,卸载软件什么的。我用LFS提供的那个版本测试脚本测试系统,并安装缺少的软件,本来我想跟官方提供的那个LFS一样,把78个软件和补丁都放系统里,可惜,系统太大了,足有900多M~只能麻烦点了,我让软件包在编译过程中导入系统,系统明显小了好多,只有635M(还是大,可惜我不想再删软件了,实在是浪费时间)
我用ssh远程登录方式编译安装,只需要复制粘贴就行了
简单吧?不简单~与手动一个字母一个字母输入也就省了点儿时间和精力而已,实际上还是相当繁琐的~我从昨天下午一点多开始折腾,昨晚12点10分休息,今天早上7点16接着开始,一直到9点37(还有课要上的孩子你伤不起啊),中午12点买饭回来边吃边折腾,中午没睡,一直到13点47跑去上课,4点10回来,一直到5点左右才编译完成~可想而知,有多要人命!
最要人命的事,最后还没法登录,提示没有那个部分~
我仔细回忆了一下编译过程,从头开始一直没错误,因为编译中间有好几处需要测试工具链,我的测试结果跟LFS文档上一模一样,分毫不差~只是到第二次剥离软件,并清理退出时(第一次是剥离工具链),显示的都是文件无法识别,我一看差点哭出来,只剩下最后一点了,给我来个这,后来硬着头皮往下编译,果然,最后没法成功~
我分析了一下,我的编译步骤应该没多大问题,那么问题应该出现在ubuntu自身的特性上了,而ubuntu就我所知,有一个很与众不同的特性:那就是它的root权限默认是关闭的,即使您用sudo passwd root命令开启了root权限,在编译LFS时也可能有某些限制~
只是推测,知道具体原因的高人请轻喷,并希望您转告我具体的解决办法,小弟不胜感激~
下一步,我准备折腾一阵arch,arch也是需要手工编译,我可以安装一些我认识的软件,以及我不得不认识的软件,不管其他那些我不要的软件了,没有图形界面也行,server版的ubuntu我也折腾了几天,感觉没什么问题,就是看图片什么的,我想是个蛋疼活~我不是想着三天打渔,两天晒网,我的最终目的是利用LFS制作一个熟悉的系统,不求没有漏洞,只求能满足我的要求,可以随处装B的自己的系统(是不是特庸俗?轻喷)~所以我折腾arch即是为了多了解一点配置命令的含义,又是为了我未来的操作系统制作宿主~
感觉我这个小白太异想天开了,不过谁知道呢 :)
以下是我的操作过程
P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify; }
分区:
输入:n,p,4,2048,+2G,w
输入:n,p,3,4*,+8G,w
查看分区情况:
输入:p
格式化分区:
-
mke2fs -jv /dev/sda3
-
mkswap /dev/sda4
挂载分区:
-
export LFS=/mnt/lfs
-
mkdir -pv $LFS
-
mount -v -t ext3 /dev/sda3 $LFS
-
/sbin/swapon -v /dev/sda4
创建目录:
-
mkdir -v $LFS/sources
-
chmod -v a+wt $LFS/sources
检查:
显示的应该是/mnt/lfs
创建工作链目录:
-
mkdir -v $LFS/tools
-
ln -sv $LFS/tools /
创建用户:
-
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
用lfs登录:
改变工作环境:
-
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
是刚创建的配置文件生效:
最后一遍检查:
进入编译目录:
这一部分所有对软件的编译安装都是为了大家一个可以摆脱宿主系统的环境,所以所有的操作基本都是必不可少的
所有软件的解压包必须删除,因为在搭建环境时,软件包里面的内容已经改变,若不删除直接进行下一步操作,可能导致不可测的结果
########################
#编译安装环境——》》编译安装工具链#
########################
【Binutils-2.22
- Pass 1】
-
tar xvf binutils-2.22.tar.bz2
-
-
cd binutils-2.22
-
-
patch -Np1 -i ../binutils-2.22-build_fix-1.patch
-
-
mkdir -v ../binutils-build
-
-
cd ../binutils-build
-
-
../binutils-2.22/configure \
-
-
--prefix=/tools \
-
-
--with-sysroot=$LFS \
-
-
--with-lib-path=/tools/lib \
-
-
--target=$LFS_TGT \
-
-
--disable-nls \
-
-
--disable-werror
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf binutils-build
-
-
rm -rf binutils-2.22
【GCC-4.7.1
- Pass 1】
-
tar xvf gcc-4.7.1.tar.bz2
-
-
cd gcc-4.7.1
-
-
tar -Jxf ../mpfr-3.1.1.tar.xz
-
-
mv -v mpfr-3.1.1 mpfr
-
-
tar -Jxf ../gmp-5.0.5.tar.xz
-
-
mv -v gmp-5.0.5 gmp
-
-
tar -zxf ../mpc-1.0.tar.gz
-
-
mv -v mpc-1.0 mpc
-
-
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_STARTFILE_PREFIX_1
-
-
#undef STANDARD_STARTFILE_PREFIX_2
-
-
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
-
-
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
-
-
touch $file.orig
-
-
done
-
-
sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure
-
-
mkdir -v ../gcc-build
-
-
cd ../gcc-build
-
-
../gcc-4.7.1/configure \
-
-
--target=$LFS_TGT \
-
-
--prefix=/tools \
-
-
--with-sysroot=$LFS \
-
-
--with-newlib \
-
-
--without-headers \
-
-
--with-local-prefix=/tools \
-
-
--with-native-system-header-dir=/tools/include \
-
-
--disable-nls \
-
-
--disable-shared \
-
-
--disable-multilib \
-
-
--disable-decimal-float \
-
-
--disable-threads \
-
-
--disable-libmudflap \
-
-
--disable-libssp \
-
-
--disable-libgomp \
-
-
--disable-libquadmath \
-
-
--enable-languages=c \
-
-
--with-mpfr-include=$(pwd)/../gcc-4.7.1/mpfr/src \
-
-
--with-mpfr-lib=$(pwd)/mpfr/src/.libs
-
-
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.7.1
【Linux-3.5.2
API Headers】
-
xz -d linux-3.5.2.tar.xz
-
-
tar -xvf linux-3.5.2.tar
-
-
cd linux-3.5.2
-
-
make mrprope
-
-
make headers_check
-
-
make INSTALL_HDR_PATH=dest headers_install
-
-
cp -rv dest/include/* /tools/include
-
-
cd ..
-
-
rm -rf linux-3.5.2
【Glibc-2.16.0】
-
xz -d glibc-2.16.0.tar.xz
-
-
tar -xvf glibc-2.16.0.tar
-
-
cd glibc-2.16.0
-
-
if [ ! -r /usr/include/rpc/types.h ]; then
-
-
su -c 'mkdir -p /usr/include/rpc'
-
-
su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
-
-
fi
-
-
sed -i 's/ -lgcc_s//' Makeconfig
-
-
mkdir -v ../glibc-build
-
-
cd ../glibc-build
-
-
../glibc-2.16.0/configure \
-
-
--prefix=/tools \
-
-
--host=$LFS_TGT \
-
-
--build=$(../glibc-2.16.0/scripts/config.guess) \
-
-
--disable-profile \
-
-
--enable-add-ons \
-
-
--enable-kernel=2.6.25 \
-
-
--with-headers=/tools/include \
-
-
libc_cv_forced_unwind=yes \
-
-
libc_cv_ctors_header=yes \
-
-
libc_cv_c_cleanup=yes
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf glibc-build
-
-
rm -rf glibc-2.16.0
【测试工具链】
-
echo 'main(){}' > dummy.c
-
-
$LFS_TGT-gcc dummy.c
-
-
readelf -l a.out | grep ': /tools'
输出结果类似:
[Requesting
program interpreter: /tools/lib/ld-linux.so.2]
删除测试工具:
【Binutils-2.22
- Pass 2】
-
tar xvf binutils-2.22.tar.bz2
-
-
cd binutils-2.22
-
-
patch -Np1 -i ../binutils-2.22-build_fix-1.patch
-
-
mkdir -v ../binutils-build
-
-
cd ../binutils-build
-
-
CC=$LFS_TGT-gcc \
-
-
AR=$LFS_TGT-ar \
-
-
RANLIB=$LFS_TGT-ranlib \
-
-
../binutils-2.22/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.22
【GCC-4.7.1
- Pass 2】
【再次测试工具链】
-
echo 'main(){}' > dummy.c
-
-
cc dummy.c
-
-
readelf -l a.out | grep ': /tools'
输出结果类似:
[Requesting
program interpreter: /tools/lib/ld-linux.so.2]
删除测试工具:
#########################
#编译安装环境——》》编译安装测试套件#
#########################
【Tcl-8.5.12
and Expect-5.45 and DejaGNU-1.5 and Check-0.9.8】
-
tar xvf tcl8.5.12-src.tar.gz
-
-
cd tcl8.5.12/unix
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
chmod -v u+w /tools/lib/libtcl8.5.so
-
-
make install-private-headers
-
-
ln -sv tclsh8.5 /tools/bin/tclsh
-
-
cd $LFS/sources
-
-
tar xvf expect5.45.tar.gz
-
-
cd expect5.45
-
-
cp -v configure{,.orig}
-
-
sed 's:/usr/local/bin:/bin:' configure.orig > configure
-
-
./configure --prefix=/tools --with-tcl=/tools/lib \
-
-
--with-tclinclude=/tools/include
-
-
make
-
-
make SCRIPTS="" install
-
-
cd $LFS/sources
-
-
tar xvf dejagnu-1.5.tar.gz
-
-
cd dejagnu-1.5
-
-
./configure --prefix=/tools
-
-
make install
-
-
cd $LFS/sources
-
-
tar xvf check-0.9.8.tar.gz
-
-
cd check-0.9.8
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf check-0.9.8
-
-
rm -rf tcl8.5.12
-
-
rm -rf expect5.45
-
-
rm -rf dejagnu-1.5
#############################
#编译安装环境——》》搭建环境以摆脱宿主系统#
#############################
【Ncurses-5.9】
-
tar xvf ncurses-5.9.tar.gz
-
-
cd ncurses-5.9
-
-
./configure --prefix=/tools --with-shared \
-
-
--without-debug --without-ada --enable-overwrite
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf ncurses-5.9
【Bash-4.2】
-
tar xvf bash-4.2.tar.gz
-
-
cd bash-4.2
-
-
patch -Np1 -i ../bash-4.2-fixes-8.patch
-
-
./configure --prefix=/tools --without-bash-malloc
-
-
make
-
-
make install
-
-
ln -vs bash /tools/bin/sh
-
-
cd ..
-
-
rm -rf bash-4.2
【Bzip2-1.0.6】
-
tar xvf bzip2-1.0.6.tar.gz
-
-
cd bzip2-1.0.6
-
-
make
-
-
make PREFIX=/tools install
-
-
cd ..
-
-
rm -rf bzip2-1.0.6
【Coreutils-8.19】
-
xz -d coreutils-8.19.tar.xz
-
-
tar -xvf coreutils-8.19.tar
-
-
cd coreutils-8.19
-
-
./configure --prefix=/tools --enable-install-program=hostname
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf coreutils-8.19
【Diffutils-3.2】
-
tar xvf diffutils-3.2.tar.gz
-
-
cd diffutils-3.2
-
-
sed -i -e '/gets is a/d' lib/stdio.in.h
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf diffutils-3.2
【File-5.11】
-
tar xvf file-5.11.tar.gz
-
-
cd file-5.11
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf file-5.11
【Findutils-4.4.2】
-
tar xvf findutils-4.4.2.tar.gz
-
-
cd findutils-4.4.2
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf findutils-4.4.2
【Gawk-4.0.1】
-
xz -d gawk-4.0.1.tar.xz
-
-
tar -xvf gawk-4.0.1.tar
-
-
cd gawk-4.0.1
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf gawk-4.0.1
【Gettext-0.18.1.1】
-
tar xvf gettext-0.18.1.1.tar.gz
-
-
cd gettext-0.18.1.1
-
-
sed -i -e '/gets is a/d' gettext-*/*/stdio.in.h
-
-
cd gettext-tools
-
-
EMACS="no" ./configure --prefix=/tools --disable-shared
-
-
make -C gnulib-lib
-
-
make -C src msgfmt
-
-
cp -v src/msgfmt /tools/bin
-
-
cd $LFS/sources
-
-
rm -rf gettext-0.18.1.1
【Grep-2.14】
-
xz -d grep-2.14.tar.xz
-
-
tar -xvf grep-2.14.tar
-
-
cd grep-2.14
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf grep-2.14
【Gzip-1.5】
-
xz -d gzip-1.5.tar.xz
-
-
tar -xvf gzip-1.5.tar
-
-
cd gzip-1.5
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf gzip-1.5
【M4-1.4.16】
-
tar xvf m4-1.4.16.tar.bz2
-
-
cd m4-1.4.16
-
-
sed -i -e '/gets is a/d' lib/stdio.in.h
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf m4-1.4.16
【Make-3.82】
-
tar xvf make-3.82.tar.bz2
-
-
cd make-3.82
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf make-3.82
【Patch-2.6.1】
-
tar xvf patch-2.6.1.tar.bz2
-
-
cd patch-2.6.1
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf patch-2.6.1
【Perl-5.16.1】
-
tar xvf perl-5.16.1.tar.bz2
-
-
cd perl-5.16.1
-
-
patch -Np1 -i ../perl-5.16.1-libc-2.patch
-
-
sh Configure -des -Dprefix=/tools
-
-
make
-
-
cp -v perl cpan/podlators/pod2man /tools/bin
-
-
mkdir -pv /tools/lib/perl5/5.16.1
-
-
cp -Rv lib/* /tools/lib/perl5/5.16.1
-
-
cd ..
-
-
rm -rf perl-5.16.1
【Sed-4.2.1】
-
tar xvf sed-4.2.1.tar.bz2
-
-
cd sed-4.2.1
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf sed-4.2.1
【Tar-1.26】
-
tar xvf tar-1.26.tar.bz2
-
-
cd tar-1.26
-
-
sed -i -e '/gets is a/d' gnu/stdio.in.h
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf tar-1.26
【Texinfo-4.13a】
-
tar xvf texinfo-4.13a.tar.gz
-
-
cd texinfo-4.13
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf texinfo-4.13
【Xz-5.0.4】
-
xz -d xz-5.0.4.tar.xz
-
-
tar -xvf xz-5.0.4.tar
-
-
cd xz-5.0.4
-
-
./configure --prefix=/tools
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf xz-5.0.4
#################
#编译安装环境——》》完成#
#################
【剥离】【Stripping】
-
strip --strip-debug /tools/lib/*
-
-
strip --strip-unneeded /tools/{,s}bin/*
-
-
rm -rf /tools/{,share}/{info,man,doc}
【退出lfs】
【改变归属】【Changing
Ownership】
-
chown -R root:root $LFS/tools
【创建用于挂载文件系统的目录】
-
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 proc proc $LFS/proc
-
-
mount -vt sysfs sysfs $LFS/sys
-
-
if [ -h /dev/shm ]; then
-
-
rm -f $LFS/dev/shm
-
-
mkdir $LFS/dev/shm
-
-
fi
-
-
mount -vt tmpfs shm $LFS/dev/shm
【进入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
【创建目录】
-
mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib,mnt,opt,run}
-
-
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/{log,mail,spool}
-
-
ln -sv /run /var/run
-
-
ln -sv /run/lock /var/lock
-
-
mkdir -pv /var/{opt,cache,lib/{misc,locate},local}
【创建必要的文件及符号链接】
-
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
-
-
sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la
-
-
ln -sv bash /bin/sh
-
-
touch /etc/mtab
【配置passwd信息】
-
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
【创建/etc/group文件】
-
cat > /etc/group << "EOF"
-
-
root:x:0:
-
-
bin:x:1:
-
-
sys:x:2:
-
-
kmem:x:3:
-
-
tape:x:4:
-
-
tty: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
【启动一个新的shell】
-
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
######################
#正式编译开始——》》安装必要软件#
######################
【切换到编译目录】
-
cd /sources
-
-
export LFS=/sources
【Linux-3.5.2
API Headers】
-
tar -xvf linux-3.5.2.tar
-
-
cd linux-3.5.2
-
-
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-3.5.2
【Man-pages-3.42】
-
xz -d man-pages-3.42.tar.xz
-
-
tar -xvf man-pages-3.42.tar
-
-
cd man-pages-3.42
-
-
make install
-
-
cd ..
-
-
rm -rf man-pages-3.42
【Glibc-2.16.0】
-
tar -xvf glibc-2.16.0.tar
-
-
cd glibc-2.16.0
-
-
sed -i 's##"rpc/types.h"#' sunrpc/rpc_clntout.c
-
-
sed -i '/test-installation.pl/d' Makefile
-
-
sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
-
-
patch -Np1 -i ../glibc-2.16.0-res_query_fix-1.patch
-
-
mkdir -v ../glibc-build
-
-
cd ../glibc-build
-
-
../glibc-2.16.0/configure \
-
-
--prefix=/usr \
-
-
--disable-profile \
-
-
--enable-add-ons \
-
-
--enable-kernel=2.6.25 \
-
-
--libexecdir=/usr/lib/glibc
-
-
make
-
-
make -k check 2>&1 | tee glibc-check-log
-
-
grep Error glibc-check-log
-
-
touch /etc/ld.so.conf
-
-
make install
-
-
cp -v ../glibc-2.16.0/sunrpc/rpc/*.h /usr/include/rpc
-
-
cp -v ../glibc-2.16.0/sunrpc/rpcsvc/*.h /usr/include/rpcsvc
-
-
cp -v ../glibc-2.16.0/nis/rpcsvc/*.h /usr/include/rpcsvc
-
-
mkdir -pv /usr/lib/locale
-
-
localedef -i zh_CN -f GB18030 zh_CN
-
-
localedef -i zh_CN -f GBK zh_CN
-
-
localedef -i zh_CN -f UTF-8 zh_CN
-
-
localedef -i zh_CN -f GB2312 zh_CN
-
-
localedef -i zh_HK -f UTF-8 zh_CN
-
-
localedef -i zh_HK -f BIG5-HKSCS zh_CN
-
-
localedef -i zh_TW -f EUC-TW zh_CN
-
-
localedef -i zh_TW -f UTF-8 zh_CN
-
-
localedef -i zh_TW -f BIG5 zh_CN
这里我安装的是中文,你可以安装自己想安装的语言,具体安装方法请参考官方发布的LFS
【配置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
【安装时区数据】
-
tar -xf ../tzdata2012e.tar.gz
-
-
ZONEINFO=/usr/share/zoneinfo
-
-
mkdir -pv $ZONEINFO/{posix,right}
-
-
for tz in etcetera southamerica northamerica europe africa antarctica \
-
-
asia australasia backward pacificnew solar87 solar88 solar89 \
-
-
systemv; do
-
-
zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz}
-
-
zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
-
-
zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
-
-
done
-
-
cp -v zone.tab iso3166.tab $ZONEINFO
-
-
zic -d $ZONEINFO -p America/New_York
-
-
unset ZONEINFO
-
-
tzselect
-
-
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
-
-
EOF
-
-
cat >> /etc/ld.so.conf << "EOF"
-
-
# Add an include directory
-
-
include /etc/ld.so.conf.d/*.conf
-
-
EOF
-
-
mkdir /etc/ld.so.conf.d
-
-
cd ..
-
-
rm -rf glibc-build
-
-
rm -rf glibc-2.16.0
【调整工具链】
-
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】
-
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");
-
grep "/lib.*/libc.so.6 " dummy.log
输出类似:
attempt
to open /lib/libc.so.6 succeeded
输出类似:
found
ld-linux.so.2 at /lib/ld-linux.so.2
删除
-
rm -v dummy.c a.out dummy.log
【Zlib-1.2.7】
-
tar xvf zlib-1.2.7.tar.bz2
-
-
cd zlib-1.2.7
-
-
./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
mv -v /usr/lib/libz.so.* /lib
-
-
ln -sfv ../../lib/libz.so.1.2.7 /usr/lib/libz.so
-
-
cd ..
-
-
rm -rf zlib-1.2.7
【File-5.11】
-
tar xvf file-5.11.tar.gz
-
-
cd file-5.11
-
-
./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf file-5.11
【Binutils-2.22】
-
tar xvf binutils-2.22.tar.bz2
-
-
cd binutils-2.22
-
-
expect -c "spawn ls"
输出类似:
spawn
ls
-
rm -fv etc/standards.info
-
-
sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in
-
-
patch -Np1 -i ../binutils-2.22-build_fix-1.patch
-
-
mkdir -v ../binutils-build
-
-
cd ../binutils-build
-
-
../binutils-2.22/configure --prefix=/usr --enable-shared
-
-
make tooldir=/usr
-
-
make -k check
-
-
make tooldir=/usr install
-
-
cp -v ../binutils-2.22/include/libiberty.h /usr/include
-
-
cd ..
-
-
rm -rf binutils-build
-
-
rm -rf binutils-2.22
【GMP-5.0.5】
-
xz -d gmp-5.0.5.tar.xz
-
-
tar -xvf gmp-5.0.5.tar
-
-
cd gmp-5.0.5
-
-
./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-5.0.5
-
-
cp -v doc/{isa_abi_headache,configuration} doc/*.html \
-
-
/usr/share/doc/gmp-5.0.5
-
-
cd ..
-
-
rm -rf gmp-5.0.5
【MPFR-3.1.1】
-
xz -d mpfr-3.1.1.tar.xz
-
-
tar -xvf mpfr-3.1.1.tar
-
-
cd mpfr-3.1.1
-
-
./configure --prefix=/usr \
-
-
--enable-thread-safe \
-
-
--docdir=/usr/share/doc/mpfr-3.1.1
-
-
make
-
-
make check
-
-
make install
-
-
make html
-
-
make install-html
-
-
cd ..
-
-
rm -rf mpfr-3.1.1
【MPC-1.0】
-
tar xvf mpc-1.0.tar.gz
-
-
cd mpc-1.0
-
-
./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf mpc-1.0
【GCC-4.7.1】
-
tar xvf gcc-4.7.1.tar.bz2
-
-
cd gcc-4.7.1
-
-
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
-
-
case `uname -m` in
-
-
i?86) sed -i 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in ;;
-
-
esac
-
-
sed -i -e /autogen/d -e /check.sh/d fixincludes/Makefile.in
-
-
mkdir -v ../gcc-build
-
-
cd ../gcc-build
-
-
../gcc-4.7.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 32768
-
-
make -k check
-
-
../gcc-4.7.1/contrib/test_summary
-
-
make install
-
-
ln -sv ../usr/bin/cpp /lib
-
-
ln -sv gcc /usr/bin/cc
-
-
cd ..
-
-
rm -rf gcc-build
-
-
rm -rf gcc-4.7.1
【测试工具链】
-
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.7.1/../../../crt1.o
succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../crti.o
succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.7.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.7.1/include
/usr/lib/gcc/i686-pc-linux-gnu/4.7.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");
-
grep "/lib.*/libc.so.6 " dummy.log
输出结果类似:
attempt
to open /lib/libc.so.6 succeeded
输出结果类似:
found
ld-linux.so.2 at /lib/ld-linux.so.2
删除
-
rm -v dummy.c a.out dummy.log
-
-
mkdir -pv /usr/share/gdb/auto-load/usr/lib
-
-
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib
【Sed-4.2.1】
-
tar xvf sed-4.2.1.tar.bz2
-
-
cd sed-4.2.1
-
-
patch -Np1 -i ../sed-4.2.1-testsuite_fixes-1.patch
-
-
./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
【Bzip2-1.0.6】
-
tar xvf bzip2-1.0.6.tar.gz
-
-
cd bzip2-1.0.6
-
-
patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
-
-
sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
-
-
sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" 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.6
【Pkg-config-0.27】
-
tar xvf pkg-config-0.27.tar.gz
-
-
cd pkg-config-0.27
-
-
./configure --prefix=/usr \
-
-
--with-internal-glib \
-
-
--docdir=/usr/share/doc/pkg-config-0.27
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf pkg-config-0.27
【Ncurses-5.9】
-
tar xvf ncurses-5.9.tar.gz
-
-
cd ncurses-5.9
-
-
./configure --prefix=/usr --mandir=/usr/share/man --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.9
-
-
cp -v -R doc/* /usr/share/doc/ncurses-5.9
-
-
cd ..
-
-
rm -rf ncurses-5.9
【Util-linux-2.21.2】
-
xz -d util-linux-2.21.2.tar.xz
-
-
tar -xvf util-linux-2.21.2.tar
-
-
cd util-linux-2.21.2
-
-
sed -i -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
-
-
$(grep -rl '/etc/adjtime' .)
-
-
mkdir -pv /var/lib/hwclock
-
-
./configure
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf util-linux-2.21.2
【Psmisc-22.19】
-
tar xvf psmisc-22.19.tar.gz
-
-
cd psmisc-22.19
-
-
./configure --prefix=/usr
-
-
make
-
-
make install
-
-
mv -v /usr/bin/fuser /bin
-
-
mv -v /usr/bin/killall /bin
-
-
cd ..
-
-
rm -rf psmisc-22.19
【E2fsprogs-1.42.5】
-
tar xvf e2fsprogs-1.42.5.tar.gz
-
-
cd e2fsprogs-1.42.5
-
-
mkdir -v build
-
-
cd build
-
-
../configure --prefix=/usr \
-
-
--with-root-prefix="" \
-
-
--enable-elf-shlibs \
-
-
--disable-libblkid \
-
-
--disable-libuuid \
-
-
--disable-uuidd \
-
-
--disable-fsck
-
-
make
-
-
make -k 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.42.5
【Shadow-4.1.5.1】
-
tar xvf shadow-4.1.5.1.tar.bz2
-
-
cd shadow-4.1.5.1
-
-
sed -i 's/groups$(EXEEXT) //' src/Makefile.in
-
-
find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;
-
-
sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \
-
-
-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.5.1
【Coreutils-8.19】
-
tar -xvf coreutils-8.19.tar
-
-
cd coreutils-8.19
-
-
sed -i -e 's/! isatty/isatty/' \
-
-
-e '45i\ || errno == ENOENT' gnulib-tests/test-getlogin.c
-
-
patch -Np1 -i ../coreutils-8.19-i18n-1.patch
-
-
FORCE_UNSAFE_CONFIGURE=1 ./configure \
-
-
--prefix=/usr \
-
-
--libexecdir=/usr/lib \
-
-
--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 nobody -s /bin/bash \
-
-
-c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes -k check || true"
-
-
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/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
-
-
sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8
-
-
mv -v /usr/bin/{head,sleep,nice} /bin
-
-
cd ..
-
-
rm -rf coreutils-8.19
【Iana-Etc-2.30】
-
tar xvf iana-etc-2.30.tar.bz2
-
-
cd iana-etc-2.30
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf iana-etc-2.30
【M4-1.4.16】
-
tar xvf m4-1.4.16.tar.bz2
-
-
cd m4-1.4.16
-
-
sed -i -e '/gets is a/d' lib/stdio.in.h
-
-
./configure --prefix=/usr
-
-
make
-
-
sed -i -e '41s/ENOENT/& || errno == EINVAL/' tests/test-readlink.h
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf m4-1.4.16
【Bison-2.6.2】
-
xz -d bison-2.6.2.tar.xz
-
-
tar -xvf bison-2.6.2.tar
-
-
cd bison-2.6.2
-
-
./configure --prefix=/usr
-
-
echo '#define YYENABLE_NLS 1' >> lib/config.h
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf bison-2.6.2
【Procps-3.2.8】
-
tar xvf procps-3.2.8.tar.gz
-
-
cd procps-3.2.8
-
-
patch -Np1 -i ../procps-3.2.8-fix_HZ_errors-1.patch
-
-
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
【Grep-2.14】
-
tar -xvf grep-2.14.tar
-
-
cd grep-2.14
-
-
./configure --prefix=/usr --bindir=/bin
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf grep-2.14
【Readline-6.2】
-
tar xvf readline-6.2.tar.gz
-
-
cd readline-6.2
-
-
sed -i '/MV.*old/d' Makefile.in
-
-
sed -i '/{OLDSUFF}/c:' support/shlib-install
-
-
patch -Np1 -i ../readline-6.2-fixes-1.patch
-
-
./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.2
-
-
install -v -m644 doc/*.{ps,pdf,html,dvi} \
-
-
/usr/share/doc/readline-6.2
-
-
cd ..
-
-
rm -rf readline-6.2
【Bash-4.2】
-
tar xvf bash-4.2.tar.gz
-
-
cd bash-4.2
-
-
patch -Np1 -i ../bash-4.2-fixes-8.patch
-
-
./configure --prefix=/usr \
-
-
--bindir=/bin \
-
-
--htmldir=/usr/share/doc/bash-4.2 \
-
-
--without-bash-malloc \
-
-
--with-installed-readline
-
-
make
-
-
chown -Rv nobody .
-
-
su nobody -s /bin/bash -c "PATH=$PATH make tests"
-
-
make install
-
-
exec /bin/bash --login +h
-
-
cd ..
-
-
rm -rf bash-4.2
【Libtool-2.4.2】
-
tar xvf libtool-2.4.2.tar.gz
-
-
cd libtool-2.4.2
-
-
./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf libtool-2.4.2
【GDBM-1.10】
-
tar xvf gdbm-1.10.tar.gz
-
-
cd gdbm-1.10
-
-
./configure --prefix=/usr --enable-libgdbm-compat
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf gdbm-1.10
【Inetutils-1.9.1】
-
tar xvf inetutils-1.9.1.tar.gz
-
-
cd inetutils-1.9.1
-
-
sed -i -e '/gets is a/d' lib/stdio.in.h
-
-
./configure --prefix=/usr \
-
-
--libexecdir=/usr/sbin \
-
-
--localstatedir=/var \
-
-
--disable-ifconfig \
-
-
--disable-logger \
-
-
--disable-syslogd \
-
-
--disable-whois \
-
-
--disable-servers
-
-
make
-
-
make check
-
-
make install
-
-
make -C doc html
-
-
make -C doc install-html docdir=/usr/share/doc/inetutils-1.9.1
-
-
cd ..
-
-
rm -rf inetutils-1.9.1
【Perl-5.16.1】
-
tar xvf perl-5.16.1.tar.bz2
-
-
cd perl-5.16.1
-
-
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
-
-
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 -k test
-
-
make install
-
-
cd ..
-
-
rm -rf perl-5.16.1
【Autoconf-2.69】
-
xz -d autoconf-2.69.tar.xz
-
-
tar -xvf autoconf-2.69.tar
-
-
cd autoconf-2.69
-
-
./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf autoconf-2.69
【Automake-1.12.3】
-
xz -d automake-1.12.3.tar.xz
-
-
tar -xvf automake-1.12.3.tar
-
-
cd automake-1.12.3
-
-
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.12.3
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf automake-1.12.3
【Diffutils-3.2】
-
tar xvf diffutils-3.2.tar.gz
-
-
cd diffutils-3.2
-
-
sed -i -e '/gets is a/d' lib/stdio.in.h
-
-
./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf diffutils-3.2
【Gawk-4.0.1】
-
tar -xvf gawk-4.0.1.tar
-
-
cd gawk-4.0.1
-
-
./configure --prefix=/usr --libexecdir=/usr/lib
-
-
make
-
-
make check
-
-
make install
-
-
mkdir -v /usr/share/doc/gawk-4.0.1
-
-
cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-4.0.1
-
-
cd ..
-
-
rm -rf gawk-4.0.1
【Findutils-4.4.2】
-
tar xvf 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
【Flex-2.5.37】
-
tar xvf flex-2.5.37.tar.bz2
-
-
cd flex-2.5.37
-
-
patch -Np1 -i ../flex-2.5.37-bison-2.6.1-1.patch
-
-
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info
-
-
make
-
-
make -k check
-
-
make install
-
-
ln -sv libfl.a /usr/lib/libl.a
-
-
cat > /usr/bin/lex << "EOF"
-
-
#!/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.37
-
-
cp -v doc/flex.pdf /usr/share/doc/flex-2.5.37
-
-
cd ..
-
-
rm -rf flex-2.5.37
【Gettext-0.18.1.1】
-
tar xvf $LFS/gettext-0.18.1.1.tar.gz
-
-
cd gettext-0.18.1.1
-
-
sed -i -e '/gets is a/d' gettext-*/*/stdio.in.h
-
-
./configure --prefix=/usr \
-
-
--docdir=/usr/share/doc/gettext-0.18.1.1
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf gettext-0.18.1.1
【Groff-1.21】
-
tar xvf groff-1.21.tar.gz
-
-
cd groff-1.21
-
-
PAGE=PAGE=A4 ./configure --prefix=/usr
-
-
make
-
-
make install
-
-
ln -sv eqn /usr/bin/geqn
-
-
ln -sv tbl /usr/bin/gtbl
-
-
cd ..
-
-
rm -rf groff-1.21
【Xz-5.0.4】
-
tar -xvf xz-5.0.4.tar
-
-
cd xz-5.0.4
-
-
./configure --prefix=/usr --libdir=/lib --docdir=/usr/share/doc/xz-5.0.4
-
-
make
-
-
make check
-
-
make pkgconfigdir=/usr/lib/pkgconfig install
-
-
cd ..
-
-
rm -rf xz-5.0.4
【GRUB-2.00】
-
xz -d grub-2.00.tar.xz
-
-
tar -xvf grub-2.00.tar
-
-
cd grub-2.00
-
-
sed -i -e '/gets is a/d' grub-core/gnulib/stdio.in.h
-
-
./configure --prefix=/usr \
-
-
--sysconfdir=/etc \
-
-
--disable-grub-emu-usb \
-
-
--disable-efiemu \
-
-
--disable-werror
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf grub-2.00
【Less-444】
-
tar xvf $LFS/less-444.tar.gz
-
-
cd less-444
-
-
./configure --prefix=/usr --sysconfdir=/etc
-
-
make
-
-
make install
-
-
cd ..
-
-
rm -rf less-444
【Gzip-1.5】
-
tar -xvf gzip-1.5.tar
-
-
cd gzip-1.5
-
-
./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.5
【IPRoute2-3.5.1】
-
xz -d iproute2-3.5.1.tar.xz
-
-
tar -xvf iproute2-3.5.1.tar
-
-
cd iproute2-3.5.1
-
-
sed -i '/^TARGETS/s@arpd@@g' misc/Makefile
-
-
sed -i /ARPD/d Makefile
-
-
sed -i 's/arpd.8//' man/man8/Makefile
-
-
make DESTDIR=
-
-
make DESTDIR= \
-
-
MANDIR=/usr/share/man \
-
-
DOCDIR=/usr/share/doc/iproute2-3.5.1 install
-
-
cd ..
-
-
rm -rf iproute2-3.5.1
【Kbd-1.15.3】
-
tar xvf kbd-1.15.3.tar.gz
-
-
cd kbd-1.15.3
-
-
patch -Np1 -i ../kbd-1.15.3-upstream_fixes-1.patch
-
-
patch -Np1 -i ../kbd-1.15.3-backspace-1.patch
-
-
sed -i '/guardado\ el/s/\(^.*en\ %\)\(.*\)/\14\$\2/' po/es.po
-
-
sed -i 's/\(RESIZECONS_PROGS=\)yes/\1no/' configure &&
-
-
sed -i 's/resizecons.8 //' man/man8/Makefile.in &&
-
-
touch -d '2011-05-07 08:30' configure.ac
-
-
./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.3
-
-
cp -R -v doc/* \
-
-
/usr/share/doc/kbd-1.15.3
-
-
cd ..
-
-
rm -rf kbd-1.15.3
【Kmod-9】
-
xz -d kmod-9.tar.xz
-
-
tar -xvf kmod-9.tar
-
-
cd kmod-9
-
-
patch -Np1 -i ../kmod-9-testsuite-1.patch
-
-
./configure --prefix=/usr \
-
-
--bindir=/bin \
-
-
--libdir=/lib \
-
-
--sysconfdir=/etc \
-
-
--with-xz \
-
-
--with-zlib
-
-
make
-
-
make check
-
-
make pkgconfigdir=/usr/lib/pkgconfig install
-
-
for target in depmod insmod modinfo modprobe rmmod; do
-
-
ln -sv ../bin/kmod /sbin/$target
-
-
done
-
-
ln -sv kmod /bin/lsmod
-
-
cd ..
-
-
rm -rf kmod-9
【Libpipeline-1.2.1】
-
tar xvf libpipeline-1.2.1.tar.gz
-
-
cd libpipeline-1.2.1
-
-
sed -i -e '/gets is a/d' gnulib/lib/stdio.in.h
-
-
PKG_CONFIG_PATH=/tools/lib/pkgconfig ./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf libpipeline-1.2.1
【Make-3.82】
-
tar xvf $LFS/make-3.82.tar.bz2
-
-
cd make-3.82
-
-
patch -Np1 -i ../make-3.82-upstream_fixes-2.patch
-
-
./configure --prefix=/usr
-
-
make
-
-
make check
-
-
make install
-
-
cd ..
-
-
rm -rf make-3.82
【Man-DB-2.6.2】
-
xz -d man-db-2.6.2.tar.xz
-
-
tar -xvf man-db-2.6.2.tar
-
-
cd man-db-2.6.2
-
-
sed -i -e '/gets is a/d' gnulib/lib/stdio.in.h
-
-
./configure --prefix=/usr \
-
-
--libexecdir=/usr/lib \
-
-
--docdir=/usr/share/doc/man-db-2.6.2 \
-
-
--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.6.2
【Patch-2.6.1】
-
tar xvf 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 -k check
-
-
make install
-
-
cd ..
-
-
rm -rf patch-2.6.1
【Sysklogd-1.5】
-
tar xvf sysklogd-1.5.tar.gz
-
-
cd sysklogd-1.5
-
-
make
-
-
make BINDIR=/sbin install
-
-
cat > /etc/syslog.conf << "EOF"
-
-
# 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
【Sysvinit-2.88dsf】
-
tar xvf 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 '/= mountpoint/d' \
-
-
-e 's/mountpoint.1 wall.1//' src/Makefile
-
-
make -C src
-
-
make -C src install
-
-
cd ..
-
-
rm -rf sysvinit-2.88dsf
【Tar-1.26】
-
tar xvf tar-1.26.tar.bz2
-
-
cd tar-1.26
-
-
sed -i -e '/gets is a/d' gnu/stdio.in.h
-
-
FORCE_UNSAFE_CONFIGURE=1 \
-
-
./configure --prefix=/usr \
-
-
--bindir=/bin \
-
-
--libexecdir=/usr/sbin
-
-
make
-
-
make check
-
-
make install
-
-
make -C doc install-html docdir=/usr/share/doc/tar-1.26
-
-
cd ..
-
-
rm -rf tar-1.26
【Texinfo-4.13a】
-
tar xvf 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
【Udev-188
(Extracted from systemd-188)】
-
xz -d systemd-188.tar.xz
-
-
tar -xvf systemd-188.tar
-
-
cd systemd-188
-
-
tar -xvf ../udev-lfs-188-3.tar.bz2
-
-
make -f udev-lfs-188/Makefile.lfs
-
-
make -f udev-lfs-188/Makefile.lfs install
-
-
bash udev-lfs-188/init-net-rules.sh
-
-
cd ..
-
-
rm -rf systemd-188
【Vim-7.3】
-
tar xvf 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 << "EOF"
-
-
" 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
【Stripping
Again】
-
logout
-
-
chroot $LFS /tools/bin/env -i \
-
-
HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
-
-
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
-
-
/tools/bin/bash --login
-
-
/tools/bin/find /{,usr/}{bin,lib,sbin} -type f \
-
-
-exec /tools/bin/strip --strip-debug '{}' ';'
【Cleaning
Up】
-
chroot "$LFS" /usr/bin/env -i \
-
-
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
-
-
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
-
-
/bin/bash --login
我的操作到这里出错了,原因还是未明,以下没多少了,我也就不贴出来,贻笑大方了~